window.h = maquette.h class UiPluginManager extends ZeroFrame init: -> @plugin_list_builtin = new PluginList() @plugin_list_custom = new PluginList() @plugins_changed = null @need_restart = null @ onOpenWebsocket: => @cmd("wrapperSetTitle", "Plugin manager - ZeroNet") @cmd "serverInfo", {}, (server_info) => @server_info = server_info @updatePlugins() updatePlugins: (cb) => @cmd "pluginList", [], (res) => @plugins_changed = (item for item in res.plugins when item.enabled != item.loaded or item.updated) plugins_builtin = (item for item in res.plugins when item.source == "builtin") @plugin_list_builtin.plugins = plugins_builtin.sort (a, b) -> return a.name.localeCompare(b.name) plugins_custom = (item for item in res.plugins when item.source != "builtin") @plugin_list_custom.plugins = plugins_custom.sort (a, b) -> return a.name.localeCompare(b.name) @projector.scheduleRender() cb?() createProjector: => @projector = maquette.createProjector() @projector.replace($("#content"), @render) @projector.replace($("#bottom-restart"), @renderBottomRestart) render: => if not @plugin_list_builtin.plugins return h("div.content") h("div.content", [ h("div.section", [ if @plugin_list_custom.plugins?.length [ h("h2", "Installed third-party plugins"), @plugin_list_custom.render() ] h("h2", "Built-in plugins") @plugin_list_builtin.render() ]) ]) handleRestartClick: => @restart_loading = true setTimeout ( => Page.cmd("serverShutdown", {restart: true}) ), 300 Page.projector.scheduleRender() return false renderBottomRestart: => h("div.bottom.bottom-restart", {classes: {visible: @plugins_changed?.length}}, h("div.bottom-content", [ h("div.title", "Some plugins status has been changed"), h("a.button.button-submit.button-restart", {href: "#Restart", classes: {loading: @restart_loading}, onclick: @handleRestartClick}, "Restart ZeroNet client" ) ])) window.Page = new UiPluginManager() window.Page.createProjector()