From fc1f1ef3150ce52ec850c4941570fa6b130b8124 Mon Sep 17 00:00:00 2001 From: sinuca <55vitaminado@gmail.com> Date: Sun, 16 Mar 2014 23:21:01 -0300 Subject: [PATCH] "Favelog" theme added. Just a catalog with ordering functionality --- templates/themes/favelog/catalog.css | 75 +++++ templates/themes/favelog/catalog.html | 79 +++++ templates/themes/favelog/favelog.js | 64 ++++ templates/themes/favelog/info.php | 58 ++++ .../themes/favelog/jquery.mixitup.min.js | 43 +++ .../themes/favelog/jquery.tooltipster.min.js | 1 + templates/themes/favelog/theme.php | 133 +++++++++ templates/themes/favelog/thumb.png | Bin 0 -> 11543 bytes templates/themes/favelog/tooltipster.css | 274 ++++++++++++++++++ 9 files changed, 727 insertions(+) create mode 100644 templates/themes/favelog/catalog.css create mode 100644 templates/themes/favelog/catalog.html create mode 100644 templates/themes/favelog/favelog.js create mode 100644 templates/themes/favelog/info.php create mode 100644 templates/themes/favelog/jquery.mixitup.min.js create mode 100644 templates/themes/favelog/jquery.tooltipster.min.js create mode 100644 templates/themes/favelog/theme.php create mode 100644 templates/themes/favelog/thumb.png create mode 100644 templates/themes/favelog/tooltipster.css diff --git a/templates/themes/favelog/catalog.css b/templates/themes/favelog/catalog.css new file mode 100644 index 00000000..29ff4cbf --- /dev/null +++ b/templates/themes/favelog/catalog.css @@ -0,0 +1,75 @@ +img { + float:none!important; + margin: auto; + margin-bottom: 12px; + /*max-height: 150px; + max-width: 200px;*/ + box-shadow: 0 0 4px rgba(0, 0, 0, 0.55); + border: 2px solid rgba(153, 153, 153, 0); +} + +/* +img:hover { + border: 2px solid rgba(153, 153, 153, 0.27); +} +*/ + +div.threads{ + text-align: center; + margin-left: -20px; +} + +div.thread { + display: inline-block; + vertical-align: top; + margin-bottom:25px; + margin-left: 20px; + margin-right: 15px; + text-align:center; + font-weight:normal; + width:205px; + overflow:hidden; + position: relative; + font-size:11px; + padding: 15px; + background: rgba(182, 182, 182, 0.12); + border: 2px solid rgba(111, 111, 111, 0.34); + max-height:300px; +} + +div.thread:hover { + background: #D6DAF0; + border-color: #B7C5D9; +} + +div.grid-size-small { + width: 200px; + max-width: 200px; + max-height: 350px; +} + +div.grid-size-large { + width: 300px; + max-width: 300px; + max-height: 450px; +} + +img.thread-image { + height: auto; + max-width: 100%; +} + +@media (max-width: 420px) { + ul#Grid { + padding-left: 18px; + } + div.thread { + width: auto; + margin-left: 0; + margin-right: 0; + + } + div.threads { + overflow: hidden; + } +} \ No newline at end of file diff --git a/templates/themes/favelog/catalog.html b/templates/themes/favelog/catalog.html new file mode 100644 index 00000000..02135b94 --- /dev/null +++ b/templates/themes/favelog/catalog.html @@ -0,0 +1,79 @@ +{% filter remove_whitespace %} + + + + + {{ settings.title }} + + + {% if config.url_favicon %}{% endif %} + {% if settings.use_tooltipster %}{% endif %} + + + {% if settings.use_tooltipster %} + {% else %} + + {% endif %} + + {% if config.default_stylesheet.1 != '' %}{% endif %} + {% if config.font_awesome %}{% endif %} + + + + {{ boardlist.top }} +
+

{{ settings.title }} (/{{ board }}/)

+
{{ settings.subtitle }}
+
+ + + + {% trans 'Sort by' %}: + + + {% trans 'Image size' %}: + +
+ +
+ +
+

Powered by Tinyboard {{ config.version }} | Tinyboard Copyright © 2010-2013 Tinyboard Development Group

+ + +{% endfilter %} diff --git a/templates/themes/favelog/favelog.js b/templates/themes/favelog/favelog.js new file mode 100644 index 00000000..5497cb4a --- /dev/null +++ b/templates/themes/favelog/favelog.js @@ -0,0 +1,64 @@ +$().ready(function(){ + + $("#selectorzilla").change(function(){ + sheit = this.value; + $("#sort-"+sheit).trigger("click"); + }); + + $("#imgurzilla").change(function(){ + sheit = this.value; + if (sheit == "small") { + old = "large"; + } else { + old = "small"; + } + $(".grid-li").removeClass("grid-size-"+old); + $(".grid-li").addClass("grid-size-"+sheit); + }); + + $('#Grid').mixitup({ + onMixEnd: function(){ + if(use_tooltipster) { + buildTooltipster(); + } + } + }); + + if(use_tooltipster) { + buildTooltipster(); + } + +}); + +function buildTooltipster(){ + $(".thread-image").each(function(){ + subject = $(this).attr('data-subject'); + name = $(this).attr('data-name'); + muhdifference = $(this).attr('data-muhdifference'); + last_reply = $(this).attr('data-last-reply'); + last_subject = $(this).attr('data-last-subject'); + last_name = $(this).attr('data-last-name'); + last_difference = $(this).attr('data-last-difference'); + muh_body = ''; + + if (subject) { + muh_body = muh_body + subject + ' por'; + } else { + muh_body = muh_body + 'Postado por'; + }; + muh_body = muh_body + ' ' + name + ' ' + muhdifference + ''; + + if (last_reply) { + muh_body = muh_body + '
'; + if (last_subject) { + muh_body = muh_body + last_subject + ' por'; + } else{ + muh_body = muh_body + 'Última resposta por'; + }; + muh_body = muh_body + ' ' + last_name + ' ' + last_difference + ''; + } + $(this).tooltipster({ + content: $(muh_body) + }); + }); +} \ No newline at end of file diff --git a/templates/themes/favelog/info.php b/templates/themes/favelog/info.php new file mode 100644 index 00000000..5e339930 --- /dev/null +++ b/templates/themes/favelog/info.php @@ -0,0 +1,58 @@ + 'Title', + 'name' => 'title', + 'type' => 'text', + 'default' => 'Favelog' + ); + + $__boards = listBoards(); + $__default_boards = Array(); + foreach ($__boards as $__board) + $__default_boards[] = $__board['uri']; + + $theme['config'][] = Array( + 'title' => 'Included boards', + 'name' => 'boards', + 'type' => 'text', + 'comment' => '(space seperated)', + 'default' => implode(' ', $__default_boards) + ); + + $theme['config'][] = Array( + 'title' => 'CSS file', + 'name' => 'css', + 'type' => 'text', + 'default' => 'catalog.css', + 'comment' => '(eg. "catalog.css")' + ); + + $theme['config'][] = Array( + 'title' => 'Update on new posts', + 'name' => 'update_on_posts', + 'type' => 'checkbox', + 'default' => true, + 'comment' => 'Without this checked, the catalog only updates on new threads.' + ); + + $theme['config'][] = Array( + 'title' => 'Use tooltipster', + 'name' => 'use_tooltipster', + 'type' => 'checkbox', + 'default' => true, + 'comment' => 'Check this if you wish to show a nice tooltip with info about the thread on mouse over. Texts only available in PT-br.' + ); + + // Unique function name for building everything + $theme['build_function'] = 'favelog_build'; diff --git a/templates/themes/favelog/jquery.mixitup.min.js b/templates/themes/favelog/jquery.mixitup.min.js new file mode 100644 index 00000000..5b4e4ce0 --- /dev/null +++ b/templates/themes/favelog/jquery.mixitup.min.js @@ -0,0 +1,43 @@ +/* +* MIXITUP - A CSS3 and JQuery Filter & Sort Plugin +* Version: 1.5.5 +* License: Creative Commons Attribution-NoDerivs 3.0 Unported - CC BY-ND 3.0 +* http://creativecommons.org/licenses/by-nd/3.0/ +* This software may be used freely on commercial and non-commercial projects with attribution to the author/copyright holder. +* Author: Patrick Kunka +* Copyright 2012-2013 Patrick Kunka, Barrel LLC, All Rights Reserved +* +* http://mixitup.io +*/ + +(function(d){function r(e,c,l,b,a){function f(){n.unbind("webkitTransitionEnd transitionend otransitionend oTransitionEnd");c&&x(c,l,b,a);a.startOrder=[];a.newOrder=[];a.origSort=[];a.checkSort=[];v.removeStyle(a.prefix+"filter, filter, "+a.prefix+"transform, transform, opacity, display").css(a.clean).removeAttr("data-checksum");window.atob||v.css({display:"none",opacity:"0"});n.removeStyle(a.prefix+"transition, transition, "+a.prefix+"perspective, perspective, "+a.prefix+"perspective-origin, perspective-origin, "+ +(a.resizeContainer?"height":""));"list"==a.layoutMode?(p.css({display:a.targetDisplayList,opacity:"1"}),a.origDisplay=a.targetDisplayList):(p.css({display:a.targetDisplayGrid,opacity:"1"}),a.origDisplay=a.targetDisplayGrid);a.origLayout=a.layoutMode;setTimeout(function(){v.removeStyle(a.prefix+"transition, transition");a.mixing=!1;if("function"==typeof a.onMixEnd){var b=a.onMixEnd.call(this,a);a=b?b:a}})}clearInterval(a.failsafe);a.mixing=!0;a.filter=e;if("function"==typeof a.onMixStart){var g=a.onMixStart.call(this, +a);a=g?g:a}for(var k=a.transitionSpeed,g=0;2>g;g++){var h=0==g?h=a.prefix:"";a.transition[h+"transition"]="all "+k+"ms linear";a.transition[h+"transform"]=h+"translate3d(0,0,0)";a.perspective[h+"perspective"]=a.perspectiveDistance+"px";a.perspective[h+"perspective-origin"]=a.perspectiveOrigin}var w=a.targetSelector,v=b.find(w);v.each(function(){this.data={}});var n=v.parent();n.css(a.perspective);a.easingFallback="ease-in-out";"smooth"==a.easing&&(a.easing="cubic-bezier(0.25, 0.46, 0.45, 0.94)"); +"snap"==a.easing&&(a.easing="cubic-bezier(0.77, 0, 0.175, 1)");"windback"==a.easing&&(a.easing="cubic-bezier(0.175, 0.885, 0.320, 1.275)",a.easingFallback="cubic-bezier(0.175, 0.885, 0.320, 1)");"windup"==a.easing&&(a.easing="cubic-bezier(0.6, -0.28, 0.735, 0.045)",a.easingFallback="cubic-bezier(0.6, 0.28, 0.735, 0.045)");g="list"==a.layoutMode&&null!=a.listEffects?a.listEffects:a.effects;Array.prototype.indexOf&&(a.fade=-1t.length?s=s.add(b.find(w+":visible")):v.each(function(){var a=d(this);if(r){var b=0;d.each(t,function(d){this.length? +a.is("."+this.join(", ."))&&b++:0g;g++)h=0==g?h=a.prefix:"",e[h+"transform"]=a.scale+" "+a.rotateX+" "+a.rotateY+" "+a.rotateZ,e[h+"filter"]=a.blur+" "+a.grayscale;q.css(e);m.each(function(){var b=this.data,c=d(this);c.hasClass("mix_tohide")?(b.preTX=b.origPos.left-b.hideInterPos.left,b.preTY=b.origPos.top-b.hideInterPos.top):(b.preTX=b.origPos.left-b.preInterPos.left,b.preTY=b.origPos.top-b.preInterPos.top);for(var e={},k=0;2>k;k++){var h= +0==k?h=a.prefix:"";e[h+"transform"]="translate("+b.preTX+"px,"+b.preTY+"px)"}c.css(e)});"list"==a.layoutMode?(b.addClass(a.listClass),b.removeClass(a.gridClass)):(b.addClass(a.gridClass),b.removeClass(a.listClass));setTimeout(function(){if(a.resizeContainer){for(var b={},c=0;2>c;c++){var e=0==c?e=a.prefix:"";b[e+"transition"]="all "+k+"ms ease-in-out";b.height=a.newHeight+"px"}n.css(b)}u.css("opacity",a.fade);q.css("opacity",1);q.each(function(){var b=this.data;b.tX=b.finalPos.left-b.showInterPos.left; +b.tY=b.finalPos.top-b.showInterPos.top;for(var c={},e=0;2>e;e++){var h=0==e?h=a.prefix:"";c[h+"transition-property"]=h+"transform, "+h+"filter, opacity";c[h+"transition-timing-function"]=a.easing+", linear, linear";c[h+"transition-duration"]=k+"ms";c[h+"transition-delay"]="0";c[h+"transform"]="translate("+b.tX+"px,"+b.tY+"px)";c[h+"filter"]="none"}d(this).css("-webkit-transition","all "+k+"ms "+a.easingFallback).css(c)});m.each(function(){var b=this.data;b.tX=0!=b.finalPrePos.left?b.finalPrePos.left- +b.preInterPos.left:0;b.tY=0!=b.finalPrePos.left?b.finalPrePos.top-b.preInterPos.top:0;for(var c={},e=0;2>e;e++){var h=0==e?h=a.prefix:"";c[h+"transition"]="all "+k+"ms "+a.easing;c[h+"transform"]="translate("+b.tX+"px,"+b.tY+"px)"}d(this).css("-webkit-transition","all "+k+"ms "+a.easingFallback).css(c)});b={};for(c=0;2>c;c++)e=0==c?e=a.prefix:"",b[e+"transition"]="all "+k+"ms "+a.easing+", "+e+"filter "+k+"ms linear, opacity "+k+"ms linear",b[e+"transform"]=a.scale+" "+a.rotateX+" "+a.rotateY+" "+ +a.rotateZ,b[e+"filter"]=a.blur+" "+a.grayscale,b.opacity=a.fade;u.css(b);n.bind("webkitTransitionEnd transitionend otransitionend oTransitionEnd",function(a){if(-1e;e++){var d=0==e?d=a.prefix:"";c[d+"transition"]="height "+k+"ms ease-in-out";c.height=a.minHeight+"px"}n.css(c)}v.css(a.transition);if(s.length){c={};for(e=0;2>e;e++)d=0==e?d=a.prefix:"",c[d+"transform"]=a.scale+" "+a.rotateX+" "+a.rotateY+" "+a.rotateZ,c[d+"filter"]=a.blur+" "+a.grayscale,c.opacity=a.fade;u.css(c);n.bind("webkitTransitionEnd transitionend otransitionend oTransitionEnd",function(c){if(-1d?1:0}function f(a){"asc"==c?k.prepend(a).prepend(" "):k.append(a).append(" ")}function g(a){a=a.slice();for(var b=a.length,c=b;c--;){var e=parseInt(Math.random()*b),d=a[c];a[c]=a[e];a[e]=d}return a}l.find(b.targetSelector).wrapAll('
'); +var k=l.find(".mix_sorter");b.origSort.length||k.find(b.targetSelector+":visible").each(function(){d(this).wrap("");b.origSort.push(d(this).parent().html().replace(/\s+/g,""));d(this).unwrap()});k.empty();if("reset"==e)d.each(b.startOrder,function(){k.append(this).append(" ")});else if("default"==e)d.each(b.origOrder,function(){f(this)});else if("random"==e)b.newOrder.length||(b.newOrder=g(b.startOrder)),d.each(b.newOrder,function(){k.append(this).append(" ")});else if("custom"==e)d.each(c,function(){f(this)}); +else{if("undefined"===typeof b.origOrder[0].attr(e))return console.log("No such attribute found. Terminating"),!1;b.newOrder.length||(d.each(b.origOrder,function(){b.newOrder.push(d(this))}),b.newOrder.sort(a));d.each(b.newOrder,function(){f(this)})}b.checkSort=[];k.find(b.targetSelector+":visible").each(function(a){var c=d(this);0==a&&c.attr("data-checksum","1");c.wrap("");b.checkSort.push(c.parent().html().replace(/\s+/g,""));c.unwrap()});l.find(b.targetSelector).unwrap()}function B(e){for(var c= +["Webkit","Moz","O","ms"],d=0;df;f++)c=0==f?c=b.prefix:"",b.transition[c+"transition"]="all "+b.transitionSpeed+"ms ease-in-out",b.perspective[c+"perspective"]=b.perspectiveDistance+"px",b.perspective[c+"perspective-origin"]=b.perspectiveOrigin;for(f=0;2>f;f++)c=0==f?c=b.prefix:"",b.clean[c+"transition"]="none";"list"==b.layoutMode?(a.addClass(b.listClass), +b.origDisplay=b.targetDisplayList):(a.addClass(b.gridClass),b.origDisplay=b.targetDisplayGrid);b.origLayout=b.layoutMode;f=b.showOnLoad.split(" ");d.each(f,function(){d(b.filterSelector+'[data-filter="'+this+'"]').addClass("active")});a.find(b.targetSelector).addClass("mix_all");"all"==f[0]&&(f[0]="mix_all",b.showOnLoad="mix_all");var g=d();d.each(f,function(){g=g.add(d("."+this))});g.each(function(){var a=d(this);"list"==b.layoutMode?a.css("display",b.targetDisplayList):a.css("display",b.targetDisplayGrid); +a.css(b.transition)});setTimeout(function(){b.mixing=!0;g.css("opacity","1");setTimeout(function(){"list"==b.layoutMode?g.removeStyle(b.prefix+"transition, transition").css({display:b.targetDisplayList,opacity:1}):g.removeStyle(b.prefix+"transition, transition").css({display:b.targetDisplayGrid,opacity:1});b.mixing=!1;if("function"==typeof b.onMixLoad){var a=b.onMixLoad.call(this,b);b=a?a:b}},b.transitionSpeed)},10);b.filter=b.showOnLoad;d(b.sortSelector).bind(b.buttonEvent,function(){if(!b.mixing){var c= +d(this),e=c.attr("data-sort"),f=c.attr("data-order");if(!c.hasClass("active"))d(b.sortSelector).removeClass("active"),c.addClass("active");else if("random"!=e)return!1;a.find(b.targetSelector).each(function(){b.startOrder.push(d(this))});r(b.filter,e,f,a,b)}});d(b.filterSelector).bind(b.buttonEvent,function(){if(!b.mixing){var c=d(this);if(!1==b.multiFilter)d(b.filterSelector).removeClass("active"),c.addClass("active"),b.filter=c.attr("data-filter"),d(b.filterSelector+'[data-filter="'+b.filter+'"]').addClass("active"); +else{var e=c.attr("data-filter");c.hasClass("active")?(c.removeClass("active"),b.filter=b.filter.replace(RegExp("(\\s|^)"+e),"")):(c.addClass("active"),b.filter=b.filter+" "+e)}r(b.filter,null,null,a,b)}})})},toGrid:function(){return this.each(function(){var e=this.config;"grid"!=e.layoutMode&&(e.layoutMode="grid",r(e.filter,null,null,d(this),e))})},toList:function(){return this.each(function(){var e=this.config;"list"!=e.layoutMode&&(e.layoutMode="list",r(e.filter,null,null,d(this),e))})},filter:function(e){return this.each(function(){var c= +this.config;c.mixing||(d(c.filterSelector).removeClass("active"),d(c.filterSelector+'[data-filter="'+e+'"]').addClass("active"),r(e,null,null,d(this),c))})},sort:function(e){return this.each(function(){var c=this.config,l=d(this);if(!c.mixing){d(c.sortSelector).removeClass("active");if(d.isArray(e)){var b=e[0],a=e[1];d(c.sortSelector+'[data-sort="'+e[0]+'"][data-order="'+e[1]+'"]').addClass("active")}else d(c.sortSelector+'[data-sort="'+e+'"]').addClass("active"),b=e,a="desc";l.find(c.targetSelector).each(function(){c.startOrder.push(d(this))}); +r(c.filter,b,a,l,c)}})},multimix:function(e){return this.each(function(){var c=this.config,l=d(this);multiOut={filter:c.filter,sort:null,order:"desc",layoutMode:c.layoutMode};d.extend(multiOut,e);c.mixing||(d(c.filterSelector).add(c.sortSelector).removeClass("active"),d(c.filterSelector+'[data-filter="'+multiOut.filter+'"]').addClass("active"),"undefined"!==typeof multiOut.sort&&(d(c.sortSelector+'[data-sort="'+multiOut.sort+'"][data-order="'+multiOut.order+'"]').addClass("active"),l.find(c.targetSelector).each(function(){c.startOrder.push(d(this))})), +c.layoutMode=multiOut.layoutMode,r(multiOut.filter,multiOut.sort,multiOut.order,l,c))})},remix:function(e){return this.each(function(){var c=this.config,l=d(this);c.origOrder=[];l.find(c.targetSelector).each(function(){var b=d(this);b.addClass("mix_all");c.origOrder.push(b)});c.mixing||"undefined"===typeof e||(d(c.filterSelector).removeClass("active"),d(c.filterSelector+'[data-filter="'+e+'"]').addClass("active"),r(e,null,null,l,c))})}};d.fn.mixitup=function(d,c){if(y[d])return y[d].apply(this,Array.prototype.slice.call(arguments, +1));if("object"===typeof d||!d)return y.init.apply(this,arguments)};d.fn.removeStyle=function(e){return this.each(function(){var c=d(this);e=e.replace(/\s+/g,"");var l=e.split(",");d.each(l,function(){var b=RegExp(this.toString()+"[^;]+;?","g");c.attr("style",function(a,c){if(c)return c.replace(b,"")})})})}})(jQuery); \ No newline at end of file diff --git a/templates/themes/favelog/jquery.tooltipster.min.js b/templates/themes/favelog/jquery.tooltipster.min.js new file mode 100644 index 00000000..91c61639 --- /dev/null +++ b/templates/themes/favelog/jquery.tooltipster.min.js @@ -0,0 +1 @@ +/* Tooltipster v3.0.5 */;(function(e,t,n){function o(t,n){this.bodyOverflowX;this.checkInterval=null;this.content;this.$el=e(t);this.elProxyPosition;this.$elProxy;this.enabled=true;this.options=e.extend({},s,n);this.mouseIsOverProxy=false;this.namespace="tooltipster-"+Math.round(Math.random()*1e5);this.status="hidden";this.timerHide=null;this.timerShow=null;this.$tooltip;this.options.iconTheme=this.options.iconTheme.replace(".","");this.options.theme=this.options.theme.replace(".","");this.init()}function u(t,n){var r=true;e.each(t,function(e,i){if(typeof n[e]==="undefined"||t[e]!==n[e]){r=false;return false}});return r}function l(){return!f&&a}function c(){var e=n.body||n.documentElement,t=e.style,r="transition";if(typeof t[r]=="string"){return true}v=["Moz","Webkit","Khtml","O","ms"],r=r.charAt(0).toUpperCase()+r.substr(1);for(var i=0;i');t.$elProxy.text(t.options.icon)}else{if(t.options.iconCloning)t.$elProxy=t.options.icon.clone(true);else t.$elProxy=t.options.icon}t.$elProxy.insertAfter(t.$el)}else{t.$elProxy=t.$el}if(t.options.trigger=="hover"){t.$elProxy.on("mouseenter."+t.namespace,function(){if(!l()||t.options.touchDevices){t.mouseIsOverProxy=true;t.showTooltip()}}).on("mouseleave."+t.namespace,function(){if(!l()||t.options.touchDevices){t.mouseIsOverProxy=false}});if(a&&t.options.touchDevices){t.$elProxy.on("touchstart."+t.namespace,function(){t.showTooltipNow()})}}else if(t.options.trigger=="click"){t.$elProxy.on("click."+t.namespace,function(){if(!l()||t.options.touchDevices){t.showTooltip()}})}}},showTooltip:function(){var e=this;if(e.status!="shown"&&e.status!="appearing"){if(e.options.delay){e.timerShow=setTimeout(function(){if(e.options.trigger=="click"||e.options.trigger=="hover"&&e.mouseIsOverProxy){e.showTooltipNow()}},e.options.delay)}else e.showTooltipNow()}},showTooltipNow:function(){var n=this;clearTimeout(n.timerShow);n.timerShow=null;clearTimeout(n.timerHide);n.timerHide=null;if(n.enabled&&n.content!==null){if(n.options.onlyOne){e(".tooltipstered").not(n.$el).each(function(t,n){var i=e(n),s=i[r]("status"),o=i[r]("option","autoClose");if(s!=="hidden"&&s!=="disappearing"&&o){i[r]("hide")}})}n.options.functionBefore(n.$elProxy,function(){if(n.status!=="hidden"){var r=0;if(n.status==="disappearing"){n.status="appearing";if(c()){n.$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-"+n.options.animation+"-show");if(n.options.speed>0)n.$tooltip.delay(n.options.speed);n.$tooltip.queue(function(){n.status="shown"})}else{n.$tooltip.stop().fadeIn(function(){n.status="shown"})}}}else{n.status="appearing";var r=n.options.speed;n.bodyOverflowX=e("body").css("overflow-x");e("body").css("overflow-x","hidden");var i="tooltipster-"+n.options.animation,s="-webkit-transition-duration: "+n.options.speed+"ms; -webkit-animation-duration: "+n.options.speed+"ms; -moz-transition-duration: "+n.options.speed+"ms; -moz-animation-duration: "+n.options.speed+"ms; -o-transition-duration: "+n.options.speed+"ms; -o-animation-duration: "+n.options.speed+"ms; -ms-transition-duration: "+n.options.speed+"ms; -ms-animation-duration: "+n.options.speed+"ms; transition-duration: "+n.options.speed+"ms; animation-duration: "+n.options.speed+"ms;",o=n.options.fixedWidth>0?"width:"+Math.round(n.options.fixedWidth)+"px;":"",u=n.options.maxWidth>0?"max-width:"+Math.round(n.options.maxWidth)+"px;":"",f=n.options.interactive?"pointer-events: auto;":"";n.$tooltip=e('
');if(c())n.$tooltip.addClass(i);n.insertContent();n.$tooltip.appendTo("body");n.positionTooltip();n.options.functionReady(n.$el,n.$tooltip);if(c()){n.$tooltip.addClass(i+"-show");if(n.options.speed>0)n.$tooltip.delay(n.options.speed);n.$tooltip.queue(function(){n.status="shown"})}else{n.$tooltip.css("display","none").fadeIn(n.options.speed,function(){n.status="shown"})}n.setCheckInterval();e(t).on("scroll."+n.namespace+" resize."+n.namespace,function(){n.positionTooltip()});if(n.options.autoClose){e("body").off("."+n.namespace);if(n.options.trigger=="hover"){if(a){setTimeout(function(){e("body").on("touchstart."+n.namespace,function(){n.hideTooltip()})},0)}if(n.options.interactive){if(a){n.$tooltip.on("touchstart."+n.namespace,function(e){e.stopPropagation()})}var l=null;n.$elProxy.add(n.$tooltip).on("mouseleave."+n.namespace+"-autoClose",function(){clearTimeout(l);l=setTimeout(function(){n.hideTooltip()},n.options.interactiveTolerance)}).on("mouseenter."+n.namespace+"-autoClose",function(){clearTimeout(l)})}else{n.$elProxy.on("mouseleave."+n.namespace+"-autoClose",function(){n.hideTooltip()})}}else if(n.options.trigger=="click"){setTimeout(function(){e("body").on("click."+n.namespace+" touchstart."+n.namespace,function(){n.hideTooltip()})},0);if(n.options.interactive){n.$tooltip.on("click."+n.namespace+" touchstart."+n.namespace,function(e){e.stopPropagation()})}}}}if(n.options.timer>0){n.timerHide=setTimeout(function(){n.timerHide=null;n.hideTooltip()},n.options.timer+r)}})}},setCheckInterval:function(){var t=this;t.checkInterval=setInterval(function(){if(e("body").find(t.$el).length===0||e("body").find(t.$elProxy).length===0||t.status=="hidden"||e("body").find(t.$tooltip).length===0){if(t.status=="shown"||t.status=="appearing")t.hideTooltip();t.cancelCheckInterval()}else{if(t.options.positionTracker){var n=t.positionInfo(t.$elProxy),r=false;if(u(n.dimension,t.elProxyPosition.dimension)){if(t.$elProxy.css("position")==="fixed"){if(u(n.position,t.elProxyPosition.position))r=true}else{if(u(n.offset,t.elProxyPosition.offset))r=true}}if(!r){t.positionTooltip()}}}},200)},cancelCheckInterval:function(){clearInterval(this.checkInterval);this.checkInterval=null},hideTooltip:function(){var n=this;clearTimeout(n.timerShow);n.timerShow=null;clearTimeout(n.timerHide);n.timerHide=null;if(n.status=="shown"||n.status=="appearing"){n.status="disappearing";var r=function(){n.status="hidden";n.$tooltip.remove();n.$tooltip=null;e(t).off("."+n.namespace);e("body").off("."+n.namespace).css("overflow-x",n.bodyOverflowX);n.$elProxy.off("."+n.namespace+"-autoClose");n.options.functionAfter(n.$elProxy)};if(c()){n.$tooltip.clearQueue().removeClass("tooltipster-"+n.options.animation+"-show").addClass("tooltipster-dying");if(n.options.speed>0)n.$tooltip.delay(n.options.speed);n.$tooltip.queue(r)}else{n.$tooltip.stop().fadeOut(n.options.speed,r)}}},setContent:function(e){if(typeof e==="object"&&e!==null&&this.options.contentCloning){e=e.clone(true)}this.content=e},insertContent:function(){var e=this,t=this.$tooltip.find(".tooltipster-content");if(typeof e.content==="string"&&!e.options.contentAsHTML){t.text(e.content)}else{t.empty().append(e.content)}},updateTooltip:function(e){var t=this;t.setContent(e);if(t.content!==null){if(t.status!=="hidden"){t.insertContent();t.positionTooltip();if(t.options.updateAnimation){if(c()){t.$tooltip.css({width:"","-webkit-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-moz-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-o-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-ms-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms",transition:"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms"}).addClass("tooltipster-content-changing");setTimeout(function(){if(t.status!="hidden"){t.$tooltip.removeClass("tooltipster-content-changing");setTimeout(function(){if(t.status!=="hidden"){t.$tooltip.css({"-webkit-transition":t.options.speed+"ms","-moz-transition":t.options.speed+"ms","-o-transition":t.options.speed+"ms","-ms-transition":t.options.speed+"ms",transition:t.options.speed+"ms"})}},t.options.speed)}},t.options.speed)}else{t.$tooltip.fadeTo(t.options.speed,.5,function(){if(t.status!="hidden"){t.$tooltip.fadeTo(t.options.speed,1)}})}}}}else{t.hideTooltip()}},positionInfo:function(e){return{dimension:{height:e.outerHeight(false),width:e.outerWidth(false)},offset:e.offset(),position:{left:parseInt(e.css("left")),top:parseInt(e.css("top"))}}},positionTooltip:function(){var n=this;if(e("body").find(n.$tooltip).length!==0){n.$tooltip.css("width","");n.elProxyPosition=n.positionInfo(n.$elProxy);var r=null,s=e(t).width(),o=n.elProxyPosition,u=n.$tooltip.outerWidth(false),a=n.$tooltip.innerWidth()+1,f=n.$tooltip.outerHeight(false),l=null;if(n.$elProxy.is("area")){var c=n.$elProxy.attr("shape"),h=n.$elProxy.parent().attr("name"),p=e('img[usemap="#'+h+'"]'),d=p.offset().left,v=p.offset().top,m=n.$elProxy.attr("coords")!==undefined?n.$elProxy.attr("coords").split(","):undefined;if(c=="circle"){var g=parseInt(m[0]),y=parseInt(m[1]),b=parseInt(m[2]);o.dimension.height=b*2;o.dimension.width=b*2;o.offset.top=v+y-b;o.offset.left=d+g-b}else if(c=="rect"){var g=parseInt(m[0]),y=parseInt(m[1]),w=parseInt(m[2]),E=parseInt(m[3]);o.dimension.height=E-y;o.dimension.width=w-g;o.offset.top=v+y;o.offset.left=d+g}else if(c=="poly"){var S=[],x=[],T=0,N=0,C=0,k=0,L="even";for(i=0;iC){C=A;if(i===0){T=C}}if(Ak){k=A;if(i==1){N=k}}if(As){r=O-(s+n-u);O=s+n-u}}function j(n,r){if(o.offset.top-e(t).scrollTop()-f-D-12<0&&r.indexOf("top")>-1){H=n}if(o.offset.top+o.dimension.height+f+12+D>e(t).scrollTop()+e(t).height()&&r.indexOf("bottom")>-1){H=n;_=o.offset.top-f-D-12}}if(H=="top"){var F=o.offset.left+u-(o.offset.left+o.dimension.width);O=o.offset.left+P-F/2;_=o.offset.top-f-D-12;B();j("bottom","top")}if(H=="top-left"){O=o.offset.left+P;_=o.offset.top-f-D-12;B();j("bottom-left","top-left")}if(H=="top-right"){O=o.offset.left+o.dimension.width+P-u;_=o.offset.top-f-D-12;B();j("bottom-right","top-right")}if(H=="bottom"){var F=o.offset.left+u-(o.offset.left+o.dimension.width);O=o.offset.left-F/2+P;_=o.offset.top+o.dimension.height+D+12;B();j("top","bottom")}if(H=="bottom-left"){O=o.offset.left+P;_=o.offset.top+o.dimension.height+D+12;B();j("top-left","bottom-left")}if(H=="bottom-right"){O=o.offset.left+o.dimension.width+P-u;_=o.offset.top+o.dimension.height+D+12;B();j("top-right","bottom-right")}if(H=="left"){O=o.offset.left-P-u-12;M=o.offset.left+P+o.dimension.width+12;var I=o.offset.top+f-(o.offset.top+n.$elProxy.outerHeight(false));_=o.offset.top-I/2-D;if(O<0&&M+u>s){var q=parseFloat(n.$tooltip.css("border-width"))*2,R=u+O-q;n.$tooltip.css("width",R+"px");f=n.$tooltip.outerHeight(false);O=o.offset.left-P-R-12-q;I=o.offset.top+f-(o.offset.top+n.$elProxy.outerHeight(false));_=o.offset.top-I/2-D}else if(O<0){O=o.offset.left+P+o.dimension.width+12;r="left"}}if(H=="right"){O=o.offset.left+P+o.dimension.width+12;M=o.offset.left-P-u-12;var I=o.offset.top+f-(o.offset.top+n.$elProxy.outerHeight(false));_=o.offset.top-I/2-D;if(O+u>s&&M<0){var q=parseFloat(n.$tooltip.css("border-width"))*2,R=s-O-q;n.$tooltip.css("width",R+"px");f=n.$tooltip.outerHeight(false);I=o.offset.top+f-(o.offset.top+n.$elProxy.outerHeight(false));_=o.offset.top-I/2-D}else if(O+u>s){O=o.offset.left-P-u-12;r="right"}}if(n.options.arrow){var U="tooltipster-arrow-"+H;if(n.options.arrowColor.length<1){var z=n.$tooltip.css("background-color")}else{var z=n.options.arrowColor}if(!r){r=""}else if(r=="left"){U="tooltipster-arrow-right";r=""}else if(r=="right"){U="tooltipster-arrow-left";r=""}else{r="left:"+Math.round(r)+"px;"}if(H=="top"||H=="top-left"||H=="top-right"){var W=parseFloat(n.$tooltip.css("border-bottom-width")),X=n.$tooltip.css("border-bottom-color")}else if(H=="bottom"||H=="bottom-left"||H=="bottom-right"){var W=parseFloat(n.$tooltip.css("border-top-width")),X=n.$tooltip.css("border-top-color")}else if(H=="left"){var W=parseFloat(n.$tooltip.css("border-right-width")),X=n.$tooltip.css("border-right-color")}else if(H=="right"){var W=parseFloat(n.$tooltip.css("border-left-width")),X=n.$tooltip.css("border-left-color")}else{var W=parseFloat(n.$tooltip.css("border-bottom-width")),X=n.$tooltip.css("border-bottom-color")}if(W>1){W++}var V="";if(W!==0){var J="",K="border-color: "+X+";";if(U.indexOf("bottom")!==-1){J="margin-top: -"+Math.round(W)+"px;"}else if(U.indexOf("top")!==-1){J="margin-bottom: -"+Math.round(W)+"px;"}else if(U.indexOf("left")!==-1){J="margin-right: -"+Math.round(W)+"px;"}else if(U.indexOf("right")!==-1){J="margin-left: -"+Math.round(W)+"px;"}V=''}n.$tooltip.find(".tooltipster-arrow").remove();var Q='
'+V+'
';n.$tooltip.append(Q)}n.$tooltip.css({top:Math.round(_)+"px",left:Math.round(O)+"px"})}}};e.fn[r]=function(){var t=arguments;if(this.length===0){if(typeof t[0]==="string"){var n=true;switch(t[0]){case"setDefaults":e.extend(s,t[1]);break;default:n=false;break}if(n)return true;else return this}else{return this}}else{if(typeof t[0]==="string"){var r="#*$~&";this.each(function(){var n=e(this).data("tooltipster");if(n){switch(t[0]){case"content":case"update":if(typeof t[1]==="undefined"){r=n.content;return false}else{n.updateTooltip(t[1]);break};case"destroy":n.hideTooltip();if(n.$el[0]!==n.$elProxy[0])n.$elProxy.remove();var i=typeof n.content==="string"?n.content:e("
").append(n.content).html();n.$el.removeClass("tooltipstered").attr("title",i).removeData("tooltipster").off("."+n.namespace);break;case"disable":n.hideTooltip();n.enabled=false;break;case"elementIcon":r=n.$el[0]!==n.$elProxy[0]?n.$elProxy[0]:undefined;return false;case"elementTooltip":r=n.$tooltip?n.$tooltip[0]:undefined;return false;case"enable":n.enabled=true;break;case"hide":n.hideTooltip();break;case"option":r=n.options[t[1]];break;case"reposition":n.positionTooltip();break;case"show":n.showTooltipNow();break;case"status":r=n.status;return false;default:throw new Error('Unknown method .tooltipster("'+t[0]+'")');break}}else{throw new Error("You called Tooltipster's \""+t[0]+'" method on an uninitialized element')}});return r!=="#*$~&"?r:this}else{return this.each(function(){if(!e(this).data("tooltipster")){e(this).data("tooltipster",new o(this,t[0]))}})}}};var a=!!("ontouchstart"in t);var f=false;e("body").one("mousemove",function(){f=true})})(jQuery,window,document); \ No newline at end of file diff --git a/templates/themes/favelog/theme.php b/templates/themes/favelog/theme.php new file mode 100644 index 00000000..29a91931 --- /dev/null +++ b/templates/themes/favelog/theme.php @@ -0,0 +1,133 @@ +build($settings, $board); + } + } elseif ($action == 'post-thread' || ($settings['update_on_posts'] && $action == 'post') || ($settings['update_on_posts'] && $action == 'post-delete') && in_array($board, $boards)) { + $b = new Favelog(); + $b->build($settings, $board); + } + } + + // Wrap functions in a class so they don't interfere with normal Tinyboard operations + class Favelog { + public function build($settings, $board_name) { + global $config, $board; + + openBoard($board_name); + + $recent_images = array(); + $recent_posts = array(); + $stats = array(); + + $query = query(sprintf("SELECT *, `id` AS `thread_id`, (SELECT COUNT(*) FROM ``posts_%s`` WHERE `thread` = `thread_id`) AS `reply_count`, (SELECT COUNT(*) FROM ``posts_%s`` WHERE `thread` = `thread_id` AND `filesize` IS NOT NULL) AS `image_count`, (SELECT `time` FROM ``posts_%s`` WHERE `thread` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `last_reply`, (SELECT `name` FROM ``posts_%s`` WHERE `thread` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `last_reply_name`, (SELECT `subject` FROM ``posts_%s`` WHERE `thread` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `last_reply_subject`, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL ORDER BY `bump` DESC", $board_name, $board_name, $board_name, $board_name, $board_name, $board_name, $board_name)) or error(db_error()); + + while ($post = $query->fetch(PDO::FETCH_ASSOC)) { + $post['link'] = $config['root'] . $board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], ($post['thread'] ? $post['thread'] : $post['id'])); + $post['board_name'] = $board['name']; + $post['file'] = $config['uri_thumb'] . $post['thumb']; + + if ($settings['use_tooltipster']) { + $post['muhdifference'] = $this->getDiferenca($post['time']); + + if ($post['last_reply']) + $post['last_reply_difference'] = $this->getDiferenca($post['last_reply']); + } + + $recent_posts[] = $post; + } + + file_write($config['dir']['home'] . $board_name . '/catalog.html', Element('themes/favelog/catalog.html', Array( + 'settings' => $settings, + 'config' => $config, + 'boardlist' => createBoardlist(), + 'recent_images' => $recent_images, + 'recent_posts' => $recent_posts, + 'stats' => $stats, + 'board' => $board_name, + 'link' => $config['root'] . $board['dir'] + ))); + } + + public function getDiferenca($muhtime) + { + $postagem = new DateTime(date("Y-m-d H:i:s", $muhtime)); + $agora = new DateTime(date("Y-m-d H:i:s")); + $intervalo = $postagem->diff($agora); + $anos = $intervalo->format('%y'); + $meses = $intervalo->format('%m'); + $dias = $intervalo->format('%d'); + $horas = $intervalo->format('%h'); + $minutos = $intervalo->format('%i'); + $segundos = $intervalo->format('%s'); + + $diferenca = ""; // adicionar o 'há' depois + if ($anos) { + if ($meses) { + $diferenca.= ($anos>1)? $anos.' anos e ' : $anos.' ano e '; + $diferenca.= ($meses>1)? $meses.' meses.' : $meses.' mês.'; + } else { + $diferenca.= ($anos>1)? $anos.' anos.' : $anos.' ano.'; + } + } elseif($meses) { + if ($dias) { + $diferenca.= ($meses>1)? $meses.' meses e ' : $meses.' mês e '; + $diferenca.= ($dias>1)? $dias.' dias.' : $dias.' dia.'; + } else { + $diferenca.= ($meses>1)? $meses.' meses.' : $meses.' mês.'; + } + } elseif ($dias) { + if ($horas) { + $diferenca.= ($dias>1)? $dias.' dias e ' : $dias.' dia e '; + $diferenca.= ($horas>1)? $horas.' horas.' : $horas.' hora.'; + } else { + $diferenca.= ($dias>1)? $dias.' dias.' : $dias.' dia.'; + } + } elseif ($horas) { + if ($minutos) { + $diferenca.= ($horas>1)? $horas.' horas e ' : $horas.' hora e '; + $diferenca.= ($minutos>1)? $minutos.' minutos.' : $minutos.' minuto.'; + } else { + $diferenca.= ($horas>1)? $horas.' horas.' : $horas.' hora.'; + } + } elseif ($minutos) { + if ($segundos) { + $diferenca.= ($minutos>1)? $minutos.' minutos e ' : $minutos.' minuto e '; + $diferenca.= ($segundos>1)? $segundos.' segundos.' : $segundos.' segundo.'; + } else { + $diferenca.= ($minutos>1)? $minutos.' minutos.' : $minutos.' minuto.'; + } + } elseif ($segundos) { + $diferenca.= ($segundos>1)? $segundos.' segundos.' : $segundos.' segundo.'; + } + + if (!empty($diferenca)) + $diferenca = 'há '.$diferenca; + return $diferenca; + } + }; diff --git a/templates/themes/favelog/thumb.png b/templates/themes/favelog/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9d78f588fa111c0c04dbf44e8045220c791c1e94 GIT binary patch literal 11543 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU~u7JVqjo6rn<_Gfq{XsILO_JVcj{ImkbOH zEa{HEjtmSN`?>!lvNA9*a29w(7BevL9R^{>Ye#1Fntf;7*x_*L&~bZZ>**fn_=F{u1m2fhe3qXmD3bnfbQ@IY(U2QTV=Le zR&U&%ol&`X#j2fqmTlZ5d&|-^oc-+^iP>$u-}u%lB?M1iu;SCJV^tCE$FKa^trwA* z`uD}1kmrZ0WVdiz8BMu-;nF>>*0X)#TMnFBZGBo%)^x(Rh94y-j#Q*ozLjB`7#_oY z@56qXhEu=7UU10l+hn-DXFrx_XMaxV>SkaN tqMu&Ctd^qM7MKPNLkdLWjOdcbidU&yKREkSwpJ6nS^ zPncLMdd*&FBKpcSV50x2tmk+Cb?>%cA$7}sPZdMwQ(2FFb^Z<4uKP@}bo>|?`%pga zV7&>$0?mbsKOE^=b?V;2wX!M!pBR;1bFk!8iOqODRrcJiJ_V+K2mT~o|H1Nr;iAlp znUc4E{NO+SK%V!28q>nWK2ULI2Sovv)X7INtM)2~;WKi}`mRl4NuJ$KP#hLHa$ia*?$8LIY9Tid#9d%kP> z@`>y1ySL4&F50zq`dwpYZb|N7VR`=5KVsIeV2HflFy+pURTD)wA6T$+Y3A<>8~R#( z+aDZwv@P%Ugaiep|Lh0u=QQ!MI9)y`$LJRPcI%#H)6UFlvkTleG4-p^vSrr-Im;d@ zPI{J>w0`YcXQv9&C(_H!VwIdHYriV;{;YF&Q7SJ_nqWuxzd8r&zw!+A`#A%+SYDJU z@XD8$*k1U3+uDplprc`aaKwZuQ*~#UoLPTPJ;apxDC?xgFW&OooVdOI`7`~id;LG< zysKiP)Mp0kKdI~LD_;N4kl;F2VDD)kqx-|p(*Dfv__++3EsX)qj?yoz8v+CkZq1I0 ztlqzG=Z;-=`!{Xdu*+=!F0;>dl1H9T4;Q~~E*5renV8t}XX1`O>T;9Ia+yOpI2_9a znjEcGnJnS@*D+&G{r){WS-ECL$Hhj(#z#amSBhW1#wg$UvA$Heet%iUf{itQZ0?yj zUFP}})ZN9+#kJY%^lY}ahJfX5?V{7Jl$e=?hg>lU3DMWn+jjNZ*7DNlDod}1Tz$JD z{)xVt)hd1~0U7!Dm|$_C=~Lpv9?MDHG`5;FAuuE;`k9Cb=d{}mOy$MjGgq#D{jMog zR9q}2lp(Ar=+dW8r{4T8VrZycotLSTnX$69ti-p++|fE|(xkSq?bq#;el5JPtgZa) z*R>zk-TN}*$IiYiGEj#87`*shM`TWZ|FR#<9XuskvK$y^-`rt;dX4Lede)GSd69wALtQ`e_fo+rB71Ssyw7$9emY#oK=$ z^pV&T>Fw|T{YAz17dPH7EPV0c!jDg{(s>RD-~RQh{<-jRtB1d12 zRhzYC-NcKHGk4~%^ZF~nFrl)jG`T1@Iji=w_~l#AuH0g)$tx7;S^v-E=mN`KZpYNZ zuOD<)4>MQ4UMJYND9n5!>$*IKJ-^e__SYyKsD9r0dO_1=k6TP%LQ@^Na~j0|vB?|! zU-Gh7-)NnpH?uFh*Spzs*qSG<|N7RSfkB?pwS=eNr0n3VUDa8)6hd`#*Y5p$_U_&X zpPqBf+_ZD~`oe?{cNO+*T+Tn0TjYkZA?y7ATnrXMMGVYK*01Ki@mli7hbtcrM5O2$VxZ(@hN5|Z79x3D9IBM z$l0+yyQHQj^{q6+n%o1&)b5v-nUveenH~m>&=eE_Zvglaw z$lCYf?Ms*WS8U^D+GNtCvq8?`YeKz1<$+f zPaEIihurV?Ph+?cx^Qp6ktxC9od=8AWJ+JUuiKXYCuZ{8+)HRU{ z=eCAr&4S$zJ9;IK6saWXN^O*Cjp%gJX{->LbU^h%{!yiEj|Gh5Cfu7B%lJb6OHu99 zmw9hrro2j8I%}>>%nU(E=|}S<9!{J&ZQAtMNs}WdOrJV`@-%Vz$wIZ35t^umlu_o%~5vf;F_}aLIM0QJA6I0H*bA^ z?riz@Z|6>HfB5iCx3_DhVg20c6Q|COpD{ar!tC$~lV{JLJpI4sot8_}n9U1d~ zoA~1|0{1j`T$<|n^{}Ya`c2*5#>SiWF*{s$`0mo|8M>&(cT-aAsvzI4B;AfB+Siw8 zgf749+-c48Ue%K)$4!_y zOIUoel<-s$`Pp*Pb7xKs4EnKc>kg)C*DTew6yLvk_w4O+dAa#gQzwbf{itSS%5G+5 zwsFrcbB3_%(pJ0frKDW5-Z{1USIYG8ZQHgT6->gSMMw^Q#2L;_1n<_GW zim2#x(Wz6!#HWjjH?IriJ9KE#raQZi>7_;O_|Yl2b@S%5jMR4z^R-uVad#^;AKvZh za9ts1)2)OZH!62rN!@m^eABt?RoALFUCZ8du6o(Q{C}|rlvGN#878pKyAhlcB(;9k zVx_#qB^e9!vR0^NEz*3JvMgntYT^>Tob+W$zrF6>^g4d@SjE1J3yL@7hjU6ud@3;b zSh%^Q+^l@lMbB)z#MN@r%tUcGdstGBnayWiWRLtj^ab8*?qoW?J2WE(oKmL?cvb93EZ`}Ury3iHe+ zrv)D)cfL&wd~5b?>Aptq_Xl}+F5bBl6&&5a=+>`eyOw?XG^=gbuVbrzJ!7(eyQwXW zL)rhl=^VGS*F$Av6?{uWc~dgNr7zgtunkF_BAtIbT-JoWGfv)z`Js$T+Dhxh4R$+} zuIkxeT(@1%;()92Rd1`a{yno^2}&!oUJfqe6O;1tV%qoIM@fk3yv57;8!r`XuwA%Z zy}IFh0&mhS%NzT5b4e9!GW_(h)v#0&!_UkI+t%w08kW*pD1nwpp> zpAfHtgq#iaB^3cN6&^uJHFa^0#j(mZ?{lL=a)MG)LS!PQYHFQ2w0(Te%F52I+4FZ+)UBwf+qbO~ zu72%3`mb%~dY0F>cPY%>VE&UeckYH=dKv!tuCgq*E^%e%W#;E)u?Fp*%~HaDuuY3s zHeTC7$|<~BNX$BE*{nkkzBYC|3=uZnH~oC3OXWO{{R;#iEGoSE*yo!-(jwLLWh!+C zzs>k|(OE7nD@{r$E$dJ^Pl(SJl`mV4=$NQ%-?)DL*4c0Q4uoajZ`izc;{N{0&1)x4 zUAd{TYeQpK$HY}T7S5Wna$8PSRAPurP>4%Wh>O#N`YHRvT^7WLEU5R1DoQLY^uBAo zW9riGscZLc&u{Q|$f&3Zi+j2I#+U62;>&p6$u>+a&A9*I$%`vTuKe)`OwBDwiNF6r z{pT!Svh%{dRiyXoML2_j>xx{vAY--c{k(Gg^aV|>Br+Uk619gK7CqWPIm6A z?Ch33t7phH^!cCZ?LX_&<5%y_`t?BdEaNFlTW0W1t&r()Eq=7-l~?WV)y&JH52^l~ ze`(U)^rfmb=e*7xb&||gpYuq&v;4i8EH9@itKH*ZF0)te`VyLvFHXj7u&F!uF(PV8 z@BG>S{=I#DdhN2g&bvJigjN54pk14p&o8|?{M9uvEr;2eC%7`S_m~8TT?`cP>NwBC z-^cXEB{?(09jdM&e7hKY)Sijj?q#R+?Z1LoSsrw?9TykV0d z=Yazk;#3pTYPHucn{w2t$7ANq^8qui`c1nV=y$*)jH)7TmgRxnp*u?KiwH#)2*0?@ooP4OTtwj7^G8=}mL({y&)3g?w_Z{%M=w=hIZxrtvSa76&s^t} zZ`RkTEtcStekZAM@oM0c(mGvf;f#oR&u7g_h@ABLUYxYmwdsb}W(Q7s>gN8jVd}IU z20o@ogJ1A{D_zvS{f4Bb#f+7%EH`Jq@X+jd|LD%{V_#VAM>spU&WW7T{j~OUdB}yZ z-w!6tY@9K>`)PJ@ZZNZ^cW`8=XI`vpVr->jZsfs^4J#fT=$O#(LE*kYe7Sx8_6CLb z4)yOpTzT?l&6`t)w)<`?>w9;vaU?IEoW}5GP2dYRmZ=&%KI&! z|7s)exk1IfW#*sD`PkmxyQb@>ww2G#G;G&<8J=$6(EE`qoZQvRf*lzcA{I`YyV56V z!^D-#92U%WTd_Q>p*yQ?ldtPO|Jq20?9vE(6+`>Gp>yY}s5-=i%<7%=gpXgEmtFa% zcb_`b8-GiA;Y*WkRSxYx{$a)k$-l}$ccM?{-e+A<|6=OS8I!vc6DBO(zkk~L`K$W& zOxQMO!MsHq_BCzTKiz#neMUq0g894Ww{M=_K6(4}+56k09ip=8N>iiVvKY;ca~&F% zt9yva2~Q3Zkea@E)4q>_A0J+4xDXK@oVPG4XRY*l-LRJ#0k1PAq^>;7>34_oR7!s6%~f-KKj~iS*4bKgc53#Vo>gzZ80CDK<$PEB?N=k76tCRU z?72NfJx{%TMHQ7F?`CF@*0|dJ>Du?rp*{Q;wwnnRZ<^r8ZC+ZZnw+lnI%nyN%=M3w zG?yoVa9|RlO)8&r4!TBrDuO*doiD1etSJ5!{pb|Urj@A zS_%DJb}Ii&2=|$gNncYYnYcbKUE*bu$>#KASIo~{cYd-lEz$CcxIE>CaqpB(JfcRt zPmOp*gG!ce=6xcy=ug(4H;+w^Ui$Ks>&%qJrbjpTJlSmGTCVcow$_UBCEGQ9J2}Lo zUE6})X50+%4v6eBwmoKa#rg6*r(>rbPdZFhx4x%ke)FR9`^Y`Fz1_58teR%;$q}*m zo*yvzj_QG(e!eyD<-VnA9lHJUGsV{Prb~a>$L{dIVeZxm%crLmZ0N0TSh(GO z`_7lek&1q`u7b*@ob24r{`~&o>DLp|wZo&W!=>8|_|wb9-(Q$;W6qi&PeV>ND=Sw~ z-~S(4&g|*B@}_B)nubsV|LqHVZ#SImef#TGm&VKIiC%vUwGIh#?O7R>bTUfl;io^Y zt3-Soje@;9Hm+Q`EM>P+=qVM;WhS;W6<&%Lt~&Hli|HZPA5N}46YfkYi9VcBxi2E1 zX;s0ZT^Un8oo3nj+=D@EKQDv9p}VZJ&Xn{s&AF;pZ1-9{7qRDR4xTmb^O%l%I6L`t2+MzO>k{eTxK_+sTJ_`JY$uL(PYRgNrIGZ)R$oT$Bsr=|L*ZUTl?e3!|NUgt{f{X zb&c#W@a_-^-@xO)g2%t%$>)Tb;&n-L@~3F7%Dy+n<)IkMV>9!k%TCz#O-bOJ^ssZn zV_t#8!b&$my~DC=)XeT(jgx&Uu6h3T8CTgqlWw}Vn7U2059!#Lob$<=q2yVn#r{cG zLmv2XUN8@PdO7_0^+`_;?XQmw>Nt4O>z;$}f$MGyt*)QF-JyMF-t$wf_7a($k{<7k z9>%9vmPr3Uml_sjRL$$jE2VU9_H>T-cdZK9WP6(Su^%|Fq4VY39TmR!9W3SR-(Ap< zv*Q!ujg(U^6-+iYRCy`=YK2DRioChXwAJ>8LPR~TD&YgAZcYeuN$6lQTTjtxSW)GUX*!U zm3y95e%vc_DgUhCKi*PZ-qK#upOU*pPX76+DRX1xu3uHg#h*8A+Qj_lZ+2Fek+Jdp zeYLZvPoF+%(xmu^8`fr$%f4LddzX0q$2x`*zOv>{?LWOre|j&4>^$bv`YfeYZI4Ip z5|`XPKAX+mSE`2#PSU(RN$2WBy}dkJ<+Oult-d&C<&_3;E&nO2{KB*R!n6FtGkd46 zYL01c&Dy)utHaU##euwR$LI--iOIq>>et0TopMoedCpOw|FLM&YOlhTo`ss-w!xDh z)KvYSG>u{Q){X1-uHC$R`uwBW>c+~e9oV%q_0(7+J)LcHy}7wxUk?kL7G`E8vi3CEaae=ByZwzRWX+pd&b zv%}t<>3VQUs)IK-Me@4=#a>k-D`V$w=UhfxLH|(N73*` zO#3@oh7C*Of+809ccr?xXL$Liuyr(Ec%iwFSvzs6Uhd@GC!XB7bmY$OwDN@|nL_`? zkEoUWIMy#8qUNGtSN9`|)$#Pb8+MD$mL0sPy62Xy;b&h4wXkap3(Hp4={6=EpBA?7 z9{-G+H`p$J;$D8igJYfTq5W=6UrL&azB{W&`i^jEzIhYxXzS2Ialt;l$`O`th^!FGSAS1 z>r=<)&#SafWUSVnJxgMylw@R7)Q(*iJ9k<}Mn$e!yS{|)@b^_s%eLF?J9$=Uf6vN} zV#Wzf=U7b_Nf&)TKRYl^|Ju^I8K=w)3yiL9mR{GVAGmzWqJ3)LA1G-pRXXR|%KrT6 zySbBh7e_ri7irpbnrnyn(|>zZtN7Md7lm{FNPOLV_xjJZ{J{yym9@!b$=q+`&gbU- zHxT#Oz|G(xTJrprV$B`xk`R6iiOv}>IV3Va%y`KuA#b0uNHJlV>XU@JKa*y=K6+YQ z8X8%uswu0>YN{HUT4}lO`S~YHk4{ZlQo3bpPY=%-pWe4`b7f^4Z*Beb@vF>?Ik&VK z5=24*1M`%Rywg#BpmX@WitYoIv(I&O6Lb&GPgpLPttb6Hb-Lt}Id7LtdY_!3uKq^l z=yR4Jug}Vtn**et2o+2cEtw+r=g1UBpE_;3XL%dc|9qXMQX`_#_1;`Hqjtml2a;1S zT)G!<_mW_2z@>|KUrA5?X)N)EjUmAC$&c$NKjd$+J6i8k_y6JC)!*~ukM68~`f%^* zevS?DlONeEQ%PI6{MqBjmo8npa4{q-bb|PU$Kp@K5|-6#eQ64I_49I%K77LA`i&D8 zF1?!C+S)mH@7B&vN6*;5Uv3?fGfO$J?9Z!T5B?;*zw>+F&!zhXa;g?qS23Dda{ns2 z{-oymm74q8C)LgsEU0>ZzxkT{yyzdVlkU7@XegV1_s+bVe+>RVOg?|Z#kDy5{fUIf z2Rzhe?pd1!-Mq&6LxJ%_;EbDh*#5qot?`bH;f8Qs!Rs4ey^n8LFT20u*@KmffBVb1 zTGyrAUzz-S-8_4)7kt-DWA0S@&$km5o-9zUsr4!7(Mw@BE+efu*5&VF_PcpC96xkK z<-~DqeeK0-RMxLsxMbl%C;O|o~j}`#bn!_)2lPj*F}fKhD%S6jktby@`NdO_HX#(%d?M@p}^+F+!;)D zJi4~E2d*z%x}D!8s;a8dm|bh%W9EzOdVyDNSzoxseMe!!$GN+$Ya;TMFa2judG9W$ zA@DSHvpVOGg-$;t&+d+%HJ_bbMnt5D#Vi$?uI|LyxeF#USM_vNbY68#JF zTe9}v=VK`N5_999#rEDAk@x4^{lj2#;LbDunMdZcGlVcFG-Qbc6e|cMeE7FqTXfQ9 z;rmQADYJUl-c|U&jOEWYzi+o08P>{6i)YG9$O*oiAAMbJ^1L}y=f0gh;iIv{pJ;|R zu2<}y|Gmw?P;QuzFrlu=`Y%Jv0`@;owEr4$Iz;Z=`L>^1-tHVDe^$ZHt-N!V9?WKx zwX!f~-sfVlaSu=ZeiMuD|7;5^T)K`P|CuYm=zOg7K?(1LU!RulXFSk%$>n9seaHKA zIR6JQIj~wM%r)HEdZ8}D+ummXs$JDNI)>lh`X_zJW?(q`_Qk8&ApsnB`g3fZl_v+? zt#LBiZ<|;P2(q>jnZqugfu9f|; zuw#nO1@3w`jyhh30~<^ZRyC9trdD5naY(5^EAy3XPIIZ)Rdc6@i_iXTZr=QPfurJK z<-fwh7cOdg_<#R!DlE79_?u^8x?8GC>b7lLy?xELw3^({pS}OHHvI2#{xiMr)B#xu zi|79&8m@l*##rI2y`?r`L2|;5J%X1mUB7N=WolwV7P#H$Qk?=!5*R2kMLrUzsEt?lI>`7*r=rVV%Oi zV1DM`y}eBhLbe@>`;nAi4$NjVZ*f9LhyZ_7R@BQfvCk`Z>|G|>;=DNVAIZQt$ zoDpYn6MVq&=l^~A3ibjm5t()WCmrzqx61Iw{rQ~#qb76kz3E-MCNVi#SgGD+emx5d zOGU*G1(gHG)o=Xl{`Ii=bbari^Ly7{s;PZl99LswlM-1!t&Lsp|5L>Wc9T9^GIrcQ zc8ssvUt-3*w@v-;<{sF|W;}A@6x%!F&mTTDa9CSgYin~e+wQ$^db$q}&jVS9BEAEu&mTO0%>16| zoUMU@0fSnHfzbu)%1Y+OAED2`mtEfYKa=5=l~pIlhtLw=Cfm8aKJmME?Ao=%f}NF( z<=4;ZU%y_zp84a)FHdexm$uel?QJbTe*9){-Cb3!?&=bGJA$2seYK`mJL@kk?Ug?( zep~JMaca+#Q#u+O4b4B7d}m3u*tw(n_pi#zU%M@C?6SVS^Cye8N2kj%_1(LEXmotC zw!F1EE8`dI@s?JWit6fpB2zoKzN9^W^6}&M%G3pmS1ptk7890{dh_<-$ulgs=HI(| zoxf(?)AD|fIv$2kIUn?u3Yd1T+x%LPb7RK_gZ&K+9V>P;HSJlX#33T`G?lgW=+r49 zp;JSDvi|t8#pLLcB~O+vadlC>dgbcVlqF9^pB%7fRdqF0b&ZW>j+B&ibroHg{>J9c zoll=OZ7S;ODl%$Pn&j42)l}oOYL(X}qoP-(i%?A2~U>x;ng? zmvnJ;-O=B1Ka3YbvccsP3^nigB5A1#jkf7FXyyhS#47j6SJVfvE%y(MJ*N=o)i}O=@S_G8wC0%2&~AD zNl>0Jy}qr1S&varm^r$M|BA>3bpYJQTm^{#9l+&wV zs}NKC6nMgdv4Z~!_k*TGobT=(+g4V@_WDWndQ%NXGdsgiM?Ej-FMajg&vQ{FRqlRaW)s+@+$i_Dg;(6I}QF z&yF2Co?f+GI`yu-4}Vu}G}GFqKj($5-Hx5QXKMQO3lr1&EuWKWeK*7vJbN-dMAB6E z?cK|USFe8kcXQ{wqu*`0yEojdG*HfeDgDFeY(n;;{0FB$bf5mGAN=ma?}JQio7T3w z-C}Qd7n^=;df0&$$**f!uA~>w-kny(9=7mqajkQ9t@CRSsedkeowGOW`)s^A~Qt5Lv{$&A?*QSIe90CN3-u$O(V{>BA+qSIIpq&TBU)a?OZqoGv*h^8MT! z@8-J%o&Ry`!I`4(CzAd@IrZVps~d;3YRZq_b}E3)bml9ttH@$sbp|7WuxJ0&Hnc=whEYi;EsUvM8( z2%PBpB>VrY_~`!+KJ1?-%%*gSVdjgM@t$YbxHvmoSH0*r4zMB7g`r?NP zx*U~0Tk8*9nz~`buNs$UXD57_z3*cAk(3pmvs_Hq$bZtZ+u>aOzLO&{;@MtxCjPHI zKU!NqZt|Kx%bL^R(}dqH!jbGYf!`m9)#{#JaQ1MrqO01~cI)NU zvwImgd|hZ_egC117_Z{Q9cy^ltd`A~AyMFT=+Gf1WwY$;>;OYoRaHAby>i~Y(fslg zCQj_;;$%z<_Y=I;_;-uS6LGy50THI#OZPCCADBLET3LB9^T%ob{ynU}JH?%mK}A7z zFVm7EF1PC+_g_|M`Zaf#XX)2Rf33?;exJXiwU9wpSorgyg~~3={pvZc zL&eked&mpR^G|PYUmePOu}|)*v58gjS0Rb~?(Xj6$Br?5m^5ipS65dVgTxOt23zLU zD%Hoj2x=yYuhIFDCB3QSm)ru;KLK z7wmqCNpkM)$8YSHPrkpenf+U{U471dI|udeZ|%1RJJl&#T=}QVV74tG`EmRI9ZR0; zeztm1SE9GOk#*&sNe1&Jlufy3cH8ftx%kN8<2;9E*-ZM?RIwyw%9yH(%b&@sHf0 z)-6&TDmuyX=%Xbi_OI9U%Qs#(`}AFwA>r?8OH0!q%lj@Q#4g=a^Xw60$%T{W;|?sc zFMs^xWU;#eU-L4XhPFzH$7ed3m-oxs9C7mgJfr2C%CSac33fl(BNo*hk6F}yU1a{< zxA47vNy7h5=HKVv+^!dr<#c#>``NmA`OFuL?K<1aYF<107lUmPzm%O}t=GMIs0ilLBHj6J$Uz`7U#+?cY$?Tc;?=s9ff9bS; ztnZtx8~5zl85)?pm&5$_>-PQ}c^jie3qEbRu*on?e8SVZ=SmW1b)>wsTbLNO*lD@A zHbnkg#&Up-f#GVo!G(1RN%LH8m$P~P)|a;;bW}Z;`d#=t@FSV$MuPDjPiH%je?5~9p z=W*^US{c(NF60#~x?54lIDh7Z1_9o;OQz^;-?aLKDBCCLB^KfHZFipXpZb4YSy^qq z76(JXBxZ&kNtM#q{~T*}5Z^js5zB{Azg%uXP7t;+53;kt_)sC-P!!SSl|1`mSH(oh26&z8Uq4as~gV}oTj)C4KzCvs!Cg&fO8# z7EFoH-fL@~@$z(i78t6ns>&k9X42W&lW+GxVR7ZRCQhHs4;~%wgeRozo$#^pkgK+i zugZ$PCdO7qhXiv@1~Ud$hJgFa`DHBn`|6lv|DJm2{3PA~v;C2}if>E@7?|I3Jo_iC zaMoDN&$meC&En&&ayENvKZ)G@x_SwJr@zdd`bQrcColMFcp-m5vdqo?G(Yz>UHwz% zMem=@^-5OW-M;3UT8HZL$je5K;zozorXG7Hq?joF-DY`^;+lZzK{Nagn|j_e<9d6b za!RcIcKNp-ElYAYDNBW<3B65R~(69@7?=nedTFki8BZk*#E^ubkl|X z?jHZ9%$(T9V{RNVe@0J0Z_~}DN1d%Zji$F0omTjiU8upy5Ff$H@aL%M$IAvH3=<+b zOTNjoU+`bJc)neSW97e|tHDB&M36_KW&5wl&`#G#1ZzQSL8m&(yXs|A0Y>xw1{!JE3jv z65Tr{Ua%FrcVf>8Jnx$=27_mMfipG;!9K&)xj*7W^%=c$+Kuf$yd;g9B67rq3pR@z0bG zMN9R_zwrnQfE zioZ=p*Te36xqLXmTXdx7eZiuTncH*TW&7o6{jt7r{oFje+GjT|a;x_@J4P{lp6RqO uc