diff --git a/dist/filtergrid.css b/dist/filtergrid.css index 31a9d794..56703c87 100644 --- a/dist/filtergrid.css +++ b/dist/filtergrid.css @@ -1,6 +1,6 @@ /*------------------------------------------------------------------------ - TableFilter stylesheet by Max Guglielmi - - (build date: Sun Dec 14 2014 15:53:25) + - (build date: Tue Dec 16 2014 03:26:44) - Edit below for your projects' needs ------------------------------------------------------------------------*/ diff --git a/src/modules/paging.js b/src/modules/paging.js new file mode 100644 index 00000000..e9d23770 --- /dev/null +++ b/src/modules/paging.js @@ -0,0 +1,264 @@ +define(["exports", "../dom", "../helpers"], function (exports, _dom, _helpers) { + "use strict"; + + var Dom = _dom.Dom; + var Helpers = _helpers.Helpers; + var Paging = (function () { + var Paging = + + /** + * Pagination component + * @param {Object} tf TableFilter instance + */ + function Paging(tf) { + // TableFilter configuration + var f = tf.fObj; + + //id of container element + this.pagingTgtId = f.paging_target_id || null; + //defines table paging length + this.pagingLength = !isNaN(f.paging_length) ? f.paging_length : 10; + //id of container element + this.resultsPerPageTgtId = f.results_per_page_target_id || null; + //css class for paging select element + this.pgSlcCssClass = f.paging_slc_css_class || "pgSlc"; + //css class for paging input element + this.pgInpCssClass = f.paging_inp_css_class || "pgNbInp"; + //defines css class for results per page select + this.resultsSlcCssClass = f.results_slc_css_class || "rspg"; + //css class for label preceding results per page select + this.resultsSpanCssClass = f.results_span_css_class || "rspgSpan"; + //nb visible rows + this.nbVisibleRows = 0; + //nb hidden rows + this.nbHiddenRows = 0; + //1st row index of current page + this.startPagingRow = 0; + //total nb of pages + this.nbPages = 0; + //defines next page button text + this.btnNextPageText = f.btn_next_page_text || ">"; + //defines previous page button text + this.btnPrevPageText = f.btn_prev_page_text || "<"; + //defines last page button text + this.btnLastPageText = f.btn_last_page_text || ">|"; + //defines first page button text + this.btnFirstPageText = f.btn_first_page_text || "|<"; + //defines next page button html + this.btnNextPageHtml = f.btn_next_page_html || (!this.enableIcons ? null : ""); + //defines previous page button html + this.btnPrevPageHtml = f.btn_prev_page_html || (!this.enableIcons ? null : ""); + //defines last page button html + this.btnFirstPageHtml = f.btn_first_page_html || (!this.enableIcons ? null : ""); + //defines previous page button html + this.btnLastPageHtml = f.btn_last_page_html || (!this.enableIcons ? null : ""); + //defines text preceeding page selector drop-down + this.pageText = f.page_text || " Page "; + //defines text after page selector drop-down + this.ofText = f.of_text || " of "; + //css class for span containing tot nb of pages + this.nbPgSpanCssClass = f.nb_pages_css_class || "nbpg"; + //enables/disables paging buttons + this.hasPagingBtns = f.paging_btns === false ? false : true; + //stores paging buttons events + this.pagingBtnEvents = null; + //defines previous page button html + this.pageSelectorType = f.page_selector_type || this.fltTypeSlc; + //calls function before page is changed + this.onBeforeChangePage = types.isFn(f.on_before_change_page) ? f.on_before_change_page : null; + //calls function before page is changed + this.onAfterChangePage = types.isFn(f.on_after_change_page) ? f.on_after_change_page : null; + var start_row = this.refRow; + var nrows = this.nbRows; + //calculates page nb + this.nbPages = Math.ceil((nrows - start_row) / this.pagingLength); + + var evt = tf.Evt; + //Paging elements events + if (!evt._Paging.next) { + var o = tf; + evt._Paging = { // paging buttons events + slcIndex: function () { + return (o.pageSelectorType === o.fltTypeSlc) ? o.pagingSlc.options.selectedIndex : parseInt(o.pagingSlc.value, 10) - 1; + }, + nbOpts: function () { + return (o.pageSelectorType === o.fltTypeSlc) ? parseInt(o.pagingSlc.options.length, 10) - 1 : (o.nbPages - 1); + }, + next: function () { + if (o.Evt._Paging.nextEvt) { + o.Evt._Paging.nextEvt(); + } + var nextIndex = o.Evt._Paging.slcIndex() < o.Evt._Paging.nbOpts() ? o.Evt._Paging.slcIndex() + 1 : 0; + o.ChangePage(nextIndex); + }, + prev: function () { + if (o.Evt._Paging.prevEvt) { + o.Evt._Paging.prevEvt(); + } + var prevIndex = o.Evt._Paging.slcIndex() > 0 ? o.Evt._Paging.slcIndex() - 1 : o.Evt._Paging.nbOpts(); + o.ChangePage(prevIndex); + }, + last: function () { + if (o.Evt._Paging.lastEvt) { + o.Evt._Paging.lastEvt(); + } + o.ChangePage(o.Evt._Paging.nbOpts()); + }, + first: function () { + if (o.Evt._Paging.firstEvt) { + o.Evt._Paging.firstEvt(); + } + o.ChangePage(0); + }, + _detectKey: function (e) { + var evt = e || global.event; + if (evt) { + var key = o.Evt.getKeyCode(e); + if (key === 13) { + if (o.sorted) { + o.Filter(); + o.ChangePage(o.Evt._Paging.slcIndex()); + } else { + o.ChangePage(); + } + this.blur(); + } + } + }, + nextEvt: null, + prevEvt: null, + lastEvt: null, + firstEvt: null + }; + } + + this.tf = tf; + }; + + Paging.prototype.buildUI = function () { + var slcPages; + var tf = this.tf; + var evt = tf.Evt; + + // Paging drop-down list selector + if (this.pageSelectorType === tf.fltTypeSlc) { + slcPages = dom.create(tf.fltTypeSlc, ["id", tf.prfxSlcPages + tf.id]); + slcPages.className = this.pgSlcCssClass; + slcPages.onchange = evt._OnSlcPagesChange; + } + + // Paging input selector + if (this.pageSelectorType === tf.fltTypeInp) { + slcPages = dom.create(tf.fltTypeInp, ["id", tf.prfxSlcPages + tf.id], ["value", tf.currentPageNb]); + slcPages.className = this.pgInpCssClass; + slcPages.onkeypress = evt._Paging._detectKey; + } + + // btns containers + var btnNextSpan = dom.create("span", ["id", this.prfxBtnNextSpan + tf.id]); + var btnPrevSpan = dom.create("span", ["id", this.prfxBtnPrevSpan + tf.id]); + var btnLastSpan = dom.create("span", ["id", this.prfxBtnLastSpan + tf.id]); + var btnFirstSpan = dom.create("span", ["id", this.prfxBtnFirstSpan + tf.id]); + + if (this.hasPagingBtns) { + // Next button + if (!this.btnNextPageHtml) { + var btn_next = dom.create(tf.fltTypeInp, ["id", tf.prfxBtnNext + tf.id], ["type", "button"], ["value", this.btnNextPageText], ["title", "Next"]); + btn_next.className = this.btnPageCssClass; + btn_next.onclick = evt._Paging.next; + btnNextSpan.appendChild(btn_next); + } else { + btnNextSpan.innerHTML = this.btnNextPageHtml; + btnNextSpan.onclick = evt._Paging.next; + } + // Previous button + if (!this.btnPrevPageHtml) { + var btn_prev = dom.create(tf.fltTypeInp, ["id", tf.prfxBtnPrev + tf.id], ["type", "button"], ["value", this.btnPrevPageText], ["title", "Previous"]); + btn_prev.className = this.btnPageCssClass; + btn_prev.onclick = evt._Paging.prev; + btnPrevSpan.appendChild(btn_prev); + } else { + btnPrevSpan.innerHTML = this.btnPrevPageHtml; + btnPrevSpan.onclick = evt._Paging.prev; + } + // Last button + if (!this.btnLastPageHtml) { + var btn_last = dom.create(tf.fltTypeInp, ["id", tf.prfxBtnLast + tf.id], ["type", "button"], ["value", this.btnLastPageText], ["title", "Last"]); + btn_last.className = this.btnPageCssClass; + btn_last.onclick = evt._Paging.last; + btnLastSpan.appendChild(btn_last); + } else { + btnLastSpan.innerHTML = this.btnLastPageHtml; + btnLastSpan.onclick = evt._Paging.last; + } + // First button + if (!this.btnFirstPageHtml) { + var btn_first = dom.create(tf.fltTypeInp, ["id", tf.prfxBtnFirst + tf.id], ["type", "button"], ["value", this.btnFirstPageText], ["title", "First"]); + btn_first.className = this.btnPageCssClass; + btn_first.onclick = evt._Paging.first; + btnFirstSpan.appendChild(btn_first); + } else { + btnFirstSpan.innerHTML = this.btnFirstPageHtml; + btnFirstSpan.onclick = evt._Paging.first; + } + } + + // paging elements (buttons+drop-down list) are added to defined element + if (!this.pagingTgtId) { + tf.SetTopDiv(); + } + var targetEl = !this.pagingTgtId ? tf.mDiv : dom.id(this.pagingTgtId); + + /*** + if paging previously removed this prevents IE memory leak with + removeChild used in RemovePaging method. For more info refer to + http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2840253&SiteID=1 + ***/ + if (targetEl.innerHTML !== "") { + targetEl.innerHTML = ""; + } + /*** ***/ + + targetEl.appendChild(btnFirstSpan); + targetEl.appendChild(btnPrevSpan); + + var pgBeforeSpan = dom.create("span", ["id", tf.prfxPgBeforeSpan + tf.id]); + pgBeforeSpan.appendChild(dom.text(this.pageText)); + pgBeforeSpan.className = this.nbPgSpanCssClass; + targetEl.appendChild(pgBeforeSpan); + targetEl.appendChild(slcPages); + var pgAfterSpan = dom.create("span", ["id", tf.prfxPgAfterSpan + tf.id]); + pgAfterSpan.appendChild(dom.text(this.ofText)); + pgAfterSpan.className = this.nbPgSpanCssClass; + targetEl.appendChild(pgAfterSpan); + var pgspan = dom.create("span", ["id", tf.prfxPgSpan + tf.id]); + pgspan.className = this.nbPgSpanCssClass; + pgspan.appendChild(dom.text(" " + this.nbPages + " ")); + targetEl.appendChild(pgspan); + targetEl.appendChild(btnNextSpan); + targetEl.appendChild(btnLastSpan); + this.pagingSlc = dom.id(tf.prfxSlcPages + tf.id); + + /*==================================================== + - onchange event for paging select + =====================================================*/ + if (!evt._OnSlcPagesChange) { + evt._OnSlcPagesChange = function () { + if (evt._Paging._OnSlcPagesChangeEvt) { + evt._Paging._OnSlcPagesChangeEvt(); + } + tf.ChangePage(); + this.blur(); + //ie only: blur is not enough... + if (this.parentNode && Helpers.isIE()) { + this.parentNode.focus(); + } + }; + } + }; + + return Paging; + })(); + + exports.Paging = Paging; +}); \ No newline at end of file diff --git a/src/modules/paging.js.map b/src/modules/paging.js.map new file mode 100644 index 00000000..11ba390b --- /dev/null +++ b/src/modules/paging.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["src-es6/modules/paging.js"],"names":[],"mappings":"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","file":"src-es6/modules/paging.js","sourcesContent":["import {Dom} from '../dom';\nimport {Helpers} from '../helpers';\n\nexport class Paging{\n \n /**\n * Pagination component\n * @param {Object} tf TableFilter instance\n */\n constructor(tf){\n // TableFilter configuration\n var f = tf.fObj;\n \n //id of container element\n this.pagingTgtId = f.paging_target_id || null;\n //defines table paging length\n this.pagingLength = !isNaN(f.paging_length) ? f.paging_length : 10;\n //id of container element\n this.resultsPerPageTgtId = f.results_per_page_target_id || null;\n //css class for paging select element\n this.pgSlcCssClass = f.paging_slc_css_class || 'pgSlc';\n //css class for paging input element\n this.pgInpCssClass = f.paging_inp_css_class || 'pgNbInp';\n //defines css class for results per page select\n this.resultsSlcCssClass = f.results_slc_css_class || 'rspg';\n //css class for label preceding results per page select\n this.resultsSpanCssClass = f.results_span_css_class || 'rspgSpan';\n //nb visible rows\n this.nbVisibleRows = 0;\n //nb hidden rows\n this.nbHiddenRows = 0;\n //1st row index of current page\n this.startPagingRow = 0;\n //total nb of pages\n this.nbPages = 0;\n //defines next page button text\n this.btnNextPageText = f.btn_next_page_text || '>';\n //defines previous page button text\n this.btnPrevPageText = f.btn_prev_page_text || '<';\n //defines last page button text\n this.btnLastPageText = f.btn_last_page_text || '>|';\n //defines first page button text\n this.btnFirstPageText = f.btn_first_page_text || '|<';\n //defines next page button html\n this.btnNextPageHtml = f.btn_next_page_html ||\n (!this.enableIcons ? null :\n '');\n //defines previous page button html\n this.btnPrevPageHtml = f.btn_prev_page_html ||\n (!this.enableIcons ? null :\n '');\n //defines last page button html\n this.btnFirstPageHtml = f.btn_first_page_html ||\n (!this.enableIcons ? null :\n '');\n //defines previous page button html\n this.btnLastPageHtml = f.btn_last_page_html ||\n (!this.enableIcons ? null :\n '');\n //defines text preceeding page selector drop-down\n this.pageText = f.page_text || ' Page ';\n //defines text after page selector drop-down\n this.ofText = f.of_text || ' of ';\n //css class for span containing tot nb of pages\n this.nbPgSpanCssClass = f.nb_pages_css_class || 'nbpg';\n //enables/disables paging buttons\n this.hasPagingBtns = f.paging_btns===false ? false : true;\n //stores paging buttons events\n this.pagingBtnEvents = null;\n //defines previous page button html\n this.pageSelectorType = f.page_selector_type || this.fltTypeSlc;\n //calls function before page is changed\n this.onBeforeChangePage = types.isFn(f.on_before_change_page) ?\n f.on_before_change_page : null;\n //calls function before page is changed\n this.onAfterChangePage = types.isFn(f.on_after_change_page) ?\n f.on_after_change_page : null;\n var start_row = this.refRow;\n var nrows = this.nbRows;\n //calculates page nb\n this.nbPages = Math.ceil((nrows-start_row)/this.pagingLength);\n \n var evt = tf.Evt;\n //Paging elements events\n if(!evt._Paging.next){\n var o = tf;\n evt._Paging = {// paging buttons events\n slcIndex: function(){\n return (o.pageSelectorType===o.fltTypeSlc) ?\n o.pagingSlc.options.selectedIndex :\n parseInt(o.pagingSlc.value,10)-1;\n },\n nbOpts: function(){\n return (o.pageSelectorType===o.fltTypeSlc) ?\n parseInt(o.pagingSlc.options.length,10)-1 :\n (o.nbPages-1);\n },\n next: function(){\n if(o.Evt._Paging.nextEvt){\n o.Evt._Paging.nextEvt();\n }\n var nextIndex =\n o.Evt._Paging.slcIndex()0 ?\n o.Evt._Paging.slcIndex()-1 : o.Evt._Paging.nbOpts();\n o.ChangePage(prevIndex);\n },\n last: function(){\n if(o.Evt._Paging.lastEvt){\n o.Evt._Paging.lastEvt();\n }\n o.ChangePage(o.Evt._Paging.nbOpts());\n },\n first: function(){\n if(o.Evt._Paging.firstEvt){\n o.Evt._Paging.firstEvt();\n }\n o.ChangePage(0);\n },\n _detectKey: function(e){\n var evt = e || global.event;\n if(evt){\n var key = o.Evt.getKeyCode(e);\n if(key===13){\n if(o.sorted){\n o.Filter();\n o.ChangePage(o.Evt._Paging.slcIndex());\n } else{\n o.ChangePage();\n }\n this.blur();\n }\n }\n },\n nextEvt: null,\n prevEvt: null,\n lastEvt: null,\n firstEvt: null\n };\n } \n \n this.tf = tf;\n }\n \n buildUI(){\n \n var slcPages;\n var tf = this.tf;\n var evt = tf.Evt;\n\n // Paging drop-down list selector\n if(this.pageSelectorType === tf.fltTypeSlc){\n slcPages = dom.create(\n tf.fltTypeSlc, ['id', tf.prfxSlcPages+tf.id]);\n slcPages.className = this.pgSlcCssClass;\n slcPages.onchange = evt._OnSlcPagesChange;\n }\n\n // Paging input selector\n if(this.pageSelectorType === tf.fltTypeInp){\n slcPages = dom.create(\n tf.fltTypeInp,\n ['id', tf.prfxSlcPages+tf.id],\n ['value', tf.currentPageNb]\n );\n slcPages.className = this.pgInpCssClass;\n slcPages.onkeypress = evt._Paging._detectKey;\n }\n\n // btns containers\n var btnNextSpan = dom.create(\n 'span',['id',this.prfxBtnNextSpan+tf.id]);\n var btnPrevSpan = dom.create(\n 'span',['id',this.prfxBtnPrevSpan+tf.id]);\n var btnLastSpan = dom.create(\n 'span',['id',this.prfxBtnLastSpan+tf.id]);\n var btnFirstSpan = dom.create(\n 'span',['id',this.prfxBtnFirstSpan+tf.id]);\n\n if(this.hasPagingBtns){\n // Next button\n if(!this.btnNextPageHtml){\n var btn_next = dom.create(\n tf.fltTypeInp,['id',tf.prfxBtnNext+tf.id],\n ['type','button'],\n ['value',this.btnNextPageText],\n ['title','Next']\n );\n btn_next.className = this.btnPageCssClass;\n btn_next.onclick = evt._Paging.next;\n btnNextSpan.appendChild(btn_next);\n } else {\n btnNextSpan.innerHTML = this.btnNextPageHtml;\n btnNextSpan.onclick = evt._Paging.next;\n }\n // Previous button\n if(!this.btnPrevPageHtml){\n var btn_prev = dom.create(\n tf.fltTypeInp,\n ['id',tf.prfxBtnPrev+tf.id],\n ['type','button'],\n ['value',this.btnPrevPageText],\n ['title','Previous']\n );\n btn_prev.className = this.btnPageCssClass;\n btn_prev.onclick = evt._Paging.prev;\n btnPrevSpan.appendChild(btn_prev);\n } else {\n btnPrevSpan.innerHTML = this.btnPrevPageHtml;\n btnPrevSpan.onclick = evt._Paging.prev;\n }\n // Last button\n if(!this.btnLastPageHtml){\n var btn_last = dom.create(\n tf.fltTypeInp,\n ['id',tf.prfxBtnLast+tf.id],\n ['type','button'],\n ['value',this.btnLastPageText],\n ['title','Last']\n );\n btn_last.className = this.btnPageCssClass;\n btn_last.onclick = evt._Paging.last;\n btnLastSpan.appendChild(btn_last);\n } else {\n btnLastSpan.innerHTML = this.btnLastPageHtml;\n btnLastSpan.onclick = evt._Paging.last;\n }\n // First button\n if(!this.btnFirstPageHtml){\n var btn_first = dom.create(\n tf.fltTypeInp,\n ['id',tf.prfxBtnFirst+tf.id],\n ['type','button'],\n ['value',this.btnFirstPageText],\n ['title','First']\n );\n btn_first.className = this.btnPageCssClass;\n btn_first.onclick = evt._Paging.first;\n btnFirstSpan.appendChild(btn_first);\n } else {\n btnFirstSpan.innerHTML = this.btnFirstPageHtml;\n btnFirstSpan.onclick = evt._Paging.first;\n }\n }\n\n // paging elements (buttons+drop-down list) are added to defined element\n if(!this.pagingTgtId){\n tf.SetTopDiv();\n }\n var targetEl = !this.pagingTgtId ? tf.mDiv : dom.id(this.pagingTgtId);\n\n /***\n if paging previously removed this prevents IE memory leak with\n removeChild used in RemovePaging method. For more info refer to\n http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2840253&SiteID=1\n ***/\n if (targetEl.innerHTML!==''){\n targetEl.innerHTML = '';\n }\n /*** ***/\n\n targetEl.appendChild(btnFirstSpan);\n targetEl.appendChild(btnPrevSpan);\n\n var pgBeforeSpan = dom.create(\n 'span',['id', tf.prfxPgBeforeSpan+tf.id] );\n pgBeforeSpan.appendChild( dom.text(this.pageText) );\n pgBeforeSpan.className = this.nbPgSpanCssClass;\n targetEl.appendChild(pgBeforeSpan);\n targetEl.appendChild(slcPages);\n var pgAfterSpan = dom.create(\n 'span',['id', tf.prfxPgAfterSpan+tf.id]);\n pgAfterSpan.appendChild( dom.text(this.ofText) );\n pgAfterSpan.className = this.nbPgSpanCssClass;\n targetEl.appendChild(pgAfterSpan);\n var pgspan = dom.create( 'span',['id', tf.prfxPgSpan+tf.id] );\n pgspan.className = this.nbPgSpanCssClass;\n pgspan.appendChild( dom.text(' '+this.nbPages+' ') );\n targetEl.appendChild(pgspan);\n targetEl.appendChild(btnNextSpan);\n targetEl.appendChild(btnLastSpan);\n this.pagingSlc = dom.id(tf.prfxSlcPages+tf.id);\n \n /*====================================================\n - onchange event for paging select\n =====================================================*/\n if(!evt._OnSlcPagesChange){\n evt._OnSlcPagesChange = function(){\n if(evt._Paging._OnSlcPagesChangeEvt){\n evt._Paging._OnSlcPagesChangeEvt();\n }\n tf.ChangePage();\n this.blur();\n //ie only: blur is not enough...\n if(this.parentNode && Helpers.isIE()){\n this.parentNode.focus();\n }\n };\n }\n }\n}"]} \ No newline at end of file