scms 4.1.2 → 4.2.0
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/assets/blank-template/_config.yml +1 -37
- data/assets/blank-template/_layouts/home-layout.erb +85 -0
- data/assets/blank-template/_layouts/layout.erb +1 -0
- data/assets/blank-template/_pages/cleanurl/_config.yml +1 -0
- data/assets/blank-template/_pages/cleanurl/intro.md +1 -0
- data/assets/blank-template/_pages/cleanurl/leadin.md +1 -0
- data/assets/blank-template/_pages/cleanurl/main.erb +69 -0
- data/assets/blank-template/_pages/cleanurl/sidenav.erb +5 -0
- data/assets/blank-template/_pages/getting-started/intro.md +1 -0
- data/assets/blank-template/_pages/getting-started/leadin.md +1 -0
- data/assets/blank-template/_pages/getting-started/main.erb +67 -0
- data/assets/blank-template/_pages/getting-started/sidenav.erb +5 -0
- data/assets/blank-template/_pages/index/_config.yml +1 -0
- data/assets/blank-template/_pages/index/carousel.erb +1 -0
- data/assets/blank-template/_pages/index/main.erb +1 -0
- data/assets/blank-template/css/bootstrap-theme.css +459 -0
- data/assets/blank-template/css/bootstrap-theme.min.css +9 -0
- data/assets/blank-template/css/bootstrap.css +7059 -0
- data/assets/blank-template/css/bootstrap.min.css +9 -0
- data/assets/blank-template/css/carousel.css +1 -0
- data/assets/blank-template/css/carousel.scss +151 -0
- data/assets/blank-template/css/layout.css +6 -0
- data/assets/blank-template/css/layout.scss +459 -0
- data/assets/blank-template/fonts/glyphicons-halflings-regular.eot +0 -0
- data/assets/blank-template/fonts/glyphicons-halflings-regular.svg +229 -0
- data/assets/blank-template/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/assets/blank-template/fonts/glyphicons-halflings-regular.woff +0 -0
- data/assets/blank-template/js/application.js +61 -0
- data/assets/blank-template/js/bootstrap.js +2002 -0
- data/assets/blank-template/js/bootstrap.min.js +9 -0
- data/assets/blank-template/js/jquery-1.10.2.min.js +6 -0
- data/assets/blank-template/js/shims/holder.js +404 -0
- data/assets/blank-template/js/shims/html5shiv.js +8 -0
- data/assets/blank-template/js/shims/respond.min.js +6 -0
- data/assets/blank-template-v1/_config.yml +37 -0
- data/assets/{blank-template → blank-template-v1}/_layouts/skin.erb.html +0 -0
- data/assets/{blank-template → blank-template-v1}/_s3config.template.yml +0 -0
- data/assets/{blank-template → blank-template-v1}/_source/scripts/bootstrap.js +0 -0
- data/assets/{blank-template → blank-template-v1}/_source/scripts/script.js +0 -0
- data/assets/{blank-template → blank-template-v1}/_source/stylesheets/bootstrap-responsive.css +0 -0
- data/assets/{blank-template → blank-template-v1}/_source/stylesheets/bootstrap.css +0 -0
- data/assets/{blank-template → blank-template-v1}/_source/stylesheets/style.css +0 -0
- data/assets/{blank-template → blank-template-v1}/_views/about/intro.html +0 -0
- data/assets/{blank-template → blank-template-v1}/_views/about/main.html +0 -0
- data/assets/{blank-template → blank-template-v1}/_views/home/intro.md +0 -0
- data/assets/{blank-template → blank-template-v1}/_views/reuse.erb +0 -0
- data/assets/{blank-template → blank-template-v1}/images/glyphicons-halflings-white.png +0 -0
- data/assets/{blank-template → blank-template-v1}/images/glyphicons-halflings.png +0 -0
- data/assets/{blank-template → blank-template-v1}/js/jquery-1.8.2.min.js +0 -0
- data/assets/{blank-template → blank-template-v1}/robots.txt +0 -0
- data/lib/scms/scms-bundler.rb +108 -0
- data/lib/scms/scms-watcher.rb +52 -30
- data/lib/scms/version.rb +1 -1
- data/lib/scms.rb +24 -8
- metadata +52 -17
@@ -0,0 +1,404 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
Holder - 2.1 - client side image placeholders
|
4
|
+
(c) 2012-2013 Ivan Malopinsky / http://imsky.co
|
5
|
+
|
6
|
+
Provided under the MIT License.
|
7
|
+
Commercial use requires attribution.
|
8
|
+
|
9
|
+
*/
|
10
|
+
|
11
|
+
var Holder = Holder || {};
|
12
|
+
(function (app, win) {
|
13
|
+
|
14
|
+
var preempted = false,
|
15
|
+
fallback = false,
|
16
|
+
canvas = document.createElement('canvas');
|
17
|
+
|
18
|
+
if (!canvas.getContext) {
|
19
|
+
fallback = true;
|
20
|
+
} else {
|
21
|
+
if (canvas.toDataURL("image/png")
|
22
|
+
.indexOf("data:image/png") < 0) {
|
23
|
+
//Android doesn't support data URI
|
24
|
+
fallback = true;
|
25
|
+
} else {
|
26
|
+
var ctx = canvas.getContext("2d");
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
var dpr = 1, bsr = 1;
|
31
|
+
|
32
|
+
if(!fallback){
|
33
|
+
dpr = window.devicePixelRatio || 1,
|
34
|
+
bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
|
35
|
+
}
|
36
|
+
|
37
|
+
var ratio = dpr / bsr;
|
38
|
+
|
39
|
+
//getElementsByClassName polyfill
|
40
|
+
document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s})
|
41
|
+
|
42
|
+
//getComputedStyle polyfill
|
43
|
+
window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this})
|
44
|
+
|
45
|
+
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications
|
46
|
+
function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}
|
47
|
+
|
48
|
+
//https://gist.github.com/991057 by Jed Schmidt with modifications
|
49
|
+
function selector(a){
|
50
|
+
a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]);
|
51
|
+
var ret=[]; b!==null&&(b.length?ret=b:b.length===0?ret=b:ret=[b]); return ret;
|
52
|
+
}
|
53
|
+
|
54
|
+
//shallow object property extend
|
55
|
+
function extend(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c}
|
56
|
+
|
57
|
+
//hasOwnProperty polyfill
|
58
|
+
if (!Object.prototype.hasOwnProperty)
|
59
|
+
/*jshint -W001, -W103 */
|
60
|
+
Object.prototype.hasOwnProperty = function(prop) {
|
61
|
+
var proto = this.__proto__ || this.constructor.prototype;
|
62
|
+
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]);
|
63
|
+
}
|
64
|
+
/*jshint +W001, +W103 */
|
65
|
+
|
66
|
+
function text_size(width, height, template) {
|
67
|
+
height = parseInt(height, 10);
|
68
|
+
width = parseInt(width, 10);
|
69
|
+
var bigSide = Math.max(height, width)
|
70
|
+
var smallSide = Math.min(height, width)
|
71
|
+
var scale = 1 / 12;
|
72
|
+
var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale);
|
73
|
+
return {
|
74
|
+
height: Math.round(Math.max(template.size, newHeight))
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
function draw(ctx, dimensions, template, ratio, literal) {
|
79
|
+
var ts = text_size(dimensions.width, dimensions.height, template);
|
80
|
+
var text_height = ts.height;
|
81
|
+
var width = dimensions.width * ratio,
|
82
|
+
height = dimensions.height * ratio;
|
83
|
+
var font = template.font ? template.font : "sans-serif";
|
84
|
+
canvas.width = width;
|
85
|
+
canvas.height = height;
|
86
|
+
ctx.textAlign = "center";
|
87
|
+
ctx.textBaseline = "middle";
|
88
|
+
ctx.fillStyle = template.background;
|
89
|
+
ctx.fillRect(0, 0, width, height);
|
90
|
+
ctx.fillStyle = template.foreground;
|
91
|
+
ctx.font = "bold " + text_height + "px " + font;
|
92
|
+
var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height));
|
93
|
+
if (literal) {
|
94
|
+
text = template.literalText;
|
95
|
+
}
|
96
|
+
var text_width = ctx.measureText(text).width;
|
97
|
+
if (text_width / width >= 0.75) {
|
98
|
+
text_height = Math.floor(text_height * 0.75 * (width / text_width));
|
99
|
+
}
|
100
|
+
//Resetting font size if necessary
|
101
|
+
ctx.font = "bold " + (text_height * ratio) + "px " + font;
|
102
|
+
ctx.fillText(text, (width / 2), (height / 2), width);
|
103
|
+
return canvas.toDataURL("image/png");
|
104
|
+
}
|
105
|
+
|
106
|
+
function render(mode, el, holder, src) {
|
107
|
+
var dimensions = holder.dimensions,
|
108
|
+
theme = holder.theme,
|
109
|
+
text = holder.text ? decodeURIComponent(holder.text) : holder.text;
|
110
|
+
var dimensions_caption = dimensions.width + "x" + dimensions.height;
|
111
|
+
theme = (text ? extend(theme, {
|
112
|
+
text: text
|
113
|
+
}) : theme);
|
114
|
+
theme = (holder.font ? extend(theme, {
|
115
|
+
font: holder.font
|
116
|
+
}) : theme);
|
117
|
+
el.setAttribute("data-src", src);
|
118
|
+
theme.literalText = dimensions_caption;
|
119
|
+
holder.originalTheme = holder.theme;
|
120
|
+
holder.theme = theme;
|
121
|
+
|
122
|
+
if (mode == "image") {
|
123
|
+
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
124
|
+
if (fallback || !holder.auto) {
|
125
|
+
el.style.width = dimensions.width + "px";
|
126
|
+
el.style.height = dimensions.height + "px";
|
127
|
+
}
|
128
|
+
if (fallback) {
|
129
|
+
el.style.backgroundColor = theme.background;
|
130
|
+
} else {
|
131
|
+
el.setAttribute("src", draw(ctx, dimensions, theme, ratio));
|
132
|
+
}
|
133
|
+
} else if (mode == "background") {
|
134
|
+
if (!fallback) {
|
135
|
+
el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")";
|
136
|
+
el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px";
|
137
|
+
}
|
138
|
+
} else if (mode == "fluid") {
|
139
|
+
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption);
|
140
|
+
if (dimensions.height.slice(-1) == "%") {
|
141
|
+
el.style.height = dimensions.height
|
142
|
+
} else {
|
143
|
+
el.style.height = dimensions.height + "px"
|
144
|
+
}
|
145
|
+
if (dimensions.width.slice(-1) == "%") {
|
146
|
+
el.style.width = dimensions.width
|
147
|
+
} else {
|
148
|
+
el.style.width = dimensions.width + "px"
|
149
|
+
}
|
150
|
+
if (el.style.display == "inline" || el.style.display === "") {
|
151
|
+
el.style.display = "block";
|
152
|
+
}
|
153
|
+
if (fallback) {
|
154
|
+
el.style.backgroundColor = theme.background;
|
155
|
+
} else {
|
156
|
+
el.holderData = holder;
|
157
|
+
fluid_images.push(el);
|
158
|
+
fluid_update(el);
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
function fluid_update(element) {
|
164
|
+
var images;
|
165
|
+
if (element.nodeType == null) {
|
166
|
+
images = fluid_images;
|
167
|
+
} else {
|
168
|
+
images = [element]
|
169
|
+
}
|
170
|
+
for (var i in images) {
|
171
|
+
var el = images[i]
|
172
|
+
if (el.holderData) {
|
173
|
+
var holder = el.holderData;
|
174
|
+
el.setAttribute("src", draw(ctx, {
|
175
|
+
height: el.clientHeight,
|
176
|
+
width: el.clientWidth
|
177
|
+
}, holder.theme, ratio, !! holder.literal));
|
178
|
+
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
|
182
|
+
function parse_flags(flags, options) {
|
183
|
+
var ret = {
|
184
|
+
theme: settings.themes.gray
|
185
|
+
};
|
186
|
+
var render = false;
|
187
|
+
for (sl = flags.length, j = 0; j < sl; j++) {
|
188
|
+
var flag = flags[j];
|
189
|
+
if (app.flags.dimensions.match(flag)) {
|
190
|
+
render = true;
|
191
|
+
ret.dimensions = app.flags.dimensions.output(flag);
|
192
|
+
} else if (app.flags.fluid.match(flag)) {
|
193
|
+
render = true;
|
194
|
+
ret.dimensions = app.flags.fluid.output(flag);
|
195
|
+
ret.fluid = true;
|
196
|
+
} else if (app.flags.literal.match(flag)) {
|
197
|
+
ret.literal = true;
|
198
|
+
} else if (app.flags.colors.match(flag)) {
|
199
|
+
ret.theme = app.flags.colors.output(flag);
|
200
|
+
} else if (options.themes[flag]) {
|
201
|
+
//If a theme is specified, it will override custom colors
|
202
|
+
ret.theme = options.themes[flag];
|
203
|
+
} else if (app.flags.font.match(flag)) {
|
204
|
+
ret.font = app.flags.font.output(flag);
|
205
|
+
} else if (app.flags.auto.match(flag)) {
|
206
|
+
ret.auto = true;
|
207
|
+
} else if (app.flags.text.match(flag)) {
|
208
|
+
ret.text = app.flags.text.output(flag);
|
209
|
+
}
|
210
|
+
}
|
211
|
+
return render ? ret : false;
|
212
|
+
}
|
213
|
+
var fluid_images = [];
|
214
|
+
var settings = {
|
215
|
+
domain: "holder.js",
|
216
|
+
images: "img",
|
217
|
+
bgnodes: ".holderjs",
|
218
|
+
themes: {
|
219
|
+
"gray": {
|
220
|
+
background: "#eee",
|
221
|
+
foreground: "#aaa",
|
222
|
+
size: 12
|
223
|
+
},
|
224
|
+
"social": {
|
225
|
+
background: "#3a5a97",
|
226
|
+
foreground: "#fff",
|
227
|
+
size: 12
|
228
|
+
},
|
229
|
+
"industrial": {
|
230
|
+
background: "#434A52",
|
231
|
+
foreground: "#C2F200",
|
232
|
+
size: 12
|
233
|
+
}
|
234
|
+
},
|
235
|
+
stylesheet: ""
|
236
|
+
};
|
237
|
+
app.flags = {
|
238
|
+
dimensions: {
|
239
|
+
regex: /^(\d+)x(\d+)$/,
|
240
|
+
output: function (val) {
|
241
|
+
var exec = this.regex.exec(val);
|
242
|
+
return {
|
243
|
+
width: +exec[1],
|
244
|
+
height: +exec[2]
|
245
|
+
}
|
246
|
+
}
|
247
|
+
},
|
248
|
+
fluid: {
|
249
|
+
regex: /^([0-9%]+)x([0-9%]+)$/,
|
250
|
+
output: function (val) {
|
251
|
+
var exec = this.regex.exec(val);
|
252
|
+
return {
|
253
|
+
width: exec[1],
|
254
|
+
height: exec[2]
|
255
|
+
}
|
256
|
+
}
|
257
|
+
},
|
258
|
+
colors: {
|
259
|
+
regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i,
|
260
|
+
output: function (val) {
|
261
|
+
var exec = this.regex.exec(val);
|
262
|
+
return {
|
263
|
+
size: settings.themes.gray.size,
|
264
|
+
foreground: "#" + exec[2],
|
265
|
+
background: "#" + exec[1]
|
266
|
+
}
|
267
|
+
}
|
268
|
+
},
|
269
|
+
text: {
|
270
|
+
regex: /text\:(.*)/,
|
271
|
+
output: function (val) {
|
272
|
+
return this.regex.exec(val)[1];
|
273
|
+
}
|
274
|
+
},
|
275
|
+
font: {
|
276
|
+
regex: /font\:(.*)/,
|
277
|
+
output: function (val) {
|
278
|
+
return this.regex.exec(val)[1];
|
279
|
+
}
|
280
|
+
},
|
281
|
+
auto: {
|
282
|
+
regex: /^auto$/
|
283
|
+
},
|
284
|
+
literal: {
|
285
|
+
regex: /^literal$/
|
286
|
+
}
|
287
|
+
}
|
288
|
+
for (var flag in app.flags) {
|
289
|
+
if (!app.flags.hasOwnProperty(flag)) continue;
|
290
|
+
app.flags[flag].match = function (val) {
|
291
|
+
return val.match(this.regex)
|
292
|
+
}
|
293
|
+
}
|
294
|
+
app.add_theme = function (name, theme) {
|
295
|
+
name != null && theme != null && (settings.themes[name] = theme);
|
296
|
+
return app;
|
297
|
+
};
|
298
|
+
app.add_image = function (src, el) {
|
299
|
+
var node = selector(el);
|
300
|
+
if (node.length) {
|
301
|
+
for (var i = 0, l = node.length; i < l; i++) {
|
302
|
+
var img = document.createElement("img")
|
303
|
+
img.setAttribute("data-src", src);
|
304
|
+
node[i].appendChild(img);
|
305
|
+
}
|
306
|
+
}
|
307
|
+
return app;
|
308
|
+
};
|
309
|
+
app.run = function (o) {
|
310
|
+
var options = extend(settings, o),
|
311
|
+
images = [],
|
312
|
+
imageNodes = [],
|
313
|
+
bgnodes = [];
|
314
|
+
if (typeof (options.images) == "string") {
|
315
|
+
imageNodes = selector(options.images);
|
316
|
+
} else if (window.NodeList && options.images instanceof window.NodeList) {
|
317
|
+
imageNodes = options.images;
|
318
|
+
} else if (window.Node && options.images instanceof window.Node) {
|
319
|
+
imageNodes = [options.images];
|
320
|
+
}
|
321
|
+
if (typeof (options.bgnodes) == "string") {
|
322
|
+
bgnodes = selector(options.bgnodes);
|
323
|
+
} else if (window.NodeList && options.elements instanceof window.NodeList) {
|
324
|
+
bgnodes = options.bgnodes;
|
325
|
+
} else if (window.Node && options.bgnodes instanceof window.Node) {
|
326
|
+
bgnodes = [options.bgnodes];
|
327
|
+
}
|
328
|
+
preempted = true;
|
329
|
+
for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]);
|
330
|
+
var holdercss = document.getElementById("holderjs-style");
|
331
|
+
if (!holdercss) {
|
332
|
+
holdercss = document.createElement("style");
|
333
|
+
holdercss.setAttribute("id", "holderjs-style");
|
334
|
+
holdercss.type = "text/css";
|
335
|
+
document.getElementsByTagName("head")[0].appendChild(holdercss);
|
336
|
+
}
|
337
|
+
if (!options.nocss) {
|
338
|
+
if (holdercss.styleSheet) {
|
339
|
+
holdercss.styleSheet.cssText += options.stylesheet;
|
340
|
+
} else {
|
341
|
+
holdercss.appendChild(document.createTextNode(options.stylesheet));
|
342
|
+
}
|
343
|
+
}
|
344
|
+
var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)");
|
345
|
+
for (var l = bgnodes.length, i = 0; i < l; i++) {
|
346
|
+
var src = window.getComputedStyle(bgnodes[i], null)
|
347
|
+
.getPropertyValue("background-image");
|
348
|
+
var flags = src.match(cssregex);
|
349
|
+
var bgsrc = bgnodes[i].getAttribute("data-background-src");
|
350
|
+
if (flags) {
|
351
|
+
var holder = parse_flags(flags[1].split("/"), options);
|
352
|
+
if (holder) {
|
353
|
+
render("background", bgnodes[i], holder, src);
|
354
|
+
}
|
355
|
+
} else if (bgsrc != null) {
|
356
|
+
var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1)
|
357
|
+
.split("/"), options);
|
358
|
+
if (holder) {
|
359
|
+
render("background", bgnodes[i], holder, src);
|
360
|
+
}
|
361
|
+
}
|
362
|
+
}
|
363
|
+
for (l = images.length, i = 0; i < l; i++) {
|
364
|
+
var attr_data_src, attr_src;
|
365
|
+
attr_src = attr_data_src = src = null;
|
366
|
+
try {
|
367
|
+
attr_src = images[i].getAttribute("src");
|
368
|
+
attr_datasrc = images[i].getAttribute("data-src");
|
369
|
+
} catch (e) {}
|
370
|
+
if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) {
|
371
|
+
src = attr_src;
|
372
|
+
} else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) {
|
373
|
+
src = attr_datasrc;
|
374
|
+
}
|
375
|
+
if (src) {
|
376
|
+
var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1)
|
377
|
+
.split("/"), options);
|
378
|
+
if (holder) {
|
379
|
+
if (holder.fluid) {
|
380
|
+
render("fluid", images[i], holder, src)
|
381
|
+
} else {
|
382
|
+
render("image", images[i], holder, src);
|
383
|
+
}
|
384
|
+
}
|
385
|
+
}
|
386
|
+
}
|
387
|
+
return app;
|
388
|
+
};
|
389
|
+
contentLoaded(win, function () {
|
390
|
+
if (window.addEventListener) {
|
391
|
+
window.addEventListener("resize", fluid_update, false);
|
392
|
+
window.addEventListener("orientationchange", fluid_update, false);
|
393
|
+
} else {
|
394
|
+
window.attachEvent("onresize", fluid_update)
|
395
|
+
}
|
396
|
+
preempted || app.run();
|
397
|
+
});
|
398
|
+
if (typeof define === "function" && define.amd) {
|
399
|
+
define([], function () {
|
400
|
+
return app;
|
401
|
+
});
|
402
|
+
}
|
403
|
+
|
404
|
+
})(Holder, window);
|
@@ -0,0 +1,8 @@
|
|
1
|
+
/*
|
2
|
+
HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
3
|
+
*/
|
4
|
+
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
|
5
|
+
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}</style>";
|
6
|
+
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
|
7
|
+
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);
|
8
|
+
if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
|
@@ -0,0 +1,6 @@
|
|
1
|
+
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
|
2
|
+
/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
|
3
|
+
window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document);
|
4
|
+
|
5
|
+
/*! Respond.js v1.3.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
|
6
|
+
(function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this);
|
@@ -0,0 +1,37 @@
|
|
1
|
+
template: _layouts/skin.erb.html # The website skin (erb template)
|
2
|
+
#rooturl: http://www.mywebsite.com/ #Whats the website root when published - All references in html will be replaced with this
|
3
|
+
# Define your pages here
|
4
|
+
pages:
|
5
|
+
- index:
|
6
|
+
generate: index.html
|
7
|
+
navigation: Home
|
8
|
+
title: My Homepage
|
9
|
+
description: Meta description
|
10
|
+
keywords: "CMS, S3, Ruby"
|
11
|
+
views:
|
12
|
+
intro: _views/home/intro.md
|
13
|
+
main: "_views/reuse.erb?h1=Heading 1&h2=Heading 2&h3=Heading 3"
|
14
|
+
- about:
|
15
|
+
generate: about.html
|
16
|
+
navigation: About
|
17
|
+
views:
|
18
|
+
intro: _views/about/intro.html
|
19
|
+
main: "_views/reuse.erb?h1=Reuse 1&h2=Reuse 2&h3=Reuse 3"
|
20
|
+
- contact: #Pageless for nav only
|
21
|
+
navigation: contact
|
22
|
+
navigation_meta: contactform
|
23
|
+
url: about:blank
|
24
|
+
|
25
|
+
# Define your bundles here (versioning is recomended if your caching assets)
|
26
|
+
bundles:
|
27
|
+
- script:
|
28
|
+
generate: js/script.bundle.min-v2.1.1.js
|
29
|
+
files:
|
30
|
+
- _source/scripts/bootstrap.js
|
31
|
+
- _source/scripts/script.js
|
32
|
+
- style:
|
33
|
+
generate: css/style.bundle-1.0.css
|
34
|
+
files:
|
35
|
+
- _source/stylesheets/bootstrap.css
|
36
|
+
- _source/stylesheets/bootstrap-responsive.css
|
37
|
+
- _source/stylesheets/style.css
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/assets/{blank-template → blank-template-v1}/_source/stylesheets/bootstrap-responsive.css
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module ScmsBundler
|
2
|
+
require 'fileutils'
|
3
|
+
require 'scms/scms-bundler.rb'
|
4
|
+
|
5
|
+
def ScmsBundler.run()
|
6
|
+
Dir.glob('**/*.bundle').each do|bundle|
|
7
|
+
ScmsBundler.bundle(bundle)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def ScmsBundler.bundle(bundle)
|
12
|
+
puts "Parsing bundle: #{bundle}"
|
13
|
+
|
14
|
+
|
15
|
+
content = ""
|
16
|
+
if File::exists?(bundle)
|
17
|
+
wd = File.dirname(bundle)
|
18
|
+
|
19
|
+
|
20
|
+
File.readlines(bundle).each do |line|
|
21
|
+
bundleFile = line.strip
|
22
|
+
bundleFile = bundleFile.gsub('\n', '')
|
23
|
+
|
24
|
+
next if bundleFile == nil
|
25
|
+
next if bundleFile == ""
|
26
|
+
|
27
|
+
if !line.match(/^#/)
|
28
|
+
b = File.join(wd, bundleFile)
|
29
|
+
puts "Including: #{line}"
|
30
|
+
if File::exists?(b)
|
31
|
+
content += File.read(b) + "\n"
|
32
|
+
else
|
33
|
+
puts "Can not read: #{b}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
out = ScmsBundler.getGeneratedBundleName(bundle)
|
39
|
+
begin
|
40
|
+
File.open(out, 'w') {|f| f.write(content) }
|
41
|
+
ScmsUtils.successLog("Created: #{out}")
|
42
|
+
rescue Exception=>e
|
43
|
+
ScmsUtils.errLog("Error creating bundle: #{out}")
|
44
|
+
ScmsUtils.errLog(e.message)
|
45
|
+
ScmsUtils.log(e.backtrace.inspect)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def ScmsBundler.watch()
|
51
|
+
# Listen to changes to files withing a bundle
|
52
|
+
Dir.glob('**/*.bundle').each do|bundle|
|
53
|
+
ScmsBundler.watchBundle(bundle)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def ScmsBundler.watchBundle(bundle)
|
58
|
+
files = ScmsBundler.getBundleFiles(bundle)
|
59
|
+
Thread.new {
|
60
|
+
FileWatcher.new(files).watch do |filename|
|
61
|
+
begin
|
62
|
+
ScmsBundler.bundle(bundle)
|
63
|
+
rescue Exception=>e
|
64
|
+
ScmsUtils.errLog(e.message)
|
65
|
+
ScmsUtils.log(e.backtrace.inspect)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
def ScmsBundler.getBundleFiles(bundle)
|
72
|
+
files = []
|
73
|
+
if File::exists?(bundle)
|
74
|
+
wd = File.dirname(bundle)
|
75
|
+
File.readlines(bundle).each do |line|
|
76
|
+
bundleFile = line.strip
|
77
|
+
bundleFile = bundleFile.gsub('\n', '')
|
78
|
+
|
79
|
+
next if bundleFile == nil
|
80
|
+
next if bundleFile == ""
|
81
|
+
next if line.match(/^generate:/)
|
82
|
+
|
83
|
+
if !line.match(/^#/)
|
84
|
+
b = File.join(wd, bundleFile)
|
85
|
+
if File::exists?(b)
|
86
|
+
files << b
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
return files
|
92
|
+
end
|
93
|
+
|
94
|
+
def ScmsBundler.getGeneratedBundleName(bundle)
|
95
|
+
name = bundle.gsub(".bundle", "")
|
96
|
+
|
97
|
+
if File::exists?(bundle)
|
98
|
+
wd = File.dirname(bundle)
|
99
|
+
File.readlines(bundle).each do |line|
|
100
|
+
if line.match(/^generate:/)
|
101
|
+
name = File.join(wd, line.gsub("generate:", "").strip)
|
102
|
+
break
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
return name
|
107
|
+
end
|
108
|
+
end
|