diff --git a/plugins/Sidebar/SidebarPlugin.py b/plugins/Sidebar/SidebarPlugin.py
index 876ea37a..ed77bbf5 100644
--- a/plugins/Sidebar/SidebarPlugin.py
+++ b/plugins/Sidebar/SidebarPlugin.py
@@ -415,11 +415,26 @@ class UiWebsocketPlugin(object):
class_pause = "hidden"
class_resume = ""
+ dashboard = config.homepage
+ dsite = self.user.sites.get(dashboard, None)
+ if not dsite:
+ print('No dashboard found, cannot favourite')
+ class_favourite = "hidden"
+ class_unfavourite = "hidden"
+ elif dsite.get('sittings', {}).get('favorite_sites', {}).get(self.site.address, False):
+ class_favourite = ""
+ class_unfavourite = "hidden"
+ else:
+ class_favourite = "hidden"
+ class_unfavourite = ""
+
body.append(_("""
{_[Update]}
{_[Pause]}
+ {_[Favourite]}
+ {_[Unfavourite]}
{_[Resume]}
{_[Delete]}
diff --git a/plugins/Sidebar/media/all.js b/plugins/Sidebar/media/all.js
index 5a03a37c..2bff5cef 100644
--- a/plugins/Sidebar/media/all.js
+++ b/plugins/Sidebar/media/all.js
@@ -1137,6 +1137,22 @@ window.initScrollable = function () {
return false;
};
})(this));
+ this.tag.find("#button-favourite").off("click touched").on("click touched", (function(_this) {
+ return function() {
+ _this.tag.find("#button-favourite").addClass("hidden");
+ _this.tag.find("#button-unfavourite").removeClass("hidden");
+ _this.wrapper.ws.cmd("siteFavourite", _this.wrapper.site_info.address);
+ return false;
+ };
+ })(this));
+ this.tag.find("#button-unfavourite").off("click touched").on("click touched", (function(_this) {
+ return function() {
+ _this.tag.find("#button-favourite").removeClass("hidden");
+ _this.tag.find("#button-unfavourite").addClass("hidden");
+ _this.wrapper.ws.cmd("siteUnfavourite", _this.wrapper.site_info.address);
+ return false;
+ };
+ })(this));
this.tag.find("#button-delete").off("click touchend").on("click touchend", (function(_this) {
return function() {
_this.handleSiteDeleteClick();
@@ -1767,4 +1783,4 @@ function morphdom(fromNode, toNode, options) {
module.exports = morphdom;
},{}]},{},[1])(1)
-});
\ No newline at end of file
+});
diff --git a/src/Ui/UiWebsocket.py b/src/Ui/UiWebsocket.py
index 2bea8f2a..48a30ee2 100644
--- a/src/Ui/UiWebsocket.py
+++ b/src/Ui/UiWebsocket.py
@@ -10,6 +10,8 @@ import stat
import gevent
+from rich import print
+
from Config import config
from Site import SiteManager
from Crypt import CryptBitcoin
@@ -950,6 +952,35 @@ class UiWebsocket(object):
else:
self.response(to, {"error": "Unknown site: %s" % address})
+ def siteFavUnfav(self, to, address, action, response):
+ dashboard = config.homepage
+ dsite = self.user.sites.get(dashboard, None)
+ if not dsite:
+ raise RuntimeError(f'No dashboard {dashboard} found to add site to favourites')
+ if 'settings' not in dsite:
+ dsite['settings'] = {}
+ dsettings = dsite['settings']
+ if 'favorite_sites' not in dsettings:
+ dsettings['favorite_sites'] = {}
+ favs = dsettings['favorite_sites']
+ action(favs)
+ self.user.setSiteSettings(dashboard, dsettings)
+ self.response(to, response)
+
+ @flag.admin
+ @flag.no_multiuser
+ def actionSiteFavourite(self, to, address):
+ def do_add(favs):
+ favs[address] = True
+ self.siteFavUnfav(to, address, do_add, "Added to favourites")
+
+ @flag.admin
+ @flag.no_multiuser
+ def actionSiteUnfavourite(self, to, address):
+ def do_del(favs):
+ del favs[address]
+ self.siteFavUnfav(to, address, do_del, "Removed from favourites")
+
@flag.admin
@flag.no_multiuser
def actionSiteDelete(self, to, address):