Changeset 762 for branches/ray/modules


Ignore:
Timestamp:
02/24/07 15:47:57 (13 years ago)
Author:
ray
Message:

updated branch

Location:
branches/ray/modules
Files:
9 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/ray/modules/ColorPicker/ColorPicker.js

    r761 r762  
    132132    this.table.appendChild(this.tbody); 
    133133    this.table.style.border = '1px solid WindowFrame'; 
    134     this.table.style.zIndex = '1000'; 
     134    this.table.style.zIndex = '1050'; 
    135135    // Add a title bar and close button 
    136136    var tr = document.createElement('tr'); 
     
    141141    td.style.fontFamily = 'small-caption,caption,sans-serif'; 
    142142    td.style.fontSize = 'x-small'; 
     143    td.unselectable = "on"; 
     144    td.style.MozUserSelect = "none"; 
    143145    td.appendChild(document.createTextNode(Xinha._lc('Click a color...'))); 
    144146    td.style.borderBottom = '1px solid WindowFrame'; 
     
    829831  return Xinha._lc(string); 
    830832} 
     833Xinha.colorPicker.inputBinding = function(input) 
     834{ 
     835  var main = document.createElement('span'); 
     836  main.className = "buttonColor"; 
     837   
     838  var chooser = this.chooser = document.createElement('span'); 
     839  chooser.className = "chooser"; 
     840  chooser.onmouseover = function() {main.style.borderColor='black';chooser.style.borderColor='black'}; 
     841  chooser.onmouseout = function() {main.style.borderColor='ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight',chooser.style.borderColor='ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight'}; 
     842  chooser.appendChild(document.createTextNode('\u00a0')); 
     843  main.appendChild(chooser); 
     844  var clearColor = document.createElement('span'); 
     845  clearColor.className = "nocolor"; 
     846  clearColor.onmouseover = function() {clearColor.style.color='#f00'}; 
     847  clearColor.onmouseout = function() {clearColor.style.color='#000'}; 
     848  clearColor.onclick = function() {input.value ='';chooser.style.backgroundColor = ''}; 
     849  clearColor.appendChild(document.createTextNode('\u00d7')); 
     850  main.appendChild(clearColor); 
     851   
     852  input.parentNode.insertBefore(main,input.nextSibling); 
     853   
     854  Xinha._addEvent(input,'change',function() {chooser.style.backgroundColor = this.value;}) 
     855   
     856  chooser.onclick = function()  
     857  {  
     858          var colPicker = new Xinha.colorPicker({cellsize:'5px',callback:function(color) {chooser.style.backgroundColor = color;input.value=color}}); 
     859          colPicker.open('left',chooser, input.value );  
     860  } 
     861} 
     862Xinha.colorPicker.inputBinding.prototype.setColor = function(color) 
     863{ 
     864  this.chooser.style.backgroundColor = color; 
     865} 
  • branches/ray/modules/Dialogs/inline-dialog.js

    r761 r762  
    2121    --  $LastChangedBy$ 
    2222    --------------------------------------------------------------------------*/ 
    23 Xinha.Dialog = function(editor, html, localizer) 
    24 { 
     23Xinha.Dialog = function(editor, html, localizer, size, layer) 
     24{ 
     25  var dialog = this; 
    2526  this.id    = { }; 
    2627  this.r_id  = { }; // reverse lookup id 
    2728  this.editor   = editor; 
    2829  this.document = document; 
    29  
    30   this.rootElem = document.createElement('div'); 
    31   this.rootElem.className = 'dialog'; 
    32   this.rootElem.style.position = 'absolute'; 
    33   this.rootElem.style.display  = 'none'; 
    34   this.editor._framework.ed_cell.insertBefore(this.rootElem, this.editor._framework.ed_cell.firstChild); 
    35   this.rootElem.style.width  = this.width  =  this.editor._framework.ed_cell.offsetWidth + 'px'; 
    36   this.rootElem.style.height = this.height =  this.editor._framework.ed_cell.offsetHeight + 'px'; 
    37  
    38   var dialog = this; 
     30  this.layer = (layer) ? layer : 0; 
     31   
     32  if ( !Xinha.Dialog.background[this.layer] ) 
     33  { 
     34        Xinha.Dialog.background[this.layer] = []; 
     35         
     36    if (Xinha.is_ie) 
     37    { // IE6 needs the iframe to hide select boxes 
     38      var backG = document.createElement("iframe"); 
     39      backG.src = "about:blank"; 
     40    } 
     41    else  
     42    { // Mozilla (<FF3) can't have the iframe, because it hides the caret in text fields  
     43      // see https://bugzilla.mozilla.org/show_bug.cgi?id=226933 
     44      // unfortunately https://bugzilla.mozilla.org/show_bug.cgi?id=230701 indicates that this is an issue with pos fixed div, too 
     45      var backG = document.createElement("div"); 
     46    } 
     47    backG.className = "xinha_dialog_background"; 
     48    with (backG.style) 
     49    { 
     50      position = "absolute";//(Xinha.is_ie) ? "absolute" : "fixed";  
     51      top = 0; 
     52      left = 0; 
     53      border = 'none'; 
     54      overflow = "hidden"; 
     55      display = "none"; 
     56      zIndex = 1001 + this.layer; 
     57    } 
     58    document.body.appendChild(backG); 
     59    Xinha.Dialog.background[this.layer].push(backG); 
     60   
     61    backG = document.createElement("div"); 
     62    with (backG.style) 
     63    { 
     64      position =  "absolute";//(Xinha.is_ie) ? "absolute" : "fixed"; 
     65      top = 0; 
     66      left = 0; 
     67      overflow = "hidden"; 
     68      display = "none"; 
     69      zIndex = 1002+ this.layer; 
     70    }  
     71    document.body.appendChild(backG); 
     72    Xinha.Dialog.background[this.layer].push(backG); 
     73  } 
     74  var rootElem = document.createElement('div'); 
     75  rootElem.style.position = 'absolute'; 
     76  rootElem.style.zIndex = 1003+ this.layer; 
     77  rootElem.style.display  = 'none'; 
     78   
     79  // FIXME: This is nice, but I don't manage to get it switched off on text inputs :( 
     80  // rootElem.style.MozUserSelect = "none"; 
     81   
     82  rootElem.className = 'dialog'; 
     83   
     84 // Xinha.Dialog.background[this.layer][1].appendChild(rootElem); 
     85  document.body.appendChild(rootElem); 
     86 
     87  rootElem.style.paddingBottom = "10px"; 
     88  rootElem.style.width = size.width + 'px'; 
     89 
     90   
     91  this.size = size; 
     92  if (size.height) 
     93  { 
     94    if (Xinha.ie_version < 7) 
     95    { 
     96      rootElem.style.height = size.height + 'px'; 
     97    } 
     98    else 
     99    { 
     100      rootElem.style.minHeight =  size.height + 'px'; 
     101    } 
     102  } 
     103 
    39104  if(typeof localizer == 'function') 
    40105  { 
     
    78143             ); 
    79144 
    80   this.rootElem.innerHTML = html; 
    81  
    82  
    83  
    84  
    85   this.editor.notifyOn 
    86    ('resize', 
    87       function(e, args) 
     145  rootElem.innerHTML = html; 
     146 
     147  //make the first h1 to drag&drop the rootElem 
     148  var titleBar = rootElem.getElementsByTagName("h1")[0]; 
     149  titleBar.onmousedown = function(ev) { dialog._dragStart(ev); }; 
     150  titleBar.style.MozUserSelect = "none"; 
     151   
     152  var but = document.createElement('div'); 
     153  but.className= 'closeButton';  
     154   
     155  but.onmousedown = function(ev) { this.className = "closeButton buttonClick"; Xinha._stopEvent((ev) ? ev : window.event); return false;}; 
     156  but.onmouseout = function(ev) { this.className = "closeButton"; Xinha._stopEvent((ev) ? ev : window.event); return false;}; 
     157  but.onmouseup = function() { this.className = "closeButton"; dialog.hide(); return false;}; 
     158  titleBar.appendChild(but); 
     159   
     160  var butX = document.createElement('span'); 
     161  butX.style.position = 'relative'; 
     162  butX.style.top = '-3px'; 
     163 
     164  butX.appendChild(document.createTextNode('\u00D7')); 
     165  but.appendChild(butX); 
     166   
     167  var icon = document.createElement('img'); 
     168  icon.src = _editor_url + 'images/xinha-small-icon.gif'; 
     169  icon.style.position = 'absolute'; 
     170  icon.style.top = '3px'; 
     171  icon.style.left = '2px'; 
     172  titleBar.style.paddingLeft = '30px'; 
     173  titleBar.appendChild(icon); 
     174    
     175  var all = rootElem.getElementsByTagName("*"); 
     176 
     177  for (var i=0; i<all.length;i++) 
     178  { 
     179        var el = all[i];  
     180    if (el.tagName.toLowerCase() == 'textarea' || el.tagName.toLowerCase() == 'input') 
     181    { 
     182      // FIXME: this doesn't work 
     183      //el.style.MozUserSelect = "text"; 
     184    } 
     185    else 
     186    { 
     187      el.unselectable = "on"; 
     188    } 
     189  } 
     190 
     191  var resizeHandle = document.createElement('div'); 
     192  resizeHandle.className = "resizeHandle"; 
     193  with (resizeHandle.style) 
     194  { 
     195    position = "absolute"; 
     196    bottom = "0px"; 
     197    right= "0px"; 
     198  } 
     199  resizeHandle.onmousedown = function(ev) { dialog._resizeStart(ev); }; 
     200  rootElem.appendChild(resizeHandle); 
     201  this.rootElem = rootElem; 
     202  // for caching size & position after dragging & resizing 
     203  this.size = {}; 
     204}; 
     205 
     206Xinha.Dialog.background = []; 
     207Xinha.Dialog.prototype.sizeBackground = function() 
     208{ 
     209  var win_dim = Xinha.viewportSize(); 
     210  Xinha.Dialog.background[this.layer][0].style.width = win_dim.x + 'px'; 
     211  Xinha.Dialog.background[this.layer][0].style.height = win_dim.y + 'px'; 
     212  Xinha.Dialog.background[this.layer][1].style.width = win_dim.x + 'px'; 
     213  Xinha.Dialog.background[this.layer][1].style.height = win_dim.y + 'px'; 
     214  window.scroll(this.scrollPos.x, this.scrollPos.y); 
     215  return win_dim; 
     216} 
     217 
     218Xinha.Dialog.prototype.onresize = function() 
     219{ 
     220  return true; 
     221}; 
     222 
     223Xinha.Dialog.prototype.show = function(values) 
     224{ 
     225  var rootElem = this.rootElem; 
     226  var scrollPos = this.scrollPos = this.editor.scrollPos(); 
     227  var dialog = this; 
     228   
     229  function resetScroll() 
     230  { 
     231    if ( dialog.dialogShown ) 
     232    { 
     233      window.scroll(scrollPos.x,scrollPos.y); 
     234      window.setTimeout(resetScroll,150); 
     235    } 
     236  } 
     237  Xinha.Dialog.background[this.layer][0].style.left = this.scrollPos.x + 'px'; 
     238  Xinha.Dialog.background[this.layer][0].style.top = this.scrollPos.y + 'px'; 
     239  Xinha.Dialog.background[this.layer][1].style.left = this.scrollPos.x + 'px'; 
     240  Xinha.Dialog.background[this.layer][1].style.top = this.scrollPos.y + 'px'; 
     241   
     242  // We need to preserve the selection 
     243  if(Xinha.is_ie) 
     244  {       
     245    this._lastRange = this.editor._createRange(this.editor._getSelection()); 
     246  } 
     247  else 
     248  { 
     249        this._lastRange = this.editor._createRange(this.editor._getSelection()).cloneRange(); 
     250  } 
     251  this.editor.deactivateEditor(); 
     252   
     253  // unfortunately we have to hide the editor (iframe/caret bug) 
     254  if (Xinha.is_gecko) 
     255  { 
     256    this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; 
     257    this.editor._textArea.style.display = 'none'; 
     258    this.editor._iframe.style.visibility   = 'hidden'; 
     259  } 
     260  if (!this.editor._isFullScreen) 
     261  { 
     262    if(Xinha.is_ie && document.compatMode == 'CSS1Compat') 
     263    { 
     264      var bod = document.getElementsByTagName('html'); 
     265    } 
     266    else 
     267    { 
     268      var bod = document.getElementsByTagName('body'); 
     269    } 
     270   
     271    bod[0].style.overflow='hidden'; 
     272    window.scroll(this.scrollPos.x, this.scrollPos.y); 
     273  } 
     274 
     275  Xinha.Dialog.background[this.layer][0].style.display = ''; 
     276  Xinha.Dialog.background[this.layer][1].style.display = ''; 
     277   
     278  var backgroundSize = this.sizeBackground(); 
     279  var backgroundHeight = backgroundSize.y; 
     280  var backgroundWidth = backgroundSize.x; 
     281   
     282  this.onResizeWin = function () {dialog.sizeBackground()}; 
     283  Xinha._addEvent(window, 'resize', this.onResizeWin ); 
     284   
     285 
     286   
     287  var rootElemStyle = rootElem.style; 
     288  rootElemStyle.display   = ''; 
     289   
     290  var dialogHeight = rootElem.offsetHeight; 
     291  var dialogWidth = rootElem.offsetWidth; 
     292   
     293  if (dialogHeight >  backgroundHeight) 
     294  { 
     295        rootElemStyle.height =  backgroundHeight + "px"; 
     296        if (rootElem.scrollHeight > dialogHeight) 
     297        { 
     298          rootElemStyle.overflowY = "auto"; 
     299        } 
     300  } 
     301 
     302  if(this.size.top && this.size.left) 
     303  { 
     304    rootElemStyle.top =  parseInt(this.size.top,10) + 'px'; 
     305    rootElemStyle.left = parseInt(this.size.left,10) + 'px'; 
     306  } 
     307  else 
     308  { 
     309    if (this.editor.btnClickEvent) 
     310    { 
     311      var btnClickEvent = this.editor.btnClickEvent;  
     312      rootElemStyle.top =  btnClickEvent.clientY + this.scrollPos.y +'px'; 
     313      
     314      if (dialogHeight + rootElem.offsetTop >  backgroundHeight) 
    88315      { 
    89         dialog.rootElem.style.width  = dialog.width  =  dialog.editor._framework.ed_cell.offsetWidth + 'px'; 
    90         dialog.rootElem.style.height = dialog.height =  dialog.editor._framework.ed_cell.offsetHeight + 'px'; 
    91         dialog.onresize(); 
     316        rootElemStyle.top = this.scrollPos.y; 
    92317      } 
    93     ); 
    94 }; 
    95  
    96 Xinha.Dialog.prototype.onresize = function() 
    97 { 
    98   return true; 
    99 }; 
    100  
    101 Xinha.Dialog.prototype.show = function(values) 
    102 { 
    103   // We need to preserve the selection for IE 
    104   if(Xinha.is_ie) 
    105   { 
    106     this._lastRange = this.editor._createRange(this.editor._getSelection()); 
    107   } 
    108  
     318      rootElemStyle.left = btnClickEvent.clientX +  this.scrollPos.x +'px'; 
     319      if (dialogWidth + rootElem.offsetLeft >  backgroundWidth) 
     320      { 
     321        rootElemStyle.left =  btnClickEvent.clientX - dialogWidth   + 'px'; 
     322        if (rootElem.offsetLeft < 0)  
     323        { 
     324                rootElemStyle.left = 0; 
     325        } 
     326      } 
     327      this.editor.btnClickEvent = null; 
     328    } 
     329    else 
     330    { 
     331    var top =  ( backgroundHeight - dialogHeight) / 2; 
     332    var left = ( backgroundWidth - dialogWidth) / 2; 
     333    rootElemStyle.top =  ((top > 0) ? top : 0) +'px'; 
     334    rootElemStyle.left = ((left > 0) ? left : 0)+'px';           
     335    } 
     336         
     337  } 
     338  this.width = dialogWidth; 
     339  this.height = dialogHeight;   
     340   
    109341  if(typeof values != 'undefined') 
    110342  { 
    111343    this.setValues(values); 
    112344  } 
    113   this._restoreTo = [this.editor._textArea.style.display, this.editor._iframe.style.visibility, this.editor.hidePanels()]; 
    114  
    115   this.editor._textArea.style.display = 'none'; 
    116   this.editor._iframe.style.visibility   = 'hidden'; 
    117   this.rootElem.style.display   = ''; 
     345  this.dialogShown = true; 
     346  resetScroll(); 
    118347}; 
    119348 
    120349Xinha.Dialog.prototype.hide = function() 
    121350{ 
    122   this.rootElem.style.display         = 'none'; 
    123   this.editor._textArea.style.display = this._restoreTo[0]; 
    124   this.editor._iframe.style.visibility   = this._restoreTo[1]; 
    125   this.editor.showPanels(this._restoreTo[2]); 
    126  
    127   // Restore the selection 
    128   if(Xinha.is_ie) 
    129   { 
     351  this.rootElem.style.display = 'none'; 
     352  Xinha.Dialog.background[this.layer][0].style.display = 'none'; 
     353  Xinha.Dialog.background[this.layer][1].style.display = 'none'; 
     354  var dialog = this; 
     355 
     356  Xinha._removeEvent(window, 'resize', this.onResizeWin); 
     357   
     358  if (Xinha.is_gecko) 
     359  { 
     360    this.editor._textArea.style.display = this._restoreTo[0]; 
     361    this.editor._iframe.style.visibility   = this._restoreTo[1]; 
     362    this.editor.showPanels(this._restoreTo[2]);   
     363  } 
     364   
     365  if (!this.editor._isFullScreen) 
     366  { 
     367    if(Xinha.is_ie && document.compatMode == 'CSS1Compat') 
     368    { 
     369      var bod = document.getElementsByTagName('html'); 
     370    } 
     371    else 
     372    { 
     373      var bod = document.getElementsByTagName('body'); 
     374    } 
     375    bod[0].style.overflow=''; 
     376    window.scroll(this.scrollPos.x, this.scrollPos.y); 
     377  } 
     378// Restore the selection 
     379  this.editor.activateEditor(); 
     380  if (Xinha.is_gecko) 
     381  {              
     382    var sel = this.editor.getSelection(); 
     383    sel.removeAllRanges(); 
     384    sel.addRange(this._lastRange); 
     385  } 
     386  else 
     387  {  
    130388    this._lastRange.select(); 
    131389  } 
     390  this.dialogShown = false; 
    132391  this.editor.updateToolbar(); 
    133392  return this.getValues(); 
     
    144403    this.hide(); 
    145404  } 
     405}; 
     406 
     407Xinha.Dialog.prototype.getElementById = function(id) 
     408{ 
     409  return this.document.getElementById(this.id[id] ? this.id[id] : id); 
     410}; 
     411 
     412Xinha.Dialog.prototype.getElementsByName = function(name) 
     413{ 
     414  return this.document.getElementsByName(this.id[name] ? this.id[name] : name); 
     415}; 
     416 
     417Xinha.Dialog.prototype._dragStart = function (ev)  
     418{ 
     419 
     420  var dialog = this; 
     421  if (dialog.dragging)  
     422  { 
     423    return; 
     424  } 
     425  dialog.dragging = true; 
     426 
     427  var st = dialog.rootElem.style; 
     428 
     429  dialog.xOffs = ((Xinha.is_ie) ? window.event.offsetX : ev.layerX); 
     430  dialog.yOffs = ((Xinha.is_ie) ? window.event.offsetY : ev.layerY); 
     431 
     432  Xinha._addEvent(document, "mousemove", function(ev) { dialog.dragIt(ev); } ); 
     433  Xinha._addEvent(document, "mouseup", function (ev) { dialog.dragEnd(ev); } ); 
     434}; 
     435 
     436Xinha.Dialog.prototype.dragIt = function(ev) 
     437{ 
     438  var dialog = this; 
     439 
     440  if (!dialog.dragging)  
     441  { 
     442    return false; 
     443  } 
     444  ev = (Xinha.is_ie) ? window.event : ev; 
     445 
     446  var posY = ev.clientY + this.scrollPos.y; 
     447  var posX = ev.clientX + this.scrollPos.x; 
     448 
     449  var st = dialog.rootElem.style; 
     450 
     451  st.left = (posX - dialog.xOffs) + "px"; 
     452  st.top = (posY - dialog.yOffs) + "px"; 
     453}; 
     454 
     455Xinha.Dialog.prototype.dragEnd = function(ev) 
     456{ 
     457  var dialog = this; 
     458  dialog.dragging = false; 
     459 
     460  Xinha._removeEvent(document, "mousemove", function(ev) { dialog.dragIt(ev); } ); 
     461  Xinha._removeEvent(document, "mouseup", function (ev) { dialog.dragEnd(ev); } ); 
     462 
     463  dialog.size.top  = dialog.rootElem.style.top; 
     464  dialog.size.left =dialog.rootElem.style.left; 
     465}; 
     466 
     467Xinha.Dialog.prototype._resizeStart = function (ev) { 
     468  var dialog = this; 
     469 
     470  if (dialog.resizing) 
     471  { 
     472    return; 
     473  } 
     474  dialog.resizing = true; 
     475 
     476  var st = dialog.rootElem.style; 
     477  st.minHeight = ''; 
     478  st.overflow  =  'hidden'; 
     479  dialog.xOffs = parseInt(st.left,10); 
     480  dialog.yOffs = parseInt(st.top,10); 
     481 
     482  Xinha._addEvent(document, "mousemove", function(ev) { dialog.resizeIt(ev); } ); 
     483  Xinha._addEvent(document, "mouseup", function (ev) { dialog.resizeEnd(ev); } ); 
     484}; 
     485 
     486Xinha.Dialog.prototype.resizeIt = function(ev) 
     487{ 
     488  var dialog = this; 
     489 
     490  if (!dialog.resizing) { 
     491    return false; 
     492  } 
     493 
     494  var posY = ev.clientY + dialog.scrollPos.y; 
     495  var posX = ev.clientX + dialog.scrollPos.x; 
     496 
     497  var st = dialog.rootElem.style; 
     498 
     499  posX = posX - dialog.xOffs; 
     500  posY = posY - dialog.yOffs; 
     501 
     502  st.width  = (( posX > 10) ? posX : 10) + "px"; 
     503  st.height = (( posY > 10) ? posY : 10) + "px"; 
     504 
     505  dialog.width = dialog.rootElem.offsetWidth; 
     506  dialog.height = dialog.rootElem.offsetHeight; 
     507 
     508  dialog.onresize(); 
     509}; 
     510 
     511Xinha.Dialog.prototype.resizeEnd = function(ev) 
     512{ 
     513  var dialog = this; 
     514  dialog.resizing = false; 
     515 
     516  Xinha._removeEvent(document, "mousemove", function(ev) { dialog.resizeIt(ev); } ); 
     517  Xinha._removeEvent(document, "mouseup", function (ev) { dialog.resizeEnd(ev); } ); 
     518 
     519  dialog.size.width  = dialog.rootElem.offsetWidth; 
     520  dialog.size.height = dialog.rootElem.offsetHeight; 
    146521}; 
    147522 
     
    337712  return values; 
    338713}; 
    339  
    340 Xinha.Dialog.prototype.getElementById = function(id) 
    341 { 
    342   return this.document.getElementById(this.id[id] ? this.id[id] : id); 
    343 }; 
    344  
    345 Xinha.Dialog.prototype.getElementsByName = function(name) 
    346 { 
    347   return this.document.getElementsByName(this.id[name] ? this.id[name] : name); 
    348 }; 
  • branches/ray/modules/FullScreen/full-screen.js

    r761 r762  
    7272   */ 
    7373  function resetScroll() 
    74   { 
     74  {console.log('resetScroll'); 
    7575    if(e._isFullScreen) 
    7676    { 
Note: See TracChangeset for help on using the changeset viewer.