From 3225c84dc1eff765bd8b0519b5752d2e1437e175 Mon Sep 17 00:00:00 2001 From: Simon Baird Date: Tue, 27 Feb 2024 16:51:22 -0500 Subject: [PATCH] Hide edit buttons if not logged in for Classic Inject a shadow tiddler with content set to either 'yes' or 'no', then look for that shadow tiddler in the upload plugin. WIP, but it's generally working. --- rails/lib/th_file.rb | 47 ++++++++++--------- .../plugins/thost_upload_plugin.js.erb | 18 +++---- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/rails/lib/th_file.rb b/rails/lib/th_file.rb index 5c2b5c17f..32d910419 100644 --- a/rails/lib/th_file.rb +++ b/rails/lib/th_file.rb @@ -55,7 +55,17 @@ def strip_external_core_url_prefix self end - def apply_tw5_mods(site_name, for_download: false, local_core: false, use_put_saver: false, is_logged_in: false) + # Provide a way for TiddlyWikis to detect when they're being viewed by their + # owner. The readonly plugin might user this to hide tiddler edit buttons, etc. + def status_is_logged_in(for_download: false, is_logged_in: false) + if !for_download && is_logged_in + 'yes' + else + 'no' + end + end + + def apply_tw5_mods(site_name, for_download:, local_core:, use_put_saver:, is_logged_in:) upload_url = if for_download || use_put_saver # Clear $:/UploadURL for downloads so the save button in the downloaded # file will not try to use upload.js. It should use another save @@ -72,17 +82,6 @@ def apply_tw5_mods(site_name, for_download: false, local_core: false, use_put_sa Settings.subdomain_site_url(site_name) end - if !for_download && is_logged_in - # Provide a way for TiddlyWiki files to detect when - # they're being viewed by their owner - status_is_logged_in = 'yes' - - else - # The readonly plugin might user this to hide tiddler edit buttons, etc. - status_is_logged_in = 'no' - - end - write_tiddlers({ # TiddlyWiki will POST to this url using code in core/modules/savers/upload.js '$:/UploadURL' => upload_url, @@ -93,7 +92,7 @@ def apply_tw5_mods(site_name, for_download: false, local_core: false, use_put_sa '$:/UploadWithUrlOnly' => 'yes', # Provide a way for TiddlyWikis to detect when they're able to be saved - '$:/status/IsLoggedIn' => status_is_logged_in, + '$:/status/IsLoggedIn' => status_is_logged_in(for_download:, is_logged_in:) }) # Since every save uploads the entire TiddlyWiki I want to discourage @@ -115,7 +114,7 @@ def apply_tw5_mods(site_name, for_download: false, local_core: false, use_put_sa end end - def apply_classic_mods(site_name) + def apply_classic_mods(site_name, for_download:, is_logged_in:) # We don't want to hard code the site url in the plugin, but we also don't # want to hard code the domain name and port etc since they're different # in different environments. This is clever way to deal with that. @@ -129,24 +128,30 @@ def apply_classic_mods(site_name) } }) - # This could be a regular tiddler, but let's make it a shadow tiddler just to be cool. - # Will be clickable when viewing the plugin since we used 'TiddlyHost' as the modifier above. - # (I'm using camel case intentionally here despite the usual spelling of Tiddlyhost.) write_shadow_tiddlers({ + # This could be a regular tiddler, but let's make it a shadow tiddler just to be cool. + # Will be clickable when viewing the plugin since we used 'TiddlyHost' as the modifier above. + # (I'm using camel case intentionally here despite the usual spelling of Tiddlyhost.) 'TiddlyHost' => { text: "[[Tiddlyhost|#{Settings.main_site_url}]] is a hosting service for ~TiddlyWiki.", modifier: 'TiddlyHost', - } + }, + + # If we set this to 'yes' then the ThostUploadPlugin will decide to show the TiddlyWiki + # in readonly mode, i.e. without the new tiddler or edit buttons showing + 'TiddlyHostIsLoggedIn' => { + text: status_is_logged_in(for_download:, is_logged_in:), + modifier: 'TiddlyHost', + }, }) end def apply_tiddlyhost_mods(site_name, for_download: false, local_core: false, use_put_saver: false, is_logged_in: false) if is_tw5? - apply_tw5_mods(site_name, - for_download: for_download, local_core: local_core, use_put_saver: use_put_saver, is_logged_in: is_logged_in) + apply_tw5_mods(site_name, for_download:, local_core:, use_put_saver:, is_logged_in:) elsif is_classic? - apply_classic_mods(site_name) + apply_classic_mods(site_name, for_download:, is_logged_in:) else # FeatherWiki # No hackery for FeatherWiki currently diff --git a/rails/tw_content/plugins/thost_upload_plugin.js.erb b/rails/tw_content/plugins/thost_upload_plugin.js.erb index b1b2c7f99..02136256f 100644 --- a/rails/tw_content/plugins/thost_upload_plugin.js.erb +++ b/rails/tw_content/plugins/thost_upload_plugin.js.erb @@ -192,13 +192,15 @@ bidix.initOption('txtThostSiteName','<%= site_name %>'); // Tiddlyhost stuff // -// So you can see edit controls via http -config.options.chkHttpReadOnly = false; -window.readOnly = false; -window.showBackstage = true; - -// Add 'upload to tiddlyhost' button -config.shadowTiddlers.SideBarOptions = config.shadowTiddlers.SideBarOptions - .replace(/(<>)/,"$1<>"); +bidix.actReadOnly = config.shadowTiddlers.TiddlyHostIsLoggedIn == "no" +config.options.chkHttpReadOnly = bidix.actReadOnly; +window.readOnly = bidix.actReadOnly; +window.showBackstage = !bidix.actReadOnly; + +if (!bidix.actReadOnly) { + // Add 'upload to tiddlyhost' button + config.shadowTiddlers.SideBarOptions = config.shadowTiddlers.SideBarOptions + .replace(/(<>)/,"$1<>"); +} //}}}