123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446 |
- /**
- * oEmbed Plugin plugin
- * Licensed under the MIT license
- * jQuery Embed Plugin: http://code.google.com/p/jquery-oembed/ (MIT License)
- * Plugin for: http://ckeditor.com/license (GPL/LGPL/MPL: http://ckeditor.com/license)
- */
- (function() {
- CKEDITOR.plugins.add('oembed', {
- icons: 'oembed',
- hidpi: true,
- requires: 'widget,dialog',
- lang: 'de,en,fr,nl,pl,pt-br,ru,tr', // %REMOVE_LINE_CORE%
- version: 1.17,
- init: function(editor) {
- // Load jquery?
- loadjQueryLibaries();
- CKEDITOR.tools.extend(CKEDITOR.editor.prototype, {
- oEmbed: function(url, maxWidth, maxHeight, responsiveResize) {
- if (url.length < 1 || url.indexOf('http') < 0) {
- alert(editor.lang.oembed.invalidUrl);
- return false;
- }
- function embed() {
- if (maxWidth == null || maxWidth == 'undefined') {
- maxWidth = null;
- }
- if (maxHeight == null || maxHeight == 'undefined') {
- maxHeight = null;
- }
- if (responsiveResize == null || responsiveResize == 'undefined') {
- responsiveResize = false;
- }
- embedCode(url, editor, false, maxWidth, maxHeight, responsiveResize);
- }
- if (typeof(jQuery.fn.oembed) === 'undefined') {
- CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath('oembed') + 'libs/jquery.oembed.min.js'), function() {
- embed();
- });
- } else {
- embed();
- }
- return true;
- }
- });
- editor.widgets.add('oembed', {
- draggable: false,
- mask: true,
- dialog: 'oembed',
- allowedContent: {
- div: {
- styles: 'text-align,float',
- attributes: '*',
- classes: editor.config.oembed_WrapperClass != null ? editor.config.oembed_WrapperClass : "embeddedContent"
- },
- 'div(embeddedContent,oembed-provider-*) iframe': {
- attributes: '*'
- },
- 'div(embeddedContent,oembed-provider-*) blockquote': {
- attributes: '*'
- },
- 'div(embeddedContent,oembed-provider-*) script': {
- attributes: '*'
- }
- },
- template:
- '<div class="' + (editor.config.oembed_WrapperClass != null ? editor.config.oembed_WrapperClass : "embeddedContent") + '">' +
- '</div>',
- upcast: function(element) {
- return element.name == 'div' && element.hasClass(editor.config.oembed_WrapperClass != null ? editor.config.oembed_WrapperClass : "embeddedContent");
- },
- init: function() {
- var data = {
- oembed: this.element.data('oembed') || '',
- resizeType: this.element.data('resizeType') || 'noresize',
- maxWidth: this.element.data('maxWidth') || 560,
- maxHeight: this.element.data('maxHeight') || 315,
- align: this.element.data('align') || 'none',
- oembed_provider: this.element.data('oembed_provider') || ''
- };
- this.setData(data);
- this.element.addClass('oembed-provider-' + data.oembed_provider);
- this.on('dialog', function(evt) {
- evt.data.widget = this;
- }, this);
- }
- });
- editor.ui.addButton('oembed', {
- label: editor.lang.oembed.button,
- command: 'oembed',
- toolbar: 'insert,6',
- icon: this.path + "icons/" + (CKEDITOR.env.hidpi ? "hidpi/" : "") + "oembed.png"
- });
- var resizeTypeChanged = function() {
- var dialog = this.getDialog(),
- resizetype = this.getValue(),
- maxSizeBox = dialog.getContentElement('general', 'maxSizeBox').getElement(),
- sizeBox = dialog.getContentElement('general', 'sizeBox').getElement();
- if (resizetype == 'noresize') {
- maxSizeBox.hide();
- sizeBox.hide();
- } else if (resizetype == "custom") {
- maxSizeBox.hide();
- sizeBox.show();
- } else {
- maxSizeBox.show();
- sizeBox.hide();
- }
- };
- String.prototype.beginsWith = function(string) {
- return (this.indexOf(string) === 0);
- };
- function loadjQueryLibaries() {
- if (typeof(jQuery) === 'undefined') {
- CKEDITOR.scriptLoader.load('//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', function() {
- jQuery.noConflict();
- if (typeof(jQuery.fn.oembed) === 'undefined') {
- CKEDITOR.scriptLoader.load(
- CKEDITOR.getUrl(CKEDITOR.plugins.getPath('oembed') + 'libs/jquery.oembed.min.js')
- );
- }
- });
- } else if (typeof(jQuery.fn.oembed) === 'undefined') {
- CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath('oembed') + 'libs/jquery.oembed.min.js'));
- }
- }
- function embedCode(url, instance, maxWidth, maxHeight, responsiveResize, resizeType, align, widget) {
- jQuery('body').oembed(url, {
- onEmbed: function(e) {
- var elementAdded = false,
- provider = jQuery.fn.oembed.getOEmbedProvider(url);
- widget.element.data('resizeType', resizeType);
- if (resizeType == "responsive" || resizeType == "custom") {
- widget.element.data('maxWidth', maxWidth);
- widget.element.data('maxHeight', maxHeight);
- }
- widget.element.data('align', align);
- // TODO handle align
- if (align == 'center') {
- if (!widget.inline)
- widget.element.setStyle('text-align', 'center');
- widget.element.removeStyle('float');
- } else {
- if (!widget.inline)
- widget.element.removeStyle('text-align');
- if (align == 'none')
- widget.element.removeStyle('float');
- else
- widget.element.setStyle('float', align);
- }
- if (typeof e.code === 'string') {
- if (widget.element.$.firstChild) {
- widget.element.$.removeChild(widget.element.$.firstChild);
- }
- widget.element.appendHtml(e.code);
- widget.element.data('oembed', url);
- widget.element.data('oembed_provider', provider.name);
- widget.element.addClass('oembed-provider-' + provider.name);
- elementAdded = true;
- } else if (typeof e.code[0].outerHTML === 'string') {
- if (widget.element.$.firstChild) {
- widget.element.$.removeChild(widget.element.$.firstChild);
- }
- widget.element.appendHtml(e.code[0].outerHTML);
- widget.element.data('oembed', url);
- widget.element.data('oembed_provider', provider.name);
- widget.element.addClass('oembed-provider-' + provider.name);
- elementAdded = true;
- } else {
- alert(editor.lang.oembed.noEmbedCode);
- }
- },
- onError: function(externalUrl) {
- if (externalUrl.indexOf("vimeo.com") > 0) {
- alert(editor.lang.oembed.noVimeo);
- } else {
- alert(editor.lang.oembed.Error);
- }
- },
- maxHeight: maxHeight,
- maxWidth: maxWidth,
- useResponsiveResize: responsiveResize,
- embedMethod: 'editor'
- });
- }
- CKEDITOR.dialog.add('oembed', function(editor) {
- return {
- title: editor.lang.oembed.title,
- minWidth: CKEDITOR.env.ie && CKEDITOR.env.quirks ? 568 : 550,
- minHeight: 155,
- onShow: function() {
- var data = {
- oembed: this.widget.element.data('oembed') || '',
- resizeType: this.widget.element.data('resizeType') || 'noresize',
- maxWidth: this.widget.element.data('maxWidth'),
- maxHeight: this.widget.element.data('maxHeight'),
- align: this.widget.element.data('align') || 'none'
- };
- this.widget.setData(data);
- this.getContentElement('general', 'resizeType').setValue(data.resizeType);
- this.getContentElement('general', 'align').setValue(data.align);
- var resizetype = this.getContentElement('general', 'resizeType').getValue(),
- maxSizeBox = this.getContentElement('general', 'maxSizeBox').getElement(),
- sizeBox = this.getContentElement('general', 'sizeBox').getElement();
- if (resizetype == 'noresize') {
- maxSizeBox.hide();
- sizeBox.hide();
- } else if (resizetype == "custom") {
- maxSizeBox.hide();
- sizeBox.show();
- } else {
- maxSizeBox.show();
- sizeBox.hide();
- }
- },
- onOk: function() {
- },
- contents: [
- {
- label: editor.lang.common.generalTab,
- id: 'general',
- elements: [
- {
- type: 'html',
- id: 'oembedHeader',
- html: '<div style="white-space:normal;width:500px;padding-bottom:10px">' + editor.lang.oembed.pasteUrl + '</div>'
- }, {
- type: 'text',
- id: 'embedCode',
- focus: function() {
- this.getElement().focus();
- },
- label: editor.lang.oembed.url,
- title: editor.lang.oembed.pasteUrl,
- setup: function(widget) {
- if (widget.data.oembed) {
- this.setValue(widget.data.oembed);
- }
- },
- commit: function(widget) {
- var dialog = CKEDITOR.dialog.getCurrent(),
- inputCode = dialog.getValueOf('general', 'embedCode').replace(/\s/g, ""),
- resizeType = dialog.getContentElement('general', 'resizeType').
- getValue(),
- align = dialog.getContentElement('general', 'align').
- getValue(),
- maxWidth = null,
- maxHeight = null,
- responsiveResize = false,
- editorInstance = dialog.getParentEditor();
- if (inputCode.length < 1 || inputCode.indexOf('http') < 0) {
- alert(editor.lang.oembed.invalidUrl);
- return false;
- }
- if (resizeType == "noresize") {
- responsiveResize = false;
- maxWidth = null;
- maxHeight = null;
- } else if (resizeType == "responsive") {
- maxWidth = dialog.getContentElement('general', 'maxWidth').
- getInputElement().
- getValue();
- maxHeight = dialog.getContentElement('general', 'maxHeight').
- getInputElement().
- getValue();
- responsiveResize = true;
- } else if (resizeType == "custom") {
- maxWidth = dialog.getContentElement('general', 'width').
- getInputElement().
- getValue();
- maxHeight = dialog.getContentElement('general', 'height').
- getInputElement().
- getValue();
- responsiveResize = false;
- }
- embedCode(inputCode, editorInstance, maxWidth, maxHeight, responsiveResize, resizeType, align, widget);
- widget.setData('oembed', inputCode);
- widget.setData('resizeType', resizeType);
- widget.setData('align', align);
- widget.setData('maxWidth', maxWidth);
- widget.setData('maxHeight', maxHeight);
- }
- }, {
- type: 'hbox',
- widths: ['50%', '50%'],
- children: [
- {
- id: 'resizeType',
- type: 'select',
- label: editor.lang.oembed.resizeType,
- 'default': 'noresize',
- setup: function(widget) {
- if (widget.data.resizeType) {
- this.setValue(widget.data.resizeType);
- }
- },
- items: [
- [editor.lang.oembed.noresize, 'noresize'],
- [editor.lang.oembed.responsive, 'responsive'],
- [editor.lang.oembed.custom, 'custom']
- ],
- onChange: resizeTypeChanged
- }, {
- type: 'hbox',
- id: 'maxSizeBox',
- widths: ['120px', '120px'],
- style: 'float:left;position:absolute;left:58%;width:200px',
- children: [
- {
- type: 'text',
- width: '100px',
- id: 'maxWidth',
- 'default': editor.config.oembed_maxWidth != null ? editor.config.oembed_maxWidth : '560',
- label: editor.lang.oembed.maxWidth,
- title: editor.lang.oembed.maxWidthTitle,
- setup: function(widget) {
- if (widget.data.maxWidth) {
- this.setValue(widget.data.maxWidth);
- }
- }
- }, {
- type: 'text',
- id: 'maxHeight',
- width: '120px',
- 'default': editor.config.oembed_maxHeight != null ? editor.config.oembed_maxHeight : '315',
- label: editor.lang.oembed.maxHeight,
- title: editor.lang.oembed.maxHeightTitle,
- setup: function(widget) {
- if (widget.data.maxHeight) {
- this.setValue(widget.data.maxHeight);
- }
- }
- }
- ]
- }, {
- type: 'hbox',
- id: 'sizeBox',
- widths: ['120px', '120px'],
- style: 'float:left;position:absolute;left:58%;width:200px',
- children: [
- {
- type: 'text',
- id: 'width',
- width: '100px',
- 'default': editor.config.oembed_maxWidth != null ? editor.config.oembed_maxWidth : '560',
- label: editor.lang.oembed.width,
- title: editor.lang.oembed.widthTitle,
- setup: function(widget) {
- if (widget.data.maxWidth) {
- this.setValue(widget.data.maxWidth);
- }
- }
- }, {
- type: 'text',
- id: 'height',
- width: '120px',
- 'default': editor.config.oembed_maxHeight != null ? editor.config.oembed_maxHeight : '315',
- label: editor.lang.oembed.height,
- title: editor.lang.oembed.heightTitle,
- setup: function(widget) {
- if (widget.data.maxHeight) {
- this.setValue(widget.data.maxHeight);
- }
- }
- }
- ]
- }
- ]
- }, {
- type: 'hbox',
- id: 'alignment',
- children: [
- {
- id: 'align',
- type: 'radio',
- items: [
- [editor.lang.oembed.none, 'none'],
- [editor.lang.common.alignLeft, 'left'],
- [editor.lang.common.alignCenter, 'center'],
- [editor.lang.common.alignRight, 'right']
- ],
- label: editor.lang.common.align,
- setup: function(widget) {
- this.setValue(widget.data.align);
- }
- }
- ]
- }
- ]
- }
- ]
- };
- });
- }
- });
- }
- )();
|