infopark_cloud_connector 7.0.1 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MjhiM2EwZDc1YzNjZGNlZWRjZjkyYTU0NTYxZmNhNWRlMTFiMTNiMw==
4
+ YjJjMWIxMWM5ZDliZGZlZTNlNjg0OWNjOTVlNjkwMjg3NzZjNDgxZQ==
5
5
  data.tar.gz: !binary |-
6
- NTRkODg1Y2FiNzM4NDNlZDRmZjEwY2U4MmUyNTgwODE3OTc1Zjk3ZA==
6
+ OGE3MDQ0YjUwNDJjMjEwNjYyNzIzY2VkNDBlYzAzMjcyOGZhZTk5NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDc5NTE4YzliODVkYTA4ZjQ0Y2QyZDVhNjE5YzFlMTYxZWVkN2Y0OGFlMGJl
10
- ZjFiMzExMzZmNzE0NGQ0ZWY4NGI5OTliNzFlMzQwOTg5ZTQ2YTYxZDk3MDM3
11
- OThhN2RmZWFhNjlmYmVhNWU1OWU0YmYwMTVkNmJmMzQzMWEwYjQ=
9
+ MTI5NGNiMTJjMDZjMWQ5NzVlMzU4MWQzOTEwZjY1ZGFjMDE3YjgyMDIwZmQy
10
+ MGY2YTNlZTI1MjFjYmNlZGYwMjc2N2NkODNkYzUwYWRiZWM5OWZiNDNhMzIy
11
+ NjUxZjdmMjM3NDM2ZDBkMjYyYmEzNDk1MTZlODUwMjU1NjRkYTE=
12
12
  data.tar.gz: !binary |-
13
- ZDVjZDQ2ZDNlNDkyZDgwMzM4MThhZTM1YTJhMGNmZDIyMWNjNTE2NWY0NmY2
14
- M2QzOGZiM2M5N2E3NzNkYmIyZjRjOWU0ZTU0NDM2ZWQ1ZTQ5Yjk4MzIyMzcw
15
- N2FmNGRkYzYwMjMyMmRkODVjMTYxMDEzNWQ0MTU5NmVmYTU0Mjc=
13
+ ZmNmNDM5ZTAzYTY5OWMyZTJlMmE0MTNkNGMxODJlMTlkOWExOTJhMTIwYjQ3
14
+ ZThhYmUxMWI4ZGZlMzk0YzI1NGI0MjNjOWMxNzg4ODJhOWU3ZDBlYjRiYjc1
15
+ ZDExNzFiMTc4YTA5OTZlZjY0NGI4M2M5ODAxMmQxN2Q2NDRjMmE=
@@ -8,20 +8,12 @@ module RailsConnector
8
8
  class DefaultCmsController < ApplicationController
9
9
  include CmsAccessible
10
10
  before_filter :load_object
11
- before_filter :ensure_object_is_permitted
12
- before_filter :set_google_expire_header
13
11
 
14
- # Default Action. Delivers files directly if their mime type is not text/html
12
+ # Default Action. Delivers files directly if {BasicObj#binary?}.
13
+ # Otherwise the view is rendered.
15
14
  # @api public
16
15
  def index
17
- deliver_file if @obj.mime_type != "text/html"
18
- end
19
-
20
- # Toggles edit markers. The current status is stored in the session.
21
- # @api public
22
- def toggle_editmarkers
23
- session[:hide_editmarkers] = !session[:hide_editmarkers]
24
- redirect_to cms_id_url(@obj)
16
+ deliver_file if @obj.binary?
25
17
  end
26
18
 
27
19
  # This method indicates if this controller should be used automatically when an Obj is
@@ -124,9 +124,11 @@ module RailsConnector
124
124
  widget_pool_params.each_pair do |widget_id, widget_params|
125
125
  widget = obj.widget_from_pool(widget_id)
126
126
 
127
- widget_params.each_pair do |param_name, param_value|
128
- if widget.type_of_attribute(param_name) == 'html'
129
- widget_params[param_name] = convert_html_links(param_value)
127
+ if widget_params.present?
128
+ widget_params.each_pair do |param_name, param_value|
129
+ if widget.type_of_attribute(param_name) == 'html'
130
+ widget_params[param_name] = convert_html_links(param_value)
131
+ end
130
132
  end
131
133
  end
132
134
  end
@@ -136,10 +138,10 @@ module RailsConnector
136
138
  ContentConversion.convert_html_links(html, request.host, request.port)
137
139
  end
138
140
 
139
- def copy_obj(copied_attributes, target_path=nil)
140
- copied_attributes.delete('id')
141
- copied_attributes.delete('_last_changed')
142
-
141
+ def copy_obj(attributes, target_path=nil)
142
+ copied_attributes = attributes.reject do |key, _|
143
+ %w{id _last_changed _permalink}.include?(key)
144
+ end
143
145
  copied_attributes['_path'] = "#{target_path}/#{SecureRandom.hex(6)}"
144
146
 
145
147
  task_unaware_request(:post, "workspaces/#{Workspace.current.id}/objs", obj: copied_attributes)
@@ -11,11 +11,10 @@ module RailsConnector
11
11
  # @api public
12
12
  module DefaultCmsHelper
13
13
  include DisplayHelper
14
- include MarkerHelper
15
14
  include CmsAssetHelper
16
15
  include RailsConnector::CmsAssetHelper
17
- include RailsConnector::TableOfContentsHelper
18
16
  include RailsConnector::EditingHelper
17
+ include RailsConnector::TableOfContentsHelper
19
18
  include RailsConnector::LayoutHelper
20
19
  include RailsConnector::CmsTagHelper
21
20
  end
@@ -24,6 +24,7 @@ module RailsConnector
24
24
 
25
25
  LINK_TO_UNREACHABLE = "#__target_object_not_reachable"
26
26
  LINK_TO_EMPTY_LINKLIST = "#__empty_linklist"
27
+ LINK_TO_EMPTY_BLOB = "#__empty_blob"
27
28
 
28
29
  def cms_path_or_url(target, path_or_url, options = {})
29
30
  if target.is_a?(Link)
@@ -52,20 +53,26 @@ module RailsConnector
52
53
 
53
54
  def cms_path_or_url_for_objs(obj, path_or_url, options = {})
54
55
  permalink = obj.permalink
55
- ignore_body_data_url = options.delete(:ignore_body_data_url)
56
- if permalink && !Configuration.editor_interface_enabled?
56
+ dont_resolve_blobs = options.delete(:dont_resolve_blobs)
57
+ if permalink
57
58
  __send__("cms_permalink_#{path_or_url}", options.merge(:permalink => permalink))
58
- elsif obj.homepage? && !Configuration.editor_interface_enabled?
59
+ elsif obj.homepage?
59
60
  __send__("root_#{path_or_url}", options)
60
61
  else
61
- if obj.body_data_url && !ignore_body_data_url
62
- enforce_protocol_from_request(obj.body_data_url)
63
- elsif obj.binary? && !obj.file_extension.blank?
64
- __send__("cms_id_#{path_or_url}",
65
- options.merge(:id => obj.id, :slug => obj.slug.presence, :format => obj.file_extension))
62
+ if obj.binary? && !dont_resolve_blobs
63
+ if obj.body_data_url
64
+ enforce_protocol_from_request(obj.body_data_url)
65
+ else
66
+ LINK_TO_EMPTY_BLOB
67
+ end
66
68
  else
67
- routing_options = options.merge(:id => obj.id, :slug => obj.slug.presence)
68
- __send__("cms_id_#{path_or_url}", routing_options)
69
+ __send__(
70
+ "cms_id_#{path_or_url}",
71
+ options.merge(
72
+ id: obj.id,
73
+ slug: obj.slug.presence
74
+ )
75
+ )
69
76
  end
70
77
  end
71
78
  end
@@ -77,7 +84,7 @@ module RailsConnector
77
84
  __send__("cms_#{path_or_url}", link.obj, options)
78
85
  else
79
86
  url = link.external_url
80
- options.delete(:ignore_body_data_url)
87
+ options.delete(:dont_resolve_blobs)
81
88
  url = merge_options(url, options) if options.any?
82
89
  url
83
90
  end
@@ -26,30 +26,18 @@ module RailsConnector
26
26
 
27
27
  def display_original_value(value)
28
28
  case value
29
- when HtmlString then convert_links(value, :ignore_body_data_url => true).html_safe
29
+ when HtmlString then convert_links(value, :dont_resolve_blobs => true).html_safe
30
30
  else display_value(value)
31
31
  end
32
32
  end
33
33
 
34
- # Renders a field from the CMS, including an edit marker for the preview
35
- # If the option :marker is +false+, no edit marker will be rendered.
34
+ # Renders a field from the CMS.
36
35
  #
37
36
  # <%= display_field @obj, :title %>
38
37
  #
39
- # When creating an edit marker, all options except :marker are passed to {MarkerHelper#edit_marker}.
40
- #
41
38
  # @api public
42
39
  def display_field(obj, attr, options = {})
43
- options.reverse_merge!({
44
- :marker => ![:id, :path, :created, :last_changed, :version].include?(attr.to_sym)
45
- })
46
- if options.delete :marker
47
- edit_marker(obj, attr, options) do |obj, attr|
48
- display_value obj[attr]
49
- end
50
- else
51
- display_value obj[attr]
52
- end
40
+ display_value obj[attr]
53
41
  end
54
42
 
55
43
  # Legacy method - deprecated
@@ -11,7 +11,6 @@ module RailsConnector
11
11
  html = "".html_safe
12
12
  html += tag('meta', :name => 'generator',
13
13
  :content => "Rails Connector for Infopark CMS Fiona by Infopark AG (www.infopark.de)")
14
- html += include_edit_marker_support
15
14
  html += include_editing_stylesheet
16
15
  html
17
16
  end
@@ -20,7 +19,6 @@ module RailsConnector
20
19
  # @api public
21
20
  def rails_connector_after_content_tags
22
21
  html = "".html_safe
23
- html += render_marker_code
24
22
  html += include_editing_javascript
25
23
  html
26
24
  end
@@ -1,22 +1,7 @@
1
1
  module RailsConnector
2
-
3
- #
4
- # This module contains a helper that can be used to build a table of contents of an object.
5
- #
6
- # @api public
7
2
  module TableOfContentsHelper
8
-
9
- #
10
- # The <tt>table_of_contents</tt> helper method gets an object as argument and returns an array,
11
- # which can be used as the table of contents of the given object.
12
- #
13
- # The returned array consists of the child objects of the given object.
14
- # The array is sorted according to the configured sort order and the sort keys.
15
- # It also contains only objects which the current user is permitted to view.
16
- #
17
- # @api public
18
3
  def table_of_contents(obj)
19
- obj.sorted_toclist.reject { |o| not o.permitted_for_user?(current_user) }
4
+ obj.sorted_toclist
20
5
  end
21
6
  end
22
7
  end
data/config/ca-bundle.crt CHANGED
@@ -1,7 +1,7 @@
1
1
  ##
2
2
  ## /Network/Servers/xs2.infopark/Users/develop/dcc/tmp/Rails_Connector__Kris__dev__93/repos/cloud_connector/config/ca-bundle.crt -- Bundle of CA Root Certificates
3
3
  ##
4
- ## Converted at: Tue Nov 12 13:43:40 2013 UTC
4
+ ## Converted at: Thu Nov 21 10:33:57 2013 UTC
5
5
  ##
6
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
data/config/cms_routes.rb CHANGED
@@ -4,9 +4,6 @@ Rails.application.routes.draw do
4
4
  :to => 'rails_connector/cms_dispatch#index',
5
5
  :constraints => { :id => /\d+|[0-9a-f]{16}/ },
6
6
  :as => "cms_id"
7
- match 'toggle_markers/:id',
8
- :to => 'rails_connector/cms_dispatch#toggle_editmarkers',
9
- :as => "toggle_markers"
10
7
  match '/*permalink',
11
8
  :to => 'rails_connector/cms_dispatch#index',
12
9
  :as => 'cms_permalink',
@@ -2318,32 +2318,45 @@ THE SOFTWARE.
2318
2318
 
2319
2319
  */
2320
2320
 
2321
- // lib/handlebars/base.js
2322
-
2323
- /*jshint eqnull:true*/
2324
-
2325
- this.Handlebars = {};
2321
+ // lib/handlebars/browser-prefix.js
2322
+ var Handlebars = {};
2326
2323
 
2327
- (function(Handlebars) {
2324
+ (function(Handlebars, undefined) {
2325
+ ;
2326
+ // lib/handlebars/base.js
2328
2327
 
2329
- Handlebars.VERSION = "1.0.0-rc.3";
2330
- Handlebars.COMPILER_REVISION = 2;
2328
+ Handlebars.VERSION = "1.0.0-rc.4";
2329
+ Handlebars.COMPILER_REVISION = 3;
2331
2330
 
2332
2331
  Handlebars.REVISION_CHANGES = {
2333
2332
  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
2334
- 2: '>= 1.0.0-rc.3'
2333
+ 2: '== 1.0.0-rc.3',
2334
+ 3: '>= 1.0.0-rc.4'
2335
2335
  };
2336
2336
 
2337
2337
  Handlebars.helpers = {};
2338
2338
  Handlebars.partials = {};
2339
2339
 
2340
+ var toString = Object.prototype.toString,
2341
+ functionType = '[object Function]',
2342
+ objectType = '[object Object]';
2343
+
2340
2344
  Handlebars.registerHelper = function(name, fn, inverse) {
2341
- if(inverse) { fn.not = inverse; }
2342
- this.helpers[name] = fn;
2345
+ if (toString.call(name) === objectType) {
2346
+ if (inverse || fn) { throw new Handlebars.Exception('Arg not supported with multiple helpers'); }
2347
+ Handlebars.Utils.extend(this.helpers, name);
2348
+ } else {
2349
+ if (inverse) { fn.not = inverse; }
2350
+ this.helpers[name] = fn;
2351
+ }
2343
2352
  };
2344
2353
 
2345
2354
  Handlebars.registerPartial = function(name, str) {
2346
- this.partials[name] = str;
2355
+ if (toString.call(name) === objectType) {
2356
+ Handlebars.Utils.extend(this.partials, name);
2357
+ } else {
2358
+ this.partials[name] = str;
2359
+ }
2347
2360
  };
2348
2361
 
2349
2362
  Handlebars.registerHelper('helperMissing', function(arg) {
@@ -2354,13 +2367,9 @@ Handlebars.registerHelper('helperMissing', function(arg) {
2354
2367
  }
2355
2368
  });
2356
2369
 
2357
- var toString = Object.prototype.toString, functionType = "[object Function]";
2358
-
2359
2370
  Handlebars.registerHelper('blockHelperMissing', function(context, options) {
2360
2371
  var inverse = options.inverse || function() {}, fn = options.fn;
2361
2372
 
2362
-
2363
- var ret = "";
2364
2373
  var type = toString.call(context);
2365
2374
 
2366
2375
  if(type === functionType) { context = context.call(this); }
@@ -2451,23 +2460,17 @@ Handlebars.registerHelper('if', function(context, options) {
2451
2460
  });
2452
2461
 
2453
2462
  Handlebars.registerHelper('unless', function(context, options) {
2454
- var fn = options.fn, inverse = options.inverse;
2455
- options.fn = inverse;
2456
- options.inverse = fn;
2457
-
2458
- return Handlebars.helpers['if'].call(this, context, options);
2463
+ return Handlebars.helpers['if'].call(this, context, {fn: options.inverse, inverse: options.fn});
2459
2464
  });
2460
2465
 
2461
2466
  Handlebars.registerHelper('with', function(context, options) {
2462
- return options.fn(context);
2467
+ if (!Handlebars.Utils.isEmpty(context)) return options.fn(context);
2463
2468
  });
2464
2469
 
2465
2470
  Handlebars.registerHelper('log', function(context, options) {
2466
2471
  var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
2467
2472
  Handlebars.log(level, context);
2468
2473
  });
2469
-
2470
- }(this.Handlebars));
2471
2474
  ;
2472
2475
  // lib/handlebars/utils.js
2473
2476
 
@@ -2491,48 +2494,61 @@ Handlebars.SafeString.prototype.toString = function() {
2491
2494
  return this.string.toString();
2492
2495
  };
2493
2496
 
2494
- (function() {
2495
- var escape = {
2496
- "&": "&amp;",
2497
- "<": "&lt;",
2498
- ">": "&gt;",
2499
- '"': "&quot;",
2500
- "'": "&#x27;",
2501
- "`": "&#x60;"
2502
- };
2497
+ var escape = {
2498
+ "&": "&amp;",
2499
+ "<": "&lt;",
2500
+ ">": "&gt;",
2501
+ '"': "&quot;",
2502
+ "'": "&#x27;",
2503
+ "`": "&#x60;"
2504
+ };
2503
2505
 
2504
- var badChars = /[&<>"'`]/g;
2505
- var possible = /[&<>"'`]/;
2506
+ var badChars = /[&<>"'`]/g;
2507
+ var possible = /[&<>"'`]/;
2506
2508
 
2507
- var escapeChar = function(chr) {
2508
- return escape[chr] || "&amp;";
2509
- };
2509
+ var escapeChar = function(chr) {
2510
+ return escape[chr] || "&amp;";
2511
+ };
2510
2512
 
2511
- Handlebars.Utils = {
2512
- escapeExpression: function(string) {
2513
- // don't escape SafeStrings, since they're already safe
2514
- if (string instanceof Handlebars.SafeString) {
2515
- return string.toString();
2516
- } else if (string == null || string === false) {
2517
- return "";
2513
+ Handlebars.Utils = {
2514
+ extend: function(obj, value) {
2515
+ for(var key in value) {
2516
+ if(value.hasOwnProperty(key)) {
2517
+ obj[key] = value[key];
2518
2518
  }
2519
+ }
2520
+ },
2519
2521
 
2520
- if(!possible.test(string)) { return string; }
2521
- return string.replace(badChars, escapeChar);
2522
- },
2522
+ escapeExpression: function(string) {
2523
+ // don't escape SafeStrings, since they're already safe
2524
+ if (string instanceof Handlebars.SafeString) {
2525
+ return string.toString();
2526
+ } else if (string == null || string === false) {
2527
+ return "";
2528
+ }
2523
2529
 
2524
- isEmpty: function(value) {
2525
- if (!value && value !== 0) {
2526
- return true;
2527
- } else if(Object.prototype.toString.call(value) === "[object Array]" && value.length === 0) {
2528
- return true;
2529
- } else {
2530
- return false;
2531
- }
2530
+ // Force a string conversion as this will be done by the append regardless and
2531
+ // the regex test will do this transparently behind the scenes, causing issues if
2532
+ // an object's to string has escaped characters in it.
2533
+ string = string.toString();
2534
+
2535
+ if(!possible.test(string)) { return string; }
2536
+ return string.replace(badChars, escapeChar);
2537
+ },
2538
+
2539
+ isEmpty: function(value) {
2540
+ if (!value && value !== 0) {
2541
+ return true;
2542
+ } else if(toString.call(value) === "[object Array]" && value.length === 0) {
2543
+ return true;
2544
+ } else {
2545
+ return false;
2532
2546
  }
2533
- };
2534
- })();;
2547
+ }
2548
+ };
2549
+ ;
2535
2550
  // lib/handlebars/runtime.js
2551
+
2536
2552
  Handlebars.VM = {
2537
2553
  template: function(templateSpec) {
2538
2554
  // Just add water
@@ -2543,13 +2559,11 @@ Handlebars.VM = {
2543
2559
  program: function(i, fn, data) {
2544
2560
  var programWrapper = this.programs[i];
2545
2561
  if(data) {
2546
- return Handlebars.VM.program(fn, data);
2547
- } else if(programWrapper) {
2548
- return programWrapper;
2549
- } else {
2550
- programWrapper = this.programs[i] = Handlebars.VM.program(fn);
2551
- return programWrapper;
2562
+ programWrapper = Handlebars.VM.program(i, fn, data);
2563
+ } else if (!programWrapper) {
2564
+ programWrapper = this.programs[i] = Handlebars.VM.program(i, fn);
2552
2565
  }
2566
+ return programWrapper;
2553
2567
  },
2554
2568
  programWithDepth: Handlebars.VM.programWithDepth,
2555
2569
  noop: Handlebars.VM.noop,
@@ -2581,21 +2595,27 @@ Handlebars.VM = {
2581
2595
  };
2582
2596
  },
2583
2597
 
2584
- programWithDepth: function(fn, data, $depth) {
2585
- var args = Array.prototype.slice.call(arguments, 2);
2598
+ programWithDepth: function(i, fn, data /*, $depth */) {
2599
+ var args = Array.prototype.slice.call(arguments, 3);
2586
2600
 
2587
- return function(context, options) {
2601
+ var program = function(context, options) {
2588
2602
  options = options || {};
2589
2603
 
2590
2604
  return fn.apply(this, [context, options.data || data].concat(args));
2591
2605
  };
2606
+ program.program = i;
2607
+ program.depth = args.length;
2608
+ return program;
2592
2609
  },
2593
- program: function(fn, data) {
2594
- return function(context, options) {
2610
+ program: function(i, fn, data) {
2611
+ var program = function(context, options) {
2595
2612
  options = options || {};
2596
2613
 
2597
2614
  return fn(context, options.data || data);
2598
2615
  };
2616
+ program.program = i;
2617
+ program.depth = 0;
2618
+ return program;
2599
2619
  },
2600
2620
  noop: function() { return ""; },
2601
2621
  invokePartial: function(partial, name, context, helpers, partials, data) {
@@ -2616,6 +2636,9 @@ Handlebars.VM = {
2616
2636
 
2617
2637
  Handlebars.template = Handlebars.VM.template;
2618
2638
  ;
2639
+ // lib/handlebars/browser-suffix.js
2640
+ })(Handlebars);
2641
+ ;
2619
2642
  /*!
2620
2643
  * jQuery Cookie Plugin v1.3.1
2621
2644
  * https://github.com/carhartl/jquery-cookie
@@ -5380,9 +5403,9 @@ if (typeof module !== 'undefined' && module.exports) {
5380
5403
  }
5381
5404
 
5382
5405
  ;
5383
- // Underscore.js 1.4.4
5406
+ // Underscore.js 1.5.2
5384
5407
  // http://underscorejs.org
5385
- // (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.
5408
+ // (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
5386
5409
  // Underscore may be freely distributed under the MIT license.
5387
5410
 
5388
5411
  (function() {
@@ -5390,7 +5413,7 @@ if (typeof module !== 'undefined' && module.exports) {
5390
5413
  // Baseline setup
5391
5414
  // --------------
5392
5415
 
5393
- // Establish the root object, `window` in the browser, or `global` on the server.
5416
+ // Establish the root object, `window` in the browser, or `exports` on the server.
5394
5417
  var root = this;
5395
5418
 
5396
5419
  // Save the previous value of the `_` variable.
@@ -5403,11 +5426,12 @@ if (typeof module !== 'undefined' && module.exports) {
5403
5426
  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
5404
5427
 
5405
5428
  // Create quick reference variables for speed access to core prototypes.
5406
- var push = ArrayProto.push,
5407
- slice = ArrayProto.slice,
5408
- concat = ArrayProto.concat,
5409
- toString = ObjProto.toString,
5410
- hasOwnProperty = ObjProto.hasOwnProperty;
5429
+ var
5430
+ push = ArrayProto.push,
5431
+ slice = ArrayProto.slice,
5432
+ concat = ArrayProto.concat,
5433
+ toString = ObjProto.toString,
5434
+ hasOwnProperty = ObjProto.hasOwnProperty;
5411
5435
 
5412
5436
  // All **ECMAScript 5** native function implementations that we hope to use
5413
5437
  // are declared here.
@@ -5446,7 +5470,7 @@ if (typeof module !== 'undefined' && module.exports) {
5446
5470
  }
5447
5471
 
5448
5472
  // Current version.
5449
- _.VERSION = '1.4.4';
5473
+ _.VERSION = '1.5.2';
5450
5474
 
5451
5475
  // Collection Functions
5452
5476
  // --------------------
@@ -5459,14 +5483,13 @@ if (typeof module !== 'undefined' && module.exports) {
5459
5483
  if (nativeForEach && obj.forEach === nativeForEach) {
5460
5484
  obj.forEach(iterator, context);
5461
5485
  } else if (obj.length === +obj.length) {
5462
- for (var i = 0, l = obj.length; i < l; i++) {
5486
+ for (var i = 0, length = obj.length; i < length; i++) {
5463
5487
  if (iterator.call(context, obj[i], i, obj) === breaker) return;
5464
5488
  }
5465
5489
  } else {
5466
- for (var key in obj) {
5467
- if (_.has(obj, key)) {
5468
- if (iterator.call(context, obj[key], key, obj) === breaker) return;
5469
- }
5490
+ var keys = _.keys(obj);
5491
+ for (var i = 0, length = keys.length; i < length; i++) {
5492
+ if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
5470
5493
  }
5471
5494
  }
5472
5495
  };
@@ -5478,7 +5501,7 @@ if (typeof module !== 'undefined' && module.exports) {
5478
5501
  if (obj == null) return results;
5479
5502
  if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
5480
5503
  each(obj, function(value, index, list) {
5481
- results[results.length] = iterator.call(context, value, index, list);
5504
+ results.push(iterator.call(context, value, index, list));
5482
5505
  });
5483
5506
  return results;
5484
5507
  };
@@ -5553,7 +5576,7 @@ if (typeof module !== 'undefined' && module.exports) {
5553
5576
  if (obj == null) return results;
5554
5577
  if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
5555
5578
  each(obj, function(value, index, list) {
5556
- if (iterator.call(context, value, index, list)) results[results.length] = value;
5579
+ if (iterator.call(context, value, index, list)) results.push(value);
5557
5580
  });
5558
5581
  return results;
5559
5582
  };
@@ -5637,7 +5660,7 @@ if (typeof module !== 'undefined' && module.exports) {
5637
5660
 
5638
5661
  // Return the maximum element or (element-based computation).
5639
5662
  // Can't optimize arrays of integers longer than 65,535 elements.
5640
- // See: https://bugs.webkit.org/show_bug.cgi?id=80797
5663
+ // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)
5641
5664
  _.max = function(obj, iterator, context) {
5642
5665
  if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {
5643
5666
  return Math.max.apply(Math, obj);
@@ -5646,7 +5669,7 @@ if (typeof module !== 'undefined' && module.exports) {
5646
5669
  var result = {computed : -Infinity, value: -Infinity};
5647
5670
  each(obj, function(value, index, list) {
5648
5671
  var computed = iterator ? iterator.call(context, value, index, list) : value;
5649
- computed >= result.computed && (result = {value : value, computed : computed});
5672
+ computed > result.computed && (result = {value : value, computed : computed});
5650
5673
  });
5651
5674
  return result.value;
5652
5675
  };
@@ -5665,7 +5688,8 @@ if (typeof module !== 'undefined' && module.exports) {
5665
5688
  return result.value;
5666
5689
  };
5667
5690
 
5668
- // Shuffle an array.
5691
+ // Shuffle an array, using the modern version of the
5692
+ // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
5669
5693
  _.shuffle = function(obj) {
5670
5694
  var rand;
5671
5695
  var index = 0;
@@ -5678,6 +5702,16 @@ if (typeof module !== 'undefined' && module.exports) {
5678
5702
  return shuffled;
5679
5703
  };
5680
5704
 
5705
+ // Sample **n** random values from an array.
5706
+ // If **n** is not specified, returns a single random element from the array.
5707
+ // The internal `guard` argument allows it to work with `map`.
5708
+ _.sample = function(obj, n, guard) {
5709
+ if (arguments.length < 2 || guard) {
5710
+ return obj[_.random(obj.length - 1)];
5711
+ }
5712
+ return _.shuffle(obj).slice(0, Math.max(0, n));
5713
+ };
5714
+
5681
5715
  // An internal function to generate lookup iterators.
5682
5716
  var lookupIterator = function(value) {
5683
5717
  return _.isFunction(value) ? value : function(obj){ return obj[value]; };
@@ -5688,9 +5722,9 @@ if (typeof module !== 'undefined' && module.exports) {
5688
5722
  var iterator = lookupIterator(value);
5689
5723
  return _.pluck(_.map(obj, function(value, index, list) {
5690
5724
  return {
5691
- value : value,
5692
- index : index,
5693
- criteria : iterator.call(context, value, index, list)
5725
+ value: value,
5726
+ index: index,
5727
+ criteria: iterator.call(context, value, index, list)
5694
5728
  };
5695
5729
  }).sort(function(left, right) {
5696
5730
  var a = left.criteria;
@@ -5699,38 +5733,41 @@ if (typeof module !== 'undefined' && module.exports) {
5699
5733
  if (a > b || a === void 0) return 1;
5700
5734
  if (a < b || b === void 0) return -1;
5701
5735
  }
5702
- return left.index < right.index ? -1 : 1;
5736
+ return left.index - right.index;
5703
5737
  }), 'value');
5704
5738
  };
5705
5739
 
5706
5740
  // An internal function used for aggregate "group by" operations.
5707
- var group = function(obj, value, context, behavior) {
5708
- var result = {};
5709
- var iterator = lookupIterator(value == null ? _.identity : value);
5710
- each(obj, function(value, index) {
5711
- var key = iterator.call(context, value, index, obj);
5712
- behavior(result, key, value);
5713
- });
5714
- return result;
5741
+ var group = function(behavior) {
5742
+ return function(obj, value, context) {
5743
+ var result = {};
5744
+ var iterator = value == null ? _.identity : lookupIterator(value);
5745
+ each(obj, function(value, index) {
5746
+ var key = iterator.call(context, value, index, obj);
5747
+ behavior(result, key, value);
5748
+ });
5749
+ return result;
5750
+ };
5715
5751
  };
5716
5752
 
5717
5753
  // Groups the object's values by a criterion. Pass either a string attribute
5718
5754
  // to group by, or a function that returns the criterion.
5719
- _.groupBy = function(obj, value, context) {
5720
- return group(obj, value, context, function(result, key, value) {
5721
- (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
5722
- });
5723
- };
5755
+ _.groupBy = group(function(result, key, value) {
5756
+ (_.has(result, key) ? result[key] : (result[key] = [])).push(value);
5757
+ });
5758
+
5759
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
5760
+ // when you know that your index values will be unique.
5761
+ _.indexBy = group(function(result, key, value) {
5762
+ result[key] = value;
5763
+ });
5724
5764
 
5725
5765
  // Counts instances of an object that group by a certain criterion. Pass
5726
5766
  // either a string attribute to count by, or a function that returns the
5727
5767
  // criterion.
5728
- _.countBy = function(obj, value, context) {
5729
- return group(obj, value, context, function(result, key) {
5730
- if (!_.has(result, key)) result[key] = 0;
5731
- result[key]++;
5732
- });
5733
- };
5768
+ _.countBy = group(function(result, key) {
5769
+ _.has(result, key) ? result[key]++ : result[key] = 1;
5770
+ });
5734
5771
 
5735
5772
  // Use a comparator function to figure out the smallest index at which
5736
5773
  // an object should be inserted so as to maintain order. Uses binary search.
@@ -5745,7 +5782,7 @@ if (typeof module !== 'undefined' && module.exports) {
5745
5782
  return low;
5746
5783
  };
5747
5784
 
5748
- // Safely convert anything iterable into a real, live array.
5785
+ // Safely create a real, live array from anything iterable.
5749
5786
  _.toArray = function(obj) {
5750
5787
  if (!obj) return [];
5751
5788
  if (_.isArray(obj)) return slice.call(obj);
@@ -5767,7 +5804,7 @@ if (typeof module !== 'undefined' && module.exports) {
5767
5804
  // allows it to work with `_.map`.
5768
5805
  _.first = _.head = _.take = function(array, n, guard) {
5769
5806
  if (array == null) return void 0;
5770
- return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
5807
+ return (n == null) || guard ? array[0] : slice.call(array, 0, n);
5771
5808
  };
5772
5809
 
5773
5810
  // Returns everything but the last entry of the array. Especially useful on
@@ -5782,10 +5819,10 @@ if (typeof module !== 'undefined' && module.exports) {
5782
5819
  // values in the array. The **guard** check allows it to work with `_.map`.
5783
5820
  _.last = function(array, n, guard) {
5784
5821
  if (array == null) return void 0;
5785
- if ((n != null) && !guard) {
5786
- return slice.call(array, Math.max(array.length - n, 0));
5787
- } else {
5822
+ if ((n == null) || guard) {
5788
5823
  return array[array.length - 1];
5824
+ } else {
5825
+ return slice.call(array, Math.max(array.length - n, 0));
5789
5826
  }
5790
5827
  };
5791
5828
 
@@ -5804,8 +5841,11 @@ if (typeof module !== 'undefined' && module.exports) {
5804
5841
 
5805
5842
  // Internal implementation of a recursive `flatten` function.
5806
5843
  var flatten = function(input, shallow, output) {
5844
+ if (shallow && _.every(input, _.isArray)) {
5845
+ return concat.apply(output, input);
5846
+ }
5807
5847
  each(input, function(value) {
5808
- if (_.isArray(value)) {
5848
+ if (_.isArray(value) || _.isArguments(value)) {
5809
5849
  shallow ? push.apply(output, value) : flatten(value, shallow, output);
5810
5850
  } else {
5811
5851
  output.push(value);
@@ -5814,7 +5854,7 @@ if (typeof module !== 'undefined' && module.exports) {
5814
5854
  return output;
5815
5855
  };
5816
5856
 
5817
- // Return a completely flattened version of an array.
5857
+ // Flatten out an array, either recursively (by default), or just one level.
5818
5858
  _.flatten = function(array, shallow) {
5819
5859
  return flatten(array, shallow, []);
5820
5860
  };
@@ -5848,7 +5888,7 @@ if (typeof module !== 'undefined' && module.exports) {
5848
5888
  // Produce an array that contains the union: each distinct element from all of
5849
5889
  // the passed-in arrays.
5850
5890
  _.union = function() {
5851
- return _.uniq(concat.apply(ArrayProto, arguments));
5891
+ return _.uniq(_.flatten(arguments, true));
5852
5892
  };
5853
5893
 
5854
5894
  // Produce an array that contains every item shared between all the
@@ -5872,11 +5912,10 @@ if (typeof module !== 'undefined' && module.exports) {
5872
5912
  // Zip together multiple lists into a single array -- elements that share
5873
5913
  // an index go together.
5874
5914
  _.zip = function() {
5875
- var args = slice.call(arguments);
5876
- var length = _.max(_.pluck(args, 'length'));
5915
+ var length = _.max(_.pluck(arguments, "length").concat(0));
5877
5916
  var results = new Array(length);
5878
5917
  for (var i = 0; i < length; i++) {
5879
- results[i] = _.pluck(args, "" + i);
5918
+ results[i] = _.pluck(arguments, '' + i);
5880
5919
  }
5881
5920
  return results;
5882
5921
  };
@@ -5887,7 +5926,7 @@ if (typeof module !== 'undefined' && module.exports) {
5887
5926
  _.object = function(list, values) {
5888
5927
  if (list == null) return {};
5889
5928
  var result = {};
5890
- for (var i = 0, l = list.length; i < l; i++) {
5929
+ for (var i = 0, length = list.length; i < length; i++) {
5891
5930
  if (values) {
5892
5931
  result[list[i]] = values[i];
5893
5932
  } else {
@@ -5905,17 +5944,17 @@ if (typeof module !== 'undefined' && module.exports) {
5905
5944
  // for **isSorted** to use binary search.
5906
5945
  _.indexOf = function(array, item, isSorted) {
5907
5946
  if (array == null) return -1;
5908
- var i = 0, l = array.length;
5947
+ var i = 0, length = array.length;
5909
5948
  if (isSorted) {
5910
5949
  if (typeof isSorted == 'number') {
5911
- i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);
5950
+ i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);
5912
5951
  } else {
5913
5952
  i = _.sortedIndex(array, item);
5914
5953
  return array[i] === item ? i : -1;
5915
5954
  }
5916
5955
  }
5917
5956
  if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);
5918
- for (; i < l; i++) if (array[i] === item) return i;
5957
+ for (; i < length; i++) if (array[i] === item) return i;
5919
5958
  return -1;
5920
5959
  };
5921
5960
 
@@ -5941,11 +5980,11 @@ if (typeof module !== 'undefined' && module.exports) {
5941
5980
  }
5942
5981
  step = arguments[2] || 1;
5943
5982
 
5944
- var len = Math.max(Math.ceil((stop - start) / step), 0);
5983
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
5945
5984
  var idx = 0;
5946
- var range = new Array(len);
5985
+ var range = new Array(length);
5947
5986
 
5948
- while(idx < len) {
5987
+ while(idx < length) {
5949
5988
  range[idx++] = start;
5950
5989
  start += step;
5951
5990
  }
@@ -5964,7 +6003,7 @@ if (typeof module !== 'undefined' && module.exports) {
5964
6003
  // available.
5965
6004
  _.bind = function(func, context) {
5966
6005
  var args, bound;
5967
- if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
6006
+ if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
5968
6007
  if (!_.isFunction(func)) throw new TypeError;
5969
6008
  args = slice.call(arguments, 2);
5970
6009
  return bound = function() {
@@ -6020,17 +6059,23 @@ if (typeof module !== 'undefined' && module.exports) {
6020
6059
  };
6021
6060
 
6022
6061
  // Returns a function, that, when invoked, will only be triggered at most once
6023
- // during a given window of time.
6024
- _.throttle = function(func, wait) {
6025
- var context, args, timeout, result;
6062
+ // during a given window of time. Normally, the throttled function will run
6063
+ // as much as it can, without ever going more than once per `wait` duration;
6064
+ // but if you'd like to disable the execution on the leading edge, pass
6065
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
6066
+ _.throttle = function(func, wait, options) {
6067
+ var context, args, result;
6068
+ var timeout = null;
6026
6069
  var previous = 0;
6070
+ options || (options = {});
6027
6071
  var later = function() {
6028
- previous = new Date;
6072
+ previous = options.leading === false ? 0 : new Date;
6029
6073
  timeout = null;
6030
6074
  result = func.apply(context, args);
6031
6075
  };
6032
6076
  return function() {
6033
6077
  var now = new Date;
6078
+ if (!previous && options.leading === false) previous = now;
6034
6079
  var remaining = wait - (now - previous);
6035
6080
  context = this;
6036
6081
  args = arguments;
@@ -6039,7 +6084,7 @@ if (typeof module !== 'undefined' && module.exports) {
6039
6084
  timeout = null;
6040
6085
  previous = now;
6041
6086
  result = func.apply(context, args);
6042
- } else if (!timeout) {
6087
+ } else if (!timeout && options.trailing !== false) {
6043
6088
  timeout = setTimeout(later, remaining);
6044
6089
  }
6045
6090
  return result;
@@ -6051,16 +6096,24 @@ if (typeof module !== 'undefined' && module.exports) {
6051
6096
  // N milliseconds. If `immediate` is passed, trigger the function on the
6052
6097
  // leading edge, instead of the trailing.
6053
6098
  _.debounce = function(func, wait, immediate) {
6054
- var timeout, result;
6099
+ var timeout, args, context, timestamp, result;
6055
6100
  return function() {
6056
- var context = this, args = arguments;
6101
+ context = this;
6102
+ args = arguments;
6103
+ timestamp = new Date();
6057
6104
  var later = function() {
6058
- timeout = null;
6059
- if (!immediate) result = func.apply(context, args);
6105
+ var last = (new Date()) - timestamp;
6106
+ if (last < wait) {
6107
+ timeout = setTimeout(later, wait - last);
6108
+ } else {
6109
+ timeout = null;
6110
+ if (!immediate) result = func.apply(context, args);
6111
+ }
6060
6112
  };
6061
6113
  var callNow = immediate && !timeout;
6062
- clearTimeout(timeout);
6063
- timeout = setTimeout(later, wait);
6114
+ if (!timeout) {
6115
+ timeout = setTimeout(later, wait);
6116
+ }
6064
6117
  if (callNow) result = func.apply(context, args);
6065
6118
  return result;
6066
6119
  };
@@ -6105,7 +6158,6 @@ if (typeof module !== 'undefined' && module.exports) {
6105
6158
 
6106
6159
  // Returns a function that will only be executed after being called N times.
6107
6160
  _.after = function(times, func) {
6108
- if (times <= 0) return func();
6109
6161
  return function() {
6110
6162
  if (--times < 1) {
6111
6163
  return func.apply(this, arguments);
@@ -6121,28 +6173,39 @@ if (typeof module !== 'undefined' && module.exports) {
6121
6173
  _.keys = nativeKeys || function(obj) {
6122
6174
  if (obj !== Object(obj)) throw new TypeError('Invalid object');
6123
6175
  var keys = [];
6124
- for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
6176
+ for (var key in obj) if (_.has(obj, key)) keys.push(key);
6125
6177
  return keys;
6126
6178
  };
6127
6179
 
6128
6180
  // Retrieve the values of an object's properties.
6129
6181
  _.values = function(obj) {
6130
- var values = [];
6131
- for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
6182
+ var keys = _.keys(obj);
6183
+ var length = keys.length;
6184
+ var values = new Array(length);
6185
+ for (var i = 0; i < length; i++) {
6186
+ values[i] = obj[keys[i]];
6187
+ }
6132
6188
  return values;
6133
6189
  };
6134
6190
 
6135
6191
  // Convert an object into a list of `[key, value]` pairs.
6136
6192
  _.pairs = function(obj) {
6137
- var pairs = [];
6138
- for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);
6193
+ var keys = _.keys(obj);
6194
+ var length = keys.length;
6195
+ var pairs = new Array(length);
6196
+ for (var i = 0; i < length; i++) {
6197
+ pairs[i] = [keys[i], obj[keys[i]]];
6198
+ }
6139
6199
  return pairs;
6140
6200
  };
6141
6201
 
6142
6202
  // Invert the keys and values of an object. The values must be serializable.
6143
6203
  _.invert = function(obj) {
6144
6204
  var result = {};
6145
- for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;
6205
+ var keys = _.keys(obj);
6206
+ for (var i = 0, length = keys.length; i < length; i++) {
6207
+ result[obj[keys[i]]] = keys[i];
6208
+ }
6146
6209
  return result;
6147
6210
  };
6148
6211
 
@@ -6217,7 +6280,7 @@ if (typeof module !== 'undefined' && module.exports) {
6217
6280
  // Internal recursive comparison function for `isEqual`.
6218
6281
  var eq = function(a, b, aStack, bStack) {
6219
6282
  // Identical objects are equal. `0 === -0`, but they aren't identical.
6220
- // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
6283
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
6221
6284
  if (a === b) return a !== 0 || 1 / a == 1 / b;
6222
6285
  // A strict comparison is necessary because `null == undefined`.
6223
6286
  if (a == null || b == null) return a === b;
@@ -6259,6 +6322,13 @@ if (typeof module !== 'undefined' && module.exports) {
6259
6322
  // unique nested structures.
6260
6323
  if (aStack[length] == a) return bStack[length] == b;
6261
6324
  }
6325
+ // Objects with different constructors are not equivalent, but `Object`s
6326
+ // from different frames are.
6327
+ var aCtor = a.constructor, bCtor = b.constructor;
6328
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
6329
+ _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
6330
+ return false;
6331
+ }
6262
6332
  // Add the first object to the stack of traversed objects.
6263
6333
  aStack.push(a);
6264
6334
  bStack.push(b);
@@ -6275,13 +6345,6 @@ if (typeof module !== 'undefined' && module.exports) {
6275
6345
  }
6276
6346
  }
6277
6347
  } else {
6278
- // Objects with different constructors are not equivalent, but `Object`s
6279
- // from different frames are.
6280
- var aCtor = a.constructor, bCtor = b.constructor;
6281
- if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&
6282
- _.isFunction(bCtor) && (bCtor instanceof bCtor))) {
6283
- return false;
6284
- }
6285
6348
  // Deep compare objects.
6286
6349
  for (var key in a) {
6287
6350
  if (_.has(a, key)) {
@@ -6405,7 +6468,7 @@ if (typeof module !== 'undefined' && module.exports) {
6405
6468
 
6406
6469
  // Run a function **n** times.
6407
6470
  _.times = function(n, iterator, context) {
6408
- var accum = Array(n);
6471
+ var accum = Array(Math.max(0, n));
6409
6472
  for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);
6410
6473
  return accum;
6411
6474
  };
@@ -6426,8 +6489,7 @@ if (typeof module !== 'undefined' && module.exports) {
6426
6489
  '<': '&lt;',
6427
6490
  '>': '&gt;',
6428
6491
  '"': '&quot;',
6429
- "'": '&#x27;',
6430
- '/': '&#x2F;'
6492
+ "'": '&#x27;'
6431
6493
  }
6432
6494
  };
6433
6495
  entityMap.unescape = _.invert(entityMap.escape);
@@ -6448,8 +6510,8 @@ if (typeof module !== 'undefined' && module.exports) {
6448
6510
  };
6449
6511
  });
6450
6512
 
6451
- // If the value of the named property is a function then invoke it;
6452
- // otherwise, return it.
6513
+ // If the value of the named `property` is a function then invoke it with the
6514
+ // `object` as context; otherwise, return it.
6453
6515
  _.result = function(object, property) {
6454
6516
  if (object == null) return void 0;
6455
6517
  var value = object[property];
@@ -6458,7 +6520,7 @@ if (typeof module !== 'undefined' && module.exports) {
6458
6520
 
6459
6521
  // Add your own custom functions to the Underscore object.
6460
6522
  _.mixin = function(obj) {
6461
- each(_.functions(obj), function(name){
6523
+ each(_.functions(obj), function(name) {
6462
6524
  var func = _[name] = obj[name];
6463
6525
  _.prototype[name] = function() {
6464
6526
  var args = [this._wrapped];
@@ -6620,7 +6682,7 @@ if (typeof module !== 'undefined' && module.exports) {
6620
6682
  (function() {
6621
6683
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6622
6684
  this.InfoparkHandlebarsTemplates["choose_obj_class_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6623
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6685
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6624
6686
  helpers = helpers || Handlebars.helpers; data = data || {};
6625
6687
  var buffer = "", stack1, options, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;
6626
6688
 
@@ -6646,7 +6708,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6646
6708
  (function() {
6647
6709
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6648
6710
  this.InfoparkHandlebarsTemplates["choose_obj_class_list"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6649
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6711
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6650
6712
  helpers = helpers || Handlebars.helpers; data = data || {};
6651
6713
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
6652
6714
 
@@ -6684,7 +6746,7 @@ function program2(depth0,data) {
6684
6746
  (function() {
6685
6747
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6686
6748
  this.InfoparkHandlebarsTemplates["confirmation_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6687
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6749
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6688
6750
  helpers = helpers || Handlebars.helpers; data = data || {};
6689
6751
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
6690
6752
 
@@ -6734,7 +6796,7 @@ function program1(depth0,data) {
6734
6796
  (function() {
6735
6797
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6736
6798
  this.InfoparkHandlebarsTemplates["edit_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6737
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6799
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6738
6800
  helpers = helpers || Handlebars.helpers; data = data || {};
6739
6801
  var buffer = "", stack1, options, functionType="function", helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
6740
6802
 
@@ -6757,7 +6819,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6757
6819
  (function() {
6758
6820
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6759
6821
  this.InfoparkHandlebarsTemplates["editable_workspace_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6760
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6822
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6761
6823
  helpers = helpers || Handlebars.helpers; data = data || {};
6762
6824
  var buffer = "", stack1, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
6763
6825
 
@@ -6797,7 +6859,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6797
6859
  (function() {
6798
6860
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6799
6861
  this.InfoparkHandlebarsTemplates["element_overlay"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6800
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6862
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6801
6863
  helpers = helpers || Handlebars.helpers; data = data || {};
6802
6864
 
6803
6865
 
@@ -6809,7 +6871,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6809
6871
  (function() {
6810
6872
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6811
6873
  this.InfoparkHandlebarsTemplates["inplace_menu"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6812
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6874
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6813
6875
  helpers = helpers || Handlebars.helpers; data = data || {};
6814
6876
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
6815
6877
 
@@ -6843,7 +6905,7 @@ function program1(depth0,data) {
6843
6905
  (function() {
6844
6906
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6845
6907
  this.InfoparkHandlebarsTemplates["inplace_menu_icon"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6846
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6908
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6847
6909
  helpers = helpers || Handlebars.helpers; data = data || {};
6848
6910
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
6849
6911
 
@@ -6860,7 +6922,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6860
6922
  (function() {
6861
6923
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6862
6924
  this.InfoparkHandlebarsTemplates["menu_bar"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6863
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6925
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6864
6926
  helpers = helpers || Handlebars.helpers; data = data || {};
6865
6927
 
6866
6928
 
@@ -6872,7 +6934,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6872
6934
  (function() {
6873
6935
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6874
6936
  this.InfoparkHandlebarsTemplates["menu_bar_dropdown"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6875
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6937
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6876
6938
  helpers = helpers || Handlebars.helpers; data = data || {};
6877
6939
  var buffer = "", stack1, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this, functionType="function";
6878
6940
 
@@ -6929,7 +6991,7 @@ function program2(depth0,data) {
6929
6991
  (function() {
6930
6992
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6931
6993
  this.InfoparkHandlebarsTemplates["overlay"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6932
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
6994
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6933
6995
  helpers = helpers || Handlebars.helpers; data = data || {};
6934
6996
 
6935
6997
 
@@ -6941,7 +7003,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
6941
7003
  (function() {
6942
7004
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6943
7005
  this.InfoparkHandlebarsTemplates["prompt_dialog"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6944
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7006
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6945
7007
  helpers = helpers || Handlebars.helpers; data = data || {};
6946
7008
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, self=this;
6947
7009
 
@@ -6991,7 +7053,7 @@ function program1(depth0,data) {
6991
7053
  (function() {
6992
7054
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
6993
7055
  this.InfoparkHandlebarsTemplates["saving_indicator"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
6994
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7056
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
6995
7057
  helpers = helpers || Handlebars.helpers; data = data || {};
6996
7058
  var buffer = "", stack1, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;
6997
7059
 
@@ -7010,7 +7072,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
7010
7072
  (function() {
7011
7073
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
7012
7074
  this.InfoparkHandlebarsTemplates["saving_overlay"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
7013
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7075
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
7014
7076
  helpers = helpers || Handlebars.helpers; data = data || {};
7015
7077
 
7016
7078
 
@@ -7022,7 +7084,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
7022
7084
  (function() {
7023
7085
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
7024
7086
  this.InfoparkHandlebarsTemplates["title"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
7025
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7087
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
7026
7088
  helpers = helpers || Handlebars.helpers; data = data || {};
7027
7089
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression;
7028
7090
 
@@ -7039,7 +7101,7 @@ helpers = helpers || Handlebars.helpers; data = data || {};
7039
7101
  (function() {
7040
7102
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
7041
7103
  this.InfoparkHandlebarsTemplates["workspace_form_select_list"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
7042
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7104
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
7043
7105
  helpers = helpers || Handlebars.helpers; data = data || {};
7044
7106
  var buffer = "", stack1, functionType="function", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing, self=this;
7045
7107
 
@@ -7084,7 +7146,7 @@ function program4(depth0,data) {
7084
7146
  (function() {
7085
7147
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
7086
7148
  this.InfoparkHandlebarsTemplates["workspace_select_list"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
7087
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7149
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
7088
7150
  helpers = helpers || Handlebars.helpers; data = data || {};
7089
7151
  var buffer = "", stack1, self=this, functionType="function", escapeExpression=this.escapeExpression;
7090
7152
 
@@ -7100,7 +7162,7 @@ function program1(depth0,data) {
7100
7162
  stack2 = helpers['if'].call(depth0, depth0.is_editable, {hash:{},inverse:self.program(6, program6, data),fn:self.program(4, program4, data),data:data});
7101
7163
  if(stack2 || stack2 === 0) { buffer += stack2; }
7102
7164
  buffer += "\n </i>\n "
7103
- + escapeExpression(((stack1 = depth0.short_title),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
7165
+ + escapeExpression(((stack1 = depth0.select_title),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))
7104
7166
  + "\n ";
7105
7167
  stack2 = helpers['if'].call(depth0, depth0.is_current_workspace, {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});
7106
7168
  if(stack2 || stack2 === 0) { buffer += stack2; }
@@ -7141,7 +7203,7 @@ function program8(depth0,data) {
7141
7203
  (function() {
7142
7204
  this.InfoparkHandlebarsTemplates || (this.InfoparkHandlebarsTemplates = {});
7143
7205
  this.InfoparkHandlebarsTemplates["workspace_select_menu_bar_item"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
7144
- this.compilerInfo = [2,'>= 1.0.0-rc.3'];
7206
+ this.compilerInfo = [3,'>= 1.0.0-rc.4'];
7145
7207
  helpers = helpers || Handlebars.helpers; data = data || {};
7146
7208
  var buffer = "", stack1, stack2, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType="function", self=this;
7147
7209
 
@@ -7227,6 +7289,7 @@ $.i18n().load({
7227
7289
  'menu_bar.empty_workspace_title': '<leerer Titel>',
7228
7290
  'menu_bar.published_workspace_title': 'Veröffentlichte Inhalte',
7229
7291
  'menu_bar.loading_workspaces': 'Lade Arbeitskopien',
7292
+ 'menu_bar.select_working_copy': '"$1" auswählen',
7230
7293
  'menu_bar.publish_working_copy': '"$1" veröffentlichen',
7231
7294
  'menu_bar.publish_ws_confirmation': '"$1" veröffentlichen?',
7232
7295
  'menu_bar.publish_ws_confirmation_desc': 'Eine Arbeitskopie zu veröffentlichen ist endgültig. Dieser Vorgang kann nicht rückgängig gemacht werden.',
@@ -7311,6 +7374,7 @@ $.i18n().load({
7311
7374
  'menu_bar.empty_workspace_title': '<empty title>',
7312
7375
  'menu_bar.published_workspace_title': 'Published content',
7313
7376
  'menu_bar.loading_workspaces': 'Loading working copies',
7377
+ 'menu_bar.select_working_copy': 'Select "$1"',
7314
7378
  'menu_bar.publish_working_copy': 'Publish "$1"',
7315
7379
  'menu_bar.publish_ws_confirmation': 'Publish "$1"?',
7316
7380
  'menu_bar.publish_ws_confirmation_desc': 'Publishing a working copy is final. This action cannot be undone.',
@@ -7948,6 +8012,12 @@ var infopark = {
7948
8012
  }
7949
8013
  };
7950
8014
 
8015
+ var workspace_title_select = function(workspace) {
8016
+ var title = workspace_title_short(workspace);
8017
+
8018
+ return t('menu_bar.select_working_copy', title);
8019
+ };
8020
+
7951
8021
  var renderer = function(view) {
7952
8022
  var select_menu_view = $(infopark.template.render('workspace_select_menu_bar_item', {
7953
8023
  current_workspace: infopark.editing.workspace(),
@@ -7978,7 +8048,7 @@ var infopark = {
7978
8048
  return {
7979
8049
  is_editable: ws.is_editable,
7980
8050
  long_title: workspace_title_long(ws),
7981
- short_title: workspace_title_short(ws),
8051
+ select_title: workspace_title_select(ws),
7982
8052
  is_current_workspace: (ws.id() === infopark.editing.workspace().id())
7983
8053
  };
7984
8054
  });