X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/4607903456ce2c96d5c40d72c603093ef02f5d29..e15a5c7e20d1314575e2ee85b8b238e8f41084df:/platforma/static/js/models.js diff --git a/platforma/static/js/models.js b/platforma/static/js/models.js index d0e7df13..dae64d8a 100755 --- a/platforma/static/js/models.js +++ b/platforma/static/js/models.js @@ -98,7 +98,7 @@ Editor.HTMLModel = Editor.Model.extend({ return false; }, - asWLML: function(element) + asWLML: function(element, inner) { console.log("Source", element); var doc = this.parser.parseFromString(this.serializer.serializeToString(element), 'text/xml'); @@ -111,30 +111,81 @@ Editor.HTMLModel = Editor.Model.extend({ } console.log("Transformed", doc, " to: ", result.documentElement); - return this.serializer.serializeToString(result.documentElement); + if(inner) { + var children = result.documentElement.childNodes; + var buf = ''; + + for(var i=0; i < children.length; i++) + buf += this.serializer.serializeToString(children.item(i)); + + return buf; + } + + return this.serializer.serializeToString(result.documentElement); + }, + + innerAsWLML: function(elem) + { + return this.asWLML(elem, true); + }, + + updateInnerWithWLML: function($element, innerML) + { + var e = $element.clone().html('')[0]; + var s = this.asWLML(e); + // hurray for dirty hacks :P + s = s.replace(/>%<\//, '>'+innerML+''); - var chunk = this.parser.parseFromString(""+text+"", "text/xml"); - - var errors = $('parsererror', chunk); + try { + var chunk = this.parser.parseFromString(""+text+"", "text/xml"); + } catch(e) { + console.log('Caught parse exception.'); + return "

Źle sformatowana zawartość:" + e.toString() + "

"; + } - // check if chunk is parsable - if(errors.length > 0) - throw {text: errors.text(), html: errors.html()}; + var parseError = chunk.getElementsByTagName('parsererror'); + console.log("Errors:", parseError); - var result = this.htmlXSL.transformToFragment(chunk, document); + if(parseError.length > 0) + { + console.log("Parse errors.") + return this.serializer.serializeToString(parseError.item(0)); + } - console.log("RESULT", this.serializer.serializeToString(result)); + console.log("Transforming to HTML"); + var result = this.htmlXSL.transformToFragment(chunk, $element[0].ownerDocument).firstChild; - if(!result) - throw "WLML->HTML transformation failed."; - - $element.replaceWith(result); - this.set('state', 'dirty'); + if(!result) { + return "Błąd aplikacji - nie udało się wygenerować nowego widoku HTML."; + } + + var errors = result.getElementsByTagName('error'); + if(errors.length > 0) + { + var errorMessage = 'Wystąpiły błędy:"; + return errorMessage; + } + + try { + $element.replaceWith(result); + this.set('state', 'dirty'); + return false; + } catch(e) { + return "Błąd podczas wstawiania tekstu: '" + e.toString() + "'"; + } }, createXSLT: function(xslt_doc) { @@ -151,7 +202,9 @@ Editor.HTMLModel = Editor.Model.extend({ if(this.wlmlXSL && this.htmlXSL && this.rawText) this.loadSuccess(); } catch(e) { - this.loadingFailed(); + console.log(e); + this.set('error', e.toString() ); + this.set('state', 'error'); } }, @@ -163,7 +216,9 @@ Editor.HTMLModel = Editor.Model.extend({ if(this.wlmlXSL && this.htmlXSL && this.rawText) this.loadSuccess(); } catch(e) { - this.loadingFailed(); + console.log(e); + this.set('error', e.toString() ); + this.set('state', 'error'); } }, @@ -414,6 +469,22 @@ Editor.ImageGalleryModel = Editor.Model.extend({ this.pages = []; }, + setGallery: function(path) { + $.ajax({ + url: this.serverURL, + type: 'post', + data: { + path: path, + }, + success: this.settingGallerySucceeded.bind(this) + }); + }, + + settingGallerySucceeded: function(data) { + console.log('settingGallerySucceeded'); + this.load(true); + }, + load: function(force) { if (force || this.get('state') == 'empty') { console.log("setting state");