summaryrefslogtreecommitdiff
path: root/public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js')
-rw-r--r--public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js401
1 files changed, 0 insertions, 401 deletions
diff --git a/public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js b/public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js
deleted file mode 100644
index 5a5dc11..0000000
--- a/public/assets/js/_pythia/dataTables/dataTables.alphabetSearch.js
+++ /dev/null
@@ -1,401 +0,0 @@
-/*! AlphabetSearch for DataTables v1.2.5
- * 2014 SpryMedia Ltd - datatables.net/license
- * Gyrocode LLC - MIT License
- */
-
-/**
- * @summary AlphabetSearch
- * @description Show an set of alphabet buttons alongside a table providing
- * search input options
- * @version 1.2.5
- * @file dataTables.alphabetSearch.js
- * @author SpryMedia Ltd (www.sprymedia.co.uk)
- * @contact www.sprymedia.co.uk/contact
- * @copyright Copyright 2014 SpryMedia Ltd.
- * @author Gyrocode LLC (www.gyrocode.com)
- * @contact www.gyrocode.com/contacts
- * @copyright Copyright (c) Gyrocode LLC
- *
- * License MIT - http://datatables.net/license/mit
- *
- * For more detailed information please see:
- * https://www.gyrocode.com/projects/jquery-datatables-alphabetsearch/
- */
-(function($){
-
-
-// Search function
-$.fn.dataTable.Api.register( 'alphabetSearch()', function ( searchTerm ) {
- this.iterator( 'table', function ( context ) {
- context.alphabetSearch.letter = searchTerm;
- } );
-
- return this;
-} );
-
-// Recalculate the alphabet display for updated data
-$.fn.dataTable.Api.register( 'alphabetSearch.recalc()', function () {
- this.iterator( 'table', function ( context ) {
- draw(
- new $.fn.dataTable.Api( context ),
- $('div.alphabet', this.table().container()),
- context
- );
- } );
-
- return this;
-} );
-
-
-// Search plug-in
-$.fn.dataTable.ext.search.push( function ( context, searchData ) {
- // Ensure that table has alphabet search feature enabled
- if ( ! context.hasOwnProperty('alphabetSearch') ) {
- return true;
- }
-
- // Ensure that there is a search applied to this table before running it
- if ( ! context.alphabetSearch.letterSearch ) {
- return true;
- }
-
- var letter = searchData[context.alphabetSearch.column]
- .toString()
- .replace(/<.*?>/g, '')
- .charAt(0).toUpperCase();
-
-
- if(context.alphabetSearch.letterSearch !== '#'){
- if ( letter === context.alphabetSearch.letterSearch ) {
- return true;
- }
- } else {
- //Only English Letters
- if (/^[a-zA-Z]+$/.test(letter)){
- return true;
- }
- }
-
- return false;
-} );
-
-
-// Order plug-in
-//
-// NOTES: If sorting by alphabetized column
-// there would be two calls to this method
-$.fn.dataTable.ext.order['alphabetSearch'] = function ( context, col )
-{
- var order_col = this.api().order()[0][0];
- var order_method = this.api().order()[0][1];
-
- // If sorting by column other than the one being alphabetized
- if(order_col !== context.alphabetSearch.column){
- context.alphabetSearch.pass = 0;
- }
-
- var data = this.api().column( col, { order: 'index' } ).data().map( function (value, index) {
- var letter = value.replace(/<.*?>/g, '').charAt(0).toUpperCase();
-
- // If sorting by alphabetized column
- return (order_col === context.alphabetSearch.column)
- ? (
- // If first pass
- ( !context.alphabetSearch.pass )
- // Ignore
- ?
- ''
- // Otherwise, if it's a second pass
- :
- (
- // If method is ascending sort
- ( order_method === 'asc' )
- // Return first letter
- ? letter
- : String.fromCharCode(65535 - letter.charCodeAt(0))
- )
- )
- // Otherwise, if sorting by column other than the one being alphabetized,
- // return first letter
- : letter;
- } );
-
- // If sorting by alphabetized column
- if(order_col === context.alphabetSearch.column){
- // If pass is not defined, set it to 0
- if(!context.alphabetSearchPass){ context.alphabetSearch.pass = 0; }
- // Increment pass counter and reset it to 0 if it's a second pass
- context.alphabetSearch.pass = (context.alphabetSearch.pass + 1) % 2;
- }
-
- return data;
-};
-
-
-// Private support methods
-function bin ( data ) {
- var letter, bins = {};
-
- for ( var i=0, ien=data.length ; i<ien ; i++ ) {
- letter = data[i]
- .toString()
- .replace(/<.*?>/g, '')
- .charAt(0).toUpperCase();
- if (/^[a-zA-Z]+$/.test(letter)) {
- letter = '#';
- }
- if ( bins[letter] ) {
- bins[letter]++;
- }
- else {
- bins[letter] = 1;
- }
- }
-
- return bins;
-}
-
-function draw ( table, alphabet, context )
-{
- alphabet.empty();
-
- if(context.oLanguage.alphabetSearch.infoDisplay !== ''){
- $('<span class="alphabet-info-display"></span>')
- .html(context.oLanguage.alphabetSearch.infoDisplay)
- .appendTo( alphabet );
- }
-
- var columnData = table.column(context.alphabetSearch.column, { search: 'applied' } ).data();
- var bins = bin( columnData );
-
- var alphabetList = $('<ul/>');
-
- $('<a/>')
- .attr( 'href', 'javascript:;' )
- .data( 'letter', '' )
- .data( 'match-count', columnData.length )
- .addClass(
- ((!context.alphabetSearch.letter) ? 'active' : '')
- )
- .html( '<span>' + context.oLanguage.alphabetSearch.infoAll + '</span>' )
- .wrap( '<li/>' )
- .parent()
- .appendTo( alphabetList );
-
- for ( var i=0 ; i<context.oLanguage.alphabetSearch.alphabet.length ; i++ ) {
- var letter = context.oLanguage.alphabetSearch.alphabet[i];
-
- $('<a/>')
- .attr( 'href', 'javascript:;' )
- .data( 'letter', letter )
- .data( 'match-count', bins[letter] || 0 )
- .addClass(
- (! bins[letter] ? 'empty' : '')
- + ((context.alphabetSearch.letter === letter) ? ' active' : '')
- )
- .html( '<span>' + letter + '</span>' )
- .wrap( '<li/>' )
- .parent()
- .appendTo( alphabetList );
- }
-
- alphabetList.appendTo( alphabet );
-
- $('<div class="alphabet-info"></div>')
- .appendTo( alphabet );
-
-
- // Perform second rendering
- // needed to filter search results by letter
- // NOTE: Future optimization is needed to avoid rendering twice
- // when no search is performed
-
- // If letter is selected
- if(context.alphabetSearch.letter){
- // Apply filtering by letter
- context.alphabetSearch.letterSearch = context.alphabetSearch.letter;
-
- // Redraw table
- table.draw();
-
- // Remove filtering by letter
- context.alphabetSearch.letterSearch = '';
- }
-
- // Handle search event here only once
- // when alphabet panel has been drawn
- // because we are performing two-step rendering
- // that could trigger search hanlder when not needed
- table.one('search', function (e, context) {
- var api = new $.fn.dataTable.Api( context );
-
- // Redraw alphabet panel
- api.alphabetSearch.recalc();
- });
-}
-
-
-$.fn.dataTable.AlphabetSearch = function ( context ) {
- var table = new $.fn.dataTable.Api( context );
- var alphabet = $('<div class="alphabet hidden-sm"/>');
-
- // Language
- context.oLanguage.alphabetSearch =
- $.extend(
- {
- //'alphabet': '#ABCDEFGHIJKLMNOPQRSTUVWXYZ',
- 'alphabet': '#ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ',
- //'infoDisplay': '',
- 'infoAll': 'Όλα'
- },
- ((context.oLanguage.alphabetSearch)
- ? context.oLanguage.alphabetSearch
- : {}
- )
- );
- // Convert alphabet to uppercase
- context.oLanguage.alphabetSearch.alphabet.toUpperCase();
-
- context.alphabetSearch =
- $.extend(
- {
- column: 0
- },
- $.isPlainObject(context.oInit.alphabetSearch) ? context.oInit.alphabetSearch : {},
- {
- letter: '',
- letterSearch: '',
- pass: 0
- }
- );
-
- // Set required "orderDataType" ("sSortDataType") for a column
- if(context.alphabetSearch.column >= 0 && context.alphabetSearch.column < context.aoColumns.length){
- context.aoColumns[context.alphabetSearch.column].sSortDataType = 'alphabetSearch';
- }
-
- // Add column containing names to a list of columns
- // where ordering will be always applied to the table
- if( context.hasOwnProperty('aaSortingFixed')
- && typeof context.aaSortingFixed === 'object' )
- {
- if( $.isArray(context.aaSortingFixed) ){
- if( context.aaSortingFixed.length && !$.isArray( context.aaSortingFixed[0] ) ) {
- // 1D array
- context.aaSortingFixed = [[context.alphabetSearch.column, 'asc'], context.aaSortingFixed];
-
- } else {
- // 2D array
- context.aaSortingFixed.unshift([context.alphabetSearch.column, 'asc']);
- }
- } else {
- if( !context.aaSortingFixed.hasOwnProperty('pre') ){
- context.aaSortingFixed.pre = [];
- }
-
- if( context.aaSortingFixed.pre.length && !$.isArray( context.aaSortingFixed.pre[0] ) ) {
- // 1D array
- context.aaSortingFixed.pre = [[context.alphabetSearch.column, 'asc'], context.aaSortingFixed.pre];
-
- } else {
- // 2D array
- context.aaSortingFixed.pre.unshift([context.alphabetSearch.column, 'asc']);
- }
- }
-
- } else {
- context.aaSortingFixed = [context.alphabetSearch.column, 'asc'];
- }
-
-
- draw( table, alphabet, context );
-
-
- // Trigger a search
- alphabet.on( 'click', 'a', function (e) {
- // Prevent default behavior
- e.preventDefault();
-
- alphabet.find( '.active' ).removeClass( 'active' );
- $(this).addClass( 'active' );
-
- table
- .alphabetSearch( $(this).data('letter') )
- .draw();
- } );
-
- // Mouse events to show helper information
- alphabet
- .on( 'mouseenter', 'a', function () {
- var $el = $(this);
- var el_pos = $el.position();
-
- var $alphabet_info = $('.alphabet-info', alphabet);
-
- $alphabet_info.html( $el.data('match-count') );
-
- // Display helper centered horizontally under the letter
- $alphabet_info
- .css( {
- opacity: 1,
- left: el_pos.left + Math.round(($el.outerWidth() - $alphabet_info.outerWidth())/2),
- top: $(this).position().top + $el.outerHeight()
- } );
- } )
- .on( 'mouseleave', 'a', function () {
- alphabet
- .find('div.alphabet-info')
- .css('opacity', 0);
- } );
-
- table.on('draw', function (e, context) {
- var api = new $.fn.dataTable.Api( context );
-
- // Total number of column nodes
- var col_total = api.columns().nodes().length;
-
- var rows = api.rows({ page: 'current' }).nodes();
- var group_last = null;
-
- api.column(context.alphabetSearch.column, { page: 'current' }).data().each(function (name, index){
- var group = name.replace(/<.*?>/g, '').charAt(0).toUpperCase();
-
- if (group_last !== group) {
- $(rows).eq(index).before(
- '<tr class="alphabet-group"><td colspan="' + col_total + '">' + group + '</td></tr>'
- );
-
- group_last = group;
- }
- });
-
- // If there are no rows found and letter is selected
- if(!rows.length && context.alphabetSearch){
- var letter = context.alphabetSearch.letter;
-
- $(api.table().body()).prepend(
- '<tr class="alphabet-group"><td colspan="' + col_total + '">' + letter + '</td></tr>'
- );
- }
- });
-
- // API method to get the alphabet container node
- this.node = function () {
- return alphabet;
- };
-};
-
-$.fn.DataTable.AlphabetSearch = $.fn.dataTable.AlphabetSearch;
-
-
-// Register a search plug-in
-$.fn.dataTable.ext.feature.push( {
- fnInit: function ( settings ) {
- var search = new $.fn.dataTable.AlphabetSearch( settings );
- return search.node();
- },
- cFeature: 'A'
-} );
-
-
-}(jQuery));