sufia 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -1
  3. data/History.md +10 -0
  4. data/README.md +1 -6
  5. data/app/assets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  6. data/app/assets/javascripts/sufia.js +3 -4
  7. data/app/assets/javascripts/sufia/batch_select_all.js +2 -2
  8. data/app/controllers/concerns/sufia/users_controller_behavior.rb +133 -0
  9. data/app/controllers/users_controller.rb +1 -115
  10. data/app/helpers/trophy_helper.rb +2 -3
  11. data/app/models/datastreams/properties_datastream.rb +5 -3
  12. data/app/views/batch/edit.html.erb +7 -3
  13. data/app/views/batch_edits/edit.html.erb +47 -77
  14. data/app/views/dashboard/_index_partials/_list_files.html.erb +25 -12
  15. data/app/views/dashboard/index.html.erb +29 -44
  16. data/app/views/generic_files/_descriptions.html.erb +17 -17
  17. data/app/views/generic_files/_permission.html.erb +7 -124
  18. data/app/views/generic_files/_permission_form.html.erb +123 -0
  19. data/app/views/generic_files/_versioning.html.erb +1 -1
  20. data/app/views/generic_files/edit.html.erb +9 -21
  21. data/app/views/users/_notify_number.html.erb +1 -1
  22. data/app/views/users/edit.html.erb +1 -1
  23. data/config/routes.rb +3 -1
  24. data/lib/sufia.rb +5 -1
  25. data/lib/sufia/files_controller_behavior.rb +8 -8
  26. data/lib/sufia/user.rb +4 -8
  27. data/lib/sufia/version.rb +1 -1
  28. data/spec/controllers/generic_files_controller_spec.rb +8 -0
  29. data/spec/controllers/users_controller_spec.rb +22 -0
  30. data/spec/models/properties_datastream_spec.rb +21 -0
  31. data/spec/routing/route_spec.rb +1 -0
  32. data/sufia.gemspec +0 -1
  33. data/vendor/assets/javascripts/ZeroClipboard.min.js +8 -0
  34. data/vendor/assets/javascripts/ZeroClipboard.swf +0 -0
  35. metadata +8 -19
  36. data/app/assets/javascripts/sufia/tabs.js +0 -58
  37. data/app/views/catalog/_uva_tabs.html.erb +0 -10
  38. data/vendor/assets/javascripts/jquery.zclip.min.js +0 -12
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
15
  %>
16
16
 
17
- <div id="versioning_display">
17
+ <div id="versioning_display" class="tab-pane">
18
18
  <h2 class="non lower">Versions</h2>
19
19
  <div class="well">
20
20
  <%= form_for @generic_file, :url => sufia.generic_file_path, :html => {:multipart => true, :class => 'form-horizontal'} do |f| %>
@@ -33,20 +33,11 @@ function confirmExit(){
33
33
  return "Your metadata has not been saved.";
34
34
  }
35
35
  }
36
-
37
- <% if params[:tab] == 'versions' %>
38
- versions_tab();
39
- <% elsif params[:tab] == 'permissions' %>
40
- permissions_tab();
41
- <% else %>
42
- descriptions_tab();
43
- <% end %>
44
-
45
36
  // only valid for perm tab
46
37
  set_access_levels();
47
38
 
48
39
  // initialize popover helpers
49
- $("a[rel=popover]").popover();
40
+ $("a[rel=popover]").popover({ html: true });
50
41
 
51
42
  <% end %>
52
43
 
@@ -62,17 +53,14 @@ $("a[rel=popover]").popover();
62
53
  <div class="span68">
63
54
  <%= link_to "&lt;&lt;Browse view".html_safe, sufia.generic_file_path %></li>
64
55
  <ul class="nav nav-tabs">
65
- <li id="edit_descriptions_link"><a href="#"><i class="icon-tags"></i> Descriptions</a></li>
66
- <li id="edit_versioning_link"><a href="#"><i class="icon-sitemap"></i> Versions</a></li>
67
- <li id="edit_permissions_link"><a href="#"><i class="icon-key"></i> Permissions</a></li>
56
+ <li id="edit_descriptions_link" class="active"><a href="#descriptions_display" data-toggle="tab"><i class="icon-tags"></i> Descriptions</a></li>
57
+ <li id="edit_versioning_link"><a href="#versioning_display" data-toggle="tab"><i class="icon-sitemap"></i> Versions</a></li>
58
+ <li id="edit_permissions_link"><a href="#permissions_display" data-toggle="tab"><i class="icon-key"></i> Permissions</a></li>
68
59
  </ul>
69
- <%= render :partial => "descriptions", :locals => { :generic_file => @generic_file } %>
70
-
71
- <%= form_for @generic_file, :url => sufia.generic_file_path, :html => {:multipart => true, :class => 'form-horizontal', :id => 'permission'} do |f| %>
72
- <%= hidden_field_tag('redirect_tab', 'permissions') %>
73
- <%= render :partial => "permission", :locals => { :gf => @generic_file, :f=> f } %>
74
- <% end %>
75
-
76
- <%= render :partial => "versioning", :locals => { :generic_file => @generic_file } %>
60
+ <div class="tab-content">
61
+ <%= render :partial => "descriptions", :locals => { :generic_file => @generic_file } %>
62
+ <%= render :partial => "permission", :locals => { :gf => @generic_file} %>
63
+ <%= render :partial => "versioning", :locals => { :generic_file => @generic_file } %>
64
+ </div>
77
65
  </div> <!-- /.span68-->
78
66
  </div><!-- /.row -->
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
15
  %>
16
16
 
17
- <i class="icon-bullhorn">&nbsp;</i>
17
+ <i class="icon-bullhorn"></i>
18
18
  <% if @notify_number > 0 %>
19
19
  <span id="notify_number" class="overlay"> <%=@notify_number%></span>
20
20
  <% end %>
@@ -16,7 +16,7 @@ limitations under the License.
16
16
 
17
17
  <% content_for :local_js do %>
18
18
  // initialize popover helpers
19
- $("a[rel=popover]").popover();
19
+ $("a[rel=popover]").popover({ html: true });
20
20
  <% end %>
21
21
 
22
22
  <h1>Edit Profile</h1>
@@ -90,7 +90,9 @@ Sufia::Engine.routes.draw do
90
90
  match 'single_use_link/expired' => 'errors#single_use_error'
91
91
 
92
92
  # Catch-all (for routing errors)
93
- match '*error' => 'errors#routing'
93
+ unless Rails.env.development? || Rails.env.test?
94
+ match '*error' => 'errors#routing'
95
+ end
94
96
 
95
97
  end
96
98
 
@@ -31,7 +31,11 @@ module Sufia
31
31
  config.fits_message_length = 5
32
32
  config.temp_file_base = nil
33
33
 
34
- config.autoload_paths << File.expand_path("../sufia/jobs", __FILE__)
34
+ config.autoload_paths += %W(
35
+ #{config.root}/lib/sufia/jobs
36
+ #{config.root}/app/controllers/concerns
37
+ #{config.root}/app/models/concerns
38
+ )
35
39
 
36
40
  initializer "Patch active_fedora" do
37
41
  require 'sufia/active_fedora/redis'
@@ -138,14 +138,14 @@ module Sufia
138
138
  update_metadata if params[:generic_file]
139
139
 
140
140
  #always save the file so the new version or metadata gets recorded
141
- @generic_file.save!
142
-
143
-
144
- # do not trigger an update event if a version event has already been triggered
145
- Sufia.queue.push(ContentUpdateEventJob.new(@generic_file.pid, current_user.user_key)) unless version_event
146
- @generic_file.record_version_committer(current_user)
147
- redirect_to sufia.edit_generic_file_path(:tab => params[:redirect_tab]), :notice => render_to_string(:partial=>'generic_files/asset_updated_flash', :locals => { :generic_file => @generic_file })
148
-
141
+ if @generic_file.save
142
+ # do not trigger an update event if a version event has already been triggered
143
+ Sufia.queue.push(ContentUpdateEventJob.new(@generic_file.pid, current_user.user_key)) unless version_event
144
+ @generic_file.record_version_committer(current_user)
145
+ redirect_to sufia.edit_generic_file_path(:tab => params[:redirect_tab]), :notice => render_to_string(:partial=>'generic_files/asset_updated_flash', :locals => { :generic_file => @generic_file })
146
+ else
147
+ render action: 'edit'
148
+ end
149
149
  end
150
150
 
151
151
  protected
@@ -43,14 +43,10 @@ module Sufia::User
43
43
 
44
44
  end
45
45
 
46
- # This method should display the unique identifier for this user as defined by devise.
47
- # The unique identifier is what access controls will be enforced against.
48
- def user_key
49
- send(Devise.authentication_keys.first)
50
- end
51
-
52
- def to_s
53
- user_key
46
+ # Format the json for select2 which requires just an id and a field called text.
47
+ # If we need an alternate format we should probably look at a json template gem
48
+ def as_json(opts = nil)
49
+ {id: user_key, text: display_name ? "#{display_name} (#{user_key})" : user_key}
54
50
  end
55
51
 
56
52
  def email_address
@@ -1,3 +1,3 @@
1
1
  module Sufia
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -344,6 +344,14 @@ describe GenericFilesController do
344
344
  post :update, :id=>@generic_file.pid, :filedata=>file, :Filename=>"The world", :generic_file=>{:tag=>[''], :permissions=>{:new_user_name=>{'archivist1'=>'edit'}}}
345
345
  end
346
346
 
347
+ it "should go back to edit on an error" do
348
+ GenericFile.any_instance.should_receive(:valid?).and_return(false)
349
+ post :update, :id=>@generic_file.pid, :generic_file=>{:tag=>['']}
350
+ response.should be_successful
351
+ response.should render_template('edit')
352
+ assigns[:generic_file].should == @generic_file
353
+ end
354
+
347
355
  end
348
356
 
349
357
  describe "someone elses files" do
@@ -41,6 +41,28 @@ describe UsersController do
41
41
  flash[:alert].should include ("User 'johndoe666' does not exist")
42
42
  end
43
43
  end
44
+ describe "#index" do
45
+ before do
46
+ @u1 = FactoryGirl.find_or_create(:archivist)
47
+ @u2 = FactoryGirl.find_or_create(:curator)
48
+ end
49
+ describe "requesting html" do
50
+ it "should test users" do
51
+ get :index
52
+ assigns[:users].should include(@u1, @u2)
53
+ response.should be_successful
54
+ end
55
+ end
56
+ describe "requesting json" do
57
+ it "should display users" do
58
+ get :index, format: :json
59
+ response.should be_successful
60
+ json = JSON.parse(response.body)
61
+ json.map{|u| u['id']}.should include(@u1.email, @u2.email)
62
+ json.map{|u| u['text']}.should include(@u1.email, @u2.email)
63
+ end
64
+ end
65
+ end
44
66
  describe "#edit" do
45
67
  it "show edit form when user edits own profile" do
46
68
  get :edit, uid: @user.user_key
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe PropertiesDatastream do
4
+ it "should have proxy_depositor" do
5
+ subject.proxy_depositor = 'kim@example.com'
6
+ subject.proxy_depositor.should == ['kim@example.com']
7
+ subject.ng_xml.to_xml.should be_equivalent_to "<?xml version=\"1.0\"?><fields><proxyDepositor>kim@example.com</proxyDepositor></fields>"
8
+ end
9
+
10
+ describe "to_solr" do
11
+ before do
12
+ @doc = PropertiesDatastream.new.tap do |ds|
13
+ ds.proxy_depositor = 'kim@example.com'
14
+ end
15
+ end
16
+ subject { @doc.to_solr}
17
+ it "should have proxy_depositor" do
18
+ subject['proxy_depositor_ssim'].should == ['kim@example.com']
19
+ end
20
+ end
21
+ end
@@ -215,6 +215,7 @@ describe 'Routes' do
215
215
 
216
216
  describe "Catch-all" do
217
217
  it "should route non-existent routes to errors" do
218
+ pending "The default route is turned off in testing, so that errors are raised"
218
219
  { get: '/awesome' }.should route_to(controller: 'errors', action: 'routing', error: 'awesome')
219
220
  end
220
221
  end
@@ -34,7 +34,6 @@ Gem::Specification.new do |gem|
34
34
  gem.add_dependency 'rails_autolink', '1.0.9'
35
35
  gem.add_dependency 'acts_as_follower', '0.1.1'
36
36
  gem.add_dependency 'nest', '1.1.1'
37
- gem.add_dependency 'sitemap', '0.3.2'
38
37
  gem.add_dependency 'yaml_db', '0.2.3'
39
38
  gem.add_dependency 'mailboxer', '0.8.0'
40
39
  gem.add_dependency 'rainbow', '1.1.4'
@@ -0,0 +1,8 @@
1
+ /*!
2
+ * zeroclipboard
3
+ * The Zero Clipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie, and a JavaScript interface.
4
+ * Copyright 2012 Jon Rohan, James M. Greene, .
5
+ * Released under the MIT license
6
+ * http://jonrohan.github.com/ZeroClipboard/
7
+ * v1.1.7
8
+ */(function(){"use strict";var a=function(a,b){var c=a.style[b];a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&&(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));if(c=="auto"&&b=="cursor"){var d=["a"];for(var e=0;e<d.length;e++)if(a.tagName.toLowerCase()==d[e])return"pointer"}return c},b=function(a){if(!l.prototype._singleton)return;a||(a=window.event);var b;this!==window?b=this:a.target?b=a.target:a.srcElement&&(b=a.srcElement),l.prototype._singleton.setCurrent(b)},c=function(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,c)},d=function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&a.detachEvent("on"+b,c)},e=function(a,b){if(a.addClass)return a.addClass(b),a;if(b&&typeof b=="string"){var c=(b||"").split(/\s+/);if(a.nodeType===1)if(!a.className)a.className=b;else{var d=" "+a.className+" ",e=a.className;for(var f=0,g=c.length;f<g;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}}return a},f=function(a,b){if(a.removeClass)return a.removeClass(b),a;if(b&&typeof b=="string"||b===undefined){var c=(b||"").split(/\s+/);if(a.nodeType===1&&a.className)if(b){var d=(" "+a.className+" ").replace(/[\n\t]/g," ");for(var e=0,f=c.length;e<f;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}else a.className=""}return a},g=function(b){var c={left:0,top:0,width:b.width||b.offsetWidth||0,height:b.height||b.offsetHeight||0,zIndex:9999},d=a(b,"zIndex");d&&d!="auto"&&(c.zIndex=parseInt(d,10));while(b){var e=parseInt(a(b,"borderLeftWidth"),10),f=parseInt(a(b,"borderTopWidth"),10);c.left+=isNaN(b.offsetLeft)?0:b.offsetLeft,c.left+=isNaN(e)?0:e,c.top+=isNaN(b.offsetTop)?0:b.offsetTop,c.top+=isNaN(f)?0:f,b=b.offsetParent}return c},h=function(a){return(a.indexOf("?")>=0?"&":"?")+"nocache="+(new Date).getTime()},i=function(a){var b=[];return a.trustedDomains&&(typeof a.trustedDomains=="string"?b.push("trustedDomain="+a.trustedDomains):b.push("trustedDomain="+a.trustedDomains.join(","))),b.join("&")},j=function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},k=function(a){if(typeof a=="string")throw new TypeError("ZeroClipboard doesn't accept query strings.");return a.length?a:[a]},l=function(a,b){a&&(l.prototype._singleton||this).glue(a);if(l.prototype._singleton)return l.prototype._singleton;l.prototype._singleton=this,this.options={};for(var c in o)this.options[c]=o[c];for(var d in b)this.options[d]=b[d];this.handlers={},l.detectFlashSupport()&&p()},m,n=[];l.prototype.setCurrent=function(b){m=b,this.reposition(),b.getAttribute("title")&&this.setTitle(b.getAttribute("title")),this.setHandCursor(a(b,"cursor")=="pointer")},l.prototype.setText=function(a){a&&a!==""&&(this.options.text=a,this.ready()&&this.flashBridge.setText(a))},l.prototype.setTitle=function(a){a&&a!==""&&this.htmlBridge.setAttribute("title",a)},l.prototype.setSize=function(a,b){this.ready()&&this.flashBridge.setSize(a,b)},l.prototype.setHandCursor=function(a){this.ready()&&this.flashBridge.setHandCursor(a)},l.version="1.1.7";var o={moviePath:"ZeroClipboard.swf",trustedDomains:null,text:null,hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",allowScriptAccess:"sameDomain"};l.setDefaults=function(a){for(var b in a)o[b]=a[b]},l.destroy=function(){l.prototype._singleton.unglue(n);var a=l.prototype._singleton.htmlBridge;a.parentNode.removeChild(a),delete l.prototype._singleton},l.detectFlashSupport=function(){var a=!1;try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash")&&(a=!0)}catch(b){navigator.mimeTypes["application/x-shockwave-flash"]&&(a=!0)}return a};var p=function(){var a=l.prototype._singleton,b=document.getElementById("global-zeroclipboard-html-bridge");if(!b){var c=' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%"> <param name="movie" value="'+a.options.moviePath+h(a.options.moviePath)+'"/> <param name="allowScriptAccess" value="'+a.options.allowScriptAccess+'"/> <param name="scale" value="exactfit"/> <param name="loop" value="false"/> <param name="menu" value="false"/> <param name="quality" value="best" /> <param name="bgcolor" value="#ffffff"/> <param name="wmode" value="transparent"/> <param name="flashvars" value="'+i(a.options)+'"/> <embed src="'+a.options.moviePath+h(a.options.moviePath)+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="100%" height="100%" name="global-zeroclipboard-flash-bridge" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+i(a.options)+'" scale="exactfit"> </embed> </object>';b=document.createElement("div"),b.id="global-zeroclipboard-html-bridge",b.setAttribute("class","global-zeroclipboard-container"),b.setAttribute("data-clipboard-ready",!1),b.style.position="absolute",b.style.left="-9999px",b.style.top="-9999px",b.style.width="15px",b.style.height="15px",b.style.zIndex="9999",b.innerHTML=c,document.body.appendChild(b)}a.htmlBridge=b,a.flashBridge=document["global-zeroclipboard-flash-bridge"]||b.children[0].lastElementChild};l.prototype.resetBridge=function(){this.htmlBridge.style.left="-9999px",this.htmlBridge.style.top="-9999px",this.htmlBridge.removeAttribute("title"),this.htmlBridge.removeAttribute("data-clipboard-text"),f(m,this.options.activeClass),m=null,this.options.text=null},l.prototype.ready=function(){var a=this.htmlBridge.getAttribute("data-clipboard-ready");return a==="true"||a===!0},l.prototype.reposition=function(){if(!m)return!1;var a=g(m);this.htmlBridge.style.top=a.top+"px",this.htmlBridge.style.left=a.left+"px",this.htmlBridge.style.width=a.width+"px",this.htmlBridge.style.height=a.height+"px",this.htmlBridge.style.zIndex=a.zIndex+1,this.setSize(a.width,a.height)},l.dispatch=function(a,b){l.prototype._singleton.receiveEvent(a,b)},l.prototype.on=function(a,b){var c=a.toString().split(/\s/g);for(var d=0;d<c.length;d++)a=c[d].toLowerCase().replace(/^on/,""),this.handlers[a]||(this.handlers[a]=b);this.handlers.noflash&&!l.detectFlashSupport()&&this.receiveEvent("onNoFlash",null)},l.prototype.addEventListener=l.prototype.on,l.prototype.off=function(a,b){var c=a.toString().split(/\s/g);for(var d=0;d<c.length;d++){a=c[d].toLowerCase().replace(/^on/,"");for(var e in this.handlers)e===a&&this.handlers[e]===b&&delete this.handlers[e]}},l.prototype.removeEventListener=l.prototype.off,l.prototype.receiveEvent=function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");var c=m;switch(a){case"load":if(b&&parseFloat(b.flashVersion.replace(",",".").replace(/[^0-9\.]/gi,""))<10){this.receiveEvent("onWrongFlash",{flashVersion:b.flashVersion});return}this.htmlBridge.setAttribute("data-clipboard-ready",!0);break;case"mouseover":e(c,this.options.hoverClass);break;case"mouseout":f(c,this.options.hoverClass),this.resetBridge();break;case"mousedown":e(c,this.options.activeClass);break;case"mouseup":f(c,this.options.activeClass);break;case"datarequested":var d=c.getAttribute("data-clipboard-target"),g=d?document.getElementById(d):null;if(g){var h=g.value||g.textContent||g.innerText;h&&this.setText(h)}else{var i=c.getAttribute("data-clipboard-text");i&&this.setText(i)}break;case"complete":this.options.text=null}if(this.handlers[a]){var j=this.handlers[a];typeof j=="function"?j.call(c,this,b):typeof j=="string"&&window[j].call(c,this,b)}},l.prototype.glue=function(a){a=k(a);for(var d=0;d<a.length;d++)j(a[d],n)==-1&&(n.push(a[d]),c(a[d],"mouseover",b))},l.prototype.unglue=function(a){a=k(a);for(var c=0;c<a.length;c++){d(a[c],"mouseover",b);var e=j(a[c],n);e!=-1&&n.splice(e,1)}},typeof module!="undefined"?module.exports=l:typeof define=="function"&&define.amd?define(function(){return l}):window.ZeroClipboard=l})();
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sufia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Coyne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-17 00:00:00.000000000 Z
11
+ date: 2013-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -248,20 +248,6 @@ dependencies:
248
248
  - - '='
249
249
  - !ruby/object:Gem::Version
250
250
  version: 1.1.1
251
- - !ruby/object:Gem::Dependency
252
- name: sitemap
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - '='
256
- - !ruby/object:Gem::Version
257
- version: 0.3.2
258
- type: :runtime
259
- prerelease: false
260
- version_requirements: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - '='
263
- - !ruby/object:Gem::Version
264
- version: 0.3.2
265
251
  - !ruby/object:Gem::Dependency
266
252
  name: yaml_db
267
253
  requirement: !ruby/object:Gem::Requirement
@@ -397,6 +383,7 @@ files:
397
383
  - app/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png
398
384
  - app/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png
399
385
  - app/assets/images/ui-bg_flat_10_000000_40x100.png
386
+ - app/assets/images/ui-bg_flat_75_ffffff_40x100.png
400
387
  - app/assets/images/ui-bg_glass_100_f6f6f6_1x400.png
401
388
  - app/assets/images/ui-bg_glass_100_fdf5ce_1x400.png
402
389
  - app/assets/images/ui-bg_glass_65_ffffff_1x400.png
@@ -415,7 +402,6 @@ files:
415
402
  - app/assets/javascripts/sufia/edit_metadata.js
416
403
  - app/assets/javascripts/sufia/multiForm.js
417
404
  - app/assets/javascripts/sufia/permissions.js
418
- - app/assets/javascripts/sufia/tabs.js
419
405
  - app/assets/javascripts/sufia/trophy.js
420
406
  - app/assets/javascripts/terms_of_service.js
421
407
  - app/assets/stylesheets/audio-js.css
@@ -440,6 +426,7 @@ files:
440
426
  - app/controllers/authorities_controller.rb
441
427
  - app/controllers/batch_controller.rb
442
428
  - app/controllers/batch_edits_controller.rb
429
+ - app/controllers/concerns/sufia/users_controller_behavior.rb
443
430
  - app/controllers/contact_form_controller.rb
444
431
  - app/controllers/dashboard_controller.rb
445
432
  - app/controllers/directory_controller.rb
@@ -535,7 +522,6 @@ files:
535
522
  - app/views/catalog/_show_tools.html.erb
536
523
  - app/views/catalog/_sms_form.html.erb
537
524
  - app/views/catalog/_sort_and_per_page.html.erb
538
- - app/views/catalog/_uva_tabs.html.erb
539
525
  - app/views/catalog/about.html.erb
540
526
  - app/views/catalog/citation.html.erb
541
527
  - app/views/catalog/email.erb
@@ -590,6 +576,7 @@ files:
590
576
  - app/views/generic_files/_media_display.html.erb
591
577
  - app/views/generic_files/_multiple_upload.html.erb
592
578
  - app/views/generic_files/_permission.html.erb
579
+ - app/views/generic_files/_permission_form.html.erb
593
580
  - app/views/generic_files/_rights_modal.html.erb
594
581
  - app/views/generic_files/_show_actions.html.erb
595
582
  - app/views/generic_files/_show_descriptions.html.erb
@@ -823,6 +810,7 @@ files:
823
810
  - spec/models/fits_datastream_spec.rb
824
811
  - spec/models/generic_file_spec.rb
825
812
  - spec/models/local_authority_spec.rb
813
+ - spec/models/properties_datastream_spec.rb
826
814
  - spec/models/single_use_link_spec.rb
827
815
  - spec/models/solr_document_spec.rb
828
816
  - spec/models/transcode_audio_job_spec.rb
@@ -855,6 +843,7 @@ files:
855
843
  - vendor/assets/fonts/fontawesome-webfont.woff
856
844
  - vendor/assets/images/player-graphics.gif
857
845
  - vendor/assets/images/video-js.png
846
+ - vendor/assets/javascripts/ZeroClipboard.min.js
858
847
  - vendor/assets/javascripts/ZeroClipboard.swf
859
848
  - vendor/assets/javascripts/audio.min.js
860
849
  - vendor/assets/javascripts/audiojs.swf
@@ -875,7 +864,6 @@ files:
875
864
  - vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.position.js
876
865
  - vendor/assets/javascripts/jquery-ui-1.9.2/jquery.ui.widget.js
877
866
  - vendor/assets/javascripts/jquery.validate.js
878
- - vendor/assets/javascripts/jquery.zclip.min.js
879
867
  - vendor/assets/javascripts/swfobject.js
880
868
  - vendor/assets/javascripts/video.js
881
869
  - vendor/plugins/.gitkeep
@@ -996,6 +984,7 @@ test_files:
996
984
  - spec/models/fits_datastream_spec.rb
997
985
  - spec/models/generic_file_spec.rb
998
986
  - spec/models/local_authority_spec.rb
987
+ - spec/models/properties_datastream_spec.rb
999
988
  - spec/models/single_use_link_spec.rb
1000
989
  - spec/models/solr_document_spec.rb
1001
990
  - spec/models/transcode_audio_job_spec.rb
@@ -1,58 +0,0 @@
1
- $(function() {
2
- // called from edit object view
3
- $('#edit_descriptions_link').on('click', function(e) {
4
- e.preventDefault();
5
- descriptions_tab();
6
- });
7
-
8
- // called from edit object view
9
- $('#edit_versioning_link').on('click', function(e) {
10
- e.preventDefault();
11
- versions_tab();
12
- });
13
-
14
- // called from edit object view
15
- $('#edit_permissions_link').on('click', function(e) {
16
- e.preventDefault();
17
- permissions_tab();
18
- });
19
- });
20
-
21
- // all called from edit object view
22
- // when permissions link is clicked on edit object
23
- function permissions_tab ()
24
- {
25
- $('#edit_permissions_link').attr('class', 'active');
26
- $('#edit_versioning_link').attr('class', '');
27
- $('#edit_descriptions_link').attr('class', '');
28
-
29
- $('#descriptions_display').hide();
30
- $('#versioning_display').hide();
31
- $('#permissions_display').show();
32
- $('#permissions_submit').show();
33
- }
34
- // when versions link is clicked on edit object
35
- function versions_tab()
36
- {
37
- $('#edit_descriptions_link').attr('class', '');
38
- $('#edit_versioning_link').attr('class', 'active');
39
- $('#edit_permissions_link').attr('class', '');
40
-
41
- $('#descriptions_display').hide();
42
- $('#versioning_display').show();
43
- $('#permissions_display').hide();
44
- $('#permissions_submit').hide();
45
- }
46
- // when descriptions link is clicked on edit object
47
- function descriptions_tab ()
48
- {
49
- $('#edit_descriptions_link').attr('class', 'active');
50
- $('#edit_versioning_link').attr('class', '');
51
- $('#edit_permissions_link').attr('class', '');
52
-
53
- $('#descriptions_display').show();
54
- $('#versioning_display').hide();
55
- $('#permissions_display').hide();
56
- $('#permissions_submit').hide();
57
- }
58
-
@@ -1,10 +0,0 @@
1
- <ul>
2
- <li>
3
- <% display_class = (!params[:home_context] || params[:home_context]=='authors') ? 'class="selected"' : '' %>
4
- <a <%= display_class %> href="/catalog?home_context=authors">Authors</a>
5
- </li>
6
- <li>
7
- <% display_class = params[:home_context]=='journals' ? 'class="selected"' : '' %>
8
- <a <%= display_class %> href="/catalog?home_context=journals">Journals</a>
9
- </li>
10
- </ul>
@@ -1,12 +0,0 @@
1
- /*
2
- * zClip :: jQuery ZeroClipboard v1.1.1
3
- * http://steamdev.com/zclip
4
- *
5
- * Copyright 2011, SteamDev
6
- * Released under the MIT license.
7
- * http://www.opensource.org/licenses/mit-license.php
8
- *
9
- * Date: Wed Jun 01, 2011
10
- */
11
-
12
- (function(a){a.fn.zclip=function(c){if(typeof c=="object"&&!c.length){var b=a.extend({path:"ZeroClipboard.swf",copy:null,beforeCopy:null,afterCopy:null,clickAfter:true,setHandCursor:true,setCSSEffects:true},c);return this.each(function(){var e=a(this);if(e.is(":visible")&&(typeof b.copy=="string"||a.isFunction(b.copy))){ZeroClipboard.setMoviePath(b.path);var d=new ZeroClipboard.Client();if(a.isFunction(b.copy)){e.bind("zClip_copy",b.copy)}if(a.isFunction(b.beforeCopy)){e.bind("zClip_beforeCopy",b.beforeCopy)}if(a.isFunction(b.afterCopy)){e.bind("zClip_afterCopy",b.afterCopy)}d.setHandCursor(b.setHandCursor);d.setCSSEffects(b.setCSSEffects);d.addEventListener("mouseOver",function(f){e.trigger("mouseenter")});d.addEventListener("mouseOut",function(f){e.trigger("mouseleave")});d.addEventListener("mouseDown",function(f){e.trigger("mousedown");if(!a.isFunction(b.copy)){d.setText(b.copy)}else{d.setText(e.triggerHandler("zClip_copy"))}if(a.isFunction(b.beforeCopy)){e.trigger("zClip_beforeCopy")}});d.addEventListener("complete",function(f,g){if(a.isFunction(b.afterCopy)){e.trigger("zClip_afterCopy")}else{if(g.length>500){g=g.substr(0,500)+"...\n\n("+(g.length-500)+" characters not shown)"}e.removeClass("hover");alert("Copied text to clipboard:\n\n "+g)}if(b.clickAfter){e.trigger("click")}});d.glue(e[0],e.parent()[0]);a(window).bind("load resize",function(){d.reposition()})}})}else{if(typeof c=="string"){return this.each(function(){var f=a(this);c=c.toLowerCase();var e=f.data("zclipId");var d=a("#"+e+".zclip");if(c=="remove"){d.remove();f.removeClass("active hover")}else{if(c=="hide"){d.hide();f.removeClass("active hover")}else{if(c=="show"){d.show()}}}})}}}})(jQuery);var ZeroClipboard={version:"1.0.7",clients:{},moviePath:"ZeroClipboard.swf",nextId:1,$:function(a){if(typeof(a)=="string"){a=document.getElementById(a)}if(!a.addClass){a.hide=function(){this.style.display="none"};a.show=function(){this.style.display=""};a.addClass=function(b){this.removeClass(b);this.className+=" "+b};a.removeClass=function(d){var e=this.className.split(/\s+/);var b=-1;for(var c=0;c<e.length;c++){if(e[c]==d){b=c;c=e.length}}if(b>-1){e.splice(b,1);this.className=e.join(" ")}return this};a.hasClass=function(b){return !!this.className.match(new RegExp("\\s*"+b+"\\s*"))}}return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(d,b,c){var a=this.clients[d];if(a){a.receiveEvent(b,c)}},register:function(b,a){this.clients[b]=a},getDOMObjectPosition:function(c,a){var b={left:0,top:0,width:c.width?c.width:c.offsetWidth,height:c.height?c.height:c.offsetHeight};if(c&&(c!=a)){b.left+=c.offsetLeft;b.top+=c.offsetTop}return b},Client:function(a){this.handlers={};this.id=ZeroClipboard.nextId++;this.movieId="ZeroClipboardMovie_"+this.id;ZeroClipboard.register(this.id,this);if(a){this.glue(a)}}};ZeroClipboard.Client.prototype={id:0,ready:false,movie:null,clipText:"",handCursorEnabled:true,cssEffects:true,handlers:null,glue:function(d,b,e){this.domElement=ZeroClipboard.$(d);var f=99;if(this.domElement.style.zIndex){f=parseInt(this.domElement.style.zIndex,10)+1}if(typeof(b)=="string"){b=ZeroClipboard.$(b)}else{if(typeof(b)=="undefined"){b=document.getElementsByTagName("body")[0]}}var c=ZeroClipboard.getDOMObjectPosition(this.domElement,b);this.div=document.createElement("div");this.div.className="zclip";this.div.id="zclip-"+this.movieId;$(this.domElement).data("zclipId","zclip-"+this.movieId);var a=this.div.style;a.position="absolute";a.left=""+c.left+"px";a.top=""+c.top+"px";a.width=""+c.width+"px";a.height=""+c.height+"px";a.zIndex=f;if(typeof(e)=="object"){for(addedStyle in e){a[addedStyle]=e[addedStyle]}}b.appendChild(this.div);this.div.innerHTML=this.getHTML(c.width,c.height)},getHTML:function(d,a){var c="";var b="id="+this.id+"&width="+d+"&height="+a;if(navigator.userAgent.match(/MSIE/)){var e=location.href.match(/^https/i)?"https://":"http://";c+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+e+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+d+'" height="'+a+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+b+'"/><param name="wmode" value="transparent"/></object>'}else{c+='<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+d+'" height="'+a+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+b+'" wmode="transparent" />'}return c},hide:function(){if(this.div){this.div.style.left="-2000px"}},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.domElement=null;this.div=null}},reposition:function(c){if(c){this.domElement=ZeroClipboard.$(c);if(!this.domElement){this.hide()}}if(this.domElement&&this.div){var b=ZeroClipboard.getDOMObjectPosition(this.domElement);var a=this.div.style;a.left=""+b.left+"px";a.top=""+b.top+"px"}},setText:function(a){this.clipText=a;if(this.ready){this.movie.setText(a)}},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");if(!this.handlers[a]){this.handlers[a]=[]}this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;if(this.ready){this.movie.setHandCursor(a)}},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(d,f){d=d.toString().toLowerCase().replace(/^on/,"");switch(d){case"load":this.movie=document.getElementById(this.movieId);if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){var c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=true;return}this.ready=true;try{this.movie.setText(this.clipText)}catch(h){}try{this.movie.setHandCursor(this.handCursorEnabled)}catch(h){}break;case"mouseover":if(this.domElement&&this.cssEffects){this.domElement.addClass("hover");if(this.recoverActive){this.domElement.addClass("active")}}break;case"mouseout":if(this.domElement&&this.cssEffects){this.recoverActive=false;if(this.domElement.hasClass("active")){this.domElement.removeClass("active");this.recoverActive=true}this.domElement.removeClass("hover")}break;case"mousedown":if(this.domElement&&this.cssEffects){this.domElement.addClass("active")}break;case"mouseup":if(this.domElement&&this.cssEffects){this.domElement.removeClass("active");this.recoverActive=false}break}if(this.handlers[d]){for(var b=0,a=this.handlers[d].length;b<a;b++){var g=this.handlers[d][b];if(typeof(g)=="function"){g(this,f)}else{if((typeof(g)=="object")&&(g.length==2)){g[0][g[1]](this,f)}else{if(typeof(g)=="string"){window[g](this,f)}}}}}}};