⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editor.js

📁 论坛系统EasyJForum 是一个基于 Java 技术的免费社区论坛软件系统
💻 JS
📖 第 1 页 / 共 2 页
字号:
		case '24pt': return 6;
		case '36pt': return 7;
		default: return 3;
	}
}

function chooseColor(obj, state) 
{
	obj.style.cursor = 'pointer';
	var mode = state == 'mouseover' ? 'hover' : 'normal';
	obj.className = 'color_' + mode;
}

function getSel() 
{
	if(is_ie) {
		var range = editdoc.selection.createRange();
		if(range.htmlText && range.text) {
			return range.htmlText;
		} else {
			var htmltext = '';
			for(var i = 0; i < range.length; i++) {
				htmltext += range.item(i).outerHTML;
			}
			return htmltext;
		}
	} else {
		selection = editwin.getSelection();
		checkFocus();
		range = selection ? selection.getRangeAt(0) : editdoc.createRange();
		return getNodeHtml(range.cloneContents(), false);
	}
}

function insertLink(cmd) 
{
	var sel, pos;
	if(is_ie) {
		sel = editdoc.selection.createRange();
		pos = getCaret();
	}
	var selection = sel ? sel.htmlText : getSel();
	selection = trim(selection);
	var tmpStr = selection.toLowerCase().replace(/&nbsp;|\s/ig,'');
	tmpStr = tmpStr.replace(/<(.+)><\/\1>/ig,'');
	tmpStr = tmpStr.replace(/<p[^>]*><\/p>/ig,'');
	if (tmpStr == '')
		selection = '';
		
	var ctrlid = 'htmleditor_cmd_' + cmd;
	var text = msgs['enter_'+cmd+'_link']+'<br/><input type="text" id="'+ctrlid+'_param_1" size=50 maxlength=1000><br/>'
			  + msgs['enter_'+cmd+'_title']+'<br/><input type="text" id="'+ctrlid+'_param_2" size=50 maxlength=100>';
	var div = createEditMenu(ctrlid, text);
	
	$(ctrlid + '_param_1').focus();
	$(ctrlid + '_param_1').onkeydown = editMenu_keydown;
	$(ctrlid + '_param_2').onkeydown = editMenu_keydown;
	$(ctrlid + '_submit').onclick = function() {
		checkFocus();
		if(is_ie) {
			setCaret(pos);
		}
		var href = trim($(ctrlid + '_param_1').value);
		var title = trim($(ctrlid + '_param_2').value);
		if(href != '') {
			if (cmd == 'url')
			{
				title = selection ? selection : title;
				if (title == '')
					title = href;
			}
			href = /^(www\.)/.test(href) ? 'http://'+href : href;
			var txt = getLinkText(cmd, href, title);
			var offset = 0;
			if (cmd == 'url') 
				offset = txt.length - title.length;
			insertHTML(txt, offset, 0, (selection ? true : false), sel);
		}
		hideMenu();
		document.body.removeChild(div);
	}
}

function getLinkText(cmd, href, title)
{
	var result = '';
	if (cmd == 'url')
		result = '<a href="' + href + '" target="_blank">' + title + '</a>';
	else if (cmd == 'img')
		result = '[img="' + href + '"]' + title + '[/img]';
	else if (cmd == 'media')
		result = '[media="' + href + '"]' + title + '[/media]';
	return result;
}

function insertHTML(text, offset, end, selected, sel)
{
	checkFocus();
	if(is_ie) {
		if(typeof(editdoc.selection)!='undefined' 
				  && editdoc.selection.type != 'Text' && editdoc.selection.type != 'None') {
			offset = false;
			editdoc.selection.clear();
		}
		if(typeof(sel)=='undefined') {
			sel = editdoc.selection.createRange();
		}
		sel.pasteHTML(text);
		if(text.indexOf('\n') == -1) {
			if(typeof(offset)!='undefined') {
				sel.moveStart('character', offset-strlen(text));
				sel.moveEnd('character', -end);
			} else if(offset != false) {
				sel.moveStart('character', -strlen(text));
			}
			if(typeof(selected)!='undefined' && selected) {
				sel.select();
			}
		}
	} else {
		editdoc.execCommand('removeformat', false, true);
		var frag = editdoc.createDocumentFragment();
		var tmpNode = editdoc.createElement('span');
		tmpNode.innerHTML = text;
		while (tmpNode.firstChild) {
			frag.appendChild(tmpNode.firstChild);
		}
		insertNodeAtSel(frag);
	}
}

function clearContent() 
{
	if(wysiwyg) {
		editdoc.body.innerHTML = is_ie ? '' : '<br/>';
	} else {
		textobj.value = '';
	}
}

function resizeEditor(y) 
{
	var obj = wysiwyg ? editbox : textobj;
	var height_new = parseInt(obj.style.height, 10) + y;
	if(height_new >= 100) {
		obj.style.height = height_new + 'px';
	}
}

function checkFocus()
{
	var obj = wysiwyg ? editwin : textobj;
	if(!obj.hasfocus) obj.focus();
}

function insertSmile(smileid) 
{
	checkFocus();
	var src = $('smile_' + smileid).src;
	var code = $('smile_' + smileid).alt;
	var title = $('smile_' + smileid).title;
	
	if(typeof wysiwyg != 'undefined' && wysiwyg) {
		if(is_ie) {
			insertHTML('<img src="' + src + '" border="0" align="absbottom" smileid="' + smileid + '" alt="' + code + '" title="' + title + '"/>', 
					   false);
		} else {
			editdoc.execCommand('InsertImage', false, src);
			var smileImgs = editdoc.body.getElementsByTagName('img');
			for(var i = 0; i < smileImgs.length; i++) {
				if(smileImgs[i].src == src && smileImgs[i].getAttribute('smileid') < 1) {
					smileImgs[i].setAttribute('smileid', smileid);
					smileImgs[i].setAttribute('border', "0");
					smileImgs[i].setAttribute('align', "absbottom");
					smileImgs[i].setAttribute('alt', code);
					smileImgs[i].setAttribute('title', title);
				}
			}
		}
	} else {
		var txt = '<img src="' + src + '" border="0" align="absbottom" smileid="' + smileid + '" alt="' + code + '" title="' + title + '"/>';
		var selection = document.selection;
		checkFocus();
		if(typeof(textobj.selectionStart)!='undefined') {
			textobj.value = textobj.value.substr(0, textobj.selectionStart) + txt + textobj.value.substr(textobj.selectionEnd);
		} else if(selection && selection.createRange) {
			var sel = selection.createRange();
			sel.text = txt;
			sel.moveStart('character', -strlen(txt));
		} else {
			textobj.value += txt;
		}
	}
}

function setCaretAtEnd() {
	var obj = (typeof(wysiwyg) == 'undefined' || !wysiwyg) ? textobj : editwin;
	if(typeof(wysiwyg) != 'undefined' && wysiwyg) {
		if(is_ie) {
			var sel = editdoc.selection.createRange();
			sel.moveStart('character', strlen(getContent()));
			sel.select();
		}
	} else {
		if(obj.createTextRange)  {
			var sel = obj.createTextRange();
			sel.moveStart('character', strlen(obj.value));
			sel.collapse();
			sel.select();
		}
	}
}

function switchEditor(mode) 
{
	mode = parseInt(mode);
	if(mode != wysiwyg)
	{
		var parsedtext = getContent();
		wysiwyg = mode;
		createEditor(mode, parsedtext);
		editwin.focus();
		setCaretAtEnd();
	}
}

function RGBToColor(forecolor) 
{
	if(is_ie) {
		return hexRGBToColor((forecolor & 0xFF).toString(16), ((forecolor >> 8) & 0xFF).toString(16), 
							  ((forecolor >> 16) & 0xFF).toString(16));
	}
	if(forecolor == '' || forecolor == null) {
		forecolor = window.getComputedStyle(editdoc.body, null).getPropertyValue('color');
	}
	if(forecolor.toLowerCase().indexOf('rgb') == 0) {
		var matches = forecolor.match(/^rgb\s*\(([0-9]+),\s*([0-9]+),\s*([0-9]+)\)$/);
		if(matches) {
			forecolor = hexRGBToColor((matches[1] & 0xFF).toString(16), 
						 			  (matches[2] & 0xFF).toString(16), 
							 		  (matches[3] & 0xFF).toString(16));
		} else {
			forecolor = RGBToColor(null);
		}
	}
	return forecolor;
}

function hexRGBToColor(r, g, b) 
{
	var coloroptions = {'#000000' : 'Black', '#a0522d' : 'Sienna', '#556b2f' : 'DarkOliveGreen', '#006400' : 'DarkGreen', 
						'#483d8b' : 'DarkSlateBlue', '#000080' : 'Navy', '#4b0082' : 'Indigo', '#2f4f4f' : 'DarkSlateGray', 
						'#8b0000' : 'DarkRed', '#ff8c00' : 'DarkOrange', '#808000' : 'Olive', '#008000' : 'Green', 
						'#008080' : 'Teal', '#0000ff' : 'Blue', '#708090' : 'SlateGray', '#696969' : 'DimGray', 
						'#ff0000' : 'Red', '#f4a460' : 'SandyBrown', '#9acd32' : 'YellowGreen', '#2e8b57' : 'SeaGreen', 
						'#48d1cc' : 'MediumTurquoise', '#4169e1' : 'RoyalBlue', '#800080' : 'Purple', '#808080' : 'Gray', 
						'#ff00ff' : 'Magenta', '#ffa500' : 'Orange', '#ffff00' : 'Yellow', '#00ff00' : 'Lime', 
						'#00ffff' : 'Cyan', '#00bfff' : 'DeepSkyBlue', '#9932cc' : 'DarkOrchid', '#c0c0c0' : 'Silver', 
						'#ffc0cb' : 'Pink', '#f5deb3' : 'Wheat', '#fffacd' : 'LemonChiffon', '#98fb98' : 'PaleGreen', 
						'#afeeee' : 'PaleTurquoise', '#add8e6' : 'LightBlue', '#dda0dd' : 'Plum', '#ffffff' : 'White'};
	return coloroptions['#' + (getHexStr(r) + getHexStr(g) + getHexStr(b))];
}

function getHexStr(str)
{
	str = str + '';
	while(str.length < 2) { str = '0' + str; }
	return str;
}

function addSelRange(node)
{
	checkFocus();
	var sel = editwin.getSelection();
	var range = editdoc.createRange();
	range.selectNodeContents(node);
	sel.removeAllRanges();
	sel.addRange(range);
}

function insertNodeAtSel(text) 
{
	var sel = editwin.getSelection();
	var range = sel ? sel.getRangeAt(0) : editdoc.createRange();

	sel.removeAllRanges();
	range.deleteContents();
	
	var node = range.startContainer;
	var pos = range.startOffset;

	switch(node.nodeType) {
		case Node.ELEMENT_NODE:
			var selNode = text.firstChild;
			node.insertBefore(text, node.childNodes[pos]);
			addSelRange(selNode);
			break;
		case Node.TEXT_NODE:
			node = node.splitText(pos);
			var selNode = text.firstChild;
			node.parentNode.insertBefore(text, node);
			addSelRange(selNode);
			break;
	}
}

function getNodeHtml(root, isTopNode) 
{
	var result = "";
	switch(root.nodeType) {
		case Node.TEXT_NODE:
			result = root.data;
			break;
		case Node.ELEMENT_NODE:
		case Node.DOCUMENT_FRAGMENT_NODE:
			var isOver;
			if(isTopNode) {
				isOver = !root.hasChildNodes();
				result = '<' + root.tagName.toLowerCase();
				var attrs = root.attributes;
				var moz = /_moz/i;
				for(var i = 0; i < attrs.length; ++i) {
					var attr = attrs.item(i);
					if(!attr.specified || attr.name.match(moz) || attr.value.match(moz)) {
						continue;
					}
					result += " " + attr.name.toLowerCase() + '="' + attr.value + '"';
				}
				result += isOver ? "/>" : ">";
			}
			for(var child = root.firstChild; child; child = child.nextSibling) {
				result += getNodeHtml(child, true);
			}
			if(isTopNode && !isOver) {
				result += "</" + root.tagName.toLowerCase() + ">";
			}
			break;
	}
	return result;
}

⌨️ 快捷键说明

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