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

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

?? fckstyle.js

?? 強(qiáng)大的個(gè)人日志系統(tǒng),界面華麗
?? JS
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
			else
				applyStyle = true ;

			// Get the next node to be processed.
			currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;

			// If we have reached the end of the selection, just apply the
			// style ot the range, and stop looping.
			if ( currentNode == endNode )
			{
				currentNode = null ;
				applyStyle = true ;
			}

			// Apply the style if we have something to which apply it.
			if ( applyStyle && range.CheckHasRange() && !range.CheckIsCollapsed() )
			{
				// Build the style element, based on the style object definition.
				styleNode = this.BuildElement( doc ) ;

				// Move the contents of the range to the style element.
				range.ExtractContents().AppendTo( styleNode ) ;

				// If it is not empty.
				if ( styleNode.innerHTML.RTrim().length > 0 )
				{
					// Insert it in the range position (it is collapsed after
					// ExtractContents.
					range.InsertNode( styleNode ) ;

					// Here we do some cleanup, removing all duplicated
					// elements from the style element.
					this.RemoveFromElement( styleNode ) ;

					// Let's merge our new style with its neighbors, if possible.
					this._MergeSiblings( styleNode, this._GetAttribsForComparison() ) ;

					// As the style system breaks text nodes constantly, let's normalize
					// things for performance.
					// With IE, some paragraphs get broken when calling normalize()
					// repeatedly. Also, for IE, we must normalize body, not documentElement.
					// IE is also known for having a "crash effect" with normalize().
					// We should try to normalize with IE too in some way, somewhere.
					if ( !FCKBrowserInfo.IsIE )
						styleNode.normalize() ;
				}

				// Style applied, let's release the range, so it gets marked to
				// re-initialization in the next loop.
				range.Release( true ) ;
			}
		}

		this._FixBookmarkStart( startNode ) ;

		// Re-select the original range.
		if ( selectIt )
			range.SelectBookmark( bookmark ) ;

		if ( updateRange )
			range.MoveToBookmark( bookmark ) ;
	},

	_FixBookmarkStart : function( startNode )
	{
		// After appliying or removing an inline style, the start boundary of
		// the selection must be placed inside all inline elements it is
		// bordering.
		var startSibling ;
		while ( ( startSibling = startNode.nextSibling ) )	// Only one "=".
		{
			if ( startSibling.nodeType == 1
				&& FCKListsLib.InlineNonEmptyElements[ startSibling.nodeName.toLowerCase() ] )
			{
				// If it is an empty inline element, we can safely remove it.
				if ( !startSibling.firstChild )
					FCKDomTools.RemoveNode( startSibling ) ;
				else
					FCKDomTools.MoveNode( startNode, startSibling, true ) ;
				continue ;
			}

			// Empty text nodes can be safely removed to not disturb.
			if ( startSibling.nodeType == 3 && startSibling.length == 0 )
			{
				FCKDomTools.RemoveNode( startSibling ) ;
				continue ;
			}

			break ;
		}
	},

	/**
	 * Merge an element with its similar siblings.
	 * "attribs" is and object computed with _CreateAttribsForComparison.
	 */
	_MergeSiblings : function( element, attribs )
	{
		if ( !element || element.nodeType != 1 || !FCKListsLib.InlineNonEmptyElements[ element.nodeName.toLowerCase() ] )
			return ;

		this._MergeNextSibling( element, attribs ) ;
		this._MergePreviousSibling( element, attribs ) ;
	},

	/**
	 * Merge an element with its similar siblings after it.
	 * "attribs" is and object computed with _CreateAttribsForComparison.
	 */
	_MergeNextSibling : function( element, attribs )
	{
		// Check the next sibling.
		var sibling = element.nextSibling ;

		// Check if the next sibling is a bookmark element. In this case, jump it.
		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
		if ( hasBookmark )
			sibling = sibling.nextSibling ;

		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
		{
			if ( !attribs )
				attribs = this._CreateElementAttribsForComparison( element ) ;

			if ( this._CheckAttributesMatch( sibling, attribs ) )
			{
				// Save the last child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
				var innerSibling = element.lastChild ;

				if ( hasBookmark )
					FCKDomTools.MoveNode( element.nextSibling, element ) ;

				// Move contents from the sibling.
				FCKDomTools.MoveChildren( sibling, element ) ;
				FCKDomTools.RemoveNode( sibling ) ;

				// Now check the last inner child (see two comments above).
				if ( innerSibling )
					this._MergeNextSibling( innerSibling ) ;
			}
		}
	},

	/**
	 * Merge an element with its similar siblings before it.
	 * "attribs" is and object computed with _CreateAttribsForComparison.
	 */
	_MergePreviousSibling : function( element, attribs )
	{
		// Check the previous sibling.
		var sibling = element.previousSibling ;

		// Check if the previous sibling is a bookmark element. In this case, jump it.
		var hasBookmark = ( sibling && sibling.nodeType == 1 && sibling.getAttribute( '_fck_bookmark' ) ) ;
		if ( hasBookmark )
			sibling = sibling.previousSibling ;

		if ( sibling && sibling.nodeType == 1 && sibling.nodeName == element.nodeName )
		{
			if ( !attribs )
				attribs = this._CreateElementAttribsForComparison( element ) ;

			if ( this._CheckAttributesMatch( sibling, attribs ) )
			{
				// Save the first child to be checked too (to merge things like <b><i></i></b><b><i></i></b>).
				var innerSibling = element.firstChild ;

				if ( hasBookmark )
					FCKDomTools.MoveNode( element.previousSibling, element, true ) ;

				// Move contents to the sibling.
				FCKDomTools.MoveChildren( sibling, element, true ) ;
				FCKDomTools.RemoveNode( sibling ) ;

				// Now check the first inner child (see two comments above).
				if ( innerSibling )
					this._MergePreviousSibling( innerSibling ) ;
			}
		}
	},

	/**
	 * Build the cssText based on the styles definition.
	 */
	_GetStyleText : function()
	{
		var stylesDef = this._StyleDesc.Styles ;

		// Builds the StyleText.
		var stylesText = ( this._StyleDesc.Attributes ? this._StyleDesc.Attributes['style'] || '' : '' ) ;

		if ( stylesText.length > 0 )
			stylesText += ';' ;

		for ( var style in stylesDef )
			stylesText += style + ':' + stylesDef[style] + ';' ;

		// Browsers make some changes to the style when applying them. So, here
		// we normalize it to the browser format. We'll not do that if there
		// are variables inside the style.
		if ( stylesText.length > 0 && !( /#\(/.test( stylesText ) ) )
		{
			stylesText = FCKTools.NormalizeCssText( stylesText ) ;
		}

		return (this._GetStyleText = function() { return stylesText ; })() ;
	},

	/**
	 * Get the the collection used to compare the attributes defined in this
	 * style with attributes in an element. All information in it is lowercased.
	 */
	_GetAttribsForComparison : function()
	{
		// If we have already computed it, just return it.
		var attribs = this._GetAttribsForComparison_$ ;
		if ( attribs )
			return attribs ;

		attribs = new Object() ;

		// Loop through all defined attributes.
		var styleAttribs = this._StyleDesc.Attributes ;
		if ( styleAttribs )
		{
			for ( var styleAtt in styleAttribs )
			{
				attribs[ styleAtt.toLowerCase() ] = styleAttribs[ styleAtt ].toLowerCase() ;
			}
		}

		// Includes the style definitions.
		if ( this._GetStyleText().length > 0 )
		{
			attribs['style'] = this._GetStyleText().toLowerCase() ;
		}

		// Appends the "length" information to the object.
		FCKTools.AppendLengthProperty( attribs, '_length' ) ;

		// Return it, saving it to the next request.
		return ( this._GetAttribsForComparison_$ = attribs ) ;
	},

	/**
	 * Get the the collection used to compare the elements and attributes,
	 * defined in this style overrides, with other element. All information in
	 * it is lowercased.
	 */
	_GetOverridesForComparison : function()
	{
		// If we have already computed it, just return it.
		var overrides = this._GetOverridesForComparison_$ ;
		if ( overrides )
			return overrides ;

		overrides = new Object() ;

		var overridesDesc = this._StyleDesc.Overrides ;

		if ( overridesDesc )
		{
			// The override description can be a string, object or array.
			// Internally, well handle arrays only, so transform it if needed.
			if ( !FCKTools.IsArray( overridesDesc ) )
				overridesDesc = [ overridesDesc ] ;

			// Loop through all override definitions.
			for ( var i = 0 ; i < overridesDesc.length ; i++ )
			{
				var override = overridesDesc[i] ;
				var elementName ;
				var overrideEl ;
				var attrs ;

				// If can be a string with the element name.
				if ( typeof override == 'string' )
					elementName = override.toLowerCase() ;
				// Or an object.
				else
				{
					elementName = override.Element ? override.Element.toLowerCase() : this.Element ;
					attrs = override.Attributes ;
				}

				// We can have more than one override definition for the same
				// element name, so we attempt to simply append information to
				// it if it already exists.
				overrideEl = overrides[ elementName ] || ( overrides[ elementName ] = {} ) ;

				if ( attrs )
				{
					// The returning attributes list is an array, because we
					// could have different override definitions for the same
					// attribute name.
					var overrideAttrs = ( overrideEl.Attributes = overrideEl.Attributes || new Array() ) ;
					for ( var attName in attrs )
					{
						// Each item in the attributes array is also an array,
						// where [0] is the attribute name and [1] is the
						// override value.
						overrideAttrs.push( [ attName.toLowerCase(), attrs[ attName ] ] ) ;
					}
				}
			}
		}

		return ( this._GetOverridesForComparison_$ = overrides ) ;
	},

	/*
	 * Create and object containing all attributes specified in an element,
	 * added by a "_length" property. All values are lowercased.
	 */
	_CreateElementAttribsForComparison : function( element )
	{
		var attribs = new Object() ;
		var attribsCount = 0 ;

		for ( var i = 0 ; i < element.attributes.length ; i++ )
		{
			var att = element.attributes[i] ;

			if ( att.specified )
			{
				attribs[ att.nodeName.toLowerCase() ] = FCKDomTools.GetAttributeValue( element, att ).toLowerCase() ;
				attribsCount++ ;
			}
		}

		attribs._length = attribsCount ;

		return attribs ;
	},

	/**
	 * Checks is the element attributes have a perfect match with the style
	 * attributes.
	 */
	_CheckAttributesMatch : function( element, styleAttribs )
	{
		// Loop through all specified attributes. The same number of
		// attributes must be found and their values must match to
		// declare them as equal.

		var elementAttrbs = element.attributes ;
		var matchCount = 0 ;

		for ( var i = 0 ; i < elementAttrbs.length ; i++ )
		{
			var att = elementAttrbs[i] ;
			if ( att.specified )
			{
				var attName = att.nodeName.toLowerCase() ;
				var styleAtt = styleAttribs[ attName ] ;

				// The attribute is not defined in the style.
				if ( !styleAtt )
					break ;

				// The values are different.
				if ( styleAtt != FCKDomTools.GetAttributeValue( element, att ).toLowerCase() )
					break ;

				matchCount++ ;
			}
		}

		return ( matchCount == styleAttribs._length ) ;
	}
} ;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄久久| 麻豆精品新av中文字幕| 国内外成人在线| 色综合天天综合色综合av| 日韩欧美第一区| 一区二区成人在线观看| 国产一区二区电影| 91.麻豆视频| 尤物视频一区二区| 成人美女视频在线看| 日韩一区二区高清| 亚洲夂夂婷婷色拍ww47| 成人精品鲁一区一区二区| 欧美成人一区二区三区片免费| 夜夜精品浪潮av一区二区三区| 国产白丝精品91爽爽久久 | 午夜久久久久久| 菠萝蜜视频在线观看一区| 精品国产一区二区三区忘忧草| 午夜精品免费在线观看| 色久优优欧美色久优优| 国产精品嫩草影院com| 精品一区二区三区在线观看| 在线成人小视频| 亚洲综合精品自拍| 91蜜桃婷婷狠狠久久综合9色| 国产欧美va欧美不卡在线 | 亚洲欧洲三级电影| 国产黄色91视频| 精品国产亚洲一区二区三区在线观看 | 99精品国产视频| 中文字幕巨乱亚洲| 国产乱人伦偷精品视频免下载 | 欧美电影在哪看比较好| 亚洲综合小说图片| 色8久久人人97超碰香蕉987| 亚洲人成伊人成综合网小说| av不卡在线播放| 一区在线观看视频| www.欧美精品一二区| 中文字幕乱码日本亚洲一区二区| 国产成人激情av| 国产精品色婷婷| 国产99久久久国产精品潘金 | 精品免费国产二区三区| 久久激情五月婷婷| 精品国产91洋老外米糕| 精品中文字幕一区二区小辣椒| 精品国产免费久久| 国产在线精品免费av| 久久久另类综合| 懂色av一区二区三区免费观看| 欧美国产日韩在线观看| 成人黄色777网| 亚洲精品五月天| 欧美日精品一区视频| 午夜电影久久久| 欧美二区在线观看| 精品一区二区三区在线观看国产 | 欧美视频在线一区| 婷婷成人综合网| 日韩精品影音先锋| 国产电影一区在线| 亚洲欧洲精品一区二区三区 | 成人动漫av在线| 亚洲免费伊人电影| 欧美精品丝袜中出| 久久精品国产亚洲一区二区三区| 久久久久久黄色| 成人av在线观| 亚洲午夜在线视频| 日韩欧美中文字幕精品| 国产成人在线色| 亚洲免费观看在线视频| 69堂成人精品免费视频| 国产一区二区在线影院| 国产精品动漫网站| 欧美少妇一区二区| 韩国一区二区三区| 亚洲天堂福利av| 在线不卡免费欧美| 国产大陆亚洲精品国产| 亚洲精品久久嫩草网站秘色| 日韩一级免费一区| 丰满放荡岳乱妇91ww| 亚洲一区二区在线观看视频| 日韩精品影音先锋| 一本一道久久a久久精品| 日韩中文字幕一区二区三区| 国产亚洲欧美一区在线观看| 91国偷自产一区二区开放时间 | 亚洲欧美一区二区三区久本道91| 欧美精品aⅴ在线视频| 国产一区二区三区在线观看免费| 专区另类欧美日韩| 欧美一区二区三区在线观看| 成人av在线网站| 免费观看在线色综合| 亚洲色大成网站www久久九九| 欧美一区二区性放荡片| 粗大黑人巨茎大战欧美成人| 性久久久久久久| 国产女主播视频一区二区| 欧美天堂一区二区三区| 国产盗摄精品一区二区三区在线| 亚洲国产日韩a在线播放| 国产色产综合色产在线视频| 欧美日韩一级二级| 成人动漫在线一区| 日韩成人免费电影| 中文字幕一区二区在线播放| 日韩欧美一区在线观看| 91色九色蝌蚪| 国产东北露脸精品视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲天堂精品视频| 久久这里都是精品| 欧美色图在线观看| 成人一区二区三区中文字幕| 婷婷国产在线综合| 亚洲日本va午夜在线影院| 欧美精品一区二区三区在线| 欧美日韩1234| 色又黄又爽网站www久久| 国产盗摄一区二区| 狠狠色丁香久久婷婷综合丁香| 一区二区理论电影在线观看| 国产精品免费aⅴ片在线观看| 精品三级在线看| 88在线观看91蜜桃国自产| 91麻豆产精品久久久久久 | 亚洲bt欧美bt精品777| 国产精品传媒入口麻豆| 久久久久国产精品麻豆ai换脸 | zzijzzij亚洲日本少妇熟睡| 国产在线一区二区| 日韩精品国产欧美| 亚洲综合久久久| 亚洲黄色av一区| 亚洲欧美另类小说视频| 中文子幕无线码一区tr | 在线免费视频一区二区| 91日韩在线专区| 不卡欧美aaaaa| 国产suv精品一区二区6| 国产精品一区一区| 国产一区在线精品| 狠狠色狠狠色综合| 国产一区二区三区免费观看| 久久精品国产99| 麻豆91免费看| 另类小说视频一区二区| 美女网站色91| 激情欧美一区二区| 精品一区二区三区在线观看| 黑人精品欧美一区二区蜜桃| 裸体歌舞表演一区二区| 另类综合日韩欧美亚洲| 久久国产精品99精品国产 | 亚洲日本一区二区| 亚洲视频中文字幕| 亚洲激情校园春色| 一区二区三区高清不卡| 亚洲高清在线视频| 图片区小说区区亚洲影院| 午夜精品aaa| 日本vs亚洲vs韩国一区三区| 美女视频一区在线观看| 精品在线免费视频| 国产精品1024| av在线一区二区| 在线免费观看成人短视频| 欧美日韩国产高清一区二区三区 | 不卡的av电影| 91免费版在线| 欧美日韩一区 二区 三区 久久精品| 91.麻豆视频| 2024国产精品| 中文字幕中文在线不卡住| 亚洲欧美日韩国产另类专区| 亚洲成人激情av| 另类调教123区| 国产成人一区二区精品非洲| www.激情成人| 欧美日韩国产综合草草| 日韩精品一区二区三区四区| 久久精品视频在线看| 中文字幕一区二区三区精华液| 一区二区三区免费| 日韩成人免费看| 成人影视亚洲图片在线| 色偷偷成人一区二区三区91| 欧美日韩国产小视频| 欧美va亚洲va国产综合| 国产精品三级av| 亚洲国产日韩a在线播放性色| 久久99精品久久久久久久久久久久 | 国产精品美女一区二区| 亚洲国产日产av| 韩国av一区二区三区四区|