wunderbar 0.21.1 → 0.21.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/wunderbar/asset.rb +3 -3
- data/lib/wunderbar/html-methods.rb +14 -2
- data/lib/wunderbar/sinatra.rb +10 -6
- data/lib/wunderbar/vendor/angular-resource.min.js +4 -4
- data/lib/wunderbar/vendor/angular-route.min.js +9 -9
- data/lib/wunderbar/vendor/angular.min.js +201 -196
- data/lib/wunderbar/version.rb +1 -1
- data/wunderbar.gemspec +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MDBiNjZkZTUxNWYwZjZlZmMxNDkxNjQxMDgyOTJmNWRiZjlhNWVmNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODdhYjE2NDAyOWQ4NGEyODVhNzVhOGQ1YjJkOTQzNTYyYmE0OGMwZg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjFjZjhjMzE3NTI2MWY3YWM2MDJhNzhiNDg3YTI1MmIyNzVjYjg2NGY2YmVl
|
10
|
+
ZDgzMTI5ODA4OWZiZGFmOGFhNjBlOTlkYjgzZGJjZWQxOGE0YTkyZDc1NGZi
|
11
|
+
ZDFiYjdmMmYyMTZiM2NkZDk2Y2QwOWU3ZmYwZGZhYjkyYzNjYjc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YjFiYmY0YTBjMjAwZTA3OWNhYjljYWVmZjVjMWZlYjQxY2M2MWQ1ODk4ZmY1
|
14
|
+
M2Q0MjZjNDNiYTVlYjk5NzQ4M2FjZmRkMDZlMmRlNDcyNGRhNDdmNjhmN2Jl
|
15
|
+
YTlhZjMxNDYyZmY1YzBmZTk4NzE2ODM0MjVlMzU5OTM4NjEzM2Y=
|
data/lib/wunderbar/asset.rb
CHANGED
@@ -46,7 +46,7 @@ module Wunderbar
|
|
46
46
|
|
47
47
|
@path = '../' * ENV['PATH_INFO'].to_s.count('/') + 'assets'
|
48
48
|
@root = File.dirname(ENV['SCRIPT_FILENAME']) if ENV['SCRIPT_FILENAME']
|
49
|
-
@root = File.expand_path((@root || Dir.pwd) + "/assets")
|
49
|
+
@root = File.expand_path((@root || Dir.pwd) + "/assets").untaint
|
50
50
|
|
51
51
|
# Options: typically :name plus either :file or :contents
|
52
52
|
# :name => name to be used for the asset
|
@@ -87,8 +87,8 @@ module Wunderbar
|
|
87
87
|
@@stylesheets << self.new(options)
|
88
88
|
end
|
89
89
|
|
90
|
-
def self.declarations(parent,
|
91
|
-
path =
|
90
|
+
def self.declarations(parent, prefix)
|
91
|
+
path = prefix.to_s + Asset.path
|
92
92
|
nodes = []
|
93
93
|
@@scripts.each do |script|
|
94
94
|
if script.path
|
@@ -119,8 +119,20 @@ module Wunderbar
|
|
119
119
|
base = head.children.index &find_name('base')
|
120
120
|
if base
|
121
121
|
head.children.insert 1, head.children.delete_at(base) if base > 1
|
122
|
-
|
123
|
-
|
122
|
+
|
123
|
+
if @_scope.env.respond_to? :[] and @_scope.env['DOCUMENT_ROOT']
|
124
|
+
# compute relative path from base to the current working directory
|
125
|
+
require 'pathname'
|
126
|
+
base = @_scope.env['DOCUMENT_ROOT'] + head.children[1].attrs[:href]
|
127
|
+
base += 'index.html' if base.end_with? '/'
|
128
|
+
base = Pathname.new(base).parent
|
129
|
+
prefix = Pathname.new(Dir.pwd).relative_path_from(base).to_s + '/'
|
130
|
+
prefix = nil if prefix == './'
|
131
|
+
else
|
132
|
+
prefix = nil
|
133
|
+
end
|
134
|
+
|
135
|
+
head.children.insert 2, *Asset.declarations(head, prefix)
|
124
136
|
else
|
125
137
|
head.children.insert 1, *Asset.declarations(head, nil)
|
126
138
|
end
|
data/lib/wunderbar/sinatra.rb
CHANGED
@@ -215,11 +215,15 @@ Tilt.register '_xhtml', Wunderbar::Template::Xhtml
|
|
215
215
|
|
216
216
|
helpers Wunderbar::SinatraHelpers
|
217
217
|
|
218
|
-
get "/#{Wunderbar::Asset.path}/:name" do
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
218
|
+
get "/#{Wunderbar::Asset.path}/:name" do |name|
|
219
|
+
name.untaint if name =~ /^([-\w]\.?)+$/
|
220
|
+
file = "#{Wunderbar::Asset.root}/#{name}"
|
221
|
+
_text do
|
222
|
+
if File.exist? file
|
223
|
+
last_modified File.mtime(file)
|
224
|
+
content_type Wunderbar::Asset.content_type_for(name)
|
225
|
+
_.headers.merge(response.headers)
|
226
|
+
_ File.read("#{Wunderbar::Asset.root}/#{name}")
|
227
|
+
end
|
224
228
|
end
|
225
229
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
/*
|
2
|
-
AngularJS v1.2.
|
2
|
+
AngularJS v1.2.14
|
3
3
|
(c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
License: MIT
|
5
5
|
*/
|
6
|
-
(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)p.hasOwnProperty(c)
|
6
|
+
(function(H,a,A){'use strict';function D(p,g){g=g||{};a.forEach(g,function(a,c){delete g[c]});for(var c in p)!p.hasOwnProperty(c)||"$"===c.charAt(0)&&"$"===c.charAt(1)||(g[c]=p[c]);return g}var v=a.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;a.module("ngResource",["ng"]).factory("$resource",["$http","$q",function(p,g){function c(a,c){this.template=a;this.defaults=c||{};this.urlParams={}}function t(n,w,l){function r(h,d){var e={};d=x({},w,d);s(d,function(b,d){u(b)&&(b=b());var k;if(b&&
|
7
7
|
b.charAt&&"@"==b.charAt(0)){k=h;var a=b.substr(1);if(null==a||""===a||"hasOwnProperty"===a||!C.test("."+a))throw v("badmember",a);for(var a=a.split("."),f=0,c=a.length;f<c&&k!==A;f++){var g=a[f];k=null!==k?k[g]:A}}else k=b;e[d]=k});return e}function e(a){return a.resource}function f(a){D(a||{},this)}var F=new c(n);l=x({},B,l);s(l,function(h,d){var c=/^(POST|PUT|PATCH)$/i.test(h.method);f[d]=function(b,d,k,w){var q={},n,l,y;switch(arguments.length){case 4:y=w,l=k;case 3:case 2:if(u(d)){if(u(b)){l=
|
8
8
|
b;y=d;break}l=d;y=k}else{q=b;n=d;l=k;break}case 1:u(b)?l=b:c?n=b:q=b;break;case 0:break;default:throw v("badargs",arguments.length);}var t=this instanceof f,m=t?n:h.isArray?[]:new f(n),z={},B=h.interceptor&&h.interceptor.response||e,C=h.interceptor&&h.interceptor.responseError||A;s(h,function(a,b){"params"!=b&&("isArray"!=b&&"interceptor"!=b)&&(z[b]=G(a))});c&&(z.data=n);F.setUrlParams(z,x({},r(n,h.params||{}),q),h.url);q=p(z).then(function(b){var d=b.data,k=m.$promise;if(d){if(a.isArray(d)!==!!h.isArray)throw v("badcfg",
|
9
9
|
h.isArray?"array":"object",a.isArray(d)?"array":"object");h.isArray?(m.length=0,s(d,function(b){m.push(new f(b))})):(D(d,m),m.$promise=k)}m.$resolved=!0;b.resource=m;return b},function(b){m.$resolved=!0;(y||E)(b);return g.reject(b)});q=q.then(function(b){var a=B(b);(l||E)(a,b.headers);return a},C);return t?q:(m.$promise=q,m.$resolved=!1,m)};f.prototype["$"+d]=function(b,a,k){u(b)&&(k=a,a=b,b={});b=f[d].call(this,b,this,a,k);return b.$promise||b}});f.bind=function(a){return t(n,x({},w,a),l)};return f}
|
10
10
|
var B={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}},E=a.noop,s=a.forEach,x=a.extend,G=a.copy,u=a.isFunction;c.prototype={setUrlParams:function(c,g,l){var r=this,e=l||r.template,f,p,h=r.urlParams={};s(e.split(/\W/),function(a){if("hasOwnProperty"===a)throw v("badname");!/^\d+$/.test(a)&&(a&&RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(e))&&(h[a]=!0)});e=e.replace(/\\:/g,":");g=g||{};s(r.urlParams,function(d,c){f=g.hasOwnProperty(c)?
|
11
|
-
g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),p+
|
12
|
-
(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular);
|
11
|
+
g[c]:r.defaults[c];a.isDefined(f)&&null!==f?(p=encodeURIComponent(f).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),e=e.replace(RegExp(":"+c+"(\\W|$)","g"),function(a,c){return p+c})):e=e.replace(RegExp("(/?):"+c+"(\\W|$)","g"),function(a,c,d){return"/"==d.charAt(0)?d:c+d})});e=e.replace(/\/+$/,"")||"/";e=e.replace(/\/\.(?=\w+($|\?))/,".");c.url=e.replace(/\/\\\./,"/.");s(g,function(a,
|
12
|
+
e){r.urlParams[e]||(c.params=c.params||{},c.params[e]=a)})}};return t}])})(window,window.angular);
|
13
13
|
//# sourceMappingURL=angular-resource.min.js.map
|
@@ -1,14 +1,14 @@
|
|
1
1
|
/*
|
2
|
-
AngularJS v1.2.
|
2
|
+
AngularJS v1.2.14
|
3
3
|
(c) 2010-2014 Google, Inc. http://angularjs.org
|
4
4
|
License: MIT
|
5
5
|
*/
|
6
|
-
(function(
|
7
|
-
v);v()}}}function z(e,
|
8
|
-
f={originalPath:a,regexp:a},
|
9
|
-
|
10
|
-
c.path(
|
11
|
-
e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function
|
12
|
-
|
13
|
-
|
6
|
+
(function(n,e,A){'use strict';function x(s,g,k){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,c,b,f,w){function y(){p&&(p.remove(),p=null);h&&(h.$destroy(),h=null);l&&(k.leave(l,function(){p=null}),p=l,l=null)}function v(){var b=s.current&&s.current.locals;if(e.isDefined(b&&b.$template)){var b=a.$new(),d=s.current;l=w(b,function(d){k.enter(d,null,l||c,function(){!e.isDefined(t)||t&&!a.$eval(t)||g()});y()});h=d.scope=b;h.$emit("$viewContentLoaded");h.$eval(u)}else y()}
|
7
|
+
var h,l,p,t=b.autoscroll,u=b.onload||"";a.$on("$routeChangeSuccess",v);v()}}}function z(e,g,k){return{restrict:"ECA",priority:-400,link:function(a,c){var b=k.current,f=b.locals;c.html(f.$template);var w=e(c.contents());b.controller&&(f.$scope=a,f=g(b.controller,f),b.controllerAs&&(a[b.controllerAs]=f),c.data("$ngControllerController",f),c.children().data("$ngControllerController",f));w(a)}}}n=e.module("ngRoute",["ng"]).provider("$route",function(){function s(a,c){return e.extend(new (e.extend(function(){},
|
8
|
+
{prototype:a})),c)}function g(a,e){var b=e.caseInsensitiveMatch,f={originalPath:a,regexp:a},k=f.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,e,b,c){a="?"===c?c:null;c="*"===c?c:null;k.push({name:b,optional:!!a});e=e||"";return""+(a?"":e)+"(?:"+(a?e:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");f.regexp=RegExp("^"+a+"$",b?"i":"");return f}var k={};this.when=function(a,c){k[a]=e.extend({reloadOnSearch:!0},c,a&&g(a,c));if(a){var b=
|
9
|
+
"/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";k[b]=e.extend({redirectTo:a},g(b,c))}return this};this.otherwise=function(a){this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$http","$templateCache","$sce",function(a,c,b,f,g,n,v,h){function l(){var d=p(),m=r.current;if(d&&m&&d.$$route===m.$$route&&e.equals(d.pathParams,m.pathParams)&&!d.reloadOnSearch&&!u)m.params=d.params,e.copy(m.params,b),a.$broadcast("$routeUpdate",m);else if(d||m)u=!1,a.$broadcast("$routeChangeStart",
|
10
|
+
d,m),(r.current=d)&&d.redirectTo&&(e.isString(d.redirectTo)?c.path(t(d.redirectTo,d.params)).search(d.params).replace():c.url(d.redirectTo(d.pathParams,c.path(),c.search())).replace()),f.when(d).then(function(){if(d){var a=e.extend({},d.resolve),c,b;e.forEach(a,function(d,c){a[c]=e.isString(d)?g.get(d):g.invoke(d)});e.isDefined(c=d.template)?e.isFunction(c)&&(c=c(d.params)):e.isDefined(b=d.templateUrl)&&(e.isFunction(b)&&(b=b(d.params)),b=h.getTrustedResourceUrl(b),e.isDefined(b)&&(d.loadedTemplateUrl=
|
11
|
+
b,c=n.get(b,{cache:v}).then(function(a){return a.data})));e.isDefined(c)&&(a.$template=c);return f.all(a)}}).then(function(c){d==r.current&&(d&&(d.locals=c,e.copy(d.params,b)),a.$broadcast("$routeChangeSuccess",d,m))},function(c){d==r.current&&a.$broadcast("$routeChangeError",d,m,c)})}function p(){var a,b;e.forEach(k,function(f,k){var q;if(q=!b){var g=c.path();q=f.keys;var l={};if(f.regexp)if(g=f.regexp.exec(g)){for(var h=1,p=g.length;h<p;++h){var n=q[h-1],r="string"==typeof g[h]?decodeURIComponent(g[h]):
|
12
|
+
g[h];n&&r&&(l[n.name]=r)}q=l}else q=null;else q=null;q=a=q}q&&(b=s(f,{params:e.extend({},c.search(),a),pathParams:a}),b.$$route=f)});return b||k[null]&&s(k[null],{params:{},pathParams:{}})}function t(a,c){var b=[];e.forEach((a||"").split(":"),function(a,d){if(0===d)b.push(a);else{var e=a.match(/(\w+)(.*)/),f=e[1];b.push(c[f]);b.push(e[2]||"");delete c[f]}});return b.join("")}var u=!1,r={routes:k,reload:function(){u=!0;a.$evalAsync(l)}};a.$on("$locationChangeSuccess",l);return r}]});n.provider("$routeParams",
|
13
|
+
function(){this.$get=function(){return{}}});n.directive("ngView",x);n.directive("ngView",z);x.$inject=["$route","$anchorScroll","$animate"];z.$inject=["$compile","$controller","$route"]})(window,window.angular);
|
14
14
|
//# sourceMappingURL=angular-route.min.js.map
|