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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fck_gecko.js

?? 強(qiáng)大的個(gè)人日志系統(tǒng),界面華麗
?? JS
?? 第 1 頁 / 共 2 頁
字號(hào):
?/*
 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
 * Copyright (C) 2003-2008 Frederico Caldeira Knabben
 *
 * == BEGIN LICENSE ==
 *
 * Licensed under the terms of any of the following licenses at your
 * choice:
 *
 *  - GNU General Public License Version 2 or later (the "GPL")
 *    http://www.gnu.org/licenses/gpl.html
 *
 *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
 *    http://www.gnu.org/licenses/lgpl.html
 *
 *  - Mozilla Public License Version 1.1 or later (the "MPL")
 *    http://www.mozilla.org/MPL/MPL-1.1.html
 *
 * == END LICENSE ==
 *
 * Creation and initialization of the "FCK" object. This is the main
 * object that represents an editor instance.
 * (Gecko specific implementations)
 */

FCK.Description = "FCKeditor for Gecko Browsers" ;

FCK.InitializeBehaviors = function()
{
	// When calling "SetData", the editing area IFRAME gets a fixed height. So we must recalculate it.
	if ( window.onresize )		// Not for Safari/Opera.
		window.onresize() ;

	FCKFocusManager.AddWindow( this.EditorWindow ) ;

	this.ExecOnSelectionChange = function()
	{
		FCK.Events.FireEvent( "OnSelectionChange" ) ;
	}

	this._ExecDrop = function( evt )
	{
		if ( FCK.MouseDownFlag )
		{
			FCK.MouseDownFlag = false ;
			return ;
		}

		if ( FCKConfig.ForcePasteAsPlainText )
		{
			if ( evt.dataTransfer )
			{
				var text = evt.dataTransfer.getData( 'Text' ) ;
				text = FCKTools.HTMLEncode( text ) ;
				text = FCKTools.ProcessLineBreaks( window, FCKConfig, text ) ;
				FCK.InsertHtml( text ) ;
			}
			else if ( FCKConfig.ShowDropDialog )
				FCK.PasteAsPlainText() ;

			evt.preventDefault() ;
			evt.stopPropagation() ;
		}
	}

	this._ExecCheckCaret = function( evt )
	{
		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
			return ;

		if ( evt.type == 'keypress' )
		{
			var keyCode = evt.keyCode ;
			// ignore if positioning key is not pressed.
			// left or up arrow keys need to be processed as well, since <a> links can be expanded in Gecko's editor
			// when the caret moved left or up from another block element below.
			if ( keyCode < 33 || keyCode > 40 )
				return ;
		}

		var blockEmptyStop = function( node )
		{
			if ( node.nodeType != 1 )
				return false ;
			var tag = node.tagName.toLowerCase() ;
			return ( FCKListsLib.BlockElements[tag] || FCKListsLib.EmptyElements[tag] ) ;
		}

		var moveCursor = function()
		{
			var selection = FCKSelection.GetSelection() ;
			var range = selection.getRangeAt(0) ;
			if ( ! range || ! range.collapsed )
				return ;

			var node = range.endContainer ;

			// only perform the patched behavior if we're at the end of a text node.
			if ( node.nodeType != 3 )
				return ;

			if ( node.nodeValue.length != range.endOffset )
				return ;

			// only perform the patched behavior if we're in an <a> tag, or the End key is pressed.
			var parentTag = node.parentNode.tagName.toLowerCase() ;
			if ( ! (  parentTag == 'a' || ( !FCKBrowserInfo.IsOpera && String(node.parentNode.contentEditable) == 'false' ) ||
					( ! ( FCKListsLib.BlockElements[parentTag] || FCKListsLib.NonEmptyBlockElements[parentTag] )
					  && keyCode == 35 ) ) )
				return ;

			// our caret has moved to just after the last character of a text node under an unknown tag, how to proceed?
			// first, see if there are other text nodes by DFS walking from this text node.
			// 	- if the DFS has scanned all nodes under my parent, then go the next step.
			//	- if there is a text node after me but still under my parent, then do nothing and return.
			var nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode, blockEmptyStop ) ;
			if ( nextTextNode )
				return ;

			// we're pretty sure we need to move the caret forcefully from here.
			range = FCK.EditorDocument.createRange() ;

			nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode.parentNode, blockEmptyStop ) ;
			if ( nextTextNode )
			{
				// Opera thinks the dummy empty text node we append beyond the end of <a> nodes occupies a caret
				// position. So if the user presses the left key and we reset the caret position here, the user
				// wouldn't be able to go back.
				if ( FCKBrowserInfo.IsOpera && keyCode == 37 )
					return ;

				// now we want to get out of our current parent node, adopt the next parent, and move the caret to
				// the appropriate text node under our new parent.
				// our new parent might be our current parent's siblings if we are lucky.
				range.setStart( nextTextNode, 0 ) ;
				range.setEnd( nextTextNode, 0 ) ;
			}
			else
			{
				// no suitable next siblings under our grandparent! what to do next?
				while ( node.parentNode
					&& node.parentNode != FCK.EditorDocument.body
					&& node.parentNode != FCK.EditorDocument.documentElement
					&& node == node.parentNode.lastChild
					&& ( ! FCKListsLib.BlockElements[node.parentNode.tagName.toLowerCase()]
					  && ! FCKListsLib.NonEmptyBlockElements[node.parentNode.tagName.toLowerCase()] ) )
					node = node.parentNode ;


				if ( FCKListsLib.BlockElements[ parentTag ]
						|| FCKListsLib.EmptyElements[ parentTag ]
						|| node == FCK.EditorDocument.body )
				{
					// if our parent is a block node, move to the end of our parent.
					range.setStart( node, node.childNodes.length ) ;
					range.setEnd( node, node.childNodes.length ) ;
				}
				else
				{
					// things are a little bit more interesting if our parent is not a block node
					// due to the weired ways how Gecko's caret acts...
					var stopNode = node.nextSibling ;

					// find out the next block/empty element at our grandparent, we'll
					// move the caret just before it.
					while ( stopNode )
					{
						if ( stopNode.nodeType != 1 )
						{
							stopNode = stopNode.nextSibling ;
							continue ;
						}

						var stopTag = stopNode.tagName.toLowerCase() ;
						if ( FCKListsLib.BlockElements[stopTag] || FCKListsLib.EmptyElements[stopTag]
							|| FCKListsLib.NonEmptyBlockElements[stopTag] )
							break ;
						stopNode = stopNode.nextSibling ;
					}

					// note that the dummy marker below is NEEDED, otherwise the caret's behavior will
					// be broken in Gecko.
					var marker = FCK.EditorDocument.createTextNode( '' ) ;
					if ( stopNode )
						node.parentNode.insertBefore( marker, stopNode ) ;
					else
						node.parentNode.appendChild( marker ) ;
					range.setStart( marker, 0 ) ;
					range.setEnd( marker, 0 ) ;
				}
			}

			selection.removeAllRanges() ;
			selection.addRange( range ) ;
			FCK.Events.FireEvent( "OnSelectionChange" ) ;
		}

		setTimeout( moveCursor, 1 ) ;
	}

	this.ExecOnSelectionChangeTimer = function()
	{
		if ( FCK.LastOnChangeTimer )
			window.clearTimeout( FCK.LastOnChangeTimer ) ;

		FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
	}

	this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;

	// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
	// slow. So, a timer has been implemented to solve performance issues when typing to quickly.
	this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;

	this._DblClickListener = function( e )
	{
		FCK.OnDoubleClick( e.target ) ;
		e.stopPropagation() ;
	}
	this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;

	// Record changes for the undo system when there are key down events.
	this.EditorDocument.addEventListener( 'keydown', this._KeyDownListener, false ) ;

	// Hooks for data object drops
	if ( FCKBrowserInfo.IsGecko )
	{
		this.EditorWindow.addEventListener( 'dragdrop', this._ExecDrop, true ) ;
	}
	else if ( FCKBrowserInfo.IsSafari )
	{
		var cancelHandler = function( evt ){ if ( ! FCK.MouseDownFlag ) evt.returnValue = false ; }
		this.EditorDocument.addEventListener( 'dragenter', cancelHandler, true ) ;
		this.EditorDocument.addEventListener( 'dragover', cancelHandler, true ) ;
		this.EditorDocument.addEventListener( 'drop', this._ExecDrop, true ) ;
		this.EditorDocument.addEventListener( 'mousedown',
			function( ev )
			{
				var element = ev.srcElement ;

				if ( element.nodeName.IEquals( 'IMG', 'HR', 'INPUT', 'TEXTAREA', 'SELECT' ) )
				{
					FCKSelection.SelectNode( element ) ;
				}
			}, true ) ;

		this.EditorDocument.addEventListener( 'mouseup',

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品99久久久久久| 97久久人人超碰| 国产精品国产三级国产aⅴ无密码| 色婷婷精品大视频在线蜜桃视频| 久久精品国产77777蜜臀| 亚洲欧洲精品天堂一级| 欧美α欧美αv大片| 在线精品亚洲一区二区不卡| 国产a精品视频| 久久超级碰视频| 亚洲电影一区二区三区| 国产欧美日韩在线视频| 精品日韩欧美一区二区| 欧美日韩精品一区二区三区蜜桃| av不卡免费在线观看| 国产一区二区三区观看| 蜜臀av性久久久久av蜜臀妖精 | 国产精品美女久久久久久2018| 欧美人动与zoxxxx乱| 色婷婷av一区| 99久久久久久| 成人污污视频在线观看| 国产精品99久久不卡二区| 日本成人中文字幕| 天天色图综合网| 亚洲一二三四在线观看| 亚洲久草在线视频| 亚洲欧美另类图片小说| 国产精品国产三级国产aⅴ中文| 国产日韩欧美a| 国产日产亚洲精品系列| 国产欧美一区二区精品性| 久久久久久久久伊人| 日韩美女在线视频| 欧美电影精品一区二区| 日韩免费成人网| 欧美一级理论片| 日韩午夜在线影院| 日韩欧美一级精品久久| 欧美变态凌虐bdsm| 久久综合一区二区| 国产嫩草影院久久久久| 国产午夜三级一区二区三| 久久蜜桃香蕉精品一区二区三区| 精品日韩欧美一区二区| 久久精品欧美日韩精品| 国产精品网站在线观看| 日韩美女啊v在线免费观看| 日韩美女啊v在线免费观看| 亚洲精品乱码久久久久| 亚洲图片欧美一区| 热久久一区二区| 狠狠色狠狠色合久久伊人| 国产精品99久久久久久久女警| 国产91丝袜在线播放0| www.66久久| 欧美色成人综合| 欧美一区二区视频免费观看| 久久网站热最新地址| 国产拍揄自揄精品视频麻豆| 亚洲少妇30p| 日韩综合在线视频| 九九**精品视频免费播放| 国产福利一区二区三区在线视频| 不卡av在线网| 69堂亚洲精品首页| 久久午夜羞羞影院免费观看| 亚洲欧美日韩一区| 日本亚洲电影天堂| 国产精品一区二区在线观看不卡 | 亚洲成人免费在线观看| 日本aⅴ精品一区二区三区| 国产在线精品一区二区三区不卡| 成人综合婷婷国产精品久久| 在线观看成人小视频| 精品国产乱码久久久久久免费| 中文字幕欧美三区| 石原莉奈在线亚洲二区| 国产91在线观看丝袜| 欧美日韩国产电影| 国产日韩高清在线| 日韩国产高清在线| 岛国精品在线观看| 欧美精品在线视频| 亚洲国产成人私人影院tom | 极品少妇xxxx精品少妇偷拍| 色综合av在线| 久久综合九色综合欧美亚洲| 一区二区不卡在线播放| 国产高清无密码一区二区三区| 欧美性大战xxxxx久久久| 久久精品夜色噜噜亚洲a∨ | 不卡的av电影在线观看| 日韩精品一区二区三区在线播放 | 一区二区三区在线观看网站| 精品在线免费观看| 91高清视频免费看| 欧美国产日本视频| 久久99九九99精品| 欧美日本不卡视频| 亚洲色图视频免费播放| 国产麻豆午夜三级精品| 欧美日本一区二区三区| 中文字幕一区二区三区精华液| 久久99久久久欧美国产| 欧美三级视频在线| 中文字幕欧美一| 国产成人精品影视| 日韩欧美一区在线| 亚洲图片欧美视频| 99久久久国产精品免费蜜臀| 久久久电影一区二区三区| 日韩激情中文字幕| 欧美亚洲禁片免费| 亚洲免费三区一区二区| 国产99久久久国产精品免费看| 精品久久久久久久久久久久久久久| 亚洲国产精品久久久久婷婷884 | 欧美午夜精品久久久久久超碰| 国产精品高清亚洲| 高清日韩电视剧大全免费| 精品99999| 免费成人在线影院| 91精品国产色综合久久| 天堂一区二区在线免费观看| 欧美日韩另类一区| 亚洲国产你懂的| 欧美色窝79yyyycom| 亚洲国产精品久久艾草纯爱| 色哟哟国产精品免费观看| 亚洲美女一区二区三区| 91社区在线播放| 亚洲免费av高清| 色婷婷久久一区二区三区麻豆| 亚洲精品视频在线观看网站| 99久久免费国产| 亚洲精品高清在线观看| 色94色欧美sute亚洲线路一久 | 日韩一区二区三区观看| 日产国产欧美视频一区精品| 欧美美女黄视频| 日韩专区在线视频| 91麻豆精品国产自产在线观看一区 | 国产午夜精品一区二区三区嫩草 | 亚洲人成7777| 日本福利一区二区| 亚洲一级片在线观看| 欧美日韩高清不卡| 蜜桃免费网站一区二区三区| 久久综合丝袜日本网| 国产精品18久久久久久久久| 中文字幕不卡的av| 欧洲一区在线电影| 日韩av不卡一区二区| 久久久不卡影院| 色天天综合色天天久久| 日日夜夜精品视频天天综合网| 91精品国产91久久综合桃花 | 成人性生交大合| 亚洲精品国产高清久久伦理二区| 欧美视频一区二区| 精品影视av免费| 中文字幕不卡在线播放| 欧美三级中文字幕在线观看| 捆绑调教美女网站视频一区| 中文字幕第一区| 欧美精品久久久久久久多人混战| 久久精品久久精品| 综合欧美亚洲日本| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲激情六月丁香| 3atv一区二区三区| 国产成人在线视频网站| 亚洲一区二区美女| 久久久一区二区| 色悠悠亚洲一区二区| 激情五月婷婷综合| 亚洲黄色av一区| 欧美精品一区二区在线观看| 色综合激情五月| 国产一区二区网址| 亚洲自拍欧美精品| 久久亚洲综合av| 欧美艳星brazzers| 豆国产96在线|亚洲| 日韩精品亚洲一区二区三区免费| 国产亚洲一区二区在线观看| 91久久国产最好的精华液| 极品销魂美女一区二区三区| 一区二区视频在线看| 2014亚洲片线观看视频免费| 欧美日韩在线一区二区| 成人中文字幕合集| 青青草国产精品亚洲专区无| 亚洲三级免费电影| 久久亚洲二区三区| 欧美一区二区在线免费观看| 99久久久国产精品| 国产伦精品一区二区三区视频青涩| 亚洲图片欧美色图|