Diff: STRATO-apps/wordpress_03/app/wp-includes/js/tinymce/plugins/link/plugin.js
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
(function () {
2
+
var link = (function (domGlobals) {
3
+
'use strict';
4
+
5
+
var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
6
+
7
+
var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');
8
+
9
+
var assumeExternalTargets = function (editorSettings) {
10
+
return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
11
+
};
12
+
var hasContextToolbar = function (editorSettings) {
13
+
return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
14
+
};
15
+
var getLinkList = function (editorSettings) {
16
+
return editorSettings.link_list;
17
+
};
18
+
var hasDefaultLinkTarget = function (editorSettings) {
19
+
return typeof editorSettings.default_link_target === 'string';
20
+
};
21
+
var getDefaultLinkTarget = function (editorSettings) {
22
+
return editorSettings.default_link_target;
23
+
};
24
+
var getTargetList = function (editorSettings) {
25
+
return editorSettings.target_list;
26
+
};
27
+
var setTargetList = function (editor, list) {
28
+
editor.settings.target_list = list;
29
+
};
30
+
var shouldShowTargetList = function (editorSettings) {
31
+
return getTargetList(editorSettings) !== false;
32
+
};
33
+
var getRelList = function (editorSettings) {
34
+
return editorSettings.rel_list;
35
+
};
36
+
var hasRelList = function (editorSettings) {
37
+
return getRelList(editorSettings) !== undefined;
38
+
};
39
+
var getLinkClassList = function (editorSettings) {
40
+
return editorSettings.link_class_list;
41
+
};
42
+
var hasLinkClassList = function (editorSettings) {
43
+
return getLinkClassList(editorSettings) !== undefined;
44
+
};
45
+
var shouldShowLinkTitle = function (editorSettings) {
46
+
return editorSettings.link_title !== false;
47
+
};
48
+
var allowUnsafeLinkTarget = function (editorSettings) {
49
+
return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
50
+
};
51
+
var Settings = {
52
+
assumeExternalTargets: assumeExternalTargets,
53
+
hasContextToolbar: hasContextToolbar,
54
+
getLinkList: getLinkList,
55
+
hasDefaultLinkTarget: hasDefaultLinkTarget,
56
+
getDefaultLinkTarget: getDefaultLinkTarget,
57
+
getTargetList: getTargetList,
58
+
setTargetList: setTargetList,
59
+
shouldShowTargetList: shouldShowTargetList,
60
+
getRelList: getRelList,
61
+
hasRelList: hasRelList,
62
+
getLinkClassList: getLinkClassList,
63
+
hasLinkClassList: hasLinkClassList,
64
+
shouldShowLinkTitle: shouldShowLinkTitle,
65
+
allowUnsafeLinkTarget: allowUnsafeLinkTarget
66
+
};
67
+
68
+
var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
69
+
70
+
var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
71
+
72
+
var appendClickRemove = function (link, evt) {
73
+
domGlobals.document.body.appendChild(link);
74
+
link.dispatchEvent(evt);
75
+
domGlobals.document.body.removeChild(link);
76
+
};
77
+
var open = function (url) {
78
+
if (!global$3.ie || global$3.ie > 10) {
79
+
var link = domGlobals.document.createElement('a');
80
+
link.target = '_blank';
81
+
link.href = url;
82
+
link.rel = 'noreferrer noopener';
83
+
var evt = domGlobals.document.createEvent('MouseEvents');
84
+
evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
85
+
appendClickRemove(link, evt);
86
+
} else {
87
+
var win = domGlobals.window.open('', '_blank');
88
+
if (win) {
89
+
win.opener = null;
90
+
var doc = win.document;
91
+
doc.open();
92
+
doc.write('<meta http-equiv="refresh" content="0; url=' + global$2.DOM.encode(url) + '">');
93
+
doc.close();
94
+
}
95
+
}
96
+
};
97
+
var OpenUrl = { open: open };
98
+
99
+
var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
100
+
101
+
var toggleTargetRules = function (rel, isUnsafe) {
102
+
var rules = ['noopener'];
103
+
var newRel = rel ? rel.split(/\s+/) : [];
104
+
var toString = function (rel) {
105
+
return global$4.trim(rel.sort().join(' '));
106
+
};
107
+
var addTargetRules = function (rel) {
108
+
rel = removeTargetRules(rel);
109
+
return rel.length ? rel.concat(rules) : rules;
110
+
};
111
+
var removeTargetRules = function (rel) {
112
+
return rel.filter(function (val) {
113
+
return global$4.inArray(rules, val) === -1;
114
+
});
115
+
};
116
+
newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);
117
+
return newRel.length ? toString(newRel) : null;
118
+
};
119
+
var trimCaretContainers = function (text) {
120
+
return text.replace(/\uFEFF/g, '');
121
+
};
122
+
var getAnchorElement = function (editor, selectedElm) {
123
+
selectedElm = selectedElm || editor.selection.getNode();
124
+
if (isImageFigure(selectedElm)) {
125
+
return editor.dom.select('a[href]', selectedElm)[0];
126
+
} else {
127
+
return editor.dom.getParent(selectedElm, 'a[href]');
128
+
}
129
+
};
130
+
var getAnchorText = function (selection, anchorElm) {
131
+
var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });
132
+
return trimCaretContainers(text);
133
+
};
134
+
var isLink = function (elm) {
135
+
return elm && elm.nodeName === 'A' && elm.href;
136
+
};
137
+
var hasLinks = function (elements) {
138
+
return global$4.grep(elements, isLink).length > 0;
139
+
};
140
+
var isOnlyTextSelected = function (html) {
141
+
if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
142
+
return false;
143
+
}
144
+
return true;
145
+
};
146
+
var isImageFigure = function (node) {
147
+
return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className);
148
+
};
149
+
var link = function (editor, attachState) {
150
+
return function (data) {
151
+
editor.undoManager.transact(function () {
152
+
var selectedElm = editor.selection.getNode();
153
+
var anchorElm = getAnchorElement(editor, selectedElm);
154
+
var linkAttrs = {
155
+
href: data.href,
156
+
target: data.target ? data.target : null,
157
+
rel: data.rel ? data.rel : null,
158
+
class: data.class ? data.class : null,
159
+
title: data.title ? data.title : null
160
+
};
161
+
if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {
162
+
linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');
163
+
}
164
+
if (data.href === attachState.href) {
165
+
attachState.attach();
166
+
attachState = {};
167
+
}
168
+
if (anchorElm) {
169
+
editor.focus();
170
+
if (data.hasOwnProperty('text')) {
171
+
if ('innerText' in anchorElm) {
172
+
anchorElm.innerText = data.text;
173
+
} else {
174
+
anchorElm.textContent = data.text;
175
+
}
176
+
}
177
+
editor.dom.setAttribs(anchorElm, linkAttrs);
178
+
editor.selection.select(anchorElm);
179
+
editor.undoManager.add();
180
+
} else {
181
+
if (isImageFigure(selectedElm)) {
182
+
linkImageFigure(editor, selectedElm, linkAttrs);
183
+
} else if (data.hasOwnProperty('text')) {
184
+
editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));
185
+
} else {
186
+
editor.execCommand('mceInsertLink', false, linkAttrs);
187
+
}
188
+
}
189
+
});
190
+
};
191
+
};
192
+
var unlink = function (editor) {
193
+
return function () {
194
+
editor.undoManager.transact(function () {
195
+
var node = editor.selection.getNode();
196
+
if (isImageFigure(node)) {
197
+
unlinkImageFigure(editor, node);
198
+
} else {
199
+
editor.execCommand('unlink');
200
+
}
201
+
});
202
+
};
203
+
};
204
+
var unlinkImageFigure = function (editor, fig) {
205
+
var a, img;
206
+
img = editor.dom.select('img', fig)[0];
207
+
if (img) {
208
+
a = editor.dom.getParents(img, 'a[href]', fig)[0];
209
+
if (a) {
210
+
a.parentNode.insertBefore(img, a);
211
+
editor.dom.remove(a);
212
+
}
213
+
}
214
+
};
215
+
var linkImageFigure = function (editor, fig, attrs) {
216
+
var a, img;
217
+
img = editor.dom.select('img', fig)[0];
218
+
if (img) {
219
+
a = editor.dom.create('a', attrs);
220
+
img.parentNode.insertBefore(a, img);
221
+
a.appendChild(img);
222
+
}
223
+
};
224
+
var Utils = {
225
+
link: link,
226
+
unlink: unlink,
227
+
isLink: isLink,
228
+
hasLinks: hasLinks,
229
+
isOnlyTextSelected: isOnlyTextSelected,
230
+
getAnchorElement: getAnchorElement,
231
+
getAnchorText: getAnchorText,
232
+
toggleTargetRules: toggleTargetRules
233
+
};
234
+
235
+
var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');
236
+
237
+
var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');
238
+
239
+
var attachState = {};
240
+
var createLinkList = function (editor, callback) {
241
+
var linkList = Settings.getLinkList(editor.settings);
242
+
if (typeof linkList === 'string') {
243
+
global$6.send({
244
+
url: linkList,
245
+
success: function (text) {
246
+
callback(editor, JSON.parse(text));
247
+
}
248
+
});
249
+
} else if (typeof linkList === 'function') {
250
+
linkList(function (list) {
251
+
callback(editor, list);
252
+
});
253
+
} else {
254
+
callback(editor, linkList);
255
+
}
256
+
};
257
+
var buildListItems = function (inputList, itemCallback, startItems) {
258
+
var appendItems = function (values, output) {
259
+
output = output || [];
260
+
global$4.each(values, function (item) {
261
+
var menuItem = { text: item.text || item.title };
262
+
if (item.menu) {
263
+
menuItem.menu = appendItems(item.menu);
264
+
} else {
265
+
menuItem.value = item.value;
266
+
if (itemCallback) {
267
+
itemCallback(menuItem);
268
+
}
269
+
}
270
+
output.push(menuItem);
271
+
});
272
+
return output;
273
+
};
274
+
return appendItems(inputList, startItems || []);
275
+
};
276
+
var delayedConfirm = function (editor, message, callback) {
277
+
var rng = editor.selection.getRng();
278
+
global$5.setEditorTimeout(editor, function () {
279
+
editor.windowManager.confirm(message, function (state) {
280
+
editor.selection.setRng(rng);
281
+
callback(state);
282
+
});
283
+
});
284
+
};
285
+
var showDialog = function (editor, linkList) {
286
+
var data = {};
287
+
var selection = editor.selection;
288
+
var dom = editor.dom;
289
+
var anchorElm, initialText;
290
+
var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;
291
+
var linkListChangeHandler = function (e) {
292
+
var textCtrl = win.find('#text');
293
+
if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {
294
+
textCtrl.value(e.control.text());
295
+
}
296
+
win.find('#href').value(e.control.value());
297
+
};
298
+
var buildAnchorListControl = function (url) {
299
+
var anchorList = [];
300
+
global$4.each(editor.dom.select('a:not([href])'), function (anchor) {
301
+
var id = anchor.name || anchor.id;
302
+
if (id) {
303
+
anchorList.push({
304
+
text: id,
305
+
value: '#' + id,
306
+
selected: url.indexOf('#' + id) !== -1
307
+
});
308
+
}
309
+
});
310
+
if (anchorList.length) {
311
+
anchorList.unshift({
312
+
text: 'None',
313
+
value: ''
314
+
});
315
+
return {
316
+
name: 'anchor',
317
+
type: 'listbox',
318
+
label: 'Anchors',
319
+
values: anchorList,
320
+
onselect: linkListChangeHandler
321
+
};
322
+
}
323
+
};
324
+
var updateText = function () {
325
+
if (!initialText && onlyText && !data.text) {
326
+
this.parent().parent().find('#text')[0].value(this.value());
327
+
}
328
+
};
329
+
var urlChange = function (e) {
330
+
var meta = e.meta || {};
331
+
if (linkListCtrl) {
332
+
linkListCtrl.value(editor.convertURL(this.value(), 'href'));
333
+
}
334
+
global$4.each(e.meta, function (value, key) {
335
+
var inp = win.find('#' + key);
336
+
if (key === 'text') {
337
+
if (initialText.length === 0) {
338
+
inp.value(value);
339
+
data.text = value;
340
+
}
341
+
} else {
342
+
inp.value(value);
343
+
}
344
+
});
345
+
if (meta.attach) {
346
+
attachState = {
347
+
href: this.value(),
348
+
attach: meta.attach
349
+
};
350
+
}
351
+
if (!meta.text) {
352
+
updateText.call(this);
353
+
}
354
+
};
355
+
var onBeforeCall = function (e) {
356
+
e.meta = win.toJSON();
357
+
};
358
+
onlyText = Utils.isOnlyTextSelected(selection.getContent());
359
+
anchorElm = Utils.getAnchorElement(editor);
360
+
data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);
361
+
data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';
362
+
if (anchorElm) {
363
+
data.target = dom.getAttrib(anchorElm, 'target');
364
+
} else if (Settings.hasDefaultLinkTarget(editor.settings)) {
365
+
data.target = Settings.getDefaultLinkTarget(editor.settings);
366
+
}
367
+
if (value = dom.getAttrib(anchorElm, 'rel')) {
368
+
data.rel = value;
369
+
}
370
+
if (value = dom.getAttrib(anchorElm, 'class')) {
371
+
data.class = value;
372
+
}
373
+
if (value = dom.getAttrib(anchorElm, 'title')) {
374
+
data.title = value;
375
+
}
376
+
if (onlyText) {
377
+
textListCtrl = {
378
+
name: 'text',
379
+
type: 'textbox',
380
+
size: 40,
381
+
label: 'Text to display',
382
+
onchange: function () {
383
+
data.text = this.value();
384
+
}
385
+
};
386
+
}
387
+
if (linkList) {
388
+
linkListCtrl = {
389
+
type: 'listbox',
390
+
label: 'Link list',
391
+
values: buildListItems(linkList, function (item) {
392
+
item.value = editor.convertURL(item.value || item.url, 'href');
393
+
}, [{
394
+
text: 'None',
395
+
value: ''
396
+
}]),
397
+
onselect: linkListChangeHandler,
398
+
value: editor.convertURL(data.href, 'href'),
399
+
onPostRender: function () {
400
+
linkListCtrl = this;
401
+
}
402
+
};
403
+
}
404
+
if (Settings.shouldShowTargetList(editor.settings)) {
405
+
if (Settings.getTargetList(editor.settings) === undefined) {
406
+
Settings.setTargetList(editor, [
407
+
{
408
+
text: 'None',
409
+
value: ''
410
+
},
411
+
{
412
+
text: 'New window',
413
+
value: '_blank'
414
+
}
415
+
]);
416
+
}
417
+
targetListCtrl = {
418
+
name: 'target',
419
+
type: 'listbox',
420
+
label: 'Target',
421
+
values: buildListItems(Settings.getTargetList(editor.settings))
422
+
};
423
+
}
424
+
if (Settings.hasRelList(editor.settings)) {
425
+
relListCtrl = {
426
+
name: 'rel',
427
+
type: 'listbox',
428
+
label: 'Rel',
429
+
values: buildListItems(Settings.getRelList(editor.settings), function (item) {
430
+
if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {
431
+
item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');
432
+
}
433
+
})
434
+
};
435
+
}
436
+
if (Settings.hasLinkClassList(editor.settings)) {
437
+
classListCtrl = {
438
+
name: 'class',
439
+
type: 'listbox',
440
+
label: 'Class',
441
+
values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) {
442
+
if (item.value) {
443
+
item.textStyle = function () {
444
+
return editor.formatter.getCssText({
445
+
inline: 'a',
446
+
classes: [item.value]
447
+
});
448
+
};
449
+
}
450
+
})
451
+
};
452
+
}
453
+
if (Settings.shouldShowLinkTitle(editor.settings)) {
454
+
linkTitleCtrl = {
455
+
name: 'title',
456
+
type: 'textbox',
457
+
label: 'Title',
458
+
value: data.title
459
+
};
460
+
}
461
+
win = editor.windowManager.open({
462
+
title: 'Insert link',
463
+
data: data,
464
+
body: [
465
+
{
466
+
name: 'href',
467
+
type: 'filepicker',
468
+
filetype: 'file',
469
+
size: 40,
470
+
autofocus: true,
471
+
label: 'Url',
472
+
onchange: urlChange,
473
+
onkeyup: updateText,
474
+
onpaste: updateText,
475
+
onbeforecall: onBeforeCall
476
+
},
477
+
textListCtrl,
478
+
linkTitleCtrl,
479
+
buildAnchorListControl(data.href),
480
+
linkListCtrl,
481
+
relListCtrl,
482
+
targetListCtrl,
483
+
classListCtrl
484
+
],
485
+
onSubmit: function (e) {
486
+
var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);
487
+
var insertLink = Utils.link(editor, attachState);
488
+
var removeLink = Utils.unlink(editor);
489
+
var resultData = global$4.extend({}, data, e.data);
490
+
var href = resultData.href;
491
+
if (!href) {
492
+
removeLink();
493
+
return;
494
+
}
495
+
if (!onlyText || resultData.text === initialText) {
496
+
delete resultData.text;
497
+
}
498
+
if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {
499
+
delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {
500
+
if (state) {
501
+
resultData.href = 'mailto:' + href;
502
+
}
503
+
insertLink(resultData);
504
+
});
505
+
return;
506
+
}
507
+
if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) {
508
+
delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {
509
+
if (state) {
510
+
resultData.href = 'http://' + href;
511
+
}
512
+
insertLink(resultData);
513
+
});
514
+
return;
515
+
}
516
+
insertLink(resultData);
517
+
}
518
+
});
519
+
};
520
+
var open$1 = function (editor) {
521
+
createLinkList(editor, showDialog);
522
+
};
523
+
var Dialog = { open: open$1 };
524
+
525
+
var getLink = function (editor, elm) {
526
+
return editor.dom.getParent(elm, 'a[href]');
527
+
};
528
+
var getSelectedLink = function (editor) {
529
+
return getLink(editor, editor.selection.getStart());
530
+
};
531
+
var getHref = function (elm) {
532
+
var href = elm.getAttribute('data-mce-href');
533
+
return href ? href : elm.getAttribute('href');
534
+
};
535
+
var isContextMenuVisible = function (editor) {
536
+
var contextmenu = editor.plugins.contextmenu;
537
+
return contextmenu ? contextmenu.isContextMenuVisible() : false;
538
+
};
539
+
var hasOnlyAltModifier = function (e) {
540
+
return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
541
+
};
542
+
var gotoLink = function (editor, a) {
543
+
if (a) {
544
+
var href = getHref(a);
545
+
if (/^#/.test(href)) {
546
+
var targetEl = editor.$(href);
547
+
if (targetEl.length) {
548
+
editor.selection.scrollIntoView(targetEl[0], true);
549
+
}
550
+
} else {
551
+
OpenUrl.open(a.href);
552
+
}
553
+
}
554
+
};
555
+
var openDialog = function (editor) {
556
+
return function () {
557
+
Dialog.open(editor);
558
+
};
559
+
};
560
+
var gotoSelectedLink = function (editor) {
561
+
return function () {
562
+
gotoLink(editor, getSelectedLink(editor));
563
+
};
564
+
};
565
+
var leftClickedOnAHref = function (editor) {
566
+
return function (elm) {
567
+
var sel, rng, node;
568
+
if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {
569
+
sel = editor.selection;
570
+
rng = sel.getRng();
571
+
node = rng.startContainer;
572
+
if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
573
+
return true;
574
+
}
575
+
}
576
+
return false;
577
+
};
578
+
};
579
+
var setupGotoLinks = function (editor) {
580
+
editor.on('click', function (e) {
581
+
var link = getLink(editor, e.target);
582
+
if (link && global$1.metaKeyPressed(e)) {
583
+
e.preventDefault();
584
+
gotoLink(editor, link);
585
+
}
586
+
});
587
+
editor.on('keydown', function (e) {
588
+
var link = getSelectedLink(editor);
589
+
if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
590
+
e.preventDefault();
591
+
gotoLink(editor, link);
592
+
}
593
+
});
594
+
};
595
+
var toggleActiveState = function (editor) {
596
+
return function () {
597
+
var self = this;
598
+
editor.on('nodechange', function (e) {
599
+
self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));
600
+
});
601
+
};
602
+
};
603
+
var toggleViewLinkState = function (editor) {
604
+
return function () {
605
+
var self = this;
606
+
var toggleVisibility = function (e) {
607
+
if (Utils.hasLinks(e.parents)) {
608
+
self.show();
609
+
} else {
610
+
self.hide();
611
+
}
612
+
};
613
+
if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {
614
+
self.hide();
615
+
}
616
+
editor.on('nodechange', toggleVisibility);
617
+
self.on('remove', function () {
618
+
editor.off('nodechange', toggleVisibility);
619
+
});
620
+
};
621
+
};
622
+
var Actions = {
623
+
openDialog: openDialog,
624
+
gotoSelectedLink: gotoSelectedLink,
625
+
leftClickedOnAHref: leftClickedOnAHref,
626
+
setupGotoLinks: setupGotoLinks,
627
+
toggleActiveState: toggleActiveState,
628
+
toggleViewLinkState: toggleViewLinkState
629
+
};
630
+
631
+
var register = function (editor) {
632
+
editor.addCommand('mceLink', Actions.openDialog(editor));
633
+
};
634
+
var Commands = { register: register };
635
+
636
+
var setup = function (editor) {
637
+
editor.addShortcut('Meta+K', '', Actions.openDialog(editor));
638
+
};
639
+
var Keyboard = { setup: setup };
640
+
641
+
var setupButtons = function (editor) {
642
+
editor.addButton('link', {
643
+
active: false,
644
+
icon: 'link',
645
+
tooltip: 'Insert/edit link',
646
+
onclick: Actions.openDialog(editor),
647
+
onpostrender: Actions.toggleActiveState(editor)
648
+
});
649
+
editor.addButton('unlink', {
650
+
active: false,
651
+
icon: 'unlink',
652
+
tooltip: 'Remove link',
653
+
onclick: Utils.unlink(editor),
654
+
onpostrender: Actions.toggleActiveState(editor)
655
+
});
656
+
if (editor.addContextToolbar) {
657
+
editor.addButton('openlink', {
658
+
icon: 'newtab',
659
+
tooltip: 'Open link',
660
+
onclick: Actions.gotoSelectedLink(editor)
661
+
});
662
+
}
663
+
};
664
+
var setupMenuItems = function (editor) {
665
+
editor.addMenuItem('openlink', {
666
+
text: 'Open link',
667
+
icon: 'newtab',
668
+
onclick: Actions.gotoSelectedLink(editor),
669
+
onPostRender: Actions.toggleViewLinkState(editor),
670
+
prependToContext: true
671
+
});
672
+
editor.addMenuItem('link', {
673
+
icon: 'link',
674
+
text: 'Link',
675
+
shortcut: 'Meta+K',
676
+
onclick: Actions.openDialog(editor),
677
+
stateSelector: 'a[href]',
678
+
context: 'insert',
679
+
prependToContext: true
680
+
});
681
+
editor.addMenuItem('unlink', {
682
+
icon: 'unlink',
683
+
text: 'Remove link',
684
+
onclick: Utils.unlink(editor),
685
+
stateSelector: 'a[href]'
686
+
});
687
+
};
688
+
var setupContextToolbars = function (editor) {
689
+
if (editor.addContextToolbar) {
690
+
editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink');
691
+
}
692
+
};
693
+
var Controls = {
694
+
setupButtons: setupButtons,
695
+
setupMenuItems: setupMenuItems,
696
+
setupContextToolbars: setupContextToolbars
697
+
};
698
+
699
+
global.add('link', function (editor) {
700
+
Controls.setupButtons(editor);
701
+
Controls.setupMenuItems(editor);
702
+
Controls.setupContextToolbars(editor);
703
+
Actions.setupGotoLinks(editor);
704
+
Commands.register(editor);
705
+
Keyboard.setup(editor);
706
+
});
707
+
function Plugin () {
708
+
}
709
+
710
+
return Plugin;
711
+
712
+
}(window));
713
+
})();
714
+