define(["exports", "../../dom", "../../types", "../../event", "../../helpers", "../../array"], function (exports, _dom, _types, _event, _helpers, _array) { "use strict"; var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }; Object.defineProperty(exports, "__esModule", { value: true }); var Dom = _dom.Dom; var Types = _types.Types; var Event = _event.Event; var Helpers = _helpers.Helpers; var Arr = _array.Arr; var ColsVisibility = exports.ColsVisibility = (function () { /** * Columns Visibility extension * @param {Object} tf TableFilter instance */ function ColsVisibility(tf) { var ext = arguments[1] === undefined ? { name: "ColsVisibility", description: "Columns visibility manager" } : arguments[1]; _classCallCheck(this, ColsVisibility); // Configuration object var f = tf.config(); this.colsVisibility = f.cols_visibility; this.colVisInitialized = false; this.colVisExtName = ext.name; this.colVisExtDesc = ext.description; //show/hide cols span element this.colVisSpanEl = null; //show/hide cols button element this.btnColVisEl = null; //show/hide cols container div element this.colVisContEl = null; //tick to hide or show column this.colVisTickToHide = Boolean(f.colvis_tick_to_hide || true); //enables/disables cols manager generation this.colVisManager = Boolean(f.colvis_manager || true); //only if external headers this.colVisHeadersTbl = f.colvis_headers_table || null; //only if external headers this.colVisHeadersIndex = f.colvis_headers_index || 1; //id of container element this.colVisContElTgtId = f.colvis_container_target_id || null; //alternative headers text this.colVisHeadersText = f.colvis_headers_text || null; //id of button container element this.btnColVisTgtId = f.btn_colvis_target_id || null; //defines show/hide cols text this.btnColVisText = f.btn_colvis_text || "Columns▼"; //defines show/hide cols button innerHtml this.btnColVisHtml = f.btn_colvis_html || null; //defines css class for show/hide cols button this.btnColVisCssClass = f.btn_colvis_css_class || "colVis"; //defines close link text this.btnColVisCloseText = f.btn_colvis_close_text || "Close"; //defines close button innerHtml this.btnColVisCloseHtml = f.btn_colvis_close_html || null; //defines css class for close button this.btnColVisCloseCssClass = f.btn_colvis_close_css_class || this.btnColVisCssClass; this.colVisExtPath = ext.path || tf.extensionsPath + "colsVisibility/"; this.colVisStylesheet = "colsVisibility.css"; //span containing show/hide cols button this.prfxColVisSpan = "colVis_"; //defines css class span containing show/hide cols this.colVisSpanCss = f.colvis_span_css_class || "colVisSpan"; this.prfxColVisCont = "colVisCont_"; //defines css class div containing show/hide cols this.colVisContCss = f.colvis_cont_css_class || "colVisCont"; //defines css class for cols list (ul) this.colVisListCss = f.colvis_list_css_class || "cols_checklist"; //defines css class for list item (li) this.colVisListItemCssClass = f.checklist_item_css_class || "cols_checklist_item"; //defines css class for selected list item (li) this.colVisListSlcItemCssClass = f.checklist_selected_item_css_class || "cols_checklist_slc_item"; //text preceding columns list this.colVisText = f.colvis_text || "Hide columns: "; this.colVisAtStart = f.colvis_at_start || null; this.colVisEnableHover = Boolean(f.colvis_enable_hover) || false; //enables select all option this.colVisEnableTickAll = Boolean(f.colvis_enable_tick_all) || false; //text preceding columns list this.colVisTickAllText = f.colvis_tick_all_text || "Select all:"; this.colVisIsOpen = false; //array containing hidden columns indexes this.colVisHiddenCols = []; this.tblHasColTag = Dom.tag(tf.tbl, "col").length > 0; //callback invoked just after cols manager is loaded this.onColsManagerLoaded = Types.isFn(f.on_cols_manager_loaded) ? f.on_cols_manager_loaded : null; //calls function before cols manager is opened this.onBeforeOpenColsManager = Types.isFn(f.on_before_open_cols_manager) ? f.on_before_open_cols_manager : null; //calls function after cols manager is opened this.onAfterOpenColsManager = Types.isFn(f.on_after_open_cols_manager) ? f.on_after_open_cols_manager : null; //calls function before cols manager is closed this.onBeforeCloseColsManager = Types.isFn(f.on_before_close_cols_manager) ? f.on_before_close_cols_manager : null; //calls function after cols manager is closed this.onAfterCloseColsManager = Types.isFn(f.on_after_close_cols_manager) ? f.on_after_close_cols_manager : null; //calls function before col is hidden this.onBeforeColIsHidden = Types.isFn(f.on_before_col_is_hidden) ? f.on_before_col_is_hidden : null; //calls function after col is hidden this.onAfterColIsHidden = Types.isFn(f.on_after_col_is_hidden) ? f.on_after_col_is_hidden : null; //calls function before col is displayed this.onBeforeColIsDisplayed = Types.isFn(f.on_before_col_is_displayed) ? f.on_before_col_is_displayed : null; //calls function after col is displayed this.onAfterColIsDisplayed = Types.isFn(f.on_after_col_is_displayed) ? f.on_after_col_is_displayed : null; //Grid layout compatibility if (tf.gridLayout) { this.colVisHeadersTbl = tf.headTbl; //headers table this.colVisHeadersIndex = 0; //headers index this.onAfterColIsDisplayed = function () {}; this.onAfterColIsHidden = function () {}; } //Extension event definition //event name for TF event manager tf.Evt.name.colsvisibility = "ShowColsVisibility"; //event status message tf.msgShowColsVisibility = "Show/Hide columns"; tf.Evt._ShowColsVisibility = function () { o.ShowColsVisibility(); }; //event name for TF event manager tf.Evt.name.checkitem = "CheckItem"; //event status message tf.msgCheckItem = "Showing/hiding columns"; tf.Evt._CheckItem = function (li) { o.CheckItem(li); }; //Loads extension stylesheet tf.includeFile(ext.name + "Style", this.colVisExtPath + this.colVisStylesheet, null, "link"); this.tf = tf; //Sets button // if(this.colVisManager) o.SetShowHideColsBtn(); this.init(); this.colVisInitialized = true; } _createClass(ColsVisibility, { toggle: { value: function toggle(evt) { var tf = this.tf; var contDisplay = this.colVisContEl.style.display; var onBeforeOpenColsManager = this.onBeforeOpenColsManager; var onBeforeCloseColsManager = this.onBeforeCloseColsManager; var onAfterOpenColsManager = this.onAfterOpenColsManager; var onAfterCloseColsManager = this.onAfterCloseColsManager; if (onBeforeOpenColsManager && contDisplay !== "inline") { onBeforeOpenColsManager.call(null, this); } if (onBeforeCloseColsManager && contDisplay === "inline") { onBeforeCloseColsManager.call(null, this); } this.colVisContEl.style.display = contDisplay === "inline" ? "none" : "inline"; if (onAfterOpenColsManager && contDisplay !== "inline") { onAfterOpenColsManager.call(null, this); } if (onAfterCloseColsManager && contDisplay === "inline") { onAfterCloseColsManager.call(null, this); } } }, checkItem: { value: function checkItem(lbl) { var li = lbl.parentNode; if (!li || !lbl) { return; } var isChecked = lbl.firstChild.checked; var colIndex = lbl.firstChild.getAttribute("id").split("_")[1]; if (isChecked) { Dom.addClass(li, this.colVisListSlcItemCssClass); } else { Dom.removeClass(li, this.colVisListSlcItemCssClass); } // var hide = (this.TickToHide && isChecked) || (!this.TickToHide && !isChecked) ? true : false; var hide = false; if (this.colVisTickToHide && isChecked || !this.colVisTickToHide && !isChecked) { hide = true; } this.setHidden(colIndex, hide); } }, init: { value: function init() { if (!this.colVisManager) { return; } this.buildBtn(); this.buildManager(); } }, buildBtn: { value: function buildBtn() { var _this = this; var tf = this.tf; // if(!tf.hasGrid && !tf.isFirstLoad){ // return; // } if (this.btnColVisEl) { return; } var colVisSpan = Dom.create("span", ["id", this.prfxColVisSpan + tf.id]); colVisSpan.className = this.colVisSpanCss; //Container element (rdiv or custom element) if (!this.btnColVisTgtId) { tf.setToolbar(); } var targetEl = !this.btnColVisTgtId ? tf.rDiv : Dom.id(this.btnColVisTgtId); if (this.btnColVisTgtId) { targetEl.firstChild.parentNode.insertBefore(colVisSpan, targetEl.firstChild); } else { targetEl.appendChild(colVisSpan); } if (!this.btnColVisHtml) { var btn = Dom.create("a", ["href", "javascript:;"]); btn.className = this.btnColVisCssClass; btn.title = this.colVisExtDesc; btn.innerHTML = this.btnColVisText; colVisSpan.appendChild(btn); if (!this.colVisEnableHover) { // btn.onclick = this.Evt._ShowColsVisibility; Event.add(btn, "click", function (evt) { _this.toggle(evt); }); } else { // var o = this; // btn.onmouseover = this.Evt._ShowColsVisibility; Event.add(btn, "mouseover", function (evt) { _this.toggle(evt); }); } } else { //Custom html colVisSpan.innerHTML = this.btnColVisHtml; var colVisEl = colVisSpan.firstChild; if (!this.colVisEnableHover) { // colVisEl.onclick = this.Evt._ShowColsVisibility; Event.add(colVisEl, "click", function (evt) { _this.toggle(evt); }); } else { // colVisEl.onmouseover = this.Evt._ShowColsVisibility; Event.add(colVisEl, "mouseover", function (evt) { _this.toggle(evt); }); } } this.colVisSpanEl = colVisSpan; this.btnColVisEl = this.colVisSpanEl.firstChild; // this.SetColsVisibilityManager(); // this.buildManager(); if (this.onColsManagerLoaded) { this.onColsManagerLoaded.call(null, this); } } }, buildManager: { value: function buildManager() { var _this = this; var tf = this.tf; // if(!this.hasGrid && !this.isFirstLoad) return; var container = !this.colVisContElTgtId ? Dom.create("div", ["id", this.prfxColVisCont + tf.id]) : Dom.id(this.colVisContElTgtId); container.className = this.colVisContCss; //Extension description var extNameLabel = Dom.create("p"); extNameLabel.innerHTML = this.colVisText; container.appendChild(extNameLabel); //Headers list var ul = Dom.create("ul", ["id", "ul" + this.colVisExtName + "_" + tf.id]); ul.className = this.colVisListCss; var tbl = this.colVisHeadersTbl ? this.colVisHeadersTbl : tf.tbl; var headerIndex = this.colVisHeadersTbl ? this.colVisHeadersIndex : tf.getHeadersRowIndex(); var headerRow = tbl.rows[headerIndex]; //Tick all option if (this.colVisEnableTickAll) { var li = Dom.createCheckItem("col__" + tf.id, this.colVisTickAllText, this.colVisTickAllText); Dom.addClass(li, this.colVisListItemCssClass); ul.appendChild(li); var isAllTicked = false; // li.check.onclick = function(){ // for(var h=0; h