silverstripe-dms/javascript/DocumentHtmlEditorFieldTool...

119 lines
3.6 KiB
JavaScript
Executable File

(function ($) {
"use strict";
$.entwine('ss', function ($) {
$('form.htmleditorfield-linkform input[name=LinkType]').entwine({
onchange: function (e) {
this._super(e);
var form = $('form.htmleditorfield-linkform');
var show = false;
if (this.attr('value') === 'document') {
if (this.is(':checked')) {
show = true;
}
}
// Hide or show the additional document link addition tool
if (show) {
form.find('.ss-add').show();
} else {
form.find('.ss-add').hide();
}
},
onadd: function (e) {
this.change();
}
});
$('form.htmleditorfield-linkform').entwine({
getShortcodeKey: function () {
return this.find(':input[name=DMSShortcodeHandlerKey]').val();
},
insertLink: function () {
var href, target = null;
var checkedValue = this.find(':input[name=LinkType]:checked').val();
if (checkedValue === 'document') {
href = '[' + this.getShortcodeKey() + ',id=' + this.find('.selected-document').data('document-id') + ']';
// Determine target
if (this.find(':input[name=TargetBlank]').is(':checked')) {
target = '_blank';
}
var attributes = {
href: href,
target: target,
class: 'documentLink',
// Title is the text of the selected document
title: this.find('.selected-document').text()
};
this.modifySelection(function (ed) {
ed.insertLink(attributes);
});
this.updateFromEditor();
return false;
} else {
this._super();
}
},
getCurrentLink: function () {
var selectedEl = this.getSelection(), href = "", target = "", title = "", action = "insert", style_class = "";
var linkDataSource = null;
if (selectedEl.length) {
if (selectedEl.is('a')) {
linkDataSource = selectedEl;
} else {
linkDataSource = selectedEl = selectedEl.parents('a:first');
}
}
if (linkDataSource && linkDataSource.length) {
this.modifySelection(function (ed) {
ed.selectNode(linkDataSource[0]);
});
}
// Is anchor not a link
if (!linkDataSource.attr('href')) {
linkDataSource = null;
}
if (linkDataSource) {
href = linkDataSource.attr('href');
target = linkDataSource.attr('target');
title = linkDataSource.attr('title');
style_class = linkDataSource.attr('class');
href = this.getEditor().cleanLink(href, linkDataSource);
action = "update";
}
// Match a document or call the regular link handling
if (href.match(new RegExp('^\\[' + this.getShortcodeKey() + '(\s*|%20|,)?id=([0-9]+)\\]?$', 'i'))) {
var returnArray = {
LinkType: 'document',
DocumentID: RegExp.$2,
Description: title
};
// Show the selected document
$('.document-add-existing').selectdocument(returnArray.DocumentID,returnArray.Description);
// Select the correct radio button
$('form.htmleditorfield-linkform input[name=LinkType][value=document]').click();
return returnArray;
} else {
// Clear the selected document
$('.document-add-existing').selectdocument();
$('form.htmleditorfield-linkform .ss-add.ss-upload').hide();
return this._super();
}
}
});
});
}(jQuery));