79 lines
2.2 KiB
CoffeeScript
79 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()
|