Skip to content
Code-Schnipsel Gruppen Projekte
Area.js 27,9 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * Area edit control for the site object
     *
    
    Henning Leutz's avatar
    Henning Leutz committed
     * @module package/quiqqer/bricks/bin/Site/Area
    
     * @author www.pcsg.de (Henning Leutz)
    
     *
     * @require qui/QUI
     * @require qui/controls/Control
     * @require qui/controls/buttons/Button
     * @require qui/controls/windows/Popup
     * @require qui/controls/windows/Confirm
     * @require qui/controls/elements/List
     * @require Locale
     * @require Ajax
     * @require package/quiqqer/bricks/bin/Sortables
     * @require css!package/quiqqer/bricks/bin/Site/Area.css
    
    Henning Leutz's avatar
    Henning Leutz committed
    define('package/quiqqer/bricks/bin/Site/Area', [
    
    
        'qui/QUI',
        'qui/controls/Control',
        'qui/controls/buttons/Button',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/windows/Popup',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/windows/Alert',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/windows/Confirm',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'qui/controls/elements/List',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'package/quiqqer/bricks/bin/Sortables',
    
    Henning Leutz's avatar
    Henning Leutz committed
        'css!package/quiqqer/bricks/bin/Site/Area.css'
    
    Henning Leutz's avatar
    Henning Leutz committed
    ], function (QUI, QUIControl, QUIButton, QUIPopup, QUIAlert, QUIConfirm, QUIList, QUILocale, QUIAjax, Sortables) {
    
    Henning Leutz's avatar
    Henning Leutz committed
        var lg = 'quiqqer/bricks';
    
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            Extends: QUIControl,
            Type   : 'package/quiqqer/bricks/bin/Site/Area',
    
    Henning Leutz's avatar
    Henning Leutz committed
            Binds: [
    
    Henning Leutz's avatar
    Henning Leutz committed
                'openBrickDialog',
    
    Henning Leutz's avatar
    Henning Leutz committed
                'openBrickSettingDialog',
    
                'openSettingsDialog',
    
    Henning Leutz's avatar
    Henning Leutz committed
                'createNewBrick',
    
    Henning Leutz's avatar
    Henning Leutz committed
            options: {
                name       : '',
                description: '',
                title      : {},
                Site       : false,
                deactivate : false
    
    Henning Leutz's avatar
    Henning Leutz committed
            initialize: function (options) {
                this.parent(options);
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$availableBricks = [];
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$brickIds        = [];
    
                this.$onLoadBrickData = [];
                this.$brickCustomData = {};
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$AddButton      = false;
                this.$SettingsButton = false;
                this.$SortableButton = false;
                this.$MoreButton     = false;
    
    
                this.$Title       = false;
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$List        = false;
                this.$FXExtraBtns = false;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    onInject: this.$onInject
    
    Henning Leutz's avatar
    Henning Leutz committed
             * @return {HTMLElement}
    
    Henning Leutz's avatar
    Henning Leutz committed
            create: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self  = this,
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title = this.getAttribute('title');
    
    
                this.$Elm = new Element('div', {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'class'    : 'quiqqer-bricks-site-category-area',
                    html       : '<div class="quiqqer-bricks-site-category-area-title">' +
    
                    QUILocale.get(title.group, title.var) +
                    '   <div class="quiqqer-bricks-site-category-area-buttons"></div>' +
                    '</div><ul class="quiqqer-bricks-site-category-area-list"></ul>',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'data-name': this.getAttribute('name')
    
    Henning Leutz's avatar
    Henning Leutz committed
                // Elements
    
                var Buttons = this.$Elm.getElement(
    
    Henning Leutz's avatar
    Henning Leutz committed
                    '.quiqqer-bricks-site-category-area-buttons'
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'class': 'quiqqer-bricks-site-category-area-extraButtons'
    
    Henning Leutz's avatar
    Henning Leutz committed
                });
    
    
                this.$Title = this.$Elm.getElement(
                    '.quiqqer-bricks-site-category-area-title'
                );
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$FXExtraBtns = moofx(this.$ExtraBtns);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                this.$List = this.$Elm.getElement(
                    '.quiqqer-bricks-site-category-area-list'
                );
    
                // buttons
    
                this.$AddButton = new QUIButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text     : QUILocale.get(lg, 'site.area.button.add'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    textimage: 'fa fa-plus',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    disable  : true,
                    events   : {
                        onClick: this.openBrickDialog
    
    Henning Leutz's avatar
    Henning Leutz committed
                }).inject(Buttons);
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$ExtraBtns.inject(Buttons);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                this.$MoreButton = new QUIButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title : QUILocale.get(lg, 'site.area.button.area.more.openIt'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-caret-left',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function (Btn) {
    
                            if (Btn.getAttribute('icon') === 'fa fa-caret-left') {
    
    Henning Leutz's avatar
    Henning Leutz committed
                                self.openButtons();
                                return;
                            }
    
                            self.closeButtons();
                        }
                    },
    
    Henning Leutz's avatar
    Henning Leutz committed
                    styles: {
                        marginLeft: 5
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }
    
                }).inject(Buttons);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                // extra buttons
    
                this.$SettingsButton = new QUIButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title : QUILocale.get(lg, 'site.area.button.area.settings'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-gears',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: this.openSettingsDialog
    
    Henning Leutz's avatar
    Henning Leutz committed
                    styles: {
                        marginLeft: 10
    
                }).inject(this.$ExtraBtns);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                this.$SortableButton = new QUIButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title : QUILocale.get(lg, 'site.area.button.area.sort'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-sort',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function (Btn) {
                            if (Btn.isActive()) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                                Btn.setNormal();
                                self.unsortable();
                                return;
                            }
    
                            Btn.setActive();
                            self.sortable();
                        }
                    },
    
    Henning Leutz's avatar
    Henning Leutz committed
                    styles: {
                        marginLeft: 5
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }
    
                }).inject(this.$ExtraBtns);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
            /**
             * Refresh the area display
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            refresh: function () {
    
                var self      = this,
                    size      = this.$List.getComputedSize(),
                    titleSize = this.$Title.getComputedSize();
    
                moofx(this.$Elm).animate({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    height: size.height + titleSize.height
    
    Henning Leutz's avatar
    Henning Leutz committed
                    duration: 250,
                    equation: 'cubic-bezier(.42,.4,.46,1.29)',
                    callback: function () {
    
                        self.$List.setStyle('position', null);
    
                        moofx(self.$List).animate({
    
    Henning Leutz's avatar
    Henning Leutz committed
                            opacity: 1
    
    Henning Leutz's avatar
    Henning Leutz committed
                            duration: 250,
                            equation: 'ease-out'
    
    Henning Leutz's avatar
    Henning Leutz committed
            $onInject: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    Site    = this.getAttribute('Site'),
    
                var Loader = new Element('div', {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'class': 'quiqqer-bricks-site-category-area-loader',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    html   : '<span class="fa fa-spinner fa-spin"></span>',
    
                    styles : {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        margin: 5
    
                    }
                }).inject(this.$Elm);
    
                this.$List.setStyles({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    position: 'absolute',
                    opacity : 0
    
    Henning Leutz's avatar
    Henning Leutz committed
                QUIAjax.get('package_quiqqer_bricks_ajax_project_getBricks', function (bricks) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.$availableBricks = bricks;
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.$loaded          = true;
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.$brickIds.each(function (brickId) {
    
                        self.addBrickById(brickId);
    
                    var promises = [];
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    self.$onLoadBrickData.each(function (brickData) {
    
                        promises.push(self.addBrick(brickData));
    
    Henning Leutz's avatar
    Henning Leutz committed
                    });
    
    
                    if (promises.length) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        Promise.resolve(promises).then(function () {
    
                            Loader.destroy();
                        });
    
                        return;
                    }
    
                    Loader.destroy();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'package': 'quiqqer/bricks',
                    project  : Project.encode(),
                    area     : this.getAttribute('name')
    
             * Activate the area
    
    Henning Leutz's avatar
    Henning Leutz committed
            activate: function () {
                this.setAttribute('deactivate', false);
                this.getElm().removeClass('quiqqer-bricks-site-category-area-deactivate');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                this.$AddButton.enable();
            },
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
            /**
             * Deactivate the area
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            deactivate: function () {
    
                var self = this,
                    data = this.getData();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                if (data.length && !("deactivate" in data[0])) {
    
                    new QUIConfirm({
    
    Henning Leutz's avatar
    Henning Leutz committed
                        title      : QUILocale.get(lg, 'site.area.window.deactivate.title'),
                        text       : QUILocale.get(lg, 'site.area.window.deactivate.text'),
                        information: QUILocale.get(lg, 'site.area.window.deactivate.information'),
                        events     : {
                            onSubmit: function () {
    
                                self.clear();
    
    Henning Leutz's avatar
    Henning Leutz committed
                                self.setAttribute('deactivate', true);
    
                                self.deactivate();
                            }
                        }
                    }).open();
    
                    return;
    
    Henning Leutz's avatar
    Henning Leutz committed
                }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.setAttribute('deactivate', true);
    
    
                this.$AddButton.disable();
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.getElm().addClass('quiqqer-bricks-site-category-area-deactivate');
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
            /**
             * Add a brick by its brick data
    
    Henning Leutz's avatar
    Henning Leutz committed
             * @param {Object} brickData - { brickId:1, inheritance:1 }
    
             * @return Promise
    
    Henning Leutz's avatar
    Henning Leutz committed
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            addBrick: function (brickData) {
                return new Promise(function (reslove, reject) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    if ("deactivate" in brickData) {
    
                        this.clear();
    
                        this.setAttribute('deactivate', true);
    
                        this.deactivate();
    
                        reslove();
                        return;
                    }
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    if (!this.$loaded) {
    
                        this.$onLoadBrickData.push(brickData);
    
                        reslove();
                        return;
                    }
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                    var BrickNode = this.addBrickById(brickData.brickId);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                    if (!BrickNode) {
                        reject();
                        return;
                    }
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                    this.$brickCustomData[BrickNode.get('id')] = {
                        customfields: brickData.customfields,
                        uid         : brickData.uid
                    };
    
                }.bind(this));
    
    Henning Leutz's avatar
    Henning Leutz committed
             * Add a brick by its ID
    
    Henning Leutz's avatar
    Henning Leutz committed
             * @param {Number} brickId
             * @return {HTMLElement|Boolean} Brick-Node
    
    Henning Leutz's avatar
    Henning Leutz committed
            addBrickById: function (brickId) {
                if (!this.$loaded) {
    
                    this.$brickIds.push(brickId);
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return false;
    
    Henning Leutz's avatar
    Henning Leutz committed
                var found = this.$availableBricks.filter(function (Item) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return Item.id === brickId;
    
                if (!found.length) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return false;
    
    Henning Leutz's avatar
    Henning Leutz committed
                var BrickNode = this.createNewBrick();
    
    
                BrickNode.getElement('select').set('value', brickId);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                return BrickNode;
    
            /**
             * Removes all bricks in the area
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            clear: function () {
    
                this.getElm().getElements(
                    '.quiqqer-bricks-site-category-area-brick'
                ).destroy();
    
    Henning Leutz's avatar
    Henning Leutz committed
             * Add a new brick to the area
    
    Henning Leutz's avatar
    Henning Leutz committed
            createNewBrick: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self = this;
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                var Elm = new Element('li', {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    'class': 'quiqqer-bricks-site-category-area-brick',
                    html   : '<select></select>',
                    id     : String.uniqueID()
    
                Elm.inject(this.$List);
    
                Select = Elm.getElement('select');
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title : QUILocale.get(lg, 'site.area.button.delete'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-remove',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function () {
    
                            self.openBrickDeleteDialog(Elm);
    
                }).inject(Elm);
    
    Henning Leutz's avatar
    Henning Leutz committed
                new QUIButton({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title : QUILocale.get(lg, 'site.area.button.settings'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon  : 'fa fa-gear',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events: {
                        onClick: function (Btn) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            var Elm    = Btn.getElm(),
    
                                Parent = Elm.getParent('.quiqqer-bricks-site-category-area-brick'),
                                Select = Parent.getElement('select');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                            self.openBrickSettingDialog(Select);
    
    Henning Leutz's avatar
    Henning Leutz committed
                        }
                    }
    
                }).inject(Elm);
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                for (i = 0, len = this.$availableBricks.length; i < len; i++) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        html : this.$availableBricks[i].title,
                        value: this.$availableBricks[i].id
    
                    }).inject(Select);
    
            /**
             * Return the brick list
             * @returns {Array}
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            getData: function () {
                if (this.getAttribute('deactivate')) {
    
                    return [{
    
    Henning Leutz's avatar
    Henning Leutz committed
                        deactivate: 1
    
                var data   = [],
    
                    bricks = this.$Elm.getElements('select');
    
    Henning Leutz's avatar
    Henning Leutz committed
                for (i = 0, len = bricks.length; i < len; i++) {
    
                    custom  = '';
    
    Henning Leutz's avatar
    Henning Leutz committed
                    brickId = bricks[i].getParent().get('id');
    
    
                    if (brickId in this.$brickCustomData) {
    
                        custom = this.$brickCustomData[brickId].customfields;
                        uid    = this.$brickCustomData[brickId].uid;
    
                    data.push({
    
    Henning Leutz's avatar
    Henning Leutz committed
                        brickId     : bricks[i].value,
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * sort methods
             */
    
            /**
             * Switch the sortable on
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            sortable: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var Elm      = this.getElm(),
                    elements = Elm.getElements(
                        '.quiqqer-bricks-site-category-area-brick'
                    );
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                elements.each(function (Brick) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    var i, len, buttons, Button;
    
    
                    buttons = Brick.getElements('.qui-button');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    for (i = 0, len = buttons.length; i < len; i++) {
    
                        Button = QUI.Controls.getById(buttons[i].get('data-quiid'));
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                        if (Button) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            Button.setDisable();
                        }
                    }
    
    
                    var Select = Brick.getElement('select'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        Option = Select.getElement('option[value="' + Select.value + '"]');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                    new Element('div', {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        'class': 'quiqqer-bricks-site-category-area-placeholder',
                        html   : Option.get('html')
                    }).inject(Brick);
    
    Henning Leutz's avatar
    Henning Leutz committed
                });
    
    
                Elm.getElements('select').set('disabled', true);
    
    Henning Leutz's avatar
    Henning Leutz committed
                new Sortables(this.$List, {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    revert: {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        duration  : 500,
    
    Henning Leutz's avatar
    Henning Leutz committed
                        transition: 'elastic:out'
                    },
    
    Henning Leutz's avatar
    Henning Leutz committed
                    clone : function (event) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        var Target = event.target;
    
    
                        if (Target.nodeName !== 'LI') {
    
                            Target = Target.getParent('li');
    
    Henning Leutz's avatar
    Henning Leutz committed
                        }
    
                        var size = Target.getSize(),
    
                            pos  = Target.getPosition(Target.getParent('ul'));
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                        return new Element('div', {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            styles: {
                                background: 'rgba(0,0,0,0.5)',
                                height    : size.y,
                                top       : pos.y,
                                width     : size.x,
                                zIndex    : 1000
    
    Henning Leutz's avatar
    Henning Leutz committed
                    onStart: function (element) {
    
                        var Ul = element.getParent('ul');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                        element.addClass('quiqqer-bricks-site-category-area-dd-active');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                        Ul.setStyles({
    
    Henning Leutz's avatar
    Henning Leutz committed
                            height  : Ul.getSize().y,
                            overflow: 'hidden',
                            width   : Ul.getSize().x
    
    Henning Leutz's avatar
    Henning Leutz committed
                        });
                    },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    onComplete: function (element) {
    
                        var Ul = element.getParent('ul');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                        element.removeClass('quiqqer-bricks-site-category-area-dd-active');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                        Ul.setStyles({
    
    Henning Leutz's avatar
    Henning Leutz committed
                            height  : null,
                            overflow: null,
                            width   : null
    
    Henning Leutz's avatar
    Henning Leutz committed
                        });
                    }
                });
            },
    
            /**
             * Switch the sortable off
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            unsortable: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var Elm      = this.getElm(),
                    elements = Elm.getElements(
                        '.quiqqer-bricks-site-category-area-brick'
                    );
    
    
                Elm.getElements('select').set('disabled', false);
                Elm.getElements('.quiqqer-bricks-site-category-area-placeholder').destroy();
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                elements.each(function (Brick) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    var i, len, buttons, Button;
    
    
                    buttons = Brick.getElements('.qui-button');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    for (i = 0, len = buttons.length; i < len; i++) {
                        Button = QUI.Controls.getById(buttons[i].get('data-quiid'));
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                        if (Button) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            Button.setEnable();
                        }
                    }
                });
            },
    
            /**
             * Opens the extra settings buttons
             *
    
    Henning Leutz's avatar
    Henning Leutz committed
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            openButtons: function (callback) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self = this;
    
                this.$AddButton.hide();
    
                self.$FXExtraBtns.style({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    borderLeft: '2px solid #cccfd5',
                    height    : 30,
                    overflow  : 'hidden'
    
    Henning Leutz's avatar
    Henning Leutz committed
                });
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                var width = this.$ExtraBtns.getChildren().map(function (Elm) {
    
                    width = width + Elm.getStyle('margin-left').toInt();
                    width = width + Elm.getStyle('margin-right').toInt();
    
                    width = width + 2;
    
    
                    return width;
                }).sum();
    
                // i dont know why i need 2 px more -.-"
                width = width + 2;
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                this.$FXExtraBtns.animate({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    opacity   : 1,
                    width     : width,
                    marginLeft: 10
    
    Henning Leutz's avatar
    Henning Leutz committed
                }, {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    equation: 'ease-in-out',
                    callback: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        self.$MoreButton.setAttribute('icon', 'fa fa-caret-right');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                        self.$FXExtraBtns.style({
    
    Henning Leutz's avatar
    Henning Leutz committed
                            overflow: null
    
    Henning Leutz's avatar
    Henning Leutz committed
                        });
    
    
                        if (typeof callback === 'function') {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            callback();
                        }
                    }
                });
            },
    
            /**
             * Close the extra settings buttons
             *
             * * @param {Function} callback
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            closeButtons: function (callback) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                var self = this;
    
                this.$FXExtraBtns.style({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    overflow  : 'hidden',
                    borderLeft: null,
                    marginLeft: 0
    
    Henning Leutz's avatar
    Henning Leutz committed
                });
    
                this.$FXExtraBtns.animate({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    opacity: 0,
                    width  : 0
    
    Henning Leutz's avatar
    Henning Leutz committed
                }, {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    callback: function () {
    
    Henning Leutz's avatar
    Henning Leutz committed
                        self.$MoreButton.setAttribute('icon', 'fa fa-caret-left');
    
    Henning Leutz's avatar
    Henning Leutz committed
                        self.$AddButton.show();
    
    
    
                        if (typeof callback === 'function') {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            callback();
                        }
                    }
                });
            },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * dialogs
             */
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * Opens the brick add dialog
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            openBrickDialog: function () {
    
                if (!this.$availableBricks.length) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                    new QUIAlert({
    
                        title          : QUILocale.get(lg, 'site.area.window.noBricksInArea.title'),
                        content        : QUILocale.get(lg, 'site.area.window.noBricksInArea.content'),
                        maxHeight      : 300,
                        maxWidth       : 450,
                        closeButtonText: QUILocale.get('quiqqer/system', 'ok')
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }).open();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                    return;
                }
    
                var self = this;
    
                new QUIPopup({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title    : QUILocale.get(lg, 'site.area.window.add'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon     : 'fa fa-th',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    maxWidth : 500,
                    maxHeight: 600,
                    autoclose: false,
                    events   : {
                        onOpen: function (Win) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                            var items   = [],
                                Content = Win.getContent(),
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                                List    = new QUIList({
                                    events: {
                                        onClick: function (List, data) {
    
                                            self.addBrickById(data.brickId);
    
    Henning Leutz's avatar
    Henning Leutz committed
                                            Win.close();
                                        }
                                    }
                                });
    
    
                            List.inject(Content);
    
    Henning Leutz's avatar
    Henning Leutz committed
                            for (var i = 0, len = self.$availableBricks.length; i < len; i++) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                                items.push({
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    brickId: self.$availableBricks[i].id,
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    icon   : 'fa fa-th',
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    title  : self.$availableBricks[i].title,
                                    text   : self.$availableBricks[i].description
    
                            List.addItems(items);
    
    Henning Leutz's avatar
    Henning Leutz committed
                        }
                    }
                }).open();
    
    Henning Leutz's avatar
    Henning Leutz committed
            },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * Opens the brick deletion dialog
             *
             * @param {HTMLElement} BrickElement - Element of the Brick
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            openBrickDeleteDialog: function (BrickElement) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                new QUIConfirm({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title      : QUILocale.get(lg, 'site.area.window.delete.title'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon       : 'fa fa-remove',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    text       : QUILocale.get(lg, 'site.area.window.delete.text'),
                    information: QUILocale.get(lg, 'site.area.window.delete.information'),
                    maxHeight  : 300,
                    maxWidth   : 450,
                    events     : {
                        onSubmit: function () {
    
                            var brickId = BrickElement.get('id');
    
                            if (brickId in this.$brickCustomData) {
                                delete this.$brickCustomData[brickId];
                            }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                            BrickElement.destroy();
    
                        }.bind(this)
    
    Henning Leutz's avatar
    Henning Leutz committed
                    }
                }).open();
            },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            /**
             * Opens the brick settings dialog
             *
             * @param {HTMLElement} Select
             */
    
    Henning Leutz's avatar
    Henning Leutz committed
            openBrickSettingDialog: function (Select) {
    
                var self = this;
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                new QUIConfirm({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title        : QUILocale.get(lg, 'site.area.window.settings.title'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon         : 'fa fa-gear',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    texticon     : false,
                    maxWidth     : 600,
                    maxHeight    : 400,
                    autoclose    : false,
                    ok_button    : {
                        text     : QUILocale.get('quiqqer/system', 'accept'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        textimage: 'fa fa-save'
    
    Henning Leutz's avatar
    Henning Leutz committed
                    cancel_button: {
                        text     : QUILocale.get('quiqqer/system', 'cancel'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                        textimage: 'fa fa-remove'
    
    Henning Leutz's avatar
    Henning Leutz committed
                    events       : {
                        onOpen: function (Win) {
    
                            var buttons = Win.$Buttons.getElements('button');
    
                            buttons.setStyle('float', 'right');
                            buttons.set('disabled', true);
    
                            var EditButton = new QUIButton({
                                textimage: 'fa fa-edit',
    
                                text     : QUILocale.get(lg, 'brick.sheet.edit.title'),
    
                                disabled : true
                            }).inject(Win.$Buttons, 'top');
    
    
                            require([
                                'package/quiqqer/bricks/bin/Site/BrickEdit'
    
    Henning Leutz's avatar
    Henning Leutz committed
                            ], function (BrickEdit) {
    
                                var brickId = Select.getParent().get('id');
    
    Henning Leutz's avatar
    Henning Leutz committed
                                var custom  = '';
    
                                if (brickId in self.$brickCustomData) {
    
                                    custom = self.$brickCustomData[brickId].customfields;
    
                                var Edit = new BrickEdit({
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    brickId     : Select.value,
                                    Site        : self.getAttribute('Site'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    styles      : {
                                        height: Win.getContent().getSize().y
    
                                }).inject(Win.getContent());
    
    
                                EditButton.addEvent('click', function () {
                                    Edit.openBrick();
                                    Win.close();
                                });
    
                                buttons.set('disabled', false);
                                EditButton.enable();
    
    Henning Leutz's avatar
    Henning Leutz committed
                        },
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onSubmit: function (Win) {
    
                            Win.Loader.show();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                            require(['qui/utils/Form'], function (QUIFormUtils) {
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
                                var Form    = Win.getContent().getElement('form'),
                                    data    = QUIFormUtils.getFormData(Form),
    
    Henning Leutz's avatar
    Henning Leutz committed
                                    brickId = Select.getParent().get('id');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
                                if (typeof self.$brickCustomData[brickId] === 'undefined') {
                                    self.$brickCustomData[brickId] = {};
                                }
    
    
                                self.$brickCustomData[brickId].customfields = JSON.encode(data);
    
    
                                Win.close();
                            });
    
    Henning Leutz's avatar
    Henning Leutz committed
                        }
                    }
                }).open();
    
             * Opens the settings dialog of the area
    
    Henning Leutz's avatar
    Henning Leutz committed
            openSettingsDialog: function () {
    
                var self = this;
    
                new QUIConfirm({
    
    Henning Leutz's avatar
    Henning Leutz committed
                    title    : QUILocale.get(lg, 'area.window.settings.title'),
    
    Henning Leutz's avatar
    Henning Leutz committed
                    icon     : 'fa fa-gear',
    
    Henning Leutz's avatar
    Henning Leutz committed
                    maxWidth : 450,
                    maxHeight: 300,
                    autoclose: false,
                    events   : {
                        onOpen: function (Win) {
    
                            var Content = Win.getContent();
    
                            Content.set(
                                'html',
    
                                '<form>' +
                                '    <label>' +
                                '        <input type="checkbox" name="deactivate" />' +
    
    Henning Leutz's avatar
    Henning Leutz committed
                                QUILocale.get(lg, 'area.window.settings.deactivate') +
    
                                '    </label>' +
                                '</form>'
                            );
    
    
                            var Form = Win.getContent().getElement('form'),
    
                                elms = Form.elements;
    
    
                            elms.deactivate.checked = self.getAttribute('deactivate');
    
    Henning Leutz's avatar
    Henning Leutz committed
                        onSubmit: function (Win) {
    
                            var Form = Win.getContent().getElement('form');
    
    Henning Leutz's avatar
    Henning Leutz committed
                            if (Form.elements.deactivate.checked) {
    
                                self.deactivate();
    
    Henning Leutz's avatar
    Henning Leutz committed
                            } else {
    
                                self.activate();
                            }
                        }
                    }
                }).open();