Skip to content
Code-Schnipsel Gruppen Projekte
Editor.js 33,7 KiB
Newer Older
Henning Leutz's avatar
Henning Leutz committed
/**
 * ckeditor4 for QUIQQER
 *
 * @module package/quiqqer/ckeditor4/bin/Editor
Henning Leutz's avatar
Henning Leutz committed
 * @author www.pcsg.de (Henning Leutz)
 *
Henning Leutz's avatar
Henning Leutz committed
 * @require require
Henning Leutz's avatar
Henning Leutz committed
 * @require qui/QUI
Henning Leutz's avatar
Henning Leutz committed
 * @require controls/editors/Editor
 * @require Locale
 * @require Ajax
 * @require qui/utils/Math
Henning Leutz's avatar
Henning Leutz committed
 * @require qui/utils/Elements
Henning Leutz's avatar
Henning Leutz committed
 * @require css!package/quiqqer/ckeditor4/bin/Editor.css
Henning Leutz's avatar
Henning Leutz committed
 */
Henning Leutz's avatar
Henning Leutz committed
define('package/quiqqer/ckeditor4/bin/Editor', [
Henning Leutz's avatar
Henning Leutz committed

    'require',
Henning Leutz's avatar
Henning Leutz committed
    'controls/editors/Editor',
    'Locale',
    'qui/utils/Elements',
Florian Bogner's avatar
Florian Bogner committed
    'package/quiqqer/ckeditor4/bin/Settings',
    'css!package/quiqqer/ckeditor4/bin/Editor.css'
Henning Leutz's avatar
Henning Leutz committed

Florian Bogner's avatar
Florian Bogner committed
], function (require, QUI, Editor, Locale, Ajax, QUIMath, QUIElements, Settings) {
Henning Leutz's avatar
Henning Leutz committed
    "use strict";

Henning Leutz's avatar
Henning Leutz committed
    return new Class({

Henning Leutz's avatar
Henning Leutz committed
        Extends: Editor,
        Type   : 'package/quiqqer/ckeditor4/bin/Editor',
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
        Binds: [
Henning Leutz's avatar
Henning Leutz committed
            '$onLoad',
            '$onDestroy',
            '$onSetContent',
            '$onGetContent',
            '$onDrop',
            '$onResize',
            '$onAddCSS',
            '$onInstanceReadyListener'
Henning Leutz's avatar
Henning Leutz committed
        ],

        /**
         * Control Constructor
         * @param Manager
         * @param options
         */
Henning Leutz's avatar
Henning Leutz committed
        initialize: function (Manager, options) {
            this.parent(Manager, options);
Henning Leutz's avatar
Henning Leutz committed

            this.$cssFiles = {};

Henning Leutz's avatar
Henning Leutz committed
            this.addEvents({
Henning Leutz's avatar
Henning Leutz committed
                onLoad      : this.$onLoad,
                onResize    : this.$onResize,
                onDestroy   : this.$onDestroy,
                onSetContent: this.$onSetContent,
                onGetContent: this.$onGetContent,
                onDrop      : this.$onDrop,
                onAddCSS    : this.$onAddCSS
Henning Leutz's avatar
Henning Leutz committed
            });
        },

Henning Leutz's avatar
Henning Leutz committed
        /**
         * Editor onLoad Event
         * if the editor is to be drawn and inserted
         *
         * @param {Object} data - Editor data
         */
Henning Leutz's avatar
Henning Leutz committed
        $onLoad: function (data) {
Henning Leutz's avatar
Henning Leutz committed
            var self = this;

Henning Leutz's avatar
Henning Leutz committed
            // load CKEDITOR
Henning Leutz's avatar
Henning Leutz committed
            require([URL_OPT_DIR + 'ckeditor/ckeditor/ckeditor.js'], function () {
Henning Leutz's avatar
Henning Leutz committed
                window.CKEDITOR.on('instanceReady', function (ev) {
                    if (Editor && "$onInstanceReadyListener" in Editor) {
                        Editor.$onInstanceReadyListener(ev);
                    }
                });

                // http://docs.ckeditor.com/#!/guide/dev_howtos_dialog_windows
Henning Leutz's avatar
Henning Leutz committed
                window.CKEDITOR.on('dialogDefinition', function (ev) {
Henning Leutz's avatar
Henning Leutz committed

                    Editor.$html5AudioDialog(ev);
                    Editor.$html5VideoDialog(ev);
Henning Leutz's avatar
Henning Leutz committed
        /**
         * Load the CKEditor Instance into an Textarea or DOMNode Element
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} data - Editor settings data
Henning Leutz's avatar
Henning Leutz committed
         */
Henning Leutz's avatar
Henning Leutz committed
        $loadInstance: function (data) {
Henning Leutz's avatar
Henning Leutz committed
            if (typeof window.CKEDITOR === 'undefined') {
Henning Leutz's avatar
Henning Leutz committed
                return;
            }

Henning Leutz's avatar
Henning Leutz committed
            var self      = this,
                Container = this.getContainer(),
                Textarea  = false,
                size      = Container.getSize();
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            if (!Container.getElement('textarea')) {
Henning Leutz's avatar
Henning Leutz committed
                Textarea = new Element('textarea', {
Florian Bogner's avatar
Florian Bogner committed
                    id    : self.getId(),
Henning Leutz's avatar
Henning Leutz committed
                    styles: {
                        height: size.y,
Henning Leutz's avatar
Henning Leutz committed
                        width : size.x
Henning Leutz's avatar
Henning Leutz committed
                    }
Henning Leutz's avatar
Henning Leutz committed
                }).inject(Container);
Henning Leutz's avatar
Henning Leutz committed
            if (!Textarea) {
                Textarea = Container.getElement('textarea');
Henning Leutz's avatar
Henning Leutz committed
            }

Henning Leutz's avatar
Henning Leutz committed
            var instance = Textarea.get('id');
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            if (window.CKEDITOR.instances[instance]) {
                window.CKEDITOR.instances[instance].destroy(true);
Henning Leutz's avatar
Henning Leutz committed
            }

Henning Leutz's avatar
Henning Leutz committed
            self.setAttribute('instancename', instance);
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            // parse the buttons for the ckeditor
            var b, g, i, len, blen, glen, group, items,
                buttonEntry, lineEntry, groupEntry;

            var buttons = data.toolbar,
                lines   = buttons.lines || [],
                toolbar = [];
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            for (i = 0, len = lines.length; i < len; i++) {
Henning Leutz's avatar
Henning Leutz committed
                items     = [];
Henning Leutz's avatar
Henning Leutz committed
                lineEntry = lines[i];
Henning Leutz's avatar
Henning Leutz committed

                // groups
Henning Leutz's avatar
Henning Leutz committed
                for (g = 0, glen = lineEntry.length; g < glen; g++) {
Henning Leutz's avatar
Henning Leutz committed
                    group      = [];
Henning Leutz's avatar
Henning Leutz committed
                    groupEntry = lineEntry[g];
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
                    // buttons
Henning Leutz's avatar
Henning Leutz committed
                    for (b = 0, blen = groupEntry.length; b < blen; b++) {
                        buttonEntry = groupEntry[b];
Henning Leutz's avatar
Henning Leutz committed

                        if (buttonEntry.type === 'separator') {
Henning Leutz's avatar
Henning Leutz committed
                            group.push('-');
Henning Leutz's avatar
Henning Leutz committed
                            continue;
Henning Leutz's avatar
Henning Leutz committed
                        }
Henning Leutz's avatar
Henning Leutz committed
                        group.push(buttonEntry.button);
Henning Leutz's avatar
Henning Leutz committed
                    }

Henning Leutz's avatar
Henning Leutz committed
                    toolbar.push(group);
Henning Leutz's avatar
Henning Leutz committed
                }

Henning Leutz's avatar
Henning Leutz committed
                toolbar.push('/');
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed
            var height = size.y,
                width  = size.x;
Henning Leutz's avatar
Henning Leutz committed
            if (self.getAttribute('width')) {
                width = self.getAttribute('width');
Henning Leutz's avatar
Henning Leutz committed
            if (self.getAttribute('height')) {
                height = self.getAttribute('height');
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed
            var zIndex = QUIElements.getComputedZIndex(Container);
Henning Leutz's avatar
Henning Leutz committed
            // parse styles to fckedit styles
            var entry, styles = [];
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            if (!("styles" in data)) {
Henning Leutz's avatar
Henning Leutz committed
                data.styles = [];
            }

Henning Leutz's avatar
Henning Leutz committed
            for (i = 0, len = data.styles.length; i < len; i++) {
                entry = data.styles[i];
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
                styles.push({
Henning Leutz's avatar
Henning Leutz committed
                    name      : entry.text,
                    element   : entry.element,
                    attributes: entry.attributes
Henning Leutz's avatar
Henning Leutz committed
                });
            if (!("cssFiles" in data)) {
                data.cssFiles = [];
            }

            data.cssFiles.push(
Henning Leutz's avatar
Henning Leutz committed
                URL_OPT_DIR + 'quiqqer/ckeditor4/bin/defaultWysiwyg.css'
Henning Leutz's avatar
Henning Leutz committed

            data.cssFiles.push(
                URL_OPT_DIR + 'quiqqer/quiqqer/bin/css/fonts/font-awesome.min.css'
            );

            Settings.getConfig().then(function (config) {
                plugins = self.$parseToolbarToPlugins(toolbar).concat(plugins);
                plugins = plugins.unique();

                var pluginPath   = config.pluginPath;
Florian Bogner's avatar
Florian Bogner committed
                var extraPlugins = plugins.join(",");

                var i, len, pluginName;

                for (i = 0, len = plugins.length; i < len; i++) {
                    pluginName = plugins[i];

                    if (!window.CKEDITOR.plugins.get(pluginName)) {
                        window.CKEDITOR.plugins.addExternal(
                            pluginName,
                            pluginPath + "/bin/" + pluginName + "/",
                            ""
                        );
Florian Bogner's avatar
Florian Bogner committed
                window.CKEDITOR.replace(instance, {
                    skinName           : 'moono-lisa',
                    customConfig       : '',
                    language           : Locale.getCurrent(),
                    baseHref           : URL_DIR,
                    basePath           : URL_DIR,
                    height             : height,
                    width              : width,
                    toolbar            : toolbar,
                    allowedContent     : true,
                    extraAllowedContent: 'iframe(*)[*]{*}; img(*)[*]{*}; script(*)[*]{*}; ins(*)[*]{*}',
                    protectedSource    : [/<ins[\s|\S]+?<\/ins>/g],
                    stylesSet          : styles,
                    contentsCss        : data.cssFiles || [],
                    bodyClass          : data.bodyClass,
Florian Bogner's avatar
Florian Bogner committed
                    // templates_files : [URL_OPT_DIR +'base/bin/pcsgEditorPlugins/templates.php'],
                    baseFloatZIndex: zIndex,
                    extraPlugins   : extraPlugins,
                    disableNativeSpellChecker: config.disableNativeSpellChecker,
                    autoGrow_onStartup       : false,
                    resize_enabled           : false
Florian Bogner's avatar
Florian Bogner committed
                });

                // because of font awesome
                window.CKEDITOR.dtd.$removeEmpty.span = false;
                window.CKEDITOR.dtd.$removeEmpty.i    = false;
Henning Leutz's avatar
Henning Leutz committed
            });
Henning Leutz's avatar
Henning Leutz committed
        },

        /**
         * Editor onDestroy Event
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} Editor - controls/editors/Editor
Henning Leutz's avatar
Henning Leutz committed
         */
Henning Leutz's avatar
Henning Leutz committed
        $onDestroy: function (Editor) {
Henning Leutz's avatar
Henning Leutz committed
            var Instance = Editor.getInstance();

            if (!Instance || !(name in Instance)) {
                return;
            }

Henning Leutz's avatar
Henning Leutz committed
            if (window.CKEDITOR.instances[Instance.name]) {
                try {
                    window.CKEDITOR.instances[Instance.name].destroy(true);
                } catch (e) {
Henning Leutz's avatar
Henning Leutz committed
                window.CKEDITOR.instances[Instance.name] = null;
                delete window.CKEDITOR.instances[Instance.name];
Henning Leutz's avatar
Henning Leutz committed
                window.CKEDITOR.removeListener(
                    'instanceReady',
                    this.$onInstanceReadyListener
                );
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * event : instance ready
         * @param instance
         */
Henning Leutz's avatar
Henning Leutz committed
        $onInstanceReadyListener: function (instance) {
            if (typeof instance.editor === 'undefined' ||
                typeof instance.editor.name === 'undefined' ||
                instance.editor.name !== this.getAttribute('instancename')) {
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            // resize the editor
Henning Leutz's avatar
Henning Leutz committed
            var Container     = this.getContainer(),
Henning Leutz's avatar
Henning Leutz committed
                containerSize = Container.getSize();

            // fckeditor resize, setHeight is sooooooooooo mysterious
Henning Leutz's avatar
Henning Leutz committed
            instance.editor.resize(containerSize.x, containerSize.y);
Henning Leutz's avatar
Henning Leutz committed
            this.setInstance(instance.editor);
            this.fireEvent('loaded', [this, instance.editor]);

            instance.editor.focus();
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
        /**
         * event : on resize
         */
Henning Leutz's avatar
Henning Leutz committed
        $onResize: function () {
            var Container     = this.getContainer(),
                Instance      = this.getInstance(),
Henning Leutz's avatar
Henning Leutz committed
                containerSize = Container.getSize();

Henning Leutz's avatar
Henning Leutz committed
            Instance.resize(containerSize.x, containerSize.y);
Henning Leutz's avatar
Henning Leutz committed
        /**
         * Editor onSetContent Event
         *
         * @param {String} content
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} Editor - controls/editors/Editor
Henning Leutz's avatar
Henning Leutz committed
         */
Henning Leutz's avatar
Henning Leutz committed
        $onSetContent: function (content, Editor) {
            if (Editor.getInstance()) {
                Editor.getInstance().setData(content);
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * Editor onGetContent Event
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} Editor - controls/editors/Editor
Henning Leutz's avatar
Henning Leutz committed
         */
Henning Leutz's avatar
Henning Leutz committed
        $onGetContent: function (Editor) {
            if (Editor.getInstance()) {
                Editor.setAttribute('content', Editor.getInstance().getData());
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
        /**
         * Set the focus to the editor
         */
Henning Leutz's avatar
Henning Leutz committed
        focus: function () {
            if (this.getInstance()) {
Henning Leutz's avatar
Henning Leutz committed
                this.getInstance().focus();
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * Switch to source mode
         */
Henning Leutz's avatar
Henning Leutz committed
        switchToSource: function () {
            if (this.getInstance()) {
                this.getInstance().setMode('source');
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * Switch to wysiwyg editor
         */
Henning Leutz's avatar
Henning Leutz committed
        switchToWYSIWYG: function () {
            if (this.getInstance()) {
                this.getInstance().setMode('wysiwyg');
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * Hide the toolbar
         */
Henning Leutz's avatar
Henning Leutz committed
        hideToolbar: function () {
            var Toolbar = this.getElm().getElement('.cke_top');
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            if (Toolbar) {
                Toolbar.setStyle('display', 'none');
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * show the toolbar
         */
Henning Leutz's avatar
Henning Leutz committed
        showToolbar: function () {
            var Toolbar = this.getElm().getElement('.cke_top');
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            if (Toolbar) {
                Toolbar.setStyle('display', null);
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed

        /**
         * Set the height of the instance
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {Number} height
Henning Leutz's avatar
Henning Leutz committed
         */
Henning Leutz's avatar
Henning Leutz committed
        setHeight: function (height) {
            if (this.getInstance()) {
                this.getInstance().resize(false, height);
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed
            this.setAttribute('height', height);

        /**
         * Set the height of the instance
         *
         * @param {Number} width
         */
Henning Leutz's avatar
Henning Leutz committed
        setWidth: function (width) {
            if (this.getInstance()) {
                this.getInstance().resize(width, false);
Henning Leutz's avatar
Henning Leutz committed
            this.setAttribute('width', width);
Henning Leutz's avatar
Henning Leutz committed

        /**
         * event : on add css
         *
         * @param {String} file - path to the css file
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} Editor - controls/editor/Editor
Henning Leutz's avatar
Henning Leutz committed
        $onAddCSS: function (file, Editor) {
Henning Leutz's avatar
Henning Leutz committed
            this.$cssFiles[file] = true;
Henning Leutz's avatar
Henning Leutz committed
            if (Instance) {
                var Doc  = Editor.getDocument(),
                    Link = Doc.createElement('link');

                Link.href = file;
                Link.rel  = "stylesheet";
                Link.type = "text/css";

Henning Leutz's avatar
Henning Leutz committed
                Doc.head.appendChild(Link);
Henning Leutz's avatar
Henning Leutz committed
        /**
Henning Leutz's avatar
Henning Leutz committed
         * event : on Drop
Henning Leutz's avatar
Henning Leutz committed
         * @param {Object} params
         */
Henning Leutz's avatar
Henning Leutz committed
        $onDrop: function (params) {
Henning Leutz's avatar
Henning Leutz committed
            var Instance = this.getInstance();

Henning Leutz's avatar
Henning Leutz committed
            for (var i = 0, len = params.length; i < len; i++) {
                Instance.insertHtml("<img src=" + params[i].url + " />");
Henning Leutz's avatar
Henning Leutz committed
            }
        /**
         * Generate the extra plugins option in dependence of the toolbar
         * @param toolbar
         *
         * @return Array
         */
        $parseToolbarToPlugins: function (toolbar) {
            var extra      = [],
                buttonList = [];

            if (typeOf(toolbar) === 'array') {
                buttonList = toolbar.flatten();
            }

            for (var i = 0, len = buttonList.length; i < len; i++) {
                switch (buttonList[i]) {
                    case 'Templates':
                        extra.push('templates');
                        break;

                    case 'Find':
                    case 'Replace':
                        extra.push('find');
                        break;

                    case 'SelectAll':
                        extra.push('selectall');
                        break;

                    case 'Form':
                    case 'Checkbox':
                    case 'Radio':
                    case 'TextField':
                    case 'Textarea':
                    case 'Select':
                    case 'Button':
                    case 'ImageButton':
                    case 'HiddenField':
                        extra.push('forms');
                        break;

                    case 'CreateDiv':
                        extra.push('div');
                        break;

                    case 'JustifyLeft':
                    case 'JustifyCenter':
                    case 'JustifyRight':
                    case 'JustifyBlock':
                        extra.push('justify');
                        break;

                    case 'BidiLtr':
                    case 'BidiRtl':
                        extra.push('bidi');
                        break;

                    case 'Language':
                        extra.push('language');
                        break;

                    case 'Link':
                    case 'Unlink':
                    case 'Anchor':
                        extra.push('link');
                        break;

                    case 'Flash':
                        extra.push('flash');
                        break;

                    case 'Smiley':
                        extra.push('smiley');
                        break;

                    case 'PageBreak':
                        extra.push('pagebreak');
                        break;

                    case 'Iframe':
                        extra.push('iframe');
                        break;

                    case 'Font':
                    case 'FontSize':
                        extra.push('font');
                        break;

                    case 'BGColor':
                    case 'TextColor':
                        extra.push('colorbutton');
                        break;
                    case 'Code':
                        extra.push('codetag');
                        break;
                    case 'Image':
                        break;
                    case 'Zoom':
                        extra.push('zoom');
                        break;
                    case 'Youtube':
                        extra.push('youtube');
                        break;
                    case 'Videodetector':
                        extra.push('videodetector');
                        break;
                    case 'Tweetabletext':
                        extra.push('tweetabletext');
                        break;
                    case 'Createtoken':
                        extra.push('token');
                        break;
                    case 'TransformTextSwitcher':
                    case 'TransformTextToLowercase':
                    case 'TransformTextToUppercase':
                    case 'TransformTextCapitalize':
                        extra.push('texttransform');
                        break;
                    case 't2s_button':
                        extra.push('text2speech');
                        break;
                    case 'Symbol':
                        extra.push('symbol');
                        break;
                    case 'pre':
                        extra.push('pre');
                        break;
                    case 'pbckeditor':
                        extra.push('pbckeditor');
                        break;
                    case 'page2images':
                        extra.push('page2images');
                        break;
                    case 'Markdown':
                        extra.push('markdown');
                        break;
                    case 'Loremipsum':
                        extra.push('loremipsum');
                        break;
                    case 'inserthtml4x':
                        extra.push('inserthtml4x');
                        break;
                    case 'Html5Video':
                        extra.push('html5video');
                        break;
                    case 'Html5Audio':
                        extra.push('html5audio');
                        break;
                    case 'EqnEditor':
                        extra.push('eqneditor');
                        break;
                    case 'cssanim':
                        extra.push('cssanim');
                        break;
                    case 'WebSpeechEnabled':
                    case 'WebSpeechSettings':
                        extra.push('ckwebspeech');
                        break;
                    case 'base64image':
                        extra.push('base64image');
                        break;
                    case 'AutoCorrect':
                        extra.push('autocorrect');
                        break;
Henning Leutz's avatar
Henning Leutz committed
        /**
         * edit the image dialog
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {DOMEvent} ev - CKEvent
         * @return {DOMEvent} ev (CKEvent)
Henning Leutz's avatar
Henning Leutz committed
        $imageDialog: function (ev) {
Henning Leutz's avatar
Henning Leutz committed
            // Take the dialog name and its definition from the event data.
Henning Leutz's avatar
Henning Leutz committed
            var self             = this,
                dialogName       = ev.data.name,
                dialogDefinition = ev.data.definition;
Henning Leutz's avatar
Henning Leutz committed

            /**
             * Image dialog
             */
Henning Leutz's avatar
Henning Leutz committed
                return ev;
            }

Henning Leutz's avatar
Henning Leutz committed
            var oldOnShow = dialogDefinition.onShow;

Henning Leutz's avatar
Henning Leutz committed
            // Get a reference to the "Link Info" tab.
Henning Leutz's avatar
Henning Leutz committed
            dialogDefinition.onShow = function () {
Henning Leutz's avatar
Henning Leutz committed
                var Button;

Henning Leutz's avatar
Henning Leutz committed
                oldOnShow.bind(this)();
Henning Leutz's avatar
Henning Leutz committed
                // image button
Henning Leutz's avatar
Henning Leutz committed
                var UrlGroup = this.getContentElement('info', 'txtUrl')
Henning Leutz's avatar
Henning Leutz committed
                var UrlInput = UrlGroup.getElement('input[type="text"]');
Henning Leutz's avatar
Henning Leutz committed
                var HeightInput = this.getContentElement('info', 'txtHeight')
                                      .getElement().$
                                      .getElement('input[type="text"]');
Henning Leutz's avatar
Henning Leutz committed
                var WidthInput = this.getContentElement('info', 'txtWidth')
                                     .getElement().$
                                     .getElement('input[type="text"]');
                UrlGroup.getElement('label').setStyles({
                    'float': 'left',
                    'width': '100%'
                });

Henning Leutz's avatar
Henning Leutz committed
                if (!UrlGroup.getElement('.qui-button')) {
Henning Leutz's avatar
Henning Leutz committed
                    Button = new Element('button', {
Henning Leutz's avatar
Henning Leutz committed
                        'class': 'qui-button',
Henning Leutz's avatar
Henning Leutz committed
                        html   : '<span class="fa fa-picture-o"></span>',
Henning Leutz's avatar
Henning Leutz committed
                        events : {
                            click: function () {
Henning Leutz's avatar
Henning Leutz committed
                                self.openMedia({
Henning Leutz's avatar
Henning Leutz committed
                                    events: {
                                        onSubmit: function (Win, data) {
Henning Leutz's avatar
Henning Leutz committed
                                            UrlInput.value = data.url;
Henning Leutz's avatar
Henning Leutz committed
                                            Ajax.get('ajax_media_details', function (fileData) {
                                                if (fileData.image_height > 500 ||
                                                    fileData.image_width > 500) {
                                                    var result = QUIMath.resizeVar(
                                                        fileData.image_height,
                                                        fileData.image_width,
                                                        500
                                                    );
                                                    // es darf keine image height gesetzt
                                                    // da das Bild sonst im mobile view sich verzieht
                                                    // HeightInput.value = result.var1;
                                                    WidthInput.value = result.var2;
Henning Leutz's avatar
Henning Leutz committed
                                                } else {
                                                    // HeightInput.value = fileData.image_height;
                                                    WidthInput.value = fileData.image_width;
                                                // if (!fileData.image_height) {
                                                //     HeightInput.value = '';
                                                // }

                                                if (!fileData.image_width) {
                                                    WidthInput.value = '';
                                                }
Henning Leutz's avatar
Henning Leutz committed
                                                project: data.project,
                                                fileid : data.id
Henning Leutz's avatar
Henning Leutz committed
                    }).inject(UrlGroup);
Henning Leutz's avatar
Henning Leutz committed

                    Button.getPrevious().setStyles({
Henning Leutz's avatar
Henning Leutz committed
                        'float': 'left'
Henning Leutz's avatar
Henning Leutz committed
                    });
                }


                // link button
Henning Leutz's avatar
Henning Leutz committed
                var LinkGroup = this.getContentElement('Link', 'txtUrl')
Henning Leutz's avatar
Henning Leutz committed
                    .$;
Henning Leutz's avatar
Henning Leutz committed
                if (LinkGroup.getElement('.qui-button')) {
Henning Leutz's avatar
Henning Leutz committed
                var LinkInput = LinkGroup.getElement('input[type="text"]');
Henning Leutz's avatar
Henning Leutz committed
                Button = new Element('button', {
Henning Leutz's avatar
Henning Leutz committed
                    'class': 'qui-button',
Henning Leutz's avatar
Henning Leutz committed
                    html   : '<span class="fa fa-home"></span>',
Henning Leutz's avatar
Henning Leutz committed
                    events : {
                        click: function () {
Henning Leutz's avatar
Henning Leutz committed
                            self.openProject({
Henning Leutz's avatar
Henning Leutz committed
                                events: {
                                    onSubmit: function (Win, data) {
                                        LinkInput.value = data.urls[0];
Henning Leutz's avatar
Henning Leutz committed
                }).inject(LinkGroup);
Henning Leutz's avatar
Henning Leutz committed
                var Prev = Button.getPrevious();

                Prev.setStyles({
Henning Leutz's avatar
Henning Leutz committed
                    'float': 'left',
                    width  : Prev.getSize().x - 100
Henning Leutz's avatar
Henning Leutz committed
                });
Henning Leutz's avatar
Henning Leutz committed
            };
Henning Leutz's avatar
Henning Leutz committed

            return ev;
Henning Leutz's avatar
Henning Leutz committed

        /**
         * edit the link dialog
         *
Henning Leutz's avatar
Henning Leutz committed
         * @param {DOMEvent} ev - CKEvent
         * @return {DOMEvent} ev - CKEvent
Henning Leutz's avatar
Henning Leutz committed
        $linkDialog: function (ev) {
Henning Leutz's avatar
Henning Leutz committed
            // Take the dialog name and its definition from the event data.
Henning Leutz's avatar
Henning Leutz committed
            var dialogName = ev.data.name;
             * Link dialog
Henning Leutz's avatar
Henning Leutz committed
            if (dialogName != 'link') {
Henning Leutz's avatar
Henning Leutz committed
                return ev;
            }

            // remove protokoll dropdown
Henning Leutz's avatar
Henning Leutz committed
            //dialogDefinition.getContents( 'info' ).remove( 'protocol');

            // remove protokoll at insertion
Henning Leutz's avatar
Henning Leutz committed
            var Protokoll;

Henning Leutz's avatar
Henning Leutz committed
            var dialogDefinition = ev.data.definition,
Henning Leutz's avatar
Henning Leutz committed
                Url              = dialogDefinition.getContents('info').get('url'),
                orgCommit        = Url.commit;
Henning Leutz's avatar
Henning Leutz committed
            Url.commit = function (data) {
                orgCommit.call(this, data);
Henning Leutz's avatar
Henning Leutz committed
                Protokoll = dialogDefinition.dialog
                                            .getContentElement('info', 'protocol')
                                            .getElement()
                                            .$
                                            .getElement('select');
                data.url = {
Henning Leutz's avatar
Henning Leutz committed
                    protocol: Protokoll.value,
                    url     : this.getValue()
Henning Leutz's avatar
Henning Leutz committed
            var self      = this,
                oldOnShow = dialogDefinition.onShow;
            self.$turnLinkRelInputToSelect(dialogDefinition);
Henning Leutz's avatar
Henning Leutz committed
            // Get a reference to the "Link Info" tab.
Henning Leutz's avatar
Henning Leutz committed
            dialogDefinition.onShow = function () {
                oldOnShow.bind(this)();
Henning Leutz's avatar
Henning Leutz committed
                var UrlGroup = this.getContentElement('info', 'url')
Henning Leutz's avatar
Henning Leutz committed
                    .$;
Henning Leutz's avatar
Henning Leutz committed
                if (UrlGroup.getElement('.qui-button')) {
Henning Leutz's avatar
Henning Leutz committed
                var UrlInput = UrlGroup.getElement('input[type="text"]');
Henning Leutz's avatar
Henning Leutz committed
                Protokoll = this.getContentElement('info', 'protocol')
Henning Leutz's avatar
Henning Leutz committed

                UrlInput.setStyles({
Henning Leutz's avatar
Henning Leutz committed
                    'float': 'left',
                    width  : UrlInput.getSize().x - 100
Henning Leutz's avatar
Henning Leutz committed
                var Links = new Element('button', {
Henning Leutz's avatar
Henning Leutz committed
                    'class': 'qui-button',
Henning Leutz's avatar
Henning Leutz committed
                    html   : '<span class="fa fa-home"></span>',
Henning Leutz's avatar
Henning Leutz committed
                    events : {
                        click: function () {
Henning Leutz's avatar
Henning Leutz committed
                            self.openProject({
Henning Leutz's avatar
Henning Leutz committed
                                events: {
                                    onSubmit: function (Win, data) {
                                        UrlInput.value  = data.urls[0];
Henning Leutz's avatar
Henning Leutz committed
                                        Protokoll.value = '';
Henning Leutz's avatar
Henning Leutz committed
                }).inject(UrlInput, 'after');
Henning Leutz's avatar
Henning Leutz committed

                // image button
                new Element('button', {
Henning Leutz's avatar
Henning Leutz committed
                    'class': 'qui-button',
Henning Leutz's avatar
Henning Leutz committed
                    html   : '<span class="fa fa-picture-o"></span>',
Henning Leutz's avatar
Henning Leutz committed
                    events : {
                        click: function () {
Henning Leutz's avatar
Henning Leutz committed
                            self.openMedia({
Henning Leutz's avatar
Henning Leutz committed
                                events: {
                                    onSubmit: function (Win, data) {
                                        UrlInput.value  = data.url;
Henning Leutz's avatar
Henning Leutz committed
                                        Protokoll.value = '';
                                    }
                                }
                            });
                        }
                    }
Henning Leutz's avatar
Henning Leutz committed
                }).inject(Links, 'after');
Henning Leutz's avatar
Henning Leutz committed
            };
            return ev;
        },

        /**
         * Extends the Html5Audio Dialog
         *
         * @param {DOMEvent} ev - CKEvent
         * @return {DOMEvent} ev - CKEvent
         */
        $html5AudioDialog: function (ev) {

            var dialogname       = ev.data.name,
                dialogDefinition = ev.data.definition,
                Button           = null;

            if (dialogname !== "html5audio") {
                return ev;
            }

            var self = this;

            var oldOnShow = dialogDefinition.onShow || function () {

            dialogDefinition.onShow = function () {
                oldOnShow.bind(this)();

                var UrlGroup = this.getContentElement("info", "url").getElement().$;

                if (UrlGroup.getElement('.qui-button')) {
                    return;
                }

                var UrlInput = UrlGroup.getElement('input[type="text"]');


                Button = new Element('button', {
                    'class': 'qui-button',
                    html   : '<span class="fa fa-picture-o"></span>',
                    events : {
                        click: function () {
                            self.openMedia({
                                events: {
                                    onSubmit: function (Win, data) {
                                        UrlInput.value = data.url;
                                    }
                                }
                            });
                        }
                    },
                    style  : {
                        float: "left"
                    }
                }).inject(UrlGroup);


                var Label = UrlGroup.getElement("label");
                Label.setStyles({
                    width  : "100%",
                    display: "block"
                });

                Button.getPrevious().setStyles({
                    'width': '85%',
                    float  : "left"
                });
            };

            return ev;
        },


        $html5VideoDialog: function (ev) {
            var dialogname       = ev.data.name,
                dialogDefinition = ev.data.definition,
                Button           = null;


            if (dialogname !== "html5video") {
                return ev;
            }

            var self = this;

            var oldOnShow = dialogDefinition.onShow || function () {

            dialogDefinition.onShow = function () {
                oldOnShow.bind(this)();

                var UrlGroup = this.getContentElement("info", "url").getElement().$;

                if (UrlGroup.getElement('.qui-button')) {
                    return;
                }

                var UrlInput = UrlGroup.getElement('input[type="text"]');


                Button = new Element('button', {
                    'class': 'qui-button',
                    html   : '<span class="fa fa-picture-o"></span>',