/** * 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'], afterInit: function(editor) { /*var dataProcessor = editor.dataProcessor, dataFilter = dataProcessor && dataProcessor.dataFilter; if (editor.config.oembed_ShowIframePreview) { if (dataFilter.elementsRules.iframe) { delete dataFilter.elementsRules.iframe; } return; } if (dataFilter && !dataFilter.elementsRules.iframe) { dataFilter.addRules({ elements: { iframe: function(element) { return editor.createFakeParserElement(element, 'cke_iframe', 'iframe', true); } } }); }*/ }, init: function(editor) { if (editor.config.oembed_ShowIframePreview == null || editor.config.oembed_ShowIframePreview == 'undefined') { editor.config.oembed_ShowIframePreview = false; } if (!editor.plugins.iframe && !editor.config.oembed_ShowIframePreview) { CKEDITOR.addCss('img.cke_iframe' + '{' + 'background-image: url(' + CKEDITOR.getUrl(CKEDITOR.plugins.getPath('oembed') + 'images/placeholder.png') + ');' + 'background-position: center center;' + 'background-repeat: no-repeat;' + 'border: 1px solid #a9a9a9;' + 'width: 80px;' + 'height: 80px;' + '}' ); } // 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; } if (typeof(jQuery.fn.oembed) === 'undefined') { CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath('oembed') + 'libs/jquery.oembed.min.js'), function() { embed(); }); } else { embed(); } 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); } return true; } }); editor.widgets.add('oembed', { mask: true, dialog: 'oembed', button: editor.lang.oembed.button, allowedContent: 'div(!' + (editor.config.oembed_WrapperClass != null ? editor.config.oembed_WrapperClass : "embeddedContent") + ');div iframe[*]', template: '
', upcast: function(element) { return element.name == 'div' && element.hasClass(editor.config.oembed_WrapperClass != null ? editor.config.oembed_WrapperClass : "embeddedContent"); }, }); 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('http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', function() { 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, closeDialog, maxWidth, maxHeight, responsiveResize, widget) { jQuery('body').oembed(url, { onEmbed: function(e) { var codeElement, codeIframe, elementAdded = false; if (typeof e.code === 'string') { codeElement = CKEDITOR.dom.element.createFromHtml(e.code); if (widget.element.$.firstChild) { widget.element.$.removeChild(widget.element.$.firstChild); } /*if (codeElement.$.tagName == "IFRAME" && editor.config.oembed_ShowIframePreview === false) { codeIframe = editor.createFakeElement(codeElement, 'cke_iframe', 'iframe', true); widget.element.appendHtml(codeIframe.$.outerHTML); } else { widget.element.appendHtml(e.code); }*/ widget.element.appendHtml(e.code); elementAdded = true; } else if (typeof e.code[0].outerHTML === 'string') { codeElement = CKEDITOR.dom.element.createFromHtml(e.code[0].outerHTML); if (widget.element.$.firstChild) { widget.element.$.removeChild(widget.element.$.firstChild); } /*if (codeElement.$.tagName == "IFRAME" && editor.config.oembed_ShowIframePreview === false) { codeIframe = editor.createFakeElement(codeElement, 'cke_iframe', 'iframe', true); widget.element.appendHtml(codeIframe.$.outerHTML); } else { widget.element.appendHtml(e.code[0].outerHTML); }*/ widget.element.appendHtml(e.code[0].outerHTML); elementAdded = true; } else { alert(editor.lang.oembed.noEmbedCode); } if (elementAdded) { if (closeDialog) { CKEDITOR.dialog.getCurrent().hide(); } } }, 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 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: '