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 + -
显示快捷键?