Changeset 475


Ignore:
Timestamp:
03/20/06 01:50:08 (14 years ago)
Author:
mokhet
Message:

update to comply ticket #385 and #711
also removed nasty tabs characters to pretty spaces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/popupwin.js

    r419 r475  
    22// Distributed under the same terms as HTMLArea itself. 
    33 
    4 function PopupWin(editor, title, handler, initFunction) { 
    5         this.editor = editor; 
    6         this.handler = handler; 
    7         var dlg = window.open("", "__ha_dialog", 
    8                               "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40" + 
    9                               "scrollbars=no,resizable=no"); 
    10         this.window = dlg; 
    11         var doc = dlg.document; 
    12         this.doc = doc; 
    13         var self = this; 
     4function PopupWin(editor, title, handler, initFunction) 
     5{ 
     6  this.editor = editor; 
     7  this.handler = handler; 
     8  var dlg = window.open("", "__ha_dialog", "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40,scrollbars=no,resizable=no"); 
     9  this.window = dlg; 
     10  var doc = dlg.document; 
     11  this.doc = doc; 
     12  var self = this; 
    1413 
    15         var base = document.baseURI || document.URL; 
    16         if (base && base.match(/(.*)\/([^\/]+)/)) { 
    17                 base = RegExp.$1 + "/"; 
    18         } 
    19         if (typeof _editor_url != "undefined" && !/^\//.test(_editor_url) && !/http:\/\//.test(_editor_url)) { 
    20                 // _editor_url doesn't start with '/' which means it's relative 
    21                 // FIXME: there's a problem here, it could be http:// which 
    22                 // doesn't start with slash but it's not relative either. 
    23                 base += _editor_url; 
    24         } else 
    25                 base = _editor_url; 
    26         if (!/\/$/.test(base)) { 
    27                 // base does not end in slash, add it now 
    28                 base += '/'; 
    29         } 
    30         this.baseURL = base; 
     14  var base = document.baseURI || document.URL; 
     15  if ( base && base.match(/(.*)\/([^\/]+)/) ) 
     16  { 
     17    base = RegExp.$1 + "/"; 
     18  } 
     19  // @fixme: why using a regex here and not a simple string test ? 
     20  if ( typeof _editor_url != "undefined" && ! ( /^\//.test(_editor_url) ) && ! ( /http:\/\//.test(_editor_url) ) ) 
     21  { 
     22    // _editor_url doesn't start with '/' which means it's relative 
     23    // FIXME: there's a problem here, it could be http:// which 
     24    // doesn't start with slash but it's not relative either. 
     25    base += _editor_url; 
     26  } 
     27  else 
     28  { 
     29    base = _editor_url; 
     30  } 
     31  
     32  // @fixme: why using a regex here and not a simple string test ? 
     33  if ( ! ( /\/$/.test(base) ) ) 
     34  { 
     35    // base does not end in slash, add it now 
     36    base += '/'; 
     37  } 
     38  this.baseURL = base; 
    3139 
    32         doc.open(); 
    33         var html = "<html><head><title>" + title + "</title>\n"; 
    34         // html += "<base href='" + base + "htmlarea.js' />\n"; 
    35         html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n"; 
    36         html += "<body class='dialog popupwin' id='--HA-body'></body></html>"; 
    37         doc.write(html); 
    38         doc.close(); 
     40  doc.open(); 
     41  var html = "<html><head><title>" + title + "</title>\n"; 
     42  // html += "<base href='" + base + "htmlarea.js' />\n"; 
     43  html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n"; 
     44  html += "<body class='dialog popupwin' id='--HA-body'></body></html>"; 
     45  doc.write(html); 
     46  doc.close(); 
    3947 
    40         // sometimes I Hate Mozilla... ;-( 
    41         function init2() { 
    42                 var body = doc.body; 
    43                 if (!body) { 
    44                         setTimeout(init2, 25); 
    45                         return false; 
    46                 } 
    47                 dlg.title = title; 
    48                 doc.documentElement.style.padding = "0px"; 
    49                 doc.documentElement.style.margin = "0px"; 
    50                 var content = doc.createElement("div"); 
    51                 content.className = "content"; 
    52                 self.content = content; 
    53                 body.appendChild(content); 
    54                 self.element = body; 
    55                 initFunction(self); 
    56                 dlg.focus(); 
    57         } 
    58         init2(); 
     48  // sometimes I Hate Mozilla... ;-( 
     49  function init2() 
     50  { 
     51    var body = doc.body; 
     52    if ( !body ) 
     53    { 
     54      setTimeout(init2, 25); 
     55      return false; 
     56    } 
     57    dlg.title = title; 
     58    doc.documentElement.style.padding = "0px"; 
     59    doc.documentElement.style.margin = "0px"; 
     60    var content = doc.createElement("div"); 
     61    content.className = "content"; 
     62    self.content = content; 
     63    body.appendChild(content); 
     64    self.element = body; 
     65    initFunction(self); 
     66    dlg.focus(); 
     67  } 
     68  init2(); 
    5969} 
    6070 
    61 PopupWin.prototype.callHandler = function() { 
    62         var tags = ["input", "textarea", "select"]; 
    63         var params = new Object(); 
    64         for (var ti = tags.length; --ti >= 0;) { 
    65                 var tag = tags[ti]; 
    66                 var els = this.content.getElementsByTagName(tag); 
    67                 for (var j = 0; j < els.length; ++j) { 
    68                         var el = els[j]; 
    69                         var val = el.value; 
    70                         if (el.tagName.toLowerCase() == "input") { 
    71                                 if (el.type == "checkbox") { 
    72                                         val = el.checked; 
    73                                 } 
    74                         } 
    75                         params[el.name] = val; 
    76                 } 
    77         } 
    78         this.handler(this, params); 
    79         return false; 
     71PopupWin.prototype.callHandler = function() 
     72{ 
     73  var tags = ["input", "textarea", "select"]; 
     74  var params = {}; 
     75  for ( var ti = tags.length; --ti >= 0; ) 
     76  { 
     77    var tag = tags[ti]; 
     78    var els = this.content.getElementsByTagName(tag); 
     79    for ( var j = 0; j < els.length; ++j ) 
     80    { 
     81      var el = els[j]; 
     82      var val = el.value; 
     83      if ( el.tagName.toLowerCase() == "input" ) 
     84      { 
     85        if ( el.type == "checkbox" ) 
     86        { 
     87          val = el.checked; 
     88        } 
     89      } 
     90      params[el.name] = val; 
     91    } 
     92  } 
     93  this.handler(this, params); 
     94  return false; 
    8095}; 
    8196 
    82 PopupWin.prototype.close = function() { 
    83         this.window.close(); 
     97PopupWin.prototype.close = function() 
     98{ 
     99  this.window.close(); 
    84100}; 
    85101 
    86 PopupWin.prototype.addButtons = function() { 
    87         var self = this; 
    88         var div = this.doc.createElement("div"); 
    89         this.content.appendChild(div); 
    90         div.className = "buttons"; 
    91         for (var i = 0; i < arguments.length; ++i) { 
    92                 var btn = arguments[i]; 
    93                 var button = this.doc.createElement("button"); 
    94                 div.appendChild(button); 
    95                 button.innerHTML = HTMLArea._lc(btn, 'HTMLArea'); 
    96                 switch (btn.toLowerCase()) { 
    97                     case "ok": 
    98       HTMLArea.addDom0Event(button, 'click', 
    99                         function() { 
    100                                 self.callHandler(); 
    101                                 self.close(); 
    102                                 return false; 
    103                         }); 
    104                         break; 
    105                     case "cancel": 
    106                         HTMLArea.addDom0Event(button, 'click',  function() { 
    107                                 self.close(); 
    108                                 return false; 
    109                         }); 
    110                         break; 
    111                 } 
    112         } 
     102PopupWin.prototype.addButtons = function() 
     103{ 
     104  // @fixme: isn't self a predefined variable used to access self frame in most browsers ? 
     105  //         if yes, then we break it here 
     106  var self = this; 
     107  var div = this.doc.createElement("div"); 
     108  this.content.appendChild(div); 
     109  div.className = "buttons"; 
     110  for ( var i = 0; i < arguments.length; ++i ) 
     111  { 
     112    var btn = arguments[i]; 
     113    var button = this.doc.createElement("button"); 
     114    div.appendChild(button); 
     115    button.innerHTML = HTMLArea._lc(btn, 'HTMLArea'); 
     116    switch (btn.toLowerCase()) 
     117    { 
     118      case "ok": 
     119        HTMLArea.addDom0Event(button, 'click', 
     120          function() 
     121          { 
     122            self.callHandler(); 
     123            self.close(); 
     124            return false; 
     125          } 
     126        ); 
     127      break; 
     128      case "cancel": 
     129        HTMLArea.addDom0Event(button, 'click', 
     130          function() 
     131          { 
     132            self.close(); 
     133            return false; 
     134          } 
     135        ); 
     136      break; 
     137    } 
     138  } 
    113139}; 
    114140 
    115 PopupWin.prototype.showAtElement = function() { 
    116         var self = this; 
    117         // Mozilla needs some time to realize what's goin' on.. 
    118         setTimeout(function() { 
    119                 var w = self.content.offsetWidth + 4; 
    120                 var h = self.content.offsetHeight + 4; 
    121                 // size to content -- that's fuckin' buggy in all fuckin' browsers!!! 
    122                 // so that we set a larger size for the dialog window and then center 
    123                 // the element inside... phuck! 
     141PopupWin.prototype.showAtElement = function() 
     142{ 
     143  var self = this; 
     144  // Mozilla needs some time to realize what's goin' on.. 
     145  setTimeout(function() 
     146    { 
     147      var w = self.content.offsetWidth + 4; 
     148      var h = self.content.offsetHeight + 4; 
     149      // size to content -- that's fuckin' buggy in all fuckin' browsers!!! 
     150      // so that we set a larger size for the dialog window and then center 
     151      // the element inside... phuck! 
    124152 
    125                 // center... 
    126                 var el = self.content; 
    127                 var s = el.style; 
    128                 // s.width = el.offsetWidth + "px"; 
    129                 // s.height = el.offsetHeight + "px"; 
    130                 s.position = "absolute"; 
    131                 s.left = (w - el.offsetWidth) / 2 + "px"; 
    132                 s.top = (h - el.offsetHeight) / 2 + "px"; 
    133                 if (HTMLArea.is_gecko) { 
    134                         self.window.innerWidth = w; 
    135                         self.window.innerHeight = h; 
    136                 } else { 
    137                         self.window.resizeTo(w + 8, h + 35); 
    138                 } 
    139         }, 25); 
     153      // center... 
     154      var el = self.content; 
     155      var s = el.style; 
     156      // s.width = el.offsetWidth + "px"; 
     157      // s.height = el.offsetHeight + "px"; 
     158      s.position = "absolute"; 
     159      s.left = parseInt((w - el.offsetWidth) / 2, 10) + "px"; 
     160      s.top = parseInt((h - el.offsetHeight) / 2, 10) + "px"; 
     161      if (HTMLArea.is_gecko) 
     162      { 
     163        self.window.innerWidth = w; 
     164        self.window.innerHeight = h; 
     165      } 
     166      else 
     167      { 
     168        self.window.resizeTo(w + 8, h + 35); 
     169      } 
     170    }, 
     171    25); 
    140172}; 
Note: See TracChangeset for help on using the changeset viewer.