+ <%= icon "info-circle-fill", t(".alert.info") %> + <%= notice %> +
+ <% end %> + <% if alert %> ++ <%= icon "x-octagon-fill", t(".alert.danger") %> + <%= alert %> +
+ <% end %> +diff --git a/.gitignore b/.gitignore index 437467b..5fd31e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules -manyfold/usr manyfold/.env +manyfold/usr/public/webxr/node_modules diff --git a/.gitmodules b/.gitmodules index 5ca14c4..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "godot"] - path = clients/godot - url = ../xrforge-godot.git diff --git a/clients/godot b/clients/godot deleted file mode 160000 index 79e8669..0000000 --- a/clients/godot +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 79e8669ca609782aa6fa9eeed259d9621697f460 diff --git a/clients/webxr b/clients/webxr deleted file mode 120000 index 19fe0ce..0000000 --- a/clients/webxr +++ /dev/null @@ -1 +0,0 @@ -../manyfold/usr/src/app/public/webxr \ No newline at end of file diff --git a/manyfold/usr/src/app/app/components/preview_frame.rb b/manyfold/usr/src/app/app/components/preview_frame.rb new file mode 100644 index 0000000..f9e84c3 --- /dev/null +++ b/manyfold/usr/src/app/app/components/preview_frame.rb @@ -0,0 +1,86 @@ +# frozen_string_literal: true + +class Components::PreviewFrame < Components::Base + include Phlex::Rails::Helpers::ImageTag + + register_value_helper :policy_scope + + def initialize(object:) + @object = object + end + + def before_template + @file = @object.is_a?(Model) ? @object.preview_file : policy_scope(@object.models).first&.preview_file + end + + def view_template + a href: "/webxr/dist/xrforge.html?#{model_model_file_path(@file.model, @file, format: @file.extension)}", target:"_blank" do + if @file + local + elsif @object.remote? + remote + else + empty + end + end + end + + private + + def local + if @file.is_image? + image model_model_file_path(@file.model, @file, format: @file.extension, derivative: "preview"), @file.name + elsif @file.is_renderable? + div class: "card-img-top #{"sensitive" if needs_hiding?}" do + Renderer file: @file + end + else + empty + end + end + + def remote + preview_data = @object.federails_actor&.extensions&.dig("preview") + case preview_data&.dig("type") + when "Image" + image preview_data["url"], preview_data["summary"] + when "Document" + div class: "card-img-top #{"sensitive" if needs_hiding?}" do + iframe( + scrolling: "no", + srcdoc: safe([ + "
", + preview_data["content"], + "" + ].join), + title: preview_data["summary"] + ) + end + else + empty + end + end + + def needs_hiding? + return false unless current_user.nil? || current_user.sensitive_content_handling.present? + case @object.class + when Model + @object.sensitive + when Collection + @file.model.sensitive + else + false + end + end + + def empty + div class: "preview-empty" do + p { t("components.model_card.no_preview") } + end + end + + def image(url, alt) + div class: "card-img-top card-img-top-background", style: "background-image: url(#{url})" + image_tag url, class: "card-img-top image-preview #{"sensitive" if needs_hiding?}", alt: alt, style: "position:absolute; top:0" + end +end diff --git a/manyfold/usr/src/app/app/views/layouts/application.html.erb b/manyfold/usr/src/app/app/views/layouts/application.html.erb new file mode 100644 index 0000000..1010f6d --- /dev/null +++ b/manyfold/usr/src/app/app/views/layouts/application.html.erb @@ -0,0 +1,44 @@ + + + ++ <%= icon "info-circle-fill", t(".alert.info") %> + <%= notice %> +
+ <% end %> + <% if alert %> ++ <%= icon "x-octagon-fill", t(".alert.danger") %> + <%= alert %> +
+ <% end %> +