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

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

?? fckstyle.js

?? 強大的個人日志系統,界面華麗
?? 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国产精品成人| 欧美日韩亚洲综合| 亚洲最大成人综合| 97se亚洲国产综合自在线| 国产精品久久久久久久久搜平片 | 亚洲一卡二卡三卡四卡五卡| 成人动漫在线一区| 中文字幕乱码久久午夜不卡| 国产成人在线免费观看| 久久精品视频免费| 国产精品一区三区| 久久久天堂av| 国产精品1区2区3区在线观看| 久久综合狠狠综合久久综合88 | 国产一区二区美女诱惑| 亚洲精品一区二区三区香蕉| 激情综合一区二区三区| 久久―日本道色综合久久| 国产成人精品免费| 中文字幕免费不卡| 91网站最新地址| 亚洲图片激情小说| 欧美在线观看一区二区| 午夜视频在线观看一区| 在线综合视频播放| 久久精品国产网站| 久久精品亚洲乱码伦伦中文| 成人av资源站| 亚洲视频在线一区二区| 欧美亚洲综合在线| 日韩不卡一二三区| 精品日产卡一卡二卡麻豆| 国产精品一区二区男女羞羞无遮挡| 国产欧美一区二区三区在线看蜜臀| 成人免费观看av| 一区二区三区av电影| 88在线观看91蜜桃国自产| 久久99精品一区二区三区| 欧美激情资源网| 日本道色综合久久| 免费成人av资源网| 国产欧美一区二区在线| 日本精品视频一区二区三区| 亚洲不卡在线观看| 2020日本不卡一区二区视频| 盗摄精品av一区二区三区| 亚洲人成小说网站色在线| 欧美日韩成人在线一区| 国产一区二区三区视频在线播放| 中文字幕在线一区二区三区| 欧美天堂一区二区三区| 久久精品99国产国产精| 国产精品美女久久久久久久久久久 | 欧美视频一区二| 激情综合五月天| 中文字幕亚洲区| 欧美妇女性影城| 国产成人精品综合在线观看| 亚洲综合丁香婷婷六月香| 日韩欧美国产精品一区| 成人精品视频一区二区三区| 亚洲成av人影院| 精品久久国产老人久久综合| 91麻豆国产精品久久| 青青草成人在线观看| 国产精品久久毛片a| 欧美精品777| 成人av资源网站| 日本伊人精品一区二区三区观看方式| 国产亚洲精久久久久久| 欧美日韩一区二区不卡| 国产jizzjizz一区二区| 午夜欧美大尺度福利影院在线看| 国产日韩精品一区二区三区| 欧美综合在线视频| 国产一区二区在线免费观看| 亚洲在线一区二区三区| 国产欧美日韩综合| 欧美浪妇xxxx高跟鞋交| 成人av网在线| 日本不卡一二三| 自拍偷拍欧美激情| 精品国产精品一区二区夜夜嗨| 色综合网色综合| 国产精品一区二区果冻传媒| 丝袜美腿一区二区三区| 中文字幕在线免费不卡| 精品嫩草影院久久| 欧美日韩小视频| thepron国产精品| 经典三级视频一区| 五月天一区二区| 亚洲欧美日韩国产成人精品影院| 国产亚洲一区二区三区| 91麻豆精品国产91久久久更新时间| 99re这里都是精品| 国产成人精品www牛牛影视| 美女爽到高潮91| 亚洲不卡av一区二区三区| 国产精品国产三级国产普通话蜜臀| 欧美电影免费提供在线观看| 欧美人xxxx| 色综合久久久久网| 99久久婷婷国产| 成人综合在线视频| 激情国产一区二区| 男女男精品网站| 日韩国产成人精品| 亚洲成a人片在线观看中文| 亚洲欧美另类久久久精品2019| 中文天堂在线一区| 久久精品日产第一区二区三区高清版 | 在线观看日韩一区| av网站一区二区三区| 福利一区福利二区| 国产在线不卡视频| 麻豆91在线观看| 日韩福利视频导航| 香蕉影视欧美成人| 亚洲成年人网站在线观看| 伊人色综合久久天天人手人婷| 亚洲欧洲av另类| 国产精品素人一区二区| 国产目拍亚洲精品99久久精品| 久久久久久**毛片大全| 久久日韩精品一区二区五区| 精品久久久三级丝袜| 精品999在线播放| www久久精品| 久久女同性恋中文字幕| 国产亚洲福利社区一区| 国产欧美精品一区| 国产精品久久二区二区| 亚洲天堂免费看| 一区二区三区在线视频观看58| 亚洲精品视频在线观看免费| 亚洲美女屁股眼交3| 亚洲影院在线观看| 亚洲成人av电影在线| 午夜伊人狠狠久久| 日本中文一区二区三区| 久久精品国产精品亚洲红杏 | 九色综合狠狠综合久久| 毛片av一区二区| 国产在线精品一区二区| 国产成人福利片| a美女胸又www黄视频久久| 色视频欧美一区二区三区| 欧美日韩一区二区在线观看视频| 欧美人伦禁忌dvd放荡欲情| 欧美精品三级日韩久久| 日韩免费在线观看| 久久中文字幕电影| 中文av一区特黄| 亚洲日本一区二区| 亚洲6080在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久伊人中文字幕| 国产精品天干天干在观线| 亚洲美女偷拍久久| 日韩电影免费一区| 精品在线一区二区三区| 岛国一区二区三区| 在线观看免费一区| 精品区一区二区| 中文字幕一区三区| 亚洲午夜三级在线| 九九精品视频在线看| 99精品国产99久久久久久白柏| 欧美午夜电影网| 2023国产一二三区日本精品2022| 中文字幕在线观看一区二区| 亚洲一区二区三区国产| 伦理电影国产精品| 99精品视频一区| 欧美一区二区免费观在线| 国产人伦精品一区二区| 亚洲香肠在线观看| 经典三级一区二区| 色悠久久久久综合欧美99| 3d动漫精品啪啪一区二区竹菊| 久久久久99精品国产片| 一区二区三区在线免费| 精品综合久久久久久8888| caoporn国产精品| 日韩一区二区三区电影在线观看 | 日韩一级完整毛片| 国产精品久线在线观看| 图片区小说区区亚洲影院| 国产jizzjizz一区二区| 欧美日韩在线直播| 国产日韩欧美高清| 亚洲成人综合网站| 国产成人av电影在线观看| 欧美日韩一区二区三区在线看| 久久精品视频在线看| 午夜av一区二区|