├── xExtension-FixedNavMenu
├── static
│ ├── style.css
│ ├── script.js
│ └── jquerymin.js
├── metadata.json
├── README.md
├── extension.php
└── LICENSE
├── xExtension-SmartMobileMenu
├── screenshot1.png
├── screenshot2.png
├── screenshot3.png
├── screenshot4.png
├── metadata.json
├── extension.php
├── README.md
├── LICENSE
└── static
│ ├── style.css
│ └── script.js
├── xExtension-MobileScrollMenu
├── mobilescrollmenu.gif
├── metadata.json
├── extension.php
├── README.md
├── LICENSE
└── static
│ └── script.js
├── xExtension-TouchControl
├── metadata.json
├── extension.php
├── README.md
├── LICENSE
└── static
│ ├── doubletap.js
│ ├── script.js
│ ├── detectswipe.js
│ └── jquerymin.js
├── xExtension-KeepFolderState
├── metadata.json
├── README.md
├── extension.php
├── LICENSE
└── static
│ └── script.js
├── README.md
└── LICENSE
/xExtension-FixedNavMenu/static/style.css:
--------------------------------------------------------------------------------
1 | .sticker {
2 | position: fixed;
3 | top: 0;
4 | z-index: 15;
5 | }
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/screenshot1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/langfeld/FreshRSS-extensions/HEAD/xExtension-SmartMobileMenu/screenshot1.png
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/screenshot2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/langfeld/FreshRSS-extensions/HEAD/xExtension-SmartMobileMenu/screenshot2.png
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/screenshot3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/langfeld/FreshRSS-extensions/HEAD/xExtension-SmartMobileMenu/screenshot3.png
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/screenshot4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/langfeld/FreshRSS-extensions/HEAD/xExtension-SmartMobileMenu/screenshot4.png
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/mobilescrollmenu.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/langfeld/FreshRSS-extensions/HEAD/xExtension-MobileScrollMenu/mobilescrollmenu.gif
--------------------------------------------------------------------------------
/xExtension-TouchControl/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Touch Control",
3 | "author": "Marco Heizmann",
4 | "description": "Add touch gestures to FreshRSS.",
5 | "version": 0.2,
6 | "entrypoint": "TouchControl",
7 | "type": "user"
8 | }
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Smart Mobile Menu",
3 | "author": "Marco Heizmann",
4 | "description": "Minimizes the required button space and groups buttons.",
5 | "version": 0.1,
6 | "entrypoint": "SmartMobileMenu",
7 | "type": "user"
8 | }
--------------------------------------------------------------------------------
/xExtension-FixedNavMenu/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Fixed Nav Menu",
3 | "author": "Marco Heizmann",
4 | "description": "Sets the position of the navigation menu to fixed when scrolling down.",
5 | "version": 0.1,
6 | "entrypoint": "FixedNavMenu",
7 | "type": "user"
8 | }
--------------------------------------------------------------------------------
/xExtension-KeepFolderState/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Keep Folder State",
3 | "author": "Marco Heizmann",
4 | "description": "Stores the state of the folders locally and expand them automatically if necessary.",
5 | "version": 0.1,
6 | "entrypoint": "KeepFolderState",
7 | "type": "user"
8 | }
--------------------------------------------------------------------------------
/xExtension-KeepFolderState/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS KeepFolderState
2 | Stores the state of the folders locally and expand them automatically if necessary.
3 |
4 | # Installation
5 | To use it, upload the *xExtension-KeepFolderState* folder in your ./extensions directory and enable it on the extension panel in FreshRSS.
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Mobile Scroll Menu",
3 | "author": "Marco Heizmann",
4 | "description": "Automatically hides the header menu on mobile phones, when scrolling down and shows it when scrolling up.",
5 | "version": 0.2,
6 | "entrypoint": "MobileScrollMenu",
7 | "type": "user"
8 | }
--------------------------------------------------------------------------------
/xExtension-FixedNavMenu/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS FixedNavMenu
2 | Sets the position of the navigation menu to fixed when scrolling down on the desktop version of FreshRSS
3 |
4 | # Installation
5 | To use it, upload the *xExtension-FixedNavMenu* folder in your ./extensions directory and enable it on the extension panel in FreshRSS.
--------------------------------------------------------------------------------
/xExtension-KeepFolderState/extension.php:
--------------------------------------------------------------------------------
1 | getFileUrl('jquerymin.js', 'js'),'','','');
7 | Minz_View::appendScript($this->getFileUrl('script.js', 'js'),'','','');
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/extension.php:
--------------------------------------------------------------------------------
1 | getFileUrl('jquerymin.js', 'js'),'','','');
7 | Minz_View::appendScript($this->getFileUrl('script.js', 'js'),'','','');
8 | }
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/xExtension-FixedNavMenu/extension.php:
--------------------------------------------------------------------------------
1 | getFileUrl('style.css', 'css'));
7 |
8 | Minz_View::appendScript($this->getFileUrl('jquerymin.js', 'js'),'','','');
9 | Minz_View::appendScript($this->getFileUrl('script.js', 'js'),'','','');
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/extension.php:
--------------------------------------------------------------------------------
1 | getFileUrl('style.css', 'css'));
7 |
8 | Minz_View::appendScript($this->getFileUrl('jquerymin.js', 'js'),'','','');
9 | Minz_View::appendScript($this->getFileUrl('script.js', 'js'),'','','');
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/xExtension-TouchControl/extension.php:
--------------------------------------------------------------------------------
1 | getFileUrl('jquerymin.js', 'js'),'','','');
7 | Minz_View::appendScript($this->getFileUrl('doubletap.js', 'js'),'','','');
8 | Minz_View::appendScript($this->getFileUrl('detectswipe.js', 'js'),'','','');
9 | Minz_View::appendScript($this->getFileUrl('script.js', 'js'),'','','');
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS MobileScrollMenu
2 | Automatically hides the header menu on mobile phones, when scrolling down and shows it when scrolling up.
3 |
4 | # Screenshot:
5 | 
6 |
7 | # Installation
8 | To use it, upload the *xExtension-MobileScrollMenu* folder in your ./extensions directory and enable it on the extension panel in FreshRSS.
9 |
10 | # Changelog
11 | 0.2
12 | - to prevent menu showup while switching expanded articles I created a "human-scroll recognition"
13 |
14 | 0.1
15 | - first release
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS Smart Mobile Menu
2 | Minimizes the required button space and groups buttons
3 |
4 | # Screenshot:
5 | 
6 |
7 | 
8 |
9 | 
10 |
11 | 
12 |
13 | # Installation
14 | To use it, upload the *xExtension-SmartMobileMenu* folder in your ./extensions directory and enable it on the extension panel in FreshRSS.
--------------------------------------------------------------------------------
/xExtension-FixedNavMenu/static/script.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function(){
2 |
3 | function sticky_menu() {
4 |
5 | var window_top = $(window).scrollTop();
6 | var div_top = $('#sticker_anchor').offset().top;
7 |
8 | if (window_top > div_top) {
9 |
10 | $('.nav_menu').addClass('sticker');
11 | $('.nav_menu').css('width', $('#sticker_anchor').width());
12 | $('#sticker_anchor').height($('.nav_menu').outerHeight());
13 |
14 | } else {
15 |
16 | $('.nav_menu').removeClass('sticker');
17 | $('#sticker_anchor').height(0);
18 |
19 | }
20 | }
21 |
22 | var width = $(window).width();
23 | if (width > 768) {
24 |
25 | $('.nav_menu').before('
');
26 |
27 | $(window).scroll(sticky_menu);
28 | sticky_menu();
29 |
30 | }
31 |
32 | });
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS extensions
2 | This repository contains my unfficial FreshRSS extensions.
3 |
4 | ## Fixed Nav Menu:
5 | Sets the position of the navigation menu to fixed when scrolling down.
6 |
7 | ## Keep Folder State:
8 | Stores the state of the folders locally and expand them automatically if necessary.
9 |
10 | ## Mobile Scroll Menu:
11 | Automatically hides the header menu on mobile phones, when scrolling down and shows it when scrolling up.
12 |
13 | ## Touch Control:
14 | Add touch gestures to FreshRSS.
15 |
16 | ## Smart Mobile Menu:
17 | Minimizes the required button space and groups buttons
18 |
19 | # Installation
20 |
21 | To install an extension, download the extension archive first and extract it on your PC.
22 | Then, upload the specific extension(s) you want on your server.
23 |
24 | Extensions must be in the ./extensions directory of your FreshRSS installation.
25 |
26 | ---
27 |
28 | The official repository for FreshRSS extensions: https://github.com/FreshRSS/Extensions
--------------------------------------------------------------------------------
/xExtension-TouchControl/README.md:
--------------------------------------------------------------------------------
1 | # FreshRSS TouchControl
2 | Add touch gestures to FreshRSS
3 |
4 | If an article is expanded:
5 | - next article (swipe to left),
6 | - previous article (swipe to right)
7 | - collapse article (double tap on the article)
8 |
9 | If no article is expanded:
10 | - close folder-menu (swipe to left),
11 | - open folder-menu (swipe to right)
12 |
13 | Always:
14 | - open folder-menu (swipe from left-edge)
15 | - close folder-menu (swipe from right-edge)
16 |
17 | The bottom-navigation is hidden by default, to show:
18 | - show bottom-navigation (swipe from bottom-edge up)
19 |
20 | # Installation
21 | To use it, upload the *xExtension-TouchControl* folder in your ./extensions directory and enable it on the extension panel in FreshRSS.
22 |
23 | # Changelog
24 | 0.2
25 | - switched to a fork of detectswipe with support of edge detection
26 | - changed gestures to news+ style
27 | - created understandable functions for customization (with some checks)
28 |
29 | 0.1
30 | - first release
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-FixedNavMenu/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-TouchControl/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-KeepFolderState/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 oyox
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/xExtension-TouchControl/static/doubletap.js:
--------------------------------------------------------------------------------
1 | jQuery(function ($) {
2 |
3 | /*
4 | * jQuery Double Tap (https://gist.github.com/attenzione/7098476#file-jquery-doubletap-js)
5 | * Developer: Sergey Margaritov (sergey@margaritov.net)
6 | * Date: 22.10.2013
7 | * Based on jquery documentation http://learn.jquery.com/events/event-extensions/
8 | */
9 |
10 | $.event.special.doubletap = {
11 | bindType: 'touchend',
12 | delegateType: 'touchend',
13 |
14 | handle: function (event) {
15 | var handleObj = event.handleObj,
16 | targetData = jQuery.data(event.target),
17 | now = new Date().getTime(),
18 | delta = targetData.lastTouch ? now - targetData.lastTouch : 0,
19 | delay = delay == null ? 300 : delay;
20 |
21 | if (delta < delay && delta > 30) {
22 | targetData.lastTouch = null;
23 | event.type = handleObj.origType;
24 | ['clientX', 'clientY', 'pageX', 'pageY'].forEach(function (property) {
25 | event[property] = event.originalEvent.changedTouches[0][property];
26 | })
27 |
28 | // let jQuery handle the triggering of "doubletap" event handlers
29 | handleObj.handler.apply(this, arguments);
30 | } else {
31 | targetData.lastTouch = now;
32 | }
33 | }
34 | };
35 |
36 |
37 | });
--------------------------------------------------------------------------------
/xExtension-MobileScrollMenu/static/script.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 |
3 | var width = $(window).width();
4 | if (width <= 768) {
5 |
6 | var scroll_tolerance = 20;
7 |
8 | // Navbar Layout
9 | $('.nav_menu').css('position', 'fixed').css('zIndex', '10');
10 |
11 | // Content Top Spacer
12 | $('#stream').css('paddingTop', $('.nav_menu').outerHeight() + 'px');
13 |
14 | // StartPos
15 | var position = $(window).scrollTop();
16 |
17 | // Prevent scrolljumps while switching articles
18 | var scrollcounter = 0;
19 | var scrolltimer;
20 |
21 | $(window).scroll(function() {
22 |
23 | var scroll = $(window).scrollTop();
24 | var diff = Math.abs(position - $(window).scrollTop());
25 |
26 | // Prevent scrolljumps while switching articles
27 | if (scrolltimer) {
28 | scrollcounter++;
29 | clearTimeout(scrolltimer);
30 | }
31 | scrolltimer = setTimeout(function() {
32 | scrollcounter=0;
33 | }, 1000);
34 |
35 | // Scrolling down
36 | if (scroll > position) {
37 | $('.nav_menu').slideUp();
38 | }
39 | else {
40 |
41 | // Scrolled up and no jump
42 | if (diff > scroll_tolerance && scrollcounter > 5) {
43 | $('.nav_menu').slideDown();
44 | }
45 |
46 | // Reached top
47 | else if (scroll < 20) {
48 | $('.nav_menu').slideDown();
49 | }
50 |
51 | }
52 |
53 | position = scroll;
54 |
55 | });
56 |
57 | }
58 |
59 | });
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/static/style.css:
--------------------------------------------------------------------------------
1 | @media (max-width: 768px) {
2 |
3 | .extension_smartmenu ul {
4 | min-width: 45px !important;
5 | text-align: center !important;
6 | }
7 |
8 | .extension_smartmenu li.item {
9 | padding: 5px !important;
10 | }
11 |
12 | .extension_smartmenu li.item a {
13 | min-width: 36px !important;
14 | width: 36px;
15 | padding: 0 !important;
16 | margin: 0 !important;
17 | }
18 |
19 | .extension_smartmenu .dot {
20 | position: absolute;
21 | top: 0px;
22 | right: 0px;
23 | height: 16px;
24 | width: 16px;
25 | font-size: 10px;
26 | text-align: center;
27 | line-height: 14px;
28 | border-radius: 50%;
29 | -webkit-border-radius: 50%;
30 | -khtml-border-radius: 50%;
31 | -moz-border-radius: 50%;
32 | color: #fff;
33 | background-color: #D9534F;
34 | background-image: none;
35 | }
36 |
37 | /* Space correction */
38 | .nav_menu {
39 | width:100%;
40 | }
41 | .nav_menu .btn:not(.dropdown-toggle) {
42 | margin: 2px !important;
43 | }
44 |
45 | .nav_menu .stick {
46 | margin: 0px !important;
47 | }
48 | .nav_menu .read_all.btn {
49 | width:37px;
50 | }
51 | #stream {
52 | padding-top: 50px !important;
53 | }
54 |
55 | /* Search bar */
56 | .item.search {
57 | width: 100%;
58 | }
59 | .item.search .stick {
60 | padding-left: 10px;
61 | padding-top: 8px;
62 | width: 100%;
63 | text-align: left;
64 | }
65 |
66 | .nav_menu .search input {
67 | max-width: 85% !important;
68 | width: 85% !important;
69 | }
70 |
71 | }
--------------------------------------------------------------------------------
/xExtension-KeepFolderState/static/script.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function(){
2 |
3 | /* Init */
4 | var identifier = 0;
5 | var thisState;
6 | $('.tree-folder-title>.dropdown-toggle').each(function () {
7 |
8 | // Set element identifier
9 | $(this).data('uid', identifier);
10 | $(this).attr('data-uid', identifier);
11 |
12 | // Check for stored toggle state
13 | thisState = localStorage.getItem('freshrss-toggle-state-' + identifier);
14 | if (thisState) {
15 | if ($('.tree-folder-title>.dropdown-toggle[data-uid="' + identifier + '"]').length) {
16 | $(this).parent().next(".tree-folder-items").show(0, function () {
17 | $(document.body).trigger("sticky_kit:recalc");
18 | });
19 |
20 | // Set new state icon
21 | $(this).children().each(function () {
22 |
23 | if (this.src.includes('down.svg')) {
24 | this.src = this.src.replace('/icons/down.', '/icons/up.');
25 | this.alt = '△';
26 | }
27 |
28 | });
29 |
30 | }
31 | }
32 |
33 | identifier++;
34 |
35 | });
36 |
37 |
38 | /* Listener */
39 | $('#aside_feed').on('click', '.tree-folder>.tree-folder-title>a.dropdown-toggle', function () {
40 |
41 | $(this).children().each(function () {
42 |
43 | // Get element identifier
44 | identifier = $(this).parent().data('uid');
45 |
46 | if (this.src.includes('up.svg')) {
47 |
48 | // Check for stored toggle state
49 | var thisState = localStorage.getItem('freshrss-toggle-state-' + identifier);
50 | if (thisState) {
51 |
52 | localStorage.removeItem('freshrss-toggle-state-' + identifier);
53 |
54 | }
55 |
56 | // console.log('Close');
57 |
58 | } else {
59 |
60 | localStorage.setItem('freshrss-toggle-state-' + identifier, "open");
61 |
62 | // console.log('Open');
63 | }
64 | });
65 |
66 | });
67 |
68 | });
--------------------------------------------------------------------------------
/xExtension-SmartMobileMenu/static/script.js:
--------------------------------------------------------------------------------
1 | jQuery(function($){
2 |
3 | var width = $(window).width();
4 | if (width <= 768) {
5 |
6 | // View-State
7 | smartify_menu( 'nav_menu_actions' );
8 |
9 | // View-Type
10 | smartify_menu( 'nav_menu_views' );
11 |
12 | // Shorten read-all button text
13 | $('.read_all').html('✔');
14 |
15 | // 🔍 Dropdown search bar
16 | // $('.nav_menu').animate({ height:100 });
17 | var searchtemp = $(".item.search").html();
18 | $(".item.search").remove();
19 | $(".nav_menu").append( '' );
20 | $(".nav_menu").append( '