Moving forward.
authorRadek Czajka <rczajka@rczajka.pl>
Thu, 27 Apr 2023 11:44:45 +0000 (13:44 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Thu, 11 May 2023 13:47:24 +0000 (15:47 +0200)
98 files changed:
src/catalogue/api/views.py
src/catalogue/migrations/0043_alter_bookmedia_duration_alter_bookmedia_type.py [new file with mode: 0644]
src/catalogue/models/book.py
src/catalogue/models/bookmedia.py
src/catalogue/static/2022/book/filter.js
src/catalogue/static/player/2022_player.js
src/catalogue/templates/catalogue/2022/author_detail.html
src/catalogue/templates/catalogue/2022/book_box.html
src/catalogue/templates/catalogue/2022/book_detail.html
src/catalogue/templates/catalogue/2022/collections.html
src/catalogue/templates/catalogue/2022/tag_catalogue.html [new file with mode: 0644]
src/catalogue/templates/catalogue/audiobook_zip_readme.txt
src/catalogue/templates/catalogue/book_list.html
src/catalogue/templates/catalogue/book_text.html
src/catalogue/templates/catalogue/preview_ad.html
src/catalogue/templates/catalogue/preview_ad_homepage.html
src/catalogue/templates/catalogue/snippets/2022_jplayer.html
src/catalogue/templates/catalogue/snippets/2022_jplayer_reader.html [new file with mode: 0644]
src/catalogue/templates/catalogue/viewer_base.html
src/catalogue/templatetags/catalogue_tags.py
src/catalogue/urls.py
src/catalogue/views.py
src/club/admin.py
src/club/management/commands/send_receipts.py
src/club/models.py
src/club/templates/club/receipt.texml
src/club/templates/club/receipt_email.txt
src/experiments/experiments.py
src/funding/templates/funding/thanks.html
src/picture/templates/picture/2022/picture_detail.html
src/picture/views.py
src/pz/admin.py
src/search/views.py
src/social/templates/social/2022/my_shelf.html
src/social/templates/social/carousel_2022.html
src/social/templatetags/social_tags.py
src/social/views.py
src/sponsors/templates/sponsors/page.html
src/wolnelektury/settings/apps.py
src/wolnelektury/settings/custom.py
src/wolnelektury/settings/static.py
src/wolnelektury/static/2021/scripts/main.js
src/wolnelektury/static/2022/more.scss
src/wolnelektury/static/2022/styles/base/_fonts.scss
src/wolnelektury/static/2022/styles/base/_global.scss
src/wolnelektury/static/2022/styles/components/_avatar.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/components/_hamburger.scss
src/wolnelektury/static/2022/styles/components/_media.scss
src/wolnelektury/static/2022/styles/components/_module.scss
src/wolnelektury/static/2022/styles/components/_payments.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/components/_player.scss
src/wolnelektury/static/2022/styles/components/_read_more.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/components/_select.scss
src/wolnelektury/static/2022/styles/components/_support.scss
src/wolnelektury/static/2022/styles/layout/_books.scss
src/wolnelektury/static/2022/styles/layout/_button.scss
src/wolnelektury/static/2022/styles/layout/_checkout.scss
src/wolnelektury/static/2022/styles/layout/_collections.scss
src/wolnelektury/static/2022/styles/layout/_container.scss
src/wolnelektury/static/2022/styles/layout/_content.scss
src/wolnelektury/static/2022/styles/layout/_footer.scss
src/wolnelektury/static/2022/styles/layout/_main.scss
src/wolnelektury/static/2022/styles/layout/_module.scss
src/wolnelektury/static/2022/styles/layout/_navigation.scss
src/wolnelektury/static/2022/styles/layout/_quotes.scss
src/wolnelektury/static/2022/styles/layout/_search.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/layout/_section.scss
src/wolnelektury/static/2022/styles/layout/_simple.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/layout/_taglist.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/layout/_themes.scss
src/wolnelektury/static/2022/styles/layout/_your-books.scss
src/wolnelektury/static/2022/styles/local.scss
src/wolnelektury/static/2022/styles/pages/_book.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/pages/_homepage.scss
src/wolnelektury/static/2022/styles/pages/_module.scss
src/wolnelektury/static/2022/styles/reader_player.scss [new file with mode: 0644]
src/wolnelektury/static/2022/styles/utils/_mixins.scss
src/wolnelektury/static/2022/styles/utils/_module.scss
src/wolnelektury/static/2022/styles/utils/_vars.scss
src/wolnelektury/static/contrib/jquery-1.8.0.min.js [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff2 [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff2 [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff2 [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff2 [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff2 [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff [new file with mode: 0644]
src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff2 [new file with mode: 0644]
src/wolnelektury/templates/2022/base.html
src/wolnelektury/templates/2022/header.html
src/wolnelektury/templates/2022/main_page.html
src/wolnelektury/templates/2022/user_actions.html [new file with mode: 0644]
src/wolnelektury/templates/admin/long_filter.html [new file with mode: 0644]
src/wolnelektury/views.py

index c69c246..0f95f0a 100644 (file)
@@ -341,7 +341,10 @@ class TagView(RetrieveAPIView):
         obj = self.get_object()
         for data_field, model_field in fields.items():
             setattr(obj, model_field, data.get(data_field, getattr(obj, model_field)))
-        obj.save(update_fields=fields.values(), quick=True)
+        if obj.pk:
+            obj.save(update_fields=fields.values(), quick=True)
+        else:
+            obj.save()
         return Response({})
 
 
diff --git a/src/catalogue/migrations/0043_alter_bookmedia_duration_alter_bookmedia_type.py b/src/catalogue/migrations/0043_alter_bookmedia_duration_alter_bookmedia_type.py
new file mode 100644 (file)
index 0000000..52ae648
--- /dev/null
@@ -0,0 +1,23 @@
+# Generated by Django 4.0.8 on 2023-04-03 18:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0042_tag_adjective_feminine_singular_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='bookmedia',
+            name='duration',
+            field=models.FloatField(blank=True, null=True),
+        ),
+        migrations.AlterField(
+            model_name='bookmedia',
+            name='type',
+            field=models.CharField(choices=[('mp3', 'MP3 file'), ('ogg', 'Ogg Vorbis file'), ('daisy', 'DAISY file'), ('audio.epub', 'EPUB+audio file'), ('sync', 'sync file')], db_index=True, max_length=20, verbose_name='type'),
+        ),
+    ]
index f002158..85cfd63 100644 (file)
@@ -414,6 +414,21 @@ class Book(models.Model):
     has_daisy_file.short_description = 'DAISY'
     has_daisy_file.boolean = True
 
+    def has_sync_file(self):
+        return self.has_media("sync")
+
+    def get_sync(self):
+        with self.get_media('sync').first().file.open('r') as f:
+            sync = f.read().split('\n')
+        offset = float(sync[0])
+        items = []
+        for line in sync[1:]:
+            if not line:
+                continue
+            start, end, elid = line.split()
+            items.append([elid, float(start) + offset])
+        return json.dumps(items)
+    
     def has_audio_epub_file(self):
         return self.has_media("audio.epub")
 
index dc02d61..77de04b 100644 (file)
@@ -30,6 +30,7 @@ class BookMedia(models.Model):
         ('ogg', FileFormat(name='Ogg Vorbis', ext='ogg')),
         ('daisy', FileFormat(name='DAISY', ext='daisy.zip')),
         ('audio.epub', FileFormat(name='EPUB+audio', ext='audio.epub')),
+        ('sync', FileFormat(name='sync', ext='sync.txt')),
     ])
     format_choices = [(k, _('%s file' % t.name)) for k, t in formats.items()]
 
@@ -38,7 +39,7 @@ class BookMedia(models.Model):
     part_name = models.CharField(_('part name'), default='', blank=True, max_length=512)
     index = models.IntegerField(_('index'), default=0)
     file = models.FileField(_('file'), max_length=600, upload_to=_file_upload_to, storage=BofhFileSystemStorage())
-    duration = models.IntegerField(null=True, blank=True)
+    duration = models.FloatField(null=True, blank=True)
     uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True)
     project_description = models.CharField(max_length=2048, blank=True)
     project_icon = models.CharField(max_length=2048, blank=True)
index ac26749..bdf6357 100644 (file)
@@ -3,22 +3,41 @@
     $(".quick-filter").each(function() {
         let bookList = $('#' + $(this).data('for'));
         let filterList = $('.' + $(this).data('filters'));
+
         $(this).on('focus', function() {
             filterList.addClass('filters-enabled');
         });
         $(this).on('blur', function() {
             filterList.removeClass('filters-enabled');
         });
+
         $(this).on('input propertychange', function() {
             let search = $(this).val().toLowerCase();
+
             bookList.children().each(function() {
-                found = !search || $("h2", this).text().toLowerCase().search(search) != -1;
+                found = !search ||
+                    $(".s", this).text().toLowerCase().search(search) != -1
+                    ;
+                if (found) 
+                    $(this).fadeIn();
+                else
+                    $(this).fadeOut();
+            });
+
+
+
+            $('.filter-container', filterList).children().each(function() {
+                console.log($(this).text().toLowerCase());
+                found = !search ||
+                    $(this).text().toLowerCase().search(search) != -1
+                    ;
                 if (found) 
                     $(this).fadeIn();
                 else
                     $(this).fadeOut();
             });
         });
+
     });
 
     $(".l-books__sorting button").on('click', function() {
index c727261..dfac096 100644 (file)
@@ -1,19 +1,98 @@
 (function($) {
     $(function() {
 
+        $(".book-right-column").remove();
+
+        if ($("#player-bar").length) {
+            $("h1").first().after($("<div class='dynamic-insert'><a href='#' class='enable-player-bar'><div class='text'><i class='icon icon-play' style='border: 1px solid black; border-radius: 100%; padding: 1em; margin-right: 1em;'></i> Możesz jednocześnie czytać i słuchać tej lektury!</div></a></div>"));
+        }
+        
+        $(".enable-player-bar").click(function() {
+            $('body').addClass('with-player-bar');
+            $('.jp-play').click();
+            return false;
+        })
+
+                                      
+        var smil = $("#smil").text();
+        if (smil) {
+            smil = $.parseJSON(smil);
+
+            $.each(smil, function(i, e) {
+                $('#' + e).addClass('syncable');
+            })
+        }
+
+
+        scrolling = false;
+        /*$(window).on('scroll', function() {
+            if (!scrolling) {
+                $("#locator").removeClass('snap');
+            }
+        });*/
+
+        lastscroll = null;
+        
+        scrollTo = function() {
+            if (!scrolling && $('.playing-highlight').length && $('.playing-highlight')[0] != lastscroll) {
+                lastscroll = $('.playing-highlight')[0];
+                scrolling = true;
+                $("html").animate({
+                    scrollTop: $('.playing-highlight').offset().top,
+                }, {
+                    duration: 2000,
+                    done: function() {
+                        scrolling = false;
+                        
+                    },
+                });
+            }
+        }
+
+        
         $.jPlayer.timeFormat.showHour = true;
 
         $(".jp-jplayer").each(function() {
             var $self = $(this);
+            
             var $root = $self.parent();
             var $currentMedia = null
             var currentDuration = 0;
             var speed = 1;
             var totalDurationLeft = 0;
+            var totalDurationBefore = 0;
             var lastUpdate = 0;
             var player = null;
+            var doesUpdateSynchro = true;
 
-            var setMedia = function(elem, time=0) {
+            // TODO: will need class for attach
+            // may be added from sync data
+            $(".syncable").click(function() {
+                if (!$('body').hasClass('with-player-bar')) return;
+                let id = $(this).attr('id');
+                if (!id) return;
+                for (let i=0; i<smil.length; ++i) {
+                    if (smil[i][0] == id) {
+                        setMediaFromTime(smil[i][1], 'play');
+                        //player.jPlayer('play');
+                        return;
+                    }
+                }
+            });
+
+            var setMediaFromTime = function(time, cmd='pause') {
+                $('.jp-playlist li', $root).each((i, e) => {
+                    d = parseFloat($(e).data('duration'));
+                    if (time < d) {
+                        setMedia($(e), time, cmd);
+                        return false
+                    } else {
+                        time -= d;
+                    }
+                })
+            }
+            
+            var setMedia = function(elem, time=0, cmd='pause') {
                 var media = {}
 
                 media['mp3'] = elem.attr('data-mp3');
                 $(".c-media__caption .license", $root).html($(".license", elem).html());
                 $(".c-media__caption .project-logo", $root).html($(".project-icon", elem).html());
 
-                player.jPlayer("setMedia", media);
-                player.jPlayer("option", "playbackRate", speed);
-                player.jPlayer("pause", time);
+                console.log('sm 1');
+                doesUpdateSynchro = false;
+                if (!$currentMedia || $currentMedia[0] != elem[0]) {
+                    console.log('set', player.jPlayer("setMedia", media))
+                    player.jPlayer("option", "playbackRate", speed);
+                }
+                doesUpdateSynchro = true;
+                player.jPlayer(cmd, time);
 
                 $currentMedia = elem;
                 $(".play-next", $root).prop("disabled", !elem.next().length);
 
-                let du = elem.data('duration');
+                let du = parseFloat(elem.data('duration'));
                 currentDuration = du;
                 elem.nextAll().each(function() {
-                    du += $(this).data('duration');
+                    du += parseFloat($(this).data('duration'));
                 });
                 totalDurationLeft = du;
 
+                let pdu = 0;
+                elem.prevAll().each(function() {
+                    pdu += parseFloat($(this).data('duration'));
+                });
+                totalDurationBefore = pdu;
+                console.log('sm 3', du, pdu);
+
                 return player;
             };
 
+
+            var updateSynchrotext = function(position) {
+                if (!doesUpdateSynchro) return;
+                
+                let curElemId = null;
+                for (let i=0; i<smil.length; ++i) {
+                    // can faster
+                    if (smil[i][1] <= position) curElemId = smil[i][0];
+                    else break;
+                }
+                $(".playing-highlight").removeClass("playing-highlight");
+                if (curElemId !== null) {
+                    let curElem = $("#" + curElemId);
+                    curElem.addClass("playing-highlight");
+
+                    let miny = window.scrollY;
+                    let maxy = miny + window.innerHeight;
+                    let y = curElem.offset().top;
+
+                    let locator = $("#locator");
+                    // TODO: if snap then roll
+                    locator.removeClass('up').removeClass('down');
+                    if (locator.hasClass('snap')) {
+                        console.log('SCROLL!');
+                        scrollTo();
+                    } else {
+                        if (y < miny) {
+                            locator.addClass('up');
+                        }
+                        if (y > maxy) {
+                            locator.addClass('down');
+                        }
+                    }
+                }
+            }
             
         $self.jPlayer({
             swfPath: "/static/js/contrib/jplayer/",
                     _paq.push(['trackEvent', 'audiobook', 'chapter']);
                 });
 
+                console.log('READY 3!');
                 var initialElem = $('.jp-playlist li', $root).first();
                 var initialTime = 0;
+                console.log('READY 4!');
                 if (true || Modernizr.localstorage) {
                     try {
                         let speedStr = localStorage['audiobook-speed'];
                         initialTime = last[2];
                     }
                 }
-                setMedia(initialElem, initialTime);
+                console.log('READY 5!', initialElem, initialTime);
+                setMedia($(initialElem), initialTime);
+                console.log('READY 6!');
             },
 
             timeupdate: function(event) {
                 t = event.jPlayer.status.currentTime;
+
+                updateSynchrotext(totalDurationBefore + t);
+                
+                
                 ttl = (totalDurationLeft - t) / speed;
                 ttl = $.jPlayer.convertTime(ttl);
                 $(".total-time-left").text('Czas do końca: ' + ttl);
       });
 
 
+   $('#locator').on('click', function() {
+       $(this).toggleClass('snap');
+       lastscroll = null;
+   });
+
+        
 
     });
 })(jQuery)
index 54486fb..716a4b5 100644 (file)
@@ -6,72 +6,82 @@
 
 {% block breadcrumbs %}
   <a href="/katalog/"><span>Katalog</span></a>
-  <a href="{{ tags.0.get_absolute_catalogue_url }}"><span>{{ tags.0.get_category_display|title }}</span></a>
+  {% if tags %}
+    <a href="{{ tags.0.get_absolute_catalogue_url }}"><span>{{ tags.0.get_category_display|title }}</span></a>
+  {% endif %}
 {% endblock %}
 
 {% block main %}
-    <div class="l-section">
-      <div class="l-author__header">
-        {% if tags.0.photo %}
-          <figure>
-            <img src="{{ tags.0.photo.url }}" alt="{{ tags.0.name }}">
-          </figure>
+  <div class="l-section">
+    <div class="l-author__header">
+      {% if tags.0.photo %}
+        <figure>
+          <img src="{{ tags.0.photo.url }}" alt="{{ tags.0.name }}">
+        </figure>
+      {% endif %}
+      <h1>
+        {% if tags %}
+          {{ tags.0.name }}
+        {% else %}
+          {{ title }}
         {% endif %}
-        <h1>{{ tags.0.name }}</h1>
-      </div>
+      </h1>
     </div>
+  </div>
 
-    <div class="l-section">
-      <div class="l-books__header">
-        <div class="l-books__input">
-          <i class="icon icon-filter"></i>
-          <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="book-list" data-filters="with-filter">
-          <div class="filter-container">
-            {% for tag in tags %}
-              {% if forloop.counter > 1 %}
-                <span class="filter">
-                  <a href="{{ tag.get_absolute_url }}">{{ tag }}</a>
-                  <a href="{% catalogue_url 'books' tags -tag %}">✖</a>
-                </span>
-              {% endif %}
-            {% endfor %}
-          </div>
+  <div class="l-section">
+    <div class="l-books__header">
+      <div class="l-books__input">
+        <i class="icon icon-filter"></i>
+        <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="book-list" data-filters="with-filter">
+        <div class="filter-container">
+          {% for tag in tags %}
+            {% if forloop.counter > 1 %}
+              <span class="filter filter-category-{{ tag.category }}">
+                <a href="{% catalogue_url list_type tag %}">{{ tag }}</a>
+                <a href="{% catalogue_url list_type tags -tag %}">✖</a>
+              </span>
+            {% endif %}
+          {% endfor %}
+        </div>
 
-          </span>
+  </span>
+      </div>
+      <div class="l-books__sorting">
+        <span>Sortuj:</span>
+        <div>
+          <button data-order="data-pop">najpopularniejsze</button>
+          <button class="is-active">alfabetycznie</button>
+          <!--button>chronologicznie</button-->
         </div>
-        <div class="l-books__sorting">
-             <span>Sortuj:</span>
-             <div>
-             <button data-order="data-pop">najpopularniejsze</button>
-             <button class="is-active">alfabetycznie</button>
-             <!--button>chronologicznie</button-->
-             </div>
-             </div>
       </div>
     </div>
-    <div class="l-author with-filter">
+  </div>
+  <div class="l-author with-filter">
 
-      <div class="row">
-        <h2>{% nice_title_from_tags tags categories %}</h2>
+    <div class="row">
+      <h2>{% nice_title_from_tags tags categories %}</h2>
+      {% if suggest %}
         <div class="filter-container">
           {% for tag in suggest %}
-            <span class="filter">
-              <a href="{% catalogue_url 'books' tags tag %}">{{ tag }}</a>
+            <span class="filter filter-category-{{ tag.category }}">
+              <a href="{% catalogue_url list_type tags tag %}">{{ tag }}</a>
             </span>
           {% endfor %}
         </div>
-      </div>
+      {% endif %}
     </div>
+  </div>
 
-    <div class="l-section l-section--col">
-      <div class="l-books__grid" id="book-list">
-        {% for book in object_list %}
-          {% include "catalogue/2022/book_box.html" %}
-        {% endfor %}
-      </div>
+  <div class="l-section l-section--col">
+    <div class="l-books__grid" id="book-list">
+      {% for book in object_list %}
+        {% include "catalogue/2022/book_box.html" %}
+      {% endfor %}
     </div>
+  </div>
 
-    {% if tags %}
+  {% if tags %}
     <section class="l-section">
       <div class="l-author">
         {% with author=tags.0 %}
         {% endwith %}
         {% choose_cites 3 author=tags.0 as cites %}
         {% if cites %}
-        <div class="row">
-          <div class="l-author__quotes">
-            <div class="l-author__quotes__slider">
+          <div class="row">
+            <div class="l-author__quotes">
+              <div class="l-author__quotes__slider">
 
-              {% for fragment in cites %}
-                <div class="l-author__quotes__slider__item">
-                  {% include "catalogue/2022/fragment_box.html" %}
-                </div>
-              {% endfor %}
+                {% for fragment in cites %}
+                  <div class="l-author__quotes__slider__item">
+                    {% include "catalogue/2022/fragment_box.html" %}
+                  </div>
+                {% endfor %}
 
+              </div>
             </div>
           </div>
-        </div>
         {% endif %}
       </div>
     </section>
index dd3b8fd..8aabcd5 100644 (file)
@@ -1,7 +1,7 @@
 {% load sorl_thumbnail %}
 
 <article class="l-books__item book-container-activator" data-pop="-{{ book.popularity.count }}" data-longpress="hover">
-  <figure class="l-books__item__img book-container book-container-{{ book.pk }}" style="height:240px" data-book="{{ book.pk }}">
+  <figure class="l-books__item__img book-container book-container-{{ book.pk }}" data-book="{{ book.pk }}">
     <a href="{{ book.get_absolute_url }}">
       {% if book.is_picture %}
         {% if book.image_file %}
     {% endif %}
     <a href="{{ book.get_absolute_url }}" class="icon icon-like" data-book="{{ book.pk }}" data-book-slug="{{ book.slug }}"></a>
   </div>
-  <h3>
+  <h3 class="s">
     {% for author in book.authors %}
       <a href="{{ author.get_absolute_url }}">{{ author }}</a>{% if not forloop.last %}, {% endif %}
     {% endfor %}
   </h3>
-  <h2><a href="{{ book.get_absolute_url }}">{{ book.title }}</a></h2>
+  <h2 class="s"><a href="{{ book.get_absolute_url }}">{{ book.title }}</a></h2>
+  <span class="other-info s">
+    {% for kind in book.kinds %}{{ kind }} {% endfor %}
+    {% for genre in book.genres %}{{ genre }} {% endfor %}
+    {% for epoch in book.epochs %}{{ epoch }} {% endfor %}
+  </span>
 </article>
index a733709..7fd9dcf 100644 (file)
     </div>
 
 
-    <main class="l-main">
-      <section class="l-section">
+    <main class="l-main page-book">
+      <section class="l-section lay-s-col-rev">
         {% with first_text=book.get_first_text %}
           <aside class="l-aside">
-            <figure>
+            <figure class="only-l">
               {% if accessible and first_text %}
                 <a href="{% url 'book_text' first_text.slug %}">
               {% endif %}
                   </p>
                 {% endif %}
               </div>
-              <div class="l-header__actions">
-                {% likes_book book as likes %}
+
+
+
+              {% likes_book book as likes %}
+              <div class="l-header__actions only-l">
                 {% if likes %}
                   <form method='post' action='{% url 'social_unlike_book' book.slug %}'>
                     {% csrf_token %}
               </div>
             </header>
             <article class="l-article">
+
+
+
+
+
               {% if accessible %}
-              <div class="c-media">
-                <div class="c-media__actions">
+                <div class="c-media">
+                  <div class="lay-row lay-l-block lay-spread">
+                  <figure class="only-s book-cover-small">
+                    {% if accessible and first_text %}
+                      <a href="{% url 'book_text' first_text.slug %}">
+                    {% endif %}
+                    <img src="{% if book.cover_clean %}{{ book.cover_clean.url }}{% endif %}" alt="{{ book.pretty_title }}">
+                    {% if accessible and first_text %}
+                      </a>
+                    {% endif %}
+                  </figure>
+                  <div class="lay-col lay-spread lay-grow">
+                  <div class="l-header__actions only-s">
+                    {% if likes %}
+                      <form method='post' action='{% url 'social_unlike_book' book.slug %}'>
+                        {% csrf_token %}
+                        <button class="l-button l-button--fav">
+                          <img src="{% static '2022/images/faved.svg' %}" alt="Usuń z ulubionych">
+                        </button>
+                      </form>
+                    {% else %}
+                      <form method='post' action='{% url 'social_like_book' book.slug %}'>
+                        {% csrf_token %}
+                        <button class="l-button l-button--fav">
+                          <img src="{% static '2022/images/fav.svg' %}" alt="Dodaj do ulubionych">
+                        </button>
+                      </form>
+                    {% endif %}
+                  </div>
+                  <div class="c-media__actions lay-col lay-l-row">
                   <div class="c-media__btn">
                     {% if book.has_mp3_file %}
                       <button class="l-button l-button--media" id="audiobook"><i class="icon icon-audio"></i> pobierz audiobook</button>
                       <a href="{% url 'book_text' first_text.slug %}" class="l-button l-button--media l-button--media--full"><i class="icon icon-eye"></i> czytaj online</a>
                     {% endif %}
                   </div>
-                </div>
+                  </div>
+                  </div>
+                  </div>
 
 
 
                 <h2>Ta książka jest dostępna dla tysięcy dzieciaków dzięki <span>darowiznom</span> od osób takich jak <span>Ty</span>!</h2>
                 <a href="{% url 'club_join' %}?pk_campaign=layout">Dorzuć się!</a>
               </div>
-              <figure>
-                <img src="{% static '2022/images/dziecko.jpeg' %}" alt="Dorzuć się!">
-              </figure>
+              <div class="bg">
+                <!-- img src="{% static '2022/images/dziecko.jpeg' %}" alt="Dorzuć się!" -->
+              </div>
             </div>
             {% endif %}
           </div>
index 4210c1b..bdf36d5 100644 (file)
     </div>
   </div>
 
+  <div class="l-search-bar">
+    <div class="l-search-bar__input">
+      <i class="icon icon-filter"></i>
+      <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="collections">
+    </div>
+  </div>
+
+  <div id="collections">
   {% for collection in objects %}
     <section class="l-section">
       <div class="l-collections -js-collections">
         <div class="l-collections__header">
-          <h3><a href="{{ collection.get_absolute_url }}">{{ collection.title }}</a></h3>
+          <h3><a class="s" href="{{ collection.get_absolute_url }}">{{ collection.title }}</a></h3>
         </div>
-          <div class="l-author__info">
-            <p>
-              {{ collection.description|safe }}
-            </p>
-          </div>
         <div class="l-books">
           {% for book in collection.get_5_books %}
             {% include 'catalogue/2022/book_box.html' %}
@@ -33,6 +36,7 @@
       </div>
     </section>
   {% endfor %}
+  </div>
 
 
 {% endblock %}
diff --git a/src/catalogue/templates/catalogue/2022/tag_catalogue.html b/src/catalogue/templates/catalogue/2022/tag_catalogue.html
new file mode 100644 (file)
index 0000000..3d54c0b
--- /dev/null
@@ -0,0 +1,44 @@
+{% extends '2022/base.html' %}
+{% load thumbnail %}
+
+
+{% block settings %}
+{% endblock %}
+
+{% block breadcrumbs %}
+  <span>{{ whole_category }}</span>
+{% endblock %}
+
+
+{% block main %}
+  <div class="l-section">
+    <div class="l-author__header">
+      <h1>{{ whole_category }}</h1>
+    </div>
+  </div>
+
+  <div class="l-search-bar">
+    <div class="l-search-bar__input">
+      <i class="icon icon-filter"></i>
+      <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="tag-list">
+    </div>
+  </div>
+
+
+  <div class="l-section l-taglist">
+    <ul id="tag-list">
+      {% for tag in tags %}
+        <li>
+          {% if tag.photo %}
+            {% thumbnail tag.photo '40x40' crop='center' as thumb %}
+            <img src="{{ thumb.url }}" class="c-avatar">
+            {% endthumbnail %}
+          {% endif %}
+          <a class="s" href="{{ tag.get_absolute_url }}">{{ tag }}</a>
+        </li>
+      {% endfor %}
+    </ul>
+ </div>
+
+
+{% endblock %}
index 62d7236..eaa63a5 100644 (file)
@@ -1,5 +1,5 @@
-Ten audiobook pochodzi z darmowej biblioteki internetowej Wolne Lektury. Znajdziesz w niej tysiące ebooków i setki audiobooków.
-Wolne Lektury to projekt prowadzony przez fundację Nowoczesna Polska. Jesteśmy organizacją pozarządową. Działamy dzięki wsparciu darczyńców takich jak Ty. 
+Ten audiobook pochodzi z darmowej biblioteki internetowej Wolne Lektury. Znajdziesz w niej tysiące ebooków i audiobooków.
+Wolne Lektury to projekt prowadzony przez fundację Wolne Lektury. Jesteśmy organizacją pozarządową. Działamy dzięki wsparciu darczyńców takich jak Ty. 
 Wspólnie możemy udostępnić kolejne książki. Wspieraj Wolne Lektury stałą comiesięczną kwotą. Dzięki temu wcześniej uzyskasz dostęp do wyjątkowych publikacji! Możesz też wesprzeć nas jednorazowo. 
 Wejdź na https://wolnelektury.pl/pomagam/ i dorzuć się do nowych nagrań.
 
@@ -9,18 +9,18 @@ Audiobooki Wolnych Lektur są udostępniane na wolnych licencjach, co oznacza, 
 
 {% endif %}{% if meta.cover_by %}Okładka na podstawie: {{ meta.cover_by|safe }}{% if meta.cover_source %}, {{ meta.cover_source }}{% endif %}.
 
-{% endif %}Przekaż 1% na wolną bibliotekę KRS 0000070056: https://wolnelektury.pl/info/wesprzyj-nas/
+{% endif %}Przekaż 1,5%, by wszystkie dzieciaki w Polsce miały dostęp do darmowych książek KRS 0000070056: https://wolnelektury.pl/info/wesprzyj-nas/
 
 Zostań Przyjacielem Wolnych Lektur: https://wolnelektury.pl/pomagam/
 
 Słuchaj nas na YouTube: https://wolnelektury.pl/re/WolneLekturyYT/
 
-Fundacja Nowoczesna Polska
+Wolne Lektury
 ul. Marszałkowska 84/92 lok. 125
 00-514 Warszawa
 tel./fax: +48 22 621 30 17
-e-mail:fundacja@nowoczesnapolska.org.pl
-www.nowoczesnapolska.org.pl
+e-mail:fundacja@wolnelektury.pl
+www.fundacja.wolnelektury.pl
 
 Organizacja Pożytku Publicznego
 Sąd Rejestrowy dla M.St. Warszawy w Warszawie,
index d11daff..0107f5f 100644 (file)
@@ -1,4 +1,4 @@
-{% extends "base/base.html" %}
+{% extends request.EXPERIMENTS.layout.value|yesno:"2022/base_simple.html,base/base.html" %}
 {% load i18n %}
 {% load catalogue_tags %}
 {% load chunk from chunks %}
index 78067d7..70915da 100644 (file)
 
 
 {% block extrahead %}
-   <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
-   integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
-         crossorigin=""/>
-    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
-   integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
-   crossorigin=""></script>
+  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
+        integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
+        crossorigin=""/>
+  <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
+          integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
+          crossorigin=""></script>
 {% endblock %}
 
 {% block menu %}
@@ -84,7 +84,7 @@
         <a style="display:inline-block;padding: 1em;" href="{% url 'book_text' prev.slug %}">&larr;&nbsp;{{ prev.title }}</a>
       {% endif %}
       <div style="text-align:center; margin-top:1em;">
-      {% content_warning book %}
+        {% content_warning book %}
       </div>
       <div style="clear:both;"></div>
       {{ book_text|safe }}
 
 
 
+
 {% endblock big-pane %}
 
 {% block footer %}
+  {% if book.has_sync_file %}
+    <div id="player-bar">
+      {% include 'catalogue/snippets/2022_jplayer_reader.html' %}
+    </div>
+    <script type="application/json" id="smil">
+     {{ book.get_sync|safe }}
+    </script>
+  {% endif %}
   <div id="wltoc" class="box">
     {% if book.parent %}
       {% for b in book.ancestors %}
         <a href="{% if b.html_file %}{% url 'book_text' b.slug %}{% else %}{{ b.get_absolute_url }}{% endif %}">{{ b.title }}</a>
         <ol>
       {% endfor %}
-        {% for b in book.get_siblings %}
-          <li>
-            {% if b == book %}
-              <strong>{{ b.title }}</strong>
-              <div id="heretoc"></div>
-            {% else %}
-              <a href="{% url 'book_text' b.get_first_text.slug %}">{{ b.title }}</a>
-            {% endif %}
-          </li>
-        {% endfor %}
+      {% for b in book.get_siblings %}
+        <li>
+          {% if b == book %}
+            <strong>{{ b.title }}</strong>
+            <div id="heretoc"></div>
+          {% else %}
+            <a href="{% url 'book_text' b.get_first_text.slug %}">{{ b.title }}</a>
+          {% endif %}
+        </li>
+      {% endfor %}
 
-        {% for b in book.ancestor.all %}
+      {% for b in book.ancestor.all %}
         </ol>
         {% if not forloop.counter.last %}
           </li>
         {% endif %}
-        {% endfor %}
+      {% endfor %}
     {% else %}
       <strong>{{ book.title }}</strong>
       <div id="heretoc"></div>
   </div>
 
   <div id="info" class="box">
-      {% book_info book %}
+    {% book_info book %}
   </div>
 
   {% if book.other_versions.exists %}
     {% endfor %}
   </div>
 
+
+  <div id="marker">
+
+  </div>
+
   {% localize off %}
   <script type="application/json" id="interesting-references">
    {
        {% endif %}
        {% endfor %}
        "": null
-  }
+   }
   </script>
+
   {% endlocalize %}
 {% endblock footer %}
index 85b4ed2..a6732fc 100644 (file)
     {% endif %}
   </div>
   <div class="l-navigation__menu__book__info">
-    <a href="{{ book.get_absolute_url }}" tabindex="-1">
-      <img src="{{ book.cover_clean.url }}" alt="{{ book.pretty_title }}">
-    </a>
     <h3>
+      <a href="{{ book.get_absolute_url }}" tabindex="-1">
+        <img src="{{ book.cover_clean.url }}" alt="{{ book.pretty_title }}">
+      </a>
       <a href="{{ book.get_absolute_url }}" tabindex="-1">
         {% for author in book.authors %}
           {{ author }}
index e4f43cd..d319772 100644 (file)
@@ -1,23 +1,22 @@
 {% if book %}
-  <section class="l-section">
     <div class="p-homepage-prapremiera">
-      <div class="l-container">
         <h3>Prapremiera</h3>
         <div class="p-homepage-prapremiera__box">
-          <figure>
-            <a href="{{ book.get_absolute_url }}">
-              <img src="{{ book.cover_clean.url }}" alt="{{ book.pretty_title }}">
-            </a>
-          </figure>
-          <div class="p-homepage-prapremiera__box__content">
-            <strong>
+          <div class="p-homepage-prapremiera__box__item">
+            <figure>
+              <a href="{{ book.get_absolute_url }}">
+                <img src="{{ book.cover_clean.url }}" alt="{{ book.pretty_title }}">
+              </a>
+            </figure>
+            <div class="p-homepage-prapremiera__box__content">
               <h4>
                 {% for author in book.authors %}
                   <a href="{{ author.get_absolute_url }}">{{ author }}</a>
                 {% endfor %}
               </h4>
               <h3><a href="{{ book.get_absolute_url }}">{{ book.title }}</a></h3>
-              <p>{{ book.abstract|safe }}</p>
+              <p>{{ book.abstract|safe|truncatewords:20 }}</p>
+            </div>
           </div>
           <div class="p-homepage-prapremiera__box__donate">
             {% if accessible %}
@@ -28,7 +27,5 @@
             {% endif %}
           </div>
         </div>
-      </div>
     </div>
-  </section>
 {% endif %}
index e324540..6c941d7 100644 (file)
@@ -1,4 +1,4 @@
-{% load i18n catalogue_tags %}
+{% load i18n l10n catalogue_tags %}
 
 {% with audiobooks=book.get_audiobooks %}
   <div class="c-media__player" id="jp_container_{{ book.pk }}" data-book-slug="{{ book.slug }}">
 
     <div class="c-player">
       <div class="c-player__btns">
-        <button class="play-prev"><i class="icon icon-prev"></i></button>
-        <button class="c-player__btn--md jp-play"><i class="icon icon-play"></i></button>
-        <button class="play-next"><i class="icon icon-next"></i></button>
-        <div class="c-select speed">
+        <button class="play-prev" data-s-ord="2"><i class="icon icon-prev"></i></button>
+        <button class="c-player__btn--md jp-play" data-s-ord="3"><i class="icon icon-play"></i></button>
+        <button class="play-next" data-s-ord="4"><i class="icon icon-next"></i></button>
+        <div class="c-select speed" data-s-ord="1">
           <ul>
             <li data-speed="2">2×</li>
             <li data-speed="1.75">1.75×</li>
       </div>
 
       <div class="c-player__timeline">
-        <div class="c-player__info"></div>
         <div class="c-player__chapters">
           {% if audiobooks.0|length > 1 %}
-            <span>Rozdziały</span>
+            <span>
+              <span class="only-l">Rozdziały</span>
+              <span class="only-s">Roz.</span>
+            </span>
           {% endif %}
           <ul class="jp-playlist">
+            {% localize off %}
             {% for i in audiobooks.0 %}
               <li
                   data-mp3='{{ i.mp3.file.url }}'
                {% endwith %}
               </li>
             {% endfor %}
+            {% endlocalize %}
           </ul>
         </div>
+        <div class="c-player__info"></div>
         <span>
           <span class="jp-seek-bar">
             <span class="jp-play-bar"></span>
diff --git a/src/catalogue/templates/catalogue/snippets/2022_jplayer_reader.html b/src/catalogue/templates/catalogue/snippets/2022_jplayer_reader.html
new file mode 100644 (file)
index 0000000..994812d
--- /dev/null
@@ -0,0 +1,99 @@
+{% load i18n l10n catalogue_tags %}
+
+{% with audiobooks=book.get_audiobooks %}
+  <div class="c-media__player" id="jp_container_{{ book.pk }}" data-book-slug="{{ book.slug }}">
+    <div class="jp-jplayer" data-player="jp_container_{{ book.pk }}"
+         data-supplied="oga,mp3"></div>
+
+    <div class="c-player">
+      <div class="c-player__btns">
+        <button class="play-prev"><i class="icon icon-prev"></i></button>
+        <button class="c-player__btn--md jp-play"><i class="icon icon-play"></i></button>
+        <button class="play-next"><i class="icon icon-next"></i></button>
+        <div>
+          <button id="locator">
+            <i class="icon icon-eye"></i>
+          </button>
+        </div>
+        <!-- div class="c-select speed">
+          <ul>
+            <li data-speed="2">2×</li>
+            <li data-speed="1.75">1.75×</li>
+            <li data-speed="1.5">1.5×</li>
+            <li data-speed="1.25">1.25×</li>
+            <li data-speed="1" class="is-active">1×</li>
+            <li data-speed="0.75">0.75×</li>
+            <li data-speed="0.5">0.5×</li>
+          </ul>
+        </div-->
+      </div>
+
+
+      <div class="c-player__info"></div>
+      <div class="c-player__chapters">
+        {% if audiobooks.0|length > 1 %}
+          <span>Rozdziały</span>
+        {% endif %}
+        <ul class="jp-playlist">
+               {% localize off %}
+          {% for i in audiobooks.0 %}
+            <li
+                data-mp3='{{ i.mp3.file.url }}'
+                data-ogg='{{ i.ogg.file.url }}'
+                data-media-id="{{ i.mp3.id }}"
+                data-duration="{{ i.mp3.duration }}"
+            >
+              {% with extra_info=i.mp3.get_extra_info_json %}
+                <span class="title">
+                  {{ i.mp3.part_name }}
+                </span>
+                <span class="attribution">
+                  {% trans "Artist:" %}&nbsp;<span class='artist'>{{ extra_info.artist_name }}</span>,
+                  {% trans "director:" %}&nbsp;<span class='director'>{{ extra_info.director_name }}</span>
+                </span>
+                <span class="license">
+                  {% if extra_info.license %}{% license_icon extra_info.license %}{% endif %}
+                </span>
+                <span class="project-icon">
+                  {% if i.mp3.project_icon %}<img class="project-icon" src="{{ i.mp3.project_icon }}">{% endif %}
+                </span>
+                <span class="project-description">
+                  {% if i.mp3.project_description %}{{ i.mp3.project_description }}{% else %}
+                    {% with fb=extra_info.funded_by %}
+                      {% if fb %}Dofinansowano ze środków: {{ fb }}.{% endif %}
+                    {% endwith %}
+                 {% endif %}
+                </span>
+             {% endwith %}
+            </li>
+          {% endfor %}
+         {% endlocalize %}
+        </ul>
+      </div>
+      <div class="c-player__timeline">
+        <span>
+          <span class="jp-seek-bar">
+            <span class="jp-play-bar"></span>
+          </span>
+        </span>
+
+        <time class="c-player__length">
+          <span class="jp-current-time"></span>
+          <span class="time-left">
+          </span>
+          <span class="total-time-left">?</span>
+        </time>
+      </div>
+
+      <div class="c-player__volume">
+        <i class="icon icon-volume jp-mute"></i>
+        <span class="jp-volume-bar">
+          <span class="jp-volume-bar-value">
+          </span>
+        </span>
+      </div>
+
+
+    </div>
+  </div>
+{% endwith %}
index cc68dc4..69babf4 100644 (file)
       </footer>
     </div>
 
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js" integrity="sha512-BkBgWiL0N/EFIbLZYGTgbksKG5bS6PtwnWvVk3gccv+KhtK/4wkLxCRGh+kelKiXx7Ey4jfTabLg3AEIPC7ENA==" crossorigin="anonymous"></script>
+    <script src="{% static 'contrib/jquery-1.8.0.min.js' %}"></script>
     {% block js-dependencies %}{% endblock %}
     <script type="text/javascript">
       var LANGUAGE_CODE = "{{ LANGUAGE_CODE }}";
       var STATIC_URL = "{{ STATIC_URL }}";
     </script>
     {% javascript "book_text" %}
+      {% javascript "2022_player" %}
 
     {% block extrabody %}{% endblock %}
     <script src="{% static "js/contrib/modernizr.custom.19652.js" %}"></script>
index 57dd1f2..67ba553 100644 (file)
@@ -424,7 +424,18 @@ def related_books_2022(book=None, picture=None, limit=4, taken=0):
     books = Book.tagged.related_to(instance, books_qs)[:max_books]
 
     return books
-    
+
+@register.simple_tag
+def related_pictures_2022(book=None, picture=None, limit=4, taken=0):
+    limit -= taken
+    max_books = limit
+
+    books_qs = Picture.objects.all()
+    instance = book or picture
+    books = Picture.tagged.related_to(instance, books_qs)[:max_books]
+
+    return books
+
 
 @register.simple_tag
 def download_audio(book, daisy=True, mp3=True):
index 3cb1750..f8eb6a4 100644 (file)
@@ -14,7 +14,7 @@ import search.views
 urlpatterns = [
     path('obraz/strona/', picture.views.picture_page, name='picture_page'),
     # pictures - currently pictures are coupled with catalogue, hence the url is here
-    path('obraz/', picture.views.picture_list_thumb, name='picture_list_thumb'),
+    path('obraz/', picture.views.picture_list_thumb, name='picture_list_thumb'), # TODO: catalogue view
     path('obraz/<slug:slug>.html', picture.views.picture_viewer, name='picture_viewer'),
     path('obraz/<slug:slug>/', picture.views.picture_detail, name='picture_detail'),
 
@@ -22,8 +22,9 @@ urlpatterns = [
     path('szukaj/', RedirectView.as_view(
         url='/szukaj/', query_string=True, permanent=True)),
 
-    path('', views.catalogue, name='catalogue'),
+    path('', views.catalogue, name='catalogue'), # TODO catalogue
 
+    # TODO: catalogue
     path('autor/', views.tag_catalogue, {'category': 'author'}, name='author_catalogue'),
     path('epoka/', views.tag_catalogue, {'category': 'epoch'}, name='epoch_catalogue'),
     path('gatunek/', views.tag_catalogue, {'category': 'genre'}, name='genre_catalogue'),
@@ -36,15 +37,15 @@ urlpatterns = [
     path('lektury/', views.literature, name='book_list'),
     path('lektury/<slug:slug>/', views.collection, name='collection'),
     path('audiobooki/', views.audiobooks, name='audiobook_list'),
-    path('daisy/', views.daisy_list, name='daisy_list'),
+    path('daisy/', views.daisy_list, name='daisy_list'), # TODO: catalogue
     path('jtags/', search.views.hint, {'param': 'q', 'mozhint': True}, name='jhint'),
-    path('nowe/', ListView.as_view(
+    path('nowe/', ListView.as_view( # TODO
         queryset=Book.objects.filter(parent=None, findable=True).order_by('-created_at'),
         template_name='catalogue/recent_list.html'), name='recent_list'),
-    path('nowe/audiobooki/', ListView.as_view(
+    path('nowe/audiobooki/', ListView.as_view( # TODO
         queryset=Book.objects.filter(media__type='ogg').annotate(m=Max('media__uploaded_at')).order_by('-m'),
         template_name='catalogue/recent_audiobooks_list.html'), name='recent_audiobooks_list'),
-    path('nowe/daisy/', ListView.as_view(
+    path('nowe/daisy/', ListView.as_view( # TODO
         queryset=Book.objects.filter(media__type='daisy').annotate(m=Max('media__uploaded_at')).order_by('-m'),
         template_name='catalogue/recent_daisy_list.html'), name='recent_daisy_list'),
 
index 9d6598b..de614ea 100644 (file)
@@ -62,6 +62,8 @@ def book_list(request, filters=None, template_name='catalogue/book_list.html',
 
 
 def daisy_list(request):
+    if request.EXPERIMENTS['layout'].value:
+        return object_list(request, Book.objects.filter(media__type='daisy'))
     return book_list(request, Q(media__type='daisy'), template_name='catalogue/daisy_list.html')
 
 
@@ -121,11 +123,12 @@ def object_list(request, objects, fragments=None, related_tags=None, tags=None,
         if isinstance(objects, QuerySet):
             objects = prefetch_relations(objects, 'author')
 
+    
     categories = split_tags(*related_tag_lists)
     suggest = []
     for c in ['author', 'epoch', 'kind', 'genre']:
-        if len(categories.get(c, [])) > 1:
-            suggest.extend(categories[c][:4])
+        #if len(categories.get(c, [])) > 1:
+        suggest.extend(sorted(categories[c], key=lambda t: -t.count)[:3])
 
     objects = list(objects)
 
@@ -152,13 +155,13 @@ def object_list(request, objects, fragments=None, related_tags=None, tags=None,
     if extra:
         result.update(extra)
 
-    is_set = len(tags) == 1 and tags[0].category == 'set'
+    is_set = any((x.category == 'set' for x in tags))
     is_theme = len(tags) == 1 and tags[0].category == 'theme'
     has_theme = any((x.category == 'theme' for x in tags))
     new_layout = request.EXPERIMENTS['layout']
 
     if is_set and new_layout.value:
-        template = 'catalogue/2022/set_detail.html'
+        template = 'social/2022/set_detail.html'
     elif is_theme and new_layout.value:
         template = 'catalogue/2022/theme_detail.html'
     elif new_layout.value and not has_theme:
@@ -475,7 +478,12 @@ def tag_catalogue(request, category):
     else:
         best = described_tags
 
-    return render(request, 'catalogue/tag_catalogue.html', {
+    if request.EXPERIMENTS['layout'].value:
+        template_name = 'catalogue/2022/tag_catalogue.html'
+    else:
+        template_name = 'catalogue/tag_catalogue.html'
+
+    return render(request, template_name, {
         'tags': tags,
         'best': best,
         'title': constants.CATEGORIES_NAME_PLURAL[category],
index 2f07a4f..2ba842a 100644 (file)
@@ -1,4 +1,3 @@
-
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
@@ -81,6 +80,27 @@ class ScheduleForm(forms.ModelForm):
         fields = '__all__'
 
 
+class SourceFilter(admin.SimpleListFilter):
+    title = _('Source') # display title
+    parameter_name = 'source'
+    template = "admin/long_filter.html"
+
+    def lookups(self, request, model_admin):
+        lookups = [
+            (m, m) for m in
+            model_admin.model.objects.exclude(source='').values_list('source', flat=True).distinct()[:10]
+        ]
+        print(lookups)
+        return lookups
+
+    def queryset(self, request, queryset):
+        return queryset
+    
+    #field_name = 'source' # name of the foreign key field
+
+
+
+
 class ScheduleAdmin(admin.ModelAdmin):
     form = ScheduleForm
 
@@ -89,8 +109,12 @@ class ScheduleAdmin(admin.ModelAdmin):
         'method'
     ]
     list_display_links = ['email', 'started_at']
-    search_fields = ['email']
-    list_filter = ['is_cancelled', 'monthly', 'yearly', 'method', PayedFilter, ExpiredFilter, 'source']
+    search_fields = ['email', 'source']
+    list_filter = [
+        'is_cancelled', 'monthly', 'yearly', 'method',
+        PayedFilter, ExpiredFilter,
+        SourceFilter,
+    ]
     filter_horizontal = ['consent']
     date_hierarchy = 'started_at'
     raw_id_fields = ['membership']
index c827cba..92b5dc2 100644 (file)
@@ -64,3 +64,4 @@ class Command(BaseCommand):
                 PayUOrder.send_receipt(email, year, resend=options['resend'])
             except:
                 print('ERROR')
+                raise
index 3540268..5912b8b 100644 (file)
@@ -431,7 +431,6 @@ class PayUOrder(payu_models.Order):
         if not payments: return
 
         payments.sort(key=lambda x: x['timestamp'])
-        print(payments)
 
         ctx = {
             "email": email,
@@ -451,7 +450,7 @@ class PayUOrder(payu_models.Order):
         message = EmailMessage(
                 'Odlicz darowiznę na Wolne Lektury od podatku',
                 template.loader.render_to_string('club/receipt_email.txt', ctx),
-                settings.CONTACT_EMAIL, [email]
+                settings.CLUB_CONTACT_EMAIL, [email]
             )
         with open(temp.name, 'rb') as f:
             message.attach('wolnelektury-darowizny.pdf', f.read(), 'application/pdf')
index 9ad037c..a167ccf 100644 (file)
@@ -18,7 +18,7 @@
 
 
 \begin{flushright}
-  Warszawa, \today
+  Warszawa, \today{} r.
 \end{flushright}
 \vskip -2.15em
 
index 3945805..8d5ed33 100644 (file)
@@ -23,7 +23,7 @@ Zestawienie darowizn za rok {{ year }} znajdziesz w załączniku!
 
 Dane z załącznika wprowadź do formularza PIT. Pamiętaj, że w przypadku kontroli z urzędu skarbowego musisz mieć potwierdzenie wykonanych przelewów z Twojego banku.
 
-Podczas wypełniania swojego PIT-u możesz także przekazać 1,5% swojego podatku na Wolne Lektury. Dzięki temu ufundujesz darmową e-książkę, która trafi do tysięcy dzieciaków. Wystarczy, że w odpowiednim polu wpiszesz nazwę organizacji "fundacja Wolne Lektury" oraz numer KRS 0000070056. Wspierasz Wolne Lektury w ten sposób już od dawna? W takim razie nic nie musisz zmieniać, bo system ponownie sam wprowadzi dane fundacji.
+Podczas wypełniania swojego PIT-u możesz także przekazać 1,5% swojego podatku na Wolne Lektury. Dzięki temu ufundujesz darmową e-książkę, która trafi do tysięcy dzieciaków. Wystarczy, że w odpowiednim polu wpiszesz nazwę organizacji „fundacja Wolne Lektury” oraz numer KRS 0000070056. Wspierasz Wolne Lektury w ten sposób już od dawna? W takim razie nic nie musisz zmieniać, bo system ponownie sam wprowadzi dane fundacji.
 
 Serdecznie dziękujemy za Twoje wsparcie!
 
index bc40163..df1b23a 100644 (file)
@@ -7,18 +7,12 @@ from .base import Experiment
 class NewLayout(Experiment):
     slug = 'layout'
     name = 'Nowy layout strony'
-    size = settings.EXPERIMENTS_LAYOUT
+    size = 1 or settings.EXPERIMENTS_LAYOUT
 
     def qualify(self, request):
         if get_language() != 'pl':
             return False
 
-        if re.search(
-                'iphone|mobile|androidtouch',
-                request.META.get('HTTP_USER_AGENT', ''),
-                re.IGNORECASE):
-            return False
-
 
 experiments = [
     NewLayout,
index 9ad0cdd..cd131f9 100644 (file)
@@ -8,7 +8,7 @@
 {% block body %}
   <h1>{% trans "Thank you!" %}</h1>
   <div class="white-box normal-text">
-    <a href='//nowoczesnapolska.org.pl/pomoz-nam/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='//nowoczesnapolska.org.pl/wp-content/themes/koed/annoy/procent.png' alt='1%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazać<br/>1% podatku na rozwój biblioteki. &rarr;</a>
+    <a href='/info/wesprzyj-nas/' target="_blank" style='float:right;border:1px solid #ddd;padding: 1em;margin:0 0 1em 1em;background:#eee;'><img src='/media/chunks/attachment/poltora-procent.png' alt='1,5%' style='float:left;margin-right: 1em;margin-top:.2em;'>Możesz też przekazać<br/>1,5% podatku na rozwój biblioteki. &rarr;</a>
 
     <p>{% trans "Thank you for your support!" %}</p>
 
index 69dbb25..2c897ae 100644 (file)
           <div class="l-article__overlay" data-max-height="327" style="margin-top:30px;">
             {% thumbnail picture.image_file "850" upscale=0 as thumb %}
             <a href="{% url 'picture_viewer' picture.slug %}">
-              <img class="cover" src="{{ thumb.url }}"/>
+              <img class="cover" src="{{ thumb.url }}" width="{{ thumb.width }}" height="{{ thumb.height }}" />
             </a>
     {% endthumbnail %}
           </div>
+          <button class="l-article__read-more" aria-label="Kliknij aby rozwinąć" data-label="Pokaż więcej" data-action="Pokaż mniej">Pokaż więcej</button>
         </article>
       </div>
     </section>
     <div class="l-books__wrapper">
       <div class="l-container">
         <h2>Czytaj także</h2>
-        <div class="l-books">
-          {% related_books_2022 picture=picture as related_books %}
+        <dive class="l-books">
+          {% related_pictures_2022 picture=picture as related_books %}
           {% for rel in related_books %}
             <article class="l-books__item">
               <figure class="l-books__item__img">
index 194bb98..6bf513d 100644 (file)
@@ -1,26 +1,40 @@
 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
+from collections import Counter
 from django.conf import settings
 from django.contrib.auth.decorators import permission_required
 from django.shortcuts import render, get_object_or_404, render
 from picture.models import Picture
+from catalogue.models import Tag
 from catalogue.utils import split_tags
 from sponsors.models import Sponsor
 from wolnelektury.utils import ajax
+from catalogue.helpers import get_top_level_related_tags
 
 
-def picture_list_thumb(request, filter=None, get_filter=None, template_name='picture/picture_list_thumb.html',
-                       cache_key=None, context=None):
+def picture_list_thumb(request):
     pictures = Picture.objects.all()
-    if filter:
-        pictures = pictures.filter(filter)
-    if get_filter:
-        pictures = pictures.filter(get_filter())
-
+        
     if request.EXPERIMENTS['layout'].value:
+        related_tags = Tag.objects.usage_for_model(Picture, counts=True)
+        related_tags = sorted(related_tags, key=lambda t: -t.count)
+        suggestion_categories = Counter()
+        suggestions = []
+        for t in related_tags:
+            if suggestion_categories[t.category] < 3:
+                suggestion_categories[t.category] += 1
+                suggestions.append(t)
+                if sum(suggestion_categories.values()) == 10:
+                    break
         template_name = 'catalogue/2022/author_detail.html'
-        return render(request, template_name, {'object_list': pictures})
+        return render(request, template_name, {
+            'object_list': pictures,
+            'title': 'Galeria',
+            'tags': [],
+            'suggest': suggestions,
+            'list_type': 'gallery',
+        })
     else:
         return render(request, template_name, {'picture_list': list(pictures)})
 
index 1b88383..ad66a95 100644 (file)
@@ -81,6 +81,8 @@ class BankPaymentInline(admin.TabularInline):
 
 @admin.register(models.DirectDebit)
 class DirectDebitAdmin(admin.ModelAdmin):
+    #unpaginate
+
     list_display = [
         'payment_id', 'acquisition_date',
         'iban_valid',
index b6e290b..e5eb3a2 100644 (file)
@@ -85,15 +85,19 @@ def hint(request, mozhint=False, param='term'):
         for author in authors[:limit]
     ]
     if len(data) < limit:
-        data += [
-            {
-                'label': b.title,
-                'author': b.author_unicode(),
-                'id': b.id,
-                'url': b.get_absolute_url()
-            }
-            for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)]
-        ]
+        for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)]:
+            author_str = b.author_unicode()
+            translator = b.translator()
+            if translator:
+                author_str += ' (tłum. ' + translator + ')'
+                data.append(
+                    {
+                        'label': b.title,
+                        'author': author_str,
+                        'id': b.id,
+                        'url': b.get_absolute_url()
+                    }
+                )
 
     if mozhint:
         data = [
index 3dbd80d..2e2b8d6 100644 (file)
@@ -1,4 +1,5 @@
 {% extends '2022/base.html' %}
+{% load catalogue_tags %}
 
 
 {% block settings %}
@@ -17,7 +18,7 @@
     <div class="l-books__header">
       <div class="l-books__input">
         <i class="icon icon-filter"></i>
-        <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="book-list">
+        <input type="text" placeholder="filtry, tytuł" class="quick-filter" data-for="book-list" data-filters="with-filter">
       </div>
       <div class="l-books__sorting">
         <span>Sortuj:</span>
     </div>
   </div>
 
+  <div class="l-author with-filter">
+
+    <div class="row">
+      <h2>&nbsp;</h2>
+      {% if suggest %}
+        <div class="filter-container">
+          {% with list_type='book' %}
+            {% for tag in suggest %}
+              <span class="filter filter-category-{{ tag.category }}">
+                <a href="{% catalogue_url list_type tag %}">{{ tag }}</a>
+              </span>
+            {% endfor %}
+          {% endwith %}
+        </div>
+      {% endif %}
+    </div>
+  </div>
+
+
+
   <div class="l-section l-section--col">
     <div class="l-books__grid" id="book-list">
       {% for book in books %}
index a7af46c..2d91721 100644 (file)
@@ -1,7 +1,7 @@
-{% if banner %}
-<a href="{{ banner.link }}">
+{% for banner in banners %}
   {% if banner.picture %}
-  <img src="{{ banner.picture.url }}">
+    <div style="background-image: url('{{ banner.picture.url }}');">
+      <a href="{{ banner.link }}"></a>
+    </div>
   {% endif %}
-</a>
-{% endif %}
+{% endfor %}
index 193a1ce..4dda18d 100644 (file)
@@ -87,9 +87,9 @@ def carousel(context, placement):
 
 @register.inclusion_tag('social/carousel_2022.html', takes_context=True)
 def carousel_2022(context, placement):
-    banner = Carousel.get(placement).carouselitem_set.first().get_banner()
+    banners = Carousel.get(placement).carouselitem_set.all()#first().get_banner()
     return {
-        'banner': banner,
+        'banners': [b.get_banner() for b in banners],
     }
 
 
index d9627eb..cff7c8e 100644 (file)
@@ -72,8 +72,15 @@ def my_shelf(request):
         template_name = 'social/2022/my_shelf.html'
     else:
         template_name = 'social/my_shelf.html'
+
+    tags = list(request.user.tag_set.all())
+    suggest = [t for t in tags if t.name]
+    print(suggest)
+        
     return render(request, template_name, {
-        'books': Book.tagged.with_any(request.user.tag_set.all())
+        'tags': tags,
+        'books': Book.tagged.with_any(tags),
+        'suggest': suggest,
     })
 
 
index c94f3d4..7b6b571 100644 (file)
@@ -11,6 +11,5 @@
         </div>
       </div>
     {% endfor %}
-    <div style="clear: both"></div>
   </div>
 {% endspaceless %}
index fe42e04..7410808 100644 (file)
@@ -55,6 +55,7 @@ INSTALLED_APPS_CONTRIB = [
     'django.contrib.admin',
     'django.contrib.admindocs',
     'django.contrib.staticfiles',
+    'admin_auto_filters',
     'admin_ordering',
     'rest_framework',
     'fnp_django_pagination',
index da3af83..fa1b8d2 100644 (file)
@@ -45,6 +45,8 @@ CLUB_RETRY_DAYS_MAX = 90
 CLUB_RETRY_DAYS_DAILY = 3
 CLUB_RETRY_LESS = 7
 
+CLUB_CONTACT_EMAIL = 'darowizny@wolnelektury.pl'
+
 MESSAGING_MIN_DAYS = 2
 
 NEWSLETTER_PHPLIST_SUBSCRIBE_URL = None
@@ -65,3 +67,5 @@ CIVICRM_ACTIVITIES = {
 }
 
 EXPERIMENTS_LAYOUT = 0
+
+WIDGETS = {}
index 33da2d5..179467d 100644 (file)
@@ -67,6 +67,7 @@ PIPELINE = {
                 'css/new.book.css',
                 'annoy/banner.scss',
                 'annoy/book_text.scss',
+                '2022/styles/reader_player.scss',
 
                 'css/master.picture.css',
             ],
index a37d256..31bb927 100644 (file)
 
 
     $('.js-collections').each(function() {
+        //return;
         let collectionsSlider = $('.l-books', this);
         if (collectionsSlider.children().length < 2) return;
+
+        // remove flexbox
+        collectionsSlider.css('display', 'block');
+        
         let collectionsNextSlide = $('.js-next-slide', this);
         let collectionsPrevSlide = $('.js-prev-slide', this);
 
   collectionsSlider.slick({
-    slidesToScroll: 1,
-    slidesToShow: 5,
-    infinite: false,
-    dots: false,
-    arrows: false,
-    autoplay: false,
-    responsive: [
-      {
-        breakpoint: 768,
-        settings: {
-          centerMode: false,
-          slidesToShow: 2
-        }
-      }
-    ]
+      //prevArrow, nextArrow,
+
+      slidesToScroll: 1,
+      slidesToShow: 1,
+      infinite: false,
+      dots: false,
+      arrows: false,
+      autoplay: false,
+
+      swipeToSlide: true,
+      centerMode: false,
+      mobileFirst: true,
+      responsive: [
+          {
+              breakpoint: 360 - .01,
+              settings: {
+                  slidesToShow: 2,
+              }
+          },
+          {
+              breakpoint: 520 - .01,
+              settings: {
+                  slidesToShow: 3
+              }
+          },
+          {
+              breakpoint: 680 - .01,
+              settings: {
+                  slidesToShow: 4
+              }
+          },
+          {
+              breakpoint: 840 - .01,
+              settings: {
+                  slidesToShow: 5
+              }
+          },
+          {
+              breakpoint: 1172 - .01,
+              settings: {
+                  slidesToShow: 5,
+                  variableWidth: true,
+              }
+          },
+      ]
   });
 
   collectionsNextSlide.on('click', function (event) {
     dots: true,
     arrows: false,
     autoplay: true,
-    autoplaySpeed: 2500
+    autoplaySpeed: 3000
   });
 
 
   let sliderHomepage = $('.l-quotes');
   sliderHomepage.slick({
     slidesToShow: 1,
-    centerMode: true,
-    centerPadding: '250px',
+    centerMode: false,
     infinite: true,
     dots: true,
     arrows: false,
     autoplay: true,
-    autoplaySpeed: 2500,
-    responsive: [
-      {
-        breakpoint: 768,
-        settings: {
-          centerMode: false,
-          slidesToShow: 1
-        }
-      }
-    ]
+    autoplaySpeed: 4000,
+  });
+
+})();
+
+
+
+
+// Carousel
+(function () {
+  let slider = $('.p-homepage__info__box--carousel');
+
+  slider.slick({
+    slidesToScroll: 1,
+    slidesToShow: 1,
+    infinite: true,
+    dots: true,
+    arrows: false,
+    autoplay: true,
+    autoplaySpeed: 5000
   });
 
+
+
 })();
 
+
+
 // Text overlay toggler
 (function () {
   let overlays = $('.l-article__overlay');
index 3733e3c..7bdd833 100644 (file)
@@ -1,3 +1,5 @@
+@import "styles/utils/mixins";
+
 body.is-open {
     height: 100%;
     overflow-y: hidden;
@@ -24,93 +26,77 @@ body.is-open {
     }
 }
 
-.l-navigation__menu__book__header {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-
-    p {
-        margin: 0;
-
-        &.korona {
-            &:before {
-                content: url('images/korona.svg');
-                width: 21px;
-                margin-right: -21px;
-                position: relative;
-                top: -10px;
-                left: -3px;
-            }
-        }
-    }
-}
-.l-navigation__menu__book {
-    .button {
-        display: inline-block;
-        font-size: 16px;
-        font-weight: 700;
-        padding: 0 20px;
-        min-width: 212px;
-        line-height: 38px;
-        text-align: center;
-
-        /* green 700 */
-        background: #92BD39;
-        color: #083F4D;
-        border-radius: 6px;
-
-        transition: background-color 150ms;
-
-        &:hover {
-            background-color: #FBC40F;
-        }
-    }
-}
-.l-navigation__menu__book__info {
-    img {
-        width: 42px;
-        height: 60px;
-    }
-}
 .l-navigation__menu__links ul li a em {
     font-style: normal;
     color: #FFA500;
     font-weight: 600;
 }
-.l-navigation__login {
-    color: #74BDC2;
-    margin-right: 20px;
-    
-    a {
-        color: white;
+
+.l-collections .l-books {
+    width: 100%;
+}
+.l-books, .l-books__grid {
+    @include rwd($break-wide) {
+        //justify-content: space-between;
+        gap: 20px;
+        .l-books__item {
+            margin: 0;
+        }
     }
 }
-.l-navigation__actions {
-    position: relative;
-    height: 44px;
 
-    .user {
-        margin-right: 25px;
+.slick-track {
+    margin: 0;
+
+    .l-books__item {
+        @include rwd($break-wide) {
+
+            width: 214.5px;
+            margin-left: 17px;
+            margin-right: 0;
+            &:first-of-type {
+                margin-left: 0px;
+            }
+        }
     }
 }
 
 
-.l-books {
-    margin-right: -17px;
-}
-.l-books__grid {
-    margin-right: -17px;
-}
 
 .l-books__item {
-    width: 212px;
+    //transition: opacity .1s, all cubic-bezier(0.25, 1, 0.5, 1) 350ms;
+
+    width: 100%;
+    padding: 5.28vw;
 
-    margin-right: 17px !important; // reverse the 5n+5 rule.
+    @include rwd($B2) {
+        width: calc(50vw - 32px/2 - 10px);
+        padding: 3.8vw;
+    }
+    @include rwd($B3) {
+        width: calc(33.33vw - 32px/3 - 10px);
+        padding: 2.73vw;
+    }
+    @include rwd($B4) {
+        width: calc(25vw - 32px/4 - 10px);
+        padding: 2.1vw;
+    }
 
-    transition: opacity .1s, all cubic-bezier(0.25, 1, 0.5, 1) 350ms;
+    @include rwd($B5) {
+        width: calc(20vw - 32px/5 - 10px);
+        padding: 1.63vw;
+    }
+
+    @include rwd($break-wide) {
+        width: 212px;
+        padding: 21px;
+    }
 }
 
 
+
+
+
 .by-popularity {
     .l-books__item {
         order: attr(data-pop);
@@ -137,39 +123,6 @@ body.is-open {
     position: relative;
 }
 
-.l-checkout__payments {
-    display: none;
-}
-.toggle-input{
-    &#switch-once:checked {
-        ~.l-switch__wrapper {
-            label {
-                &:nth-of-type(1) { color: #003C3C; }
-                &:nth-of-type(2) { color: #74BDC2; }
-            }
-            .toggle {
-                left: 5px;
-            }
-        }
-        ~.payments-once {
-            display: flex;
-        }
-    }
-    &#switch-monthly:checked {
-        ~.l-switch__wrapper {
-            label {
-                &:nth-of-type(1) { color: #74BDC2; }
-                &:nth-of-type(2) { color: #003C3C; }
-            }
-            .toggle {
-                left: 39px;
-            }
-        }
-        ~.payments-recurring {
-            display: flex;
-        }
-    }
-}
 
 .l-checkout__footer__content__item > div ul {
   font-weight: normal;
@@ -286,120 +239,6 @@ form {
 
 
 
-.page-simple {
-    margin-bottom: 70px;
-    padding-bottom: 30px;
-    border-radius: 10px;
-    background: #E1F1F2;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-
-    .white-box {
-        // for legacy templates
-        width: 100%;
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-    }
-    
-    h1 {
-        width: 100%;
-        margin: 0 0 50px 0;
-        padding: 32px 45px;
-        border-radius: 10px 10px 0 0;
-
-        font-style: italic;
-        font-weight: 300;
-        font-size: 48px;
-        line-height: 55px;
-        letter-spacing: -0.02em;
-        background: #083F4D;
-        color: #92BD39;
-    }
-
-    > p, form, > .normal-text {
-        min-width: 300px;
-        margin-left: 50px;
-        margin-right: 50px;
-        width: auto;
-    }
-
-    .wlfund {
-        margin: 0;
-        width: 90%;
-        border-collapse: separate;
-
-        tr {
-            td {
-                padding: .625rem .3125rem .625rem;
-                border-top: .625rem solid rgba(255,255,255,0);
-                border-bottom: 1px solid #083F4D;
-                text-align: center;
-            }
-        }
-    }
-}
-
-.page-simple, .nice-controls {
-    button, input[type=submit] {
-        margin: 24px 0;
-        height: 56px;
-        background: #083F4D;
-        border: none;
-        border-radius: 3px;
-        font-weight: 600;
-        font-size: 20px;
-        line-height: 25px;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        text-align: center;
-        color: #FFFFFF;
-        width: 340px;
-
-        &.active {
-            outline: 2px solid #083F4D;
-            outline-offset: 3px;
-        }
-        
-        &:disabled {
-            opacity: .8;
-        }
-    }
-
-    label {
-        font-style: normal;
-        font-weight: 600;
-        font-size: 15px;
-        line-height: 160%;
-        color: #083F4D;
-        margin-top: 24px;
-    }
-
-    input, textarea, select {
-        display: block;
-        width: 100%;
-        background: #FFFFFF;
-        color: black;
-        border: 1px solid #D5ECED;
-        border-radius: 3px;
-        transition: all cubic-bezier(0, 0, 0.2, 1) 250ms;
-        padding: 10px;
-        outline: 0;
-    }
-    input, select {
-        height: 56px;
-    }
-    input[type=checkbox], input[type=radio] {
-        display: inline;
-        float: left;
-        width: 1.2em;
-        height: 1.2em;
-        vertical-align: middle;
-        margin-right: 1em;
-    }
-}
 
 
 .experiment {
@@ -409,16 +248,6 @@ form {
 
 
 
-.page-simple {
-    .form-info {
-        h2 {
-            font-size: 1.5em;
-            margin-top: 0;
-        }
-    }
-}
-
-
 .funding-promo-bar {
     margin: 18px auto;
 
@@ -461,16 +290,6 @@ form {
 }
 
 
-.page-simple button.button-orange {
-    background: #FFA500;
-    color: black;
-    transition: all cubic-bezier(0.25, 1, 0.5, 1) 350ms;
-    &:hover {
-        background: #92BD39;
-    }
-}
-
-
 .poll-bar {
     height: 10px;
     width: 100%;
index 489da87..a684ca5 100644 (file)
@@ -1,29 +1,59 @@
+/* source-sans-pro-300 - cyrillic_greek_greek-ext_latin_latin-ext */
 @font-face {
-  font-family: "Futura PT";
-  src: url('#{$font-path}/subset-FuturaPT-Book.ttf?20uhbq') format('truetype'),
-       url('#{$font-path}/subset-FuturaPT-Book.woff?20uhbq') format('woff'),
-       url('#{$font-path}/subset-FuturaPT-Book.woff2?20uhbq') format('woff2');
-  font-weight: $regular;
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
   font-style: normal;
-  font-display: swap;
+  font-weight: 300;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
 }
 
+/* source-sans-pro-300italic - cyrillic_greek_greek-ext_latin_latin-ext */
 @font-face {
-  font-family: "Canela";
-  src: url('#{$font-path}/subset-Canela-Light.ttf?20uhbq') format('truetype'),
-       url('#{$font-path}/subset-Canela-Light.woff?20uhbq') format('woff'),
-       url('#{$font-path}/subset-Canela-Light.woff2?20uhbq') format('woff2');
-  font-weight: $light;
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
+  font-style: italic;
+  font-weight: 300;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+
+/* source-sans-pro-regular - cyrillic_greek_greek-ext_latin_latin-ext */
+@font-face {
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
   font-style: normal;
-  font-display: swap;
+  font-weight: 400;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
 }
 
+/* source-sans-pro-italic - cyrillic_greek_greek-ext_latin_latin-ext */
 @font-face {
-  font-family: "Canela";
-  src: url('#{$font-path}/subset-Canela-LightItalic.ttf?20uhbq') format('truetype'),
-       url('#{$font-path}/subset-Canela-LightItalic.woff') format('woff'),
-       url('#{$font-path}/subset-Canela-LightItalic.woff2') format('woff2');
-  font-weight: $light;
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
   font-style: italic;
-  font-display: swap;
+  font-weight: 400;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+
+/* source-sans-pro-600 - cyrillic_greek_greek-ext_latin_latin-ext */
+@font-face {
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 600;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
+}
+
+/* source-sans-pro-700 - cyrillic_greek_greek-ext_latin_latin-ext */
+@font-face {
+  font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
+  font-family: 'Source Sans Pro';
+  font-style: normal;
+  font-weight: 700;
+  src: url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
+       url('/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
 }
index 5bcfdbe..d81a0af 100644 (file)
@@ -43,3 +43,11 @@ body {
   align-items: center;
   justify-content: center;
 }
+
+
+a {
+    color: $color-primary;
+    &:hover {
+        text-decoration: underline;
+    }
+}
diff --git a/src/wolnelektury/static/2022/styles/components/_avatar.scss b/src/wolnelektury/static/2022/styles/components/_avatar.scss
new file mode 100644 (file)
index 0000000..3ac4337
--- /dev/null
@@ -0,0 +1,6 @@
+.c-avatar {
+    width: 40px;
+    height: 40px;
+    border-radius: 20px;
+    vertical-align: middle;
+}
index 12aa61e..4d25407 100644 (file)
@@ -15,12 +15,9 @@ $bar-color:   #85C7CC;
   position: relative;
   cursor: pointer;
 
-  @include rwd(tablet) {
-    margin-right: 0;
-  }
-
   border: 0;
-  margin: 0; padding: 0;
+  margin: 0;
+  padding: 0;
   background-color: transparent;
   appearance: none;
 
@@ -35,19 +32,6 @@ $bar-color:   #85C7CC;
     transition: color 300ms $ease-out;
   }
 
-  &.is-clicked {
-    z-index: $master-layer + 2;
-
-    @include rwd(tablet) {
-      position: fixed;
-      top: 2rem; right: 1rem;
-    }
-
-    &:after {
-      color: $color-black;
-    }
-  }
-
   .bar,
   .bar:after,
   .bar:before {
index 1cb7584..576174b 100644 (file)
@@ -1,9 +1,17 @@
 .c-media {
-  margin: 0 auto;
+    margin: 0 auto;
+
+    .only-s {
+        .l-button--fav {
+            margin-top: -10px;
+        }
+    }
 }
 
 .c-media__actions {
-  display: flex;
+    display: flex;
+    column-gap: 38px;
+    row-gap: 10px;
 }
 
 .c-media__btn {
@@ -11,9 +19,9 @@
   text-align: center;
   align-items: center;
 
-  &:nth-child(1) { padding-right: 19px; }
-  &:nth-child(2) { padding-left: 19px; padding-right: 19px; }
-  &:nth-child(3) { padding-left: 19px; }
+  //&:nth-child(1) { padding-right: 19px; }
+  //&:nth-child(2) { padding-left: 19px; padding-right: 19px; }
+  //&:nth-child(3) { padding-left: 19px; }
 
   .l-button {
     width: 100%;
   top: 0;
   left: 0;
   height: 100%;
-  align-items: center;
+  align-items: flex-start;
   justify-content: center;
   background-color: rgba($color-black, 0.35);
   display: none;
   overflow-y: scroll;
-  padding: 150px 40px 40px 40px;
+  padding: 10vh 40px 40px 40px;
   width: 100%;
 
-  @include rwd(screen-md) {
-    padding: 40px 40px 40px 40px;
-    align-items: flex-start;
-  }
-
   &.is-open {
     display: flex;
   }
     opacity: 1;
   }
 }
+
+.book-cover-small img {
+    max-width: calc((100vw - 3 * 16px) / 2);
+}
diff --git a/src/wolnelektury/static/2022/styles/components/_payments.scss b/src/wolnelektury/static/2022/styles/components/_payments.scss
new file mode 100644 (file)
index 0000000..b28b04f
--- /dev/null
@@ -0,0 +1,3 @@
+
+
+
index 2589d9c..52729f9 100644 (file)
@@ -1,10 +1,15 @@
 .c-player {
-  display: flex;
   width: 100%;
   align-items: center;
   position: relative;
   background-color: #D5ECED;
-  padding: 25px 34px 25px 14px;
+  padding: 105px 70px 25px 70px;
+
+  @include rwd($break-flow) {
+      display: flex;
+      flex-direction: row;
+      padding: 25px 34px 25px 14px;
+  }
 }
 
 .c-player__head {
   display: flex;
   align-items: center;
 
+  .play-prev {
+      position: absolute;
+      left: calc(30% - 20px);
+      top: 15px;
+      @include rwd($break-flow) {
+          position: static;
+      }
+  }
+  .jp-play {
+      position: absolute;
+      left: calc(50% - 25px);
+      top: 10px;
+      @include rwd($break-flow) {
+          position: static;
+      }
+  }
+  .play-next {
+      position: absolute;
+      left: calc(70% - 20px);
+      top: 15px;
+      @include rwd($break-flow) {
+          position: static;
+      }
+  }
+  
   button {
     padding: 0;
     display: flex;
 }
 
 .c-player__timeline {
-  max-width: 590px;
-  width: calc(100% - 60px);
-  margin-left: auto;
-  margin-right: 0;
-  position: relative;
+  @include rwd($break-flow) {
+      position: relative;
+      width: calc(100% - 60px);
+      margin-left: auto;
+      max-width: 590px;
+      margin-right: 0;
+  }
 
   & > span {
     height: 10px;
 
 
 .c-player__info {
-  top: -27px;
-  left: 0;
   position: absolute;
   font-style: normal;
   font-weight: normal;
   line-height: 140%;
   letter-spacing: 0.05em;
   color: #083F4D;
+
+  top: 70px;
+  left: 16px;
+  
+  @include rwd($break-flow) {
+      top: -27px;
+      left: 0;
+  }
 }
 
 .c-player__chapters {
-  top: -27px;
-  right: 0;
+  top: 35px - 8.4px;
+  right: calc(10% - 50px);
+  width: 100px;
   position: absolute;
   font-style: normal;
   font-weight: normal;
   color: #083F4D;
   z-index: 1;
 
+  @include rwd($break-flow) {
+      top: -27px;
+      right: 0;
+  }
+  
   &.is-active {
     > span {
       &:after {
     display: flex;
     align-items: center;
     cursor: pointer;
+    justify-content: center;
 
     &:after {
       margin-left: 5px;
 }
 
 .c-player__volume {
-  display: flex;
+  display: none;
   align-items: center;
   justify-content: center;
   margin-left: 40px;
 
+  @include rwd($break-flow) {
+      display: flex;
+  }
+  
   .icon {
     font-size: 21px;
     color: #007880;
 
 
 .c-player__length {
-  width: 100%;
-  display: block;
-  position: relative;
+
+  @include rwd($break-flow) {
+      position: relative;
+      display: block;
+      width: 100%;
+  }
 
   > span {
     position: absolute;
-    padding-top: 10px;
     font-style: normal;
     font-weight: normal;
     font-size: 12px;
     letter-spacing: 0.05em;
     color: #083F4D;
 
-    &:nth-child(1) { left: 0; }
-    &:nth-child(2) { right: 0; }
-    &:nth-child(3) {
+    bottom: 22px;
+    
+    @include rwd($break-flow) {
+        padding-top: 10px;
+        bottom: auto;
+    }
+
+    &.jp-current-time {
+        left: 16px;
+        
+        @include rwd($break-flow) {
+            left: 0;
+        }
+    }
+    &.time-left {
+        right: 16px;
+        @include rwd($break-flow) {
+            right: 0;
+        }
+    }
+    &.total-time-left {
         left: 0;
         right: 0;
+        bottom: 5px;
         text-align: center;
+        @include rwd($break-flow) {
+            bottom: auto;
+        }
     }
   }
 }
diff --git a/src/wolnelektury/static/2022/styles/components/_read_more.scss b/src/wolnelektury/static/2022/styles/components/_read_more.scss
new file mode 100644 (file)
index 0000000..3ba36f9
--- /dev/null
@@ -0,0 +1,3 @@
+.c-read_more {
+    text-align: right;
+}
index 8269410..29da51e 100644 (file)
@@ -6,7 +6,14 @@
   display: flex;
   align-items: center;
   justify-content: center;
+  position: absolute;
+  left: calc(10% - 20px);
+  top: 15px;
 
+  @include rwd($break-flow) {
+      position: static;
+  }
+  
   &.is-active {
     ul {
       li {
index 76ff590..4132698 100644 (file)
@@ -5,21 +5,27 @@ $darkteal: #083F4D;
 
 .c-support {
   display: flex;
+  flex-direction: column-reverse;
   margin-top: 50px;
   background: $darkteal;
   border-radius: 15px;
   overflow: hidden;
   justify-content: center;
-  align-items: center;
+  align-items: stretch;
 
+  @include rwd($break-flow) {
+      flex-direction: row;
+  }
+  
   h2 {
-    margin: 0 auto;
+      margin: 0 auto 35px;
     font-style: italic;
     font-weight: 400;
     font-size: 34px;
     line-height: 47px;
     letter-spacing: -0.02em;
     color: #ffffff;
+    
     span {
         color: $green;
     }
@@ -30,17 +36,19 @@ $darkteal: #083F4D;
       flex-direction: column;
       justify-content: space-between;
       padding: 20px 30px 30px;
-      height: 280px;
   }
   
-  figure {
-    margin: 0;
-    font-size: 0;
-    position: relative;
+  .bg {
+      flex-basis: 193px;
+      flex-grow: 0;
+      flex-shrink: 0;
+      background-image: url('/static/2022/images/dziecko.jpeg');
+      background-size: cover;
+      background-position: 50% 20%;
 
-    img {
-        width: 270px;
-    }
+      @include rwd($break-flow) {
+          flex-basis: 270px;
+      }
   }
 
   a {
index e08a4aa..cdffc64 100644 (file)
   box-shadow: 0 4px 10px rgba(0, 0, 0, 0);
   transition: all $ease-dynamic 350ms;
   outline: 0;
-
-  @include rwd(tablet) {
-    padding: 16px;
-  }
+  margin: 5px;
 
   &.l-books__item--placeholder {
     opacity: 0;
     outline: 0;
   }
 
-  &:not(:last-child) {
-    margin-right: 17px;
-
-    @include rwd(tablet) {
-      margin-right: 5px;
-      margin-left: 5px;
-    }
-  }
-
   &:hover {
     box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25);
   }
   }
 
   a {
+      color: currentColor;
     &:hover {
-      text-decoration: underline;
+        text-decoration: underline;
+        color: $color-primary;
     }
   }
 
     color: #808080;
     margin: 0;
   }
+  .other-info {
+      display: none;
+  }
 }
 
 .l-books__item__img {
   margin: 0 0 11px;
 
   img {
-    max-width: 170px;
-
-    @include rwd(tablet) {
-      max-width: 140px;
-    }
+      width: 100%;
   }
 }
 
     line-height: 150%;
     color: #007880;
   }
-}
\ No newline at end of file
+}
index 275e5a6..78b33bb 100644 (file)
@@ -1,17 +1,16 @@
 .l-button {
   &.l-button--media {
-    @include font-size(16px);
+    @include font-size(14px);
     border: 2px solid #D5ECED;
     border-radius: 5px;
-    padding: 19px 20px;
+    padding: 10px;
     cursor: pointer;
     transition: all $ease-dynamic 350ms;
     background-color: $color-white;
     outline: 0;
 
     font-weight: bold;
-    font-size: 16px;
-    line-height: 20px;
+    line-height: 17.6px;
     display: flex;
     align-items: center;
     text-align: center;
     color: #007880;
     font-family: $base-font;
 
+    @include rwd($break-flow) {
+        @include font-size(16px);
+        line-height: 20px;
+        padding: 19px 20px;
+    }
+    
     .icon {
       font-size: 21px;
       margin-right: 15px;
     letter-spacing: -0.01em;
     font-weight: $semibold;
     text-align: center;
-    @include font-size(25px);
+    @include font-size(18px);
     line-height: 140%;
     padding: 5px 20px;
     transition: all $ease-dynamic 350ms;
 
-    @include rwd(tablet) {
-      @include font-size(18px);
+    @include rwd($break-flow) {
+      @include font-size(25px);
     }
 
     &:hover {
index 5266a72..26203f5 100644 (file)
 
 //Payments
 .l-checkout__payments {
-  display: flex;
+    display: none;
   padding: 0 30px;
   margin-top: 34px;
   margin-bottom: 0;
   flex-wrap: wrap;
   justify-content: flex-start;
+  flex-direction: column;
+
+  @include rwd($break-flow) {
+      flex-direction: row;
+  }
 }
 
 .l-checkout__payments__box {
     }
   }
 }
+
+
+
+
+
+.toggle-input{
+    &#switch-once:checked {
+        ~.l-switch__wrapper {
+            label {
+                &:nth-of-type(1) { color: #003C3C; }
+                &:nth-of-type(2) { color: #74BDC2; }
+            }
+            .toggle {
+                left: 5px;
+            }
+        }
+        ~.payments-once {
+            display: flex;
+        }
+    }
+    &#switch-monthly:checked {
+        ~.l-switch__wrapper {
+            label {
+                &:nth-of-type(1) { color: #74BDC2; }
+                &:nth-of-type(2) { color: #003C3C; }
+            }
+            .toggle {
+                left: 39px;
+            }
+        }
+        ~.payments-recurring {
+            display: flex;
+        }
+    }
+}
index b377c29..a47ea31 100644 (file)
@@ -3,11 +3,11 @@
   max-width: 1140px;
 
   .l-books {
-    width: calc(100% + 20px);
-
-    @include rwd(tablet) {
       width: 100%;
-    }
+
+      @include rwd($break-flow) {
+          width: calc(100% + 20px);
+      }
 
     .l-books__item {
       border: 1px solid #D9D9D9;
   h3 {
     margin-top: 0;
     font-weight: $semibold;
-    @include font-size(31px);
+    @include font-size(25px);
     line-height: 140%;
     letter-spacing: -0.01em;
     color: $color-dark;
 
-    @include rwd(tablet) {
-      @include font-size(25px);
+    @include rwd($break-flow) {
+      @include font-size(31px);
     }
   }
 
@@ -46,4 +46,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
index b7c9357..7de09e3 100644 (file)
@@ -1,10 +1,7 @@
 .l-container {
   width: 100%;
-  max-width: 1140px;
+  max-width: 1172px;
   margin: 0 auto;
-
-  @include rwd(tablet) {
-    padding-left: 16px;
-    padding-right: 16px;
-  }
+  padding-left: 16px;
+  padding-right: 16px;
 }
index 5aa0630..e5b7051 100644 (file)
@@ -1,5 +1,9 @@
 .l-content {
   padding-bottom: 30px;
-  padding-left: 50px;
+  padding-left: 0;
   width: 100%;
+
+  @include rwd($break-flow) {
+      padding-left: 50px;
+  }
 }
index 14becee..046cc5a 100644 (file)
@@ -6,21 +6,24 @@
   padding-bottom: 38px;
 
   .l-container {
-    @include rwd(tablet) {
       display: flex;
       flex-direction: column;
-    }
+      @include rwd($break-footer) {
+          display: block;
+      }
   }
 }
 
 .l-footer__row {
   display: flex;
-  align-items: center;
-  justify-content: space-between;
 
-  @include rwd(tablet) {
-    align-items: flex-start;
-    flex-direction: column;
+  align-items: flex-start;
+  flex-direction: column;
+
+  @include rwd($break-footer) {
+      flex-direction: row;
+      align-items: center;
+      justify-content: space-between;
   }
 
   &:nth-child(1) {
   }
 
   &:nth-child(2) {
-    margin-top: 25px;
+      margin-top: 25px;
+      column-gap: 20px;
 
     div {
-      @include rwd(tablet) {
         font-size: 14px;
+        @include rwd($break-footer) {
+            font-size: unset;
       }
       &:nth-child(1) {
         max-width: 315px;
-        min-width: 270px;
         padding-right: 53px;
-        border-right: 1px solid #007880;
-        @include rwd(tablet) {
-          border-right: 0;
-          min-width: 0;
-          margin-bottom: 20px;
+
+        border-right: 0;
+        min-width: 0;
+        margin-bottom: 20px;
+        @include rwd($break-footer) {
+            min-width: 270px;
+            border-right: 1px solid #007880;
+            margin-bottom: 0;
         }
       }
       &:nth-child(3) {
         max-width: 483px;
-        @include rwd(tablet) {
-          margin-top: 20px;
+        margin-top: 20px;
+        @include rwd($break-footer) {
+            margin-top: 0;
         }
       }
 
   }
 
   ul {
-    margin: 0;
     padding: 0;
     list-style: none;
-    @include rwd(tablet) {
-      margin-top: 20px;
+    margin-top: 20px 0 0 0;
+    @include rwd($break-footer) {
+        margin: 0;
     }
     li {
       font-weight: normal;
-      font-size: 21px;
+      font-size: 14x;
       line-height: 150%;
-      @include rwd(tablet) {
-        font-size: 14px;
+      @include rwd($break-footer) {
+        font-size: 21px;
       }
     }
 
     &:nth-of-type(1) {
-      margin-left: 90px;
+      margin-left: 0;
       margin-right: auto;
-      @include rwd(tablet) {
-        margin-left: 0;
+      @include rwd($break-footer) {
+        margin-left: 90px;
       }
     }
 
     &:nth-of-type(2) {
-      margin-left: 10px;
+      margin-left: 0;
       margin-right: auto;
-      @include rwd(tablet) {
-        margin-left: 0;
+      @include rwd($break-footer) {
+        margin-left: 10px;
       }
     }
 
index e9db5b4..6aabada 100644 (file)
@@ -25,3 +25,6 @@
 @import "pagination";
 @import "theme";
 @import "download";
+@import "simple";
+@import "taglist";
+@import "search";
index 8209a3b..e7f551d 100644 (file)
@@ -1,13 +1,26 @@
+body {
+    //width: 100%;
+}
+
 .l-navigation {
   max-width: 100%;
   margin: 0 auto;
   background-color: #083F4D;
-  padding: 12px 0;
+
+  padding: 3px 0;
   display: flex;
   align-items: center;
   justify-content: space-between;
   flex-direction: column;
 
+  @include rwd($break-menu) {
+      padding: 12px 0;
+  }
+
+  a:hover {
+      text-decoration: none;
+  }
+  
   .l-container {
     display: flex;
     align-items: center;
     top: 0; left: 0;
     width: 100%;
     z-index: $master-layer;
+
+    .l-navigation__logo {
+        width: unset;
+        overflow: unset;
+    }
+
     .l-navigation__menu {
       opacity: 1;
       pointer-events: all;
 }
 
 .l-navigation__logo {
-  position: relative;
-  z-index: $master-layer + 1;
+    display: flex;
+    position: relative;
+    z-index: $master-layer + 1;
 
-  @include rwd(tablet) {
     img {
-      width: 153px;
+        width: 153px;
+        @include rwd($break-menu) {
+            width: 230px;
+        }
     }
-  }
 }
 
 .l-navigation__button {
 }
 
 .l-naviagion__search {
-  width: 60%;
-  max-width: 580px;
-  margin-left: 60px;
-  margin-right: auto;
-
-  @include rwd(tablet) {
+    width: 60%;
+    max-width: 580px;
     margin-left: 20px;
     margin-right: 20px;
-  }
+    
+    @include rwd($break-menu) {
+        margin-left: 60px;
+        margin-right: auto;
+    }
 
   input {
     font-family: $base-font;
-    font-size: 18px;
+
+    font-size: 14px;
     font-style: italic;
     border: 0;
     padding: 10px 20px;
     width: 100%;
     max-width: 580px;
     outline: 0;
+
+    @include rwd($break-menu) {
+        font-size: 18px;
+    }
   }
 }
 
   display: flex;
   align-items: center;
   justify-content: center;
+    position: relative;
+    height: 44px;
 
   .icon-liked {
     color: #85C7CC;
     font-size: 30px;
     margin-right: 25px;
   }
-  
-  @include rwd(tablet) {
-    a {
+
+  .l-navigation__user-actions {
       display: none;
-    }
+      align-items: center;
+
+      @include rwd($break-menu) {
+          display: flex;
+          margin-left: 20px;
+      }
+      .l-navigation__login {
+          color: #74BDC2;
+          margin-right: 20px;
+          white-space: nowrap;
+
+          a {
+              color: white;
+          }
+      }
   }
+
+    .user {
+        margin-right: 25px;
+    }
+
 }
 
 .l-change-pop {
   width: 100%; height: 100%;
   background-color: #083F4D;
   z-index: $master-layer;
-  padding-top: 93px;
+  padding-top: 50px;
   opacity: 0;
   pointer-events: none;
   transition: opacity 350ms $ease-out;
 
+  @include rwd($break-menu) {
+      padding-top: 93px;
+  }
+  
   .l-container {
     display: flex;
     flex-direction: column;
   }
+
+  .l-navigation__user-bar {
+      width: 100%;
+      height: 50px;
+      border-width: 1px 0;
+      border-color: #007880;
+      border-style: solid;
+      display: flex;
+      flex-direction: row;
+      justify-content: end;
+      align-items: center;
+
+      @include rwd($break-menu) {
+          display: none;
+      }
+      
+      .l-navigation__user-actions {
+          display: flex;
+          align-items: center;
+          gap: 25px;
+          color: #85C7CC;
+          a {
+              color: white;
+              i {
+                  color: #85C7CC;
+                  font-size: 30px;
+              }
+          }
+      }
+  }
+}
+
+
+.l-navigation__menu__blocks {
+    position: relative;
+    display: flex;
+    width: 100%;
+    justify-content: space-between;
+    column-gap: 10%;
+    row-gap: 30px;
+    flex-wrap: wrap;
+    padding-bottom: 80px;
+
+    @include rwd($break-menu) {
+        display: block;
+        padding-bottom: 0;
+    }
 }
 
 .l-navigation__menu__links {
+    display: contents;
   width: 100%;
-  display: flex;
   justify-content: space-between;
-
-  @include rwd(tablet) {
-    flex-wrap: wrap;
-    max-height: calc(100vh - 120px);
-    overflow-y: scroll;
+  column-gap: 10%;
+  row-gap: 30px;
+  flex-wrap: wrap;
+
+  @include rwd($break-menu) {
+      display: flex;
+      flex-wrap: nowrap;
+      gap: 3%;
   }
 
   ul {
     margin: 0;
     padding: 0;
     list-style: none;
-    max-width: 212px;
+    //max-width: 212px;
+    width: 45%;
 
-    @include rwd(tablet) {
+    @include rwd($break-menu) {
       width: 100%;
       max-width: 100%;
       margin-bottom: 20px;
 
     li {
       font-weight: $regular;
-      @include font-size(18px);
-      line-height: 100%;
+      font-size: 16px;
+      line-height: 150%;
       padding-top: 16px;
 
+      @include rwd($break-menu) {
+          font-size: 18px;
+          line-height: 115%;
+      }
+
       strong {
         color: #92BD39;
         font-weight: $semibold;
 
 .l-navigation__menu__info {
   display: flex;
-  width: 100%;
-  padding-top: 58px;
   justify-content: space-between;
-  align-items: flex-end;
+  width: 45%;
+  padding-top: 16px;
+
+  @include rwd($break-menu) {
+      width: 100%;
+      padding-top: 58px;
+      align-items: flex-end;
+  }
+
 }
 
 .l-navigation__menu__book {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    
   p {
     color: $color-white;
     @include font-size(21px);
       font-weight: $semibold;
     }
   }
+
+  .button {
+        display: inline-block;
+        font-size: 16px;
+        font-weight: 700;
+        padding: 0 20px;
+        line-height: 38px;
+        text-align: center;
+
+        /* green 700 */
+        background: #92BD39;
+        color: #083F4D;
+        border-radius: 6px;
+
+        transition: background-color 150ms;
+
+        @include rwd($break-menu) {
+            width: auto;
+            min-width: 212px;
+        }
+
+        &:hover {
+            background-color: #FBC40F;
+        }
+    }
+}
+
+.l-navigation__menu__book__header {
+    display: flex;
+    justify-content: space-between;
+    flex-direction: column;
+    row-gap: 18px;
+
+    @include rwd($break-menu) {
+        flex-direction: row;
+        align-items: center;
+    }
+    
+    p {
+        margin: 0;
+
+        &.korona {
+            &:before {
+                content: url('images/korona.svg');
+                width: 21px;
+                margin-right: -21px;
+                position: relative;
+                top: -10px;
+                left: -3px;
+            }
+        }
+    }
 }
 
+
 .l-navigation__menu__book__info {
   display: flex;
   margin-top: 20px;
   border-radius: 6px;
   color: #808080;
 
+  flex-direction: column;
+  @include rwd($break-menu) {
+      flex-direction: row;
+  }
+
   img {
     margin-right: 10px;
+        width: 42px;
+        height: 60px;
   }
 
   h3 {
-    margin: 0;
-    font-weight: $regular;
-    @include font-size(15px);
-    line-height: 120%;
-    width: 150px;
-    strong {
-      display: block;
-      font-weight: $semibold;
-      @include font-size(18px);
-      line-height: 130%;
-    }
+      display: flex;
+      margin: 0;
+      font-weight: $regular;
+      @include font-size(15px);
+      line-height: 120%;
+      @include rwd($break-menu) {
+        width: 203px;
+      }
+      strong {
+          display: block;
+          font-weight: $semibold;
+          @include font-size(18px);
+          line-height: 130%;
+      }
   }
 
   p {
 }
 
 .l-navigation__menu__social {
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: 0;
+
+    @include rwd($break-menu) {
+        position: static;
+    }
+    
+    
   ul {
-    display: flex;
+      display: flex;
+      justify-content: space-between;
     list-style: none;
     padding: 0;
     margin: 0;
       }
     }
   }
-}
\ No newline at end of file
+}
index fcb5afb..fe38f2a 100644 (file)
@@ -1,47 +1,13 @@
 .l-quotes {
   width: 100%;
   max-width: 1140px;
-  margin-top: 58px;
+  margin-top: 24px;
   position: relative;
   overflow: hidden;
   padding-bottom: 40px;
 
-  @include rwd(tablet) {
-    margin-top: 24px;
-  }
-
-  &:after {
-    content: "";
-    display: block;
-    pointer-events: none;
-    background: url("../images/quotes-slider-bg-right.svg") center no-repeat;
-    width: 170px;
-    height: 407px;
-    position: absolute;
-    right: -150px;
-    top: 0;
-    z-index: $middle-layer;
-
-    @include rwd(tablet) {
-      display: none;
-    }
-  }
-
-  &:before {
-    content: "";
-    display: block;
-    pointer-events: none;
-    background: url("../images/quotes-slider-bg-left.svg") center no-repeat;
-    width: 170px;
-    height: 407px;
-    position: absolute;
-    left: -150px;
-    top: 0;
-    z-index: $middle-layer;
-
-    @include rwd(tablet) {
-      display: none;
-    }
+  @include rwd($break-flow) {
+    margin-top: 58px;
   }
 
   .slick-dots {
   border-radius: 10px;
   width: 558px;
   margin-top: 50px;
-  margin-left: 32px;
-  margin-right: 32px;
+  margin-left: 0;
+  margin-right: 0;
   padding-left: 32px;
   padding-right: 32px;
   padding-bottom: 32px;
 
-  @include rwd(tablet) {
-    margin-right: 0;
-    margin-left: 0;
+  @include rwd($break-flow) {
+      margin-left: 32px;
+      margin-right: 32px;
   }
 
   img {
     border-radius: 50%;
     overflow: hidden;
     font-size: 0;
-    margin-top: -50px;
+    margin-top: -24px;
+    width: 48px;
+    height: 48px;
 
-    @include rwd(tablet) {
-      width: 48px;
-      height: 48px;
-      margin-top: -24px;
+    @include rwd($break-flow) {
+        width: unset;
+        height: unset;
+        margin-top: -50px;
     }
   }
 
   h4 {
-    margin-top: 10px;
+    margin-top: 5px;
     font-weight: $semibold;
-    @include font-size(25px);
+    @include font-size(14px);
     line-height: 140%;
     text-align: center;
     letter-spacing: -0.01em;
     color: #474747;
 
-    @include rwd(tablet) {
-      margin-top: 5px;
-      @include font-size(14px);
+    @include rwd($break-flow) {
+      margin-top: 10px;
+      @include font-size(25px);
     }
   }
 
   p {
-    margin-top: 24px;
+    margin-top: 12px;
     font-style: italic;
     font-weight: $regular;
-    @include font-size(26px);
+    @include font-size(20px);
     line-height: 140%;
     text-align: center;
     letter-spacing: -0.02em;
     color: #083F4D;
 
-    @include rwd(tablet) {
-      margin-top: 12px;
-      @include font-size(20px);
+    @include rwd($break-flow) {
+      margin-top: 24px;
+      @include font-size(26px);
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/wolnelektury/static/2022/styles/layout/_search.scss b/src/wolnelektury/static/2022/styles/layout/_search.scss
new file mode 100644 (file)
index 0000000..e254993
--- /dev/null
@@ -0,0 +1,45 @@
+.l-search-bar {
+    width: 100%;
+    display: flex;
+    margin-top: 34px;
+    align-items: center;
+    justify-content: space-between;
+
+    .l-search-bar__input {
+        position: relative;
+        display: flex;
+        align-content: center;
+        width: 560px;
+        
+        .icon {
+            @include font-size(22px);
+            color: #083F4D;
+            position: absolute;
+            margin: auto;
+            top: 0;
+            bottom: 0;
+            left: 19px;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            pointer-events: none;
+        }
+
+        input {
+            font-family: $base-font;
+            font-size: 18px;
+            font-style: italic;
+            padding: 10px 20px 10px 50px;
+            border-radius: 52px;
+            border: 1px solid #D9D9D9;
+            width: 100%;
+            max-width: 580px;
+            outline: 0;
+            transition: border $ease-out 350ms;
+
+            &:focus {
+                border-color: #007880;
+            }
+        }
+    }
+}
index fef8d66..69c80d8 100644 (file)
@@ -4,12 +4,18 @@
   margin-right: auto;
   justify-content: center;
 
-  @include rwd(tablet) {
-    padding-left: 16px;
-    padding-right: 16px;
-  }
+  padding-left: 16px;
+  padding-right: 16px;
 
   &.l-section--col {
     flex-direction: column;
   }
+
+  &.l-section--row {
+      flex-direction: column;
+      @include rwd($break-flow) {
+          flex-direction: row;
+      }
+  }
 }
+
diff --git a/src/wolnelektury/static/2022/styles/layout/_simple.scss b/src/wolnelektury/static/2022/styles/layout/_simple.scss
new file mode 100644 (file)
index 0000000..f87f970
--- /dev/null
@@ -0,0 +1,141 @@
+.page-simple {
+    margin: 0 16px 70px 16px;
+    padding-bottom: 30px;
+    
+    border-radius: 10px;
+    background: #E1F1F2;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+
+    .white-box {
+        // for legacy templates
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+    }
+    
+    h1 {
+        width: 100%;
+        margin: 0 0 50px 0;
+        padding: 32px 45px;
+        border-radius: 10px 10px 0 0;
+
+        font-style: italic;
+        font-weight: 300;
+        font-size: 48px;
+        line-height: 55px;
+        letter-spacing: -0.02em;
+        background: #083F4D;
+        color: #92BD39;
+    }
+
+    > p, form, > .normal-text {
+        margin-left: 16px;
+        margin-right: 16px;
+        width: auto;
+
+        @include rwd($break3) {
+            min-width: 300px;
+            margin-left: 50px;
+            margin-right: 50px;
+        }
+    }
+
+    .wlfund {
+        margin: 0;
+        width: 90%;
+        border-collapse: separate;
+
+        tr {
+            td {
+                padding: .625rem .3125rem .625rem;
+                border-top: .625rem solid rgba(255,255,255,0);
+                border-bottom: 1px solid #083F4D;
+                text-align: center;
+            }
+        }
+    }
+
+    .form-info {
+        h2 {
+            font-size: 1.5em;
+            margin-top: 0;
+        }
+    }
+
+}
+
+.page-simple, .nice-controls {
+    button, input[type=submit] {
+        margin: 24px 0;
+        height: 56px;
+        background: #083F4D;
+        border: none;
+        border-radius: 3px;
+        font-weight: 600;
+        font-size: 20px;
+        line-height: 25px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        text-align: center;
+        color: #FFFFFF;
+        width: 100%;
+
+        @include rwd($break3) {
+            width: 340px;
+        }
+        
+        &.active {
+            outline: 2px solid #083F4D;
+            outline-offset: 3px;
+        }
+        
+        &:disabled {
+            opacity: .8;
+        }
+
+        &.button-orange {
+            background: #FFA500;
+            color: black;
+            transition: all cubic-bezier(0.25, 1, 0.5, 1) 350ms;
+            &:hover {
+                background: #92BD39;
+            }
+        }
+    }
+
+    label {
+        font-style: normal;
+        font-weight: 600;
+        font-size: 15px;
+        line-height: 160%;
+        color: #083F4D;
+        margin-top: 24px;
+    }
+
+    input, textarea, select {
+        display: block;
+        width: 100%;
+        background: #FFFFFF;
+        color: black;
+        border: 1px solid #D5ECED;
+        border-radius: 3px;
+        transition: all cubic-bezier(0, 0, 0.2, 1) 250ms;
+        padding: 10px;
+        outline: 0;
+    }
+    input, select {
+        height: 56px;
+    }
+    input[type=checkbox], input[type=radio] {
+        display: inline;
+        float: left;
+        width: 1.2em;
+        height: 1.2em;
+        vertical-align: middle;
+        margin-right: 1em;
+    }
+}
diff --git a/src/wolnelektury/static/2022/styles/layout/_taglist.scss b/src/wolnelektury/static/2022/styles/layout/_taglist.scss
new file mode 100644 (file)
index 0000000..46133c1
--- /dev/null
@@ -0,0 +1,18 @@
+.l-taglist {
+    justify-content: start;
+
+    ul {
+        list-style: none;
+        padding: 0;
+
+        li {
+            padding-left: 50px;
+            min-height: 50px;
+
+            .c-avatar {
+                margin-left: -50px;
+                margin-right: 10px;
+            }
+        }
+    }
+}
index 275fb74..edcd6c1 100644 (file)
     margin-bottom: 23px;
     display: flex;
     justify-content: space-between;
-    align-items: center;
+    flex-direction: column;
+    align-items: stretch;
 
+    @include rwd($break-flow) {
+        flex-direction: row;
+        
+    }
+    
     a {
-      display: flex;
+        display: flex;
+        justify-content: flex-end;
       align-items: center;
       font-weight: bold;
       font-size: 16px;
@@ -85,7 +92,7 @@
     flex-wrap: wrap;
 
     li {
-      width: 16.66666666666667%;
+        min-width: 150px;
       margin-bottom: 17px;
       font-weight: normal;
       font-size: 18px;
index a2be991..98570d4 100644 (file)
 }
 
 .l-your-books__header__actions {
-  display: flex;
+  display: none;
   
-  @include rwd(tablet) {
-    display: none;
+  @include rwd($break-flow) {
+    display: flex;
   }
 
   button {
 
 .l-your-books__continue {
   .l-books {
-    border-right: 1px solid #007880;
-    padding-right: 40px;
-    margin-right: 40px;
-
-    @include rwd(tablet) {
       border-right: 0;
       padding-right: 0;
       margin-right: 10px;
-    }
+
+      @include rwd($break-flow) {
+          border-right: 1px solid #007880;
+          padding-right: 40px;
+          margin-right: 40px;
+      }
   }
 }
 
 .l-your-books__shelf {
   width: 100%;
-  max-width: 928px;
-
-  @include rwd(tablet) {
-    width: 100%;
     max-width: 189px;
-  }
+
+    @include rwd($break-flow) {
+        width: 100%;
+        max-width: 928px;
+    }
 
   .l-your-books__header {
     padding-right: 85px;
@@ -88,4 +88,4 @@
     display: block;
     flex-wrap: initial;
   }
-}
\ No newline at end of file
+}
index aac3990..548c0b1 100644 (file)
@@ -1,4 +1,7 @@
+
 $teal: #007880;
+$green: #92BD39;
+$red: #FF4C54;
 
 
 .l-change-pop {
@@ -41,19 +44,24 @@ $teal: #007880;
 
 .sponsors-page {
     display: flex;
-    justify-content: space-between;
     margin-top: 48px;
-
-    @include rwd(tablet) {
-        flex-wrap: wrap;
+    flex-wrap: wrap;
+    justify-content: space-around;
+    gap: 60px;
+
+    @include rwd($break-wide) {
+        gap: 0;
+        justify-content: space-between;
+        flex-wrap: nowrap;
     }
 
     .sponsors-column {
-        margin: 1em 40px;
+        margin: 1em 0;
         display: flex;
         flex-direction: column;
         align-items: center;
         font-size: 0;
+
         .sponsors-column-name {
             font-weight: $regular;
             @include font-size(18px);
@@ -64,6 +72,7 @@ $teal: #007880;
             color: #474747;
             display: flex;
             align-items: center;
+            max-width: 8em;
         }
         .sponsor-logos {
             height: 140px;
@@ -198,6 +207,37 @@ $teal: #007880;
         padding: 5px 10px;
         margin-left: 5px;
         border-radius: 15px;
+
+        a {
+            color: currentColor;
+        }
+        a:hover {
+            color: inherit;
+        }
+
+        &.filter-category-epoch {
+            background: $teal;
+            color: white;
+        }
+        &.filter-category-kind {
+            background: $red;
+        }
+        &.filter-category-genre {
+            background: $green;
+        }
+        &.filter-category-set {
+            background: white;
+            color: black;
+            border: 1px solid #888;
+
+            &:after {
+                content: '';
+                font-family: 'wl' !important;
+                font-size: .9em;
+                margin-left: 3px;
+                color: $red;
+            }
+        }
     }
 }
 
@@ -211,6 +251,7 @@ $teal: #007880;
 }
 .with-filter .row div.filter-container {
     background: white;
+    width: 100%;
     top: 0;
     bottom: 100%;
     opacity: 0;
@@ -226,6 +267,11 @@ $teal: #007880;
         opacity: 1;
     }
 }
+.with-filter .row div.filter-container:hover {
+        top: 15px;
+        bottom: 5px;
+        opacity: 1;
+}
 
 .l-books__input .filter-container {
     top: 0;
diff --git a/src/wolnelektury/static/2022/styles/pages/_book.scss b/src/wolnelektury/static/2022/styles/pages/_book.scss
new file mode 100644 (file)
index 0000000..eee8209
--- /dev/null
@@ -0,0 +1,8 @@
+.page-book {
+    // why the fuck do we use names like this
+    // l-content is only used in book-like layouts
+    // should be renamed
+    .book-cover-small {
+        margin: 0;
+    }
+}
index e1b3f64..290f142 100644 (file)
@@ -4,16 +4,17 @@
   margin-top: 60px;
   width: 100%;
 
-  @include rwd(tablet) {
-    flex-direction: column;
+  flex-direction: column;
+  @include rwd($break-flow) {
+    flex-direction: row;
   }
 
   &.p-homepage__info--second {
-    margin-top: 30px;
+    margin-top: 10px;
     flex-wrap: initial;
 
-    @include rwd(tablet) {
-      margin-top: 10px;
+    @include rwd($break-flow) {
+      margin-top: 30px;
     }
   }
 }
     max-width: 100%;
   }
 
+  &.p-homepage__info__box--carousel {
+      width: 100%;
+      height: calc((100vw - 32px) * 315 / 975);
+      overflow: hidden;
+      @include rwd($break-flow) {
+          height: 368px;
+      }
+
+      div {
+          background-position: 50%;
+          background-size: cover;
+          display: flex;
+          justify-content: stretch;
+          align-items: stretch;
+          height: calc((100vw - 32px) * 315 / 975);
+
+          @include rwd($break-flow) {
+              height: 368px;
+          }
+
+          a {
+              width: 100%;
+              height: 100%;
+          }
+      }
+
+      .slick-dots {
+          bottom: 10px;
+    li button:before {
+      border: 1px solid #007880;
+    }
+          
+      }
+      
+  }
+  
   &.p-homepage__info__box--donate {
-    width: calc(50% - 10px);
+      width: 100%;
     display: flex;
     padding: 21px;
     color: $color-white;
     margin-top: 20px;
-    margin-right: 10px;
+    margin-right: 0;
     background-color: $color-darker-primary;
     border-color: $color-darker-primary;
 
-    @include rwd(tablet) {
-      width: 100%;
-      margin-right: 0;
+    @include rwd($break-flow) {
+        width: calc(50% - 10px);
+      margin-right: 10px;
     }
   }
 
   &.p-homepage__info__box--newsletter {
-    width: calc(50% - 10px);
+      width: 100%;
     display: flex;
     padding: 21px;
     margin-top: 20px;
-    margin-left: 10px;
+      margin-right: 0;
+      margin-left: 0;
     color: $color-darker-primary;
     background-color: $color-lighter-primary;
     border-color: $color-lighter-primary;
     position: relative;
     overflow: visible;
 
-    @include rwd(tablet) {
-      width: 100%;
-      margin-right: 0;
-      margin-left: 0;
+    @include rwd($break-flow) {
+        width: calc(50% - 10px);
+        margin-left: 10px;
     }
 
     &:after {
       content: "";
-      display: block;
+      display: none;
       width: 555px;
       height: 233px;
       bottom: 0;
       pointer-events: none;
 
 
-      @include rwd(tablet) {
-        display: none;
+      @include rwd($break-flow) {
+        display: block;
       }
     }
   }
     max-width: 705px;
     padding: 0;
     color: $color-white;
-    margin-right: 20px;
+    margin-right: 0;
+      margin-bottom: 20px;
     background: $color-darker-primary;
     border: 0;
     display: flex;
-
-    @include rwd(tablet) {
       flex-direction: column;
-      margin-right: 0;
-      margin-bottom: 20px;
+
+      @include rwd($break-flow) {
+          flex-direction: row;
+          margin-right: 20px;
+          margin-bottom: 0;
     }
 
     img {
-      min-width: 270px;
       border-radius: 0;
 
-      @include rwd(tablet) {
-        min-width: 100%;
-        height: 250px;
-        object-fit: cover;
+      min-width: 100%;
+      height: 250px;
+      object-fit: cover;
+      @include rwd($break-flow) {
+          min-width: 270px;
+          height: unset;
+          object-fit: unset;
       }
     }
 
       padding: 32px;
       background: url("../images/plant.png") center no-repeat;
       p {
-        @include font-size(24px);
+        @include font-size(18px);
 
-        @include rwd(tablet) {
-          @include font-size(18px);
+        @include rwd($break-flow) {
+          @include font-size(24px);
         }
 
         & + p {
           margin-top: 16px;
-          @include font-size(18px);
+          @include font-size(14px);
           line-height: 150%;
 
-          @include rwd(tablet) {
-            @include font-size(14px);
+          @include rwd($break-flow) {
+            @include font-size(18px);
           }
         }
       }
     }
 
     .l-button {
-      margin-top: auto;
+      margin-top: 20px;
       margin-bottom: 0;
 
-      @include rwd(tablet) {
-        margin-top: 20px;
+      @include rwd($break-flow) {
+        margin-top: auto;
       }
     }
   }
       justify-content: flex-start;
       padding: 15px;
       p {
-        @include font-size(24px);
+        @include font-size(18px);
 
-        @include rwd(tablet) {
-          @include font-size(18px);
+        @include rwd($break-flow) {
+          @include font-size(24px);
         }
 
         strong {
 
   h3 {
     font-weight: $semibold;
-    @include font-size(31px);
     line-height: 100%;
     letter-spacing: -0.01em;
 
-    @include rwd(tablet) {
-      margin-top: 0;
-      @include font-size(19px);
-      line-height: 100%;
+    margin-top: 0;
+    @include font-size(19px);
+    @include rwd($break-flow) {
+        // margin-top??
+        @include font-size(31px);
+        line-height: 100%;
     }
 
     strong {
       display: block;
       font-weight: $bold;
-      margin-top: 6px;
-      @include font-size(46px);
+      margin-top: 4px;
+      @include font-size(28px);
 
-      @include rwd(tablet) {
-        @include font-size(28px);
-        margin-top: 4px;
+      @include rwd($break-flow) {
+        @include font-size(46px);
+        margin-top: 6px;
       }
     }
   }
     margin-top: 0;
     font-style: italic;
     font-weight: $regular;
-    @include font-size(21px);
+    @include font-size(13px);
     line-height: 140%;
     letter-spacing: -0.01em;
-    @include rwd(tablet) {
-      @include font-size(13px);
+    @include rwd($break-flow) {
+      @include font-size(21px);
       line-height: 140%;
     }
     strong {
 }
 
 .p-homepage-prapremiera {
-  width: 100%;
-  background-color: #F2F2F2;
+  //  width: calc(100% + 32px);
+  //background-color: #F2F2F2;
   padding: 25px 0 40px 0;
-  margin-top: 48px;
+  //margin-top: 48px;
+  //margin-left: -16px;
+  margin-left: 16px;
 
-  @include rwd(tablet) {
-    width: calc(100% + 32px);
-    margin-left: -16px;
+  @include rwd($break-flow) {
+      width: 100%;
+      margin-left: 0;
   }
 
   .l-container {
     & > h3 {
       margin-top: 0;
       font-weight: $semibold;
-      @include font-size(31px);
+      @include font-size(25px);
       line-height: 140%;
       letter-spacing: -0.01em;
       color: #92BD39;
 
-      @include rwd(tablet) {
-        @include font-size(25px);
+      @include rwd($break-flow) {
+        @include font-size(31px);
       }
     }
   }
 }
 
 .p-homepage-prapremiera__box {
-  margin-top: 24px;
+  margin-top: 16px;
   background-color: $color-white;
   border: 1px solid #D9D9D9;
   border-radius: 10px;
   display: flex;
+  flex-direction: column;
   justify-content: space-between;
-  padding: 21px;
+  padding: 16px;
 
-  @include rwd(tablet) {
-    padding: 16px;
-    flex-direction: column;
+  @include rwd($break-flow) {
+      padding: 21px;
   }
 
+  .p-homepage-prapremiera__box__item {
+      display: flex;
+      flex-direction: row;
+      gap: 16px;
+  }
+  
   figure {
     margin: 0;
     font-size: 0;
 
-    @include rwd(tablet) {
-      display: flex;
-      align-items: center;
-      justify-content: center;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    @include rwd($break-flow) {
+        display: block;
     }
 
     a {
 }
 
 .p-homepage-prapremiera__box__content {
-  width: 385px;
 
-  @include rwd(tablet) {
     width: 100%;
     margin-top: 25px;
-  }
+    @include rwd($break-flow) {
+        //width: 385px;
+        margin-top: 0; // ?
+    }
 
   h4 {
     margin-top: 0;
     font-weight: $regular;
-    @include font-size(21px);
+    @include font-size(18px);
     line-height: 100%;
-    @include rwd(tablet) {
-      @include font-size(18px);
+    @include rwd($break-flow) {
+      @include font-size(21px);
     }
     a {
       color: #007880;
   }
 
   h3 {
-    margin-top: 0;
+    margin-top: 10px;
     font-weight: $regular;
-    @include font-size(37px);
+    @include font-size(24px);
     line-height: 120%;
-    @include rwd(tablet) {
-      margin-top: 10px;
-      @include font-size(24px);
+    @include rwd($break-flow) {
+      margin-top: 0;
+      @include font-size(37px);
     }
     a {
       color: #083F4D;
   }
 
   p {
-    margin-top: 22px;
+    margin-top: 10px;
     font-weight: $regular;
     @include font-size(18px);
     line-height: 150%;
     color: #333333;
 
-    @include rwd(tablet) {
-      margin-top: 10px;
+    @include rwd($break-flow) {
+      margin-top: 22px;
     }
   }
 }
   background: #083F4D;
   border-radius: 7px;
   color: $color-white;
-  width: 390px;
   display: flex;
-  padding: 34px;
   flex-direction: column;
   justify-content: space-between;
 
-  @include rwd(tablet) {
     width: 100%;
     padding: 18px;
     margin-top: 20px;
-  }
+    @include rwd($break-flow) {
+        //width: 390px;
+        padding: 34px;
+        //margin-top: 0;
+    }
 
   p {
     margin-top: 0;
     font-style: italic;
     font-weight: $regular;
-    @include font-size(24px);
+    @include font-size(20px);
     line-height: 150%;
 
-    @include rwd(tablet) {
       margin-bottom: 20px;
-      @include font-size(20px);
-    }
+      @include rwd($break-flow) {
+          margin-bottom: 0;
+          @include font-size(24px);
+      }
 
     strong {
       color: #92BD39;
 }
 
 .p-homepage__uptodate {
-  width: 100%;
-  margin-top: 60px;
-  margin-bottom: 50px;
-
-  @include rwd(tablet) {
     margin-top: 30px;
     width: calc(100% + 32px);
     margin-left: -16px;
-  }
+    @include rwd($break-flow) {
+        width: 100%;
+        margin-top: 60px;
+        margin-bottom: 50px;
+    }
 }
 
 .p-homepage__uptodate__header {
   h3 {
     margin-top: 0;
     font-weight: $semibold;
-    @include font-size(31px);
+    @include font-size(25px);
     line-height: 140%;
     letter-spacing: -0.01em;
     color: #474747;
 
-    @include rwd(tablet) {
-      @include font-size(25px);
+    @include rwd($break-flow) {
+      @include font-size(31px);
     }
   }
   ul {
     align-items: center;
     justify-content: center;
     li {
-      margin-left: 35px;
-      @include rwd(tablet) {
-        margin-left: 15px;
+      margin-left: 15px;
+      @include rwd($break-flow) {
+        margin-left: 35px;
       }
       a {
         font-size: 0;
         align-items: center;
         justify-content: center;
         .icon {
-          @include font-size(20px);
+          @include font-size(40px);
         }
       }
     }
   }
 }
 
-.p-homepage__uptodate__logos {
-  display: flex;
-  justify-content: space-between;
-  margin-top: 48px;
-
-  @include rwd(tablet) {
-    flex-wrap: wrap;
-  }
-
-  figure {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    font-size: 0;
-
-    @include rwd(tablet) {
-      margin: 0;
-      width: 50%;
-    }
-
-    figcaption {
-      font-weight: $regular;
-      @include font-size(18px);
-      line-height: 150%;
-      text-align: center;
-      color: #474747;
-    }
-    img {
-      margin-top: 20px;
-    }
-  }
-}
\ No newline at end of file
index 0f6a1ec..1b13178 100644 (file)
@@ -4,4 +4,5 @@
 
 /*!*/
 
-@import "homepage";
\ No newline at end of file
+@import "homepage";
+@import "book";
diff --git a/src/wolnelektury/static/2022/styles/reader_player.scss b/src/wolnelektury/static/2022/styles/reader_player.scss
new file mode 100644 (file)
index 0000000..28cc2d0
--- /dev/null
@@ -0,0 +1,470 @@
+@import "utils/module";
+@import "base/icons";
+@import "components/select";
+
+
+// copied from local, move to base
+.jp-state-playing .icon-play {
+  &:before {
+    content: $icon-pause;
+  }
+}
+.jp-state-muted .icon-volume {
+  &:before {
+    content: $icon-mute;
+  }
+}
+
+// *
+
+
+.c-media {
+  margin: 0 auto;
+}
+
+.c-media__actions {
+  display: flex;
+}
+
+.c-media__btn {
+  width: 100%;
+  text-align: center;
+  align-items: center;
+
+  &:nth-child(1) { padding-right: 19px; }
+  &:nth-child(2) { padding-left: 19px; padding-right: 19px; }
+  &:nth-child(3) { padding-left: 19px; }
+
+  .l-button {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+}
+
+.c-media__player {
+    
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    z-index: 1000;
+    
+
+  h2 {
+      //font-weight: $bold;
+      font-weight: bold;
+      //@include font-size(16px);
+      font-size: 16px;
+    line-height: 19px;
+    text-align: center;
+    letter-spacing: 0.01em;
+    color: $color-gray;
+    margin: 0;
+  }
+}
+
+.c-media__caption {
+  color: #474747;
+  background: #F2F2F2;
+  padding: 15px 24px;
+  border-radius: 0 0 5px 5px;
+  margin: 0 auto;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+
+  .icons {}
+  .content {
+    padding-left: 35px;
+    width: calc(100% - 145px);
+  }
+
+  .icon {
+    color: #808080;
+    font-size: 26px;
+    &:not(:last-child) {
+      margin-right: 16px;
+    }
+  }
+
+  p {
+    margin: 0;
+    color: #474747;
+    font-weight: normal;
+    font-size: 12px;
+    line-height: 140%;
+  }
+}
+
+
+
+
+.c-player {
+  display: flex;
+  width: 100%;
+  align-items: center;
+  position: relative;
+  background-color: black;
+  padding: 0 34px 0 14px;
+}
+
+.c-player__btn {
+  background: white;
+  border: 0;
+  outline: 0;
+  border-radius: 50%;
+  padding: 0;
+  width: 60px;
+  height: 60px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  cursor: pointer;
+  transition: all $ease-dynamic 350ms;
+
+  &:hover {
+    background: #083F4D;
+    .icon {color: white;}
+  }
+
+  .icon {
+    color: white;
+    font-size: 26px;
+    position: relative;
+    transition: background $ease-dynamic 350ms;
+    &.icon-play {
+      left: 3px;
+    }
+    &.icon-pause {
+      left: 1px;
+    }
+  }
+}
+.jp-state-playing {
+    .c-player__btn {
+        .icon.icon-play {
+            left: 1px;
+        }
+    }
+}
+
+.c-player__btns {
+  display: flex;
+  align-items: center;
+
+  button {
+    padding: 0;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background-color: transparent;
+    width: 40px; height: 40px;
+    border-radius: 50%;
+    cursor: pointer;
+    margin: 0 5px;
+    outline: 0;
+    border: 1px solid transparent;
+    transition: border-color $ease-out 450ms;
+
+    &:first-child {
+      margin-left: 0;
+    }
+
+    &:hover {
+      border-color: rgba(#fff, 0.5);
+    }
+
+    &:disabled {
+        opacity: .33;
+        &:hover {
+            border-color: transparent;
+        }
+    }
+    
+    &.c-player__btn--md {
+      width: 50px; height: 50px;
+      .icon-play {
+        font-size: 20px;
+        position: relative;
+        left: 2px;
+      }
+      .icon-pause {
+        font-size: 20px;
+      }
+    }
+
+    .icon {
+      color: white;
+      font-size: 16px;
+    }
+  }
+}
+.jp-state-playing {
+    .c-player__btns {
+        button {
+            &.c-player__btn--md {
+                .icon-play {
+                    left: 0;
+                }
+            }
+        }
+    }
+}
+
+.c-player__timeline {
+  //max-width: 590px;
+  //width: calc(100% - 60px);
+  //margin-left: auto;
+    //margin-right: 0;
+    width: 100%;
+    margin: 0 30px;
+  position: relative;
+
+  & > span {
+    height: 10px;
+    width: 100%;
+    display: block;
+    background: #F2F2F2;
+    border-radius: 5px;
+    position: relative;
+    overflow: hidden;
+
+    span.jp-seek-bar {
+      height: 100%;
+      position: absolute;
+      border-radius: 5px;
+      background-color: #FFFFFF;
+      top: 0; left: 0;
+    }
+    
+    span.jp-play-bar {
+      height: 100%;
+      position: absolute;
+      border-radius: 5px;
+      background-color: #006066;
+      top: 0; left: 0;
+    }
+  }
+}
+
+
+
+
+.c-player__title {
+  top: -27px;
+  left: 0;
+  position: absolute;
+  font-style: normal;
+  font-weight: normal;
+  font-size: 12px;
+  line-height: 140%;
+  letter-spacing: 0.05em;
+  color: #083F4D;
+}
+
+
+.c-player__info {
+    display: none;
+  font-style: normal;
+  font-weight: normal;
+  font-size: 12px;
+  line-height: 140%;
+  letter-spacing: 0.05em;
+  color: #083F4D;
+}
+
+.c-player__chapters {
+    display: none;
+  font-style: normal;
+  font-weight: normal;
+  font-size: 12px;
+  line-height: 140%;
+  letter-spacing: 0.05em;
+  color: #083F4D;
+  z-index: 1;
+
+  &.is-active {
+    > span {
+      &:after {
+        transform: rotate(180deg);
+      }
+    }
+    ul {
+      opacity: 1;
+      transform: none;
+      pointer-events: all;
+    }
+  }
+
+  > span {
+    display: flex;
+    align-items: center;
+    cursor: pointer;
+
+    &:after {
+      margin-left: 5px;
+      content: $icon-arrow-down;
+      font-family: '#{$icomoon-font-family}' !important;
+      transition: transform $ease-out 450ms;
+    }
+  }
+
+  ul {
+    width: 283px;
+    position: absolute;
+    background-color: #083F4D;
+    transform: translateY(-10px);
+    opacity: 0;
+    box-shadow: 0 0 20px rgba(1, 129, 137, 0.2);
+    transition: all $ease-out 450ms;
+    list-style-position: inside;
+    border-radius: 10px;
+    right: 0;
+    margin: 10px 0 0;
+    padding: 15px;
+    pointer-events: none;
+    li {
+      font-size: 12px;
+      line-height: 140%;
+      letter-spacing: 0.05em;
+      list-style-type: decimal;
+      margin: 5px 0;
+      color: white;
+      cursor: pointer;
+
+      span {
+          display: none;
+      }
+      span.title {
+          display: inline;
+      }
+    }
+  }
+}
+
+.c-player__volume {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-left: 40px;
+
+  .icon {
+    font-size: 21px;
+    color: white;
+    margin-right: 8px;
+    cursor: pointer;
+  }
+
+  .jp-volume-bar {
+    width: 100px;
+    border-radius: 5px;
+    height: 10px;
+    display: block;
+    background: white;
+  }
+  .jp-volume-bar-value {
+      display: block;
+      height: 10px;
+      border-radius: 5px;
+      background: #006066;
+  }
+}
+
+
+.c-player__length {
+  width: 100%;
+  display: block;
+  position: relative;
+
+  > span {
+    position: absolute;
+    //padding-top: 10px;
+    font-style: normal;
+    font-weight: normal;
+    font-size: 12px;
+    line-height: 140%;
+    letter-spacing: 0.05em;
+    color: white;
+
+    &:nth-child(1) { left: 0; }
+    &:nth-child(2) { right: 0; }
+    &:nth-child(3) {
+        left: 0;
+        right: 0;
+        text-align: center;
+    }
+  }
+}
+
+
+.project-icon {
+    max-width: 100px;
+    max-height: 50px;
+}
+
+
+#locator {
+    position: relative;
+    &.snap {
+        background: white;
+        .icon {
+            color: black;
+        }
+    }
+
+    &.up:after { 
+        content: '▲';
+        color: white;
+        font-size: .8em;
+        position: absolute;
+        top: 0px;
+        left: 0;
+        right: 0;
+        text-align: center;
+    }
+    &.down:after { 
+        content: '▼';
+        color: white;
+        font-size: .8em;
+        position: absolute;
+        bottom: 2px;
+        left: 0;
+        right: 0;
+        text-align: center;
+    }
+}
+
+
+
+#menu {
+    padding-bottom: 50px;
+    * {
+        box-sizing: content-box;
+    }
+}
+
+
+
+.with-player-bar .playing-highlight {
+    background: #D5ECED;
+}
+
+
+
+#player-bar {
+    display: none;
+}
+.with-player-bar {
+    #player-bar {
+        display: block;
+    }
+    .syncable {
+        cursor: pointer;
+    }
+}
+
+.annoy-banner-on_blackout {
+       display: none !important;
+}
index 137b9bd..6ecb491 100644 (file)
   font-size: calculateRem($size);
 }
 
-/* Photoshop letter spacing */
-@function tracking($target) {
-  @return ($target / 1000) * 1rem;
-}
 
-@mixin tracking($target) {
-  letter-spacing: tracking($target);
-}
 
-/* Float fix */
-@mixin clearfix {
-  &:after {
-    content: "";
-    display: table;
-    clear: both;
-  }
-}
+/* Breakpoints */
+$tablet:             1024px;
 
-/* Input placeholder selector */
-@mixin placeholder {
-  $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input";
-  @each $placeholder in $placeholders {
-    &:#{$placeholder}-placeholder {
-      @content;
-    }
-  }
-}
 
-@mixin keyframes($animation-name) {
-  @keyframes #{$animation-name} {
-    @content;
-  }
-}
-
-@keyframes slide-up {
-  from {
-    opacity: 0;
-  }
-  to {
-    opacity: 1;
-    transform: translate(0,0);
-  }
-}
+// under...
 
-@mixin cascading {
-  @for $i from 1 through 14 {
-    &:nth-child(#{$i}) {
-      animation: slide-up 250ms cubic-bezier(0.645, 0.045, 0.355, 1) forwards  #{$i * 0.1}s;
-    }
-  }
-}
+$break2: 360px;
+$break3: 520px;
+$break4: 680px;
+$break5: 840px;
+// somewhere here -- widen?
+$break-wide: 1172px;
 
-$scrimStops: 0% 0%, 26.2% 19%, 45.9% 34%, 61.8% 47%, 72.2% 56.5%, 80.6% 65%, 87.4% 73%, 92.5% 80.2%, 95.8% 86.1%, 97.9% 91%, 99.2% 95.2%, 99.8% 98.2%, 100% 100%;
+$screen-md:          1418px;
 
-@function getColorStop($colorTo, $colorFrom, $weight, $stop) {
-  @return mix($colorFrom, $colorTo, $weight) $stop;
-}
+$B2: $break2;
+$B3: $break3;
+$B4: $break4;
+$B5: $break5;
 
-@function getColorStops($colorTo, $colorFrom) {
-  $stops: ();
-  @each $scrimStop in $scrimStops {
-    $stops: append($stops, getColorStop($colorTo, $colorFrom, nth($scrimStop, 1), nth($scrimStop, 2)), comma)
-  }
-  @return $stops;
-}
+$break-menu: $break5;
+$break-footer: $break5;
+$break-flow: $break5;
 
-@function scrim-linear-gradient($args...) {
-  @if (length($args) == 2) {
-    @return linear-gradient(#{getColorStops(nth($args, 1), nth($args, 2))});
-  }
-  @return linear-gradient(#{nth($args, 1)}, #{getColorStops(nth($args, 2), nth($args, 3))});
-}
 
-@function unicode($str) {
-  @return unquote("\"") + $str + unquote("\"");
+@mixin rwd($canvas) {
+    //@if $canvas == 'phone' {
+    //} @else if $...
+    @media only screen and (min-width: $canvas) {
+        @content;
+    }
 }
 
-/* Breakpoints */
-$phone:              450px;
-$smartphone:         767px;
-$tablet:             1024px;
-$only-desktop:       1025px;
-$screen-xs:          1280px;
-$screen-sm:          1368px;
-$screen-md:          1418px;
-$screen-xl:          1680px;
-
-
-@mixin mq($breakpoint) {
-    @media only screen and (max-width: $breakpoint) {
+/*
+  // Print styles
+  @else if $canvas == 'print' {
+    @media print {
       @content;
     }
+  }
 
 }
-@mixin rwd($canvas) {
+*/
 
-  // Really Small devices
-  @if $canvas == 'phone' {
-    @media only screen and (max-width: $phone) {
-      @content;
-    }
-  }
 
-  // Smartphones
-  @else if $canvas == 'smartphone' {
-    @media only screen and (max-width: $smartphone) {
-      @content;
-    }
-  }
-  @else if $canvas == 'smartphone-portrait' {
-    @media only screen and (max-width: $smartphone) and (orientation: portrait) {
-      @content;
+.only-l {
+    display: none;
+    @include rwd($break5) {
+        display: block;
     }
-  }
-  @else if $canvas == 'smartphone-landscape' {
-    @media only screen and (max-width: $smartphone) and (orientation: landscape) {
-      @content;
+}
+.only-s {
+    display: block;
+    @include rwd($break5) {
+        display: none;
     }
-  }
+}
 
-  // Tablets
-  @else if $canvas == 'tablet' {
-    @media only screen and (max-width: $tablet) {
-      @content;
+.lay-row {
+    display: flex;
+    flex-direction: row;
+    column-gap: 16px;
+}
+.lay-col {
+    display: flex;
+    flex-direction: column;
+}
+.lay-spread {
+    justify-content: space-between;
+}
+.lay-l-row {
+    @include rwd($break5) {
+        display: flex;
+        flex-direction: row;
     }
-  }
-  @else if $canvas == 'tablet-portrait' {
-    @media only screen and (max-width: $tablet) and (orientation: portrait) {
-      @content;
+}
+.lay-l-block {
+    @include rwd($break5) {
+        display: block;
     }
-  }
-  @else if $canvas == 'tablet-landscape' {
-    @media only screen and (max-width: $tablet) and (orientation: landscape) {
-      @content;
+}
+.lay-s-col-rev {
+    flex-direction: column-reverse;
+    @include rwd($break5) {
+        flex-direction: row;
     }
-  }
+}
+.lay-grow {
+    flex-grow: 1;
+}
 
-  // Screens
-  @else if  $canvas == 'screen-xs' {
-    @media only screen and (max-width: $screen-xs) {
-      @content;
-    }
-  }
-  @else if $canvas == 'screen-sm' {
-    @media only screen and (max-width: $screen-sm) {
-      @content;
-    }
-  }
-  @else if $canvas == 'screen-md' {
-    @media only screen and (max-width: $screen-md) {
-      @content;
-    }
-  }
-  @else if $canvas == 'screen-xl' {
-    @media only screen and (max-width: $screen-xl) {
-      @content;
-    }
-  }
 
-  // More than tablets
-  @else if $canvas == 'only-desktop' {
-    @media only screen and (min-width: 1025px) {
-      @content;
-    }
-  }
 
-  // Print styles
-  @else if $canvas == 'print' {
-    @media print {
-      @content;
-    }
-  }
+$max-logical-viewport-width: 1140px + 32px;
 
+@mixin lvw($property, $size) {
+    #{$property}: $size * $max-logical-viewport-width / 100;
+    
+    @include rwd($break-wide) {
+        #{$property}: $size * 1vw;
+    }
 }
index 5361715..bd56604 100644 (file)
@@ -6,4 +6,4 @@
 
 @import "vars";
 @import "mixins";
-@import "bourbon";
\ No newline at end of file
+//@import "bourbon";
index 464ea2d..ac3d081 100644 (file)
@@ -61,3 +61,7 @@ $ease-out:     cubic-bezier(.0, 0, .2, 1);
 $ease-dynamic: cubic-bezier(0.25, 1, 0.5, 1);
 $duration: 250ms;
 
+
+
+
+
diff --git a/src/wolnelektury/static/contrib/jquery-1.8.0.min.js b/src/wolnelektury/static/contrib/jquery-1.8.0.min.js
new file mode 100644 (file)
index 0000000..066d72c
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v@1.8.0 jquery.com | jquery.org/license */
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bX(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bV.length;while(e--){b=bV[e]+c;if(b in a)return b}return d}function bY(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function bZ(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bY(c)&&(e[f]=p._data(c,"olddisplay",cb(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b$(a,b,c){var d=bO.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function b_(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bU[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bU[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bU[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bU[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bU[e]+"Width"))||0));return f}function ca(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bP.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+b_(a,b,c||(f?"border":"content"),e)+"px"}function cb(a){if(bR[a])return bR[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bR[a]=c,c}function ch(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||cd.test(a)?d(a,e):ch(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ch(a+"["+e+"]",b[e],c,d);else d(a,b)}function cy(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cz(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cu;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cz(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cz(a,c,d,e,"*",g)),h}function cA(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cB(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cC(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cK(){try{return new a.XMLHttpRequest}catch(b){}}function cL(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cT(){return setTimeout(function(){cM=b},0),cM=p.now()}function cU(a,b){p.each(b,function(b,c){var d=(cS[b]||[]).concat(cS["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cV(a,b,c){var d,e=0,f=0,g=cR.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cM||cT(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cM||cT(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cW(k,j.opts.specialEasing);for(;e<g;e++){d=cR[e].call(j,a,k,j.opts);if(d)return d}return cU(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cW(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cX(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bY(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cb(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cO.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cY(a,b,c,d,e){return new cY.prototype.init(a,b,c,d,e)}function cZ(a,b){var c,d={height:a},e=0;for(;e<4;e+=2-b)c=bU[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function c_(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=r.test(" ")?/^[\s\xA0]+|[\s\xA0]+$/g:/^\s+|\s+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.0",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":a.toString().replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||f.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete"||e.readyState!=="loading"&&e.addEventListener)setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){p.isFunction(c)&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return typeof a=="object"?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length||!d)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/^(?:\{.*\}|\[.*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||++p.uuid:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")===0&&(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.shift(),e=p._queueHooks(a,b),f=function(){p.dequeue(a,b)};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),delete e.stop,d.call(a,f,e)),!c.length&&e&&e.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)(d=p._data(g[h],a+"queueHooks"))&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)~f.indexOf(" "+b[g]+" ")||(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>-1)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,""+d),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,k,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=[].slice.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click")){g=p(this),g.context=this;for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){i={},k=[],g[0]=f;for(d=0;d<q;d++)l=o[d],m=l.selector,i[m]===b&&(i[m]=g.is(m)),i[m]&&k.push(l);k.length&&u.push({elem:f,matches:k})}}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){j=u[d],c.currentTarget=j.elem;for(e=0;e<j.matches.length&&!c.isImmediatePropagationStopped();e++){l=j.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,h=((p.event.special[l.origType]||{}).handle||l.handler).apply(j.elem,r),h!==b&&(c.result=h,h===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{ready:{setup:p.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bd(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)Z(a,b[e],c,d)}function be(a,b,c,d,e,f){var g,h=$.setFilters[b.toLowerCase()];return h||Z.error(b),(a||!(g=e))&&bd(a||"*",d,g=[],e),g.length>0?h(g,c,f):[]}function bf(a,c,d,e,f){var g,h,i,j,k,l,m,n,p=0,q=f.length,s=L.POS,t=new RegExp("^"+s.source+"(?!"+r+")","i"),u=function(){var a=1,c=arguments.length-2;for(;a<c;a++)arguments[a]===b&&(g[a]=b)};for(;p<q;p++){s.exec(""),a=f[p],j=[],i=0,k=e;while(g=s.exec(a)){n=s.lastIndex=g.index+g[0].length;if(n>i){m=a.slice(i,g.index),i=n,l=[c],B.test(m)&&(k&&(l=k),k=e);if(h=H.test(m))m=m.slice(0,-5).replace(B,"$&*");g.length>1&&g[0].replace(t,u),k=be(m,g[1],g[2],l,k,h)}}k?(j=j.concat(k),(m=a.slice(i))&&m!==")"?B.test(m)?bd(m,j,d,e):Z(m,c,d,e?e.concat(k):k):o.apply(d,j)):Z(a,c,d,e)}return q===1?d:Z.uniqueSort(d)}function bg(a,b,c){var d,e,f,g=[],i=0,j=D.exec(a),k=!j.pop()&&!j.pop(),l=k&&a.match(C)||[""],m=$.preFilter,n=$.filter,o=!c&&b!==h;for(;(e=l[i])!=null&&k;i++){g.push(d=[]),o&&(e=" "+e);while(e){k=!1;if(j=B.exec(e))e=e.slice(j[0].length),k=d.push({part:j.pop().replace(A," "),captures:j});for(f in n)(j=L[f].exec(e))&&(!m[f]||(j=m[f](j,b,c)))&&(e=e.slice(j.shift().length),k=d.push({part:f,captures:j}));if(!k)break}}return k||Z.error(a),g}function bh(a,b,e){var f=b.dir,g=m++;return a||(a=function(a){return a===e}),b.first?function(b,c){while(b=b[f])if(b.nodeType===1)return a(b,c)&&b}:function(b,e){var h,i=g+"."+d,j=i+"."+c;while(b=b[f])if(b.nodeType===1){if((h=b[q])===j)return b.sizset;if(typeof h=="string"&&h.indexOf(i)===0){if(b.sizset)return b}else{b[q]=j;if(a(b,e))return b.sizset=!0,b;b.sizset=!1}}}}function bi(a,b){return a?function(c,d){var e=b(c,d);return e&&a(e===!0?c:e,d)}:b}function bj(a,b,c){var d,e,f=0;for(;d=a[f];f++)$.relative[d.part]?e=bh(e,$.relative[d.part],b):(d.captures.push(b,c),e=bi(e,$.filter[d.part].apply(null,d.captures)));return e}function bk(a){return function(b,c){var d,e=0;for(;d=a[e];e++)if(d(b,c))return!0;return!1}}var c,d,e,f,g,h=a.document,i=h.documentElement,j="undefined",k=!1,l=!0,m=0,n=[].slice,o=[].push,q=("sizcache"+Math.random()).replace(".",""),r="[\\x20\\t\\r\\n\\f]",s="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",t=s.replace("w","w#"),u="([*^$|!~]?=)",v="\\["+r+"*("+s+")"+r+"*(?:"+u+r+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+t+")|)|)"+r+"*\\]",w=":("+s+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|((?:[^,]|\\\\,|(?:,(?=[^\\[]*\\]))|(?:,(?=[^\\(]*\\))))*))\\)|)",x=":(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\)|)(?=[^-]|$)",y=r+"*([\\x20\\t\\r\\n\\f>+~])"+r+"*",z="(?=[^\\x20\\t\\r\\n\\f])(?:\\\\.|"+v+"|"+w.replace(2,7)+"|[^\\\\(),])+",A=new RegExp("^"+r+"+|((?:^|[^\\\\])(?:\\\\.)*)"+r+"+$","g"),B=new RegExp("^"+y),C=new RegExp(z+"?(?="+r+"*,|$)","g"),D=new RegExp("^(?:(?!,)(?:(?:^|,)"+r+"*"+z+")*?|"+r+"*(.*?))(\\)|$)"),E=new RegExp(z.slice(19,-6)+"\\x20\\t\\r\\n\\f>+~])+|"+y,"g"),F=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,G=/[\x20\t\r\n\f]*[+~]/,H=/:not\($/,I=/h\d/i,J=/input|select|textarea|button/i,K=/\\(?!\\)/g,L={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),NAME:new RegExp("^\\[name=['\"]?("+s+")['\"]?\\]"),TAG:new RegExp("^("+s.replace("[-","[-\\*")+")"),ATTR:new RegExp("^"+v),PSEUDO:new RegExp("^"+w),CHILD:new RegExp("^:(only|nth|last|first)-child(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i"),POS:new RegExp(x,"ig"),needsContext:new RegExp("^"+r+"*[>+~]|"+x,"i")},M={},N=[],O={},P=[],Q=function(a){return a.sizzleFilter=!0,a},R=function(a){return function(b){return b.nodeName.toLowerCase()==="input"&&b.type===a}},S=function(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}},T=function(a){var b=!1,c=h.createElement("div");try{b=a(c)}catch(d){}return c=null,b},U=T(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),V=T(function(a){a.id=q+0,a.innerHTML="<a name='"+q+"'></a><div name='"+q+"'></div>",i.insertBefore(a,i.firstChild);var b=h.getElementsByName&&h.getElementsByName(q).length===2+h.getElementsByName(q+0).length;return g=!h.getElementById(q),i.removeChild(a),b}),W=T(function(a){return a.appendChild(h.createComment("")),a.getElementsByTagName("*").length===0}),X=T(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==j&&a.firstChild.getAttribute("href")==="#"}),Y=T(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||a.getElementsByClassName("e").length===0?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length!==1)}),Z=function(a,b,c,d){c=c||[],b=b||h;var e,f,g,i,j=b.nodeType;if(j!==1&&j!==9)return[];if(!a||typeof a!="string")return c;g=ba(b);if(!g&&!d)if(e=F.exec(a))if(i=e[1]){if(j===9){f=b.getElementById(i);if(!f||!f.parentNode)return c;if(f.id===i)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(i))&&bb(b,f)&&f.id===i)return c.push(f),c}else{if(e[2])return o.apply(c,n.call(b.getElementsByTagName(a),0)),c;if((i=e[3])&&Y&&b.getElementsByClassName)return o.apply(c,n.call(b.getElementsByClassName(i),0)),c}return bm(a,b,c,d,g)},$=Z.selectors={cacheLength:50,match:L,order:["ID","TAG"],attrHandle:{},createPseudo:Q,find:{ID:g?function(a,b,c){if(typeof b.getElementById!==j&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==j&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==j&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:W?function(a,b){if(typeof b.getElementsByTagName!==j)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(K,""),a[3]=(a[4]||a[5]||"").replace(K,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||Z.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&Z.error(a[0]),a},PSEUDO:function(a){var b,c=a[4];return L.CHILD.test(a[0])?null:(c&&(b=D.exec(c))&&b.pop()&&(a[0]=a[0].slice(0,b[0].length-c.length-1),c=b[0].slice(0,-1)),a.splice(2,3,c||a[3]),a)}},filter:{ID:g?function(a){return a=a.replace(K,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(K,""),function(b){var c=typeof b.getAttributeNode!==j&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(K,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=M[a];return b||(b=M[a]=new RegExp("(^|"+r+")"+a+"("+r+"|$)"),N.push(a),N.length>$.cacheLength&&delete M[N.shift()]),function(a){return b.test(a.className||typeof a.getAttribute!==j&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return b?function(d){var e=Z.attr(d,a),f=e+"";if(e==null)return b==="!=";switch(b){case"=":return f===c;case"!=":return f!==c;case"^=":return c&&f.indexOf(c)===0;case"*=":return c&&f.indexOf(c)>-1;case"$=":return c&&f.substr(f.length-c.length)===c;case"~=":return(" "+f+" ").indexOf(c)>-1;case"|=":return f===c||f.substr(0,c.length+1)===c+"-"}}:function(b){return Z.attr(b,a)!=null}},CHILD:function(a,b,c,d){if(a==="nth"){var e=m++;return function(a){var b,f,g=0,h=a;if(c===1&&d===0)return!0;b=a.parentNode;if(b&&(b[q]!==e||!a.sizset)){for(h=b.firstChild;h;h=h.nextSibling)if(h.nodeType===1){h.sizset=++g;if(h===a)break}b[q]=e}return f=a.sizset-d,c===0?f===0:f%c===0&&f/c>=0}}return function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b,c,d){var e=$.pseudos[a]||$.pseudos[a.toLowerCase()];return e||Z.error("unsupported pseudo: "+a),e.sizzleFilter?e(b,c,d):e}},pseudos:{not:Q(function(a,b,c){var d=bl(a.replace(A,"$1"),b,c);return function(a){return!d(a)}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!$.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},contains:Q(function(a){return function(b){return(b.textContent||b.innerText||bc(b)).indexOf(a)>-1}}),has:Q(function(a){return function(b){return Z(a,b).length>0}}),header:function(a){return I.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:R("radio"),checkbox:R("checkbox"),file:R("file"),password:R("password"),image:R("image"),submit:S("submit"),reset:S("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return J.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b,c){return c?a.slice(1):[a[0]]},last:function(a,b,c){var d=a.pop();return c?a:[d]},even:function(a,b,c){var d=[],e=c?1:0,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},odd:function(a,b,c){var d=[],e=c?0:1,f=a.length;for(;e<f;e=e+2)d.push(a[e]);return d},lt:function(a,b,c){return c?a.slice(+b):a.slice(0,+b)},gt:function(a,b,c){return c?a.slice(0,+b+1):a.slice(+b+1)},eq:function(a,b,c){var d=a.splice(+b,1);return c?a:d}}};$.setFilters.nth=$.setFilters.eq,$.filters=$.pseudos,X||($.attrHandle={href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}}),V&&($.order.push("NAME"),$.find.NAME=function(a,b){if(typeof b.getElementsByName!==j)return b.getElementsByName(a)}),Y&&($.order.splice(1,0,"CLASS"),$.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!==j&&!c)return b.getElementsByClassName(a)});try{n.call(i.childNodes,0)[0].nodeType}catch(_){n=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}var ba=Z.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},bb=Z.contains=i.compareDocumentPosition?function(a,b){return!!(a.compareDocumentPosition(b)&16)}:i.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc=Z.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=bc(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=bc(b);return c};Z.attr=function(a,b){var c,d=ba(a);return d||(b=b.toLowerCase()),$.attrHandle[b]?$.attrHandle[b](a):U||d?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},Z.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},[0,0].sort(function(){return l=0}),i.compareDocumentPosition?e=function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:(e=function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],g=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return f(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)g.unshift(j),j=j.parentNode;c=e.length,d=g.length;for(var l=0;l<c&&l<d;l++)if(e[l]!==g[l])return f(e[l],g[l]);return l===c?f(a,g[l],-1):f(e[l],b,1)},f=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),Z.uniqueSort=function(a){var b,c=1;if(e){k=l,a.sort(e);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1)}return a};var bl=Z.compile=function(a,b,c){var d,e,f,g=O[a];if(g&&g.context===b)return g;e=bg(a,b,c);for(f=0;d=e[f];f++)e[f]=bj(d,b,c);return g=O[a]=bk(e),g.context=b,g.runs=g.dirruns=0,P.push(a),P.length>$.cacheLength&&delete O[P.shift()],g};Z.matches=function(a,b){return Z(a,null,null,b)},Z.matchesSelector=function(a,b){return Z(b,null,null,[a]).length>0};var bm=function(a,b,e,f,g){a=a.replace(A,"$1");var h,i,j,k,l,m,p,q,r,s=a.match(C),t=a.match(E),u=b.nodeType;if(L.POS.test(a))return bf(a,b,e,f,s);if(f)h=n.call(f,0);else if(s&&s.length===1){if(t.length>1&&u===9&&!g&&(s=L.ID.exec(t[0]))){b=$.find.ID(s[1],b,g)[0];if(!b)return e;a=a.slice(t.shift().length)}q=(s=G.exec(t[0]))&&!s.index&&b.parentNode||b,r=t.pop(),m=r.split(":not")[0];for(j=0,k=$.order.length;j<k;j++){p=$.order[j];if(s=L[p].exec(m)){h=$.find[p]((s[1]||"").replace(K,""),q,g);if(h==null)continue;m===r&&(a=a.slice(0,a.length-r.length)+m.replace(L[p],""),a||o.apply(e,n.call(h,0)));break}}}if(a){i=bl(a,b,g),d=i.dirruns++,h==null&&(h=$.find.TAG("*",G.test(a)&&b.parentNode||b));for(j=0;l=h[j];j++)c=i.runs++,i(l,b)&&e.push(l)}return e};h.querySelectorAll&&function(){var a,b=bm,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[],f=[":active"],g=i.matchesSelector||i.mozMatchesSelector||i.webkitMatchesSelector||i.oMatchesSelector||i.msMatchesSelector;T(function(a){a.innerHTML="<select><option selected></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+r+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),T(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+r+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=e.length&&new RegExp(e.join("|")),bm=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a)))if(d.nodeType===9)try{return o.apply(f,n.call(d.querySelectorAll(a),0)),f}catch(i){}else if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){var j=d.getAttribute("id"),k=j||q,l=G.test(a)&&d.parentNode||d;j?k=k.replace(c,"\\$&"):d.setAttribute("id",k);try{return o.apply(f,n.call(l.querySelectorAll(a.replace(C,"[id='"+k+"'] $&")),0)),f}catch(i){}finally{j||d.removeAttribute("id")}}return b(a,d,f,g,h)},g&&(T(function(b){a=g.call(b,"div");try{g.call(b,"[test!='']:sizzle"),f.push($.match.PSEUDO)}catch(c){}}),f=new RegExp(f.join("|")),Z.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!ba(b)&&!f.test(c)&&(!e||!e.test(c)))try{var h=g.call(b,c);if(h||a||b.document&&b.document.nodeType!==11)return h}catch(i){}return Z(c,null,null,[b]).length>0})}(),Z.attr=p.attr,p.find=Z,p.expr=Z.selectors,p.expr[":"]=p.expr.pseudos,p.unique=Z.uniqueSort,p.text=Z.getText,p.isXMLDoc=Z.isXML,p.contains=Z.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=(c[0]||c).ownerDocument||c[0]||c,typeof c.createDocumentFragment=="undefined"&&(c=e),a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=0,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(g=b===e&&bA;(h=a[s])!=null;s++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{g=g||bk(b),l=l||g.appendChild(b.createElement("div")),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(f=n.length-1;f>=0;--f)p.nodeName(n[f],"tbody")&&!n[f].childNodes.length&&n[f].parentNode.removeChild(n[f])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l=g.lastChild}h.nodeType?t.push(h):t=p.merge(t,h)}l&&(g.removeChild(l),h=l=g=null);if(!p.support.appendChecked)for(s=0;(h=t[s])!=null;s++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(s=0;(h=t[s])!=null;s++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[s+1,0].concat(r)),s+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^margin/,bO=new RegExp("^("+q+")(.*)$","i"),bP=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bQ=new RegExp("^([-+])=("+q+")","i"),bR={},bS={position:"absolute",visibility:"hidden",display:"block"},bT={letterSpacing:0,fontWeight:400,lineHeight:1},bU=["Top","Right","Bottom","Left"],bV=["Webkit","O","Moz","ms"],bW=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return bZ(this,!0)},hide:function(){return bZ(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bW.apply(this,arguments):this.each(function(){(c?a:bY(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bX(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bQ.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bX(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bT&&(f=bT[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(a,b){var c,d,e,f,g=getComputedStyle(a,null),h=a.style;return g&&(c=g[b],c===""&&!p.contains(a.ownerDocument.documentElement,a)&&(c=p.style(a,b)),bP.test(c)&&bN.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=c,c=g.width,h.width=d,h.minWidth=e,h.maxWidth=f)),c}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bP.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0||bH(a,"display")!=="none"?ca(a,b,d):p.swap(a,bS,function(){return ca(a,b,d)})},set:function(a,c,d){return b$(a,c,d?b_(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bP.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bU[d]+b]=e[d]||e[d-2]||e[0];return f}},bN.test(a)||(p.cssHooks[a+b].set=b$)});var cc=/%20/g,cd=/\[\]$/,ce=/\r?\n/g,cf=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,cg=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||cg.test(this.nodeName)||cf.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(ce,"\r\n")}}):{name:b.name,value:c.replace(ce,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ch(d,a[d],c,f);return e.join("&").replace(cc,"+")};var ci,cj,ck=/#.*$/,cl=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cm=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,cn=/^(?:GET|HEAD)$/,co=/^\/\//,cp=/\?/,cq=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cr=/([?&])_=[^&]*/,cs=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,ct=p.fn.load,cu={},cv={},cw=["*/"]+["*"];try{ci=f.href}catch(cx){ci=e.createElement("a"),ci.href="",ci=ci.href}cj=cs.exec(ci.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&ct)return ct.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cq,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cA(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cA(a,b),a},ajaxSettings:{url:ci,isLocal:cm.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cw},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cy(cu),ajaxTransport:cy(cv),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cB(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cC(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=""+(c||y),k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cl.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(ck,"").replace(co,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=cs.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]==cj[1]&&i[2]==cj[2]&&(i[3]||(i[1]==="http:"?80:443))==(cj[3]||(cj[1]==="http:"?80:443)))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cz(cu,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!cn.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cp.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cr,"$1_="+z);l.url=A+(A===l.url?(cp.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cw+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cz(cv,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cD=[],cE=/\?/,cF=/(=)\?(?=&|$)|\?\?/,cG=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cD.pop()||p.expando+"_"+cG++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cF.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cF.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cF,"$1"+f):m?c.data=i.replace(cF,"$1"+f):k&&(c.url+=(cE.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cD.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cH,cI=a.ActiveXObject?function(){for(var a in cH)cH[a](0,1)}:!1,cJ=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cK()||cL()}:cK,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cI&&delete cH[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cJ,cI&&(cH||(cH={},p(a).unload(cI)),cH[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cM,cN,cO=/^(?:toggle|show|hide)$/,cP=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cQ=/queueHooks$/,cR=[cX],cS={"*":[function(a,b){var c,d,e,f=this.createTween(a,b),g=cP.exec(b),h=f.cur(),i=+h||0,j=1;if(g){c=+g[2],d=g[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&i){i=p.css(f.elem,a,!0)||c||1;do e=j=j||".5",i=i/j,p.style(f.elem,a,i+d),j=f.cur()/h;while(j!==1&&j!==e)}f.unit=d,f.start=i,f.end=g[1]?i+(g[1]+1)*c:c}return f}]};p.Animation=p.extend(cV,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cS[c]=cS[c]||[],cS[c].unshift(b)},prefilter:function(a,b){b?cR.unshift(a):cR.push(a)}}),p.Tween=cY,cY.prototype={constructor:cY,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cY.propHooks[this.prop];return a&&a.get?a.get(this):cY.propHooks._default.get(this)},run:function(a){var b,c=cY.propHooks[this.prop];return this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration),this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cY.propHooks._default.set(this),this}},cY.prototype.init.prototype=cY.prototype,cY.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cY.propHooks.scrollTop=cY.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(cZ(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bY).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cV(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cQ.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:cZ("show"),slideUp:cZ("hide"),slideToggle:cZ("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cY.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cN&&(cN=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cN),cN=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c$=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j,k,l,m=this[0],n=m&&m.ownerDocument;if(!n)return;return(e=n.body)===m?p.offset.bodyOffset(m):(d=n.documentElement,p.contains(d,m)?(c=m.getBoundingClientRect(),f=c_(n),g=d.clientTop||e.clientTop||0,h=d.clientLeft||e.clientLeft||0,i=f.pageYOffset||d.scrollTop,j=f.pageXOffset||d.scrollLeft,k=c.top+i-g,l=c.left+j-h,{top:k,left:l}):{top:0,left:0})},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c$.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c$.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=c_(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff
new file mode 100644 (file)
index 0000000..e239b66
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff2
new file mode 100644 (file)
index 0000000..9b59704
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300.woff2 differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff
new file mode 100644 (file)
index 0000000..72d3600
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff2
new file mode 100644 (file)
index 0000000..4534d66
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-300italic.woff2 differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff
new file mode 100644 (file)
index 0000000..ada806d
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff2
new file mode 100644 (file)
index 0000000..07e1da8
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-600.woff2 differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff
new file mode 100644 (file)
index 0000000..0cd0d7e
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff2
new file mode 100644 (file)
index 0000000..199eac2
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-700.woff2 differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff
new file mode 100644 (file)
index 0000000..cd65bfd
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff2
new file mode 100644 (file)
index 0000000..dd4ac82
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-italic.woff2 differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff
new file mode 100644 (file)
index 0000000..cfcf43e
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff differ
diff --git a/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff2 b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff2
new file mode 100644 (file)
index 0000000..bc9c203
Binary files /dev/null and b/src/wolnelektury/static/fonts/source-sans-pro/source-sans-pro-v21-cyrillic_greek_greek-ext_latin_latin-ext-regular.woff2 differ
index 363d99f..5c65e03 100644 (file)
   <head>
     <meta charset="utf-8">
     <meta name="description" content="">
-    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <meta name="viewport" content="width=device-width,minimum-scale=1">
     <title>{% if title %}{{ title }} | {% endif %}WolneLektury.pl</title>
     <link rel="apple-touch-icon" href="apple-touch-icon.png">
     {% stylesheet '2022' %}
-
-      <link rel="preconnect" href="https://fonts.googleapis.com">
-      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
-      <link href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400&display=swap" rel="stylesheet">
-
       {% tracking_code %}
       {% block extrahead %}{% endblock %}
   </head>
       </div>
     {% endif %}
 
+    <div class="l-container l-change-pop">
+      <h3>Przekaż 1,5%</h3>
+      <p>
+        Przekaż 1,5% podatku na Wolne Lektury KRS 00000 70056<br>
+        Ufunduj darmowe książki dla tysięcy dzieciaków.<br>
+        <a href="/info/wesprzyj-nas/">WIĘCEJ</a>
+      </p>
+      <!-- button class="l-change-pop__close">
+           <i class="icon icon-close"></i>
+           </button -->
+    </div>
+
     {% block global-content %}
       <div class="l-container">
         <div class="l-breadcrumb">
index a99a8ab..4fa616d 100644 (file)
       </form>
     </div>
     <div class="l-navigation__actions">
-      {% if request.user.is_authenticated %}
-        <a href="/ludzie/polka/"><i class="icon icon-liked"></i></a>
-        <div id="user-menu">
-          <ul>
-            <li>
-              <a href="{% url 'user_settings' %}" tabindex="-1">
-                <strong>
-                  {{ request.user.username }}
-                </strong>
-              </a>
-            </li>
-            {% if request.user.is_staff %}
-              <li><a href="{% url 'admin:index' %}" tabindex="-1">Administracja</a></li>
-              <li><a class='edit-links-toggle' href="#" tabindex="-1">Edycja</a></li>
-            {% endif %}
-            <li><a href="{% url 'logout' %}?next={% block logout %}{{ request.get_full_path }}{% endblock %}" tabindex="-1">Wyloguj się</a></li>
-          </ul>
-        </div>
-        <a href="{% url 'user_settings' %}" class="user">
-          {% if request.user.is_staff %}
-            <img src="{% static '2022/images/icons/user-staff.svg' %}">
-          {% elif request.user %}
-            <img src="{% static '2022/images/icons/user-vip.svg' %}">
-          {% else %}
-            <img src="{% static '2022/images/icons/user.svg' %}">
-          {% endif %}
-        </a>
-      {% else %}
-        <div class="l-navigation__login">
-          <a id="login-link" href='{% url 'login' %}?next={{ request.path }}'>Zaloguj się</a>
-          /
-          <a href='{% url 'register' %}?next={{ request.path }}'>Załóż konto</a>
-        </div>
-      {% endif %}
+      <div class="l-navigation__user-actions">
+        {% include '2022/user_actions.html' %}
+      </div>
       <button class="l-navigation__button js-menu" aria-label="Menu">
         <span class="c-hamburger">
           <span class="bar"></span>
     <div class="l-navigation__menu">
       <div class="scrollable">
         <div class="l-container">
+
+          <div class="l-navigation__user-bar">
+            <div class="l-navigation__user-actions">
+              {% include '2022/user_actions.html' %}
+            </div>
+          </div>
+
+          <div class="l-navigation__menu__blocks">
           <div class="l-navigation__menu__links">
             {% cache 30 menu LANGUAGE_CODE %}
               <ul>
                   </a>
               </li>
             </ul>
+            </div>
           </div>
         </div>
         </div>
index b7c7c54..ccd527c 100644 (file)
 
 {% block global-content %}
   <main class="l-main">
+
+    {% if widget %}
+      <section class="l-section">
+        <iframe src="{{ widget}}" style="width: 100%; height: 600px; border: none;"></iframe>
+      </section>
+    {% endif %}
+
     {% if recommended_collection %}
       <section class="l-section">
         <div class="l-collections js-collections">
           <div class="l-collections__header">
             <h3><a href="{{ recommended_collection.get_absolute_url }}">{{ recommended_collection.title }}</a></h3>
-            {% comment %}
             <div class="l-your-books__header__actions">
               <button class="js-prev-slide"><i class="icon icon-arrow-left"></i></button>
               <button class="js-next-slide"><i class="icon icon-arrow-right"></i></button>
             </div>
-            {% endcomment %}
           </div>
           <div class="l-books">
-            {% for book in recommended_collection.get_5_books %}
+            {% for book in recommended_collection.get_books %}
               {% include 'catalogue/2022/book_box.html' %}
             {% endfor %}
           </div>
+          <div class="c-read_more">
+            <a href="/katalog/kolekcje/">zobacz wszystkie kolekcje</a>
+          </div>
         </div>
+
       </section>
     {% endif %}
 
     <section class="l-section">
-        <div class="p-homepage__info">
-          <div class="p-homepage__info__box">
-            {% carousel_2022 'main_2022' %}
-          </div>
-          <div class="p-homepage__info__box p-homepage__info__box--donate">
-            <figure>
-              <img src="{% static '2022/images/book-donate.svg' %}" alt="Dorzuć się!">
-            </figure>
-            <div class="p-homepage__info__box__content">
-              <p>
-                Nasze książki są dostępne dla tysięcy
-                dzieciaków dzięki <strong>darowiznom</strong> od
-                osób takich jak <strong>Ty</strong>!
-              </p>
-              <a href="{% url 'club_join' %}?pk_campaign=home" class="l-button l-button--default l-button--default--dark">Dorzuć się!</a>
-            </div>
+      <div class="p-homepage__info">
+        <div class="p-homepage__info__box p-homepage__info__box--carousel">
+          {% carousel_2022 'main_2022' %}
+        </div>
+        <div class="p-homepage__info__box p-homepage__info__box--donate">
+          <figure>
+            <img src="{% static '2022/images/book-donate.svg' %}" alt="Dorzuć się!">
+          </figure>
+          <div class="p-homepage__info__box__content">
+            <p>
+              Nasze książki są dostępne dla tysięcy
+              dzieciaków dzięki <strong>darowiznom</strong> od
+              osób takich jak <strong>Ty</strong>!
+            </p>
+            <a href="{% url 'club_join' %}?pk_campaign=home" class="l-button l-button--default l-button--default--dark">Dorzuć się!</a>
           </div>
-          <div class="p-homepage__info__box p-homepage__info__box--newsletter">
-            <figure>
-              <img src="{% static '2022/images/book-newsletter.svg' %}" alt="Zapisz się na nasz Newsletter!">
-            </figure>
-            <div class="p-homepage__info__box__content">
-              <h3>
-                Zapisz się na nasz <strong>Newsletter!</strong>
-              </h3>
-              <a href="{% url 'subscribe' %}?pk_campaign=home" class="l-button l-button--default">Weź udział</a>
-            </div>
+        </div>
+        <div class="p-homepage__info__box p-homepage__info__box--newsletter">
+          <figure>
+            <img src="{% static '2022/images/book-newsletter.svg' %}" alt="Zapisz się na nasz Newsletter!">
+          </figure>
+          <div class="p-homepage__info__box__content">
+            <h3>
+              Informacja o&nbsp;nowościach <strong>Newsletter!</strong>
+            </h3>
+            <a href="{% url 'subscribe' %}?pk_campaign=home" class="l-button l-button--default">Zapisz się</a>
           </div>
         </div>
+      </div>
     </section>
 
-    <section class="l-section">
-      <div class="l-quotes">
+    <section class="l-section l-section--row">
+      <div class="l-quotes" style="">
         {% for ambassador in ambassadors %}
           <div class="l-quotes__item">
             {% thumbnail ambassador.photo '100x100' crop="center" as ambphoto %}
           </div>
         {% endfor %}
       </div>
+
+      <div class="l-quotes-ad" style="">
+        {% preview_ad_homepage %}
+      </div>
+
     </section>
 
     <section class="l-section">
               <p>
                 Jak budujemy najpopularniejszą <strong>bibliotekę online</strong> w Polsce
               </p>
-              <a href="#" class="l-button l-button--default">Dowiedz się więcej</a>
+              <a href="/info/jak-powstaja-wolne-lektury/" class="l-button l-button--default">Dowiedz się więcej</a>
             </div>
           </div>
         </div>
     </section>
   </main>
 
-  {% preview_ad_homepage %}
 
   <section class="l-section">
     <div class="l-collections js-new-books-slider">
       <div class="l-collections__header">
-        <h3>Nowości</h3>
+        <h3><a href="/katalog/nowe/">Nowości</a></h3>
         <div class="l-your-books__header__actions">
           <button class="js-prev-slide"><i class="icon icon-arrow-left"></i></button>
           <button class="js-next-slide"><i class="icon icon-arrow-right"></i></button>
diff --git a/src/wolnelektury/templates/2022/user_actions.html b/src/wolnelektury/templates/2022/user_actions.html
new file mode 100644 (file)
index 0000000..28ea5e7
--- /dev/null
@@ -0,0 +1,40 @@
+{% load static %}
+
+{% if request.user.is_authenticated %}
+  <a href="/ludzie/polka/"><i class="icon icon-liked"></i></a>
+  <div id="user-menu">
+    <ul>
+      <li>
+        <a href="{% url 'user_settings' %}" tabindex="-1">
+          <strong>
+            {{ request.user.username }}
+          </strong>
+        </a>
+      </li>
+      {% if request.user.is_staff %}
+        <li><a href="{% url 'admin:index' %}" tabindex="-1">Administracja</a></li>
+        <li><a class='edit-links-toggle' href="#" tabindex="-1">Edycja</a></li>
+      {% endif %}
+      {% if request.user.membership %}
+        <li><a href="{% url 'club_join' %}">Wspierasz Wolne Lektury, dziękujemy!</a></li>
+      {% endif %}
+
+      <li><a href="{% url 'logout' %}?next={% block logout %}{{ request.get_full_path }}{% endblock %}" tabindex="-1">Wyloguj się</a></li>
+    </ul>
+  </div>
+  <a href="{% url 'user_settings' %}" class="user">
+    {% if request.user.is_staffs %}
+      <img src="{% static '2022/images/icons/user-staff.svg' %}">
+    {% elif request.user.membership %}
+      <img src="{% static '2022/images/icons/user-vip.svg' %}">
+    {% else %}
+      <img src="{% static '2022/images/icons/user.svg' %}">
+    {% endif %}
+  </a>
+{% else %}
+  <div class="l-navigation__login">
+    <a id="login-link" href='{% url 'login' %}?next={{ request.path }}'>Zaloguj się</a>
+    /
+    <a href='{% url 'register' %}?next={{ request.path }}'>Załóż konto</a>
+  </div>
+{% endif %}
diff --git a/src/wolnelektury/templates/admin/long_filter.html b/src/wolnelektury/templates/admin/long_filter.html
new file mode 100644 (file)
index 0000000..5893ecf
--- /dev/null
@@ -0,0 +1,19 @@
+{% load i18n %}
+<h3>{% blocktranslate with filter_title=title %} By {{ filter_title }} {% endblocktranslate %}</h3>
+<script>
+ function longFilter(f) {
+     $ = django.jQuery;
+     let v = f.value;
+     ul = $(f).next();
+     $('li', ul).each(function(i, e) {
+         $(this).css('display', ($(e).text().search(v) != -1) ? 'block' : 'none');
+     });
+ }
+</script>
+<input style="margin: 0 15px" onkeyup="longFilter(this)">
+<ul class="longfilter" style="word-wrap: anywhere; max-height:400px; overflow:hidden;">
+  {% for choice in choices %}
+    <li{% if choice.selected %} class="selected"{% endif %}>
+      <a href="{{ choice.query_string|iriencode }}" title="{{ choice.display }}">{{ choice.display }}</a></li>
+  {% endfor %}
+</ul>
index eaec832..49110e9 100644 (file)
@@ -31,10 +31,14 @@ def main_page_2022(request):
     ctx['last_published'] = Book.objects.exclude(cover_clean='').filter(findable=True, parent=None).order_by('-created_at')[:10]
     ctx['recommended_collection'] = Collection.objects.filter(listed=True, role='recommend').order_by('?').first()
     ctx['ambassadors'] = club.models.Ambassador.objects.all().order_by('?')
+    ctx['widget'] = settings.WIDGETS.get(request.GET.get('w'))
     return render(request, '2022/main_page.html', ctx)
 
 @never_cache
 def main_page(request):
+    if request.GET.get('w') in settings.WIDGETS:
+        request.EXPERIMENTS['layout'].override(True)
+
     if request.EXPERIMENTS['layout'].value:
         return main_page_2022(request)
 
@@ -117,6 +121,15 @@ class WLRegisterView(FormView):
     form_class = RegistrationForm
     template_name = 'registration/register.html'
 
+    def form_valid(self, form):
+        form.save()
+        user = auth.authenticate(
+            username=form.cleaned_data['username'],
+            password=form.cleaned_data['password1']
+        )
+        auth.login(self.request, user)
+        return HttpResponseRedirect(quote_plus(self.request.GET.get('next', '/'), safe='/?='))
+
 wl_register_view = WLRegisterView.as_view()