1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/**
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
CKEDITOR.plugins.add( 'table', {
requires: 'dialog',
// jscs:disable maximumLineLength
lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
// jscs:enable maximumLineLength
icons: 'table', // %REMOVE_LINE_CORE%
hidpi: true, // %REMOVE_LINE_CORE%
init: function( editor ) {
if ( editor.blockless )
return;
var lang = editor.lang.table;
editor.addCommand( 'table', new CKEDITOR.dialogCommand( 'table', {
context: 'table',
allowedContent: 'table{width,height,border-collapse}[align,border,cellpadding,cellspacing,summary];' +
'caption tbody thead tfoot;' +
'th td tr[scope];' +
'td{border*,background-color,vertical-align,width,height}[colspan,rowspan];' +
( editor.plugins.dialogadvtab ? 'table' + editor.plugins.dialogadvtab.allowedContent() : '' ),
requiredContent: 'table',
contentTransformations: [
[ 'table{width}: sizeToStyle', 'table[width]: sizeToAttribute' ],
[ 'td: splitBorderShorthand' ],
[ {
element: 'table',
right: function( element ) {
if ( element.styles ) {
var parsedStyle;
if ( element.styles.border ) {
parsedStyle = CKEDITOR.tools.style.parse.border( element.styles.border );
} else if ( CKEDITOR.env.ie && CKEDITOR.env.version === 8 ) {
var styleData = element.styles;
// Workaround for IE8 browser. It transforms CSS border shorthand property
// to the longer one, consisting of border-top, border-right, etc. We have to check
// if all those properties exists and have the same value (#566).
if ( styleData[ 'border-left' ] && styleData[ 'border-left' ] === styleData[ 'border-right' ] &&
styleData[ 'border-right' ] === styleData[ 'border-top' ] &&
styleData[ 'border-top' ] === styleData[ 'border-bottom' ] ) {
parsedStyle = CKEDITOR.tools.style.parse.border( styleData[ 'border-top' ] );
}
}
if ( parsedStyle && parsedStyle.style && parsedStyle.style === 'solid' &&
parsedStyle.width && parseFloat( parsedStyle.width ) !== 0 ) {
element.attributes.border = 1;
}
if ( element.styles[ 'border-collapse' ] == 'collapse' ) {
element.attributes.cellspacing = 0;
}
}
}
} ]
]
} ) );
function createDef( def ) {
return CKEDITOR.tools.extend( def || {}, {
contextSensitive: 1,
refresh: function( editor, path ) {
this.setState( path.contains( 'table', 1 ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
}
} );
}
editor.addCommand( 'tableProperties', new CKEDITOR.dialogCommand( 'tableProperties', createDef() ) );
editor.addCommand( 'tableDelete', createDef( {
exec: function( editor ) {
var path = editor.elementPath(),
table = path.contains( 'table', 1 );
if ( !table )
return;
// If the table's parent has only one child remove it as well (unless it's a table cell, or the editable element)
//(https://dev.ckeditor.com/ticket/5416, https://dev.ckeditor.com/ticket/6289, https://dev.ckeditor.com/ticket/12110)
var parent = table.getParent(),
editable = editor.editable();
if ( parent.getChildCount() == 1 && !parent.is( 'td', 'th' ) && !parent.equals( editable ) )
table = parent;
var range = editor.createRange();
range.moveToPosition( table, CKEDITOR.POSITION_BEFORE_START );
table.remove();
range.select();
}
} ) );
editor.ui.addButton && editor.ui.addButton( 'Table', {
label: lang.toolbar,
command: 'table',
toolbar: 'insert,30'
} );
CKEDITOR.dialog.add( 'table', this.path + 'dialogs/table.js' );
CKEDITOR.dialog.add( 'tableProperties', this.path + 'dialogs/table.js' );
// If the "menu" plugin is loaded, register the menu items.
if ( editor.addMenuItems ) {
editor.addMenuItems( {
table: {
label: lang.menu,
command: 'tableProperties',
group: 'table',
order: 5
},
tabledelete: {
label: lang.deleteTable,
command: 'tableDelete',
group: 'table',
order: 1
}
} );
}
editor.on( 'doubleclick', function( evt ) {
var element = evt.data.element;
if ( element.is( 'table' ) )
evt.data.dialog = 'tableProperties';
} );
// If the "contextmenu" plugin is loaded, register the listeners.
if ( editor.contextMenu ) {
editor.contextMenu.addListener( function() {
// menu item state is resolved on commands.
return {
tabledelete: CKEDITOR.TRISTATE_OFF,
table: CKEDITOR.TRISTATE_OFF
};
} );
}
}
} );
|