Skip to content

Commit

Permalink
Merge pull request #2539 from jonasdekeukelaere/ckeditor-link-functio…
Browse files Browse the repository at this point in the history
…nality

Ckeditor link functionality
  • Loading branch information
carakas committed May 23, 2018
2 parents 63b63ae + 94f854c commit 5863432
Show file tree
Hide file tree
Showing 3 changed files with 160 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,90 @@ CKEDITOR.dialog.add(
id: 'tab',
label: '',
elements: [
{
type: 'select',
id: 'type',
label: editor.lang.medialibrary.type,
items: [
[
editor.lang.medialibrary.url,
'url'
],
[
editor.lang.medialibrary.email,
'email'
]
],
default: 'url',
onChange: function (element) {
var $urlFields = this.getDialog().getContentElement('tab', 'url').getElement().getParent().getParent().getParent().getParent().getParent().getParent();
var $localPageField = this.getDialog().getContentElement('tab', 'localPage').getElement().getParent().getParent();
var $openInNewWindowField = this.getDialog().getContentElement('tab', 'openInNewWindow').getElement().getParent().getParent();
var $emailAddressField = this.getDialog().getContentElement('tab', 'email').getElement().getParent().getParent();
var $subjectField = this.getDialog().getContentElement('tab', 'subject').getElement().getParent().getParent();
var $contentField = this.getDialog().getContentElement('tab', 'content').getElement().getParent().getParent();

var value = this.getValue();

// email url
if (value === 'email') {
$urlFields.hide();
$localPageField.hide();
$openInNewWindowField.hide();
$emailAddressField.show();
$subjectField.show();
$contentField.show();

return;
}

// normal url
$urlFields.show();
$localPageField.show();
$openInNewWindowField.show();
$emailAddressField.hide();
$subjectField.hide();
$contentField.hide();
},
setup: function (element) {
var type = 'url';
if (element.getAttribute('href').startsWith('mailto:')) {
type = 'email';
}

this.getDialog().setValueOf('tab', 'type', type);
},
onLoad: function (element) {
var $urlFields = this.getDialog().getContentElement('tab', 'url').getElement().getParent().getParent().getParent().getParent().getParent().getParent();
var $localPageField = this.getDialog().getContentElement('tab', 'localPage').getElement().getParent().getParent();
var $openInNewWindowField = this.getDialog().getContentElement('tab', 'openInNewWindow').getElement().getParent().getParent();
var $emailAddressField = this.getDialog().getContentElement('tab', 'email').getElement().getParent().getParent();
var $subjectField = this.getDialog().getContentElement('tab', 'subject').getElement().getParent().getParent();
var $contentField = this.getDialog().getContentElement('tab', 'content').getElement().getParent().getParent();

$urlFields.show();
$localPageField.show();
$openInNewWindowField.show();
$emailAddressField.hide();
$subjectField.hide();
$contentField.hide();
},
onHide: function (element) {
var $urlFields = this.getDialog().getContentElement('tab', 'url').getElement().getParent().getParent().getParent().getParent().getParent().getParent();
var $localPageField = this.getDialog().getContentElement('tab', 'localPage').getElement().getParent().getParent();
var $openInNewWindowField = this.getDialog().getContentElement('tab', 'openInNewWindow').getElement().getParent().getParent();
var $emailAddressField = this.getDialog().getContentElement('tab', 'email').getElement().getParent().getParent();
var $subjectField = this.getDialog().getContentElement('tab', 'subject').getElement().getParent().getParent();
var $contentField = this.getDialog().getContentElement('tab', 'content').getElement().getParent().getParent();

$urlFields.show();
$localPageField.show();
$openInNewWindowField.show();
$emailAddressField.hide();
$subjectField.hide();
$contentField.hide();
}
},
{
type: 'text',
id: 'displayText',
Expand All @@ -35,11 +119,24 @@ CKEDITOR.dialog.add(
id: 'url',
label: 'URL',
setup: function (element) {
if (element.getAttribute('href').startsWith('mailto:')) {
return;
}

this.setValue(element.getAttribute('href'));
this.getDialog().setValueOf('tab', 'openInNewWindow', element.getAttribute('target') === '_blank');
},
commit: function (element) {
if (this.getDialog().getValueOf('tab', 'type') === 'email') {
return;
}

element.setAttribute('href', this.getValue());
element.setAttribute('data-cke-saved-href', this.getValue());
element.removeAttribute('target');
if (this.getDialog().getValueOf('tab', 'openInNewWindow')) {
element.setAttribute('target', '_blank');
}
}
},
{
Expand Down Expand Up @@ -74,6 +171,57 @@ CKEDITOR.dialog.add(
this.getDialog().getContentElement('tab', 'url').setValue(event.data.value);
}
},
{
type: 'checkbox',
id: 'openInNewWindow',
label: editor.lang.medialibrary.openInNewWindow
},
{
type: 'text',
id: 'email',
label: editor.lang.medialibrary.email,
setup: function (element) {
if (this.getDialog().getValueOf('tab', 'type') === 'url') {
return;
}

var url = new URL(element.getAttribute('href'));

this.setValue(url.pathname);
if (url.searchParams.has('subject')) {
this.getDialog().setValueOf('tab', 'subject', url.searchParams.get('subject'));
}
if (url.searchParams.has('body')) {
this.getDialog().setValueOf('tab', 'content', url.searchParams.get('body'));
}
},
commit: function (element) {
if (this.getDialog().getValueOf('tab', 'type') === 'url') {
return;
}

var url = new URL('mailto:' + this.getValue());
if (this.getDialog().getValueOf('tab', 'subject') !== '') {
url.searchParams.append('subject', this.getDialog().getValueOf('tab', 'subject'));
}
if (this.getDialog().getValueOf('tab', 'content') !== '') {
url.searchParams.append('body', this.getDialog().getValueOf('tab', 'content'));
}

element.setAttribute('href', url.toString());
element.setAttribute('data-cke-saved-href', url.toString());
}
},
{
type: 'text',
id: 'subject',
label: editor.lang.medialibrary.subject
},
{
type: 'textarea',
id: 'content',
label: editor.lang.medialibrary.content
}
]
}
],
Expand Down
7 changes: 6 additions & 1 deletion src/Backend/Core/Js/ckeditor/plugins/medialibrary/lang/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,10 @@ CKEDITOR.plugins.setLang('medialibrary', 'en', {
insertImage: 'Insert image',
insertLink: 'Insert link',
url: 'URL',
urlNotValid: 'URL is not valid.'
urlNotValid: 'URL is not valid.',
type: 'URL type',
email: 'E-mail address',
subject: 'Subject message',
content: 'Content message',
openInNewWindow: 'Open in new window'
});
7 changes: 6 additions & 1 deletion src/Backend/Core/Js/ckeditor/plugins/medialibrary/lang/nl.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,10 @@ CKEDITOR.plugins.setLang('medialibrary', 'nl', {
insertImage: 'Voeg afbeelding in',
insertLink: 'Voeg link in',
url: 'URL',
urlNotValid: 'URL is niet geldig.'
urlNotValid: 'URL is niet geldig.',
type: 'URL type',
email: 'E-mailadres',
subject: 'Onderwerp bericht',
content: 'Inhoud bericht',
openInNewWindow: 'Open in nieuw venster'
});

0 comments on commit 5863432

Please sign in to comment.