📄 fckplugin.js
字号:
cssGuess = 0 ;
return Math.max( attrGuess, cssGuess ) ;
},
// Calculate the real width of the table cell.
// The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after
// that, the table cell should be of exactly the same width as before.
// The real width of a table cell can be calculated as:
// width = clientWidth - paddingLeft - paddingRight.
"_GetCellWidth" : function( table, cell )
{
var clientWidth = cell.clientWidth ;
if ( isNaN( clientWidth ) )
clientWidth = 0 ;
return clientWidth - this._GetCellPadding( table, cell ) ;
},
"MouseMoveListener" : function( FCK, evt )
{
if ( FCKDragTableHandler._MouseMoveMode == 0 )
return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
else
return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
},
"_MouseFindHandler" : function( FCK, evt )
{
if ( FCK.MouseDownFlag )
return ;
var node = evt.srcElement || evt.target ;
try
{
if ( ! node || node.nodeType != 1 )
{
this._HideResizeBar() ;
return ;
}
}
catch ( e )
{
this._HideResizeBar() ;
return ;
}
// Since this function might be called from the editing area iframe or the outer fckeditor iframe,
// the mouse point coordinates from evt.clientX/Y can have different reference points.
// We need to resolve the mouse pointer position relative to the editing area iframe.
var mouseX = evt.clientX ;
var mouseY = evt.clientY ;
if ( FCKTools.GetElementDocument( node ) == document )
{
var offset = this._GetIframeOffset() ;
mouseX -= offset.x ;
mouseY -= offset.y ;
}
if ( this._ResizeBar && this._LeftCell )
{
var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ;
var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ;
var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ;
var lxDist = mouseX - rightPos.x ;
var inRangeFlag = false ;
if ( lxDist >= 0 && rxDist <= 0 )
inRangeFlag = true ;
else if ( rxDist > 0 && lxDist <= 3 )
inRangeFlag = true ;
else if ( lxDist < 0 && rxDist >= -2 )
inRangeFlag = true ;
if ( inRangeFlag )
{
this._ShowResizeBar( FCK.EditorWindow,
FCKTools.GetElementAscensor( this._LeftCell, "table" ),
{ "x" : mouseX, "y" : mouseY } ) ;
return ;
}
}
var tagName = node.tagName.toLowerCase() ;
if ( tagName != "table" && tagName != "td" && tagName != "th" )
{
if ( this._LeftCell )
this._LeftCell = this._RightCell = this._TableMap = null ;
this._HideResizeBar() ;
return ;
}
node = FCKTools.GetElementAscensor( node, "table" ) ;
var tableMap = FCKTableHandler._CreateTableMap( node ) ;
var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ;
if ( cellTuple == null )
{
if ( this._LeftCell )
this._LeftCell = this._RightCell = this._TableMap = null ;
this._HideResizeBar() ;
}
else
{
this._LeftCell = cellTuple["leftCell"] ;
this._RightCell = cellTuple["rightCell"] ;
this._TableMap = tableMap ;
this._ShowResizeBar( FCK.EditorWindow,
FCKTools.GetElementAscensor( this._LeftCell, "table" ),
{ "x" : mouseX, "y" : mouseY } ) ;
}
},
"_MouseDragHandler" : function( FCK, evt )
{
var mouse = { "x" : evt.clientX, "y" : evt.clientY } ;
// Convert mouse coordinates in reference to the outer iframe.
var node = evt.srcElement || evt.target ;
if ( FCKTools.GetElementDocument( node ) == FCK.EditorDocument )
{
var offset = this._GetIframeOffset() ;
mouse.x += offset.x ;
mouse.y += offset.y ;
}
// Calculate the mouse position delta and see if we've gone out of range.
if ( mouse.x >= this._MaximumX - 5 )
mouse.x = this._MaximumX - 5 ;
if ( mouse.x <= this._MinimumX + 5 )
mouse.x = this._MinimumX + 5 ;
var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ;
this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ;
this._LastX = mouse.x ;
},
"_ShowResizeBar" : function( w, table, mouse )
{
if ( this._ResizeBar == null )
{
this._ResizeBar = this._doc.createElement( "div" ) ;
var paddingBar = this._ResizeBar ;
var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ;
if ( FCKBrowserInfo.IsIE )
paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ;
else
paddingStyles.opacity = 0.10 ;
FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
this._avoidStyles( paddingBar );
paddingBar.setAttribute('_fcktemp', true);
this._doc.body.appendChild( paddingBar ) ;
FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ;
FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ;
FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ;
FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ;
// IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside.
// So we need to create a spacer image to fill the block up.
var filler = this._doc.createElement( "img" ) ;
filler.setAttribute('_fcktemp', true);
filler.border = 0 ;
filler.src = FCKConfig.BasePath + "images/spacer.gif" ;
filler.style.position = "absolute" ;
paddingBar.appendChild( filler ) ;
// Disable drag and drop, and selection for the filler image.
var disabledListener = function( evt )
{
if ( evt.preventDefault )
evt.preventDefault() ;
else
evt.returnValue = false ;
}
FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ;
FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ;
}
var paddingBar = this._ResizeBar ;
var offset = this._GetIframeOffset() ;
var tablePos = this._GetTablePosition( w, table ) ;
var barHeight = table.offsetHeight ;
var barTop = offset.y + tablePos.y ;
// Do not let the resize bar intrude into the toolbar area.
if ( tablePos.y < 0 )
{
barHeight += tablePos.y ;
barTop -= tablePos.y ;
}
var bw = parseInt( table.border, 10 ) ;
if ( isNaN( bw ) )
bw = 0 ;
var cs = parseInt( table.cellSpacing, 10 ) ;
if ( isNaN( cs ) )
cs = 0 ;
var barWidth = Math.max( bw+100, cs+100 ) ;
var paddingStyles =
{
'top' : barTop + 'px',
'height' : barHeight + 'px',
'width' : barWidth + 'px',
'left' : ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px'
} ;
if ( FCKBrowserInfo.IsIE )
paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
else
paddingStyles.opacity = 0.1 ;
FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ;
var filler = paddingBar.getElementsByTagName( "img" )[0] ;
FCKDomTools.SetElementStyles( filler,
{
width : paddingBar.offsetWidth + 'px',
height : barHeight + 'px'
} ) ;
barWidth = Math.max( bw, cs, 3 ) ;
var visibleBar = null ;
if ( paddingBar.getElementsByTagName( "div" ).length < 1 )
{
visibleBar = this._doc.createElement( "div" ) ;
this._avoidStyles( visibleBar );
visibleBar.setAttribute('_fcktemp', true);
paddingBar.appendChild( visibleBar ) ;
}
else
visibleBar = paddingBar.getElementsByTagName( "div" )[0] ;
FCKDomTools.SetElementStyles( visibleBar,
{
position : 'absolute',
backgroundColor : 'blue',
width : barWidth + 'px',
height : barHeight + 'px',
left : '50px',
top : '0px'
} ) ;
},
"_HideResizeBar" : function()
{
if ( this._ResizeBar )
// IE bug: display : none does not hide the resize bar for some reason.
// so set the position to somewhere invisible.
FCKDomTools.SetElementStyles( this._ResizeBar,
{
top : '-100000px',
left : '-100000px'
} ) ;
},
"_GetIframeOffset" : function ()
{
return FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
},
"_GetTablePosition" : function ( w, table )
{
return FCKTools.GetWindowPosition( w, table ) ;
},
"_avoidStyles" : function( element )
{
FCKDomTools.SetElementStyles( element,
{
padding : '0',
backgroundImage : 'none',
border : '0'
} ) ;
}
};
FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -