Changeset 1007


Ignore:
Timestamp:
05/22/08 12:55:21 (11 years ago)
Author:
ray
Message:

merging new-dialogs and trunk via intermediate branch

Location:
branches/new-dialogs-merge
Files:
26 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/new-dialogs-merge/Xinha.css

    r980 r1007  
    114114.dialog { 
    115115  color: ButtonText; 
    116   background: ButtonFace; 
    117 } 
    118  
     116  background: ButtonFace;  
     117  border: 1px outset;  
     118  border-color: WindowFrame; 
     119} 
     120div.dialog { 
     121  padding-bottom:10px; 
     122} 
     123.xinha_dialog_background { 
     124  background-color:#666; 
     125  filter: alpha(opacity = 70); 
     126  -moz-opacity: 0.7; 
     127  opacity: 0.7; 
     128  border:none; 
     129} 
    119130.dialog .content { padding: 2px; } 
    120131 
     
    127138.dialog .title, .dialog h1 
    128139{ 
    129   background: #008; 
    130   color: #ff8; 
     140  background: ActiveCaption; 
     141  color: CaptionText; 
    131142  border-bottom: 1px solid #000; 
    132143  padding: 1px 0px 2px 5px; 
     
    134145  font-weight: bold; 
    135146  cursor: default; 
    136 } 
    137 .dialog h1 { margin:0px;} 
     147  letter-spacing: 0.01em; 
     148} 
     149.dialog h1 { margin:0;} 
    138150.dialog .title .button { 
    139151  float: right; 
     
    148160 
    149161.dialog button { 
    150   width: 5em; 
     162  width: 5.5em; 
    151163  padding: 0px; 
    152164} 
    153  
     165.dialog .closeButton { 
     166  padding: 0px; 
     167  cursor: default; 
     168  border: 1px solid; 
     169  border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
     170  height : 11px; 
     171  width : 11px; 
     172  vertical-align : top; 
     173  position : absolute; 
     174  top : 3px; 
     175  right : 2px; 
     176  background-color: ButtonFace; 
     177  color: ButtonText; 
     178  font-size: 13px; 
     179  font-family: Tahoma,Verdana,sans-serif; 
     180  text-align:center; 
     181  letter-spacing:0; 
     182  overflow:hidden; 
     183} 
    154184.dialog .buttonColor { 
    155185  width :1em; 
     
    179209.dialog .label { text-align: right; width: 6em; } 
    180210.dialog .value input { width: 100%; } 
    181 .dialog .buttons { text-align: right; padding: 2px 4px 0px 4px; } 
    182211 
    183212.dialog legend { font-weight: bold; } 
    184213.dialog fieldset table { margin: 2px 0px; } 
    185  
     214  
     215.dialog  .buttons { 
     216 
     217      padding: 1em;  
     218      text-align: center; 
     219} 
     220.dialog .resizeHandle { 
     221    -moz-appearance : resizer; 
     222    width: 12px; 
     223    height: 12px; 
     224    border-bottom: 2px solid #000; 
     225    border-right: 2px solid #000; 
     226    cursor : nw-resize; 
     227} 
    186228.popupwin { 
    187229  padding: 0px; 
     
    229271 
    230272.htmlarea .panel h1 { 
    231   background: ButtonFace; 
    232   border: 1px solid; 
    233   border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; 
    234   margin:   0px; 
    235   padding:  0px; 
    236   font-size:100%; 
    237   font-weight:bold; 
    238   padding: 2px; 
    239273  clear:left; 
    240    
    241 } 
    242  
    243 .htmlarea .panel { overflow:hidden; } 
     274  font-size:0.9em; 
     275} 
     276 
     277.htmlarea .panel {  
     278  overflow:hidden;  
     279  background-color:white; 
     280  padding-bottom:0 !IMPORTANT; 
     281  border: none !IMPORTANT; 
     282} 
    244283.htmlarea .panels.left  .panel { border-right:none; border-left:none; } 
    245284.htmlarea .panels.left  h1     { border-right:none;  } 
  • branches/new-dialogs-merge/XinhaLoader.js

    • Property svn:executable deleted
  • branches/new-dialogs-merge/modules/Dialogs/XinhaDialog.js

    r1006 r1007  
    1  
    21  /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- 
    32    --  Xinha (is not htmlArea) - http://xinha.org 
     
    1312    --      This copyright notice MUST stay intact for use. 
    1413    -- 
    15     --  This is the implementation of the inline dialog (as use by the Linker plugin) 
     14    --  This is the new all-in-one implementation of dialogs for Xinha 
    1615    -- 
    17     --   
    18     -- 
     16 
    1917    -- 
    2018    --  $HeadURL:http://svn.xinha.webfactional.com/trunk/modules/Dialogs/inline-dialog.js $ 
     
    2321    --  $LastChangedBy:ray $ 
    2422    --------------------------------------------------------------------------*/ 
    25 Xinha.Dialog = function(editor, html, localizer) 
    26 { 
     23 
     24/** Xinha Dialog 
     25 * 
     26 * 
     27 * @param editor Xinha object     
     28 * @param html string  
     29 * @param localizer string the "context" parameter for Xinha._lc(), typically the name of the plugin 
     30 * @param size object with two possible properties of the size: width & height as int, where height is optional 
     31 */ 
     32Xinha.Dialog = function(editor, html, localizer, size, options) 
     33{ 
     34  var dialog = this; 
    2735  this.id    = { }; 
    2836  this.r_id  = { }; // reverse lookup id 
    2937  this.editor   = editor; 
    3038  this.document = document; 
    31  
    32   this.rootElem = document.createElement('div'); 
    33   this.rootElem.className = 'dialog'; 
    34   this.rootElem.style.position = 'absolute'; 
    35   this.rootElem.style.display  = 'none'; 
    36   this.editor._framework.ed_cell.insertBefore(this.rootElem, this.editor._framework.ed_cell.firstChild); 
    37   this.rootElem.style.width  = this.width  =  this.editor._framework.ed_cell.offsetWidth + 'px'; 
    38   this.rootElem.style.height = this.height =  this.editor._framework.ed_cell.offsetHeight + 'px'; 
    39  
     39  this.size = size; 
     40  this.modal = (options && options.modal === false) ? false : true; 
     41  this.closable = (options && options.closable === false) ? false : true; 
     42  this.layer = (options && options.layer) ? options.layer : 0; 
     43   
     44   
     45  if (Xinha.is_ie && Xinha.ie_version < 7) 
     46  { // IE6 needs the iframe to hide select boxes 
     47    var backG = document.createElement("iframe"); 
     48    backG.src = "about:blank"; 
     49    backG.onreadystatechange = function ()  
     50    { 
     51      var doc = window.event.srcElement.contentWindow.document; 
     52      if (doc && doc.body) 
     53      { 
     54        doc.body.style.backgroundColor = "#666666"; 
     55      } 
     56    } 
     57  } 
     58  else 
     59  { // Mozilla (<FF3) can't have the iframe, because it hides the caret in text fields 
     60    // see https://bugzilla.mozilla.org/show_bug.cgi?id=226933 
     61    var backG = document.createElement("div"); 
     62  } 
     63  backG.className = "xinha_dialog_background"; 
     64  with (backG.style) 
     65  { 
     66    position = "absolute"; 
     67    top = 0; 
     68    left = 0; 
     69    border = 'none'; 
     70    overflow = "hidden"; 
     71    display = "none"; 
     72    zIndex = (this.modal ? 1025 : 1001 ) + this.layer; 
     73  } 
     74  document.body.appendChild(backG); 
     75  this.background = backG; 
     76 
     77  backG = null; 
     78  Xinha.freeLater(this, "background"); 
     79 
     80  var rootElem = document.createElement('div'); 
     81  //I've got the feeling dragging is much slower in IE7 w/ pos:fixed, besides the strange fact that it only works in Strict mode  
     82  //rootElem.style.position = (Xinha.ie_version < 7 ||(Xinha.is_ie && document.compatMode == "BackCompat") || !this.modal) ? "absolute" : "fixed"; 
     83  rootElem.style.position = (Xinha.is_ie || !this.modal) ? "absolute" : "fixed"; 
     84  rootElem.style.zIndex = (this.modal ? 1027 : 1003 ) + this.layer; 
     85  rootElem.style.display  = 'none'; 
     86   
     87  if (!this.modal) 
     88  { 
     89    Xinha._addEvent(rootElem,'mousedown', function () { Xinha.Dialog.activateModeless(dialog);}); 
     90  } 
     91   
     92  // FIXME: This is nice, but I don't manage to get it switched off on text inputs :( 
     93  // rootElem.style.MozUserSelect = "none"; 
     94   
     95  rootElem.className = 'dialog'; 
     96   
     97 // this.background[1].appendChild(rootElem); 
     98  document.body.appendChild(rootElem); 
     99 
     100  rootElem.style.paddingBottom = "10px"; 
     101  rootElem.style.width = ( size && size.width )  ? size.width + 'px' : ''; 
     102 
     103  if (size && size.height) 
     104  { 
     105    if (Xinha.ie_version < 7) 
     106    { 
     107      rootElem.style.height = size.height + 'px'; 
     108    } 
     109    else 
     110    { 
     111      rootElem.style.minHeight =  size.height + 'px'; 
     112    } 
     113  } 
     114 
     115  html = this.translateHtml(html,localizer) 
     116 
     117  var main = document.createElement('div'); 
     118  rootElem.appendChild(main); 
     119  main.innerHTML = html; 
     120 
     121  //make the first h1 to drag&drop the rootElem 
     122  var captionBar = main.removeChild( main.getElementsByTagName("h1")[0]); 
     123  rootElem.insertBefore(captionBar,main); 
     124  captionBar.onmousedown = function(ev) { dialog._dragStart(ev); }; 
     125   
     126  captionBar.style.MozUserSelect = "none"; 
     127   
     128  this.buttons = document.createElement('div'); 
     129  with (this.buttons.style) 
     130  { 
     131    position = "absolute"; 
     132    top = "0"; 
     133    right = "2px"; 
     134  } 
     135  rootElem.appendChild(this.buttons); 
     136   
     137  this.closer = null; 
     138  if ( this.closable ) 
     139  { 
     140    this.closer = document.createElement('div'); 
     141    this.closer.className= 'closeButton';  
     142       
     143    this.closer.onmousedown = function(ev) { this.className = "closeButton buttonClick"; Xinha._stopEvent((ev) ? ev : window.event); return false;}; 
     144    this.closer.onmouseout = function(ev) { this.className = "closeButton"; Xinha._stopEvent((ev) ? ev : window.event); return false;}; 
     145    this.closer.onmouseup = function() { this.className = "closeButton"; dialog.hide(); return false;}; 
     146   
     147    this.buttons.appendChild(this.closer); 
     148   
     149    var butX = document.createElement('span'); 
     150    butX.className = 'innerX'; 
     151    butX.style.position = 'relative'; 
     152    butX.style.top = '-3px'; 
     153   
     154    butX.appendChild(document.createTextNode('\u00D7')); // cross 
     155    //butX.appendChild(document.createTextNode('\u25AC')); //bar 
     156    //butX.appendChild(document.createTextNode('\u25BA')); //triangle right 
     157    //butX.appendChild(document.createTextNode('\u25B2')); //triangle up 
     158    //butX.appendChild(document.createTextNode('\u25BC')); //triangle down 
     159    this.closer.appendChild(butX); 
     160    butX = null; 
     161  } 
     162   
     163  this.icon = document.createElement('img'); 
     164  with (this.icon) 
     165  { 
     166    className = 'icon'; 
     167    src = _editor_url + 'images/xinha-small-icon.gif'; 
     168    style.position = 'absolute'; 
     169    style.top = '3px'; 
     170    style.left = '2px'; 
     171    ondrag = function () {return false;}; 
     172  } 
     173  captionBar.style.paddingLeft = '22px'; 
     174  rootElem.appendChild(this.icon); 
     175   
     176  var all = rootElem.getElementsByTagName("*"); 
     177 
     178  for (var i=0; i<all.length;i++) 
     179  { 
     180        var el = all[i];  
     181    if (el.tagName.toLowerCase() == 'textarea' || el.tagName.toLowerCase() == 'input') 
     182    { 
     183      // FIXME: this doesn't work 
     184      //el.style.MozUserSelect = "text"; 
     185    } 
     186    else 
     187    { 
     188      el.unselectable = "on"; 
     189    } 
     190  } 
     191 
     192  this.resizer = document.createElement('div'); 
     193  this.resizer.className = "resizeHandle"; 
     194  with (this.resizer.style) 
     195  { 
     196    position = "absolute"; 
     197    bottom = "0px"; 
     198    right= "0px"; 
     199  } 
     200  this.resizer.onmousedown = function(ev) { dialog._resizeStart(ev); }; 
     201  rootElem.appendChild(this.resizer); 
     202   
     203  this.rootElem = rootElem; 
     204  this.captionBar = captionBar; 
     205  this.main = main; 
     206   
     207  captionBar = null; 
     208  rootElem = null; 
     209  main = null; 
     210  resizeHandle = null; 
     211   
     212  Xinha.freeLater(this,"rootElem"); 
     213  Xinha.freeLater(this,"captionBar"); 
     214  Xinha.freeLater(this,"main"); 
     215  Xinha.freeLater(this, "buttons"); 
     216  Xinha.freeLater(this, "closer"); 
     217  Xinha.freeLater(this, "icon"); 
     218  Xinha.freeLater(this, "resizer"); 
     219  Xinha.freeLater(this, "document"); 
     220   
     221  // for caching size & position after dragging & resizing 
     222  this.size = {}; 
     223 
     224}; 
     225 
     226Xinha.Dialog.prototype.onresize = function() 
     227{ 
     228  return true; 
     229}; 
     230 
     231Xinha.Dialog.prototype.show = function(values) 
     232{ 
     233  var rootElem = this.rootElem; 
     234  var rootElemStyle = rootElem.style; 
     235  var modal = this.modal; 
     236  var scrollPos = this.scrollPos = this.editor.scrollPos(); 
    40237  var dialog = this; 
    41   if(typeof localizer == 'function') 
    42   { 
    43     this._lc = localizer; 
    44   } 
    45   else if(localizer) 
    46   { 
    47     this._lc = function(string) 
    48     { 
    49       return Xinha._lc(string,localizer); 
    50     }; 
     238  //dialog.main.style.height = ''; 
     239  if ( this.attached )  
     240  { 
     241    this.editor.showPanel(rootElem); 
     242  } 
     243     
     244  if ( modal ) 
     245  { 
     246    this.posBackground({top:0, left:0});  
     247  } 
     248  
     249  // We need to preserve the selection 
     250  this._lastRange = this.editor.saveSelection(); 
     251   
     252  if (Xinha.is_ie && !modal) 
     253  { 
     254    dialog.saveSelection = function() { dialog._lastRange = dialog.editor.saveSelection();}; 
     255    Xinha._addEvent(this.editor._doc,'mouseup', dialog.saveSelection); 
     256  } 
     257 
     258  if ( modal ) this.editor.deactivateEditor(); 
     259 
     260  // unfortunately we have to hide the editor (iframe/caret bug) 
     261  if (Xinha.is_ff2 && modal) 
     262  { 
     263    this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; 
     264    this.editor._textArea.style.display = 'none'; 
     265    this.editor._iframe.style.visibility   = 'hidden'; 
     266  } 
     267   
     268  if ( !this.attached ) 
     269  { 
     270    this.showBackground(); 
     271    var viewport = Xinha.viewportSize(); 
     272    if ( modal ) 
     273    { 
     274      var pageSize = Xinha.pageSize(); 
     275      this.resizeBackground({width:pageSize.x + "px",height:pageSize.y + "px"}); 
     276    } 
     277    var viewportHeight = viewport.y; 
     278    var viewportWidth = viewport.x; 
     279    //this.onResizeWin = function () {dialog.sizeBackground()}; 
     280    //Xinha._addEvent(window, 'resize', this.onResizeWin ); 
     281 
     282    //rootElemStyle.display   = ''; 
     283        Xinha.Dialog.fadeIn(this.rootElem); 
     284    var dialogHeight = rootElem.offsetHeight; 
     285    var dialogWidth = rootElem.offsetWidth; 
     286 
     287    if (dialogHeight >  viewportHeight) 
     288    { 
     289      rootElemStyle.height =  viewportHeight + "px"; 
     290      if (rootElem.scrollHeight > dialogHeight) 
     291      { 
     292        dialog.main.style.overflowY = "auto"; 
     293      } 
     294    } 
     295 
     296    if(this.size.top && this.size.left) 
     297    { 
     298      rootElemStyle.top =  parseInt(this.size.top,10) + 'px'; 
     299      rootElemStyle.left = parseInt(this.size.left,10) + 'px'; 
     300    } 
     301    else if (this.editor.btnClickEvent) 
     302    { 
     303      var btnClickEvent = this.editor.btnClickEvent; 
     304      if (rootElemStyle.position == 'absolute') 
     305      { 
     306        rootElemStyle.top =  btnClickEvent.clientY + this.scrollPos.y +'px'; 
     307      } 
     308      else 
     309      { 
     310        rootElemStyle.top =  btnClickEvent.clientY +'px'; 
     311      } 
     312 
     313      if (dialogHeight + rootElem.offsetTop >  viewportHeight) 
     314      { 
     315        rootElemStyle.top = (rootElemStyle.position == 'absolute' ? this.scrollPos.y : 0 ) + "px" ; 
     316      } 
     317 
     318      if (rootElemStyle.position == 'absolute') 
     319      { 
     320        rootElemStyle.left = btnClickEvent.clientX +  this.scrollPos.x +'px'; 
     321      } 
     322      else 
     323      { 
     324        rootElemStyle.left =  btnClickEvent.clientX +'px'; 
     325      } 
     326 
     327      if (dialogWidth + rootElem.offsetLeft >  viewportWidth) 
     328      { 
     329        rootElemStyle.left =  btnClickEvent.clientX - dialogWidth   + 'px'; 
     330        if (rootElem.offsetLeft < 0) 
     331        { 
     332          rootElemStyle.left = 0; 
     333        } 
     334      } 
     335      this.editor.btnClickEvent = null; 
     336    } 
     337    else 
     338    { 
     339      var top =  ( viewportHeight - dialogHeight) / 2; 
     340      var left = ( viewportWidth - dialogWidth) / 2; 
     341      rootElemStyle.top =  ((top > 0) ? top : 0) +'px'; 
     342      rootElemStyle.left = ((left > 0) ? left : 0)+'px'; 
     343    } 
     344  } 
     345  this.width = dialogWidth; 
     346  this.height = dialogHeight; 
     347 
     348  if (!modal) 
     349  { 
     350    this.resizeBackground({width: dialogWidth + 'px', height: dialogHeight + 'px' }); 
     351    this.posBackground({top:  rootElemStyle.top, left: rootElemStyle.left}); 
     352  } 
     353  
     354  if(typeof values != 'undefined') 
     355  { 
     356    this.setValues(values); 
     357  } 
     358  this.dialogShown = true; 
     359}; 
     360 
     361Xinha.Dialog.prototype.hide = function() 
     362{ 
     363  if ( this.attached ) 
     364  { 
     365    this.editor.hidePanel(this.rootElem); 
    51366  } 
    52367  else 
    53368  { 
    54     this._lc = function(string) 
    55     { 
    56       return string; 
    57     }; 
    58   } 
    59  
    60   html = html.replace(/\[([a-z0-9_]+)\]/ig, 
    61                       function(fullString, id) 
    62                       { 
    63                         if(typeof dialog.id[id] == 'undefined') 
    64                         { 
    65                           dialog.id[id] = Xinha.uniq('Dialog'); 
    66                           dialog.r_id[dialog.id[id]] = id; 
    67                         } 
    68                         return dialog.id[id]; 
    69                       } 
    70              ).replace(/<l10n>(.*?)<\/l10n>/ig, 
    71                        function(fullString,translate) 
    72                        { 
    73                          return dialog._lc(translate) ; 
    74                        } 
    75              ).replace(/="_\((.*?)\)"/g, 
    76                        function(fullString, translate) 
    77                        { 
    78                          return '="' + dialog._lc(translate) + '"'; 
    79                        } 
    80              ); 
    81  
    82   this.rootElem.innerHTML = html; 
    83  
    84  
    85  
    86  
    87   this.editor.notifyOn 
    88    ('resize', 
    89       function(e, args) 
    90       { 
    91         dialog.rootElem.style.width  = dialog.width  =  dialog.editor._framework.ed_cell.offsetWidth + 'px'; 
    92         dialog.rootElem.style.height = dialog.height =  dialog.editor._framework.ed_cell.offsetHeight + 'px'; 
    93         dialog.onresize(); 
    94       } 
    95     ); 
    96 }; 
    97  
    98 Xinha.Dialog.prototype.onresize = function() 
    99 { 
    100   return true; 
    101 }; 
    102  
    103 Xinha.Dialog.prototype.show = function(values) 
    104 { 
    105   // We need to preserve the selection for IE 
    106   if(Xinha.is_ie) 
    107   { 
    108     this._lastRange = this.editor._createRange(this.editor._getSelection()); 
    109   } 
    110  
    111   if(typeof values != 'undefined') 
    112   { 
    113     this.setValues(values); 
    114   } 
    115   this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; 
    116  
    117   this.editor._textArea.style.display = 'none'; 
    118   this.editor._iframe.style.visibility   = 'hidden'; 
    119   this.rootElem.style.display   = ''; 
    120 }; 
    121  
    122 Xinha.Dialog.prototype.hide = function() 
    123 { 
    124   this.rootElem.style.display         = 'none'; 
    125   this.editor._textArea.style.display = this._restoreTo[0]; 
    126   this.editor._iframe.style.visibility   = this._restoreTo[1]; 
    127   this.editor.showPanels(this._restoreTo[2]); 
    128  
    129   // Restore the selection 
    130   if(Xinha.is_ie) 
    131   { 
    132     this._lastRange.select(); 
    133   } 
     369    //this.rootElem.style.display = 'none'; 
     370    Xinha.Dialog.fadeOut(this.rootElem); 
     371        this.hideBackground(); 
     372    var dialog = this; 
     373 
     374    if (Xinha.is_ff2 && this.modal) 
     375    { 
     376      this.editor._textArea.style.display = this._restoreTo[0]; 
     377      this.editor._iframe.style.visibility   = this._restoreTo[1]; 
     378      this.editor.showPanels(this._restoreTo[2]); 
     379    } 
     380 
     381    if (!this.editor._isFullScreen && this.modal) 
     382    { 
     383      window.scroll(this.scrollPos.x, this.scrollPos.y); 
     384    } 
     385 
     386    if (Xinha.is_ie && !this.modal) 
     387    { 
     388      Xinha._removeEvent(this.editor._doc,'mouseup', dialog.saveSelection); 
     389    } 
     390 
     391    if (this.modal) 
     392    { 
     393      this.editor.activateEditor(); 
     394    } 
     395  } 
     396   // Restore the selection --> should this happen only with modals? 
     397  this.editor.restoreSelection(this._lastRange); 
     398   
     399  this.dialogShown = false; 
    134400  this.editor.updateToolbar(); 
    135401  return this.getValues(); 
     
    147413  } 
    148414}; 
    149  
     415Xinha.Dialog.prototype.collapse = function() 
     416{ 
     417  if(this.collapsed) 
     418  { 
     419    this.collapsed = false; 
     420    this.show(); 
     421  } 
     422  else 
     423  { 
     424    this.main.style.height = 0; 
     425    this.collapsed = true; 
     426  } 
     427}; 
     428 
     429Xinha.Dialog.prototype.getElementById = function(id) 
     430{ 
     431  return this.document.getElementById(this.id[id] ? this.id[id] : id); 
     432}; 
     433 
     434Xinha.Dialog.prototype.getElementsByName = function(name) 
     435{ 
     436  return this.document.getElementsByName(this.id[name] ? this.id[name] : name); 
     437}; 
     438 
     439Xinha.Dialog.prototype._dragStart = function (ev)  
     440{ 
     441  if ( this.attached || this.dragging)  
     442  { 
     443    return; 
     444  } 
     445  this.editor.suspendUpdateToolbar = true; 
     446  var dialog = this; 
     447 
     448  dialog.dragging = true; 
     449 
     450  dialog.scrollPos = dialog.editor.scrollPos(); 
     451    
     452  var st = dialog.rootElem.style; 
     453 
     454  dialog.xOffs = ((Xinha.is_ie) ? window.event.offsetX : ev.layerX); 
     455  dialog.yOffs = ((Xinha.is_ie) ? window.event.offsetY : ev.layerY); 
     456 
     457  dialog.mouseMove = function(ev) { dialog.dragIt(ev); }; 
     458  Xinha._addEvent(document, "mousemove", dialog.mouseMove ); 
     459  dialog.mouseUp = function (ev) { dialog.dragEnd(ev); }; 
     460  Xinha._addEvent(document, "mouseup",  dialog.mouseUp); 
     461 
     462}; 
     463 
     464Xinha.Dialog.prototype.dragIt = function(ev) 
     465{ 
     466  var dialog = this; 
     467 
     468  if (!dialog.dragging)  
     469  { 
     470    return false; 
     471  } 
     472  ev = (Xinha.is_ie) ? window.event : ev; 
     473 
     474  if (dialog.rootElem.style.position == 'absolute') 
     475  { 
     476    var posY = (ev.clientY + this.scrollPos.y) - dialog.yOffs + "px"; 
     477    var posX = (ev.clientX + this.scrollPos.x) - dialog.xOffs + "px"; 
     478 
     479    var newPos = {top: posY,left: posX}; 
     480  } 
     481  else if (dialog.rootElem.style.position == 'fixed') 
     482  { 
     483    var posY = ev.clientY  - dialog.yOffs + "px"; 
     484    var posX = ev.clientX - dialog.xOffs + "px"; 
     485 
     486    var newPos = {top: posY,left: posX}; 
     487  } 
     488   
     489  dialog.posDialog(newPos); 
     490   
     491  if (!dialog.modal) 
     492  { 
     493    dialog.posBackground(newPos); 
     494  } 
     495}; 
     496 
     497Xinha.Dialog.prototype.dragEnd = function(ev) 
     498{ 
     499  var dialog = this; 
     500  this.editor.suspendUpdateToolbar = false; 
     501  if (!dialog.dragging)  
     502  { 
     503    return false; 
     504  } 
     505  dialog.dragging = false; 
     506 
     507  Xinha._removeEvent(document, "mousemove", dialog.mouseMove ); 
     508  Xinha._removeEvent(document, "mouseup", dialog.mouseUp ); 
     509 
     510  dialog.size.top  = dialog.rootElem.style.top; 
     511  dialog.size.left = dialog.rootElem.style.left; 
     512}; 
     513 
     514 
     515Xinha.Dialog.prototype._resizeStart = function (ev) { 
     516  var dialog = this; 
     517  this.editor.suspendUpdateToolbar = true; 
     518  if (dialog.resizing) 
     519  { 
     520    return; 
     521  } 
     522  dialog.resizing = true; 
     523  dialog.scrollPos = dialog.editor.scrollPos(); 
     524   
     525  var st = dialog.rootElem.style; 
     526  st.minHeight = ''; 
     527  st.overflow  =  'hidden'; 
     528  dialog.xOffs = parseInt(st.left,10); 
     529  dialog.yOffs = parseInt(st.top,10); 
     530 
     531  dialog.mouseMove = function(ev) { dialog.resizeIt(ev); }; 
     532  Xinha._addEvent(document, "mousemove", dialog.mouseMove ); 
     533  dialog.mouseUp = function (ev) { dialog.resizeEnd(ev); }; 
     534  Xinha._addEvent(document, "mouseup",  dialog.mouseUp); 
     535     
     536}; 
     537 
     538Xinha.Dialog.prototype.resizeIt = function(ev) 
     539{ 
     540  var dialog = this; 
     541 
     542  if (!dialog.resizing) { 
     543    return false; 
     544  } 
     545 
     546  if (dialog.rootElem.style.position == 'absolute') 
     547  { 
     548    var posY = ev.clientY + dialog.scrollPos.y; 
     549    var posX = ev.clientX + dialog.scrollPos.x; 
     550  } 
     551  else 
     552  { 
     553    var posY = ev.clientY; 
     554    var posX = ev.clientX; 
     555  } 
     556  
     557  posX -=  dialog.xOffs; 
     558  posY -=  dialog.yOffs; 
     559 
     560  var newSize = {}; 
     561  newSize.width  = (( posX > 10) ? posX : 10) + 8 + "px"; 
     562  newSize.height = (( posY > 10) ? posY : 10) + "px"; 
     563 
     564  dialog.sizeDialog(newSize); 
     565   
     566  if (!this.modal) 
     567  { 
     568    dialog.resizeBackground(newSize); 
     569  } 
     570   
     571  dialog.width = dialog.rootElem.offsetWidth; 
     572  dialog.height = dialog.rootElem.offsetHeight; 
     573 
     574  dialog.onresize(); 
     575}; 
     576 
     577Xinha.Dialog.prototype.resizeEnd = function(ev) 
     578{ 
     579  var dialog = this; 
     580  dialog.resizing = false; 
     581  this.editor.suspendUpdateToolbar = false; 
     582   
     583  Xinha._removeEvent(document, "mousemove", dialog.mouseMove ); 
     584  Xinha._removeEvent(document, "mouseup", dialog.mouseUp ); 
     585   
     586  dialog.size.width  = dialog.rootElem.offsetWidth; 
     587  dialog.size.height = dialog.rootElem.offsetHeight; 
     588}; 
     589 
     590Xinha.Dialog.prototype.attachToPanel = function(side) 
     591{ 
     592  var dialog = this; 
     593  var rootElem = this.rootElem; 
     594  var editor = this.editor; 
     595   
     596  this.attached = true; 
     597  this.rootElem.side = side; 
     598  this.captionBar.ondblclick = function(ev) { dialog.detachFromPanel(ev ? ev :window.event); }; 
     599   
     600  rootElem.style.position = "static"; 
     601  rootElem.parentNode.removeChild(rootElem); 
     602   
     603  this.captionBar.style.paddingLeft = "3px"; 
     604  this.resizer.style.display = 'none'; 
     605  if ( this.closable ) this.closer.style.display = 'none'; 
     606  this.icon.style.display = 'none'; 
     607   
     608  if ( side == 'left' || side == 'right' ) 
     609  { 
     610    rootElem.style.width  = editor.config.panel_dimensions[side]; 
     611  } 
     612  else 
     613  { 
     614    rootElem.style.width = ''; 
     615  } 
     616  Xinha.addClasses(rootElem, 'panel'); 
     617  editor._panels[side].panels.push(rootElem); 
     618  editor._panels[side].div.appendChild(rootElem); 
     619 
     620  editor.notifyOf('panel_change', {'action':'add','panel':rootElem}); 
     621}; 
     622 
     623Xinha.Dialog.prototype.detachFromPanel = function(ev) 
     624{ 
     625  var dialog = this; 
     626  var rootElem = dialog.rootElem; 
     627  var editor = dialog.editor; 
     628   
     629  dialog.attached = false; 
     630   
     631  rootElem.style.position = "absolute"; 
     632   
     633  dialog.captionBar.style.paddingLeft = "22px"; 
     634  dialog.resizer.style.display = ''; 
     635  if ( dialog.closable ) dialog.closer.style.display = ''; 
     636  dialog.icon.style.display = ''; 
     637   
     638   
     639  if ( dialog.size.width ) rootElem.style.width  = dialog.size.width + 'px'; 
     640 
     641  Xinha.removeClasses(rootElem, 'panel'); 
     642  editor.removePanel(rootElem); 
     643  document.body.appendChild(rootElem); 
     644   
     645  if (ev) 
     646  { 
     647    var scrollPos = dialog.editor.scrollPos();  
     648    rootElem.style.top = (ev.clientY + scrollPos.y) - ((Xinha.is_ie) ? window.event.offsetY : ev.layerY) + "px"; 
     649    rootElem.style.left =(ev.clientX + scrollPos.x) - ((Xinha.is_ie) ? window.event.offsetX : ev.layerX) + "px"; 
     650  } 
     651  dialog.captionBar.ondblclick = function() { dialog.attachToPanel(rootElem.side); }; 
     652   
     653}; 
     654 
     655Xinha.Dialog.prototype.hideBackground = function() 
     656{ 
     657  //this.background.style.display = 'none'; 
     658  Xinha.Dialog.fadeOut(this.background); 
     659} 
     660Xinha.Dialog.prototype.showBackground = function() 
     661{ 
     662  //this.background.style.display = ''; 
     663  Xinha.Dialog.fadeIn(this.background,70); 
     664} 
     665Xinha.Dialog.prototype.posBackground = function(pos) 
     666{ 
     667  if (this.background.style.display != 'none') 
     668  { 
     669    this.background.style.top  = pos.top; 
     670    this.background.style.left = pos.left; 
     671  } 
     672} 
     673Xinha.Dialog.prototype.resizeBackground = function(size) 
     674{ 
     675  if (this.background.style.display != 'none') 
     676  { 
     677    this.background.style.width  = size.width; 
     678    this.background.style.height = size.height; 
     679  } 
     680} 
     681Xinha.Dialog.prototype.posDialog = function(pos) 
     682{ 
     683  var st = this.rootElem.style; 
     684  st.left = pos.left; 
     685  st.top  = pos.top; 
     686} 
     687Xinha.Dialog.prototype.sizeDialog = function(size) 
     688{ 
     689  var st = this.rootElem.style; 
     690  st.height = size.height; 
     691  st.width  = size.width; 
     692  this.main.style.height = parseInt(size.height,10) - this.captionBar.offsetHeight + "px"; 
     693  this.main.style.width = size.width; 
     694   
     695} 
    150696Xinha.Dialog.prototype.setValues = function(values) 
    151697{ 
     
    180726          break; 
    181727        } 
    182  
    183728 
    184729        case 'textarea': 
     
    340885}; 
    341886 
    342 Xinha.Dialog.prototype.getElementById = function(id) 
    343 { 
    344   return this.document.getElementById(this.id[id] ? this.id[id] : id); 
    345 }; 
    346  
    347 Xinha.Dialog.prototype.getElementsByName = function(name) 
    348 { 
    349   return this.document.getElementsByName(this.id[name] ? this.id[name] : name); 
    350 }; 
     887Xinha.Dialog.prototype.translateHtml = function(html,localizer) 
     888{ 
     889  var dialog = this; 
     890  if(typeof localizer == 'function') 
     891  { 
     892    dialog._lc = localizer; 
     893  } 
     894  else if(localizer) 
     895  { 
     896    this._lc = function(string) 
     897    { 
     898      return Xinha._lc(string,localizer); 
     899    }; 
     900  } 
     901  else 
     902  { 
     903    this._lc = function(string) 
     904    { 
     905      return string; 
     906    }; 
     907  } 
     908   
     909  html = html.replace(/\[([a-z0-9_]+)\]/ig, 
     910    function(fullString, id) 
     911    { 
     912      if(typeof dialog.id[id] == 'undefined') 
     913      { 
     914        dialog.id[id] = Xinha.uniq('Dialog'); 
     915        dialog.r_id[dialog.id[id]] = id; 
     916      } 
     917      return dialog.id[id]; 
     918    } 
     919    ).replace(/<l10n>(.*?)<\/l10n>/ig, 
     920    function(fullString,translate) 
     921    { 
     922      return dialog._lc(translate) ; 
     923    } 
     924    ).replace(/="_\((.*?)\)"/g, 
     925    function(fullString, translate) 
     926    { 
     927      return '="' + dialog._lc(translate) + '"'; 
     928    } 
     929  ); 
     930  return html; 
     931} 
     932 
     933 
     934Xinha.Dialog.activateModeless = function(dialog) 
     935{ 
     936  var zIndex; 
     937  if (Xinha.Dialog.activeModeless == dialog || dialog.attached )  
     938  { 
     939    return; 
     940  } 
     941   
     942  if (Xinha.Dialog.activeModeless ) 
     943  { 
     944    Xinha.Dialog.activeModeless.rootElem.style.zIndex = parseInt(Xinha.Dialog.activeModeless.rootElem.style.zIndex) -10; 
     945  } 
     946  Xinha.Dialog.activeModeless = dialog; 
     947 
     948  Xinha.Dialog.activeModeless.rootElem.style.zIndex = parseInt(Xinha.Dialog.activeModeless.rootElem.style.zIndex) + 10; 
     949} 
     950Xinha.Dialog.setOpacity = function(el,value) 
     951{ 
     952        if (typeof el.style.filter != 'undefined') 
     953        { 
     954                el.style.filter = (value < 100) ?  'alpha(opacity='+value+')' : ''; 
     955        } 
     956        else 
     957        { 
     958                el.style.opacity = value/100; 
     959        } 
     960} 
     961Xinha.Dialog.fadeIn = function(el,endOpacity,delay,step) 
     962{ 
     963        delay = delay || 1; 
     964        step = step || 25; 
     965        endOpacity = endOpacity || 100; 
     966        el.op = el.op || 0; 
     967        var op = el.op; 
     968        if (el.style.display == 'none') 
     969        { 
     970                Xinha.Dialog.setOpacity(el,0); 
     971                el.style.display = ''; 
     972        } 
     973        if (op < endOpacity) 
     974        { 
     975                el.op += step; 
     976                Xinha.Dialog.setOpacity(el,op); 
     977                el.timeOut = setTimeout(function(){Xinha.Dialog.fadeIn(el,endOpacity,delay,step);},delay); 
     978        } 
     979        else 
     980        { 
     981                Xinha.Dialog.setOpacity(el,endOpacity); 
     982                el.op = endOpacity; 
     983                el.timeOut = null; 
     984        } 
     985} 
     986 
     987Xinha.Dialog.fadeOut = function(el,delay,step) 
     988{ 
     989        delay = delay || 1; 
     990        step = step || 30; 
     991        if (typeof el.op == 'undefined') el.op = 100; 
     992        var op = el.op; 
     993 
     994        if (op >= 0) 
     995        { 
     996                el.op -= step; 
     997                Xinha.Dialog.setOpacity(el,op); 
     998                el.timeOut = setTimeout(function(){Xinha.Dialog.fadeOut(el,delay,step);},delay); 
     999        } 
     1000        else 
     1001        { 
     1002                Xinha.Dialog.setOpacity(el,0); 
     1003                el.style.display = 'none'; 
     1004                el.op = 0; 
     1005                el.timeOut = null; 
     1006        } 
     1007} 
  • branches/new-dialogs-merge/plugins/Linker/linker.js

    r999 r1007  
    182182           values.p_options.push('height=' + values.p_height); 
    183183         } 
    184          atr.onclick = 'if(window.top && window.top.Xinha){return false}window.open(this.href, \'' + (values.p_name.replace(/[^a-z0-9_]/i, '_')) + '\', \'' + values.p_options.join(',') + '\');return false;'; 
     184         atr.onclick = 'if(window.parent && window.parent.Xinha){return false}window.open(this.href, \'' + (values.p_name.replace(/[^a-z0-9_]/i, '_')) + '\', \'' + values.p_options.join(',') + '\');return false;'; 
    185185       } 
    186186     } 
     
    327327  if(typeof dTree == 'undefined') 
    328328  { 
     329    this.linker.editor.setLoadingMessage('Loading Tree script'); 
    329330    Xinha._loadback(Xinha.getPluginDir("Linker") + '/dTree/dtree.js', 
    330331                       function() {lDialog._prepareDialog(); } 
     
    337338    if(linker.lConfig.backend) 
    338339    { 
    339       //get files from backend 
    340       Xinha._postback(linker.lConfig.backend, 
    341                       linker.lConfig.backend_data,  
     340        //get files from backend 
     341        this.linker.editor.setLoadingMessage('Loading files from backend'); 
     342        Xinha._postback(linker.lConfig.backend, 
     343                          linker.lConfig.backend_data, 
    342344                          function(txt) { 
    343345                            try { 
     
    366368 
    367369  // Now we have everything we need, so we can build the dialog. 
    368   var dialog = this.dialog = new Xinha.Dialog(linker.editor, this.html, 'Linker'); 
     370  var dialog = this.dialog = new Xinha.Dialog(linker.editor, this.html, 'Linker',{width:600,height:400}); 
    369371  var dTreeName = Xinha.uniq('dTree_'); 
    370372 
     
    379381  //ddTree.innerHTML = this.dTree.toString(); 
    380382  ddTree.innerHTML = ''; 
    381   ddTree.style.position = 'absolute'; 
    382   ddTree.style.left = 1 + 'px'; 
    383   ddTree.style.top =  0 + 'px'; 
     383//  ddTree.style.position = 'absolute'; 
     384//  ddTree.style.left = 1 + 'px'; 
     385 // ddTree.style.top =  0 + 'px'; 
    384386  ddTree.style.overflow = 'auto'; 
     387  ddTree.style.height = '300px'; 
     388  if ( Xinha.is_ie ) 
     389  { 
     390    ddTree.style.styleFloat = "left"; 
     391  } 
     392  else 
     393  { 
     394    ddTree.style.cssFloat = "left"; 
     395  } 
    385396  ddTree.style.backgroundColor = 'white'; 
    386397  this.ddTree = ddTree; 
     398   
    387399  this.dTree._linker_premade = this.dTree.toString(); 
    388400 
    389401  var options = this.dialog.getElementById('options'); 
    390   options.style.position = 'absolute'; 
    391   options.style.top      = 0   + 'px'; 
    392   options.style.right    = 0   + 'px'; 
     402  //options.style.position = 'absolute'; 
     403  //options.style.top      = 0   + 'px'; 
     404  //options.style.right    = 0   + 'px'; 
    393405  options.style.width    = 320 + 'px'; 
    394406  options.style.overflow = 'auto'; 
    395407 
    396408  // Hookup the resizer 
     409  this.dialog.rootElem.style.paddingBottom ="0"; 
    397410  this.dialog.onresize = function() 
    398411    { 
    399412      var h = parseInt(dialog.height) - dialog.getElementById('h1').offsetHeight; 
    400       var w = parseInt(dialog.width)  - 322 ; 
     413      var w = parseInt(dialog.width)  - 330 ; 
     414 
    401415      // An error is thrown with IE when trying to set a negative width or a negative height 
    402416      // But perhaps a width / height of 0 is not the minimum required we need to set 
    403417      if (w<0) w = 0; 
    404418      if (h<0) h = 0; 
    405       options.style.height = ddTree.style.height = h + 'px'; 
    406       ddTree.style.width  = w + 'px'; 
    407     } 
    408  
     419      //options.style.height = 
     420      lDialog.ddTree.style.height = h + 'px'; 
     421      lDialog.ddTree.style.width  = w + 'px'; 
     422    } 
    409423  this.ready = true; 
     424  ddTree = null; 
     425  Xinha.freeLater(lDialog, 'ddTree'); 
     426  options = null; 
    410427}; 
    411428 
Note: See TracChangeset for help on using the changeset viewer.