fix <cite> in autocomplete
[wolnelektury.git] / src / wolnelektury / static / js / base.js
index 1626906..1cb62a4 100644 (file)
@@ -1,29 +1,29 @@
 (function($) {
     $(function() {
         $.fn.toggle_slide = function(p) {
-            cont = $(this);
-            short_el = p['short_el'] || $(':first-child', this);
-            long_el = p['long_el'] || short_el.next();
-            button = p['button'];
-            short_text = p['short_text'],
-            long_text = p['long_text'];
+            var cont = $(this);
+            var short_el = p['short_el'] || $(':first-child', this);
+            var long_el = p['long_el'] || short_el.next();
+            var button = p['button'];
+            var short_text = p['short_text'];
+            var long_text = p['long_text'];
 
             var toggle_fun = function(cont, short_el, long_el, button, short_text, long_text) {
-                var toggle = function() {
+                return function () {
                     if (cont.hasClass('short')) {
-                        cont.animate({"height": long_el.attr("cont_h")+'px'}, {duration: "fast" }).removeClass('short');
+                        cont.animate({"height": long_el.attr("cont_h") + 'px'}, {duration: "fast"})
+                            .removeClass('short');
                         short_el.hide();
                         long_el.show();
                         if (button && long_text) button.html(long_text);
                     } else {
-                        cont.animate({"height": short_el.attr("cont_h")+'px'}, {duration: "fast" }).addClass('short');
+                        cont.animate({"height": short_el.attr("cont_h") + 'px'}, {duration: "fast"}).addClass('short');
                         long_el.hide();
                         short_el.show();
                         if (button && short_text) button.html(short_text);
                     }
                     return false;
                 };
-                return toggle;
             };
             if (long_el.html().length <= short_el.html().length)
                 return;
             short_el.show().attr("cont_h", $(this).height());
             $(this).addClass('short');
 
-            if (button && short_text) button.html(short_text);
-            if (button) button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text));
+            if (button && short_text)
+                button.html(short_text);
+            if (button)
+                button.click(toggle_fun(cont, short_el, long_el, button, short_text, long_text));
         };
 
 
 
 
 
-               (function() {
-                       var $current = null;
+        (function() {
+            var $current = null;
             var menu_loaded = false;
-                       $('.hidden-box-wrapper').each(function() {
-                               var $hidden = $('.hidden-box', this);
-                               $('.hidden-box-trigger', this).click(function(event) {
-                                       event.preventDefault();
-                                       if ($current == $hidden) {
-                                               $current = null;
-                                               $hidden.hide('fast');
-                                       } else {
-                                               $current && $current.hide('fast');
-                                               $hidden.show('fast');
-                                               $current = $hidden;
+            $('.hidden-box-wrapper').each(function() {
+                var $hidden = $('.hidden-box', this);
+                $('.hidden-box-trigger', this).click(function(event) {
+                    event.preventDefault();
+                    if ($current == $hidden) {
+                        $current = null;
+                        $hidden.hide('fast');
+                    } else {
+                        $current && $current.hide('fast');
+                        $hidden.show('fast');
+                        $current = $hidden;
                         if ($(this).hasClass('load-menu') && !menu_loaded) {
                             $.ajax({
                                 url: '/katalog/' + LANGUAGE_CODE + '.json',
-                                dataType: "json",
+                                dataType: "json"
                             }).done(function(data) {
                                 $.each(data, function(index, value) {
                                     var $menuitem = $('#menu-' + index);
@@ -86,7 +88,8 @@
                                             $("li", $menuitem).each(function() {
                                                 if ($("a", this).text().toLowerCase().indexOf(s) != -1)
                                                     $(this).show();
-                                                else $(this).hide();
+                                                else
+                                                    $(this).hide();
                                             });
                                         }
                                         else {
                                 menu_loaded = true;
                             });
                         }
-                                       }
-                               });
-                       });
-                   /* this kinda breaks the whole page. */
-                       $('body').click(function(e) {
-                               if ($current == null) return;
-                               var p = $(e.target);
-                               while (p.length) {
-                                       if (p == $current)
-                                               return;
-                                       if (p.hasClass('hidden-box-trigger')
-                                           || p.hasClass('simple-toggler')
+                    }
+                });
+            });
+            /* this kinda breaks the whole page. */
+            $('body').click(function(e) {
+                if ($current == null) return;
+                var p = $(e.target);
+                while (p.length) {
+                    if (p == $current)
+                        return;
+                    if (p.hasClass('hidden-box-trigger')
+                        || p.hasClass('simple-toggler')
                         || p.hasClass('mini-search'))
-                                               return;
-                                       p = p.parent();
-                               }
-                               $current.hide('fast');
-                               $current = null;
-                       });
-               })();
+                        return;
+                    p = p.parent();
+                }
+                $current.hide('fast');
+                $current = null;
+            });
+        })();
 
 
-$('#show-menu').click(function(event) {
-    event.preventDefault();
-    //$('#menu').toggle('slow');
-    $('body').toggleClass('menu-on');
-});
+        $('#show-menu').click(function(event) {
+            event.preventDefault();
+            //$('#menu').toggle('fast');
+            $('body').toggleClass('menu-on');
+        });
 
 
-$('#book-list-nav h2').click(function(event) {
-    event.preventDefault();
-    $('#book-list-nav-index').toggle();
-});
+        $('#book-list-nav').find('h2').click(function(event) {
+            event.preventDefault();
+            $('#book-list-nav-index').toggle();
+        });
 
 
-$('#themes-list-toggle').click(function(event) {
-    event.preventDefault();
-    $('#themes-list').toggle('slow');
-});
+        $('#themes-list-toggle').click(function(event) {
+            event.preventDefault();
+            $('#themes-list').toggle('fast');
+        });
 
 
         $('.book-list-index').click(function(){
-            $('.book-list-show-index').hide('slow');
-            if($(this).parent().next('ul:not(:hidden)').length == 0){
-               $(this).parent().next('ul').toggle('slow');
-           }
+            $('.book-list-show-index').hide('fast');
+            var books_ul = $(this).parent().next().children().first();
+            if(books_ul.first().is(':hidden')){
+                books_ul.toggle('fast');
+            }
             return false;
         });
 
-       $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');});
-
-       $(function(){
-           $("#search").search();});
-
-      $('body').on('click', '.simple-toggler' , function(ev) {
-       ev.preventDefault();
-       var scope = $(this).closest('.simple-toggler-scope');
-       scope.find('.simple-hidden-box').each(function(){
-         var $this = $(this);
-         if ($this.is(':hidden')) {
-           $this.show();
-         } else {
-           $this.hide();
-         }
-         });
-      });
-
-
-    $('.tabbed-filter').each(function() {
-        var tf = this;
-        $('.tab').click(function() {
-            if ($(this).hasClass('active')) {
-                $(this).removeClass('active');
-                $('#' + $(this).attr('data-id')).hide();
-            }
-            else {
-                var $active = $('.active', tf);
-                $active.removeClass('active');
-                $('#' + $active.attr('data-id')).hide();
-                $(this).addClass('active');
-                $('#' + $(this).attr('data-id')).show();
-            }
+        $('.hoverclick').click(function() {$(this).closest('.hoverget').toggleClass('hover');});
+
+        $(function(){
+            $("#search").search();
         });
-    });
 
+        $('body').on('click', '.simple-toggler' , function(ev) {
+            ev.preventDefault();
+            var scope = $(this).closest('.simple-toggler-scope');
+            scope.find('.simple-hidden-box').each(function() {
+                var $this = $(this);
+                if ($this.is(':hidden')) {
+                    $this.show();
+                } else {
+                    $this.hide();
+                }
+            });
+        });
 
-    $('.plain-list-paged').each(function() {
-        // should change on resize?
-        var $plc = $(this);
-        var $pl = $('.plain-list', this);
-
-        var $items = $('p', $pl);
-
-        if ($items.length > 40) {
-            $items.hide();
-            var prev = [0, 0];
-
-            $('.pager', $plc).paging($items.length, {
-                format: '[< ncnnn >]', // define how the navigation should look like and in which order onFormat() get's called
-                perpage: 40,
-                lapping: 0, // don't overlap pages for the moment
-                page: 1, // start at page, can also be "null" or negative
-                onSelect: function (page) {
-                    var data = this.slice;
-                    $items.slice(prev[0], prev[1]).hide();
-                    $items.slice(data[0], data[1]).show();
-                    prev = data;
-                },
-                onFormat: function (type) {
-                    switch (type) {
-                        case 'block': // n and c
-                            return ' <li><a href="#"' + (this.value == this.page ? ' class="current"' : '') + '>' + this.value + '</a></li>';
-                        case 'next': // >
-                            return '<li><a href="#">&gt;</a></li>';
-                        case 'prev': // <
-                            return '<li><a href="#">&lt;</a></li>';
-                        case 'first': // [
-                            return '<li><a href="#">«</a></li>';
-                        case 'last': // ]
-                            return '<li><a href="#">»</a></li>';
-                    }
+
+        $('.tabbed-filter').each(function() {
+            var tf = this;
+            $('.tab').click(function() {
+                if ($(this).hasClass('active')) {
+                    $(this).removeClass('active');
+                    $('#' + $(this).attr('data-id')).hide();
+                }
+                else {
+                    var $active = $('.active', tf);
+                    $active.removeClass('active');
+                    $('#' + $active.attr('data-id')).hide();
+                    $(this).addClass('active');
+                    $('#' + $(this).attr('data-id')).show();
                 }
             });
-        }
-    });
+        });
+
+
+        $('.plain-list-paged').each(function() {
+            // should change on resize?
+            var $plc = $(this);
+            var $pl = $('.plain-list', this);
 
+            var $items = $('p', $pl);
 
+            if ($items.length > 40) {
+                $items.hide();
+                var prev = [0, 0];
+
+                $('.pager', $plc).paging($items.length, {
+                    format: '[< ncnnn >]', // define how the navigation should look like and in which order onFormat() get's called
+                    perpage: 40,
+                    lapping: 0, // don't overlap pages for the moment
+                    page: 1, // start at page, can also be "null" or negative
+                    onSelect: function (page) {
+                        var data = this.slice;
+                        $items.slice(prev[0], prev[1]).hide();
+                        $items.slice(data[0], data[1]).show();
+                        prev = data;
+                    },
+                    onFormat: function (type) {
+                        switch (type) {
+                            case 'block': // n and c
+                                return ' <li><a href="#"' + (this.value == this.page ? ' class="current"' : '') + '>' +
+                                    this.value + '</a></li>';
+                            case 'next': // >
+                                return '<li><a href="#">&rsaquo;</a></li>';
+                            case 'prev': // <
+                                return '<li><a href="#">&lsaquo;</a></li>';
+                            case 'first': // [
+                                return '<li><a href="#">&laquo;</a></li>';
+                            case 'last': // ]
+                                return '<li><a href="#">&raquo;</a></li>';
+                        }
+                    }
+                });
+            }
+        });
+
+        /* global tlite */
+        tlite(function (el) {
+            return $(el).hasClass('tlite-tooltip');
+        });
+
+        /* more/less switch from https://codepen.io/JoshBlackwood/pen/pEwHe */
+        // Hide the extra content initially, using JS so that if JS is disabled, no problemo:
+        $('.read-more-content').addClass('hide');
+        $('.read-more-show, .read-more-hide').removeClass('hide');
+
+        // Set up the toggle effect:
+        $('.read-more-show').on('click', function(e) {
+          $(this).next('.read-more-content').removeClass('hide');
+          $(this).addClass('hide');
+          e.preventDefault();
+        });
+
+        // Changes contributed by @diego-rzg
+        $('.read-more-hide').on('click', function(e) {
+          var p = $(this).parent('.read-more-content');
+          p.addClass('hide');
+          p.prev('.read-more-show').removeClass('hide'); // Hide only the preceding "Read More"
+          e.preventDefault();
+        });
     });
 })(jQuery);