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 +8 -8
- data/app/controllers/rails_connector/default_cms_controller.rb +3 -11
- data/app/controllers/rails_connector/objs_controller.rb +9 -7
- data/app/helpers/rails_connector/default_cms_helper.rb +1 -2
- data/app/helpers/rails_connector/default_cms_routing_helper.rb +18 -11
- data/app/helpers/rails_connector/display_helper.rb +3 -15
- data/app/helpers/rails_connector/layout_helper.rb +0 -2
- data/app/helpers/rails_connector/table_of_contents_helper.rb +1 -16
- data/config/ca-bundle.crt +1 -1
- data/config/cms_routes.rb +0 -3
- data/lib/assets/javascripts/infopark_editing.js +252 -182
- data/lib/infopark_cloud_connector.rb +0 -20
- data/lib/rails_connector/basic_obj.rb +5 -35
- data/lib/rails_connector/cms_accessible.rb +4 -71
- data/lib/rails_connector/configuration.rb +0 -9
- data/lib/rails_connector/engine.rb +0 -1
- data/lib/rails_connector/obj_data_from_service.rb +4 -2
- metadata +2 -7
- data/app/helpers/rails_connector/marker_helper.rb +0 -46
- data/app/views/errors/403_forbidden.html.erb +0 -3
- data/config/locales/de.rails_connector.views.yml +0 -6
- data/config/locales/en.rails_connector.views.yml +0 -6
- data/lib/rails_connector/authenticable.rb +0 -30
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjJjMWIxMWM5ZDliZGZlZTNlNjg0OWNjOTVlNjkwMjg3NzZjNDgxZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGE3MDQ0YjUwNDJjMjEwNjYyNzIzY2VkNDBlYzAzMjcyOGZhZTk5NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTI5NGNiMTJjMDZjMWQ5NzVlMzU4MWQzOTEwZjY1ZGFjMDE3YjgyMDIwZmQy
|
10
|
+
MGY2YTNlZTI1MjFjYmNlZGYwMjc2N2NkODNkYzUwYWRiZWM5OWZiNDNhMzIy
|
11
|
+
NjUxZjdmMjM3NDM2ZDBkMjYyYmEzNDk1MTZlODUwMjU1NjRkYTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
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.
|
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.
|
128
|
-
|
129
|
-
|
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(
|
140
|
-
copied_attributes.
|
141
|
-
|
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
|
-
|
56
|
-
if permalink
|
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?
|
59
|
+
elsif obj.homepage?
|
59
60
|
__send__("root_#{path_or_url}", options)
|
60
61
|
else
|
61
|
-
if obj.
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
-
|
68
|
-
|
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(:
|
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, :
|
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
|
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
|
-
|
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
|
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:
|
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/
|
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.
|
2330
|
-
Handlebars.COMPILER_REVISION =
|
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: '
|
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(
|
2342
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
2495
|
-
|
2496
|
-
|
2497
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
};
|
2497
|
+
var escape = {
|
2498
|
+
"&": "&",
|
2499
|
+
"<": "<",
|
2500
|
+
">": ">",
|
2501
|
+
'"': """,
|
2502
|
+
"'": "'",
|
2503
|
+
"`": "`"
|
2504
|
+
};
|
2503
2505
|
|
2504
|
-
|
2505
|
-
|
2506
|
+
var badChars = /[&<>"'`]/g;
|
2507
|
+
var possible = /[&<>"'`]/;
|
2506
2508
|
|
2507
|
-
|
2508
|
-
|
2509
|
-
|
2509
|
+
var escapeChar = function(chr) {
|
2510
|
+
return escape[chr] || "&";
|
2511
|
+
};
|
2510
2512
|
|
2511
|
-
|
2512
|
-
|
2513
|
-
|
2514
|
-
if
|
2515
|
-
|
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
|
-
|
2521
|
-
|
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
|
-
|
2525
|
-
|
2526
|
-
|
2527
|
-
|
2528
|
-
|
2529
|
-
|
2530
|
-
|
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
|
-
|
2547
|
-
} else if(programWrapper) {
|
2548
|
-
|
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
|
2585
|
-
var args = Array.prototype.slice.call(arguments,
|
2598
|
+
programWithDepth: function(i, fn, data /*, $depth */) {
|
2599
|
+
var args = Array.prototype.slice.call(arguments, 3);
|
2586
2600
|
|
2587
|
-
|
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
|
-
|
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.
|
5406
|
+
// Underscore.js 1.5.2
|
5384
5407
|
// http://underscorejs.org
|
5385
|
-
// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud
|
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 `
|
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
|
5407
|
-
|
5408
|
-
|
5409
|
-
|
5410
|
-
|
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.
|
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,
|
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
|
-
|
5467
|
-
|
5468
|
-
|
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
|
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
|
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
|
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
|
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
|
5692
|
-
index
|
5693
|
-
criteria
|
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
|
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(
|
5708
|
-
|
5709
|
-
|
5710
|
-
|
5711
|
-
|
5712
|
-
|
5713
|
-
|
5714
|
-
|
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(
|
5720
|
-
|
5721
|
-
|
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(
|
5729
|
-
|
5730
|
-
|
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
|
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
|
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
|
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
|
-
//
|
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(
|
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
|
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(
|
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,
|
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,
|
5947
|
+
var i = 0, length = array.length;
|
5909
5948
|
if (isSorted) {
|
5910
5949
|
if (typeof isSorted == 'number') {
|
5911
|
-
i = (isSorted < 0 ? Math.max(0,
|
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 <
|
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
|
5983
|
+
var length = Math.max(Math.ceil((stop - start) / step), 0);
|
5945
5984
|
var idx = 0;
|
5946
|
-
var range = new Array(
|
5985
|
+
var range = new Array(length);
|
5947
5986
|
|
5948
|
-
while(idx <
|
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
|
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
|
-
|
6025
|
-
|
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
|
-
|
6101
|
+
context = this;
|
6102
|
+
args = arguments;
|
6103
|
+
timestamp = new Date();
|
6057
6104
|
var later = function() {
|
6058
|
-
|
6059
|
-
if (
|
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
|
-
|
6063
|
-
|
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
|
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
|
6131
|
-
|
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
|
6138
|
-
|
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
|
-
|
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
|
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
|
'<': '<',
|
6427
6490
|
'>': '>',
|
6428
6491
|
'"': '"',
|
6429
|
-
"'": '''
|
6430
|
-
'/': '/'
|
6492
|
+
"'": '''
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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 = [
|
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.
|
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 = [
|
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
|
-
|
8051
|
+
select_title: workspace_title_select(ws),
|
7982
8052
|
is_current_workspace: (ws.id() === infopark.editing.workspace().id())
|
7983
8053
|
};
|
7984
8054
|
});
|