132 lines
No EOL
3.9 KiB
CoffeeScript
132 lines
No EOL
3.9 KiB
CoffeeScript
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 |