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

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

?? fckstyle.js

?? 這是一個BBS系統
?? JS
?? 第 1 頁 / 共 4 頁
字號:

		this._Variables[ name ] = value ;
	},

	/**
	 * Converting from a PRE block to a non-PRE block in formatting operations.
	 */
	_FromPre : function( doc, block, newBlock )
	{
		var innerHTML = block.innerHTML ;

		// Trim the first and last linebreaks immediately after and before <pre>, </pre>,
		// if they exist.
		// This is done because the linebreaks are not rendered.
		innerHTML = innerHTML.replace( /(\r\n|\r)/g, '\n' ) ;
		innerHTML = innerHTML.replace( /^[ \t]*\n/, '' ) ;
		innerHTML = innerHTML.replace( /\n$/, '' ) ;

		// 1. Convert spaces or tabs at the beginning or at the end to &nbsp;
		innerHTML = innerHTML.replace( /^[ \t]+|[ \t]+$/g, function( match, offset, s )
				{
					if ( match.length == 1 )	// one space, preserve it
						return '&nbsp;' ;
					else if ( offset == 0 )		// beginning of block
						return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
					else				// end of block
						return ' ' + new Array( match.length ).join( '&nbsp;' ) ;
				} ) ;

		// 2. Convert \n to <BR>.
		// 3. Convert contiguous (i.e. non-singular) spaces or tabs to &nbsp;
		var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
		var results = [] ;
		htmlIterator.Each( function( isTag, value )
			{
				if ( !isTag )
				{
					value = value.replace( /\n/g, '<br>' ) ;
					value = value.replace( /[ \t]{2,}/g,
							function ( match )
							{
								return new Array( match.length ).join( '&nbsp;' ) + ' ' ;
							} ) ;
				}
				results.push( value ) ;
			} ) ;
		newBlock.innerHTML = results.join( '' ) ;
		return newBlock ;
	},

	/**
	 * Converting from a non-PRE block to a PRE block in formatting operations.
	 */
	_ToPre : function( doc, block, newBlock )
	{
		// Handle converting from a regular block to a <pre> block.
		var innerHTML = block.innerHTML.Trim() ;

		// 1. Delete ANSI whitespaces immediately before and after <BR> because
		//    they are not visible.
		// 2. Mark down any <BR /> nodes here so they can be turned into \n in
		//    the next step and avoid being compressed.
		innerHTML = innerHTML.replace( /[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi, '<br />' ) ;

		// 3. Compress other ANSI whitespaces since they're only visible as one
		//    single space previously.
		// 4. Convert &nbsp; to spaces since &nbsp; is no longer needed in <PRE>.
		// 5. Convert any <BR /> to \n. This must not be done earlier because
		//    the \n would then get compressed.
		var htmlIterator = new FCKHtmlIterator( innerHTML ) ;
		var results = [] ;
		htmlIterator.Each( function( isTag, value )
			{
				if ( !isTag )
					value = value.replace( /([ \t\n\r]+|&nbsp;)/g, ' ' ) ;
				else if ( isTag && value == '<br />' )
					value = '\n' ;
				results.push( value ) ;
			} ) ;

		// Assigning innerHTML to <PRE> in IE causes all linebreaks to be
		// reduced to spaces.
		// Assigning outerHTML to <PRE> in IE doesn't work if the <PRE> isn't
		// contained in another node since the node reference is changed after
		// outerHTML assignment.
		// So, we need some hacks to workaround IE bugs here.
		if ( FCKBrowserInfo.IsIE )
		{
			var temp = doc.createElement( 'div' ) ;
			temp.appendChild( newBlock ) ;
			newBlock.outerHTML = '<pre>\n' + results.join( '' ) + '</pre>' ;
			newBlock = temp.removeChild( temp.firstChild ) ;
		}
		else
			newBlock.innerHTML = results.join( '' ) ;

		return newBlock ;
	},

	/**
	 * Merge a <pre> block with a previous <pre> block, if available.
	 */
	_CheckAndMergePre : function( previousBlock, preBlock )
	{
		// Check if the previous block and the current block are next
		// to each other.
		if ( previousBlock != FCKDomTools.GetPreviousSourceElement( preBlock, true ) )
			return ;

		// Merge the previous <pre> block contents into the current <pre>
		// block.
		//
		// Another thing to be careful here is that currentBlock might contain
		// a '\n' at the beginning, and previousBlock might contain a '\n'
		// towards the end. These new lines are not normally displayed but they
		// become visible after merging.
		var innerHTML = previousBlock.innerHTML.replace( /\n$/, '' ) + '\n\n' +
				preBlock.innerHTML.replace( /^\n/, '' ) ;

		// Buggy IE normalizes innerHTML from <pre>, breaking whitespaces.
		if ( FCKBrowserInfo.IsIE )
			preBlock.outerHTML = '<pre>' + innerHTML + '</pre>' ;
		else
			preBlock.innerHTML = innerHTML ;

		// Remove the previous <pre> block.
		//
		// The preBlock must not be moved or deleted from the DOM tree. This
		// guarantees the FCKDomRangeIterator in _ApplyBlockStyle would not
		// get lost at the next iteration.
		FCKDomTools.RemoveNode( previousBlock ) ;
	},

	_CheckAndSplitPre : function( newBlock )
	{
		var lastNewBlock ;

		var cursor = newBlock.firstChild ;

		// We are not splitting <br><br> at the beginning of the block, so
		// we'll start from the second child.
		cursor = cursor && cursor.nextSibling ;

		while ( cursor )
		{
			var next = cursor.nextSibling ;

			// If we have two <BR>s, and they're not at the beginning or the end,
			// then we'll split up the contents following them into another block.
			// Stop processing if we are at the last child couple.
			if ( next && next.nextSibling && cursor.nodeName.IEquals( 'br' ) && next.nodeName.IEquals( 'br' ) )
			{
				// Remove the first <br>.
				FCKDomTools.RemoveNode( cursor ) ;

				// Move to the node after the second <br>.
				cursor = next.nextSibling ;

				// Remove the second <br>.
				FCKDomTools.RemoveNode( next ) ;

				// Create the block that will hold the child nodes from now on.
				lastNewBlock = FCKDomTools.InsertAfterNode( lastNewBlock || newBlock, FCKDomTools.CloneElement( newBlock ) ) ;

				continue ;
			}

			// If we split it, then start moving the nodes to the new block.
			if ( lastNewBlock )
			{
				cursor = cursor.previousSibling ;
				FCKDomTools.MoveNode(cursor.nextSibling, lastNewBlock ) ;
			}

			cursor = cursor.nextSibling ;
		}
	},

	/**
	 * Apply an inline style to a FCKDomRange.
	 *
	 * TODO
	 *	- Implement the "#" style handling.
	 *	- Properly handle block containers like <div> and <blockquote>.
	 */
	_ApplyBlockStyle : function( range, selectIt, updateRange )
	{
		// Bookmark the range so we can re-select it after processing.
		var bookmark ;

		if ( selectIt )
			bookmark = range.CreateBookmark() ;

		var iterator = new FCKDomRangeIterator( range ) ;
		iterator.EnforceRealBlocks = true ;

		var block ;
		var doc = range.Window.document ;
		var previousPreBlock ;

		while( ( block = iterator.GetNextParagraph() ) )		// Only one =
		{
			// Create the new node right before the current one.
			var newBlock = this.BuildElement( doc ) ;

			// Check if we are changing from/to <pre>.
			var newBlockIsPre	= newBlock.nodeName.IEquals( 'pre' ) ;
			var blockIsPre		= block.nodeName.IEquals( 'pre' ) ;

			var toPre	= newBlockIsPre && !blockIsPre ;
			var fromPre	= !newBlockIsPre && blockIsPre ;

			// Move everything from the current node to the new one.
			if ( toPre )
				newBlock = this._ToPre( doc, block, newBlock ) ;
			else if ( fromPre )
				newBlock = this._FromPre( doc, block, newBlock ) ;
			else	// Convering from a regular block to another regular block.
				FCKDomTools.MoveChildren( block, newBlock ) ;

			// Replace the current block.
			block.parentNode.insertBefore( newBlock, block ) ;
			FCKDomTools.RemoveNode( block ) ;

			// Complete other tasks after inserting the node in the DOM.
			if ( newBlockIsPre )
			{
				if ( previousPreBlock )
					this._CheckAndMergePre( previousPreBlock, newBlock ) ;	// Merge successive <pre> blocks.
				previousPreBlock = newBlock ;
			}
			else if ( fromPre )
				this._CheckAndSplitPre( newBlock ) ;	// Split <br><br> in successive <pre>s.
		}

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

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

	/**
	 * Apply an inline style to a FCKDomRange.
	 *
	 * TODO
	 *	- Merge elements, when applying styles to similar elements that enclose
	 *    the entire selection, outputing:
	 *        <span style="color: #ff0000; background-color: #ffffff">XYZ</span>
	 *    instead of:
	 *        <span style="color: #ff0000;"><span style="background-color: #ffffff">XYZ</span></span>
	 */
	_ApplyInlineStyle : function( range, selectIt, updateRange )
	{
		var doc = range.Window.document ;

		if ( range.CheckIsCollapsed() )
		{
			// Create the element to be inserted in the DOM.
			var collapsedElement = this.BuildElement( doc ) ;
			range.InsertNode( collapsedElement ) ;
			range.MoveToPosition( collapsedElement, 2 ) ;
			range.Select() ;

			return ;
		}

		// The general idea here is navigating through all nodes inside the
		// current selection, working on distinct range blocks, defined by the
		// DTD compatibility between the style element and the nodes inside the
		// ranges.
		//
		// For example, suppose we have the following selection (where [ and ]
		// are the boundaries), and we apply a <b> style there:
		//
		//		<p>Here we [have <b>some</b> text.<p>
		//		<p>And some here] here.</p>
		//
		// Two different ranges will be detected:
		//
		//		"have <b>some</b> text."
		//		"And some here"
		//
		// Both ranges will be extracted, moved to a <b> element, and
		// re-inserted, resulting in the following output:
		//
		//		<p>Here we [<b>have some text.</b><p>
		//		<p><b>And some here</b>] here.</p>
		//
		// Note that the <b> element at <b>some</b> is also removed because it
		// is not needed anymore.

		var elementName = this.Element ;

		// Get the DTD definition for the element. Defaults to "span".
		var elementDTD = FCK.DTD[ elementName ] || FCK.DTD.span ;

		// Create the attribute list to be used later for element comparisons.
		var styleAttribs = this._GetAttribsForComparison() ;
		var styleNode ;

		// Expand the range, if inside inline element boundaries.
		range.Expand( 'inline_elements' ) ;

		// Bookmark the range so we can re-select it after processing.
		var bookmark = range.CreateBookmark( true ) ;

		// The style will be applied within the bookmark boundaries.
		var startNode	= range.GetBookmarkNode( bookmark, true ) ;
		var endNode		= range.GetBookmarkNode( bookmark, false ) ;

		// We'll be reusing the range to apply the styles. So, release it here
		// to indicate that it has not been initialized.
		range.Release( true ) ;

		// Let's start the nodes lookup from the node right after the bookmark
		// span.
		var currentNode = FCKDomTools.GetNextSourceNode( startNode, true ) ;

		while ( currentNode )
		{
			var applyStyle = false ;

			var nodeType = currentNode.nodeType ;
			var nodeName = nodeType == 1 ? currentNode.nodeName.toLowerCase() : null ;

			// Check if the current node can be a child of the style element.
			if ( !nodeName || elementDTD[ nodeName ] )
			{
				// Check if the style element can be a child of the current
				// node parent or if the element is not defined in the DTD.
				if ( ( FCK.DTD[ currentNode.parentNode.nodeName.toLowerCase() ] || FCK.DTD.span )[ elementName ] || !FCK.DTD[ elementName ] )
				{
					// This node will be part of our range, so if it has not
					// been started, place its start right before the node.
					if ( !range.CheckHasRange() )
						range.SetStart( currentNode, 3 ) ;

					// Non element nodes, or empty elements can be added
					// completely to the range.
					if ( nodeType != 1 || currentNode.childNodes.length == 0 )
					{
						var includedNode = currentNode ;
						var parentNode = includedNode.parentNode ;

						// This node is about to be included completelly, but,
						// if this is the last node in its parent, we must also
						// check if the parent itself can be added completelly
						// to the range.
						while ( includedNode == parentNode.lastChild
							&& elementDTD[ parentNode.nodeName.toLowerCase() ] )
						{
							includedNode = parentNode ;
						}

						range.SetEnd( includedNode, 4 ) ;

						// If the included node is the last node in its parent
						// and its parent can't be inside the style node, apply
						// the style immediately.
						if ( includedNode == includedNode.parentNode.lastChild && !elementDTD[ includedNode.parentNode.nodeName.toLowerCase() ] )
							applyStyle = true ;
					}
					else
					{
						// Element nodes will not be added directly. We need to
						// check their children because the selection could end
						// inside the node, so let's place the range end right
						// before the element.
						range.SetEnd( currentNode, 3 ) ;
					}
				}
				else
					applyStyle = true ;
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久综合狠狠综合久久| 亚洲乱码精品一二三四区日韩在线| 国产精品人成在线观看免费| 日韩av在线发布| av一二三不卡影片| 久久亚洲综合色| 蜜桃一区二区三区在线| 色婷婷av久久久久久久| 日韩免费一区二区三区在线播放| 亚洲欧美日韩在线| 国产精品羞羞答答xxdd | 91精品一区二区三区久久久久久| 中日韩免费视频中文字幕| 国产美女一区二区三区| 精品国产免费一区二区三区香蕉| 精品一区二区三区香蕉蜜桃| 欧美一区二区视频网站| 日本欧美加勒比视频| 在线国产亚洲欧美| 亚洲一区二区三区视频在线| 一本一道综合狠狠老| 欧美国产精品劲爆| 91捆绑美女网站| 亚洲视频免费看| 99在线精品一区二区三区| 国产精品伦一区二区三级视频| 国产精品一区一区三区| 国产亚洲一区字幕| 成人av电影观看| 亚洲欧洲精品一区二区精品久久久| 国产91高潮流白浆在线麻豆 | 日韩一区中文字幕| 在线影视一区二区三区| 亚洲成人免费看| 欧美日韩免费观看一区二区三区| 偷窥少妇高潮呻吟av久久免费| 91精品国产综合久久香蕉麻豆| 国产高清精品久久久久| 亚洲精品国产无套在线观| 欧美精品乱码久久久久久按摩| 麻豆91在线看| 亚洲欧洲综合另类在线| 欧美色偷偷大香| 麻豆精品一区二区三区| 国产精品免费久久| 91精品国产手机| 不卡的电视剧免费网站有什么| 亚洲成人先锋电影| 国产精品麻豆99久久久久久| 欧美日韩国产一级片| 国模大尺度一区二区三区| 亚洲视频网在线直播| 久久青草欧美一区二区三区| 欧美中文字幕不卡| 国产大陆精品国产| 视频一区二区欧美| 日本一区二区电影| 日韩色在线观看| av一本久道久久综合久久鬼色| 日韩成人免费在线| 一区二区三区四区亚洲| 欧美国产日韩a欧美在线观看| 日韩欧美国产一区在线观看| 在线精品视频一区二区| 成人精品国产免费网站| 久久99国产精品免费| 亚洲福利视频一区| 亚洲美女精品一区| 亚洲欧美日韩在线不卡| 国产精品久久看| 国产精品乱码人人做人人爱| 26uuu色噜噜精品一区| 日韩女优av电影| 26uuu久久天堂性欧美| 欧美一级片免费看| 日韩午夜激情av| 久久久天堂av| 国产精品福利一区| 国产精品久久久久久久久久久免费看| 欧美成人精品3d动漫h| 91精品中文字幕一区二区三区| 日本韩国一区二区| 欧美丰满少妇xxxbbb| 日韩一区二区在线播放| 精品剧情v国产在线观看在线| 日韩欧美一级在线播放| 精品国产一区二区国模嫣然| 精品成人一区二区三区四区| 国产清纯白嫩初高生在线观看91 | 日韩国产欧美在线播放| 久久电影网电视剧免费观看| 国产一区二区三区免费观看 | 欧美精品久久99久久在免费线| 91精品国产综合久久久蜜臀粉嫩| 日韩一区二区在线播放| 91精品在线一区二区| 亚洲国产精品国自产拍av| 亚洲精品中文字幕在线观看| 亚洲成人手机在线| 国产一区二区三区免费看 | 欧美色图在线观看| eeuss国产一区二区三区| 欧美日韩视频在线观看一区二区三区| 亚洲第一av色| 在线观看免费视频综合| 91精品免费观看| 国产精品网友自拍| 亚洲地区一二三色| 色哟哟在线观看一区二区三区| 欧美精品777| 一区精品在线播放| 日本怡春院一区二区| 99在线精品观看| 久久久噜噜噜久噜久久综合| 亚洲不卡一区二区三区| 99久久精品国产观看| 国产无一区二区| 蜜臀久久99精品久久久画质超高清| 色综合久久久久网| 国产欧美一二三区| 午夜精品久久久久久久99水蜜桃 | 国产白丝网站精品污在线入口| 欧美日韩精品久久久| 亚洲免费在线看| 91欧美激情一区二区三区成人| 精品欧美一区二区久久| 亚洲成人激情综合网| 色综合视频在线观看| 久久久久久电影| 久草精品在线观看| 欧美大片拔萝卜| 美女mm1313爽爽久久久蜜臀| 欧美日韩国产大片| 亚洲地区一二三色| 91福利视频网站| 午夜精品久久一牛影视| 欧美剧情片在线观看| 日本亚洲欧美天堂免费| 欧美日免费三级在线| 亚洲第一搞黄网站| 337p日本欧洲亚洲大胆精品| 久久国产精品第一页| 久久综合五月天婷婷伊人| 韩国一区二区在线观看| 日韩女优av电影| 成人在线综合网站| 日韩美女视频19| 欧美人妖巨大在线| 日韩国产在线观看一区| 在线精品国精品国产尤物884a| 国产精品久久三| 欧美天堂一区二区三区| 日韩av一二三| 国产日韩欧美精品综合| 91福利精品视频| 美日韩黄色大片| 国产精品三级av| 欧美精品免费视频| 成人综合在线视频| 日韩精品成人一区二区在线| 亚洲国产激情av| 制服丝袜亚洲网站| 91无套直看片红桃| 蜜桃一区二区三区四区| 亚洲色图制服诱惑| 精品成人一区二区三区| 欧美网站大全在线观看| 成人动漫精品一区二区| 琪琪一区二区三区| 亚洲一区二区三区视频在线播放 | 欧美亚洲一区二区三区四区| 蜜桃av一区二区| 亚洲欧美怡红院| 久久影音资源网| 99久久伊人网影院| 国产精品88av| 国产乱码精品一区二区三区忘忧草| 一区二区日韩av| 中文字幕av免费专区久久| 久久伊人中文字幕| 日韩精品中文字幕一区二区三区| 精品视频一区二区三区免费| 91一区二区在线| 成人一区在线观看| 成人动漫在线一区| 9色porny自拍视频一区二区| www.亚洲国产| 成人avav影音| 91论坛在线播放| av一本久道久久综合久久鬼色| 成人av网址在线观看| 99久久久精品免费观看国产蜜| 国产成人亚洲精品青草天美| 国模无码大尺度一区二区三区| 奇米888四色在线精品| 视频在线观看国产精品| 石原莉奈一区二区三区在线观看| 亚洲宅男天堂在线观看无病毒 | 制服丝袜av成人在线看| 在线播放亚洲一区|