Newer
Older
/**
* Area edit control for the site object
*
* @author www.pcsg.de (Henning Leutz)

Henning Leutz
committed
*
* @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
'qui/QUI',
'qui/controls/Control',
'qui/controls/buttons/Button',
'Locale',
'Ajax',
], function (QUI, QUIControl, QUIButton, QUIPopup, QUIAlert, QUIConfirm, QUIList, QUILocale, QUIAjax, Sortables) {
"use strict";
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/bricks/bin/Site/Area',
'$onInject'
],
options: {
name : '',
description: '',
title : {},
Site : false,
deactivate : false
this.$loaded = false;
this.$onLoadBrickData = [];
this.$brickCustomData = {};
this.$AddButton = false;
this.$SettingsButton = false;
this.$SortableButton = false;
this.$MoreButton = false;

Henning Leutz
committed
this.$ExtraBtns = false;
this.addEvents({
});
},
/**
* Return the domnode element
this.$Elm = new Element('div', {
'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>',
var Buttons = this.$Elm.getElement(

Henning Leutz
committed
this.$ExtraBtns = new Element('div', {
this.$Title = this.$Elm.getElement(
'.quiqqer-bricks-site-category-area-title'
);
this.$List = this.$Elm.getElement(
'.quiqqer-bricks-site-category-area-list'
);
// buttons
this.$AddButton = new QUIButton({
disable : true,
events : {
onClick: this.openBrickDialog
title : QUILocale.get(lg, 'site.area.button.area.more.openIt'),
if (Btn.getAttribute('icon') === 'fa fa-caret-left') {
self.openButtons();
return;
}
self.closeButtons();
}
},
events: {
onClick: function (Btn) {
if (Btn.isActive()) {
Btn.setNormal();
self.unsortable();
return;
}
Btn.setActive();
self.sortable();
}
},
return this.$Elm;
},
/**
* Refresh the area display
*/
var self = this,
size = this.$List.getComputedSize(),
titleSize = this.$Title.getComputedSize();
moofx(this.$Elm).animate({
duration: 250,
equation: 'cubic-bezier(.42,.4,.46,1.29)',
callback: function () {
self.$List.setStyle('position', null);
moofx(self.$List).animate({
/**
* event : on inject
*/
var self = this,
Project = Site.getProject();
}
}).inject(this.$Elm);
this.$List.setStyles({
QUIAjax.get('package_quiqqer_bricks_ajax_project_getBricks', function (bricks) {
self.$AddButton.enable();
Loader.destroy();
});
return;
}
Loader.destroy();
'package': 'quiqqer/bricks',
project : Project.encode(),
area : this.getAttribute('name')
});
},
/**
activate: function () {
this.setAttribute('deactivate', false);
this.getElm().removeClass('quiqqer-bricks-site-category-area-deactivate');
var self = this,
data = this.getData();
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.deactivate();
}
}
}).open();
return;
this.getElm().addClass('quiqqer-bricks-site-category-area-deactivate');
* @param {Object} brickData - { brickId:1, inheritance:1 }
addBrick: function (brickData) {
return new Promise(function (reslove, reject) {
var BrickNode = this.addBrickById(brickData.brickId);
if (!BrickNode) {
reject();
return;
}

Henning Leutz
committed
this.$brickCustomData[BrickNode.get('id')] = {
customfields: brickData.customfields,
uid : brickData.uid
};
},
/**
* @param {Number} brickId
* @return {HTMLElement|Boolean} Brick-Node
BrickNode.getElement('select').set('value', brickId);
/**
* Removes all bricks in the area
*/
this.getElm().getElements(
'.quiqqer-bricks-site-category-area-brick'
).destroy();
var i, len, Select;
'class': 'quiqqer-bricks-site-category-area-brick',
html : '<select></select>',
id : String.uniqueID()
Select = Elm.getElement('select');
new QUIButton({
Parent = Elm.getParent('.quiqqer-bricks-site-category-area-brick'),
Select = Parent.getElement('select');
for (i = 0, len = this.$availableBricks.length; i < len; i++) {
new Element('option', {
html : this.$availableBricks[i].title,
value: this.$availableBricks[i].id
}
return Elm;
/**
* Return the brick list
* @returns {Array}
*/
getData: function () {
if (this.getAttribute('deactivate')) {

Henning Leutz
committed
var i, len, uid, custom, brickId;
bricks = this.$Elm.getElements('select');

Henning Leutz
committed
uid = '';
if (brickId in this.$brickCustomData) {

Henning Leutz
committed
custom = this.$brickCustomData[brickId].customfields;
uid = this.$brickCustomData[brickId].uid;

Henning Leutz
committed
customfields: custom,
uid : uid
});
}
return data;
},
/**
* sort methods
*/
/**
* Switch the sortable on
*/
var Elm = this.getElm(),
elements = Elm.getElements(
'.quiqqer-bricks-site-category-area-brick'
);
buttons = Brick.getElements('.qui-button');
Button = QUI.Controls.getById(buttons[i].get('data-quiid'));
var Select = Brick.getElement('select'),
Option = Select.getElement('option[value="' + Select.value + '"]');
'class': 'quiqqer-bricks-site-category-area-placeholder',
html : Option.get('html')
}).inject(Brick);
Elm.getElements('select').set('disabled', true);
if (Target.nodeName !== 'LI') {
pos = Target.getPosition(Target.getParent('ul'));
styles: {
background: 'rgba(0,0,0,0.5)',
height : size.y,
top : pos.y,
width : size.x,
zIndex : 1000
element.addClass('quiqqer-bricks-site-category-area-dd-active');
height : Ul.getSize().y,
overflow: 'hidden',
width : Ul.getSize().x
element.removeClass('quiqqer-bricks-site-category-area-dd-active');
});
}
});
},
/**
* Switch the sortable off
*/
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();
buttons = Brick.getElements('.qui-button');
for (i = 0, len = buttons.length; i < len; i++) {
Button = QUI.Controls.getById(buttons[i].get('data-quiid'));
Button.setEnable();
}
}
});
},
/**
* Opens the extra settings buttons
*

Henning Leutz
committed
* @param {Function} [callback]
var self = this;
this.$AddButton.hide();
self.$FXExtraBtns.style({
borderLeft: '2px solid #cccfd5',
height : 30,
overflow : 'hidden'
var width = this.$ExtraBtns.getChildren().map(function (Elm) {

Henning Leutz
committed
var width = Elm.getSize().x;
width = width + Elm.getStyle('margin-left').toInt();
width = width + Elm.getStyle('margin-right').toInt();

Henning Leutz
committed
return width;
}).sum();
// i dont know why i need 2 px more -.-"
width = width + 2;
callback();
}
}
});
},
/**
* Close the extra settings buttons
*
* * @param {Function} callback
*/
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')
return;
}
var self = this;
new QUIPopup({
maxWidth : 500,
maxHeight: 600,
autoclose: false,
events : {
onOpen: function (Win) {
var items = [],
Content = Win.getContent(),
List = new QUIList({
events: {
onClick: function (List, data) {
for (var i = 0, len = self.$availableBricks.length; i < len; i++) {
title : self.$availableBricks[i].title,
text : self.$availableBricks[i].description
/**
* Opens the brick deletion dialog
*
* @param {HTMLElement} BrickElement - Element of the Brick
*/
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];
}
/**
* Opens the brick settings dialog
*
* @param {HTMLElement} Select
*/
texticon : false,
maxWidth : 600,
maxHeight : 400,
autoclose : false,
ok_button : {
text : QUILocale.get('quiqqer/system', 'accept'),
cancel_button: {
text : QUILocale.get('quiqqer/system', 'cancel'),
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'
var brickId = Select.getParent().get('id');

Henning Leutz
committed
custom = self.$brickCustomData[brickId].customfields;
var Edit = new BrickEdit({

Henning Leutz
committed
customfields: JSON.decode(custom),
EditButton.addEvent('click', function () {
Edit.openBrick();
Win.close();
});
buttons.set('disabled', false);
EditButton.enable();
var Form = Win.getContent().getElement('form'),
data = QUIFormUtils.getFormData(Form),
if (typeof self.$brickCustomData[brickId] === 'undefined') {
self.$brickCustomData[brickId] = {};
}

Henning Leutz
committed
self.$brickCustomData[brickId].customfields = JSON.encode(data);
var self = this;
new QUIConfirm({
maxWidth : 450,
maxHeight: 300,
autoclose: false,
events : {
onOpen: function (Win) {
var Content = Win.getContent();
Content.set(
'html',
'<form>' +
' <label>' +
' <input type="checkbox" name="deactivate" />' +
var Form = Win.getContent().getElement('form'),
elms.deactivate.checked = self.getAttribute('deactivate');
var Form = Win.getContent().getElement('form');
self.activate();
}
}
}
}).open();
}
});
});