Roznosci.
authorŁukasz Rekucki <lrekucki@gmail.com>
Wed, 21 Oct 2009 21:27:20 +0000 (23:27 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Wed, 21 Oct 2009 21:27:20 +0000 (23:27 +0200)
apps/api/handlers/library_handlers.py
apps/api/handlers/text_handler.py
apps/api/views.py
apps/explorer/views.py
platforma/static/css/html.css
platforma/static/js/app.js
platforma/static/js/models.js

index aef1e9c..d510aa4 100644 (file)
@@ -305,7 +305,7 @@ class DocumentHTMLHandler(BaseHandler):
                 return error
 
             return librarian.html.transform(document.data('xml'), is_file=False, \
-                parse_dublincore=False, stylesheet=stylesheet,\
+                parse_dublincore=False, stylesheet='full',\
                 options={
                     "with-paths": 'boolean(1)',                    
                 })
@@ -313,6 +313,9 @@ class DocumentHTMLHandler(BaseHandler):
         except (EntryNotFound, RevisionNotFound), e:
             return response.EntityNotFound().django_response({
                 'reason': 'not-found', 'message': e.message})
+        except librarian.ValidationError, e:
+            return response.InternalError().django_response({
+                'reason': 'xml-non-valid', 'message': e.message })
         except librarian.ParseError, e:
             return response.InternalError().django_response({
                 'reason': 'xml-parse-error', 'message': e.message })
index 5e34ab4..31f958d 100644 (file)
@@ -71,7 +71,7 @@ class DocumentTextHandler(BaseHandler):
 
             if xchunk is None:
                 return response.EntityNotFound().django_response({
-                      'reason': 'no-part-in-document',
+                      'reason': 'no-chunk-in-document',
                       'path': chunk
                 })
 
index b96fc47..a811802 100644 (file)
@@ -1,6 +1,10 @@
 # Create your views here.
 
+import logging
+log = logging.getLogger('platforma.render')
+
 from django.http import HttpResponse
+import librarian
 from librarian import html
 from lxml import etree
 from StringIO import StringIO
@@ -12,17 +16,16 @@ def render(request):
     style_filename = html.get_stylesheet('partial')
 
     data = request.POST['fragment']
-    path = request.POST['part']
+    path = request.POST['chunk']
 
     base, me = path.rsplit('/', 1)
     match = re.match(r'([^\[]+)\[(\d+)\]', me)
-    tag, pos = match.groups()
-
-    print "Redner:", path, base, tag, pos
+    tag, pos = match.groups()   
 
     style = etree.parse(style_filename)
 
-    data = LINE_SWAP_EXPR.sub(u'<br />\n', data)
+    data = u'<chunk>%s</chunk>' % LINE_SWAP_EXPR.sub(u'<br />\n', data)
+    log.info(data)    
     doc = etree.parse( StringIO(data) )
 
     opts = {
@@ -31,11 +34,7 @@ def render(request):
         'base-offset': pos,
     }
 
-    print opts
-    
     result = doc.xslt(style, **opts)
-
-    print result
-    
-    return HttpResponse(
-        etree.tostring(result, encoding=unicode, pretty_print=True) )
\ No newline at end of file
+    log.info( str(doc), str(result) )
+        
+    return HttpResponse( librarian.serialize_children(result.getroot()) )
\ No newline at end of file
index eff1b04..b17b8c8 100644 (file)
@@ -53,7 +53,7 @@ def file_list(request):
     })
 
 @permission_required('api.document.can_add')
-def file_upload(request, repo):
+def file_upload(request):
     from api.resources import library_resource
     from api.forms import DocumentUploadForm
     from django.http import HttpRequest, HttpResponseRedirect
index fcc111e..105f05a 100644 (file)
@@ -1,5 +1,9 @@
 /* Style widoku HTML. Nie należy tu ustawiać position ani marginesów */
+
+@namespace wl2o "";
+
 .htmlview {
+    counter-reset: main;
     font-size: 16px;
     font-family: "Georgia", "Times New Roman", serif;
     line-height: 1.5em;
     text-align: left;
 }
 
-.htmlview .annotation {
-    font-style: normal;
-    font-weight: normal;
-    font-size: 12px;
-}
-
-.htmlview #footnotes .annotation {
-    display: block;
-    float: left;
-    width: 2.5em;
-    clear: both;
-}
-
 .htmlview #footnotes div {
     margin: 1.5em 0 0 0;
 }
 }
 
 .htmlview .strofa {
-    margin: 1.5em 0 0;
+    margin: 1.5em 0 0 auto;    
 }
 
 .htmlview .kwestia .strofa {
     margin: 1em;
 }
 
+/* Przypisy */
+.htmlview .annotation {    
+    vertical-align: super;
+    text-decoration: none;
+    font-size: 0.66em;
+}
+
+.htmlview a:hover {
+    text-decoration: none;
+}
+
+/* .htmlview .annotation:before {
+    content: "[\2217]";
+} */
+
+.htmlview span.annotation:before {
+    content: "[" counter(main) "]";
+    counter-increment: main;
+}
+
+.htmlview *[wl2o\:editable] {
+    background-color: pink;
+}
+
+.htmlview *[wl2o\:editable] *[wl2o\:editable] {
+    background-color: red;
+}
+
+
+.htmlview .annotation:hover {
+    background-color: #dfdfdf;
+}
+
 .parse-warning .message {
     color: purple;
     font-weight: bold;
index ec19ee3..e870a38 100644 (file)
@@ -198,6 +198,10 @@ function parseXHRError(response)
 
           level = "warning";
       }
+      else if(json.reason == 'xml-non-valid') {
+          message = json.message;
+          level = "warning";
+      }
       else {
          message = json.message || json.reason || "Nieznany błąd :((";
          level = "error";
index d148640..f945238 100644 (file)
@@ -246,8 +246,8 @@ Editor.HTMLModel = Editor.Model.extend({
             data: {
                 revision: this.get('revision'),
                 user: this.document.get('user'),
-                chunk: path,
-                format: 'nl'
+                chunk: path
+                // format: 'nl'
             },
             success: function(data) {
                 self.xmlParts[path] = data;
@@ -268,7 +268,7 @@ Editor.HTMLModel = Editor.Model.extend({
         var path = elem.attr('wl2o:path');
         this.xmlParts[path] = data;
 
-        this.set('state', 'unsynced');
+        this.set('state', 'dirty');
 
         /* re-render the changed fragment */
         $.ajax({
@@ -277,11 +277,11 @@ Editor.HTMLModel = Editor.Model.extend({
             dataType: 'text; charset=utf-8',
             data: {
                 fragment: data,
-                chunk: path,
-                format: 'nl'
+                chunk: path
+                // format: 'nl'
             },
             success: function(htmldata) {
-                elem.replaceWith(htmldata);
+                elem.html(htmldata);
                 self.set('state', 'dirty');
             }
         });