Changeset 548


Ignore:
Timestamp:
08/07/06 13:23:07 (8 years ago)
Author:
mokhet
Message:

freeLater() is now able to use an array of properties
free more precisely the properties, instead of freeing the whole object
fix form.submit() from ticket #823
update the original content on dispose
fix window resizing from an inline fucntion i had forgot

Location:
branches/mokhet
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/mokhet/examples/on_demand.php

    r545 r548  
    11<?php 
    2 $content1 = array_key_exists('ta1', $_POST) ? $_POST['ta1'] : '<p>Content ONE here</p>'; 
    3 $content2 = array_key_exists('ta2', $_POST) ? $_POST['ta2'] : '<p>Content TWO here</p>'; 
     2$content1 = array_key_exists('ta1', $_POST) ? stripslashes($_POST['ta1']) : '<p>Content ONE here</p>'; 
     3$content2 = array_key_exists('ta2', $_POST) ? stripslashes($_POST['ta2']) : '<p>Content TWO here</p>'; 
    44// Entitize contents 
    55// Please referer to http://xinha.python-hosting.com/wiki/Entize 
     
    143143padding:2px; 
    144144} 
    145 #resultcontent 
     145#resultcontent, .fromPOST 
    146146{ 
    147147border:1px solid black; 
     
    212212 
    213213</form> 
    214 <div id="resultcontent"></div> 
     214<div id="resultcontent"> 
     215<?php 
     216if ( array_key_exists('ta1', $_POST) ) 
     217{ 
     218  echo '<div class="fromPOST">'.stripslashes($_POST['ta1']).'</div>'; 
     219} 
     220if ( array_key_exists('ta2', $_POST) ) 
     221{ 
     222  echo '<div class="fromPOST">'.stripslashes($_POST['ta2']).'</div>'; 
     223} 
     224?> 
     225</div> 
    215226</body> 
    216227</html> 
  • branches/mokhet/htmlarea.js

    r546 r548  
    169169    this.toFree = []; 
    170170    this._notifyListeners = {}; 
    171     this.freeLater(this, '_notifyListeners'); 
    172171 
    173172    // Panels 
     
    205204      panels[i].div = panels[i].container; // legacy 
    206205      panels[i].container.className = 'panels ' + i; 
    207       this.freeLater(panels[i], 'container'); 
    208       this.freeLater(panels[i], 'div'); 
     206      this.freeLater(panels[i], ['container', 'div']); 
    209207    } 
    210208    // finally store the variable 
    211209    this._panels = panels; 
    212210 
    213     this.freeLater(this, '_textArea'); 
     211    this.freeLater(this, ['_textArea', '_notifyListeners']); 
    214212  } 
    215213} 
     
    881879  toolbar.unselectable = "1"; 
    882880 
    883   this.freeLater(this, '_toolBar'); 
    884   this.freeLater(this, '_toolbar'); 
     881  this.freeLater(this, ['_toolBar', '_toolbar']); 
    885882 
    886883  var tb_row = null; 
     
    10651062      }; 
    10661063       
    1067       editor.freeLater(obj); 
     1064//      editor.freeLater(obj); 
     1065      editor.freeLater(obj, ['element', 'state']); 
    10681066 
    10691067      tb_objects[txt] = obj; 
     
    11261124        }; 
    11271125       
    1128         editor.freeLater(obj); 
     1126//        editor.freeLater(obj); 
     1127        editor.freeLater(obj, ['element', 'state']); 
    11291128 
    11301129        tb_objects[txt] = obj; 
     
    11371136      el = document.createElement("a"); 
    11381137      el.style.display = 'block'; 
    1139       el.href = 'javascript:void(0)'; 
     1138      el.href = '#'; 
    11401139      el.style.textDecoration = 'none'; 
    11411140      el.title = btn[0]; 
     
    11551154        context : btn[4] || null // enabled in a certain context? 
    11561155      }; 
    1157       editor.freeLater(el); 
    1158       editor.freeLater(obj); 
     1156//      editor.freeLater(el); 
     1157//      editor.freeLater(obj); 
     1158      editor.freeLater(obj, ['element', 'cmd', 'state', 'imgel', 'swapImage']); 
    11591159 
    11601160      tb_objects[txt] = obj; 
     
    11621162      // prevent drag&drop of the icon to content area 
    11631163      el.ondrag = function() { return false; }; 
     1164      editor.freeLater(el, 'ondrag'); 
    11641165 
    11651166      // handlers to emulate nice flat toolbar buttons 
     
    11821183          HTMLArea._addClass(el, "buttonActive"); 
    11831184          HTMLArea._removeClass(el, "buttonPressed"); 
    1184           HTMLArea.Events.stop(ev); 
    1185         } 
     1185        } 
     1186        HTMLArea.Events.stop(ev); 
    11861187      } 
    11871188      // when clicked, do the following: 
     
    11971198          } 
    11981199          obj.cmd(editor, obj.name, obj); 
    1199           HTMLArea.Events.stop(ev); 
    1200         } 
     1200        } 
     1201        HTMLArea.Events.stop(ev); 
    12011202      } 
    12021203      HTMLArea.Events.add(el, 'mouseout', el_onmout); 
     
    13871388  statusbar.className = "statusBar"; 
    13881389  this._statusBar = statusbar; 
    1389   this.freeLater(this, '_statusBar'); 
    13901390   
    13911391  // statusbar.appendChild(document.createTextNode(HTMLArea._lc("Path") + ": ")); 
     
    13951395  div.innerHTML = HTMLArea._lc("Path") + ": "; 
    13961396  this._statusBarTree = div; 
    1397   this.freeLater(this, '_statusBarTree'); 
    13981397  this._statusBar.appendChild(div); 
    13991398 
     
    14021401  div.style.display = "none"; 
    14031402  this._statusBarTextMode = div; 
    1404   this.freeLater(this, '_statusBarTextMode'); 
     1403  this.freeLater(this, ['_statusBar', '_statusBarTree', '_statusBarTextMode']); 
    14051404  this._statusBar.appendChild(div); 
    14061405 
     
    15671566  var htmlarea = this._framework.table; 
    15681567  this._htmlArea = htmlarea; 
    1569   this.freeLater(this, '_htmlArea'); 
    15701568  htmlarea.className = "htmlarea"; 
    15711569 
     
    15791577  this._iframe = iframe; 
    15801578  this._iframe.className = 'xinha_iframe'; 
    1581   this.freeLater(this, '_iframe'); 
     1579  this.freeLater(this, ['_htmlArea', '_iframe']); 
    15821580   
    15831581    // creates & appends the status bar 
     
    16011599    function form_onsubmit() 
    16021600    { 
    1603       editor._textArea.value = editor.outwardHtml(editor.getHTML()); 
     1601      if ( !editor.isSubmited ) 
     1602      { 
     1603        // flag to prevent the editor to update original content onDispose if the submit is already done 
     1604        editor.isSubmited = true; 
     1605        editor._textArea.value = editor.outwardHtml(editor.getHTML()); 
     1606      } 
    16041607      return true; 
    16051608    } 
    16061609    HTMLArea.Events.add(textarea.form, 'submit', form_onsubmit, 'prepend'); 
    16071610 
     1611    // onDispose get the HTMLArea content and update original textarea. 
     1612    editor.notifyOn('dispose', form_onsubmit); 
     1613 
     1614    // update the original form.submit() function. See ticket #823 
     1615    if ( !textarea.form.$XINHA_submit ) 
     1616    { 
     1617      textarea.form.$XINHA_submit = textarea.form.submit; 
     1618      textarea.form.submit = function() 
     1619      { 
     1620        for ( var i = this.elements.length; i--; ) 
     1621        { 
     1622          var element = this.elements[i]; 
     1623          if ( element.type == 'textarea' ) 
     1624          { 
     1625            for ( var a = __htmlareas.length; a--; ) 
     1626            { 
     1627              var editor = __htmlareas[a]; 
     1628              if ( editor && editor._textArea == element ) 
     1629              { 
     1630//                element.value = editor.outwardHtml(editor.getHTML()); 
     1631                editor.notifyOf('dispose', editor.config.onDisposeRemoveUI); 
     1632              } 
     1633            } 
     1634          } 
     1635        } 
     1636        this.$XINHA_submit(); 
     1637      }; 
     1638    } 
     1639     
    16081640    // this variable should already be saved when the editor was generating 
    16091641    var initialTAContent = textarea.value; 
     
    17561788      if ( rPanel.on && rPanel.panels.length && HTMLArea.hasDisplayedChildren(rPanel.div) ) 
    17571789      { 
    1758         this._htmlArea.style.width = this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.right, 10); 
     1790        this._htmlArea.style.width = (this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.right, 10)) + 'px'; 
    17591791      } 
    17601792 
     
    17621794      if ( lPanel.on && lPanel.panels.length && HTMLArea.hasDisplayedChildren(lPanel.div) ) 
    17631795      { 
    1764         this._htmlArea.style.width = this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.left, 10); 
     1796        this._htmlArea.style.width = (this._htmlArea.offsetWidth + parseInt(this.config.panel_dimensions.left, 10)) + 'px'; 
    17651797      } 
    17661798    } 
     
    23822414 
    23832415      // on window resize, resize the editor 
    2384       HTMLArea.Events.add(window, 'resize', editor.sizeEditor, false, editor); 
     2416      function win_onresize() { editor.sizeEditor(); } 
     2417      HTMLArea.Events.add(window, 'resize', win_onresize, false, editor); 
    23852418 
    23862419      editor.notifyOn('dispose', 
     
    23892422          HTMLArea.Events.remove(doc, 'mousedown', editor.activateEditor, editor); 
    23902423          HTMLArea.Events.remove(doc, ["keydown", "keypress", "mousedown", "mouseup", "drag"], listener); 
    2391           HTMLArea.Events.remove(window, 'resize', editor.sizeEditor, editor); 
     2424          HTMLArea.Events.remove(window, 'resize', win_onresize, editor); 
    23922425        } 
    23932426      ); 
     
    64686501} 
    64696502 
     6503/* 
     6504--------------------------------------------------------------------------- 
     6505  POSITION 
     6506--------------------------------------------------------------------------- 
     6507*/ 
     6508 
    64706509// find X position of an element 
    64716510HTMLArea.findPosX = function(obj) 
     
    65066545}; 
    65076546 
     6547/* 
     6548--------------------------------------------------------------------------- 
     6549  LOADING MESSAGES 
     6550--------------------------------------------------------------------------- 
     6551*/ 
     6552 
    65086553HTMLArea.prototype.setLoadingMessage = function(string, context, replace) 
    65096554{ 
    6510   if ( !this.config.showLoading || !document.getElementById("loading_sub_" + this._textArea.name) ) 
    6511   { 
    6512     return; 
    6513   } 
    65146555  var elt = document.getElementById("loading_sub_" + this._textArea.name); 
    6515   elt.innerHTML = HTMLArea._lc(string, context, replace); 
     6556  if ( this.config.showLoading && elt ) 
     6557  { 
     6558    elt.innerHTML = HTMLArea._lc(string, context, replace); 
     6559  } 
    65166560}; 
    65176561 
    65186562HTMLArea.prototype.removeLoadingMessage = function() 
    65196563{ 
    6520   if ( !this.config.showLoading || !document.getElementById("loading_" + this._textArea.name) ) 
    6521   { 
    6522     return ; 
    6523   } 
    6524   document.body.removeChild(document.getElementById("loading_" + this._textArea.name)); 
    6525 }; 
    6526  
     6564  var elt = document.getElementById("loading_sub_" + this._textArea.name); 
     6565  if ( this.config.showLoading && elt ) 
     6566  { 
     6567    document.body.removeChild(elt); 
     6568  } 
     6569}; 
     6570 
     6571/* 
     6572--------------------------------------------------------------------------- 
     6573  FREE MEMORY 
     6574--------------------------------------------------------------------------- 
     6575*/ 
     6576 
     6577/** 
     6578 * Cache a reference obj.prop to be later released from memory 
     6579 * @param {object}       obj   The object to free 
     6580 * @param {string|array} prop  The property to release or an array of properties (optional) 
     6581 * @public 
     6582 */ 
    65276583HTMLArea.prototype.freeLater = function(obj,prop) 
    65286584{ 
    6529   this.toFree.push({o:obj,p:prop}); 
     6585  // manage multiple properties with an array 
     6586  if ( prop && typeof prop !== 'string' && prop.length && prop.length > 0 ) 
     6587  { 
     6588    for ( var i = prop.length; i--; ) 
     6589    { 
     6590      this.toFree.push({o:obj,p:prop[i]}); 
     6591    } 
     6592  } 
     6593  else 
     6594  { 
     6595    this.toFree.push({o:obj,p:prop}); 
     6596  } 
    65306597}; 
    65316598 
Note: See TracChangeset for help on using the changeset viewer.