5034: Improve Workbench collection display.
authorBrett Smith <brett@curoverse.com>
Thu, 12 Mar 2015 14:15:39 +0000 (10:15 -0400)
committerBrett Smith <brett@curoverse.com>
Fri, 13 Mar 2015 19:14:05 +0000 (15:14 -0400)
* Display the UUID, and make it auto-select for easy copying.
* Do the same for the portable data hash, and call it the content
  address to emphasize that.
* Display information about the collection's size on the show page and
  preview pane.  This relies on an updated Ruby SDK.
* Clean up code that checks for a portable data hash in the UUID.
  That can't happen anymore thanks to the redirect/list display logic
  in the controller.

apps/workbench/Gemfile
apps/workbench/Gemfile.lock
apps/workbench/app/assets/javascripts/application.js
apps/workbench/app/assets/stylesheets/application.css.scss
apps/workbench/app/views/application/_show_autoselect_text.html.erb [new file with mode: 0644]
apps/workbench/app/views/collections/_show_source_summary.html.erb
apps/workbench/app/views/collections/show.html.erb

index d3746a830a6c32a4a0b94b6d9f85a5dbe94bca63..7747801969ca67d52464371faa2c056dddf313cd 100644 (file)
@@ -1,7 +1,7 @@
 source 'https://rubygems.org'
 
 gem 'rails', '~> 4.1.0'
-gem 'arvados', '>= 0.1.20150210011250'
+gem 'arvados', '>= 0.1.20150310184329'
 
 gem 'sqlite3'
 
index 9a886972a1a256b1b09df90e841810d42d00bdd1..266f9b7365c3d264726d27a6f03044175f426fbe 100644 (file)
@@ -40,7 +40,7 @@ GEM
     andand (1.3.3)
     angularjs-rails (1.3.8)
     arel (5.0.1.20140414130214)
-    arvados (0.1.20150210011250)
+    arvados (0.1.20150310184329)
       activesupport (>= 3.2.13)
       andand (~> 1.3, >= 1.3.3)
       google-api-client (~> 0.6.3, >= 0.6.3)
@@ -258,7 +258,7 @@ DEPENDENCIES
   RedCloth
   andand
   angularjs-rails
-  arvados (>= 0.1.20150210011250)
+  arvados (>= 0.1.20150310184329)
   bootstrap-sass (~> 3.1.0)
   bootstrap-tab-history-rails
   bootstrap-x-editable-rails
index 63887b3ab970f3d75f4035169790e05752ea15a8..172ff873e83dd72acd92fdc7977118126da09443 100644 (file)
@@ -129,6 +129,9 @@ jQuery(function($){
                     this.addClass('label-danger').fadeTo('fast', '1');
                 });
             return false;
+        }).
+        on('click focusin', 'input.select-on-focus', function(event) {
+            event.target.select();
         });
 
     $(document).
index 710bc9227cc790ae17c1c1d070486be8fe2e1118..ec7eee44b72d3954600a79365d9f4eaa2896e56a 100644 (file)
@@ -93,6 +93,16 @@ form.small-form-margin {
 .nowrap {
     white-space: nowrap;
 }
+input.select-on-focus {
+    font-family: monospace;
+    background: inherit;
+    border: thin #ccc solid;
+    border-radius: .2em;
+    padding: .15em .5em;
+}
+input.select-on-focus:focus {
+    border-color: #9bf;
+}
 
 /* top nav */
 $top-nav-bg: #3c163d;
diff --git a/apps/workbench/app/views/application/_show_autoselect_text.html.erb b/apps/workbench/app/views/application/_show_autoselect_text.html.erb
new file mode 100644 (file)
index 0000000..e82b8c1
--- /dev/null
@@ -0,0 +1,4 @@
+<%# Render local variable `text` so the entire text is automatically
+    selected when clicked or focused. %>
+<input class="select-on-focus <%= tagclass %>" type="text" readonly
+       size="<%= text.size %>" value="<%= text %>">
index 592e802fa12c989205a3fa00fd38bff4ef8571bf..3d8032b4c214d975395bb894cac3432543985d6f 100644 (file)
@@ -1,3 +1,7 @@
+<p><i>Content size:</i><br />
+  <%= pluralize(@object.manifest.files_count, "file") %> totalling
+  <%= raw(human_readable_bytes_html(@object.manifest.files_size)) %></p>
+
 <% if not (@output_of.andand.any? or @log_of.andand.any?) %>
   <p><i>No source information available.</i></p>
 <% end %>
index 75a70868caec34917db04f316885a4ff6f4694e2..c6bad7d3aa3d865d576c98f9bb4b360aaafe0882 100644 (file)
@@ -3,15 +3,13 @@
     <div class="panel panel-info">
       <div class="panel-heading">
         <h3 class="panel-title">
-          <% if @name_link.nil? and @object.uuid.match /[0-9a-f]{32}/ %>
-            Content hash <%= @object.portable_data_hash %>
-          <% else %>
-            <%= if @object.respond_to? :name
-                  render_editable_attribute @object, :name
-                else
-                  @name_link.andand.name || @object.uuid
-                end %>
-            <% end %>
+          <%= if @object.respond_to? :name
+                render_editable_attribute @object, :name
+              elsif @name_link
+                @name_link.name
+              else
+                @object.uuid
+              end %>
         </h3>
       </div>
       <div class="panel-body">
           <%= render_editable_attribute @object, 'description', nil, { 'data-emptytext' => "(No description provided)", 'data-toggle' => 'manual' } %>
         </div>
         <img src="/favicon.ico" class="pull-right" alt="" style="opacity: 0.3"/>
-        <p><i>Content hash:</i><br />
-          <span class="arvados-uuid"><%= link_to @object.portable_data_hash, collection_path(@object.portable_data_hash) %></span>
+        <p><i>Collection UUID:</i><br />
+          <%= render partial: "show_autoselect_text", locals: {text: @object.uuid, tagclass: "arvados-uuid"} %>
+        </p>
+        <p><i>Content address:</i><br />
+          <%= render partial: "show_autoselect_text", locals: {text: @object.portable_data_hash, tagclass: "arvados-uuid"} %>
         </p>
         <%= render partial: "show_source_summary" %>
       </div>