Merge branch 'master' of git@stigma:platforma
authorŁukasz Rekucki <lrekucki@gmail.com>
Fri, 28 Aug 2009 09:53:13 +0000 (11:53 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Fri, 28 Aug 2009 09:53:13 +0000 (11:53 +0200)
Conflicts:

project/static/js/editor.js
project/templates/explorer/editor.html

1  2 
project/static/js/editor.js
project/templates/explorer/editor.html

@@@ -19,19 -19,13 +19,19 @@@ function Panel(panelWrap) 
        });
  }
  
 -Panel.prototype.callHook = function(hookName) {
 +Panel.prototype.callHook = function() {
 +    args = $.makeArray(arguments)
 +    var hookName = args.splice(0,1)[0]
 +    var noHookAction = args.splice(0,1)[0]
 +
 +      $.log('calling hook: ', hookName, 'with args: ', args);
        if(this.hooks && this.hooks[hookName])
 -      {       
 -//            arguments.shift();
 -              $.log('calling hook: ', hookName, 'with args: ', arguments);
 -              return this.hooks[hookName].apply(this, arguments);
 +      {               
 +              return this.hooks[hookName].apply(this, args);
        }
 +    else if (noHookAction instanceof Function)
 +        return noHookAction(args);
 +    else return false;
  }
  
  Panel.prototype.load = function (url) {
@@@ -69,20 -63,16 +69,20 @@@ Panel.prototype.unload = function(event
  }
  
  Panel.prototype.refresh = function(event, data) {
 -      $('.change-notification', this.wrap).fadeOut();
 -      $.log('refreshing view for panel ', this.current_url);
 -      this.load(this.current_url);
 -//    if( this.callHook('refresh') )
 +    reload = function() {
 +      $.log('hard reload for panel ', this.current_url);
 +      this.load(this.current_url);
 +        return true;
 +    }
 +
 +    if( this.callHook('refresh', reload) )
 +      $('.change-notification', this.wrap).fadeOut();
  } 
  
  Panel.prototype.otherPanelChanged = function(other) {
        $.log('panel ', other, ' changed.');
 -      $('.change-notification', this.wrap).fadeIn();
 -      this.callHook('dirty');
 +      if(!this.callHook('dirty'))
 +        $('.change-notification', this.wrap).fadeIn();
  }     
  
  Panel.prototype.markChanged = function () {
@@@ -100,84 -90,101 +100,106 @@@ Panel.prototype.unmarkChanged = functio
  
  Panel.prototype.saveInfo = function() {
        var saveInfo = {};
 -      this.callHook('saveInfo', saveInfo);
 +      this.callHook('saveInfo', null, saveInfo);
        return saveInfo;
  }
  
  
  function Editor() {
-       // editor initialization
-       // this is probably a good place to set config
+       this.rootDiv = $('#panels');
  }
  
  Editor.prototype.setupUI = function() {
        // set up the UI visually and attach callbacks
        var self = this;
-       var panelRoot = $('#panels');
-       self.rootDiv = panelRoot;
++   
++     $('*.panel-wrap:last', this.rootDiv).addClass('last-panel');       
      
-     $('*.panel-wrap:last', panelRoot).addClass('last-panel');       
-     // Set panel widths from options.panelRatios
-     if (self.options && self.options.panelRatios) {
-         var totalWidth = 0;
-         $('.panel-wrap', panelRoot).each(function(index) {
-             var panelWidth = self.options.panelRatios[index] * panelRoot.width();
-             if ($(this).hasClass('last-panel')) {
-                 $(this).css({
-                     left: totalWidth,
-                     right: 0,
-                 });
-             } else {
-                 $(this).css({
-                     left: totalWidth,
-                     width: panelWidth,
-                 });
-                 totalWidth += panelWidth;               
-             }
-         });
-     }
-     
-       panelRoot.makeHorizPanel({}); // TODO: this probably doesn't belong into jQuery
-     panelRoot.css('top', ($('#header').outerHeight() ) + 'px');
+       self.rootDiv.makeHorizPanel({}); // TODO: this probably doesn't belong into jQuery
+     self.rootDiv.css('top', ($('#header').outerHeight() ) + 'px');
      
        $('#panels > *.panel-wrap').each(function() {
                var panelWrap = $(this);
                $.log('wrap: ', panelWrap);
-               panelWrap.data('ctrl', new Panel(panelWrap)); // attach controllers to wraps
-           $('.panel-toolbar select', panelWrap).change(function() {
-                       panelWrap.data('ctrl').load( $(this).val() );
-           });
-       });     
-       $('#toolbar-button-save').click( function (event, data) { self.saveToBranch(); } );
-     
-     panelRoot.bind('stopResize', function() {
-         var panelRatios = [];
-         $('.panel-wrap', panelRoot).each(function() {
-             panelRatios.push($(this).width() / panelRoot.width());
+               panel = new Panel(panelWrap);
+               panelWrap.data('ctrl', panel); // attach controllers to wraps
+         panel.load($('.panel-toolbar select', panelWrap).val());
+         
+         $('.panel-toolbar select', panelWrap).change(function() {
+             var url = $(this).val();
+             panelWrap.data('ctrl').load(url);
+             self.savePanelOptions();
          });
-         self.options.panelRatios = panelRatios;
-         $.log($.toJSON(self.options));
-         $.cookie('options', $.toJSON(self.options), { expires: 7, path: '/'});
 -    });       
 +    });
 +
 +      $(document).bind('panel:contentChanged', function(event, data) {
 +        $('#toolbar-button-save').removeAttr('disabled');
 +      });
+     
+     $('#toolbar-button-save').click( function (event, data) { self.saveToBranch(); } );
 -    
+     self.rootDiv.bind('stopResize', function() { self.savePanelOptions() });
  }
  
  Editor.prototype.loadConfig = function() {
      // Load options from cookie
-       var cookie = $.cookie('options')
-       if (cookie) {
+     var defaultOptions = {
+         panels: [
+             {name: 'htmleditor', ratio: 0.5},
+             {name: 'gallery', ratio: 0.5}
+         ]
+     }
+     
+     try {
+       var cookie = $.cookie('options');
          this.options = $.secureEvalJSON(cookie);
-     } else {
-         // Default options
-         this.options = {panelRatios: [0.5, 0.5]}
+         if (!this.options) {
+             this.options = defaultOptions;
+         }
+     } catch (e) {    
+         this.options = defaultOptions;
      }
+     $.log(this.options);
+     
+     this.loadPanelOptions();
+ }
+ Editor.prototype.loadPanelOptions = function() {
+     var self = this;
+     var totalWidth = 0;
+     
+     $('.panel-wrap', self.rootDiv).each(function(index) {
+         var panelWidth = self.options.panels[index].ratio * self.rootDiv.width();
+         if ($(this).hasClass('last-panel')) {
+             $(this).css({
+                 left: totalWidth,
+                 right: 0,
+             });
+         } else {
+             $(this).css({
+                 left: totalWidth,
+                 width: panelWidth,
+             });
+             totalWidth += panelWidth;               
+         }
+         $.log('panel:', this, $(this).css('left'));
+         $('.panel-toolbar select', this).val(
+             $('.panel-toolbar option[name=' + self.options.panels[index].name + ']', this).attr('value')
+         )
+     });   
+ }
+ Editor.prototype.savePanelOptions = function() {
+     var self = this;
+     var panels = [];
+     $('.panel-wrap', self.rootDiv).not('.panel-content-overlay').each(function() {
+         panels.push({
+             name: $('.panel-toolbar option:selected', this).attr('name'),
+             ratio: $(this).width() / self.rootDiv.width()
+         })
+     });
+     self.options.panels = panels;
+     $.log($.toJSON(self.options));
+     $.cookie('options', $.toJSON(self.options), { expires: 7, path: '/'});
  }
  
  Editor.prototype.saveToBranch = function() {
                                $.log('save errors: ', data.errors)
                        else 
                                self.refreshPanels(changed_panel);
 +            $('#toolbar-button-save').attr('disabled', 'disabled');
                },
                error: function(rq, tstat, err) {
                        $.log('save error', rq, tstat, err);
  {% block breadcrumbs %}<a href="{% url file_list %}">Platforma Redakcyjna</a> ❯ plik {{ hash }}{% endblock breadcrumbs %}
  
  {% block header-toolbar %}
 -      <button type="button" class="toolbar-button" id="toolbar-button-save">Zapisz</button>
 +      <button type="button" class="toolbar-button" id="toolbar-button-save" disabled="disabled">Zapisz</button>
  {% endblock %}
  {% block maincontent %}
          <div id="panels">
 -            <div id="left-panel-wrap" class="panel-wrap">
 -               <div id="left-panel-toolbar" class="panel-toolbar">
 -                    <label for="select-left-panel">Lewy panel:</label>
 -                    <select name="select-left-panel" id="select-left-panel">
 +            {% for n in panel_list %}
 +            <div class="panel-wrap" id="panel-{{n}}">
 +                <div class="panel-toolbar">
 +                    <label for="select-left-panel">{{n|capfirst}} panel:</label>
 +                    <select name="select-left-panel" id="panel-{{n}}-select">
-                         <option value="{% url xmleditor_panel hash %}">Edytor XML</option>
-                         <option value="{% url htmleditor_panel hash %}">Edytor HTML</option>
-                         <option value="{% url gallery_panel hash %}">Galeria skanów</option>
-                         <option value="{% url dceditor_panel hash %}">Edytor DublinCore</option>
+                         <option value="{% url xmleditor_panel hash %}" name="xmleditor">Edytor XML</option>
+                         <option value="{% url htmleditor_panel hash %}" name="htmleditor">Edytor HTML</option>
+                         <option value="{% url gallery_panel hash %}" name="gallery">Galeria skanów</option>
+                         <option value="{% url dceditor_panel hash %}" name="dceditor">Edytor DublinCore</option>
                      </select>
                      <strong class="change-notification" style="display: none">Widok nieaktualny!</strong>
                 </div>
 -               <div id="left-panel-content" class="panel-content"></div>
 -               <button type="button" class="panel-slider" id="slider01"></button>
 -            </div>
 -            <div id="right-panel-wrap" class="panel-wrap last-panel">
 -                <div id="right-panel-toolbar" class="panel-toolbar">
 -                    <label for="select-right-panel">Prawy panel:</label>
 -                    <select name="select-right-panel" id="select-right-panel">
 -                        <option value="{% url xmleditor_panel hash %}" name="xmleditor">Edytor XML</option>
 -                        <option value="{% url htmleditor_panel hash %}" name="htmleditor">Edytor HTML</option>
 -                        <option value="{% url gallery_panel hash %}" name="gallery">Galeria skanów</option>
 -                        <option value="{% url dceditor_panel hash %}" name="dceditor">Edytor DublinCore</option>
 -                    </select>
 -                    <strong class="change-notification" style="display: none">Widok nieaktualny!</strong>
 -                 </div>
 -                 <div id="right-panel-content" class="panel-content"></div>
 +               <div id="panel-{{n}}-content" class="panel-content"></div>
 +               <button type="button" class="panel-slider"></button>
              </div>
 +            {% endfor %}
          </div>
  {% endblock maincontent %}