X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/78644811ca0c6042212788dc67add42bc41fb74c..717c14c014e3c988bcb392599a47ffa92630da78:/platforma/static/js/views/html.js diff --git a/platforma/static/js/views/html.js b/platforma/static/js/views/html.js old mode 100644 new mode 100755 index a3db1d28..211b33bc --- a/platforma/static/js/views/html.js +++ b/platforma/static/js/views/html.js @@ -14,15 +14,28 @@ var HTMLView = View.extend({ .addObserver(this, 'state', this.modelStateChanged.bind(this)); $('.htmlview', this.element).html(this.model.get('data')); + + this.$menuTemplate = $(render_template('html-view-frag-menu-template', this)); + this.modelStateChanged('state', this.model.get('state')); this.model.load(); + + this.currentOpen = null; }, modelDataChanged: function(property, value) { $('.htmlview', this.element).html(value); + this.updatePrintLink(); + var self = this; + + $("*[x-editable]").each(function() { + $(this).append( self.$menuTemplate.clone() ); + }); + }, + updatePrintLink: function() { var base = this.$printLink.attr('ui:baseref'); - this.$printLink.attr('href', base + "?revision=" + this.model.get('revision')); + this.$printLink.attr('href', base + "?user="+this.model.document.get('user')+"&revision=" + this.model.get('revision')); }, modelStateChanged: function(property, value) @@ -32,6 +45,7 @@ var HTMLView = View.extend({ if (value == 'synced' || value == 'dirty') { this.unfreeze(); } else if (value == 'unsynced') { + if(this.currentOpen) this.closeWithoutSave(this.currentOpen); this.freeze('Niezsynchronizowany...'); } else if (value == 'loading') { this.freeze('Åadowanie...'); @@ -63,11 +77,10 @@ var HTMLView = View.extend({ if(this.$printLink) this.$printLink.unbind(); this._super(); this.$printLink = $('.html-print-link', this.element); - - var base = this.$printLink.attr('ui:baseref'); - this.$printLink.attr('href', base + "?revision=" + this.model.get('revision')); + this.updatePrintLink(); this.element.bind('click', this.itemClicked.bind(this)); + // this.element.bind('mouseover', this.itemHover.bind(this)); }, reload: function() { @@ -83,65 +96,88 @@ var HTMLView = View.extend({ { var self = this; - console.log('click:', event, event.ctrlKey, event.target); - var editableContent = null; + console.log('click:', event, event.ctrlKey, event.target); var $e = $(event.target); - var n = 0; + if($e.hasClass('edit-button')) + this.openForEdit( this.editableFor($e) ); - while( ($e[0] != this.element[0]) && !($e.attr('wl2o:editable')) - && n < 50) + if($e.hasClass('accept-button')) + this.closeWithSave( this.editableFor($e) ); + + if($e.hasClass('reject-button')) + this.closeWithoutSave( this.editableFor($e) ); + }, + + closeWithSave: function($e) { + var $edit = $e.data('edit-overlay'); + var newText = $('textarea', $edit).val(); + + this.model.putXMLPart($e, newText, function($e, html) { + this.renderPart($e, html); + $edit.remove(); + $e.removeAttr('x-open'); + }.bind(this) ); + this.currentOpen = null; + }, + + closeWithoutSave: function($e) { + var $edit = $e.data('edit-overlay'); + $edit.remove(); + $e.removeAttr('x-open'); + this.currentOpen = null; + }, + + renderPart: function($e, html) { + $e.html(html); + $e.append( this.$menuTemplate.clone() ); + }, + + editableFor: function($button) + { + var $e = $button; + var n = 0; + + while( ($e[0] != this.element[0]) && !($e.attr('x-editable')) && n < 50) { // console.log($e, $e.parent(), this.element); $e = $e.parent(); n += 1; } - - if(!$e.attr('wl2o:editable')) - return true; - - // start edition on this node - - var $overlay = $( - '