- /**
- * @namespace flexygo.ui.wc
- */
- var flexygo;
- (function (flexygo) {
- var ui;
- (function (ui) {
- var wc;
- (function (wc) {
- /**
- * Library for the FlxModuleTabElement web component.
- *
- * @class FlxModuleTabElement
- * @constructor
- * @return {FlxModuleTabElement}
- */
- class FlxModuleTabElement extends HTMLElement {
- constructor() {
- super();
- /**
- * Set when component is attached to DOM
- * @property connected {boolean}
- */
- this.connected = false;
- this.moduleName = null;
- this.pageName = null;
- this.mode = 'default';
- this.config = null;
- this.activeModule = null;
- this.activeTitle = '';
- this.moduleInitClass = null;
- }
- /**
- * Fires when element is attached to DOM
- * @method connectedCallback
- */
- connectedCallback() {
- let element = $(this);
- this.connected = true;
- let tabMode = element.attr('mode');
- if (tabMode && tabMode !== '') {
- this.mode = tabMode;
- }
- this.moduleName = element.attr("modulename");
- if (this.moduleName) {
- if (element.attr('manualInit') != 'true') {
- this.init();
- }
- }
- }
- /**
- * Array of observed attributes.
- * @property observedAttributes {Array}
- */
- static get observedAttributes() {
- return ['modulename', 'mode'];
- }
- /**
- * Fires when the attribute value of the element is changed.
- * @method attributeChangedCallback
- */
- attributeChangedCallback(attrName, oldVal, newVal) {
- let isDirty = false;
- if (!this.connected) {
- return;
- }
- if (attrName.toLowerCase() == 'mode' && newVal && newVal != '') {
- this.mode = newVal;
- if (this.mode) {
- isDirty = true;
- }
- }
- if (attrName.toLowerCase() == 'modulename' && newVal && newVal != '') {
- this.moduleName = newVal;
- if (this.moduleName) {
- isDirty = true;
- }
- }
- if (isDirty) {
- this.refresh();
- }
- }
- refresh() {
- if ($(this).attr('manualInit') != 'true') {
- this.init();
- }
- }
- init() {
- let me = $(this);
- me.removeAttr('manualInit');
- me.html('');
- let params = {
- ObjectName: me.attr('ObjectName'),
- ObjectWhere: me.attr('ObjectWhere'),
- ModuleName: this.moduleName
- //PageName: flexygo.history.getPageName(me)
- };
- this.pageName = flexygo.history.getPageName(me);
- flexygo.ajax.post('~/api/Page', 'GetPageTabModules', params, (response) => {
- if (response) {
- me.empty();
- this.config = flexygo.utils.sortObject(response, 'TabOrder');
- this.render();
- }
- }, null, () => { this.stopLoading(); }, () => { this.startLoading(); });
- }
- render() {
- let me = $(this);
- let rendered = '';
- let module;
- let tabActiveMod = null;
- /*remove default paddding from body*/
- me.closest('.cntBody').addClass("tabPadding");
- /*Create list elements*/
- let tabclass = 'nav nav-tabs';
- if (this.mode == 'default') {
- /* Change class for mobile default tab */
- if (flexygo.utils.isSizeMobile()) {
- tabclass = 'list-piped';
- /* add tab pills if more than one level*/
- }
- else if (me.parents('flx-moduletab').length > 0) {
- tabclass = 'nav nav-pills';
- //tabclass = 'tabbutton';
- }
- }
- else {
- tabclass = 'buttontab';
- }
- //check if empty
- if (this.config.length == 0) {
- rendered += ' <ul class="' + tabclass + '"><li class="active"><a data-toggle="tab" href="#hr1"> <i class="flx-icon icon-danger icon-margin-right"></i>' + flexygo.localization.translate('moduletab.emptytabs') + '</a></li></ul>';
- rendered += '<div class="row empty-tab clear-both"><i class="flx-icon icon-information-2 icon-lg icon-margin-right"></i><span><strong>Info!</strong> ' + flexygo.localization.translate('moduletab.nocontent') + '</span></div>';
- me.html(rendered);
- }
- else {
- //Get active module for tabs from local storage
- let tabName = this.pageName + '-' + this.moduleName;
- let tabs = flexygo.storage.local.get('activeTabs');
- if (tabs != null) {
- tabActiveMod = tabs[tabName];
- }
- if (typeof tabActiveMod != 'undefined' && tabActiveMod != null) {
- let activeTabExists = false;
- for (let i = 0; i < this.config.length; i++) {
- if (tabActiveMod == this.config[i].ModuleName && this.config[i].InitHidden == false) {
- activeTabExists = true;
- }
- }
- if (!activeTabExists) {
- tabActiveMod = null;
- }
- }
- /*Build default active module*/
- let activeModId;
- for (let i = 0; i < this.config.length; i++) {
- let mod = this.config[i];
- if (((typeof tabActiveMod == 'undefined' || tabActiveMod == null) && i == 0) || tabActiveMod == mod.ModuleName) {
- let componentString = mod.WebComponent;
- if (mod.Params) {
- componentString += ' ' + mod.Params;
- }
- activeModId = i;
- module = $('<' + componentString + ' />').attr('ObjectName', me.attr('ObjectName')).attr('ObjectWhere', me.attr('ObjectWhere')).attr('isClone', me.attr('isClone')).attr('id', 'mod-' + mod.ModuleName).attr('modulename', mod.ModuleName);
- this.activeModule = mod;
- this.activeTitle = mod.Title;
- }
- }
- me.empty();
- if (tabclass == 'buttontab') {
- let holder = $('<div class="tab-button-holder"/ >');
- let btn = $('<button class="tab-button" ><i class="' + this.activeModule.IconClass + '"></i><span class="bttext">' + this.activeTitle + '</span><span class="caret"></span></button>');
- holder.append(btn);
- me.append(holder);
- btn.on('click', () => {
- var cntMenu = $('flx-contextmenu')[0];
- if (!cntMenu.hideMenu(btn)) {
- let menuUl = $('<ul class="flx-contextmenu"/>');
- for (let i = 0; i < this.config.length; i++) {
- let mod = this.config[i];
- let iconClass = mod.IconClass;
- let tabtext = mod.Title;
- let activeStr = '';
- if (i == activeModId) {
- activeStr = 'active';
- }
- /*add list element*/
- let iconmargin = '';
- if (iconClass.length > 0) {
- iconmargin = ' icon-margin-right';
- }
- let nNode = $('<li data-modname="' + mod.ModuleName + '" class="' + activeStr + '" title= "' + tabtext + '" > <span><i class="' + iconClass + iconmargin + '" > </i><span> ' + tabtext + '</span> </span></li>');
- nNode.on('click', () => {
- this.showModule(i);
- $(this).find('button span.bttext').html(this.activeTitle);
- $(this).find('button i').attr('class', this.activeModule.IconClass);
- });
- menuUl.append(nNode);
- }
- cntMenu.showMenu(menuUl, btn);
- }
- });
- }
- else {
- rendered += ' <ul class="' + tabclass + '">';
- // run throught tab modules
- for (let i = 0; i < this.config.length; i++) {
- let mod = this.config[i];
- let iconClass = mod.IconClass;
- let tabtext = mod.Title;
- let activeStr = '';
- if (i == activeModId) {
- activeStr = 'active';
- }
- let headerClass = mod.HeaderClass;
- /*add list element*/
- let iconmargin = '';
- if (iconClass.length > 0) {
- iconmargin = ' icon-margin-right';
- }
- if (mod.InitHidden) {
- rendered += '<li data-modname="' + mod.ModuleName + '" init="false" class="hidden ' + activeStr + '">';
- }
- else {
- rendered += '<li data-modname="' + mod.ModuleName + '" class="' + activeStr + '">';
- }
- rendered += '<a class="' + headerClass + '" data-toggle="tab" href="#hr1" data-module-index="' + i + '" > <i class="' + iconClass + iconmargin + '"></i><span class="tabTitle">' + tabtext + '</span><b data-modname="' + mod.ModuleName + '" class="clickable flx-icon icon-margin-left icon-settings develop-only text-muted"></b></a></li>';
- }
- rendered += '</ul>';
- }
- rendered += '<div class="modulediv"></div>';
- me.append(rendered);
- }
- this.saveModulePresetHistory(this.activeModule);
- /*Add module to body*/
- module.is("flx-list[mode=list]") ? me.find(".modulediv").addClass("overflowx") : me.find(".modulediv").removeClass("overflowx");
- let cont = me.children('.modulediv');
- me.parents('flx-module').each((i, e) => {
- e.objectdefaults = this.activeModule.ObjectDefaults;
- });
- cont.append(module);
- this.moduleInitClass = cont.attr('class');
- cont.addClass(this.activeModule.ModuleClass);
- me.find('[data-module-index]').on('click', (ev) => {
- this.showModule(parseInt($(ev.currentTarget).attr('data-module-index')));
- });
- me.find('b.icon-settings').on('click', (ev) => {
- ev.stopPropagation();
- ev.preventDefault();
- flexygo.nav.openPage('edit', 'sysModule', "moduleName='" + $(ev.currentTarget).attr('data-modname') + "'", null, 'popup', true);
- });
- }
- showModule(modIndex) {
- /*Render given module in body*/
- let me = $(this);
- let mod = this.config[modIndex];
- this.activeModule = mod;
- this.activeTitle = mod.Title;
- let componentString = mod.WebComponent;
- if (mod.Params) {
- componentString += ' ' + mod.Params;
- }
- /*let hist = flexygo.history.get(me);
- hist.filtersValues = null;
- flexygo.history.replace(hist, me);*/
- /*save preset configuration of the new module if its not set*/
- this.saveModulePresetHistory(mod);
- me.parents('flx-module').find('.cntButtons .pager').remove();
- me.parents('flx-module').find('.cntBodyHeader, .cntBodyFooter').find('*').not('.ctnArrowHeader,.ctnArrowHeader > *').remove();
- $.each(me.parents('flx-module'), (i, e) => {
- e.objectdefaults = mod.ObjectDefaults;
- });
- let module = $('<' + componentString + ' />').attr('ObjectName', me.attr('ObjectName')).attr('ObjectWhere', me.attr('ObjectWhere')).attr('id', 'mod-' + mod.ModuleName).attr('modulename', mod.ModuleName);
- /*remove previous module*/
- me.children('.modulediv').empty();
- me.children('.modulediv').append(module);
- me.children('.modulediv').removeClass().addClass(this.moduleInitClass).addClass(this.activeModule.ModuleClass);
- if (module.is('flx-list[mode=list]')) {
- me.find('.modulediv').addClass("overflowx");
- }
- else {
- me.find('.modulediv').removeClass("overflowx");
- }
- /*save active tab for next time*/
- let tabName = this.pageName + '-' + this.moduleName;
- let tabs = flexygo.storage.local.get('activeTabs');
- if (tabs == null) {
- tabs = {};
- }
- tabs[tabName] = mod.ModuleName;
- flexygo.storage.local.add('activeTabs', tabs);
- }
- saveModulePresetHistory(module) {
- let me = $(this);
- let history = flexygo.history.get(me);
- if (!history) {
- history = new flexygo.nav.FlexygoHistory();
- }
- if (!history.presetsValues) {
- history.presetsValues = new flexygo.nav.ModulePresetHistory();
- }
- if (!history.presetsValues[module.ModuleName]) {
- history.presetsValues[module.ModuleName] = new flexygo.nav.PresetHistoryValue();
- history.presetsValues[module.ModuleName].presetId = module.PresetName;
- history.presetsValues[module.ModuleName].presetText = module.PresetText;
- history.presetsValues[module.ModuleName].presetIcon = module.PresetIcon;
- }
- flexygo.history.replace(history, me, false);
- }
- translate(str) {
- return flexygo.localization.translate(str);
- }
- startLoading() {
- if ($(this).parents('flx-module').length > 0) {
- $(this).parents('flx-module')[0].startLoading();
- }
- }
- stopLoading() {
- if ($(this).parents('flx-module').length > 0) {
- $(this).parents('flx-module')[0].stopLoading();
- }
- }
- }
- wc.FlxModuleTabElement = FlxModuleTabElement;
- })(wc = ui.wc || (ui.wc = {}));
- })(ui = flexygo.ui || (flexygo.ui = {}));
- })(flexygo || (flexygo = {}));
- window.customElements.define('flx-moduletab', flexygo.ui.wc.FlxModuleTabElement);
- //# sourceMappingURL=flx-moduletab.js.map
-