123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- class PluginList extends Class
- constructor: (plugins) ->
- @plugins = plugins
- savePluginStatus: (plugin, is_enabled) =>
- Page.cmd "pluginConfigSet", [plugin.source, plugin.inner_path, "enabled", is_enabled], (res) =>
- if res == "ok"
- Page.updatePlugins()
- else
- Page.cmd "wrapperNotification", ["error", res.error]
- Page.projector.scheduleRender()
- handleCheckboxChange: (e) =>
- node = e.currentTarget
- plugin = node["data-plugin"]
- node.classList.toggle("checked")
- value = node.classList.contains("checked")
- @savePluginStatus(plugin, value)
- handleResetClick: (e) =>
- node = e.currentTarget
- plugin = node["data-plugin"]
- @savePluginStatus(plugin, null)
- handleUpdateClick: (e) =>
- node = e.currentTarget
- plugin = node["data-plugin"]
- node.classList.add("loading")
- Page.cmd "pluginUpdate", [plugin.source, plugin.inner_path], (res) =>
- if res == "ok"
- Page.cmd "wrapperNotification", ["done", "Plugin #{plugin.name} updated to latest version"]
- Page.updatePlugins()
- else
- Page.cmd "wrapperNotification", ["error", res.error]
- node.classList.remove("loading")
- return false
- handleDeleteClick: (e) =>
- node = e.currentTarget
- plugin = node["data-plugin"]
- if plugin.loaded
- Page.cmd "wrapperNotification", ["info", "You can only delete plugin that are not currently active"]
- return false
- node.classList.add("loading")
- Page.cmd "wrapperConfirm", ["Delete #{plugin.name} plugin?", "Delete"], (res) =>
- if not res
- node.classList.remove("loading")
- return false
- Page.cmd "pluginRemove", [plugin.source, plugin.inner_path], (res) =>
- if res == "ok"
- Page.cmd "wrapperNotification", ["done", "Plugin #{plugin.name} deleted"]
- Page.updatePlugins()
- else
- Page.cmd "wrapperNotification", ["error", res.error]
- node.classList.remove("loading")
- return false
- render: ->
- h("div.plugins", @plugins.map (plugin) =>
- if not plugin.info
- return
- descr = plugin.info.description
- plugin.info.default ?= "enabled"
- if plugin.info.default
- descr += " (default: #{plugin.info.default})"
- tag_version = ""
- tag_source = ""
- tag_delete = ""
- if plugin.source != "builtin"
- tag_update = ""
- if plugin.site_info?.rev
- if plugin.site_info.rev > plugin.info.rev
- tag_update = h("a.version-update.button",
- {href: "#Update+plugin", onclick: @handleUpdateClick, "data-plugin": plugin},
- "Update to rev#{plugin.site_info.rev}"
- )
- else
- tag_update = h("span.version-missing", "(unable to get latest vesion: update site missing)")
- tag_version = h("span.version",[
- "rev#{plugin.info.rev} ",
- tag_update,
- ])
- tag_source = h("div.source",[
- "Source: ",
- h("a", {"href": "/#{plugin.source}", "target": "_top"}, if plugin.site_title then plugin.site_title else plugin.source),
- " /" + plugin.inner_path
- ])
- tag_delete = h("a.delete", {"href": "#Delete+plugin", onclick: @handleDeleteClick, "data-plugin": plugin}, "Delete plugin")
- enabled_default = plugin.info.default == "enabled"
- if plugin.enabled != plugin.loaded or plugin.updated
- marker_title = "Change pending"
- is_pending = true
- else
- marker_title = "Changed from default status (click to reset to #{plugin.info.default})"
- is_pending = false
- is_changed = plugin.enabled != enabled_default and plugin.owner == "builtin"
- h("div.plugin", {key: plugin.name}, [
- h("div.title", [
- h("h3", [plugin.name, tag_version]),
- h("div.description", [descr, tag_source, tag_delete]),
- ])
- h("div.value.value-right",
- h("div.checkbox", {onclick: @handleCheckboxChange, "data-plugin": plugin, classes: {checked: plugin.enabled}}, h("div.checkbox-skin"))
- h("a.marker", {
- href: "#Reset", title: marker_title,
- onclick: @handleResetClick, "data-plugin": plugin,
- classes: {visible: is_pending or is_changed, pending: is_pending}
- }, "\u2022")
- )
- ])
- )
- window.PluginList = PluginList
|