popupwin.js

来自「是个不错的文件代码,希望大家好好用,」· JavaScript 代码 · 共 172 行

JS
172
字号
// (c) dynarch.com 2003-2004// Distributed under the same terms as HTMLArea itself.function PopupWin(editor, title, handler, initFunction){  this.editor = editor;  this.handler = handler;  var dlg = window.open("", "__ha_dialog", "toolbar=no,menubar=no,personalbar=no,width=600,height=600,left=20,top=40,scrollbars=no,resizable=no");  this.window = dlg;  var doc = dlg.document;  this.doc = doc;  var self = this;  var base = document.baseURI || document.URL;  if ( base && base.match(/(.*)\/([^\/]+)/) )  {    base = RegExp.$1 + "/";  }  // @fixme: why using a regex here and not a simple string test ?  if ( typeof _editor_url != "undefined" && ! ( /^\//.test(_editor_url) ) && ! ( /http:\/\//.test(_editor_url) ) )  {    // _editor_url doesn't start with '/' which means it's relative    // FIXME: there's a problem here, it could be http:// which    // doesn't start with slash but it's not relative either.    base += _editor_url;  }  else  {    base = _editor_url;  }   // @fixme: why using a regex here and not a simple string test ?  if ( ! ( /\/$/.test(base) ) )  {    // base does not end in slash, add it now    base += '/';  }  this.baseURL = base;  doc.open();  var html = "<html><head><title>" + title + "</title>\n";  // html += "<base href='" + base + "htmlarea.js' />\n";  html += "<style type='text/css'>@import url(" + base + "htmlarea.css);</style></head>\n";  html += "<body class='dialog popupwin' id='--HA-body'></body></html>";  doc.write(html);  doc.close();  // sometimes I Hate Mozilla... ;-(  function init2()  {    var body = doc.body;    if ( !body )    {      setTimeout(init2, 25);      return false;    }    dlg.title = title;    doc.documentElement.style.padding = "0px";    doc.documentElement.style.margin = "0px";    var content = doc.createElement("div");    content.className = "content";    self.content = content;    body.appendChild(content);    self.element = body;    initFunction(self);    dlg.focus();  }  init2();}PopupWin.prototype.callHandler = function(){  var tags = ["input", "textarea", "select"];  var params = {};  for ( var ti = tags.length; --ti >= 0; )  {    var tag = tags[ti];    var els = this.content.getElementsByTagName(tag);    for ( var j = 0; j < els.length; ++j )    {      var el = els[j];      var val = el.value;      if ( el.tagName.toLowerCase() == "input" )      {        if ( el.type == "checkbox" )        {          val = el.checked;        }      }      params[el.name] = val;    }  }  this.handler(this, params);  return false;};PopupWin.prototype.close = function(){  this.window.close();};PopupWin.prototype.addButtons = function(){  // @fixme: isn't self a predefined variable used to access self frame in most browsers ?  //         if yes, then we break it here  var self = this;  var div = this.doc.createElement("div");  this.content.appendChild(div);  div.className = "buttons";  for ( var i = 0; i < arguments.length; ++i )  {    var btn = arguments[i];    var button = this.doc.createElement("button");    div.appendChild(button);    button.innerHTML = HTMLArea._lc(btn, 'HTMLArea');    switch (btn.toLowerCase())    {      case "ok":        HTMLArea.addDom0Event(button, 'click',          function()          {            self.callHandler();            self.close();            return false;          }        );      break;      case "cancel":        HTMLArea.addDom0Event(button, 'click',          function()          {            self.close();            return false;          }        );      break;    }  }};PopupWin.prototype.showAtElement = function(){  var self = this;  // Mozilla needs some time to realize what's goin' on..  setTimeout(function()    {      var w = self.content.offsetWidth + 4;      var h = self.content.offsetHeight + 4;      // size to content -- that's fuckin' buggy in all fuckin' browsers!!!      // so that we set a larger size for the dialog window and then center      // the element inside... phuck!      // center...      var el = self.content;      var s = el.style;      // s.width = el.offsetWidth + "px";      // s.height = el.offsetHeight + "px";      s.position = "absolute";      s.left = parseInt((w - el.offsetWidth) / 2, 10) + "px";      s.top = parseInt((h - el.offsetHeight) / 2, 10) + "px";      if (HTMLArea.is_gecko)      {        self.window.innerWidth = w;        self.window.innerHeight = h;      }      else      {        self.window.resizeTo(w + 8, h + 35);      }    },    25);};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?