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

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

?? fckdomtools.js

?? 強大的個人日志系統,界面華麗
?? JS
?? 第 1 頁 / 共 3 頁
字號:
	ClearElementMarkers : function( markerObj, element, clearMarkerObj )
	{
		var id = element._FCKMarkerId ;
		if ( ! id )
			return ;
		this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
		for ( var j in markerObj[id]['markers'] )
			this.ClearElementJSProperty( element, j ) ;
		if ( clearMarkerObj )
			delete markerObj[id] ;
	},

	ClearAllMarkers : function( markerObj )
	{
		for ( var i in markerObj )
			this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
	},

	/**
	 * Convert a DOM list tree into a data structure that is easier to
	 * manipulate. This operation should be non-intrusive in the sense that it
	 * does not change the DOM tree, with the exception that it may add some
	 * markers to the list item nodes when markerObj is specified.
	 */
	ListToArray : function( listNode, markerObj, baseArray, baseIndentLevel, grandparentNode )
	{
		if ( ! listNode.nodeName.IEquals( ['ul', 'ol'] ) )
			return [] ;

		if ( ! baseIndentLevel )
			baseIndentLevel = 0 ;
		if ( ! baseArray )
			baseArray = [] ;
		// Iterate over all list items to get their contents and look for inner lists.
		for ( var i = 0 ; i < listNode.childNodes.length ; i++ )
		{
			var listItem = listNode.childNodes[i] ;
			if ( ! listItem.nodeName.IEquals( 'li' ) )
				continue ;
			var itemObj = { 'parent' : listNode, 'indent' : baseIndentLevel, 'contents' : [] } ;
			if ( ! grandparentNode )
			{
				itemObj.grandparent = listNode.parentNode ;
				if ( itemObj.grandparent && itemObj.grandparent.nodeName.IEquals( 'li' ) )
					itemObj.grandparent = itemObj.grandparent.parentNode ;
			}
			else
				itemObj.grandparent = grandparentNode ;
			if ( markerObj )
				this.SetElementMarker( markerObj, listItem, '_FCK_ListArray_Index', baseArray.length ) ;
			baseArray.push( itemObj ) ;
			for ( var j = 0 ; j < listItem.childNodes.length ; j++ )
			{
				var child = listItem.childNodes[j] ;
				if ( child.nodeName.IEquals( ['ul', 'ol'] ) )
					// Note the recursion here, it pushes inner list items with
					// +1 indentation in the correct order.
					this.ListToArray( child, markerObj, baseArray, baseIndentLevel + 1, itemObj.grandparent ) ;
				else
					itemObj.contents.push( child ) ;
			}
		}
		return baseArray ;
	},

	// Convert our internal representation of a list back to a DOM forest.
	ArrayToList : function( listArray, markerObj, baseIndex )
	{
		if ( baseIndex == undefined )
			baseIndex = 0 ;
		if ( ! listArray || listArray.length < baseIndex + 1 )
			return null ;
		var doc = FCKTools.GetElementDocument( listArray[baseIndex].parent ) ;
		var retval = doc.createDocumentFragment() ;
		var rootNode = null ;
		var currentIndex = baseIndex ;
		var indentLevel = Math.max( listArray[baseIndex].indent, 0 ) ;
		var currentListItem = null ;
		while ( true )
		{
			var item = listArray[currentIndex] ;
			if ( item.indent == indentLevel )
			{
				if ( ! rootNode || listArray[currentIndex].parent.nodeName != rootNode.nodeName )
				{
					rootNode = listArray[currentIndex].parent.cloneNode( false ) ;
					retval.appendChild( rootNode ) ;
				}
				currentListItem = doc.createElement( 'li' ) ;
				rootNode.appendChild( currentListItem ) ;
				for ( var i = 0 ; i < item.contents.length ; i++ )
					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
				currentIndex++ ;
			}
			else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
			{
				var listData = this.ArrayToList( listArray, null, currentIndex ) ;
				currentListItem.appendChild( listData.listNode ) ;
				currentIndex = listData.nextIndex ;
			}
			else if ( item.indent == -1 && baseIndex == 0 && item.grandparent )
			{
				var currentListItem ;
				if ( item.grandparent.nodeName.IEquals( ['ul', 'ol'] ) )
					currentListItem = doc.createElement( 'li' ) ;
				else
				{
					if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) && ! item.grandparent.nodeName.IEquals( 'td' ) )
						currentListItem = doc.createElement( FCKConfig.EnterMode ) ;
					else
						currentListItem = doc.createDocumentFragment() ;
				}
				for ( var i = 0 ; i < item.contents.length ; i++ )
					currentListItem.appendChild( item.contents[i].cloneNode( true ) ) ;
				if ( currentListItem.nodeType == 11 )
				{
					if ( currentListItem.lastChild &&
							currentListItem.lastChild.getAttribute &&
							currentListItem.lastChild.getAttribute( 'type' ) == '_moz' )
						currentListItem.removeChild( currentListItem.lastChild );
					currentListItem.appendChild( doc.createElement( 'br' ) ) ;
				}
				if ( currentListItem.nodeName.IEquals( FCKConfig.EnterMode ) && currentListItem.firstChild )
				{
					this.TrimNode( currentListItem ) ;
					if ( FCKListsLib.BlockBoundaries[currentListItem.firstChild.nodeName.toLowerCase()] )
					{
						var tmp = doc.createDocumentFragment() ;
						while ( currentListItem.firstChild )
							tmp.appendChild( currentListItem.removeChild( currentListItem.firstChild ) ) ;
						currentListItem = tmp ;
					}
				}
				if ( FCKBrowserInfo.IsGeckoLike && currentListItem.nodeName.IEquals( ['div', 'p'] ) )
					FCKTools.AppendBogusBr( currentListItem ) ;
				retval.appendChild( currentListItem ) ;
				rootNode = null ;
				currentIndex++ ;
			}
			else
				return null ;

			if ( listArray.length <= currentIndex || Math.max( listArray[currentIndex].indent, 0 ) < indentLevel )
			{
				break ;
			}
		}

		// Clear marker attributes for the new list tree made of cloned nodes, if any.
		if ( markerObj )
		{
			var currentNode = retval.firstChild ;
			while ( currentNode )
			{
				if ( currentNode.nodeType == 1 )
					this.ClearElementMarkers( markerObj, currentNode ) ;
				currentNode = this.GetNextSourceNode( currentNode ) ;
			}
		}

		return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
	},

	/**
	 * Get the next sibling node for a node. If "includeEmpties" is false,
	 * only element or non empty text nodes are returned.
	 */
	GetNextSibling : function( node, includeEmpties )
	{
		node = node.nextSibling ;

		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
			node = node.nextSibling ;

		return node ;
	},

	/**
	 * Get the previous sibling node for a node. If "includeEmpties" is false,
	 * only element or non empty text nodes are returned.
	 */
	GetPreviousSibling : function( node, includeEmpties )
	{
		node = node.previousSibling ;

		while ( node && !includeEmpties && node.nodeType != 1 && ( node.nodeType != 3 || node.nodeValue.length == 0 ) )
			node = node.previousSibling ;

		return node ;
	},

	/**
	 * Checks if an element has no "useful" content inside of it
	 * node tree. No "useful" content means empty text node or a signle empty
	 * inline node.
	 * elementCheckCallback may point to a function that returns a boolean
	 * indicating that a child element must be considered in the element check.
	 */
	CheckIsEmptyElement : function( element, elementCheckCallback )
	{
		var child = element.firstChild ;
		var elementChild ;

		while ( child )
		{
			if ( child.nodeType == 1 )
			{
				if ( elementChild || !FCKListsLib.InlineNonEmptyElements[ child.nodeName.toLowerCase() ] )
					return false ;

				if ( !elementCheckCallback || elementCheckCallback( child ) === true )
					elementChild = child ;
			}
			else if ( child.nodeType == 3 && child.nodeValue.length > 0 )
				return false ;

			child = child.nextSibling ;
		}

		return elementChild ? this.CheckIsEmptyElement( elementChild, elementCheckCallback ) : true ;
	},

	SetElementStyles : function( element, styleDict )
	{
		var style = element.style ;
		for ( var styleName in styleDict )
			style[ styleName ] = styleDict[ styleName ] ;
	},

	SetOpacity : function( element, opacity )
	{
		if ( FCKBrowserInfo.IsIE )
		{
			opacity = Math.round( opacity * 100 ) ;
			element.style.filter = ( opacity > 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' ) ;
		}
		else
			element.style.opacity = opacity ;
	},

	GetCurrentElementStyle : function( element, propertyName )
	{
		if ( FCKBrowserInfo.IsIE )
			return element.currentStyle[ propertyName ] ;
		else
			return element.ownerDocument.defaultView.getComputedStyle( element, '' ).getPropertyValue( propertyName ) ;
	},

	GetPositionedAncestor : function( element )
	{
		var currentElement = element ;

		while ( currentElement != FCKTools.GetElementDocument( currentElement ).documentElement )
		{
			if ( this.GetCurrentElementStyle( currentElement, 'position' ) != 'static' )
				return currentElement ;

			if ( currentElement == FCKTools.GetElementDocument( currentElement ).documentElement
					&& currentWindow != w )
				currentElement = currentWindow.frameElement ;
			else
				currentElement = currentElement.parentNode ;
		}

		return null ;
	},

	/**
	 * Current implementation for ScrollIntoView (due to #1462 and #2279). We
	 * don't have a complete implementation here, just the things that fit our
	 * needs.
	 */
	ScrollIntoView : function( element, alignTop )
	{
		// Get the element window.
		var window = FCKTools.GetElementWindow( element ) ;
		var windowHeight = FCKTools.GetViewPaneSize( window ).Height ;

		// Starts the offset that will be scrolled with the negative value of
		// the visible window height.
		var offset = windowHeight * -1 ;

		// Appends the height it we are about to align the bottoms.
		if ( alignTop === false )
		{
			offset += element.offsetHeight || 0 ;

			// Consider the margin in the scroll, which is ok for our current
			// needs, but needs investigation if we will be using this function
			// in other places.
			offset += parseInt( this.GetCurrentElementStyle( element, 'marginBottom' ) || 0, 10 ) || 0 ;
		}

		// Appends the offsets for the entire element hierarchy.
		var elementPosition = FCKTools.GetDocumentPosition( window, element ) ;
		offset += elementPosition.y ;

		// Scroll the window to the desired position, if not already visible.
		var currentScroll = FCKTools.GetScrollPosition( window ).Y ;
		if ( offset > 0 && ( offset > currentScroll || offset < currentScroll - windowHeight ) )
			window.scrollTo( 0, offset ) ;
	},

	/**
	 * Check if the element can be edited inside the browser.
	 */
	CheckIsEditable : function( element )
	{
		// Get the element name.
		var nodeName = element.nodeName.toLowerCase() ;

		// Get the element DTD (defaults to span for unknown elements).
		var childDTD = FCK.DTD[ nodeName ] || FCK.DTD.span ;

		// In the DTD # == text node.
		return ( childDTD['#'] && !FCKListsLib.NonEditableElements[ nodeName ] ) ;
	},

	GetSelectedDivContainers : function()
	{
		var currentBlocks = [] ;
		var range = new FCKDomRange( FCK.EditorWindow ) ;
		range.MoveToSelection() ;

		var startNode = range.GetTouchedStartNode() ;
		var endNode = range.GetTouchedEndNode() ;
		var currentNode = startNode ;

		if ( startNode == endNode )
		{
			while ( endNode.nodeType == 1 && endNode.lastChild )
				endNode = endNode.lastChild ;
			endNode = FCKDomTools.GetNextSourceNode( endNode ) ;
		}

		while ( currentNode && currentNode != endNode )
		{
			if ( currentNode.nodeType != 3 || !/^[ \t\n]*$/.test( currentNode.nodeValue ) )
			{
				var path = new FCKElementPath( currentNode ) ;
				var blockLimit = path.BlockLimit ;
				if ( blockLimit && blockLimit.nodeName.IEquals( 'div' ) && currentBlocks.IndexOf( blockLimit ) == -1 )
					currentBlocks.push( blockLimit ) ;
			}

			currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
		}

		return currentBlocks ;
	}
} ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区电影在线观看 | 久久精品99国产精品日本| 美女网站视频久久| 97精品电影院| 欧美国产丝袜视频| 一区二区三区鲁丝不卡| 日本伊人精品一区二区三区观看方式| 国产一区二区主播在线| 欧美少妇xxx| 国产精品你懂的在线| 毛片一区二区三区| 色94色欧美sute亚洲线路一久| 欧美成人a视频| 亚洲一区电影777| 99精品在线观看视频| 久久只精品国产| 日韩av网站免费在线| 在线一区二区三区| 亚洲国产高清不卡| 国产精一品亚洲二区在线视频| 制服丝袜日韩国产| 亚洲成a天堂v人片| 在线观看91视频| 国产精品久久久久婷婷| 国产精品综合av一区二区国产馆| 91精品国产高清一区二区三区 | 欧美一区二区三区不卡| 亚洲成人一区二区| 91亚洲国产成人精品一区二三| 国产日韩欧美高清在线| 狠狠色丁香婷婷综合久久片| 欧美一激情一区二区三区| 午夜视频一区二区| 欧美精品乱人伦久久久久久| 亚洲最大色网站| 欧美日韩二区三区| 午夜a成v人精品| 欧美一级片免费看| 日韩电影一二三区| 日韩视频在线一区二区| 麻豆91在线播放免费| 欧美一区二区成人6969| 日本在线观看不卡视频| 欧美电影免费观看高清完整版在| 麻豆精品精品国产自在97香蕉| 日韩一区二区在线观看视频| 精品一区二区三区香蕉蜜桃| 26uuu久久综合| 丁香婷婷综合五月| 最新国产成人在线观看| 色哟哟一区二区在线观看| 一个色综合av| 欧美精品丝袜久久久中文字幕| 免费看欧美美女黄的网站| 精品理论电影在线| 国产成a人无v码亚洲福利| 亚洲欧洲在线观看av| 欧美性三三影院| 日韩电影在线观看网站| 国产日韩v精品一区二区| 97久久精品人人爽人人爽蜜臀| 亚洲乱码国产乱码精品精98午夜| 欧美图区在线视频| 精品制服美女丁香| 最新日韩av在线| 91精品欧美久久久久久动漫 | 亚洲高清视频中文字幕| 欧美一区永久视频免费观看| 国产精一品亚洲二区在线视频| 国产精品国产馆在线真实露脸| 欧美午夜视频网站| 国产在线播精品第三| 亚洲最新在线观看| 久久婷婷久久一区二区三区| 91视频免费看| 久久精品国产亚洲一区二区三区 | 国产超碰在线一区| 尤物在线观看一区| 欧美va在线播放| 99久久久国产精品| 另类欧美日韩国产在线| 亚洲欧美综合网| 欧美电影免费观看高清完整版在 | 欧美日韩国产综合久久| 国产精品77777| 视频一区视频二区中文字幕| 国产亲近乱来精品视频| 欧美二区三区91| 成人97人人超碰人人99| 麻豆精品在线看| 亚洲国产一区二区三区| 国产免费久久精品| 欧美一区二区三区四区久久| 91麻豆精品在线观看| 久久国内精品自在自线400部| 亚洲精选视频在线| 久久久国产午夜精品| 日韩视频一区二区三区在线播放| 在线亚洲一区观看| av亚洲精华国产精华精| 国产传媒欧美日韩成人| 美国三级日本三级久久99| 亚洲二区在线观看| 亚洲精品国产无天堂网2021| 欧美国产精品一区| 精品国免费一区二区三区| 在线综合亚洲欧美在线视频| 91麻豆swag| 99久久国产综合精品色伊| 国产一区 二区| 激情图区综合网| 男女激情视频一区| 天天综合日日夜夜精品| 亚洲电影欧美电影有声小说| 亚洲一区免费视频| 亚洲曰韩产成在线| 亚洲综合999| 亚洲日本免费电影| 亚洲最新视频在线观看| 亚洲一区二区三区四区在线 | 三级不卡在线观看| 亚洲成人动漫av| 五月婷婷激情综合| 视频一区中文字幕国产| 亚洲午夜久久久久久久久电影院| 亚洲精品高清在线| 亚洲国产欧美在线| 性做久久久久久久久| 亚洲成国产人片在线观看| 日韩av电影一区| 美国一区二区三区在线播放| 热久久国产精品| 精品亚洲成av人在线观看| 国产精品影视在线| 9久草视频在线视频精品| 色综合久久久久久久久| 91啪亚洲精品| 欧美伊人精品成人久久综合97| 欧美性色黄大片| 日韩精品一区二区三区中文精品 | 国产精品久久久久久亚洲伦| 国产精品久久久久久久蜜臀| 亚洲美女一区二区三区| 日韩精品成人一区二区三区| 青青草国产成人av片免费| 狠狠色狠狠色综合日日91app| 国产99久久久国产精品潘金| 色综合中文综合网| 粉嫩高潮美女一区二区三区| 99久精品国产| 日韩一区二区视频| 国产欧美一区二区三区沐欲| 亚洲猫色日本管| 美女一区二区久久| 99视频在线精品| 欧美日韩国产123区| 国产亚洲精久久久久久| 一级特黄大欧美久久久| 国产一区福利在线| 欧美三级一区二区| 国产人成一区二区三区影院| 亚洲午夜久久久久久久久久久| 久久99国产精品成人| 色88888久久久久久影院按摩| 日韩视频在线永久播放| 亚洲精品成人a在线观看| 精品无码三级在线观看视频 | 色国产综合视频| 久久久影视传媒| 亚洲综合免费观看高清完整版| 老鸭窝一区二区久久精品| 99久久综合精品| 欧美va在线播放| 亚洲国产你懂的| 不卡一区二区在线| 日韩欧美电影一二三| 亚洲一区二区三区在线| 成人的网站免费观看| 日韩欧美激情在线| 亚洲一区精品在线| 一本久久综合亚洲鲁鲁五月天 | 蜜桃视频在线观看一区二区| a4yy欧美一区二区三区| 久久久久国色av免费看影院| 免费欧美在线视频| 911国产精品| **欧美大码日韩| av激情综合网| 中文一区二区完整视频在线观看| 视频一区视频二区中文| 91国产免费观看| 日韩一区在线播放| 成人性生交大片免费| 26uuu另类欧美| 九九精品视频在线看| 日韩一区二区精品在线观看| 亚洲.国产.中文慕字在线| 欧美中文字幕一区二区三区亚洲| 亚洲激情自拍视频| 日本韩国欧美三级|