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

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

?? fcktablehandler.js

?? E創(chuàng)政府管理系統(tǒng),演示版,在服務(wù)器端運行注冊程序后可以投入使用
?? JS
字號:
?/* * FCKeditor - The text editor for internet
 * Copyright (C) 2003-2004 Frederico Caldeira Knabben
 * 
 * Licensed under the terms of the GNU Lesser General Public License:
 * 		http://www.opensource.org/licenses/lgpl-license.php
 * 
 * For further information visit:
 * 		http://www.fckeditor.net/
 * 
 * File Name: fcktablehandler.js
 * 	Manage table operations.
 * 
 * Version:  2.0 RC3
 * Modified: 2004-12-16 00:41:05
 * 
 * File Authors:
 * 		Frederico Caldeira Knabben (fredck@fckeditor.net) */
var FCKTableHandler = new Object() ;

FCKTableHandler.InsertRow = function()
{
	// Get the row where the selection is placed in.	
	var oRow = FCKSelection.MoveToAncestorNode("TR") ;	if ( !oRow ) return ;	// Create a clone of the row.	var oNewRow = oRow.cloneNode( true ) ;	// Insert the new row (copy) before of it.	oRow.parentNode.insertBefore( oNewRow, oRow ) ;	// Clean the row (it seems that the new row has been added after it).	FCKTableHandler.ClearRow( oRow ) ;}

FCKTableHandler.DeleteRows = function( row )
{
	// If no row has been passed as a parameer,
	// then get the row where the selection is placed in.	
	if ( !row )
		row = FCKSelection.MoveToAncestorNode("TR") ;	if ( !row ) return ;	// Get the row's table.		var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;	// If just one row is available then delete the entire table.	if ( oTable.rows.length == 1 ) 	{		FCKTableHandler.DeleteTable( oTable ) ;		return ;	}	// Delete the row.	row.parentNode.removeChild( row ) ;}

FCKTableHandler.DeleteTable = function( table )
{
	// If no table has been passed as a parameer,
	// then get the table where the selection is placed in.	
	if ( !table )
		table = FCKSelection.MoveToAncestorNode("TABLE") ;	if ( !table ) return ;	// Delete the table.	table.parentNode.removeChild( table ) ;}

FCKTableHandler.InsertColumn = function()
{
	// Get the cell where the selection is placed in.
	var oCell = FCKSelection.MoveToAncestorNode("TD") ;	if ( !oCell ) return ;		// Get the cell's table.
	var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;	// Get the index of the column to be created (based on the cell).	var iIndex = oCell.cellIndex + 1 ;	// Loop throw all rows available in the table.	for ( var i = 0 ; i < oTable.rows.length ; i++ )	{		// Get the row.		var oRow = oTable.rows[i] ;			// If the row doens't have enought cells, ignore it.		if ( oRow.cells.length < iIndex )			continue ;				// Create the new cell element to be added.		oCell = FCK.EditorDocument.createElement('TD') ;		oCell.innerHTML = '&nbsp;' ;				// Get the cell that is placed in the new cell place.		var oBaseCell = oRow.cells[iIndex] ;		// If the cell is available (we are not in the last cell of the row).		if ( oBaseCell )		{			// Insert the new cell just before of it.			oRow.insertBefore( oCell, oBaseCell ) ;		}		else		{			// Append the cell at the end of the row.			oRow.appendChild( oCell ) ;		}	}}

FCKTableHandler.DeleteColumns = function()
{
	// Get the cell where the selection is placed in.
	var oCell = FCKSelection.MoveToAncestorNode("TD") ;	if ( !oCell ) return ;
	
	// Get the cell's table.		var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
	// Get the cell index.
	var iIndex = oCell.cellIndex ;	// Loop throw all rows (from down to up, because it's possible that some	// rows will be deleted).	for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )	{		// Get the row.		var oRow = oTable.rows[i] ;				// If the cell to be removed is the first one and the row has just one cell.		if ( iIndex == 0 && oRow.cells.length == 1 )		{			// Remove the entire row.			FCKTableHandler.DeleteRows( oRow ) ;			continue ;		}				// If the cell to be removed exists the delete it.		if ( oRow.cells[iIndex] )			oRow.removeChild( oRow.cells[iIndex] ) ;	}
}

FCKTableHandler.InsertCell = function( cell )
{
	// Get the cell where the selection is placed in.
	var oCell = cell ? cell : FCKSelection.MoveToAncestorNode("TD") ;	if ( !oCell ) return ;
	// Create the new cell element to be added.	var oNewCell = FCK.EditorDocument.createElement("TD");	oNewCell.innerHTML = "&nbsp;" ;	// If it is the last cell in the row.	if ( oCell.cellIndex == oCell.parentNode.cells.lenght - 1 )	{		// Add the new cell at the end of the row.		oCell.parentNode.appendChild( oNewCell ) ;
	}
	else
	{
		// Add the new cell before the next cell (after the active one).
		oCell.parentNode.insertBefore( oNewCell, oCell.nextSibling ) ;
	}
	
	return oNewCell ;
}

FCKTableHandler.DeleteCell = function( cell )
{
	// If this is the last cell in the row.	if ( cell.parentNode.cells.length == 1 )	{		// Delete the entire row.		FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ;		return ;	}	// Delete the cell from the row.	cell.parentNode.removeChild( cell ) ;
}

FCKTableHandler.DeleteCells = function()
{
	var aCells = FCKTableHandler.GetSelectedCells() ;
	
	for ( var i = aCells.length - 1 ; i >= 0  ; i-- )
	{
		FCKTableHandler.DeleteCell( aCells[i] ) ;
	}
}

FCKTableHandler.MergeCells = function()
{
	// Get all selected cells.
	var aCells = FCKTableHandler.GetSelectedCells() ;
	
	// At least 2 cells must be selected.
	if ( aCells.length < 2 )
		return ;
		
	// The merge can occour only if the selected cells are from the same row.
	if ( aCells[0].parentNode != aCells[aCells.length-1].parentNode )
		return ;

	// Calculate the new colSpan for the first cell.
	var iColSpan = isNaN( aCells[0].colSpan ) ? 1 : aCells[0].colSpan ;

	var sHtml = '' ;
	
	for ( var i = aCells.length - 1 ; i > 0  ; i-- )
	{
		iColSpan += isNaN( aCells[i].colSpan ) ? 1 : aCells[i].colSpan ;
		
		// Append the HTML of each cell.
		sHtml = aCells[i].innerHTML + sHtml ;
		
		// Delete the cell.
		FCKTableHandler.DeleteCell( aCells[i] ) ;
	}
	
	// Set the innerHTML of the remaining cell (the first one).
	aCells[0].colSpan = iColSpan ;
	aCells[0].innerHTML += sHtml ;
}

FCKTableHandler.SplitCell = function()
{
	// Check that just one cell is selected, otherwise return.
	var aCells = FCKTableHandler.GetSelectedCells() ;
	if ( aCells.length != 1 )
		return ;
	
	var aMap = this._CreateTableMap( aCells[0].parentNode.parentNode ) ;
	var iCellIndex = FCKTableHandler._GetCellIndexSpan( aMap, aCells[0].parentNode.rowIndex , aCells[0] ) ;
		
	var aCollCells = this._GetCollumnCells( aMap, iCellIndex ) ;
	
	for ( var i = 0 ; i < aCollCells.length ; i++ )
	{
		if ( aCollCells[i] == aCells[0] )
		{
			var oNewCell = this.InsertCell( aCells[0] ) ;
			if ( !isNaN( aCells[0].rowSpan ) && aCells[0].rowSpan > 1 )
				oNewCell.rowSpan = aCells[0].rowSpan ;
		}
		else
		{
			if ( isNaN( aCollCells[i].colSpan ) )
				aCollCells[i].colSpan = 2 ;
			else
				aCollCells[i].colSpan += 1 ;
		}
	}
}

// Get the cell index from a TableMap.
FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
{
	if ( tableMap.length < rowIndex + 1 )
		return ;
	
	var oRow = tableMap[ rowIndex ] ;
	
	for ( var c = 0 ; c < oRow.length ; c++ )
	{
		if ( oRow[c] == cell )
			return c ;
	}
}

// Get the cells available in a collumn of a TableMap.
FCKTableHandler._GetCollumnCells = function( tableMap, collumnIndex )
{
	var aCollCells = new Array() ;

	for ( var r = 0 ; r < tableMap.length ; r++ )
	{
		var oCell = tableMap[r][collumnIndex] ;
		if ( oCell && ( aCollCells.length == 0 || aCollCells[ aCollCells.length - 1 ] != oCell ) )
			aCollCells[ aCollCells.length ] = oCell ;
	}
	
	return aCollCells ;
}

// This function is quite hard to explain. It creates a matrix representing all cells in a table.
// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix
// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3
// will produce a bi-dimensional matrix with the following values (representing the cells):
//		Cell1, Cell2, Cell2, Cell 3
//		Cell4, Cell2, Cell2, Cell 5
FCKTableHandler._CreateTableMap = function( table )
{
	var aRows = table.rows ;
	
	// Row and Collumn counters.
	var r = -1 ;
	
	var aMap = new Array() ;
	
	for ( var i = 0 ; i < aRows.length ; i++ )
	{
		r++ ;
		if ( !aMap[r] )
			aMap[r] = new Array() ;
		
		var c = -1 ;
		
		for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
		{
			var oCell = aRows[i].cells[j] ;
		
			c++ ;
			while ( aMap[r][c] )
				c++ ;
			
			var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ;
			var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ;

			for ( var rs = 0 ; rs < iRowSpan ; rs++ )
			{
				if ( !aMap[r + rs] )
					aMap[r + rs] = new Array() ;
					
				for ( var cs = 0 ; cs < iColSpan ; cs++ )
				{
					aMap[r + rs][c + cs] = aRows[i].cells[j] ;
				}
			}
			
			c += iColSpan - 1 ;
		}
	}
	return aMap ;
}

FCKTableHandler.ClearRow = function( tr )
{
	// Get the array of row's cells.
	var aCells = tr.cells ;	// Replace the contents of each cell with "nbsp;".	for ( var i = 0 ; i < aCells.length ; i++ ) 	{		aCells[i].innerHTML = '&nbsp;' ;	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人动与zoxxxx乱| 国产日韩成人精品| 国产视频一区二区在线观看| 综合久久久久久| 六月婷婷色综合| 欧美色图激情小说| 国产精品欧美一区二区三区| 美女视频一区二区三区| 91色porny| 久久亚洲二区三区| 蜜臀久久99精品久久久久久9| 91网站最新地址| 久久久久国产一区二区三区四区| 日本欧美一区二区| 欧美日韩午夜在线视频| 玉米视频成人免费看| www.激情成人| 欧美激情在线观看视频免费| 老司机精品视频线观看86| 欧美丝袜自拍制服另类| 日本一区二区三区久久久久久久久不| 蜜桃av一区二区在线观看| 欧美三级电影在线看| 亚洲欧美怡红院| 岛国精品在线观看| 久久久激情视频| 国产一区二区按摩在线观看| 久久网站最新地址| 黑人巨大精品欧美黑白配亚洲| 日韩欧美一区二区三区在线| 日本不卡不码高清免费观看| 5月丁香婷婷综合| 青青草97国产精品免费观看无弹窗版| 欧美喷水一区二区| 亚洲成av人片一区二区三区| 欧美三级日本三级少妇99| 亚洲成av人影院| 欧美乱妇20p| 看电视剧不卡顿的网站| 日韩精品在线看片z| 精品中文av资源站在线观看| 久久久久99精品国产片| 东方欧美亚洲色图在线| 成人欧美一区二区三区视频网页| a亚洲天堂av| 一区二区三区精品在线观看| 欧美精品在线视频| 国内精品久久久久影院薰衣草 | 9191成人精品久久| 亚洲成人手机在线| 欧美一级久久久| 久久99久久99| 中文字幕一区二区三区不卡| 91麻豆.com| 性做久久久久久免费观看| 欧美一二三四区在线| 国产一区二区三区综合| 国产精品污网站| 欧美怡红院视频| 美女一区二区三区| 国产精品免费久久| 欧美亚洲一区二区在线| 麻豆精品一区二区| 国产精品无遮挡| 欧美精品九九99久久| 国产一区二区在线观看视频| 亚洲欧美日本在线| 欧美一级国产精品| 99久久精品一区二区| 午夜欧美视频在线观看| 久久久久成人黄色影片| 欧美三级韩国三级日本一级| 国产美女一区二区| 亚洲国产精品影院| 国产日韩精品一区二区三区| 色狠狠av一区二区三区| 精油按摩中文字幕久久| 亚洲综合自拍偷拍| 久久久蜜桃精品| 欧美日韩精品一区二区天天拍小说| 国产毛片精品国产一区二区三区| 亚洲国产综合91精品麻豆| 国产午夜三级一区二区三| 精品污污网站免费看| 国产精品一线二线三线精华| 亚洲va欧美va天堂v国产综合| 欧美激情在线看| 欧美不卡一二三| 欧美美女直播网站| 91福利国产精品| 成人高清在线视频| 黑人精品欧美一区二区蜜桃| 日韩av电影天堂| 一区二区三区产品免费精品久久75| 精品噜噜噜噜久久久久久久久试看| 欧美无砖专区一中文字| av在线一区二区三区| 国产成人综合网站| 久久99这里只有精品| 91看片淫黄大片一级在线观看| 久久99国内精品| 婷婷国产在线综合| 一区二区三区欧美日韩| 国产精品国模大尺度视频| 久久久久久99精品| 久久色在线视频| 日韩欧美一级在线播放| 制服丝袜亚洲色图| 欧美亚洲高清一区| 欧美在线高清视频| 在线免费亚洲电影| 色哟哟在线观看一区二区三区| 国产成人精品亚洲777人妖| 国产麻豆欧美日韩一区| 国内久久精品视频| 国内精品久久久久影院色| 韩国欧美国产1区| 国产原创一区二区| 国精产品一区一区三区mba桃花 | 日韩欧美精品在线| 日韩一区二区三区在线| 日韩免费观看2025年上映的电影| 日韩精品一区二区三区在线| 欧美一卡二卡在线观看| 日韩欧美一级二级三级| 精品国产乱码久久久久久久| 日韩美女天天操| 久久久久九九视频| 国产精品久久久久毛片软件| 亚洲色图欧美在线| 一区二区三区日韩| 亚洲v中文字幕| 另类小说视频一区二区| 91官网在线免费观看| 色综合久久久网| 欧美日韩免费观看一区三区| 69久久夜色精品国产69蝌蚪网| 在线成人av网站| 久久先锋资源网| 亚洲天堂精品在线观看| 亚洲亚洲精品在线观看| 美女视频黄久久| 国产.欧美.日韩| 欧美体内she精视频| 欧美大片顶级少妇| 国产精品三级视频| 亚洲一区在线电影| 久久99久久99小草精品免视看| av午夜精品一区二区三区| 欧美日韩三级视频| 久久久久久麻豆| 亚洲国产美国国产综合一区二区| 蜜桃视频在线观看一区| 99久久国产综合精品色伊| 欧美日产国产精品| 中文字幕第一页久久| 亚洲大片精品永久免费| 国产精品456露脸| 欧美午夜电影网| 欧美激情一区二区三区蜜桃视频| 亚洲国产精品久久久久婷婷884| 精品在线一区二区三区| 色噜噜久久综合| 久久久精品人体av艺术| 日日夜夜精品免费视频| 不卡av在线免费观看| 欧美电视剧在线看免费| 亚洲另类一区二区| 国产高清亚洲一区| 欧美一区二区三区免费在线看| 国产精品国产三级国产三级人妇| 午夜精品一区二区三区免费视频| 国产91精品久久久久久久网曝门| 欧美性大战久久久久久久蜜臀| 久久嫩草精品久久久精品| 99精品一区二区三区| 久久久国产一区二区三区四区小说| 午夜国产不卡在线观看视频| 91在线视频播放| 国产人妖乱国产精品人妖| 免费精品视频最新在线| 欧美在线免费观看亚洲| 国产精品久久久久久久久快鸭| 韩国av一区二区三区四区| 91精品国产品国语在线不卡| 一二三四社区欧美黄| 99久久国产综合精品女不卡| 国产精品女人毛片| 国产乱码精品一品二品| 精品国产a毛片| 国内精品在线播放| 精品国产电影一区二区| 麻豆精品一二三| 日韩欧美国产1| 蜜桃一区二区三区四区| 日韩欧美一级特黄在线播放| 美洲天堂一区二卡三卡四卡视频| 91精品国产综合久久久久久久| 肉色丝袜一区二区| 欧美一级黄色录像|