亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htmlarea.js

?? SSCMS網站管理系統 飛狐源碼站 SSCMS可以將網站內容全部生成靜態HTML文件,這樣可以極大地節約主機資源
?? JS
?? 第 1 頁 / 共 5 頁
字號:

// Switches editor mode; parameter can be "textmode" or "wysiwyg".  If no
// parameter was passed this function toggles between modes.
HTMLArea.prototype.setMode = function(mode) {
	if (typeof mode == "undefined") {
		mode = ((this._editMode == "textmode") ? "wysiwyg" : "textmode");
	}
	switch (mode) {
	    case "textmode":
		this._textArea.value = this.getHTML();
		this._iframe.style.display = "none";
		this._textArea.style.display = "block";
		if (this.config.statusBar) {
			this._statusBar.innerHTML = HTMLArea.I18N.msg["TEXT_MODE"];
		}
		break;
	    case "wysiwyg":
		if (HTMLArea.is_gecko) {
			// disable design mode before changing innerHTML
			try {
				this._doc.designMode = "off";
			} catch(e) {};
		}
		if (!this.config.fullPage)
			this._doc.body.innerHTML = this.getHTML();
		else
			this.setFullHTML(this.getHTML());
		this._iframe.style.display = "block";
		this._textArea.style.display = "none";
		if (HTMLArea.is_gecko) {
			// we need to refresh that info for Moz-1.3a
			try {
				this._doc.designMode = "on";
			} catch(e) {};
		}
		if (this.config.statusBar) {
			this._statusBar.innerHTML = '';
			this._statusBar.appendChild(document.createTextNode(HTMLArea.I18N.msg["Path"] + ": "));
			this._statusBar.appendChild(this._statusBarTree);
		}
		break;
	    default:
		alert("Mode <" + mode + "> not defined!");
		return false;
	}
	this._editMode = mode;
	this.focusEditor();
};

HTMLArea.prototype.setFullHTML = function(html) {
	var save_multiline = RegExp.multiline;
	RegExp.multiline = true;
	if (html.match(HTMLArea.RE_doctype)) {
		this.setDoctype(RegExp.$1);
		html = html.replace(HTMLArea.RE_doctype, "");
	}
	RegExp.multiline = save_multiline;
	if (!HTMLArea.is_ie) {
		if (html.match(HTMLArea.RE_head))
			this._doc.getElementsByTagName("head")[0].innerHTML = RegExp.$1;
		if (html.match(HTMLArea.RE_body))
			this._doc.getElementsByTagName("body")[0].innerHTML = RegExp.$1;
	} else {
		var html_re = /<html>((.|\n)*?)<\/html>/i;
		html = html.replace(html_re, "$1");
		this._doc.open();
		this._doc.write(html);
		this._doc.close();
		this._doc.body.contentEditable = true;
		return true;
	}
};

/***************************************************
 *  Category: PLUGINS
 ***************************************************/

// this is the variant of the function above where the plugin arguments are
// already packed in an array.  Externally, it should be only used in the
// full-screen editor code, in order to initialize plugins with the same
// parameters as in the opener window.
HTMLArea.prototype.registerPlugin2 = function(plugin, args) {
	if (typeof plugin == "string")
		plugin = eval(plugin);
	var obj = new plugin(this, args);
	if (obj) {
		var clone = {};
		var info = plugin._pluginInfo;
		for (var i in info)
			clone[i] = info[i];
		clone.instance = obj;
		clone.args = args;
		this.plugins[plugin._pluginInfo.name] = clone;
	} else
		alert("Can't register plugin " + plugin.toString() + ".");
};

// Create the specified plugin and register it with this HTMLArea
HTMLArea.prototype.registerPlugin = function() {
	var plugin = arguments[0];
	var args = [];
	for (var i = 1; i < arguments.length; ++i)
		args.push(arguments[i]);
	this.registerPlugin2(plugin, args);
};

// static function that loads the required plugin and lang file, based on the
// language loaded already for HTMLArea.  You better make sure that the plugin
// _has_ that language, otherwise shit might happen ;-)
HTMLArea.loadPlugin = function(pluginName) {
	var dir = _editor_url + "plugins/" + pluginName;
	var plugin = pluginName.replace(/([a-z])([A-Z])([a-z])/g,
					function (str, l1, l2, l3) {
						return l1 + "-" + l2.toLowerCase() + l3;
					}).toLowerCase() + ".js";
	var plugin_file = dir + "/" + plugin;
	var plugin_lang = dir + "/lang/" + HTMLArea.I18N.lang + ".js";
	HTMLArea._scripts.push(plugin_file, plugin_lang);
	document.write("<script type='text/javascript' src='" + plugin_file + "'></script>");
	document.write("<script type='text/javascript' src='" + plugin_lang + "'></script>");
};

HTMLArea.loadStyle = function(style, plugin) {
	var url = _editor_url || '';
	if (typeof plugin != "undefined") {
		url += "plugins/" + plugin + "/";
	}
	url += style;
	document.write("<style type='text/css'>@import url(" + url + ");</style>");
};
HTMLArea.loadStyle("htmlarea.css");

/***************************************************
 *  Category: EDITOR UTILITIES
 ***************************************************/

// The following function is a slight variation of the word cleaner code posted
// by Weeezl (user @ InteractiveTools forums).
HTMLArea.prototype._wordClean = function() {
	var D = this.getInnerHTML();
	if (D.indexOf('class=Mso') >= 0) {

		// make one line
		D = D.replace(/\r\n/g, ' ').
			replace(/\n/g, ' ').
			replace(/\r/g, ' ').
			replace(/\&nbsp\;/g,' ');

		// keep tags, strip attributes
		D = D.replace(/ class=[^\s|>]*/gi,'').
			//replace(/<p [^>]*TEXT-ALIGN: justify[^>]*>/gi,'<p align="justify">').
			replace(/ style=\"[^>]*\"/gi,'').
			replace(/ align=[^\s|>]*/gi,'');

		//clean up tags
		D = D.replace(/<b [^>]*>/gi,'<b>').
			replace(/<i [^>]*>/gi,'<i>').
			replace(/<li [^>]*>/gi,'<li>').
			replace(/<ul [^>]*>/gi,'<ul>');

		// replace outdated tags
		D = D.replace(/<b>/gi,'<strong>').
			replace(/<\/b>/gi,'</strong>');

		// mozilla doesn't like <em> tags
		D = D.replace(/<em>/gi,'<i>').
			replace(/<\/em>/gi,'</i>');

		// kill unwanted tags
		D = D.replace(/<\?xml:[^>]*>/g, '').       // Word xml
			replace(/<\/?st1:[^>]*>/g,'').     // Word SmartTags
			replace(/<\/?[a-z]\:[^>]*>/g,'').  // All other funny Word non-HTML stuff
			replace(/<\/?font[^>]*>/gi,'').    // Disable if you want to keep font formatting
			replace(/<\/?span[^>]*>/gi,' ').
			replace(/<\/?div[^>]*>/gi,' ').
			replace(/<\/?pre[^>]*>/gi,' ').
			replace(/<\/?h[1-6][^>]*>/gi,' ');

		//remove empty tags
		//D = D.replace(/<strong><\/strong>/gi,'').
		//replace(/<i><\/i>/gi,'').
		//replace(/<P[^>]*><\/P>/gi,'');

		// nuke double tags
		oldlen = D.length + 1;
		while(oldlen > D.length) {
			oldlen = D.length;
			// join us now and free the tags, we'll be free hackers, we'll be free... ;-)
			D = D.replace(/<([a-z][a-z]*)> *<\/\1>/gi,' ').
				replace(/<([a-z][a-z]*)> *<([a-z][^>]*)> *<\/\1>/gi,'<$2>');
		}
		D = D.replace(/<([a-z][a-z]*)><\1>/gi,'<$1>').
			replace(/<\/([a-z][a-z]*)><\/\1>/gi,'<\/$1>');

		// nuke double spaces
		D = D.replace(/  */gi,' ');

		this.setHTML(D);
		this.updateToolbar();
	}
};

HTMLArea.prototype.forceRedraw = function() {
	this._doc.body.style.visibility = "hidden";
	this._doc.body.style.visibility = "visible";
	// this._doc.body.innerHTML = this.getInnerHTML();
};

// focuses the iframe window.  returns a reference to the editor document.
HTMLArea.prototype.focusEditor = function() {
	switch (this._editMode) {
	    case "wysiwyg" : this._iframe.contentWindow.focus(); break;
	    case "textmode": this._textArea.focus(); break;
	    default	   : alert("ERROR: mode " + this._editMode + " is not defined");
	}
	return this._doc;
};

// takes a snapshot of the current text (for undo)
HTMLArea.prototype._undoTakeSnapshot = function() {
	++this._undoPos;
	if (this._undoPos >= this.config.undoSteps) {
		// remove the first element
		this._undoQueue.shift();
		--this._undoPos;
	}
	// use the fasted method (getInnerHTML);
	var take = true;
	var txt = this.getInnerHTML();
	if (this._undoPos > 0)
		take = (this._undoQueue[this._undoPos - 1] != txt);
	if (take) {
		this._undoQueue[this._undoPos] = txt;
	} else {
		this._undoPos--;
	}
};

HTMLArea.prototype.undo = function() {
	if (this._undoPos > 0) {
		var txt = this._undoQueue[--this._undoPos];
		if (txt) this.setHTML(txt);
		else ++this._undoPos;
	}
};

HTMLArea.prototype.redo = function() {
	if (this._undoPos < this._undoQueue.length - 1) {
		var txt = this._undoQueue[++this._undoPos];
		if (txt) this.setHTML(txt);
		else --this._undoPos;
	}
};

// updates enabled/disable/active state of the toolbar elements
HTMLArea.prototype.updateToolbar = function(noStatus) {
	var doc = this._doc;
	var text = (this._editMode == "textmode");
	var ancestors = null;
	if (!text) {
		ancestors = this.getAllAncestors();
		if (this.config.statusBar && !noStatus) {
			this._statusBarTree.innerHTML = HTMLArea.I18N.msg["Path"] + ": "; // clear
			for (var i = ancestors.length; --i >= 0;) {
				var el = ancestors[i];
				if (!el) {
					// hell knows why we get here; this
					// could be a classic example of why
					// it's good to check for conditions
					// that are impossible to happen ;-)
					continue;
				}
				var a = document.createElement("a");
				a.href = "#";
				a.el = el;
				a.editor = this;
				a.onclick = function() {
					this.blur();
					this.editor.selectNodeContents(this.el);
					this.editor.updateToolbar(true);
					return false;
				};
				a.oncontextmenu = function() {
					// TODO: add context menu here
					this.blur();
					var info = "Inline style:\n\n";
					info += this.el.style.cssText.split(/;\s*/).join(";\n");
					alert(info);
					return false;
				};
				var txt = el.tagName.toLowerCase();
				a.title = el.style.cssText;
				if (el.id) {
					txt += "#" + el.id;
				}
				if (el.className) {
					txt += "." + el.className;
				}
				a.appendChild(document.createTextNode(txt));
				this._statusBarTree.appendChild(a);
				if (i != 0) {
					this._statusBarTree.appendChild(document.createTextNode(String.fromCharCode(0xbb)));
				}
			}
		}
	}
	for (var i in this._toolbarObjects) {
		var btn = this._toolbarObjects[i];
		var cmd = i;
		var inContext = true;
		if (btn.context && !text) {
			inContext = false;
			var context = btn.context;
			var attrs = [];
			if (/(.*)\[(.*?)\]/.test(context)) {
				context = RegExp.$1;
				attrs = RegExp.$2.split(",");
			}
			context = context.toLowerCase();
			var match = (context == "*");
			for (var k in ancestors) {
				if (!ancestors[k]) {
					// the impossible really happens.
					continue;
				}
				if (match || (ancestors[k].tagName.toLowerCase() == context)) {
					inContext = true;
					for (var ka in attrs) {
						if (!eval("ancestors[k]." + attrs[ka])) {
							inContext = false;
							break;
						}
					}
					if (inContext) {
						break;
					}
				}
			}
		}
		btn.state("enabled", (!text || btn.text) && inContext);
		if (typeof cmd == "function") {
			continue;
		}
		// look-it-up in the custom dropdown boxes
		var dropdown = this.config.customSelects[cmd];
		if ((!text || btn.text) && (typeof dropdown != "undefined")) {
			dropdown.refresh(this);
			continue;
		}
		switch (cmd) {
		    case "fontname":
		    case "fontsize":
		    case "formatblock":
			if (!text) try {
				var value = ("" + doc.queryCommandValue(cmd)).toLowerCase();
				if (!value) {
					// FIXME: what do we do here?
					break;
				}
				// HACK -- retrieve the config option for this
				// combo box.  We rely on the fact that the
				// variable in config has the same name as
				// button name in the toolbar.
				var options = this.config[cmd];
				var k = 0;
				// btn.element.selectedIndex = 0;
				for (var j in options) {
					// FIXME: the following line is scary.
					if ((j.toLowerCase() == value) ||
					    (options[j].substr(0, value.length).toLowerCase() == value)) {
						btn.element.selectedIndex = k;
						break;
					}
					++k;
				}
			} catch(e) {};
			break;
		    case "textindicator":
			if (!text) {
				try {with (btn.element.style) {
					backgroundColor = HTMLArea._makeColor(
						doc.queryCommandValue(HTMLArea.is_ie ? "backcolor" : "hilitecolor"));
					if (/transparent/i.test(backgroundColor)) {
						// Mozilla
						backgroundColor = HTMLArea._makeColor(doc.queryCommandValue("backcolor"));
					}
					color = HTMLArea._makeColor(doc.queryCommandValue("forecolor"));
					fontFamily = doc.queryCommandValue("fontname");
					fontWeight = doc.queryCommandState("bold") ? "bold" : "normal";
					fontStyle = doc.queryCommandState("italic") ? "italic" : "normal";
				}} catch (e) {
					// alert(e + "\n\n" + cmd);
				}
			}
			break;
		    case "htmlmode": btn.state("active", text); break;
		    case "lefttoright":
		    case "righttoleft":

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97aⅴ精品视频一二三区| 国产视频在线观看一区二区三区 | 91网站视频在线观看| 在线成人小视频| 国产欧美日韩视频在线观看| 午夜欧美视频在线观看| 国产成人免费视频网站高清观看视频| 欧美亚洲国产怡红院影院| 久久久91精品国产一区二区三区| 亚洲自拍偷拍九九九| 国产91在线看| 久久这里都是精品| 热久久免费视频| 欧美日韩午夜在线| 一区二区不卡在线视频 午夜欧美不卡在| 日本欧美一区二区| 欧美三级视频在线| 亚洲视频在线观看三级| 丁香啪啪综合成人亚洲小说| 欧美一级片在线看| 午夜欧美视频在线观看| 欧美亚洲一区二区在线观看| 国产女人18毛片水真多成人如厕| 欧美日韩1区2区| 欧美日韩高清一区二区不卡| 亚洲综合区在线| 91亚洲精品一区二区乱码| 欧美韩国日本不卡| 成人午夜电影久久影院| 亚洲欧美综合在线精品| 国产91精品久久久久久久网曝门| 2021国产精品久久精品| 久久国产精品99精品国产| 日韩一二三区视频| 久久99精品久久久| www国产亚洲精品久久麻豆| 久久精品国产精品亚洲综合| 精品成人一区二区三区四区| 久久精品国产精品亚洲精品 | 亚洲国产日韩一区二区| 精品视频免费看| 日韩国产欧美一区二区三区| 精品久久久久久最新网址| 久久99精品国产麻豆婷婷| 日韩欧美一区二区三区在线| 青青草精品视频| 亚洲精品在线三区| 国产成人午夜99999| 最新高清无码专区| 在线观看视频91| 日本视频中文字幕一区二区三区| 91精品国产欧美一区二区| 国内外成人在线| 中文字幕一区免费在线观看| 欧美性猛交xxxx乱大交退制版 | 欧美一区二区三区视频免费播放| 日韩精品成人一区二区在线| 精品国产乱码久久久久久夜甘婷婷 | 五月激情综合网| 精品人在线二区三区| 成人av午夜电影| 视频在线观看一区| 国产亚洲女人久久久久毛片| 色乱码一区二区三区88| 美女爽到高潮91| 国产精品理伦片| 欧美性一级生活| 国内一区二区在线| 亚洲欧美二区三区| 精品电影一区二区| 91高清在线观看| 狠狠色丁香久久婷婷综合_中| 亚洲欧美一区二区三区久本道91| 日韩欧美亚洲国产另类| 成人99免费视频| 日本网站在线观看一区二区三区 | 91精品麻豆日日躁夜夜躁| 国产精品一区在线观看你懂的| 亚洲欧美日韩国产另类专区 | 国产精品正在播放| 亚洲国产精品久久久久婷婷884| 久久精品一区二区三区av| 欧美三区免费完整视频在线观看| 处破女av一区二区| 九九**精品视频免费播放| 亚洲影院理伦片| 亚洲成人tv网| 国产精品视频麻豆| 欧美xingq一区二区| 欧洲亚洲精品在线| 99re免费视频精品全部| 国产酒店精品激情| 美日韩一区二区三区| 亚洲一二三区在线观看| 国产精品久久久久久久久果冻传媒| 日韩欧美中文字幕公布| 欧美日韩国产成人在线免费| 91网站在线观看视频| 成人sese在线| 成人深夜福利app| 国产传媒欧美日韩成人| 日韩av一区二区三区四区| 一区二区三区视频在线观看| 国产精品成人一区二区艾草 | 99久久国产综合精品色伊| 久久99国产乱子伦精品免费| 亚洲成av人片一区二区梦乃| 亚洲一区二区在线视频| 成人欧美一区二区三区1314| 中文字幕一区二区5566日韩| 中文字幕乱码一区二区免费| 国产欧美日韩久久| 国产人久久人人人人爽| 国产亚洲自拍一区| 国产偷国产偷亚洲高清人白洁| 日韩免费一区二区| 欧美一区二区在线不卡| 欧美一区二区福利在线| 91精品国产欧美日韩| 欧美一区二区啪啪| 日韩欧美一二三区| 久久精品人人做| 中文字幕在线不卡| 亚洲天堂精品在线观看| 亚洲图片欧美一区| 奇米精品一区二区三区四区| 麻豆精品新av中文字幕| 美女视频第一区二区三区免费观看网站| 亚洲第四色夜色| 蜜臀a∨国产成人精品| 韩国欧美国产一区| 成人av在线网站| 欧美自拍偷拍一区| 这里只有精品电影| 久久久国产精华| 中文字幕一区二区不卡| 亚洲第一福利视频在线| 久久99精品一区二区三区| 成人综合婷婷国产精品久久免费| 99热精品国产| 欧美一区二区三区视频免费| 国产午夜精品理论片a级大结局| 国产精品久久久久毛片软件| 亚洲综合色网站| 麻豆久久久久久| 91啪九色porn原创视频在线观看| 欧美日韩一区久久| 久久综合久久鬼色| 一区二区三区欧美久久| 久久精品国产亚洲5555| 成人综合日日夜夜| 欧美精品丝袜中出| 国产女主播视频一区二区| 亚洲免费在线视频一区 二区| 日本不卡一二三| 91福利区一区二区三区| 欧美成人高清电影在线| 亚洲女性喷水在线观看一区| 麻豆国产精品777777在线| 99久久免费国产| 欧美va亚洲va国产综合| 亚洲精品乱码久久久久久日本蜜臀| 日韩在线a电影| 99久久精品国产导航| 欧美变态凌虐bdsm| 亚洲激情六月丁香| 国产乱人伦偷精品视频不卡| 欧美日韩一区二区不卡| 自拍偷拍亚洲激情| 国产乱码字幕精品高清av| 欧美丰满美乳xxx高潮www| 中文字幕在线一区二区三区| 国产在线不卡一卡二卡三卡四卡| 欧美美女一区二区在线观看| 成人欧美一区二区三区1314| 国产资源在线一区| 9191国产精品| 一二三区精品视频| 成人av在线电影| 国产视频一区二区在线观看| 免费成人结看片| 欧洲人成人精品| 亚洲美女在线国产| av在线不卡电影| 国产香蕉久久精品综合网| 蜜臀久久99精品久久久久久9| 欧美亚洲日本一区| 一区二区三区久久| 色综合一个色综合| 亚洲私人黄色宅男| 99精品国产视频| 亚洲国产精品黑人久久久| 国产成人精品网址| 欧美国产丝袜视频| 国产成人精品三级| 国产精品久久影院| 91亚洲精品久久久蜜桃网站 | 美女视频黄 久久| 欧美大胆一级视频| 老司机午夜精品|