ZeroNet/plugins/UiFileManager/media/js/UiFileManager.coffee

80 lines
2.2 KiB
CoffeeScript

window.h = maquette.h
class UiFileManager extends ZeroFrame
init: ->
@url_params = new URLSearchParams(window.location.search)
@list_site = @url_params.get("site")
@list_address = @url_params.get("address")
@list_inner_path = @url_params.get("inner_path")
@editor_inner_path = @url_params.get("file")
@file_list = new FileList(@list_site, @list_inner_path)
@site_info = null
@server_info = null
@is_sidebar_closed = false
if @editor_inner_path
@file_editor = new FileEditor(@editor_inner_path)
window.onbeforeunload = =>
if @file_editor?.isModified()
return true
else
return null
window.onresize = =>
@checkBodyWidth()
@checkBodyWidth()
@cmd("wrapperSetViewport", "width=device-width, initial-scale=0.8")
@cmd "serverInfo", {}, (server_info) =>
@server_info = server_info
@cmd "siteInfo", {}, (site_info) =>
@cmd("wrapperSetTitle", "List: /#{@list_inner_path} - #{site_info.content.title} - ZeroNet")
@site_info = site_info
if @file_editor then @file_editor.on_loaded.then =>
@file_editor.cm.setOption("readOnly", not site_info.settings.own)
@file_editor.mode = if site_info.settings.own then "Edit" else "View"
@projector.scheduleRender()
checkBodyWidth: =>
if not @file_editor
return false
if document.body.offsetWidth < 960 and not @is_sidebar_closed
@is_sidebar_closed = true
@projector?.scheduleRender()
else if document.body.offsetWidth > 960 and @is_sidebar_closed
@is_sidebar_closed = false
@projector?.scheduleRender()
onRequest: (cmd, message) =>
if cmd == "setSiteInfo"
@site_info = message
RateLimitCb 1000, (cb_done) =>
@file_list.update(cb_done)
@projector.scheduleRender()
else if cmd == "setServerInfo"
@server_info = message
@projector.scheduleRender()
else
@log "Unknown incoming message:", cmd
createProjector: =>
@projector = maquette.createProjector()
@projector.replace($("#content"), @render)
render: =>
return h("div.content#content", [
h("div.manager", {classes: {editing: @file_editor, sidebar_closed: @is_sidebar_closed}}, [
@file_list.render(),
if @file_editor then @file_editor.render()
])
])
window.Page = new UiFileManager()
window.Page.createProjector()