CKEDITOR.dialog.add('tweetabletextDialog', function(editor) { return { title: 'TweetableText Properties', minWidth: 400, minHeight: 200, contents: [ { id: 'tab-basic', label: 'Basic Settings', elements: [ { type: 'text', id: 'displaytext', label: 'Display Text', validate: CKEDITOR.dialog.validate.notEmpty('Display Text field can not be empty.'), setup: function(element) { this.setValue(element.getText()); }, commit: function(element) { element.setText(this.getValue()); } }, { type: 'text', id: 'tweetabletext', label: 'Tweetable Text', validate: CKEDITOR.dialog.validate.notEmpty('Tweetable Text field can not be empty.'), setup: function(element) { var splitURL = element.getAttribute('href').split("?"); var dataTweet = splitURL[1].split("="); var decodedDataTweet = decodeURI(dataTweet[1]); this.setValue(decodedDataTweet); }, commit: function(element) { var twitterBaseUrl = 'http://twitter.com/intent/tweet?'; var encodedValue = encodeURI(this.getValue()); twitterBaseUrl += 'text=' + encodedValue; element.setAttribute('href', twitterBaseUrl); // For some reason, without doing this the changes won't be reflected on frontend. element.setAttribute('data-cke-saved-href', twitterBaseUrl); } } ] } ], onShow: function() { var selection = editor.getSelection(); var element = selection.getStartElement(); if (element.getAttribute('class') !== 'tweetabletext') { element = editor.document.createElement('a'); this.insertMode = true; } else { this.insertMode = false; } this.element = element; if (!this.insertMode) { this.setupContent(this.element); } }, onOk: function() { var dialog = this; var retrieveElement = this.element; var getDisplayText = dialog.getValueOf('tab-basic', 'displaytext'); var getTweetableText = dialog.getValueOf('tab-basic', 'tweetabletext'); var getTweetableText = encodeURI(getTweetableText); var twitterBaseUrl = 'http://twitter.com/intent/tweet?'; var tweetabletext = editor.document.createElement('a'); tweetabletext.setAttribute('class', 'tweetabletext'); twitterBaseUrl += 'text=' + getTweetableText; tweetabletext.setAttribute('href', twitterBaseUrl); tweetabletext.setText(getDisplayText); this.commitContent(retrieveElement); if (this.insertMode) { editor.insertElement(tweetabletext); } } }; });