def default_bookmark_topic(self): return self._["default_topic"] def bookmarks_by_topic(self): topics: Dict[str, List[Dict[str, Any]]] = {} default_topic = self.default_bookmark_topic() for bookmark in self._["bookmarks"]: topic = topics.setdefault(bookmark["topic"] or default_topic, []) topic.append(bookmark) return sorted(topics.items()) def add_bookmark(self, title, url): self._["bookmarks"].append(BookmarkList.new_bookmark(title, url)) pagetypes.declare(BookmarkList) @snapin_registry.register class Bookmarks(SidebarSnapin): @staticmethod def type_name(): return "bookmarks" @classmethod def title(cls): return _("Bookmarks") @classmethod def description(cls): return _("A simple and yet practical snapin allowing to create "
@classmethod def _customizable_snapin_type_choices(cls): choices = [] for snapin_type_id, snapin_type in sorted( snapin_registry.get_customizable_snapin_types()): choices.append((snapin_type_id, snapin_type.title(), Dictionary( title=_("Parameters"), elements=snapin_type.vs_parameters(), optional_keys=[], ))) return choices pagetypes.declare(CustomSnapins) def _register_custom_snapins(): """First remove all previously registered custom snapins, then register the currently configured ones""" CustomSnapins.load() snapin_registry.register_custom_snapins(CustomSnapins.instances_sorted()) #. # .--Add Snapin----------------------------------------------------------. # | _ _ _ ____ _ | # | / \ __| | __| | / ___| _ __ __ _ _ __ (_)_ __ | # | / _ \ / _` |/ _` | \___ \| '_ \ / _` | '_ \| | '_ \ | # | / ___ \ (_| | (_| | ___) | | | | (_| | |_) | | | | | |