cleanup
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 7 Aug 2023 11:20:53 +0000 (13:20 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 7 Aug 2023 11:20:53 +0000 (13:20 +0200)
18 files changed:
src/catalogue/static/player/openplayer.js [deleted file]
src/catalogue/static/player/player.css [deleted file]
src/catalogue/static/player/player.js [deleted file]
src/catalogue/templates/catalogue/preview_ad_homepage.html
src/catalogue/templates/catalogue/snippets/audiobook_list.html [deleted file]
src/catalogue/templatetags/catalogue_tags.py
src/club/static/club/club.scss [deleted file]
src/club/static/club/form.js [deleted file]
src/funding/static/funding/funding.js [deleted file]
src/wolnelektury/settings/static.py
src/wolnelektury/static/css/simple.css [deleted file]
src/wolnelektury/static/css/tlite.css [deleted file]
src/wolnelektury/static/js/base.js [deleted file]
src/wolnelektury/static/js/contrib/ierange-m2.js [deleted file]
src/wolnelektury/static/js/contrib/jquery.eventdelegation.js [deleted file]
src/wolnelektury/static/js/contrib/jquery.paging.min.js [deleted file]
src/wolnelektury/static/js/contrib/tlite.min.js [deleted file]
src/wolnelektury/static/scss/forum.scss [deleted file]

diff --git a/src/catalogue/static/player/openplayer.js b/src/catalogue/static/player/openplayer.js
deleted file mode 100644 (file)
index 4fe27bd..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-(function($) {
-    $(function() {
-
-
-
-$('.open-player').click(function(event) {
-    event.preventDefault();
-    window.open($(this).attr('href'),
-        'player',
-        'width=422, height=500, scrollbars=1'
-        );
-});
-
-
-
-    });
-})(jQuery);
-
diff --git a/src/catalogue/static/player/player.css b/src/catalogue/static/player/player.css
deleted file mode 100644 (file)
index 829a9a1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#player h1 {
-       font-size: 2em;
-       margin: .5em;
-}
-
-.player-info {
-       margin: 1em;
-}
-
-
-.play {
-       cursor: pointer;
-}
-
-.play:hover {
-       color: #0D7E85;
-}
-
-.daisy-list {
-    list-style: none;
-}
diff --git a/src/catalogue/static/player/player.js b/src/catalogue/static/player/player.js
deleted file mode 100644 (file)
index 69870bb..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-(function($) {
-    $(function() {
-
-      $(".jp-jplayer").each(function() {
-       var $self = $(this);
-        var $root = $self.parent();
-        var $number = $('.number', $root);
-        $self.jPlayer({
-            swfPath: "/static/jplayer/",
-            solution: "html,flash",
-            supplied: $self.attr('data-supplied'),
-            cssSelectorAncestor: "#" + $self.attr("data-player"),
-
-            ready: function() {
-                var player = $(this);
-                var setMedia = function(elem, time=0) {
-                    var li = $(elem).parent();
-                    var media = {}
-
-                    media['mp3'] = li.attr('data-mp3');
-                    media['oga'] = li.attr('data-ogg');
-                    media['id'] = li.attr('data-media-id');
-
-                    $(".title", $root).html(li.html());
-                    player.jPlayer("setMedia", media);
-                    player.jPlayer("pause", time);
-                    return player;
-                };
-
-                $('.play-next', $root).click(function() {
-                    var next = parseInt($number.text()) + 1;
-                    var p = $('.jp-playlist .play:eq(' + (next - 1) + ')', $root);
-                    if (p.length) {
-                        setMedia(p).jPlayer("play");
-                        $number.text(next)
-                    }
-                });
-                $('.play-prev', $root).click(function() {
-                    var next = parseInt($number.text()) - 1;
-                    if (next < 1)
-                        return;
-                    var p = $('.jp-playlist .play:eq(' + (next - 1) + ')', $root);
-                    setMedia(p).jPlayer("play");
-                    $number.text(next)
-                });
-
-                var initialElem = $('.jp-playlist .play', $root).first();
-                var initialTime = 0;
-                if (Modernizr.localstorage) {
-                    try {
-                        audiobooks = JSON.parse(localStorage["audiobook-history"]);
-                    } catch {
-                        audiobooks = {};
-                    }
-                    last = audiobooks[$root.attr("data-book-slug")]
-                    // Fallback for book id;
-                    if (!last) {
-                        last = audiobooks[$root.attr("data-book-id")]
-                    }
-
-                    if (last) {
-                        initialElem = $('[data-media-id="' + last[1] + '"] .play', $root).first();
-                        initialTime = last[2];
-                        $number.text($(".jp-playlist .play", $root).index(initialElem) + 1);
-                    }
-                }
-                setMedia(initialElem, initialTime);
-            },
-
-            timeupdate: function(event) {
-                if (event.jPlayer.status.currentTime && Modernizr.localstorage) {
-                    try {
-                        audiobooks = JSON.parse(localStorage["audiobook-history"]);
-                    } catch {
-                        audiobooks = {};
-                    }
-                    t = event.jPlayer.status.currentTime;
-                    if (t && event.jPlayer.status.duration - t > 10) {
-                        audiobooks[$root.attr("data-book-slug")] = [
-                            Date.now(),
-                            event.jPlayer.status.media.id,
-                            event.jPlayer.status.currentTime
-                        ];
-                    } else {
-                        delete audiobooks[$root.attr("data-book-slug")];
-                    }
-                    // Remove old book id, if present.
-                    delete audiobooks[$root.attr("data-book-id")];
-                    localStorage["audiobook-history"] = JSON.stringify(audiobooks);
-                }
-            }
-        });
-      });
-
-
-
-    });
-})(jQuery)
index d319772..63d90da 100644 (file)
@@ -23,7 +23,7 @@
               <p>Dziękujemy za wsparcie — przeczytaj w prezencie już dzisiaj!</p>
             {% else %}
               <p>Aby przeczytać prapremierę, <strong>dorzuć</strong> się do Wolnych Lektur dowolną wpłatą. Ustaw stałe wsparcie, a będziesz mieć dostęp do kolejnych <strong>prapremier</strong>.</p>
               <p>Dziękujemy za wsparcie — przeczytaj w prezencie już dzisiaj!</p>
             {% else %}
               <p>Aby przeczytać prapremierę, <strong>dorzuć</strong> się do Wolnych Lektur dowolną wpłatą. Ustaw stałe wsparcie, a będziesz mieć dostęp do kolejnych <strong>prapremier</strong>.</p>
-              <a href="#" class="l-button l-button--default l-button--default--dark">Dorzuć się</a>
+             <a href="{{ book.get_absolute_url }}" class="l-button l-button--default l-button--default--dark">Dorzuć się</a>
             {% endif %}
           </div>
         </div>
             {% endif %}
           </div>
         </div>
diff --git a/src/catalogue/templates/catalogue/snippets/audiobook_list.html b/src/catalogue/templates/catalogue/snippets/audiobook_list.html
deleted file mode 100644 (file)
index 73f9f6a..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{% load catalogue_tags %}
-
-{% audiobook_tree orphans books_by_parent %}
-{% for author, group in books_by_author.items %}
-  {% if group %}
-    <a name="{{ author.slug }}"></a>
-    <div class="group">
-      <h2><a href="{{ author.get_absolute_url }}">{{ author }}</a></h2>
-      {% audiobook_tree group books_by_parent %}
-    </div>
-  {% endif %}
-{% endfor %}
index dd0d402..7f34c13 100644 (file)
@@ -151,19 +151,6 @@ def book_tree(book_list, books_by_parent):
         return ''
 
 
         return ''
 
 
-@register.simple_tag
-def audiobook_tree(book_list, books_by_parent):
-    text = "".join("<li><a class='open-player' href='%s'>%s</a>%s</li>" % (
-        reverse("book_player", args=[book.slug]), book.title,
-        audiobook_tree(books_by_parent.get(book, ()), books_by_parent)
-    ) for book in book_list)
-
-    if text:
-        return mark_safe("<ol>%s</ol>" % text)
-    else:
-        return ''
-
-
 @register.simple_tag
 def book_tree_texml(book_list, books_by_parent, depth=1):
     return mark_safe("".join("""
 @register.simple_tag
 def book_tree_texml(book_list, books_by_parent, depth=1):
     return mark_safe("".join("""
diff --git a/src/club/static/club/club.scss b/src/club/static/club/club.scss
deleted file mode 100644 (file)
index ad63bfc..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-.plan-select {
-    margin-bottom: 15px;
-}
-
-.methods {
-    color: #888;
-    line-height: 30px;
-}
-.methods .method {
-    border: 1px solid #888;
-    border-radius: 5px;
-    display: inline-block;
-    padding: 0 5px;
-}
-
-.methods img {
-    height: 30px;
-    margin-right: 5px;
-    vertical-align: middle;
-}
-
-.payment-method.disabled {
-    opacity: .5;
-    filter: grayscale(100%);
-}
-
-.button {
-    box-sizing: border-box;
-    display: inline-block;
-    text-align: center;
-}
-.kwota, .inna .button, .plan-toggle, .inna input {
-    border: 1px solid black;
-    border-radius: 8px;
-    background: none;
-    cursor: pointer;
-    padding: 0;
-    margin-right: 3%;
-    margin-bottom: 10px;
-    line-height: 3em;
-    font-size: 20px;
-}
-.plan-toggle {
-    width: 46.5%;
-}
-.kwota {
-    width: 30%;
-}
-.kwota:after {
-    content: " zł";
-}
-.kwota.yearly {
-    background: orange;
-    
-}
-.inna .button {
-    width: 63%;
-}
-.inna input {
-    width: 60%;
-    padding-left: 1.5%;
-    padding-right: 1.5%;
-    height: 3em !important;
-    text-align: center;
-}
-.chunk-alt {
-    position: relative;
-    overflow: hidden;
-}
-.chunk-alt .chunk {
-    top: 0;
-}
-
-.kwota.active, .plan-toggle.active {
-    background: #9ACD32;
-}
-.inna input {display: none;}
-.inna.active input {display: inline;}
-.inna.active .button {display: none;}
-
-.ambassador {
-    padding: 2em;
-    margin-bottom: 1em;
-    border: 1px solid #ddd;
-    position: relative;
-    min-height: 100px;
-}
-.ambassador.with-photo {
-    padding-right: 145px;
-}
-.ambassador img {
-    border-radius: 100%;
-    height: 100px;
-    width: 100px;
-    position: absolute;
-    top: 35px;
-    right: 30px;
-}
-.ambassador div {
-    text-align: right;
-    line-height: 1.5em;
-}
-
-.club-form-info {
-    line-height: 1.5em;
-}
-
-@media screen and (max-width: 1023px) {
-    .club-form-info {
-        margin-top: 2em;
-    }
-}
-
-
-@media screen and (min-width: 1024px) {
-    .club-form-info {
-        border-left: 1px solid #ddd;
-        padding-left: 2em;
-        margin-left: 2em;
-    }
-    .twocol {
-        display: flex;
-    }
-    .twocol > form, .twocol > div {
-        flex: 1;
-    }
-}
-
-
-.methods {
-    .button {
-        border: 1px solid black;
-        border-radius: 10px;
-        padding: 10px;
-        margin-right: 3%;
-        cursor: pointer;
-
-        &.active {
-            background: #9ACD3240;
-        }
-    }
-}
-
-
-label.required {
-    &::before {
-        content: " * ";
-        color: red;
-    }
-}
-
-
-
-.helptext {
-    position: relative;
-
-    .short {
-        height: 1.5em;
-        overflow: hidden;
-        position: relative;
-        
-        &:after {
-            content:' ';
-            position:absolute;
-            bottom:0;
-            width:25%;
-            height:20px;
-            background-color:transparent;
-            overflow: hidden;
-            /* assume ltr */
-            right:0;
-            background-image:-webkit-linear-gradient(to right,rgba(255,255,255,0),#ffffff 50%);
-            background-image:-moz-linear-gradient(to right,rgba(255,255,255,0),#ffffff 50%);
-            background-image:-o-linear-gradient(to right,rgba(255,255,255,0),#ffffff 50%);
-            background-image:linear-gradient(to right,rgba(255,255,255,0),#ffffff 50%)
-        }
-    }
-
-    .morelink {
-        position: absolute;
-        top: 0;
-        right: 0;
-        &:after {
-            content: " ↓";
-        }
-    }
-}
-
-
-#payment-form {
-    textarea {
-        box-sizing: border-box;
-        padding: 8px;
-        width: 400px;
-        height: 4em;
-    }
-    input[type="text"], input[type="email"] {
-        box-sizing: border-box;
-        width: 400px;
-        padding: 8px;
-        &#id_postal_code {
-            width: 100px;
-        }
-        &#id_postal_town {
-            width: 300px;
-        }
-    }
-    select {
-        box-sizing: border-box;
-        width: 400px;
-        padding: 8px;
-    }
-}
diff --git a/src/club/static/club/form.js b/src/club/static/club/form.js
deleted file mode 100644 (file)
index a32a589..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-$(function() {
-
-    function update_methods() {
-        $("#payment-form .payment-method").addClass("disabled");
-        $("#payment-form .payment-method input").prop("disabled", true);
-        var plan = $("#payment-form .plan:checked");
-        if (plan.length) {
-            $.each(
-                $("#payment-form .plan:checked").attr('data-methods').trim().split(" "),
-                function(i, slug) {
-                    $("#payment-method-" + slug).removeClass("disabled");
-                    $("#payment-method-" + slug + " input").prop("disabled", false);
-                }
-            );
-        }
-    }
-    update_methods();
-    $("#payment-form .plan").change(update_methods);
-
-
-    function qs(key) {
-        key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars
-        var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)"));
-        return match && decodeURIComponent(match[1].replace(/\+/g, " "));
-    }
-
-    $("#payment-form").submit(function() {
-        let camp = qs('pk_campaign');
-        if (!camp && window.location.pathname !== "/pomagam/") {
-            camp = window.location.pathname;
-        }
-        let dims = camp ? {dimension1: camp} : {};
-        _paq.push(['trackGoal', 12, parseFloat($("#id_amount").val()), dims]);
-    });
-});
diff --git a/src/funding/static/funding/funding.js b/src/funding/static/funding/funding.js
deleted file mode 100644 (file)
index 765bddc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-$(function() {
-    $('.funding .close').click(function(e) {\r
-        e.preventDefault();
-        var fundNode = $(e.target).parent();\r
-        fundNode.slideUp(function(){fundingHandle.show()});
-        if(Modernizr.localstorage)
-            localStorage['hide-offer-id'] = fundNode.attr('data-offer-id');\r
-    });
-
-    var fundingTopHeader = $('#funding-closeable');
-    var fundingHandle = $('#funding-handle');
-    fundingHandle.click(function(e) {
-        fundingTopHeader.slideDown();
-        $(e.target).hide();
-        if(Modernizr.localstorage)
-            localStorage.removeItem('hide-offer-id');
-    });\r
-});
\ No newline at end of file
index 15f758a..e91c742 100644 (file)
@@ -32,34 +32,6 @@ PIPELINE = {
             ],
             'output_filename': 'css/compressed/2022.css',
         },
             ],
             'output_filename': 'css/compressed/2022.css',
         },
-        'main': {
-            # styles both for mobile and for big screen
-            'source_filenames': [
-                'css/import/gelasio.css',
-
-                'css/jquery.countdown.css',
-                'jplayer/jplayer.blue.monday.css',
-
-                'sponsors/css/sponsors.css',
-
-                'annoy/banner.scss',
-
-                'css/ui-lightness/jquery-ui-1.8.16.custom.css',
-
-                'css/tlite.css',
-
-                'scss/main.scss',
-                'club/club.scss',
-            ],
-            'output_filename': 'css/compressed/main.css',
-        },
-        'book': {
-            'source_filenames': [
-                'css/import/gelasio.css',
-                'css/master.book.css',
-            ],
-            'output_filename': 'css/compressed/book.css',
-        },
         'book_text': {
             'source_filenames': [
                 'css/import/gelasio.css',
         'book_text': {
             'source_filenames': [
                 'css/import/gelasio.css',
@@ -73,71 +45,12 @@ PIPELINE = {
             ],
             'output_filename': 'css/compressed/book_text.css',
         },
             ],
             'output_filename': 'css/compressed/book_text.css',
         },
-        'forum': {
-            'source_filenames': [
-                'scss/forum.scss',
-            ],
-            'output_filename': 'css/compressed/compressed/forum.css',
-        },
-        'picture': {
-            'source_filenames': [
-                'css/import/gelasio.css',
-                'css/master.book.css',
-                'css/master.picture.css',
-            ],
-            'output_filename': 'css/compressed/picture.css',
-        },
-        'player': {
-            'source_filenames': [
-                'jplayer/jplayer.blue.monday.css',
-                'player/player.css',
-            ],
-            'output_filename': 'css/compressed/player.css',
-        },
-        'simple': {
-            'source_filenames': ('css/simple.css',),
-            'output_filename': 'css/compressed/simple.css',
-        },
         'widget': {
             'source_filenames': ('scss/widget.scss',),
             'output_filename': 'css/compressed/widget.css',
         },
     },
     'JAVASCRIPT': {
         'widget': {
             'source_filenames': ('scss/widget.scss',),
             'output_filename': 'css/compressed/widget.css',
         },
     },
     'JAVASCRIPT': {
-        'base': {
-            'source_filenames': (
-                'js/contrib/jquery.cycle2.min.js',
-                'js/contrib/jquery.jqmodal.js',
-                'js/contrib/jquery.form.js',
-                'js/contrib/jquery.paging.min.js',
-                'js/contrib/jquery.countdown.js', 'js/contrib/jquery.countdown-pl.js',
-                'js/contrib/jquery.countdown-de.js', 'js/contrib/jquery.countdown-uk.js',
-                'js/contrib/jquery.countdown-es.js', 'js/contrib/jquery.countdown-lt.js',
-                'js/contrib/jquery.countdown-ru.js', 'js/contrib/jquery.countdown-fr.js',
-                'js/contrib/jquery.shorten.js',
-
-                'js/contrib/jquery-ui-1.8.16.custom.min.js',
-
-                'js/contrib/tlite.min.js',
-
-                'jplayer/jquery.jplayer.min.js',
-                'jplayer/jplayer.playlist.min.js',
-                'player/player.js',
-
-                'js/locale.js',
-                'js/dialogs.js',
-                'js/base.js',
-                'pdcounter/pdcounter.js',
-                'sponsors/js/sponsors.js',
-                'player/openplayer.js',
-                'js/search.js',
-                'funding/funding.js',
-                'club/form.js',
-
-                'annoy/banner.js',
-                ),
-            'output_filename': 'js/base.min.js',
-        },
         '2022': {
             'source_filenames': [
                 '2022/scripts/vendor.js',
         '2022': {
             'source_filenames': [
                 '2022/scripts/vendor.js',
@@ -162,14 +75,6 @@ PIPELINE = {
             ],
             'output_filename': 'js/2022.min.js'
         },
             ],
             'output_filename': 'js/2022.min.js'
         },
-        'player': {
-            'source_filenames': [
-                'jplayer/jquery.jplayer.min.js',
-                'jplayer/jplayer.playlist.min.js',
-                'player/player.js',
-            ],
-            'output_filename': 'js/player.min.js',
-        },
         '2022_player': {
             'source_filenames': [
                 'js/contrib/jplayer/jquery.jplayer.min.js',
         '2022_player': {
             'source_filenames': [
                 'js/contrib/jplayer/jquery.jplayer.min.js',
@@ -178,23 +83,8 @@ PIPELINE = {
             ],
             'output_filename': 'js/2022_player.min.js',
         },
             ],
             'output_filename': 'js/2022_player.min.js',
         },
-        'book': {
-            'source_filenames': [
-                'js/contrib/jquery.eventdelegation.js',
-                'js/contrib/jquery.scrollto.js',
-                'js/contrib/jquery.highlightfade.js',
-                'js/book_text/other.js',
-                'js/book.js',
-
-                'js/contrib/raphael-min.js',
-                'js/contrib/progressSpin.min.js',
-                'js/picture.js',
-            ],
-            'output_filename': 'js/book.min.js',
-        },
         'book_text': {
             'source_filenames': [
         'book_text': {
             'source_filenames': [
-                'js/contrib/jquery.cycle2.min.js',
                 'js/contrib/jquery.form.js',
                 'js/contrib/jquery.jqmodal.js',
                 'js/book_text/info.js',
                 'js/contrib/jquery.form.js',
                 'js/contrib/jquery.jqmodal.js',
                 'js/book_text/info.js',
@@ -209,22 +99,11 @@ PIPELINE = {
 
                 'js/contrib/jquery.highlightfade.js',
                 'js/contrib/raphael-min.js',
 
                 'js/contrib/jquery.highlightfade.js',
                 'js/contrib/raphael-min.js',
-                'player/openplayer.js',
                 'js/contrib/progressSpin.min.js',
                 'annoy/banner.js',
             ],
             'output_filename': 'js/book_text.js',
         },
                 'js/contrib/progressSpin.min.js',
                 'annoy/banner.js',
             ],
             'output_filename': 'js/book_text.js',
         },
-        'picture': {
-            'source_filenames': [
-                'js/picture.js',
-            ],
-            'output_filename': 'js/picture.min.js',
-        },
-        'book_ie': {
-            'source_filenames': ('js/contrib/ierange-m2.js',),
-            'output_filename': 'js/book_ie.min.js',
-        },
         'widget': {
             'source_filenames': (
                 'js/contrib/jquery.js',
         'widget': {
             'source_filenames': (
                 'js/contrib/jquery.js',
diff --git a/src/wolnelektury/static/css/simple.css b/src/wolnelektury/static/css/simple.css
deleted file mode 100644 (file)
index f723889..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Legacy simple style for some very old pages. */
-
-html {
-    margin: 0;
-}
-
-body {
-    margin: 0;
-    padding: 1em;
-    color: #2F4110;
-    background: #FFF url(/static/img/bg.png) repeat-x;
-    font-size: .75em;
-    font-family: Verdana,Arial,Helvetica,sans-serif;
-}
-
-
-
-#body {
-    margin-top: 2em;
-/*
-    max-width: 900px;
-    margin:auto;
-*/
-    margin-left: 400px;
-}
-
-#logo {
-    float: left;
-    margin-left: 100px;
-    margin-top: 4em;
-}
-
-h1 {
-    font: bold 2.2em Arial,sans-serif;
-    padding-top: .7em;
-    margin-bottom: .2em;
-}
-
-
-h2 {
-    font-size: 1.1em;
-    margin:0;
-}
-
-a {
-    color: #295158;
-    text-decoration: none;
-}
-
-
-.plain li {
-    list-style: none;
-}
-
-li {
-    margin: 1em;
-}
-
-.clr {
-    clear: both;
-}
-
-
-.more {
-    text-align: right;
-}
-
-table {
-    margin-top: 1em;
-}
-
-th {
-    font-weight: normal;
-    text-align: left;
-}
diff --git a/src/wolnelektury/static/css/tlite.css b/src/wolnelektury/static/css/tlite.css
deleted file mode 100644 (file)
index af70a05..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-.tlite {
-  background: #111;
-  color: white;
-  font-family: sans-serif;
-  font-size: 0.8rem;
-  font-weight: normal;
-  text-decoration: none;
-  text-align: left;
-  padding: 0.6em 0.75rem;
-  border-radius: 4px;
-  position: absolute;
-  opacity: 0;
-  visibility: hidden;
-  transition: opacity 0.4s;
-  white-space: nowrap;
-  box-shadow: 0 0.5rem 1rem -0.5rem black;
-  z-index: 1000;
-  -webkit-backface-visibility: hidden;
-}
-
-.tlite-table td,
-.tlite-table th {
-  position: relative;
-}
-
-.tlite-visible {
-  visibility: visible;
-  opacity: 0.9;
-}
-
-.tlite::before {
-  content: ' ';
-  display: block;
-  background: inherit;
-  width: 10px;
-  height: 10px;
-  position: absolute;
-  transform: rotate(45deg);
-}
-
-.tlite-n::before {
-  top: -3px;
-  left: 50%;
-  margin-left: -5px;
-}
-
-.tlite-nw::before {
-  top: -3px;
-  left: 10px;
-}
-
-.tlite-ne::before {
-  top: -3px;
-  right: 10px;
-}
-
-.tlite-s::before {
-  bottom: -3px;
-  left: 50%;
-  margin-left: -5px;
-}
-
-.tlite-se::before {
-  bottom: -3px;
-  right: 10px;
-}
-
-.tlite-sw::before {
-  bottom: -3px;
-  left: 10px;
-}
-
-.tlite-w::before {
-  left: -3px;
-  top: 50%;
-  margin-top: -5px;
-}
-
-.tlite-e::before {
-  right: -3px;
-  top: 50%;
-  margin-top: -5px;
-}
diff --git a/src/wolnelektury/static/js/base.js b/src/wolnelektury/static/js/base.js
deleted file mode 100644 (file)
index 01c6d4e..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-(function($) {
-    $(function() {
-        $.fn.toggle_slide = function(p) {
-            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) {
-                return function () {
-                    if (cont.hasClass('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');
-                        long_el.hide();
-                        short_el.show();
-                        if (button && short_text) button.html(short_text);
-                    }
-                    return false;
-                };
-            };
-            if (long_el.html().length <= short_el.html().length)
-                return;
-
-            // ensure long element shown first
-            long_el.show();short_el.hide();
-            long_el.attr("cont_h", $(this).height()).hide();
-            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));
-        };
-
-
-        // Fragments
-        $('.fragment-with-short').each(function() {
-            $(this).toggle_slide({
-                short_el: $('.fragment-short-text', this),
-                long_el: $('.fragment-long-text', this),
-                button: $('.toggle', this)
-            })
-        });
-        $('#description').each(function() {
-            $(this).toggle_slide({
-                short_el: $('#description-short', this),
-                long_el: $('#description-long', this),
-                button: $(this)
-            })
-        });
-
-        $('.more-expand').each(function () {
-            $(this).shorten({
-                showChars: 150,
-                moreText: "więcej",
-                lessText: "mniej"
-            });
-        });
-
-
-        $('.carousel').on('cycle-before', function(event, optionHash, outgoingSlideEl, incomingSlideEl, forwardFlag) {
-            $("iframe", outgoingSlideEl).attr("src", '');
-            $("iframe", incomingSlideEl).attr("src", $("iframe", incomingSlideEl).attr('data-src'));
-        });
-        $('.carousel section').first().each(function() {
-            $("iframe", this).attr("src", $("iframe", this).attr('data-src'));
-        });
-
-        $(".carousel").each(function() {
-            opts = {};
-            if ($('html').hasClass('media-eink')) {
-                opts.fx = 'none'
-            }
-            $(this).cycle(opts);
-        });
-
-
-        (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;
-                        if ($(this).hasClass('load-menu') && !menu_loaded) {
-                            $.ajax({
-                                url: '/katalog/' + LANGUAGE_CODE + '.json',
-                                dataType: "json"
-                            }).done(function(data) {
-                                $.each(data, function(index, value) {
-                                    var $menuitem = $('#menu-' + index);
-                                    $menuitem.html(value);
-                                    var $minisearch = $("<input class='mini-search' style='margin-bottom: 1em' />");
-                                    $minisearch.keyup(function() {
-                                        var s = $(this).val().toLowerCase();
-                                        if (s) {
-                                            $("li", $menuitem).each(function() {
-                                                if ($("a", this).text().toLowerCase().indexOf(s) != -1)
-                                                    $(this).show();
-                                                else
-                                                    $(this).hide();
-                                            });
-                                        }
-                                        else {
-                                            $("li", $menuitem).css("display", "");
-                                        }
-                                    });
-                                    $menuitem.prepend($minisearch);
-                                });
-                                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')
-                        || p.hasClass('mini-search'))
-                        return;
-                    p = p.parent();
-                }
-                $current.hide('fast');
-                $current = null;
-            });
-        })();
-
-
-        $('#show-menu').click(function(event) {
-            event.preventDefault();
-            //$('#menu').toggle('fast');
-            $('body').toggleClass('menu-on');
-        });
-
-
-        $('#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('fast');
-        });
-
-
-        $('.book-list-index').click(function(){
-            $('.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');});
-        $('.hoverclick').keydown(function(event){ 
-            var keyCode = (event.keyCode ? event.keyCode : event.which);   
-            if (keyCode == 13) {
-                $(this).trigger('click');
-            }
-        });
-
-        $(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();
-                }
-            });
-        });
-
-
-        $('.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();
-        });
-
-
-        function update_info() {
-            var amount = parseInt($("#id_amount").val());
-            var monthly =  $("#id_monthly").val() == 'True';
-            if (monthly) slug = "monthly";
-            else if (amount >= parseInt($("#plan-single").attr('data-min-for-year'))) slug = 'single-year';
-            else slug = 'single';
-
-            var chunk = $('.club-form-info .chunk-' + slug);
-            if (chunk.css('display') == 'none') {
-                $('.chunk-alt').css('height', $('.chunk-alt').height());
-                $('.chunk-alt .chunk').css('position', 'absolute');
-
-                $('.club-form-info .chunk').fadeOut();
-                $('.club-form-info .chunk.chunk-' + slug).fadeIn(function() {
-                    $('.chunk-alt .chunk').css('position', 'static');
-                    $('.chunk-alt').css('height', 'auto');
-                });
-                $('.chunk-alt').animate({height: chunk.height()}, 100);
-            }
-        }
-        
-        $("#id_amount").val($("#plan-monthly").attr('data-amount'));
-        
-        $(".button.kwota").click(function() {
-            var plan = $(this).closest('.plan');
-            $('.kwota', plan).removeClass('active')
-            $('.inna', plan).removeClass('active')
-            $(this).addClass('active');
-
-            var amount = $(this).text();
-            plan.attr("data-amount", amount);
-            $("#id_amount").val(amount);
-
-            update_info();
-            return false;
-        });
-
-        $(".plan-toggle").click(function() {
-            $(".plan-toggle").removeClass('active');
-            $(this).addClass('active')
-            $(".plan").hide();
-            var plan = $("#" + $(this).attr('data-plan'));
-            plan.show();
-            $("#id_amount").val(plan.attr('data-amount'));
-            $("#id_monthly").val(plan.attr('data-monthly'));
-
-            update_info();
-            return false;
-        });
-
-        $(".inna .button").click(function() {
-            var plan = $(this).closest('.plan');
-            $('.kwota', plan).removeClass('active');
-            $(this).parent().addClass('active');
-            $('input', plan).focus();
-
-            var amount = $('input', $(this).parent()).val();
-            plan.attr("data-amount", amount);
-            $("#id_amount").val(amount);
-
-            update_info();
-            return false;
-        });
-        
-        $(".inna input").on('input', function() {
-            var plan = $(this).closest('.plan');
-            $('.kwota', plan).removeClass('active');
-            var amount = $(this).val();
-            plan.attr("data-amount", amount);
-            $("#id_amount").val(amount);
-
-            update_info();
-            return false;
-        });
-
-        $("#id_method").val('payu-re');
-        $(".methods .button").click(function() {
-            $("#id_method").val($(this).attr('data-method'));
-            $(".methods .button").removeClass('active');
-            $(this).addClass("active");
-        });
-
-
-        $("#skiplink-search").click(function() {
-            console.log('skiplink search');
-            $("#search").focus();
-            return false;
-        });
-        
-        // experiments
-        $(".experiment input").on('change', function() {
-            let name = $(this).attr('name');
-            let val = $(this).val();
-            document.cookie = 'EXPERIMENT_' + name + '=' + val + '; path=/; max-age=31536000';
-            window.location.reload(true);
-        });
-    });
-})(jQuery);
-
diff --git a/src/wolnelektury/static/js/contrib/ierange-m2.js b/src/wolnelektury/static/js/contrib/ierange-m2.js
deleted file mode 100644 (file)
index e87738b..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
-  DOM Ranges for Internet Explorer (m2)
-  
-  Copyright (c) 2009 Tim Cameron Ryan
-  Released under the MIT/X License
- */
-/*
-  Range reference:
-    http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html
-    http://mxr.mozilla.org/mozilla-central/source/content/base/src/nsRange.cpp
-    https://developer.mozilla.org/En/DOM:Range
-  Selection reference:
-    http://trac.webkit.org/browser/trunk/WebCore/page/DOMSelection.cpp
-  TextRange reference:
-    http://msdn.microsoft.com/en-us/library/ms535872.aspx
-  Other links:
-    http://jorgenhorstink.nl/test/javascript/range/range.js
-    http://jorgenhorstink.nl/2006/07/05/dom-range-implementation-in-ecmascript-completed/
-    http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html
-*/
-
-//[TODO] better exception support
-
-(function () { // sandbox
-
-/*
-  DOM functions
- */
-
-var DOMUtils = {
-       findChildPosition: function (node) {
-               for (var i = 0; node = node.previousSibling; i++)
-                       continue;
-               return i;
-       },
-       isDataNode: function (node) {
-               return node && node.nodeValue !== null && node.data !== null;
-       },
-       isAncestorOf: function (parent, node) {
-               return !DOMUtils.isDataNode(parent) &&
-                   (parent.contains(DOMUtils.isDataNode(node) ? node.parentNode : node) ||                 
-                   node.parentNode == parent);
-       },
-       isAncestorOrSelf: function (root, node) {
-               return DOMUtils.isAncestorOf(root, node) || root == node;
-       },
-       findClosestAncestor: function (root, node) {
-               if (DOMUtils.isAncestorOf(root, node))
-                       while (node && node.parentNode != root)
-                               node = node.parentNode;
-               return node;
-       },
-       getNodeLength: function (node) {
-               return DOMUtils.isDataNode(node) ? node.length : node.childNodes.length;
-       },
-       splitDataNode: function (node, offset) {
-               if (!DOMUtils.isDataNode(node))
-                       return false;
-               var newNode = node.cloneNode(false);
-               node.deleteData(offset, node.length);
-               newNode.deleteData(0, offset);
-               node.parentNode.insertBefore(newNode, node.nextSibling);
-       }
-};
-
-/*
-  Text Range utilities
-  functions to simplify text range manipulation in ie
- */
-
-var TextRangeUtils = {
-       convertToDOMRange: function (textRange, document) {
-               function adoptBoundary(domRange, textRange, bStart) {
-                       // iterate backwards through parent element to find anchor location
-                       var cursorNode = document.createElement('a'), cursor = textRange.duplicate();
-                       cursor.collapse(bStart);
-                       var parent = cursor.parentElement();
-                       do {
-                               parent.insertBefore(cursorNode, cursorNode.previousSibling);
-                               cursor.moveToElementText(cursorNode);
-                       } while (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) > 0 && cursorNode.previousSibling);
-
-                       // when we exceed or meet the cursor, we've found the node
-                       if (cursor.compareEndPoints(bStart ? 'StartToStart' : 'StartToEnd', textRange) == -1 && cursorNode.nextSibling) {
-                               // data node
-                               cursor.setEndPoint(bStart ? 'EndToStart' : 'EndToEnd', textRange);
-                               domRange[bStart ? 'setStart' : 'setEnd'](cursorNode.nextSibling, cursor.text.length);
-                       } else {
-                               // element
-                               domRange[bStart ? 'setStartBefore' : 'setEndBefore'](cursorNode);
-                       }
-                       cursorNode.parentNode.removeChild(cursorNode);
-               }
-       
-               // return a DOM range
-               var domRange = new DOMRange(document);
-               adoptBoundary(domRange, textRange, true);
-               adoptBoundary(domRange, textRange, false);
-               return domRange;
-       },
-
-       convertFromDOMRange: function (domRange) {
-               function adoptEndPoint(textRange, domRange, bStart) {
-                       // find anchor node and offset
-                       var container = domRange[bStart ? 'startContainer' : 'endContainer'];
-                       var offset = domRange[bStart ? 'startOffset' : 'endOffset'], textOffset = 0;
-                       var anchorNode = DOMUtils.isDataNode(container) ? container : container.childNodes[offset];
-                       var anchorParent = DOMUtils.isDataNode(container) ? container.parentNode : container;
-                       // visible data nodes need a text offset
-                       if (container.nodeType == 3 || container.nodeType == 4)
-                               textOffset = offset;
-
-                       // create a cursor element node to position range (since we can't select text nodes)
-                       var cursorNode = domRange._document.createElement('a');
-                       anchorParent.insertBefore(cursorNode, anchorNode);
-                       var cursor = domRange._document.body.createTextRange();
-                       cursor.moveToElementText(cursorNode);
-                       cursorNode.parentNode.removeChild(cursorNode);
-                       // move range
-                       textRange.setEndPoint(bStart ? 'StartToStart' : 'EndToStart', cursor);
-                       textRange[bStart ? 'moveStart' : 'moveEnd']('character', textOffset);
-               }
-               
-               // return an IE text range
-               var textRange = domRange._document.body.createTextRange();
-               adoptEndPoint(textRange, domRange, true);
-               adoptEndPoint(textRange, domRange, false);
-               return textRange;
-       }
-};
-
-/*
-  DOM Range
- */
-function DOMRange(document) {
-       // save document parameter
-       this._document = document;
-       
-       // initialize range
-//[TODO] this should be located at document[0], document[0]
-       this.startContainer = this.endContainer = document.body;
-       this.endOffset = DOMUtils.getNodeLength(document.body);
-}
-DOMRange.START_TO_START = 0;
-DOMRange.START_TO_END = 1;
-DOMRange.END_TO_END = 2;
-DOMRange.END_TO_START = 3;
-
-DOMRange.prototype = {
-       // public properties
-       startContainer: null,
-       startOffset: 0,
-       endContainer: null,
-       endOffset: 0,
-       commonAncestorContainer: null,
-       collapsed: false,
-       // private properties
-       _document: null,
-       
-       // private methods
-       _refreshProperties: function () {
-               // collapsed attribute
-               this.collapsed = (this.startContainer == this.endContainer && this.startOffset == this.endOffset);
-               // find common ancestor
-               var node = this.startContainer;
-               while (node && node != this.endContainer && !DOMUtils.isAncestorOf(node, this.endContainer))
-                       node = node.parentNode;
-               this.commonAncestorContainer = node;
-       },
-       
-       // range methods
-//[TODO] collapse if start is after end, end is before start
-       setStart: function(container, offset) {
-               this.startContainer = container;
-               this.startOffset = offset;
-               this._refreshProperties();
-       },
-       setEnd: function(container, offset) {
-               this.endContainer = container;
-               this.endOffset = offset;
-               this._refreshProperties();
-       },
-       setStartBefore: function (refNode) {
-               // set start to beore this node
-               this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode));
-       },
-       setStartAfter: function (refNode) {
-               // select next sibling
-               this.setStart(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1);
-       },
-       setEndBefore: function (refNode) {
-               // set end to beore this node
-               this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode));
-       },
-       setEndAfter: function (refNode) {
-               // select next sibling
-               this.setEnd(refNode.parentNode, DOMUtils.findChildPosition(refNode) + 1);
-       },
-       selectNode: function (refNode) {
-               this.setStartBefore(refNode);
-               this.setEndAfter(refNode);
-       },
-       selectNodeContents: function (refNode) {
-               this.setStart(refNode, 0);
-               this.setEnd(refNode, DOMUtils.getNodeLength(refNode));
-       },
-       collapse: function (toStart) {
-               if (toStart)
-                       this.setEnd(this.startContainer, this.startOffset);
-               else
-                       this.setStart(this.endContainer, this.endOffset);
-       },
-
-       // editing methods
-       cloneContents: function () {
-               // clone subtree
-               return (function cloneSubtree(iterator) {
-                       for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) {
-                               node = node.cloneNode(!iterator.hasPartialSubtree());
-                               if (iterator.hasPartialSubtree())
-                                       node.appendChild(cloneSubtree(iterator.getSubtreeIterator()));
-                               frag.appendChild(node);
-                       }
-                       return frag;
-               })(new RangeIterator(this));
-       },
-       extractContents: function () {
-               // cache range and move anchor points
-               var range = this.cloneRange();
-               if (this.startContainer != this.commonAncestorContainer)
-                       this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer));
-               this.collapse(true);
-               // extract range
-               return (function extractSubtree(iterator) {
-                       for (var node, frag = document.createDocumentFragment(); node = iterator.next(); ) {
-                               iterator.hasPartialSubtree() ? node = node.cloneNode(false) : iterator.remove();
-                               if (iterator.hasPartialSubtree())
-                                       node.appendChild(extractSubtree(iterator.getSubtreeIterator()));
-                               frag.appendChild(node);
-                       }
-                       return frag;
-               })(new RangeIterator(range));
-       },
-       deleteContents: function () {
-               // cache range and move anchor points
-               var range = this.cloneRange();
-               if (this.startContainer != this.commonAncestorContainer)
-                       this.setStartAfter(DOMUtils.findClosestAncestor(this.commonAncestorContainer, this.startContainer));
-               this.collapse(true);
-               // delete range
-               (function deleteSubtree(iterator) {
-                       while (iterator.next())
-                               iterator.hasPartialSubtree() ? deleteSubtree(iterator.getSubtreeIterator()) : iterator.remove();
-               })(new RangeIterator(range));
-       },
-       insertNode: function (newNode) {
-               // set original anchor and insert node
-               if (DOMUtils.isDataNode(this.startContainer)) {
-                       DOMUtils.splitDataNode(this.startContainer, this.startOffset);
-                       this.startContainer.parentNode.insertBefore(newNode, this.startContainer.nextSibling);
-               } else {
-                       this.startContainer.insertBefore(newNode, this.startContainer.childNodes[this.startOffset]);
-               }
-               // resync start anchor
-               this.setStart(this.startContainer, this.startOffset);
-       },
-       surroundContents: function (newNode) {
-               // extract and surround contents
-               var content = this.extractContents();
-               this.insertNode(newNode);
-               newNode.appendChild(content);
-               this.selectNode(newNode);
-       },
-
-       // other methods
-       compareBoundaryPoints: function (how, sourceRange) {
-               // get anchors
-               var containerA, offsetA, containerB, offsetB;
-               switch (how) {
-                   case DOMRange.START_TO_START:
-                   case DOMRange.START_TO_END:
-                       containerA = this.startContainer;
-                       offsetA = this.startOffset;
-                       break;
-                   case DOMRange.END_TO_END:
-                   case DOMRange.END_TO_START:
-                       containerA = this.endContainer;
-                       offsetA = this.endOffset;
-                       break;
-               }
-               switch (how) {
-                   case DOMRange.START_TO_START:
-                   case DOMRange.END_TO_START:
-                       containerB = sourceRange.startContainer;
-                       offsetB = sourceRange.startOffset;
-                       break;
-                   case DOMRange.START_TO_END:
-                   case DOMRange.END_TO_END:
-                       containerB = sourceRange.endContainer;
-                       offsetB = sourceRange.endOffset;
-                       break;
-               }
-               
-               // compare
-               return containerA.sourceIndex < containerB.sourceIndex ? -1 :
-                   containerA.sourceIndex == containerB.sourceIndex ?
-                       offsetA < offsetB ? -1 : offsetA == offsetB ? 0 : 1
-                       : 1;
-       },
-       cloneRange: function () {
-               // return cloned range
-               var range = new DOMRange(this._document);
-               range.setStart(this.startContainer, this.startOffset);
-               range.setEnd(this.endContainer, this.endOffset);
-               return range;
-       },
-       detach: function () {
-//[TODO] Releases Range from use to improve performance. 
-       },
-       toString: function () {
-               return TextRangeUtils.convertFromDOMRange(this).text;
-       },
-       createContextualFragment: function (tagString) {
-               // parse the tag string in a context node
-               var content = (DOMUtils.isDataNode(this.startContainer) ? this.startContainer.parentNode : this.startContainer).cloneNode(false);
-               content.innerHTML = tagString;
-               // return a document fragment from the created node
-               for (var fragment = this._document.createDocumentFragment(); content.firstChild; )
-                       fragment.appendChild(content.firstChild);
-               return fragment;
-       }
-};
-
-/*
-  Range iterator
- */
-
-function RangeIterator(range) {
-       this.range = range;
-       if (range.collapsed)
-               return;
-
-//[TODO] ensure this works
-       // get anchors
-       var root = range.commonAncestorContainer;
-       this._next = range.startContainer == root && !DOMUtils.isDataNode(range.startContainer) ?
-           range.startContainer.childNodes[range.startOffset] :
-           DOMUtils.findClosestAncestor(root, range.startContainer);
-       this._end = range.endContainer == root && !DOMUtils.isDataNode(range.endContainer) ?
-           range.endContainer.childNodes[range.endOffset] :
-           DOMUtils.findClosestAncestor(root, range.endContainer).nextSibling;
-}
-
-RangeIterator.prototype = {
-       // public properties
-       range: null,
-       // private properties
-       _current: null,
-       _next: null,
-       _end: null,
-
-       // public methods
-       hasNext: function () {
-               return !!this._next;
-       },
-       next: function () {
-               // move to next node
-               var current = this._current = this._next;
-               this._next = this._current && this._current.nextSibling != this._end ?
-                   this._current.nextSibling : null;
-
-               // check for partial text nodes
-               if (DOMUtils.isDataNode(this._current)) {
-                       if (this.range.endContainer == this._current)
-                               (current = current.cloneNode(true)).deleteData(this.range.endOffset, current.length - this.range.endOffset);
-                       if (this.range.startContainer == this._current)
-                               (current = current.cloneNode(true)).deleteData(0, this.range.startOffset);
-               }
-               return current;
-       },
-       remove: function () {
-               // check for partial text nodes
-               if (DOMUtils.isDataNode(this._current) &&
-                   (this.range.startContainer == this._current || this.range.endContainer == this._current)) {
-                       var start = this.range.startContainer == this._current ? this.range.startOffset : 0;
-                       var end = this.range.endContainer == this._current ? this.range.endOffset : this._current.length;
-                       this._current.deleteData(start, end - start);
-               } else
-                       this._current.parentNode.removeChild(this._current);
-       },
-       hasPartialSubtree: function () {
-               // check if this node be partially selected
-               return !DOMUtils.isDataNode(this._current) &&
-                   (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer) ||
-                       DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer));
-       },
-       getSubtreeIterator: function () {
-               // create a new range
-               var subRange = new DOMRange(this.range._document);
-               subRange.selectNodeContents(this._current);
-               // handle anchor points
-               if (DOMUtils.isAncestorOrSelf(this._current, this.range.startContainer))
-                       subRange.setStart(this.range.startContainer, this.range.startOffset);
-               if (DOMUtils.isAncestorOrSelf(this._current, this.range.endContainer))
-                       subRange.setEnd(this.range.endContainer, this.range.endOffset);
-               // return iterator
-               return new RangeIterator(subRange);
-       }
-};
-
-/*
-  DOM Selection
- */
-//[NOTE] This is a very shallow implementation of the Selection object, based on Webkit's
-// implementation and without redundant features. Complete selection manipulation is still
-// possible with just removeAllRanges/addRange/getRangeAt.
-
-function DOMSelection(document) {
-       // save document parameter
-       this._document = document;
-       
-       // add DOM selection handler
-       var selection = this;
-       document.attachEvent('onselectionchange', function () { selection._selectionChangeHandler(); });
-}
-
-DOMSelection.prototype = {
-       // public properties
-       rangeCount: 0,
-       // private properties
-       _document: null,
-       
-       // private methods
-       _selectionChangeHandler: function () {
-               // check if there exists a range
-               this.rangeCount = this._selectionExists(this._document.selection.createRange()) ? 1 : 0;
-       },
-       _selectionExists: function (textRange) {
-               // checks if a created text range exists or is an editable cursor
-               return textRange.compareEndPoints('StartToEnd', textRange) != 0 ||
-                   textRange.parentElement().isContentEditable;
-       },
-       
-       // public methods
-       addRange: function (range) {
-               // add range or combine with existing range
-               var selection = this._document.selection.createRange(), textRange = TextRangeUtils.convertFromDOMRange(range);
-               if (!this._selectionExists(selection))
-               {
-                       // select range
-                       textRange.select();
-               }
-               else
-               {
-                       // only modify range if it intersects with current range
-                       if (textRange.compareEndPoints('StartToStart', selection) == -1)
-                               if (textRange.compareEndPoints('StartToEnd', selection) > -1 &&
-                                   textRange.compareEndPoints('EndToEnd', selection) == -1)
-                                       selection.setEndPoint('StartToStart', textRange);
-                       else
-                               if (textRange.compareEndPoints('EndToStart', selection) < 1 &&
-                                   textRange.compareEndPoints('EndToEnd', selection) > -1)
-                                       selection.setEndPoint('EndToEnd', textRange);
-                       selection.select();
-               }
-       },
-       removeAllRanges: function () {
-               // remove all ranges
-               this._document.selection.empty();
-       },
-       getRangeAt: function (index) {
-               // return any existing selection, or a cursor position in content editable mode
-               var textRange = this._document.selection.createRange();
-               if (this._selectionExists(textRange))
-                       return TextRangeUtils.convertToDOMRange(textRange, this._document);
-               return null;
-       },
-       toString: function () {
-               // get selection text
-               return this._document.selection.createRange().text;
-       }
-};
-
-/*
-  scripting hooks
- */
-
-document.createRange = function () {
-       return new DOMRange(document);
-};
-
-var selection = new DOMSelection(document);
-window.getSelection = function () {
-       return selection;
-};
-
-//[TODO] expose DOMRange/DOMSelection to window.?
-
-})();
diff --git a/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js b/src/wolnelektury/static/js/contrib/jquery.eventdelegation.js
deleted file mode 100644 (file)
index 52fce07..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * jQuery Event Delegation Plugin - jquery.eventdelegation.js
- * Fast flexible event handling
- *
- * January 2008 - Randy Morey (http://dev.distilldesign.com/)
- */
-
-(function ($) {
-       /* setup list of allowed events for event delegation
-        * only events that bubble are appropriate
-        */
-       var allowed = {};
-       $.each([
-               'click',
-               'dblclick',
-               'mousedown',
-               'mouseup',
-               'mousemove',
-               'mouseover',
-               'mouseout',
-               'keydown',
-               'keypress',
-               'keyup'
-               ], function(i, eventName) {
-                       allowed[eventName] = true;
-       });
-
-       $.fn.extend({
-               delegate: function (event, selector, f) {
-                       return $(this).each(function () {
-                               if (allowed[event])
-                                       $(this).bind(event, function (e) {
-                                               var el = $(e.target),
-                                                       result = false;
-
-                                               while (!$(el).is('body')) {
-                                                       if ($(el).is(selector)) {
-                                                               result = f.apply($(el)[0], [e]);
-                                                               if (result === false)
-                                                                       e.preventDefault();
-                                                               return;
-                                                       }
-
-                                                       el = $(el).parent();
-                                               }
-                                       });
-                       });
-               },
-               undelegate: function (event) {
-                       return $(this).each(function () {
-                               $(this).unbind(event);
-                       });
-               }
-       });
-})(jQuery);
\ No newline at end of file
diff --git a/src/wolnelektury/static/js/contrib/jquery.paging.min.js b/src/wolnelektury/static/js/contrib/jquery.paging.min.js
deleted file mode 100644 (file)
index da169cb..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-jQuery paging plugin v1.3.0 23/06/2014
-http://www.xarg.org/2011/09/jquery-pagination-revised/
-
-Copyright (c) 2011, Robert Eisele (robert@xarg.org)
-Dual licensed under the MIT or GPL Version 2 licenses.
-*/
-(function(n,v,r){n.fn.paging=function(z,A){var t=this,b={setOptions:function(a){b.a=n.extend(b.a||{lapping:0,perpage:10,page:1,refresh:{interval:10,url:null},format:"",lock:!1,circular:!1,onClick:null,onFormat:function(){},onSelect:function(){return!0},onRefresh:function(){}},a||{});b.a.lapping|=0;b.a.perpage|=0;null!==b.a.page&&(b.a.page|=0);1>b.a.perpage&&(b.a.perpage=10);b.interval&&v.clearInterval(b.interval);b.a.refresh.url&&(b.interval=v.setInterval(function(){n.ajax({url:b.a.refresh.url,success:function(a){if("string"===
-typeof a)try{a=n.parseJSON(a)}catch(m){return}b.a.onRefresh(a)}})},1E3*b.a.refresh.interval));b.format=function(a){for(var b=0,f=0,h=1,g={g:[],i:0,h:0,b:5,current:3,l:0,m:0},c,p=/[*<>pq\[\]().-]|[nc]+!?/g,n={"[":"first","]":"last","<":"prev",">":"next",q:"left",p:"right","-":"fill",".":"leap"},e={};c=p.exec(a);)c=""+c,r===n[c]?"("===c?f=++b:")"===c?f=0:h&&("*"===c?(g.i=1,g.h=0):(g.i=0,g.h="!"===c.charAt(c.length-1),g.b=c.length-g.h,(g.current=1+c.indexOf("c"))||(g.current=1+g.b>>1)),g.g.push({f:"block",
-j:0,c:0}),h=0):(g.g.push({f:n[c],j:f,c:r===e[c]?e[c]=1:++e[c]}),"q"===c?++g.m:"p"===c&&++g.l);return g}(b.a.format);return b},setNumber:function(a){b.s=r===a||0>a?-1:a;return b},setPage:function(a){function w(a,b,c){c=""+a.onFormat.call(b,c);p=b.value?p+c.replace(/<a/i,'<a data-page="'+b.value+'"'):p+c}if(b.a.lock)return b.a.onSelect(0,t),b;if(r===a){if(a=b.a.page,null===a)return b}else if(b.a.page==a)return b;b.a.page=a|=0;var m=b.s,f=b.a,h,g,c,p,x=1,e=b.format,d,k,l,q,y=e.g.length,u=y;f.perpage<=
-f.lapping&&(f.lapping=f.perpage-1);q=m<=f.lapping?0:f.lapping|0;0>m?(c=m=-1,h=Math.max(1,a-e.current+1-q),g=h+e.b):(c=1+Math.ceil((m-f.perpage)/(f.perpage-q)),a=Math.max(1,Math.min(0>a?1+c+a:a,c)),e.i?(h=1,g=1+c,e.current=a,e.b=c):(h=Math.max(1,Math.min(a-e.current,c-e.b)+1),g=e.h?h+e.b:Math.min(h+e.b,1+c)));for(;u--;){k=0;l=e.g[u];switch(l.f){case "left":k=l.c<h;break;case "right":k=g<=c-e.l+l.c;break;case "first":k=e.current<a;break;case "last":k=e.b<e.current+c-a;break;case "prev":k=1<a;break;
-case "next":k=a<c}x|=k<<l.j}d={number:m,lapping:q,pages:c,perpage:f.perpage,page:a,slice:[(k=a*(f.perpage-q)+q)-f.perpage,Math.min(k,m)]};for(p="";++u<y;){l=e.g[u];k=x>>l.j&1;switch(l.f){case "block":for(;h<g;++h)d.value=h,d.pos=1+e.b-g+h,d.active=h<=c||0>m,d.first=1===h,d.last=h===c&&0<m,w(f,d,l.f);continue;case "left":d.value=l.c;d.active=l.c<h;break;case "right":d.value=c-e.l+l.c;d.active=g<=d.value;break;case "first":d.value=1;d.active=k&&1<a;break;case "prev":(d.active=f.circular)?d.value=1===
-a?c:a-1:(d.value=Math.max(1,a-1),d.active=k&&1<a);break;case "last":(d.active=0>m)?d.value=1+a:(d.value=c,d.active=k&&a<c);break;case "next":(d.active=f.circular)?d.value=1+a%c:(d.active=0>m)?d.value=1+a:(d.value=Math.min(1+a,c),d.active=k&&a<c);break;case "leap":case "fill":d.pos=l.c;d.active=k;w(f,d,l.f);continue}d.pos=l.c;d.last=d.first=r;w(f,d,l.f)}t.length&&(n("a",t.html(p)).click(f.onClick||function(a){a.preventDefault();a=this;do if("a"===a.nodeName.toLowerCase())break;while(a=a.parentNode);
-b.setPage(n(a).data("page"));b.o&&(v.location=a.href)}),b.o=f.onSelect.call({number:m,lapping:q,pages:c,slice:d.slice},a,t));return b}};return b.setNumber(z).setOptions(A).setPage()}})(jQuery,this);
diff --git a/src/wolnelektury/static/js/contrib/tlite.min.js b/src/wolnelektury/static/js/contrib/tlite.min.js
deleted file mode 100644 (file)
index 383977b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-function tlite(t){document.addEventListener("mouseover",function(e){var i=e.target,n=t(i);n||(i=i.parentElement,n=i&&t(i)),n&&tlite.show(i,n,!0)})}tlite.show=function(t,e,i){function n(t,e){function n(){u=t.title||t.getAttribute(l)||u,t.title="",t.setAttribute(l,""),u&&!a&&(a=setTimeout(d,i?150:1))}function r(){tlite.hide(t,!0)}function s(e){i===e&&(a=clearTimeout(a),f&&t.removeChild(f),f=void 0)}function d(){f||(f=o(t,u,e))}var f,a,u;return t.addEventListener("mousedown",r),t.addEventListener("mouseleave",r),t.tooltip={show:n,hide:s}}function o(t,e,i){function n(){o.className="tlite tlite-"+r+s;var e=10,i=t.offsetTop,n=t.offsetLeft;o.offsetParent===t&&(i=n=0);var l=t.offsetWidth,d=t.offsetHeight,f=o.offsetHeight,a=o.offsetWidth,u=n+l/2;o.style.top=("s"===r?i-f-e:"n"===r?i+d+e:i+d/2-f/2)+"px",o.style.left=("w"===s?n:"e"===s?n+l-a:"w"===r?n+l+e:"e"===r?n-a-e:u-a/2)+"px"}var o=document.createElement("span"),l=i.grav||t.getAttribute("data-tlite")||"n";o.innerHTML=e,t.appendChild(o);var r=l[0]||"",s=l[1]||"";n();var d=o.getBoundingClientRect();return"s"===r&&d.top<0?(r="n",n()):"n"===r&&d.bottom>window.innerHeight?(r="s",n()):"e"===r&&d.left<0?(r="w",n()):"w"===r&&d.right>window.innerWidth&&(r="e",n()),o.className+=" tlite-visible",o}var l="data-tlite";e=e||{},(t.tooltip||n(t,e)).show()},tlite.hide=function(t,e){t.tooltip&&t.tooltip.hide(e)},"undefined"!=typeof module&&module.exports&&(module.exports=tlite);
diff --git a/src/wolnelektury/static/scss/forum.scss b/src/wolnelektury/static/scss/forum.scss
deleted file mode 100644 (file)
index 50f94ab..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-.navbar {
-    .navbar-brand {
-        padding-top: 0;
-        padding-bottom: 0;
-        margin-top: -2px;
-        margin-bottom: -2px;
-    }
-}