From d9e14621b5a0de1c189486bbc8c18a7b007d6965 Mon Sep 17 00:00:00 2001 From: romibi Date: Fri, 8 Jul 2016 19:12:43 +0200 Subject: Make Sidebar Sticky --- p/scripts/jquery.sticky-kit.min.js | 9 +++++++++ p/scripts/main.js | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 p/scripts/jquery.sticky-kit.min.js (limited to 'p') diff --git a/p/scripts/jquery.sticky-kit.min.js b/p/scripts/jquery.sticky-kit.min.js new file mode 100644 index 000000000..e2a3c6de9 --- /dev/null +++ b/p/scripts/jquery.sticky-kit.min.js @@ -0,0 +1,9 @@ +/* + 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("
"))&&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"))),eb&&!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 Date: Sat, 30 Jul 2016 23:37:13 +0200 Subject: PSHB: work-around for SuperFeeder Feeds using SuperFeeder for PubSubHubbub push had timeout problems during substription. SuperFeeder bot was returning 422 "We could not verify your callback Error: ETIMEDOUT" It seems to be due to the the fact that SuperFeeder bot uses keep-alive but expects the server to close the connection. https://github.com/FreshRSS/FreshRSS/issues/312#issuecomment-73716936 --- p/api/pshb.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'p') diff --git a/p/api/pshb.php b/p/api/pshb.php index 7de4cc1a2..136b98fc9 100644 --- a/p/api/pshb.php +++ b/p/api/pshb.php @@ -65,11 +65,13 @@ if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'subscribe') { $hubJson['error'] = true; //Do not assume that PubSubHubbub works until the first successul push } file_put_contents('./!hub.json', json_encode($hubJson)); + header('Connection: close'); exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : ''); } if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] === 'unsubscribe') { if (empty($hubJson['lease_end']) || $hubJson['lease_end'] < time()) { + header('Connection: close'); exit(isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : ''); } else { header('HTTP/1.1 422 Unprocessable Entity'); -- cgit v1.2.3 From a180485f9146f22d48470f3ba541317dbc2ee076 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 13 Aug 2016 23:39:52 +0200 Subject: sticky-kit fix, and compatible async defer And set correct parent option https://github.com/FreshRSS/FreshRSS/pull/1172 --- CHANGELOG.md | 1 + app/FreshRSS.php | 3 +-- p/scripts/main.js | 37 +++++++++++++++++++++++++++++-------- 3 files changed, 31 insertions(+), 10 deletions(-) (limited to 'p') diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c8655bca..50498da99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ * Fixed Apache Etag issue that prevented caching [#1199](https://github.com/FreshRSS/FreshRSS/pull/1199) * Fixed OPML import of categories [#1202](https://github.com/FreshRSS/FreshRSS/issues/1202) * UI + * Use sticky category column [#1172](https://github.com/FreshRSS/FreshRSS/pull/1172) * Updated to jQuery 3.1.0 and several JavaScript fixes (e.g. drag & drop) [#1197](https://github.com/FreshRSS/FreshRSS/pull/1197) * API * Add API link in FreshRSS profile settings to ease set-up [#1186](https://github.com/FreshRSS/FreshRSS/pull/1186) diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 6b36c87f4..f9c371d27 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -95,8 +95,7 @@ class FreshRSS extends Minz_FrontController { } } - Minz_View::appendScript(Minz_Url::display('/scripts/jquery.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.min.js')),false,false,false); - Minz_View::appendScript(Minz_Url::display('/scripts/jquery.sticky-kit.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.sticky-kit.min.js'))); + Minz_View::appendScript(Minz_Url::display('/scripts/jquery.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.min.js'))); Minz_View::appendScript(Minz_Url::display('/scripts/shortcut.js?' . @filemtime(PUBLIC_PATH . '/scripts/shortcut.js'))); Minz_View::appendScript(Minz_Url::display('/scripts/main.js?' . @filemtime(PUBLIC_PATH . '/scripts/main.js'))); } diff --git a/p/scripts/main.js b/p/scripts/main.js index 9bf0c6dd3..b0ea40965 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -493,6 +493,27 @@ function init_posts() { } } +function inject_script(name) { + var script = document.createElement('script'); + script.async = 'async'; + script.defer = 'defer'; + script.src = '../scripts/' + 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; @@ -508,7 +529,7 @@ function init_column_categories() { this.alt = '▽'; } }); - $(this).parent().next(".tree-folder-items").slideToggle( 400 , function() { $(document.body).trigger("sticky_kit:recalc"); } ); + $(this).parent().next(".tree-folder-items").slideToggle(300 , function() { $(document.body).trigger("sticky_kit:recalc"); }); return false; }); $('#aside_feed').on('click', '.tree-folder-items .item .dropdown-toggle', function () { @@ -519,9 +540,8 @@ function init_column_categories() { $(this).attr('href', '#dropdown-' + feed_id).prev('.dropdown-target').attr('id', 'dropdown-' + feed_id).parent().append(template); } }); - if( $('.toggle_aside').css('display')=='none') { - $('#aside_feed .tree').stick_in_parent(); - } + + init_sticky_column(); } function init_shortcuts() { @@ -529,7 +549,7 @@ function init_shortcuts() { if (window.console) { console.log('FreshRSS waiting for sortcut.js…'); } - window.setTimeout(init_shortcuts, 50); + window.setTimeout(init_shortcuts, 200); return; } // Touches de manipulation @@ -1313,7 +1333,7 @@ function init_normal() { if (window.console) { console.log('FreshRSS waiting for content…'); } - window.setTimeout(init_normal, 50); + window.setTimeout(init_normal, 100); return; } init_column_categories(); @@ -1328,11 +1348,12 @@ function init_beforeDOM() { if (window.console) { console.log('FreshRSS waiting for jQuery…'); } - window.setTimeout(init_beforeDOM, 50); + window.setTimeout(init_beforeDOM, 100); return; } init_confirm_action(); if (['normal', 'reader', 'global'].indexOf(context.current_view) >= 0) { + inject_script('jquery.sticky-kit.min.js'); init_normal(); } } @@ -1342,7 +1363,7 @@ function init_afterDOM() { if (window.console) { console.log('FreshRSS waiting again for jQuery…'); } - window.setTimeout(init_afterDOM, 50); + window.setTimeout(init_afterDOM, 100); return; } init_notifications(); -- cgit v1.2.3 From 6941b4c742fb4c3593e08c80ff09d52f3520dc03 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 14 Aug 2016 23:00:07 +0200 Subject: Refresh sticky column after auto-load https://github.com/FreshRSS/FreshRSS/pull/1172 --- p/scripts/main.js | 1 + 1 file changed, 1 insertion(+) (limited to 'p') diff --git a/p/scripts/main.js b/p/scripts/main.js index b0ea40965..6f1f40642 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1013,6 +1013,7 @@ function load_more_posts() { $('#load_more').removeClass('loading'); load_more = false; + $(document.body).trigger('sticky_kit:recalc'); }); } -- cgit v1.2.3 From 1d6c71e216898729cf2cc8330130b568ab198f2a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 15 Aug 2016 23:07:47 +0200 Subject: Read-all bug fixed Introduced by the new forms of https://github.com/FreshRSS/FreshRSS/issues/772 https://github.com/FreshRSS/FreshRSS/pull/1188 --- p/scripts/main.js | 4 ++-- p/themes/BlueLagoon/BlueLagoon.css | 2 +- p/themes/Screwdriver/screwdriver.css | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'p') diff --git a/p/scripts/main.js b/p/scripts/main.js index 6f1f40642..8980fe2f6 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -993,12 +993,12 @@ function load_more_posts() { box_load_more.children('.flux:last').after($('#stream', data).children('.flux, .day')); $('.pagination').replaceWith($('.pagination', data)); if (context.display_order === 'ASC') { - $('#nav_menu_read_all > .read_all').attr( + $('#nav_menu_read_all .read_all').attr( 'formaction', $('#bigMarkAsRead').attr('formaction') ); } else { $('#bigMarkAsRead').attr( - 'formaction', $('#nav_menu_read_all > .read_all').attr('formaction') + 'formaction', $('#nav_menu_read_all .read_all').attr('formaction') ); } diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index d64ffd9a0..27bae5404 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -753,7 +753,7 @@ a.btn { border: 1px solid #CCC; box-shadow: 0px 1px #FFF; } -#panel > .nav_menu > #nav_menu_read_all > .dropdown > .btn.dropdown-toggle{ +#panel > .nav_menu > #nav_menu_read_all .dropdown > .btn.dropdown-toggle { border-radius: 0 4px 4px 0; border:none; border-left: solid 1px #ccc; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index b7bbd923e..9dbe523a1 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -748,7 +748,7 @@ a.btn { border: 1px solid #CCC; box-shadow: 0px 1px #FFF; } -#panel > .nav_menu > #nav_menu_read_all > .dropdown > .btn.dropdown-toggle{ +#panel > .nav_menu > #nav_menu_read_all .dropdown > .btn.dropdown-toggle { border-radius: 0 4px 4px 0; border:none; border-left: solid 1px #ccc; -- cgit v1.2.3