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.subtitle }}
+
+
+
+ - {% trans 'Bump order' %}
+ - {% trans 'Last reply' %}
+ - {% trans 'Creation date' %}
+ - {% trans 'Reply count' %}
+ - {% trans 'Random' %}
+
+
+ {% trans 'Sort by' %}:
+
+
+ {% trans 'Image size' %}:
+
+
+
+ {% for post in recent_posts %}
+ -
+
+
+
+
+
+
+ R: {{ post.reply_count }} / I: {{ post.image_count }}
+ {{ post.body }}
+
+
+
+
+ {% endfor %}
+
+
+
+
+ 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
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
uc