diff --git a/bin/Area.js b/bin/Area.js index f1e84942a01993079106fa9787b8405894f10552..3878ff614d6527424ee4142602089f7129dd4713 100644 --- a/bin/Area.js +++ b/bin/Area.js @@ -5,14 +5,6 @@ * @module package/quiqqer/bricks/bin/BrickAreas * @author www.pcsg.de (Henning Leutz) * - * @require qui/QUI - * @require qui/controls/Control - * @require qui/controls/buttons/Button - * @require package/quiqqer/bricks/bin/AreaWindow - * @require Ajax - * @require Locale - * @require css!package/quiqqer/bricks/bin/Area.css - * * @event onLoaded [ this ] */ define('package/quiqqer/bricks/bin/Area', [ @@ -61,12 +53,12 @@ define('package/quiqqer/bricks/bin/Area', [ this.$Elm = new Element('div', { 'class': 'quiqqer-bricks-area smooth', html : '<div class="quiqqer-bricks-area-icon">' + - '<span class="fa fa-list-alt"></span>' + - '</div>' + - '<div class="quiqqer-bricks-area-content">' + - '<div class="quiqqer-bricks-area-content-title"></div>' + - '<div class="quiqqer-bricks-area-content-description"></div>' + - '</div>', + '<span class="fa fa-list-alt"></span>' + + '</div>' + + '<div class="quiqqer-bricks-area-content">' + + '<div class="quiqqer-bricks-area-content-title"></div>' + + '<div class="quiqqer-bricks-area-content-description"></div>' + + '</div>', events : { click: this.toggle } diff --git a/bin/AreaWindow.js b/bin/AreaWindow.js index 2aae032ae668b2d4ec570a2366f57550009421fc..e8b1a4a8cb0ed15baee49d2898cae0097e8fb1dc 100644 --- a/bin/AreaWindow.js +++ b/bin/AreaWindow.js @@ -5,12 +5,6 @@ * @module package/quiqqer/bricks/bin/AreaWindow * @author www.pcsg.de (Henning Leutz) * - * @require qui/QUI - * @require qui/controls/windows/Confirm - * @require package/quiqqer/bricks/bin/Area - * @require Ajax - * @require Locale - * * @event onSubmit [ this, areas ] */ define('package/quiqqer/bricks/bin/AreaWindow', [ @@ -93,6 +87,8 @@ define('package/quiqqer/bricks/bin/AreaWindow', [ * @param {Function} callback */ getList: function (callback) { + require(['']); + Ajax.get('package_quiqqer_bricks_ajax_project_getAreas', callback, { 'package': 'quiqqer/brick', project : JSON.encode({ diff --git a/bin/Areas.js b/bin/Areas.js new file mode 100644 index 0000000000000000000000000000000000000000..dbd8d12301fde728c7709012186ba06da4af7c4f --- /dev/null +++ b/bin/Areas.js @@ -0,0 +1,12 @@ +/** + * Main areas handler + * + * @module package/quiqqer/bricks/bin/Areas + * @author www.pcsg.de (Henning Leutz) + */ +define('package/quiqqer/bricks/bin/Areas', [ + 'package/quiqqer/bricks/bin/classes/Areas' +], function (Areas) { + "use strict"; + return new Areas(); +}); \ No newline at end of file diff --git a/bin/BrickAreas.js b/bin/BrickAreas.js index 83a12972e4713b54633aab39a979b80f6182a5c2..bb03b6682a671b9fae5acabd6bdb1d1f68333f72 100644 --- a/bin/BrickAreas.js +++ b/bin/BrickAreas.js @@ -1,4 +1,3 @@ - /** * BrickAreas Control * Edit and change the areas for the brick @@ -6,14 +5,6 @@ * @module package/quiqqer/bricks/bin/BrickAreas * @author www.pcsg.de (Henning Leutz) * - * @require qui/QUI - * @require qui/controls/Control - * @require qui/controls/buttons/Button - * @require package/quiqqer/bricks/bin/AreaWindow - * @require Ajax - * @require Locale - * @require css!package/quiqqer/bricks/bin/BrickAreas.css - * * @event onLoaded [ this ] */ define('package/quiqqer/bricks/bin/BrickAreas', [ @@ -22,32 +13,33 @@ define('package/quiqqer/bricks/bin/BrickAreas', [ 'qui/controls/Control', 'qui/controls/buttons/Button', 'package/quiqqer/bricks/bin/AreaWindow', + 'package/quiqqer/bricks/bin/Areas', 'Ajax', 'Locale', 'css!package/quiqqer/bricks/bin/BrickAreas.css' -], function (QUI, QUIControl, QUIButton, AreaWindow, Ajax, QUILocale) { +], function (QUI, QUIControl, QUIButton, AreaWindow, Areas, Ajax, QUILocale) { "use strict"; return new Class({ - Extends : QUIControl, - Type : 'package/quiqqer/bricks/bin/BrickAreas', + Extends: QUIControl, + Type : 'package/quiqqer/bricks/bin/BrickAreas', - Binds : [ + Binds: [ '$onDestroy' ], - options : { - brickId : false, // brickId - styles : false, - projectName : false, - projectLang : false, - areas : false + options: { + brickId : false, // brickId + styles : false, + projectName: false, + projectLang: false, + areas : false }, - initialize : function (options) { + initialize: function (options) { this.parent(options); this.$areas = {}; @@ -58,13 +50,13 @@ define('package/quiqqer/bricks/bin/BrickAreas', [ * * @return {HTMLElement} */ - create : function () { + create: function () { var self = this; this.$Elm = new Element('div', { - 'class' : 'quiqqer-bricks-brickareas', - html : '<div class="quiqqer-bricks-brickareas-container"></div>' + - '<div class="quiqqer-bricks-brickareas-buttons"></div>' + 'class': 'quiqqer-bricks-brickareas', + html : '<div class="quiqqer-bricks-brickareas-container"></div>' + + '<div class="quiqqer-bricks-brickareas-buttons"></div>' }); if (this.getAttribute('styles')) { @@ -75,21 +67,19 @@ define('package/quiqqer/bricks/bin/BrickAreas', [ this.$Buttons = this.$Elm.getElement('.quiqqer-bricks-brickareas-buttons'); new QUIButton({ - text : QUILocale.get('quiqqer/bricks', 'brick.edit.area.add'), - styles : { - width : '100%' + text : QUILocale.get('quiqqer/bricks', 'brick.edit.area.add'), + styles: { + width: '100%' }, - events : - { - onClick : function () { + events: { + onClick: function () { new AreaWindow({ - projectName : self.getAttribute('projectName'), - projectLang : self.getAttribute('projectLang'), - events : - { - onSubmit : function (Win, areas) { + projectName: self.getAttribute('projectName'), + projectLang: self.getAttribute('projectLang'), + events : { + onSubmit: function (Win, areas) { for (var i = 0, len = areas.length; i < len; i++) { - self.addArea(areas[ i ]); + self.addArea(areas[i]); } } } @@ -113,36 +103,66 @@ define('package/quiqqer/bricks/bin/BrickAreas', [ /** * Add an area + * * @param {String} area - name of the area */ - addArea : function (area) { + addArea: function (area) { if (area in this.$areas) { return; } var self = this; - this.$areas[ area ] = true; + this.$areas[area] = true; var BrickNode = new Element('div', { - 'class' : 'quiqqer-bricks-brickareas-area', - html : area, - 'data-area' : area + 'class' : 'quiqqer-bricks-brickareas-area', + html : '<span class="fa fa-spinner fa-spin"></span>', + 'data-area': area }).inject(this.$Container); + + Areas.getList( + this.getAttribute('projectName'), + this.getAttribute('projectLang') + ).then(function (list) { + var name = this.get('data-area'); + + var title = list.filter(function (Entry) { + return Entry.name === name; + }).map(function (Entry) { + return Entry.title; + }); + + if ("group" in title[0]) { + title = QUILocale.get( + title[0].group, + title[0].var + ); + } else { + title = title[0]; + } + + var Loader = this.getElement('.fa'); + + Loader.removeClass('fa'); + Loader.removeClass('fa-spinner'); + Loader.removeClass('fa-spin'); + Loader.set('html', title); + }.bind(BrickNode)); + new Element('span', { - 'class' : 'fa fa-times', - styles : { - cursor: 'pointer', + 'class': 'fa fa-times', + styles : { + cursor : 'pointer', marginLeft: 10 }, - events : - { - click : function () { + events : { + click: function () { var area = BrickNode.get('data-area'); - if (self.$areas[ area ]) { - delete self.$areas[ area ]; + if (self.$areas[area]) { + delete self.$areas[area]; } BrickNode.destroy(); @@ -156,7 +176,7 @@ define('package/quiqqer/bricks/bin/BrickAreas', [ * * @return {Array} */ - getAreas : function () { + getAreas: function () { var result = []; for (var area in this.$areas) { diff --git a/bin/Controls/Slider/PromosliderWallpaper.js b/bin/Controls/Slider/PromosliderWallpaper.js index 57d61174271e9b5248f659cb8941f38b72b07dc3..26ba174e68d8f1b6ac45c3547e220edfd4b731ff 100644 --- a/bin/Controls/Slider/PromosliderWallpaper.js +++ b/bin/Controls/Slider/PromosliderWallpaper.js @@ -245,8 +245,8 @@ define('package/quiqqer/bricks/bin/Controls/Slider/PromosliderWallpaper', [ // click event var Li = this.$List.getElement('li:nth-child(' + parseInt(currentSlide + 1) + ')'); - if (Li.get('data-url') && Li.get('data-url') !== '') { - window.location = Li.get('data-url'); + if (Li.get('data-href') && Li.get('data-href') !== '') { + window.location = Li.get('data-href'); return; } } @@ -308,18 +308,17 @@ define('package/quiqqer/bricks/bin/Controls/Slider/PromosliderWallpaper', [ }); // click events - this.$Container.getElements("li[data-url]").each(function (LiElement) { - - // if (LiElement.get('data-url') === '') { - // return; - // } - // - // LiElement.setStyle('cursor', 'pointer'); - // LiElement.addEvent('click', function () { - // if (QUI.isScrolling() === false) { - // window.location = this.get('data-url'); - // } - // }); + this.$Container.getElements("li[data-href]").each(function (LiElement) { + if (LiElement.get('data-href') === '') { + return; + } + + LiElement.setStyle('cursor', 'pointer'); + LiElement.addEvent('click', function () { + if (QUI.isScrolling() === false) { + window.location = this.get('data-href'); + } + }); }); @@ -603,7 +602,7 @@ define('package/quiqqer/bricks/bin/Controls/Slider/PromosliderWallpaper', [ var self = this, Background = Slide.getElement('.quiqqer-bricks-promoslider-wallpaper-image'), display = Background.getStyle('display'), - image = Slide.get('data-url'); + image = Slide.get('data-image'); if (display !== 'none') { return; diff --git a/bin/Manager.js b/bin/Manager.js index ff2e0affa79348d8a1caf9d375029e6114b6894e..3fd66e5bd5269459b8733649c217b9c73d5bc1c2 100644 --- a/bin/Manager.js +++ b/bin/Manager.js @@ -3,18 +3,6 @@ * * @module package/quiqqer/bricks/bin/Manager * @author www.pcsg.de (Henning Leutz) - * - * @require qui/QUI - * @require qui/controls/desktop/Panel - * @require qui/controls/buttons/Select - * @require qui/controls/buttons/Button - * @require qui/controls/buttons/Separator - * @require qui/controls/windows/Confirm - * @require controls/grid/Grid - * @require Locale - * @require Projects - * @require Ajax - * @require css!package/quiqqer/bricks/bin/Manager.css */ define('package/quiqqer/bricks/bin/Manager', [ diff --git a/bin/classes/Areas.js b/bin/classes/Areas.js new file mode 100644 index 0000000000000000000000000000000000000000..280cfb3dc5e3bf653f17d9b52e5069a5159dd2c0 --- /dev/null +++ b/bin/classes/Areas.js @@ -0,0 +1,49 @@ +define('package/quiqqer/bricks/bin/classes/Areas', [ + + 'qui/QUI', + 'qui/classes/DOM', + 'Ajax' + +], function (QUI, QDOM, QUIAjax) { + "use strict"; + + return new Class({ + + Extends: QDOM, + Type : 'classes/editor/Manager', + + initialize: function (options) { + this.parent(options); + + this.$areas = null; + }, + + /** + * Return the area list + * + * @param project + * @param lang + * @return {Promise|*} + */ + getList: function (project, lang) { + if (this.$areas) { + return Promise.resolve(this.$areas); + } + + var self = this; + + return new Promise(function (resolve) { + QUIAjax.get('package_quiqqer_bricks_ajax_project_getAreas', function (result) { + self.$areas = result; + resolve(self.$areas); + }, { + 'package': 'quiqqer/brick', + project : JSON.encode({ + name: project, + lang: lang + }) + }); + }); + } + }); +}); diff --git a/composer.json b/composer.json index c5e573cc7a5f5a1d194ee3f6df9b91b705f6cbc7..00932712dcb72e6277ec87dd894dd0263fdbcc10 100644 --- a/composer.json +++ b/composer.json @@ -20,12 +20,12 @@ "quiqqer\/qui": ">=1|dev-master|dev-dev", "quiqqer/utils": ">=1.4|dev-dev", "npm-asset/hammerjs": "2.*", - "npm-asset\/mustache": "2.*" + "npm-asset\/mustache": "2.*", + "ramsey/uuid": "3.*" }, "autoload": { - "psr-0": { - "QUI": "src/" + "psr-4": { + "QUI\\Bricks\\": "src/QUI/Bricks" } } } - diff --git a/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper.html b/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper.html index b5d47524a7582f15b6e1dfbcb9deec53d5c8e639..b44395741af8dd5c282c97348a2bd854c77a69ee 100644 --- a/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper.html +++ b/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper.html @@ -2,7 +2,7 @@ {strip} <ul class="hide-on-mobile"> {foreach $desktopSlides as $key => $slide} - <li data-url="{image image=$slide.image onlysrc=1}"> + <li data-image="{image image=$slide.image onlysrc=1}" data-href="{$slide.url}"> {assign var=extraClass value=""} {if isset($slide.pos) && $slide.pos == 'quiqqer-bricks-promoslider-slide-right'} @@ -42,7 +42,7 @@ {strip} <ul class="hide-on-desktop"> {foreach $mobileSlides as $key => $slide} - <li data-url="{image image=$slide.image onlysrc=1}"> + <li data-image="{image image=$slide.image onlysrc=1}" data-href="{$slide.url}"> {assign var=extraClass value=""} {if isset($slide.pos) && $slide.pos == 'quiqqer-bricks-promoslider-slide-right'} diff --git a/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper2Content.html b/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper2Content.html index 205f44bdbe53740bf28b995401c5fd4af8b350e1..8e4d92fc55397a3542446160841948b2fecf1510 100644 --- a/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper2Content.html +++ b/src/QUI/Bricks/Controls/Slider/PromosliderWallpaper2Content.html @@ -2,7 +2,7 @@ {strip} <ul class="hide-on-mobile"> {foreach $desktopSlides as $key => $slide} - <li data-url="{image image=$slide.image onlysrc=1}"> + <li data-image="{image image=$slide.image onlysrc=1}" data-href="{$slide.url}"> <div class="quiqqer-bricks-promoslider-wallpaper-image" style="display: none"> </div> <div class="grid-container"> @@ -25,7 +25,7 @@ {strip} <ul class="hide-on-desktop"> {foreach $mobileSlides as $key => $slide} - <li data-url="{image image=$slide.image onlysrc=1}"> + <li data-image="{image image=$slide.image onlysrc=1}" data-href="{$slide.url}"> <div class="quiqqer-bricks-promoslider-wallpaper-image" style="display: none"> </div> <div class="grid-container">