silverstripe-dms/javascript/DocumentHtmlEditorFieldToolbar.js

115 lines
3.1 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({
insertLink: function () {
var href, target = null;
var checkedValue = this.find(':input[name=LinkType]:checked').val();
if (checkedValue === 'document') {
href = '[dms_document_link,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 : this.find('.selected-document').text() //title is the text of the selected document
};
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(/^\[dms_document_link(\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 {
$('.document-add-existing').selectdocument(); //clear the selected document
$('form.htmleditorfield-linkform .ss-add.ss-upload').hide();
return this._super();
}
}
});
});
}(jQuery));