]> git.immae.eu Git - perso/Immae/Projets/packagist/ludivine-ckeditor-component.git/blame - sources/plugins/link/dialogs/anchor.js
Update to 4.7.3
[perso/Immae/Projets/packagist/ludivine-ckeditor-component.git] / sources / plugins / link / dialogs / anchor.js
CommitLineData
c63493c8
IB
1/**\r
2 * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\r
3 * For licensing, see LICENSE.md or http://ckeditor.com/license\r
4 */\r
5\r
6CKEDITOR.dialog.add( 'anchor', function( editor ) {\r
7 // Function called in onShow to load selected element.\r
8 var loadElements = function( element ) {\r
9 this._.selectedElement = element;\r
10\r
11 var attributeValue = element.data( 'cke-saved-name' );\r
12 this.setValueOf( 'info', 'txtName', attributeValue || '' );\r
13 };\r
14\r
15 function createFakeAnchor( editor, attributes ) {\r
16 return editor.createFakeElement( editor.document.createElement( 'a', {\r
17 attributes: attributes\r
18 } ), 'cke_anchor', 'anchor' );\r
19 }\r
20\r
1794320d
IB
21\r
22 function getSelectedAnchor( selection ) {\r
23 var range = selection.getRanges()[ 0 ],\r
24 element = selection.getSelectedElement();\r
25\r
26 // In case of table cell selection, we want to shrink selection from td to a element.\r
27 range.shrink( CKEDITOR.SHRINK_ELEMENT );\r
28 element = range.getEnclosedNode();\r
29\r
30 if ( element && element.type === CKEDITOR.NODE_ELEMENT &&\r
31 ( element.data( 'cke-real-element-type' ) === 'anchor' || element.is( 'a' ) ) ) {\r
32 return element;\r
33 }\r
34 }\r
35\r
c63493c8
IB
36 return {\r
37 title: editor.lang.link.anchor.title,\r
38 minWidth: 300,\r
39 minHeight: 60,\r
40 onOk: function() {\r
41 var name = CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtName' ) );\r
42 var attributes = {\r
43 id: name,\r
44 name: name,\r
45 'data-cke-saved-name': name\r
46 };\r
47\r
48 if ( this._.selectedElement ) {\r
49 if ( this._.selectedElement.data( 'cke-realelement' ) ) {\r
50 var newFake = createFakeAnchor( editor, attributes );\r
51 newFake.replace( this._.selectedElement );\r
52\r
1794320d
IB
53 // Selecting fake element for IE. (http://dev.ckeditor.com/ticket/11377)\r
54 if ( CKEDITOR.env.ie ) {\r
c63493c8 55 editor.getSelection().selectElement( newFake );\r
1794320d 56 }\r
c63493c8
IB
57 } else {\r
58 this._.selectedElement.setAttributes( attributes );\r
59 }\r
60 } else {\r
61 var sel = editor.getSelection(),\r
62 range = sel && sel.getRanges()[ 0 ];\r
63\r
64 // Empty anchor\r
65 if ( range.collapsed ) {\r
66 var anchor = createFakeAnchor( editor, attributes );\r
67 range.insertNode( anchor );\r
68 } else {\r
69 if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 )\r
70 attributes[ 'class' ] = 'cke_anchor';\r
71\r
72 // Apply style.\r
73 var style = new CKEDITOR.style( { element: 'a', attributes: attributes } );\r
74 style.type = CKEDITOR.STYLE_INLINE;\r
1794320d 75 style.applyToRange( range );\r
c63493c8
IB
76 }\r
77 }\r
78 },\r
79\r
80 onHide: function() {\r
81 delete this._.selectedElement;\r
82 },\r
83\r
84 onShow: function() {\r
85 var sel = editor.getSelection(),\r
1794320d 86 fullySelected = getSelectedAnchor( sel ),\r
c63493c8
IB
87 fakeSelected = fullySelected && fullySelected.data( 'cke-realelement' ),\r
88 linkElement = fakeSelected ?\r
89 CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, fullySelected ) :\r
90 CKEDITOR.plugins.link.getSelectedLink( editor );\r
91\r
92 if ( linkElement ) {\r
93 loadElements.call( this, linkElement );\r
94 !fakeSelected && sel.selectElement( linkElement );\r
95\r
1794320d 96 if ( fullySelected ) {\r
c63493c8 97 this._.selectedElement = fullySelected;\r
1794320d 98 }\r
c63493c8
IB
99 }\r
100\r
101 this.getContentElement( 'info', 'txtName' ).focus();\r
102 },\r
103 contents: [ {\r
104 id: 'info',\r
105 label: editor.lang.link.anchor.title,\r
106 accessKey: 'I',\r
107 elements: [ {\r
108 type: 'text',\r
109 id: 'txtName',\r
110 label: editor.lang.link.anchor.name,\r
111 required: true,\r
112 validate: function() {\r
113 if ( !this.getValue() ) {\r
114 alert( editor.lang.link.anchor.errorName ); // jshint ignore:line\r
115 return false;\r
116 }\r
117 return true;\r
118 }\r
119 } ]\r
120 } ]\r
121 };\r
122} );\r