aboutsummaryrefslogtreecommitdiff
path: root/p/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'p/scripts')
-rw-r--r--p/scripts/jquery.sticky-kit.min.js9
-rw-r--r--p/scripts/main.js116
-rw-r--r--p/scripts/simple-scrollbar.min.js2
3 files changed, 80 insertions, 47 deletions
diff --git a/p/scripts/jquery.sticky-kit.min.js b/p/scripts/jquery.sticky-kit.min.js
deleted file mode 100644
index e2a3c6de9..000000000
--- a/p/scripts/jquery.sticky-kit.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
-*/
-(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));
-if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,
-u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),
-h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),
-a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",
-y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this);
diff --git a/p/scripts/main.js b/p/scripts/main.js
index 343534826..0f05a5bf6 100644
--- a/p/scripts/main.js
+++ b/p/scripts/main.js
@@ -1,5 +1,5 @@
"use strict";
-/* globals $, jQuery, context, i18n, shortcut, shortcuts, url */
+/* globals $, jQuery, context, i18n, shortcut, shortcuts, SimpleScrollbar, url */
/* jshint strict:global */
var $stream = null,
@@ -245,7 +245,6 @@ function toggleContent(new_active, old_active, skipping) {
if (context.does_lazyload && !skipping) {
new_active.find('img[data-original], iframe[data-original]').each(function () {
- this.onload = function () { $(document.body).trigger("sticky_kit:recalc"); };
this.setAttribute('src', this.getAttribute('data-original'));
this.removeAttribute('data-original');
});
@@ -536,19 +535,6 @@ function inject_script(name) {
document.head.appendChild(script);
}
-function init_sticky_column() {
- if (!window.$ || !window.$.fn.stick_in_parent) {
- if (window.console) {
- console.log('FreshRSS waiting for Sticky-kit…');
- }
- window.setTimeout(init_sticky_column, 200);
- return;
- }
- if ($('.toggle_aside').css('display') === 'none') {
- $('#aside_feed .tree').stick_in_parent({parent:'#aside_feed'});
- }
-}
-
function init_column_categories() {
if (context.current_view !== 'normal') {
return;
@@ -564,38 +550,39 @@ function init_column_categories() {
this.alt = '▽';
}
});
- $(this).parent().next(".tree-folder-items").slideToggle(300 , function() { $(document.body).trigger("sticky_kit:recalc"); });
+ $(this).parent().next(".tree-folder-items").slideToggle(300, function () {
+ if (useJsScrollbar && sidebar && typeof(Event) === 'function') { //Refresh JS scrollbar
+ sidebar.querySelector('.ss-content').dispatchEvent(new Event('scroll'));
+ }
+ });
return false;
});
+
$('#aside_feed').on('click', '.tree-folder-items .feed .dropdown-toggle', function () {
- if ($(this).nextAll('.dropdown-menu').length === 0) {
- var itemId = $(this).closest('.item').attr('id'),
- templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template',
- id = itemId.substr(2),
- feed_web = $(this).data('fweb'),
- template = $('#' + templateId)
- .html().replace(/------/g, id).replace('http://example.net/', feed_web);
+ var itemId = $(this).closest('.item').attr('id'),
+ templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template',
+ id = itemId.substr(2),
+ feed_web = $(this).data('fweb'),
+ template = $('#' + templateId)
+ .html().replace(/------/g, id).replace('http://example.net/', feed_web);
+ if ($(this).next('.dropdown-menu').length === 0) {
$(this).attr('href', '#dropdown-' + id).prev('.dropdown-target').attr('id', 'dropdown-' + id).parent()
.append(template).find('button.confirm').removeAttr('disabled');
- $('.tree-folder-items .dropdown-close a').click(function(){
- $('.tree').removeClass('treepadding');
- $(document.body).trigger("sticky_kit:recalc");
- });
+ } else {
+ if ($(this).next('.dropdown-menu').css('display') === 'none') {
+ id = $(this).closest('.item').attr('id').substr(2);
+ $(this).attr('href', '#dropdown-' + id);
+ } else {
+ $(this).attr('href', "#close");
+ }
}
});
-
- $('.tree-folder-items .dropdown-toggle').click(function(){
- $('.tree').addClass('treepadding');
- $(document.body).trigger("sticky_kit:recalc");
- });
-
- init_sticky_column();
}
function init_shortcuts() {
if (!(window.shortcut && window.shortcuts)) {
if (window.console) {
- console.log('FreshRSS waiting for sortcut.js…');
+ console.log('FreshRSS waiting for shortcut.js…');
}
window.setTimeout(init_shortcuts, 200);
return;
@@ -854,8 +841,10 @@ function init_stream(divStream) {
}
}
+var $nav_entries = null;
+
function init_nav_entries() {
- var $nav_entries = $('#nav_entries');
+ $nav_entries = $('#nav_entries');
$nav_entries.find('.previous_entry').click(function () {
prev_entry();
return false;
@@ -1193,7 +1182,6 @@ function load_more_posts() {
$('#load_more').removeClass('loading');
$('#bigMarkAsRead').removeAttr('disabled');
load_more = false;
- $(document.body).trigger('sticky_kit:recalc');
});
}
@@ -1286,7 +1274,59 @@ function init_crypto_form() {
}
//</crypto form (Web login)>
+var sidebar = document.getElementById('sidebar');
+var useJsScrollbar = true;
+try {
+ /*jshint -W018 */
+ useJsScrollbar = sidebar && !CSS.supports('scrollbar-color: auto') &&
+ !(parseInt(getComputedStyle(sidebar, '::-webkit-scrollbar').width) < sidebar.offsetWidth);
+ /*jshint +W018 */
+} catch (ex) {
+}
+if (useJsScrollbar) {
+ inject_script('simple-scrollbar.min.js');
+}
+
+function sticky_recalc() {
+ var h = 0;
+ if ($nav_entries && $nav_entries.length > 0) {
+ h = $(window).height() - sidebar.getBoundingClientRect().top - $nav_entries.height();
+ } else {
+ h = $(window).height() - sidebar.getBoundingClientRect().top;
+ }
+ if (h > 0) {
+ $(sidebar).height(h);
+ }
+}
+
+function init_simple_scrollbar() {
+ if (!window.SimpleScrollbar) {
+ if (window.console) {
+ console.log('FreshRSS waiting for simple-scrollbar…');
+ }
+ window.setTimeout(init_simple_scrollbar, 100);
+ } else {
+ SimpleScrollbar.initEl(sidebar);
+ }
+}
+var scrollTimeout;
+function init_sticky_sidebar(){
+ if (!sidebar) {
+ return;
+ }
+ if (useJsScrollbar) {
+ init_simple_scrollbar();
+ }
+ $(window).scroll(function () {
+ if (scrollTimeout) {
+ clearTimeout(scrollTimeout);
+ scrollTimeout = null;
+ }
+ scrollTimeout = setTimeout(sticky_recalc, 200);
+ });
+ window.onresize = sticky_recalc;
+}
function init_confirm_action() {
$('body').on('click', '.confirm', function () {
@@ -1536,7 +1576,6 @@ function init_beforeDOM() {
return;
}
if (['normal', 'reader', 'global'].indexOf(context.current_view) >= 0) {
- inject_script('jquery.sticky-kit.min.js');
init_normal();
}
}
@@ -1554,6 +1593,7 @@ function init_afterDOM() {
$stream = $('#stream');
if ($stream.length > 0) {
init_load_more($stream);
+ init_sticky_sidebar();
init_posts();
init_nav_entries();
init_dynamic_tags();
diff --git a/p/scripts/simple-scrollbar.min.js b/p/scripts/simple-scrollbar.min.js
new file mode 100644
index 000000000..36b7df0b8
--- /dev/null
+++ b/p/scripts/simple-scrollbar.min.js
@@ -0,0 +1,2 @@
+// https://github.com/buzinas/simple-scrollbar
+!function(t,e){"object"==typeof exports?module.exports=e(window,document):t.SimpleScrollbar=e(window,document)}(this,function(t,e){function s(t){Object.prototype.hasOwnProperty.call(t,"data-simple-scrollbar")||Object.defineProperty(t,"data-simple-scrollbar",{value:new o(t)})}function i(t,s){function i(t){var e=t.pageY-a;a=t.pageY,n(function(){s.el.scrollTop+=e/s.scrollRatio})}function r(){t.classList.remove("ss-grabbed"),e.body.classList.remove("ss-grabbed"),e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",r)}var a;t.addEventListener("mousedown",function(s){return a=s.pageY,t.classList.add("ss-grabbed"),e.body.classList.add("ss-grabbed"),e.addEventListener("mousemove",i),e.addEventListener("mouseup",r),!1})}function r(t){for(this.target=t,this.direction=window.getComputedStyle(this.target).direction,this.bar='<div class="ss-scroll">',this.wrapper=e.createElement("div"),this.wrapper.setAttribute("class","ss-wrapper"),this.el=e.createElement("div"),this.el.setAttribute("class","ss-content"),"rtl"===this.direction&&this.el.classList.add("rtl"),this.wrapper.appendChild(this.el);this.target.firstChild;)this.el.appendChild(this.target.firstChild);this.target.appendChild(this.wrapper),this.target.insertAdjacentHTML("beforeend",this.bar),this.bar=this.target.lastChild,i(this.bar,this),this.moveBar(),this.el.addEventListener("scroll",this.moveBar.bind(this)),this.el.addEventListener("mouseenter",this.moveBar.bind(this)),this.target.classList.add("ss-container");var s=window.getComputedStyle(t);"0px"===s.height&&"0px"!==s["max-height"]&&(t.style.height=s["max-height"])}function a(){for(var t=e.querySelectorAll("*[ss-container]"),i=0;i<t.length;i++)s(t[i])}var n=t.requestAnimationFrame||t.setImmediate||function(t){return setTimeout(t,0)};r.prototype={moveBar:function(t){var e=this.el.scrollHeight,s=this.el.clientHeight,i=this;this.scrollRatio=s/e;var r="rtl"===i.direction,a=r?i.target.clientWidth-i.bar.clientWidth+18:-1*(i.target.clientWidth-i.bar.clientWidth);n(function(){i.scrollRatio>=1?i.bar.classList.add("ss-hidden"):(i.bar.classList.remove("ss-hidden"),i.bar.style.cssText="height:"+Math.max(100*i.scrollRatio,10)+"%; top:"+i.el.scrollTop/e*100+"%;right:"+a+"px;")})}},e.addEventListener("DOMContentLoaded",a),r.initEl=s,r.initAll=a;var o=r;return o}); \ No newline at end of file