From 00455fc93228e3b95e1cf1ca3300bb91d7ac6c9e Mon Sep 17 00:00:00 2001 From: alex-mashin Date: Sun, 28 Jul 2019 11:28:20 +0700 Subject: [PATCH] Form a list of first letters dynamically Form a list of first letters dynamically, so that list navigation works not for Latin alphabet only. --- jquery.listnav.min-2.1.js | 243 +++++++++++++++++++++++++++++++++----- 1 file changed, 216 insertions(+), 27 deletions(-) diff --git a/jquery.listnav.min-2.1.js b/jquery.listnav.min-2.1.js index b687075..615ee1f 100644 --- a/jquery.listnav.min-2.1.js +++ b/jquery.listnav.min-2.1.js @@ -2,9 +2,9 @@ * * jQuery listnav plugin * Copyright (c) 2009 iHwy, Inc. -* Author: Jack Killpatrick +* Author: Jack Killpatrick, with contributions from Alexander Mashin * -* Version 2.1 (08/09/2009) +* Version 2.2 (28/07/2019) * Requires jQuery 1.3.2, jquery 1.2.6 or jquery 1.2.x plus the jquery dimensions plugin * * Visit http://www.ihwy.com/labs/jquery-listnav-plugin.aspx for more information. @@ -17,41 +17,230 @@ (function($) { $.fn.listnav = function(options) { - var opts = $.extend({}, $.fn.listnav.defaults, options); var letters = ['_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-']; var firstClick = false; opts.prefixes = $.map(opts.prefixes, function(n) { return n.toLowerCase(); }); return this.each(function() { - var $wrapper, list, $list, $letters, $letterCount, id; id = this.id; $wrapper = $('#' + id + '-nav'); $list = $(this); var counts = {}, allCount = 0, isAll = true, numCount = 0, prevLetter = ''; function init() { - $wrapper.append(createLettersHtml()); $letters = $('.ln-letters', $wrapper).slice(0, 1); if (opts.showCounts) $letterCount = $('.ln-letter-count', $wrapper).slice(0, 1); addClasses(); addNoMatchLI(); if (opts.flagDisabled) addDisabledClass(); bindHandlers(); if (!opts.includeAll) $list.show(); if (!opts.includeAll) $('.all', $letters).remove(); if (!opts.includeNums) $('._', $letters).remove(); if (!opts.includeOther) $('.-', $letters).remove(); $(':last', $letters).addClass('ln-last'); if ($.cookie && (opts.cookieName != null)) { var cookieLetter = $.cookie(opts.cookieName); if (cookieLetter != null) opts.initLetter = cookieLetter; } - if (opts.initLetter != '') { firstClick = true; $('.' + opts.initLetter.toLowerCase(), $letters).slice(0, 1).click(); } - else { if (opts.includeAll) $('.all', $letters).addClass('ln-selected'); else { for (var i = ((opts.includeNums) ? 0 : 1); i < letters.length; i++) { if (counts[letters[i]] > 0) { firstClick = true; $('.' + letters[i], $letters).slice(0, 1).click(); break; } } } } + var opts = $.extend({}, $.fn.listnav.defaults, options); + var firstClick = false; + opts.prefixes = $.map(opts.prefixes, function(n) { return n.toLowerCase(); }); + + return this.each(function() { + var $wrapper, list, $list, $letters, $letterCount, id; + id = this.id; + $wrapper = $('#' + id + '-nav'); // user must abide by the convention: