├── .gitignore ├── .jshintrc ├── Gruntfile.js ├── README.md ├── bower.json ├── index.html ├── jquery.scrollchaser.js ├── jquery.scrollchaser.min.js ├── jquery.scrollchaser.min.map ├── media ├── font │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ └── fontawesome-webfont.woff ├── javascripts │ ├── jquery-2.0.3.js │ ├── main.js │ ├── shBrushJScript.js │ ├── shCore.js │ └── zepto-1.0.js └── stylesheets │ ├── bootstrap.css │ ├── font-awesome.css │ ├── main.css │ ├── shCoreDefault.css │ └── syntax.css └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | bower_components 3 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "strict" : true, 3 | "indent" : 2, 4 | "maxlen" : 80, 5 | "unused" : true, 6 | "eqnull" : true, 7 | } 8 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /*jshint node: true */ 2 | 3 | module.exports = function (grunt) { 4 | 5 | 'use strict'; 6 | 7 | grunt.loadNpmTasks('grunt-contrib-uglify'); 8 | grunt.loadNpmTasks('grunt-contrib-connect'); 9 | 10 | grunt.initConfig({ 11 | pkg: grunt.file.readJSON('package.json'), 12 | 13 | uglify: { 14 | options: { 15 | banner: 16 | '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + 17 | '<%= grunt.template.today("yyyy-mm-dd") %> */', 18 | sourceMap: 'jquery.scrollchaser.min.map' 19 | }, 20 | all: { 21 | files: { 22 | 'jquery.scrollchaser.min.js': [ 23 | 'jquery.scrollchaser.js' 24 | ] 25 | } 26 | } 27 | }, 28 | 29 | connect: { 30 | server: { 31 | options: { 32 | port: 8000, 33 | base: '../', 34 | keepalive: true 35 | } 36 | } 37 | } 38 | }); 39 | 40 | grunt.registerTask('default', ['connect']); 41 | }; 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Sticky boxes are fond of standing out 2 | ===================================== 3 | 4 | [Demo and document](http://yuku-t.com/jquery-scrollchaser) 5 | 6 | License 7 | ------- 8 | 9 | MIT 10 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-scrollchaser", 3 | "version": "0.0.6", 4 | "homepage": "https://github.com/yuku-t/jquery-scrollchaser", 5 | "authors": [ 6 | "Yuku Takahashi " 7 | ], 8 | "description": "jquery", 9 | "main": "jquery.scrollchaser.js", 10 | "keywords": [ 11 | "jquery", 12 | "scrollchaser" 13 | ], 14 | "license": "MIT", 15 | "ignore": [ 16 | "**/.*", 17 | "node_modules", 18 | "bower_components", 19 | "test", 20 | "tests" 21 | ], 22 | "dependencies": { 23 | "jquery": "*" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jQuery.scrollChaser 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 | 15 |
16 |
17 | 25 | 27 | 28 | Fork me on GitHub. 29 | 30 |
31 |
32 | 33 | 34 |
35 |

Sample 1

36 |
37 |
.wrapper-1
38 |
39 |
40 |
41 |
 42 | $('.scroll-chaser-1').scrollChaser({
 43 |     wrapper: '.wrapper-1'  // OR $('.wrapper-1')
 44 | });
 45 | 
46 | If wrapper is not given, the 47 | box will chase to the bottom of the page. 48 |
49 |
50 |
51 |
52 | .scroll-chaser-1 53 |
54 |
55 |
56 |
57 |
58 | 59 | 60 |
61 |

Sample 2

62 |
63 |
.wrapper-2
64 |
65 |
66 |
67 |
 68 | $('.scroll-chaser-2').scrollChaser({
 69 |     wrapper: '.wrapper-2'
 70 | });
 71 | 
72 | Sidebar can contain other contents. 73 |
74 |
75 |
76 |
77 | other sidebar contents 78 |
79 |
80 | .scroll-chaser-2 81 |
82 |
83 |
84 |
85 |
86 | 87 | 88 |
89 |

Sample 3

90 |
91 |
.wrapper-3
92 |
93 |
94 |
95 |
 96 | $('.scroll-chaser-3').scrollChaser({
 97 |     wrapper: '.wrapper-3'  // OR $('.wrapper-3')
 98 | });
 99 | 
100 | Is a sidebar taller than a main contents? 101 | No problem :) 102 |
103 |
104 |
105 |
107 | .scroll-chaser-3 108 |
109 |
110 |
111 |
112 |
113 | 114 | 115 |
116 |

Sample 4

117 |
118 |
.wrapper-4
119 |
120 |
121 |
122 |
123 | $('.scroll-chaser-4').scrollChaser({
124 |     wrapper:   '.wrapper-4',
125 |     offsetTop: 20
126 | });
127 | 
128 | Use offsetTop option to insert 129 | pads on the box. 130 |
131 |
132 |
133 |
134 | .scroll-chaser-4 135 |
136 |
137 |
138 |
139 |
140 | 141 | 142 |
143 |

Sample 5

144 |
145 |
.wrapper-5
146 |
147 |
148 |
149 |
150 | $('.scroll-chaser-5').scrollChaser({
151 |     wrapper:      '.wrapper-5',
152 |     offsetBottom: 40
153 | });
154 | 
155 | Use offsetBottom option to 156 | insert pads under the box. 157 |
158 |
159 | margin-bottom: 40px; 160 |
161 |
162 |
163 |
164 | .scroll-chaser-5 165 |
166 |
167 |
168 |
169 |
170 | 171 | 172 |
173 |

Sample 6

174 |
175 |
.wrapper-6
176 |
177 |
178 |
179 |
180 | $('.scroll-chaser-6').scrollChaser({
181 |     wrapper:  '.wrapper-6',
182 |     throttle: 1000  // Default 10
183 | });
184 | 
185 | If you have some performance problem, use 186 | throttle option to decrease 187 | the frequency of calculation. If the option 188 | is given, the calculation will be executed 189 | once in throttle msec. 190 |
191 |
192 |
193 |
194 | .scroll-chaser-6 195 |
196 |
197 |
198 |
199 |
200 | 201 | 202 |
203 |

Sample 7

204 |
205 |
.wrapper-7
206 |
207 |
208 |
209 |
210 | $('.scroll-chaser-7').scrollChaser({
211 |     wrapper:      '.wrapper-7',
212 |     offsetTop:    20,
213 |     offsetBottom: 40
214 | });
215 | 
216 | Combine options. 217 |
218 |
219 | margin-bottom: 40px; 220 |
221 |
222 |
223 |
224 | other sidebar contents 225 |
226 |
227 | .scroll-chaser-7 228 |
229 |
230 |
231 |
232 |
233 | 234 | 235 |
236 |

Sample 8

237 |
238 |
.wrapper-8
239 |
240 |
241 |
242 |
243 | $('.scroll-chaser-8').scrollChaser({
244 |     wrapper:  '.wrapper-8',
245 |     position: 'bottom',
246 |     offsetBottom: 40
247 | });
248 | 
249 | Stick to bottom. 250 |
251 |
252 | margin-bottom: 40px; 253 |
254 |
255 |
256 |
257 | .scroll-chaser-8 258 |
259 |
260 |
261 |
262 |
263 | 264 | 265 |
266 |

Sample 9

267 |
268 |
.wrapper-9
269 |
270 |
271 |
272 |
273 | $('.scroll-chaser-9').scrollChaser({
274 |     wrapper:  '.wrapper-9',
275 |     offsetTop: 100,
276 |     ignore: true
277 | });
278 | 
279 | Other sidebar contents will be ignored. 280 |
281 |
282 |
283 |
284 | other sidebar contents 285 |
286 |
287 | .scroll-chaser-9 288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 | 305 | 306 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | -------------------------------------------------------------------------------- /jquery.scrollchaser.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery.scrollChaser.js 3 | * 4 | * Repositiory: https://github.com/yuku-t/jquery-scrollchaser 5 | * License: MIT 6 | * Author: Yuku Takahashi 7 | */ 8 | 9 | ;(function ($) { 10 | 11 | 'use strict'; 12 | 13 | var $window = $(window); 14 | var MIN_SCROLL_HEIGHT = 50; 15 | 16 | var throttle = function (func, context, wait) { 17 | var previous = 0; 18 | return function () { 19 | var now, remaining; 20 | now = new Date(); 21 | remaining = wait - (now - previous); 22 | if (remaining <= 0) { 23 | previous = now; 24 | return func.apply(context, arguments); 25 | } 26 | }; 27 | }; 28 | 29 | var index = 0; 30 | var cache = function (func) { 31 | var key = (index++).toString(); 32 | return function () { 33 | if (!this.cache[key]) { 34 | this.cache[key] = func.apply(this); 35 | } 36 | return this.cache[key]; 37 | }; 38 | }; 39 | 40 | var ScrollChaser = (function () { 41 | 42 | function ScrollChaser($el, options) { 43 | this.$el = $el; 44 | this.$el.css({ width: this.$el.width() }); 45 | this.$wrapper = options.wrapper; 46 | if (this.$wrapper.css('position') === 'static') { 47 | this.$wrapper.css('position', 'relative'); 48 | } 49 | this.sentinel = $('
').css({ 50 | position: options.ignore ? 'absolute' : 'relative', 51 | top: 0, 52 | height: 0 53 | }), 54 | this.$el.before(this.sentinel); 55 | this.offsetTop = options.offsetTop || 0; 56 | this.offsetBottom = options.offsetBottom || 0; 57 | this.position = options.position || 'top'; 58 | this.ignore = options.ignore; // Ignore other sidebar contents 59 | if (this.ignore) { 60 | this.$el.css({ position: 'absolute', top: 0 }); 61 | } 62 | this.handler = throttle( 63 | this.position == 'bottom' ? this.onScrollBottom : this.onScrollTop, 64 | this, options.throttle || 10 65 | ); 66 | $window.on('scroll', this.handler); 67 | $window.on('resize', this.handler); 68 | 69 | this.handler(); 70 | } 71 | 72 | $.extend(ScrollChaser.prototype, { 73 | state: 'top', // top, fixed or bottom 74 | same: false, // Sidebar has same height with wrapper 75 | 76 | onScrollTop: function () { 77 | this.cache = {}; // cache clear 78 | 79 | if (!this.ignore && (this.same || this.state === 'top' && this.isSameHeight())) { 80 | this.same = true; 81 | return; 82 | } 83 | 84 | var state, offset = this.getScrollTop() + this.offsetTop; 85 | if (offset < this.getSentinelTop()) { 86 | state = 'top'; 87 | } else if (offset + this.getOuterHeight() > this.getSentinelBottom()) { 88 | state = 'bottom'; 89 | } else { 90 | state = 'fixed'; 91 | } 92 | if (this.state === state && state === 'fixed') return; 93 | this.transferTo(state); 94 | }, 95 | 96 | onScrollBottom: function () { 97 | this.cache = {}; // cache clear 98 | 99 | if (!this.ignore && (this.same || this.state === 'top' && this.isSameHeight())) { 100 | this.same = true; 101 | return; 102 | } 103 | 104 | var state, offset; 105 | offset = this.getScrollTop() + $window.height(); 106 | if (offset > this.getSentinelBottom()) { 107 | state = 'bottom'; 108 | } else if (offset - this.getOuterHeight() < this.getSentinelTop()) { 109 | state = 'top'; 110 | } else { 111 | state = 'fixed'; 112 | } 113 | if (this.state === state && state === 'fixed') return; 114 | this.transferTo(state); 115 | }, 116 | 117 | // State transition method 118 | transferTo: function (state) { 119 | this.state = state; 120 | var prop; 121 | if (this.state === 'top') { 122 | prop = { 123 | position: this.ignore ? 'absolute' : 'relative', 124 | top: 0, 125 | bottom: '' 126 | }; 127 | } else if (this.state === 'bottom') { 128 | prop = { 129 | position: 'absolute', 130 | top: this.getWrapperHeight() - this.getOuterHeight(), 131 | bottom: '' 132 | }; 133 | } else { 134 | if (this.position === 'bottom') { 135 | prop = { position: 'fixed', top: '', bottom: this.offsetBottom }; 136 | } else { 137 | prop = { position: 'fixed', top: this.offsetTop, bottom: '' }; 138 | } 139 | } 140 | this.$el.css(prop); 141 | }, 142 | 143 | isSameHeight: function () { 144 | return this.getSentinelBottom() - this.getBottom() - this.offsetBottom < MIN_SCROLL_HEIGHT; 145 | }, 146 | 147 | // Getter methods 148 | // -------------- 149 | 150 | getScrollTop: cache(function () { 151 | return $window.scrollTop(); 152 | }), 153 | 154 | getWrapperHeight: cache(function () { 155 | return this.$wrapper.outerHeight(); 156 | }), 157 | 158 | getOuterHeight: cache(function () { 159 | return this.$el.outerHeight(true) + this.offsetBottom; 160 | }), 161 | 162 | getSentinelTop: cache(function () { 163 | return this.sentinel.offset().top; 164 | }), 165 | 166 | getSentinelBottom: cache(function () { 167 | return this.$wrapper.offset().top + this.getWrapperHeight() + 168 | parseInt(this.$wrapper.css('margin-top'), 10); 169 | }), 170 | 171 | getBottom: cache(function () { 172 | return this.$el.offset().top + this.getOuterHeight(); 173 | }), 174 | 175 | // 176 | 177 | destroy: function () { 178 | if (!this.$el) return; // already destroyed 179 | this.transferTo('top'); 180 | this.$el = this.$wrapper = null; 181 | $window.off('scroll', this.handler); 182 | $window.off('resize', this.handler); 183 | } 184 | }); 185 | 186 | return ScrollChaser; 187 | })(); 188 | 189 | $.fn.scrollChaser = function (options) { 190 | options || (options = {}); 191 | if (!options.wrapper) { 192 | options.wrapper = $(document.body); 193 | } else if (!(options.wrapper instanceof $)) { 194 | options.wrapper = $(options.wrapper); 195 | } 196 | this.scrollChaser = new ScrollChaser(this, options); 197 | var that = this, origRemove = this.remove; 198 | 199 | // Destroy scroll chaser when it is removed from DOM tree. 200 | this.remove = function () { 201 | that.scrollChaser.destroy(); // Prevent memory leak 202 | origRemove.apply(that, arguments); 203 | }; 204 | return this; 205 | }; 206 | 207 | if (!$.fn.outerHeight) { 208 | // Zepto does not have $.fn.outerHeight 209 | $.fn.outerHeight = function (includeMargin) { 210 | var size = this.height(); 211 | if (!includeMargin) { 212 | size -= parseInt(this.css('margin-bottom'), 10); 213 | size -= parseInt(this.css('margin-top'), 10); 214 | } 215 | return size; 216 | }; 217 | } 218 | 219 | })(window.jQuery || window.Zepto); 220 | -------------------------------------------------------------------------------- /jquery.scrollchaser.min.js: -------------------------------------------------------------------------------- 1 | /*! jquery-scrollchaser - v0.0.6 - 2013-11-11 */!function(a){"use strict";var b=a(window),c=50,d=function(a,b,c){var d=0;return function(){var e,f;return e=new Date,f=c-(e-d),0>=f?(d=e,a.apply(b,arguments)):void 0}},e=0,f=function(a){var b=(e++).toString();return function(){return this.cache[b]||(this.cache[b]=a.apply(this)),this.cache[b]}},g=function(){function e(c,e){this.$el=c,this.$el.css({width:this.$el.width()}),this.$wrapper=e.wrapper,"static"===this.$wrapper.css("position")&&this.$wrapper.css("position","relative"),this.sentinel=a("
").css({position:e.ignore?"absolute":"relative",top:0,height:0}),this.$el.before(this.sentinel),this.offsetTop=e.offsetTop||0,this.offsetBottom=e.offsetBottom||0,this.position=e.position||"top",this.ignore=e.ignore,this.ignore&&this.$el.css({position:"absolute",top:0}),this.handler=d("bottom"==this.position?this.onScrollBottom:this.onScrollTop,this,e.throttle||10),b.on("scroll",this.handler),b.on("resize",this.handler),this.handler()}return a.extend(e.prototype,{state:"top",same:!1,onScrollTop:function(){if(this.cache={},!this.ignore&&(this.same||"top"===this.state&&this.isSameHeight()))return this.same=!0,void 0;var a,b=this.getScrollTop()+this.offsetTop;a=bthis.getSentinelBottom()?"bottom":"fixed",(this.state!==a||"fixed"!==a)&&this.transferTo(a)},onScrollBottom:function(){if(this.cache={},!this.ignore&&(this.same||"top"===this.state&&this.isSameHeight()))return this.same=!0,void 0;var a,c;c=this.getScrollTop()+b.height(),a=c>this.getSentinelBottom()?"bottom":c-this.getOuterHeight()35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('K M;I(M)1S 2U("2a\'t 4k M 4K 2g 3l 4G 4H");(6(){6 r(f,e){I(!M.1R(f))1S 3m("3s 15 4R");K a=f.1w;f=M(f.1m,t(f)+(e||""));I(a)f.1w={1m:a.1m,19:a.19?a.19.1a(0):N};H f}6 t(f){H(f.1J?"g":"")+(f.4s?"i":"")+(f.4p?"m":"")+(f.4v?"x":"")+(f.3n?"y":"")}6 B(f,e,a,b){K c=u.L,d,h,g;v=R;5K{O(;c--;){g=u[c];I(a&g.3r&&(!g.2p||g.2p.W(b))){g.2q.12=e;I((h=g.2q.X(f))&&h.P===e){d={3k:g.2b.W(b,h,a),1C:h};1N}}}}5v(i){1S i}5q{v=11}H d}6 p(f,e,a){I(3b.Z.1i)H f.1i(e,a);O(a=a||0;a-1},3d:6(g){e+=g}};c1&&p(e,"")>-1){a=15(J.1m,n.Q.W(t(J),"g",""));n.Q.W(f.1a(e.P),a,6(){O(K c=1;c<14.L-2;c++)I(14[c]===1d)e[c]=1d})}I(J.1w&&J.1w.19)O(K b=1;be.P&&J.12--}H e};I(!D)15.Z.1A=6(f){(f=n.X.W(J,f))&&J.1J&&!f[0].L&&J.12>f.P&&J.12--;H!!f};1r.Z.1C=6(f){M.1R(f)||(f=15(f));I(f.1J){K e=n.1C.1p(J,14);f.12=0;H e}H f.X(J)};1r.Z.Q=6(f,e){K a=M.1R(f),b,c;I(a&&1j e.58()==="3f"&&e.1i("${")===-1&&y)H n.Q.1p(J,14);I(a){I(f.1w)b=f.1w.19}Y f+="";I(1j e==="6")c=n.Q.W(J,f,6(){I(b){14[0]=1f 1r(14[0]);O(K d=0;dd.L-3;){i=1r.Z.1a.W(g,-1)+i;g=1Q.3i(g/10)}H(g?d[g]||"":"$")+i}Y{g=+i;I(g<=d.L-3)H d[g];g=b?p(b,i):-1;H g>-1?d[g+1]:h}})})}I(a&&f.1J)f.12=0;H c};1r.Z.1e=6(f,e){I(!M.1R(f))H n.1e.1p(J,14);K a=J+"",b=[],c=0,d,h;I(e===1d||+e<0)e=5D;Y{e=1Q.3i(+e);I(!e)H[]}O(f=M.3c(f);d=f.X(a);){I(f.12>c){b.U(a.1a(c,d.P));d.L>1&&d.P=e)1N}f.12===d.P&&f.12++}I(c===a.L){I(!n.1A.W(f,"")||h)b.U("")}Y b.U(a.1a(c));H b.L>e?b.1a(0,e):b};M.1h(/\\(\\?#[^)]*\\)/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"});M.1h(/\\((?!\\?)/,6(){J.19.U(N);H"("});M.1h(/\\(\\?<([$\\w]+)>/,6(f){J.19.U(f[1]);J.2N=R;H"("});M.1h(/\\\\k<([\\w$]+)>/,6(f){K e=p(J.19,f[1]);H e>-1?"\\\\"+(e+1)+(3R(f.2S.3a(f.P+f[0].L))?"":"(?:)"):f[0]});M.1h(/\\[\\^?]/,6(f){H f[0]==="[]"?"\\\\b\\\\B":"[\\\\s\\\\S]"});M.1h(/^\\(\\?([5A]+)\\)/,6(f){J.3d(f[1]);H""});M.1h(/(?:\\s+|#.*)+/,6(f){H n.1A.W(A,f.2S.1a(f.P+f[0].L))?"":"(?:)"},M.1B,6(){H J.2K("x")});M.1h(/\\./,6(){H"[\\\\s\\\\S]"},M.1B,6(){H J.2K("s")})})();1j 2e!="1d"&&(2e.M=M);K 1v=6(){6 r(a,b){a.1l.1i(b)!=-1||(a.1l+=" "+b)}6 t(a){H a.1i("3e")==0?a:"3e"+a}6 B(a){H e.1Y.2A[t(a)]}6 p(a,b,c){I(a==N)H N;K d=c!=R?a.3G:[a.2G],h={"#":"1c",".":"1l"}[b.1o(0,1)]||"3h",g,i;g=h!="3h"?b.1o(1):b.5u();I((a[h]||"").1i(g)!=-1)H a;O(a=0;d&&a\'+c+""});H a}6 n(a,b){a.1e("\\n");O(K c="",d=0;d<50;d++)c+=" ";H a=v(a,6(h){I(h.1i("\\t")==-1)H h;O(K g=0;(g=h.1i("\\t"))!=-1;)h=h.1o(0,g)+c.1o(0,b-g%b)+h.1o(g+1,h.L);H h})}6 x(a){H a.Q(/^\\s+|\\s+$/g,"")}6 D(a,b){I(a.Pb.P)H 1;Y I(a.Lb.L)H 1;H 0}6 y(a,b){6 c(k){H k[0]}O(K d=N,h=[],g=b.2D?b.2D:c;(d=b.1I.X(a))!=N;){K i=g(d,b);I(1j i=="3f")i=[1f e.2L(i,d.P,b.23)];h=h.1O(i)}H h}6 E(a){K b=/(.*)((&1G;|&1y;).*)/;H a.Q(e.3A.3M,6(c){K d="",h=N;I(h=b.X(c)){c=h[1];d=h[2]}H\'\'+c+""+d})}6 z(){O(K a=1E.36("1k"),b=[],c=0;c<1z 4I="1Z://2y.3L.3K/4L/5L"><3J><4N 1Z-4M="5G-5M" 6K="2O/1z; 6J=6I-8" /><1t>6L 1v<3B 1L="25-6M:6Q,6P,6O,6N-6F;6y-2f:#6x;2f:#6w;25-22:6v;2O-3D:3C;">1v3v 3.0.76 (72 73 3x)1Z://3u.2w/1v70 17 6U 71.6T 6X-3x 6Y 6D.6t 61 60 J 1k, 5Z 5R 5V <2R/>5U 5T 5S!\'}},1Y:{2j:N,2A:{}},1U:{},3A:{6n:/\\/\\*[\\s\\S]*?\\*\\//2c,6m:/\\/\\/.*$/2c,6l:/#.*$/2c,6k:/"([^\\\\"\\n]|\\\\.)*"/g,6o:/\'([^\\\\\'\\n]|\\\\.)*\'/g,6p:1f M(\'"([^\\\\\\\\"]|\\\\\\\\.)*"\',"3z"),6s:1f M("\'([^\\\\\\\\\']|\\\\\\\\.)*\'","3z"),6q:/(&1y;|<)!--[\\s\\S]*?--(&1G;|>)/2c,3M:/\\w+:\\/\\/[\\w-.\\/?%&=:@;]*/g,6a:{18:/(&1y;|<)\\?=?/g,1b:/\\?(&1G;|>)/g},69:{18:/(&1y;|<)%=?/g,1b:/%(&1G;|>)/g},6d:{18:/(&1y;|<)\\s*1k.*?(&1G;|>)/2T,1b:/(&1y;|<)\\/\\s*1k\\s*(&1G;|>)/2T}},16:{1H:6(a){6 b(i,k){H e.16.2o(i,k,e.13.1x[k])}O(K c=\'\',d=e.16.2x,h=d.2X,g=0;g";H c},2o:6(a,b,c){H\'<2W>\'+c+""},2b:6(a){K b=a.1F,c=b.1l||"";b=B(p(b,".20",R).1c);K d=6(h){H(h=15(h+"6f(\\\\w+)").X(c))?h[1]:N}("6g");b&&d&&e.16.2x[d].2B(b);a.3N()},2x:{2X:["21","2P"],21:{1H:6(a){I(a.V("2l")!=R)H"";K b=a.V("1t");H e.16.2o(a,"21",b?b:e.13.1x.21)},2B:6(a){a=1E.6j(t(a.1c));a.1l=a.1l.Q("47","")}},2P:{2B:6(){K a="68=0";a+=", 18="+(31.30-33)/2+", 32="+(31.2Z-2Y)/2+", 30=33, 2Z=2Y";a=a.Q(/^,/,"");a=1P.6Z("","38",a);a.2C();K b=a.1E;b.6W(e.13.1x.37);b.6V();a.2C()}}}},35:6(a,b){K c;I(b)c=[b];Y{c=1E.36(e.13.34);O(K d=[],h=0;h(.*?))\\\\]$"),s=1f M("(?<27>[\\\\w-]+)\\\\s*:\\\\s*(?<1T>[\\\\w-%#]+|\\\\[.*?\\\\]|\\".*?\\"|\'.*?\')\\\\s*;?","g");(j=s.X(k))!=N;){K o=j.1T.Q(/^[\'"]|[\'"]$/g,"");I(o!=N&&m.1A(o)){o=m.X(o);o=o.2V.L>0?o.2V.1e(/\\s*,\\s*/):[]}l[j.27]=o}g={1F:g,1n:C(i,l)};g.1n.1D!=N&&d.U(g)}H d},1M:6(a,b){K c=J.35(a,b),d=N,h=e.13;I(c.L!==0)O(K g=0;g")==o-3){m=m.4h(0,o-3);s=R}l=s?m:l}I((i.1t||"")!="")k.1t=i.1t;k.1D=j;d.2Q(k);b=d.2F(l);I((i.1c||"")!="")b.1c=i.1c;i.2G.74(b,i)}}},2E:6(a){w(1P,"4k",6(){e.1M(a)})}};e.2E=e.2E;e.1M=e.1M;e.2L=6(a,b,c){J.1T=a;J.P=b;J.L=a.L;J.23=c;J.1V=N};e.2L.Z.1q=6(){H J.1T};e.4l=6(a){6 b(j,l){O(K m=0;md)1N;Y I(g.P==c.P&&g.L>c.L)a[b]=N;Y I(g.P>=c.P&&g.P\'+c+""},3Q:6(a,b){K c="",d=a.1e("\\n").L,h=2u(J.V("2i-1s")),g=J.V("2z-1s-2t");I(g==R)g=(h+d-1).1q().L;Y I(3R(g)==R)g=0;O(K i=0;i\'+j+"":"")+i)}H a},4f:6(a){H a?"<4a>"+a+"":""},4b:6(a,b){6 c(l){H(l=l?l.1V||g:g)?l+" ":""}O(K d=0,h="",g=J.V("1D",""),i=0;i|&1y;2R\\s*\\/?&1G;/2T;I(e.13.46==R)b=b.Q(h,"\\n");I(e.13.44==R)b=b.Q(h,"");b=b.1e("\\n");h=/^\\s*/;g=4Q;O(K i=0;i0;i++){K k=b[i];I(x(k).L!=0){k=h.X(k);I(k==N){a=a;1N a}g=1Q.4q(k[0].L,g)}}I(g>0)O(i=0;i\'+(J.V("16")?e.16.1H(J):"")+\'<3Z 5z="0" 5H="0" 5J="0">\'+J.4f(J.V("1t"))+"<3T><3P>"+(1u?\'<2d 1g="1u">\'+J.3Q(a)+"":"")+\'<2d 1g="17">\'+b+""},2F:6(a){I(a===N)a="";J.17=a;K b=J.3Y("T");b.3X=J.1H(a);J.V("16")&&w(p(b,".16"),"5c",e.16.2b);J.V("3V-17")&&w(p(b,".17"),"56",f);H b},2Q:6(a){J.1c=""+1Q.5d(1Q.5n()*5k).1q();e.1Y.2A[t(J.1c)]=J;J.1n=C(e.2v,a||{});I(J.V("2k")==R)J.1n.16=J.1n.1u=11},5j:6(a){a=a.Q(/^\\s+|\\s+$/g,"").Q(/\\s+/g,"|");H"\\\\b(?:"+a+")\\\\b"},5f:6(a){J.28={18:{1I:a.18,23:"1k"},1b:{1I:a.1b,23:"1k"},17:1f M("(?<18>"+a.18.1m+")(?<17>.*?)(?<1b>"+a.1b.1m+")","5o")}}};H e}();1j 2e!="1d"&&(2e.1v=1v);',62,441,'||||||function|||||||||||||||||||||||||||||||||||||return|if|this|var|length|XRegExp|null|for|index|replace|true||div|push|getParam|call|exec|else|prototype||false|lastIndex|config|arguments|RegExp|toolbar|code|left|captureNames|slice|right|id|undefined|split|new|class|addToken|indexOf|typeof|script|className|source|params|substr|apply|toString|String|line|title|gutter|SyntaxHighlighter|_xregexp|strings|lt|html|test|OUTSIDE_CLASS|match|brush|document|target|gt|getHtml|regex|global|join|style|highlight|break|concat|window|Math|isRegExp|throw|value|brushes|brushName|space|alert|vars|http|syntaxhighlighter|expandSource|size|css|case|font|Fa|name|htmlScript|dA|can|handler|gm|td|exports|color|in|href|first|discoveredBrushes|light|collapse|object|cache|getButtonHtml|trigger|pattern|getLineHtml|nbsp|numbers|parseInt|defaults|com|items|www|pad|highlighters|execute|focus|func|all|getDiv|parentNode|navigator|INSIDE_CLASS|regexList|hasFlag|Match|useScriptTags|hasNamedCapture|text|help|init|br|input|gi|Error|values|span|list|250|height|width|screen|top|500|tagName|findElements|getElementsByTagName|aboutDialog|_blank|appendChild|charAt|Array|copyAsGlobal|setFlag|highlighter_|string|attachEvent|nodeName|floor|backref|output|the|TypeError|sticky|Za|iterate|freezeTokens|scope|type|textarea|alexgorbatchev|version|margin|2010|005896|gs|regexLib|body|center|align|noBrush|require|childNodes|DTD|xhtml1|head|org|w3|url|preventDefault|container|tr|getLineNumbersHtml|isNaN|userAgent|tbody|isLineHighlighted|quick|void|innerHTML|create|table|links|auto|smart|tab|stripBrs|tabs|bloggerMode|collapsed|plain|getCodeLinesHtml|caption|getMatchesHtml|findMatches|figureOutLineNumbers|removeNestedMatches|getTitleHtml|brushNotHtmlScript|substring|createElement|Highlighter|load|HtmlScript|Brush|pre|expand|multiline|min|Can|ignoreCase|find|blur|extended|toLowerCase|aliases|addEventListener|innerText|textContent|wasn|select|createTextNode|removeChild|option|same|frame|xmlns|dtd|twice|1999|equiv|meta|htmlscript|transitional|1E3|expected|PUBLIC|DOCTYPE|on|W3C|XHTML|TR|EN|Transitional||configured|srcElement|Object|after|run|dblclick|matchChain|valueOf|constructor|default|switch|click|round|execAt|forHtmlScript|token|gimy|functions|getKeywords|1E6|escape|within|random|sgi|another|finally|supply|MSIE|ie|toUpperCase|catch|returnValue|definition|event|border|imsx|constructing|one|Infinity|from|when|Content|cellpadding|flags|cellspacing|try|xhtml|Type|spaces|2930402|hosted_button_id|lastIndexOf|donate|active|development|keep|to|xclick|_s|Xml|please|like|you|paypal|cgi|cmd|webscr|bin|highlighted|scrollbars|aspScriptTags|phpScriptTags|sort|max|scriptScriptTags|toolbar_item|_|command|command_|number|getElementById|doubleQuotedString|singleLinePerlComments|singleLineCComments|multiLineCComments|singleQuotedString|multiLineDoubleQuotedString|xmlComments|alt|multiLineSingleQuotedString|If|https|1em|000|fff|background|5em|xx|bottom|75em|Gorbatchev|large|serif|CDATA|continue|utf|charset|content|About|family|sans|Helvetica|Arial|Geneva|3em|nogutter|Copyright|syntax|close|write|2004|Alex|open|JavaScript|highlighter|July|02|replaceChild|offset|83'.split('|'),0,{})) 18 | -------------------------------------------------------------------------------- /media/javascripts/zepto-1.0.js: -------------------------------------------------------------------------------- 1 | /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ 2 | 3 | 4 | ;(function(undefined){ 5 | if (String.prototype.trim === undefined) // fix for iOS 3.2 6 | String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g, '') } 7 | 8 | // For iOS 3.x 9 | // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce 10 | if (Array.prototype.reduce === undefined) 11 | Array.prototype.reduce = function(fun){ 12 | if(this === void 0 || this === null) throw new TypeError() 13 | var t = Object(this), len = t.length >>> 0, k = 0, accumulator 14 | if(typeof fun != 'function') throw new TypeError() 15 | if(len == 0 && arguments.length == 1) throw new TypeError() 16 | 17 | if(arguments.length >= 2) 18 | accumulator = arguments[1] 19 | else 20 | do{ 21 | if(k in t){ 22 | accumulator = t[k++] 23 | break 24 | } 25 | if(++k >= len) throw new TypeError() 26 | } while (true) 27 | 28 | while (k < len){ 29 | if(k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t) 30 | k++ 31 | } 32 | return accumulator 33 | } 34 | 35 | })() 36 | 37 | var Zepto = (function() { 38 | var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter, 39 | document = window.document, 40 | elementDisplay = {}, classCache = {}, 41 | getComputedStyle = document.defaultView.getComputedStyle, 42 | cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 }, 43 | fragmentRE = /^\s*<(\w+|!)[^>]*>/, 44 | tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, 45 | rootNodeRE = /^(?:body|html)$/i, 46 | 47 | // special attributes that should be get/set via method calls 48 | methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'], 49 | 50 | adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ], 51 | table = document.createElement('table'), 52 | tableRow = document.createElement('tr'), 53 | containers = { 54 | 'tr': document.createElement('tbody'), 55 | 'tbody': table, 'thead': table, 'tfoot': table, 56 | 'td': tableRow, 'th': tableRow, 57 | '*': document.createElement('div') 58 | }, 59 | readyRE = /complete|loaded|interactive/, 60 | classSelectorRE = /^\.([\w-]+)$/, 61 | idSelectorRE = /^#([\w-]*)$/, 62 | tagSelectorRE = /^[\w-]+$/, 63 | class2type = {}, 64 | toString = class2type.toString, 65 | zepto = {}, 66 | camelize, uniq, 67 | tempParent = document.createElement('div') 68 | 69 | zepto.matches = function(element, selector) { 70 | if (!element || element.nodeType !== 1) return false 71 | var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector || 72 | element.oMatchesSelector || element.matchesSelector 73 | if (matchesSelector) return matchesSelector.call(element, selector) 74 | // fall back to performing a selector: 75 | var match, parent = element.parentNode, temp = !parent 76 | if (temp) (parent = tempParent).appendChild(element) 77 | match = ~zepto.qsa(parent, selector).indexOf(element) 78 | temp && tempParent.removeChild(element) 79 | return match 80 | } 81 | 82 | function type(obj) { 83 | return obj == null ? String(obj) : 84 | class2type[toString.call(obj)] || "object" 85 | } 86 | 87 | function isFunction(value) { return type(value) == "function" } 88 | function isWindow(obj) { return obj != null && obj == obj.window } 89 | function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE } 90 | function isObject(obj) { return type(obj) == "object" } 91 | function isPlainObject(obj) { 92 | return isObject(obj) && !isWindow(obj) && obj.__proto__ == Object.prototype 93 | } 94 | function isArray(value) { return value instanceof Array } 95 | function likeArray(obj) { return typeof obj.length == 'number' } 96 | 97 | function compact(array) { return filter.call(array, function(item){ return item != null }) } 98 | function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array } 99 | camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) } 100 | function dasherize(str) { 101 | return str.replace(/::/g, '/') 102 | .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') 103 | .replace(/([a-z\d])([A-Z])/g, '$1_$2') 104 | .replace(/_/g, '-') 105 | .toLowerCase() 106 | } 107 | uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) } 108 | 109 | function classRE(name) { 110 | return name in classCache ? 111 | classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)')) 112 | } 113 | 114 | function maybeAddPx(name, value) { 115 | return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value 116 | } 117 | 118 | function defaultDisplay(nodeName) { 119 | var element, display 120 | if (!elementDisplay[nodeName]) { 121 | element = document.createElement(nodeName) 122 | document.body.appendChild(element) 123 | display = getComputedStyle(element, '').getPropertyValue("display") 124 | element.parentNode.removeChild(element) 125 | display == "none" && (display = "block") 126 | elementDisplay[nodeName] = display 127 | } 128 | return elementDisplay[nodeName] 129 | } 130 | 131 | function children(element) { 132 | return 'children' in element ? 133 | slice.call(element.children) : 134 | $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node }) 135 | } 136 | 137 | // `$.zepto.fragment` takes a html string and an optional tag name 138 | // to generate DOM nodes nodes from the given html string. 139 | // The generated DOM nodes are returned as an array. 140 | // This function can be overriden in plugins for example to make 141 | // it compatible with browsers that don't support the DOM fully. 142 | zepto.fragment = function(html, name, properties) { 143 | if (html.replace) html = html.replace(tagExpanderRE, "<$1>") 144 | if (name === undefined) name = fragmentRE.test(html) && RegExp.$1 145 | if (!(name in containers)) name = '*' 146 | 147 | var nodes, dom, container = containers[name] 148 | container.innerHTML = '' + html 149 | dom = $.each(slice.call(container.childNodes), function(){ 150 | container.removeChild(this) 151 | }) 152 | if (isPlainObject(properties)) { 153 | nodes = $(dom) 154 | $.each(properties, function(key, value) { 155 | if (methodAttributes.indexOf(key) > -1) nodes[key](value) 156 | else nodes.attr(key, value) 157 | }) 158 | } 159 | return dom 160 | } 161 | 162 | // `$.zepto.Z` swaps out the prototype of the given `dom` array 163 | // of nodes with `$.fn` and thus supplying all the Zepto functions 164 | // to the array. Note that `__proto__` is not supported on Internet 165 | // Explorer. This method can be overriden in plugins. 166 | zepto.Z = function(dom, selector) { 167 | dom = dom || [] 168 | dom.__proto__ = $.fn 169 | dom.selector = selector || '' 170 | return dom 171 | } 172 | 173 | // `$.zepto.isZ` should return `true` if the given object is a Zepto 174 | // collection. This method can be overriden in plugins. 175 | zepto.isZ = function(object) { 176 | return object instanceof zepto.Z 177 | } 178 | 179 | // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and 180 | // takes a CSS selector and an optional context (and handles various 181 | // special cases). 182 | // This method can be overriden in plugins. 183 | zepto.init = function(selector, context) { 184 | // If nothing given, return an empty Zepto collection 185 | if (!selector) return zepto.Z() 186 | // If a function is given, call it when the DOM is ready 187 | else if (isFunction(selector)) return $(document).ready(selector) 188 | // If a Zepto collection is given, juts return it 189 | else if (zepto.isZ(selector)) return selector 190 | else { 191 | var dom 192 | // normalize array if an array of nodes is given 193 | if (isArray(selector)) dom = compact(selector) 194 | // Wrap DOM nodes. If a plain object is given, duplicate it. 195 | else if (isObject(selector)) 196 | dom = [isPlainObject(selector) ? $.extend({}, selector) : selector], selector = null 197 | // If it's a html fragment, create nodes from it 198 | else if (fragmentRE.test(selector)) 199 | dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null 200 | // If there's a context, create a collection on that context first, and select 201 | // nodes from there 202 | else if (context !== undefined) return $(context).find(selector) 203 | // And last but no least, if it's a CSS selector, use it to select nodes. 204 | else dom = zepto.qsa(document, selector) 205 | // create a new Zepto collection from the nodes found 206 | return zepto.Z(dom, selector) 207 | } 208 | } 209 | 210 | // `$` will be the base `Zepto` object. When calling this 211 | // function just call `$.zepto.init, which makes the implementation 212 | // details of selecting nodes and creating Zepto collections 213 | // patchable in plugins. 214 | $ = function(selector, context){ 215 | return zepto.init(selector, context) 216 | } 217 | 218 | function extend(target, source, deep) { 219 | for (key in source) 220 | if (deep && (isPlainObject(source[key]) || isArray(source[key]))) { 221 | if (isPlainObject(source[key]) && !isPlainObject(target[key])) 222 | target[key] = {} 223 | if (isArray(source[key]) && !isArray(target[key])) 224 | target[key] = [] 225 | extend(target[key], source[key], deep) 226 | } 227 | else if (source[key] !== undefined) target[key] = source[key] 228 | } 229 | 230 | // Copy all but undefined properties from one or more 231 | // objects to the `target` object. 232 | $.extend = function(target){ 233 | var deep, args = slice.call(arguments, 1) 234 | if (typeof target == 'boolean') { 235 | deep = target 236 | target = args.shift() 237 | } 238 | args.forEach(function(arg){ extend(target, arg, deep) }) 239 | return target 240 | } 241 | 242 | // `$.zepto.qsa` is Zepto's CSS selector implementation which 243 | // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`. 244 | // This method can be overriden in plugins. 245 | zepto.qsa = function(element, selector){ 246 | var found 247 | return (isDocument(element) && idSelectorRE.test(selector)) ? 248 | ( (found = element.getElementById(RegExp.$1)) ? [found] : [] ) : 249 | (element.nodeType !== 1 && element.nodeType !== 9) ? [] : 250 | slice.call( 251 | classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) : 252 | tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) : 253 | element.querySelectorAll(selector) 254 | ) 255 | } 256 | 257 | function filtered(nodes, selector) { 258 | return selector === undefined ? $(nodes) : $(nodes).filter(selector) 259 | } 260 | 261 | $.contains = function(parent, node) { 262 | return parent !== node && parent.contains(node) 263 | } 264 | 265 | function funcArg(context, arg, idx, payload) { 266 | return isFunction(arg) ? arg.call(context, idx, payload) : arg 267 | } 268 | 269 | function setAttribute(node, name, value) { 270 | value == null ? node.removeAttribute(name) : node.setAttribute(name, value) 271 | } 272 | 273 | // access className property while respecting SVGAnimatedString 274 | function className(node, value){ 275 | var klass = node.className, 276 | svg = klass && klass.baseVal !== undefined 277 | 278 | if (value === undefined) return svg ? klass.baseVal : klass 279 | svg ? (klass.baseVal = value) : (node.className = value) 280 | } 281 | 282 | // "true" => true 283 | // "false" => false 284 | // "null" => null 285 | // "42" => 42 286 | // "42.5" => 42.5 287 | // JSON => parse if valid 288 | // String => self 289 | function deserializeValue(value) { 290 | var num 291 | try { 292 | return value ? 293 | value == "true" || 294 | ( value == "false" ? false : 295 | value == "null" ? null : 296 | !isNaN(num = Number(value)) ? num : 297 | /^[\[\{]/.test(value) ? $.parseJSON(value) : 298 | value ) 299 | : value 300 | } catch(e) { 301 | return value 302 | } 303 | } 304 | 305 | $.type = type 306 | $.isFunction = isFunction 307 | $.isWindow = isWindow 308 | $.isArray = isArray 309 | $.isPlainObject = isPlainObject 310 | 311 | $.isEmptyObject = function(obj) { 312 | var name 313 | for (name in obj) return false 314 | return true 315 | } 316 | 317 | $.inArray = function(elem, array, i){ 318 | return emptyArray.indexOf.call(array, elem, i) 319 | } 320 | 321 | $.camelCase = camelize 322 | $.trim = function(str) { return str.trim() } 323 | 324 | // plugin compatibility 325 | $.uuid = 0 326 | $.support = { } 327 | $.expr = { } 328 | 329 | $.map = function(elements, callback){ 330 | var value, values = [], i, key 331 | if (likeArray(elements)) 332 | for (i = 0; i < elements.length; i++) { 333 | value = callback(elements[i], i) 334 | if (value != null) values.push(value) 335 | } 336 | else 337 | for (key in elements) { 338 | value = callback(elements[key], key) 339 | if (value != null) values.push(value) 340 | } 341 | return flatten(values) 342 | } 343 | 344 | $.each = function(elements, callback){ 345 | var i, key 346 | if (likeArray(elements)) { 347 | for (i = 0; i < elements.length; i++) 348 | if (callback.call(elements[i], i, elements[i]) === false) return elements 349 | } else { 350 | for (key in elements) 351 | if (callback.call(elements[key], key, elements[key]) === false) return elements 352 | } 353 | 354 | return elements 355 | } 356 | 357 | $.grep = function(elements, callback){ 358 | return filter.call(elements, callback) 359 | } 360 | 361 | if (window.JSON) $.parseJSON = JSON.parse 362 | 363 | // Populate the class2type map 364 | $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { 365 | class2type[ "[object " + name + "]" ] = name.toLowerCase() 366 | }) 367 | 368 | // Define methods that will be available on all 369 | // Zepto collections 370 | $.fn = { 371 | // Because a collection acts like an array 372 | // copy over these useful array functions. 373 | forEach: emptyArray.forEach, 374 | reduce: emptyArray.reduce, 375 | push: emptyArray.push, 376 | sort: emptyArray.sort, 377 | indexOf: emptyArray.indexOf, 378 | concat: emptyArray.concat, 379 | 380 | // `map` and `slice` in the jQuery API work differently 381 | // from their array counterparts 382 | map: function(fn){ 383 | return $($.map(this, function(el, i){ return fn.call(el, i, el) })) 384 | }, 385 | slice: function(){ 386 | return $(slice.apply(this, arguments)) 387 | }, 388 | 389 | ready: function(callback){ 390 | if (readyRE.test(document.readyState)) callback($) 391 | else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false) 392 | return this 393 | }, 394 | get: function(idx){ 395 | return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length] 396 | }, 397 | toArray: function(){ return this.get() }, 398 | size: function(){ 399 | return this.length 400 | }, 401 | remove: function(){ 402 | return this.each(function(){ 403 | if (this.parentNode != null) 404 | this.parentNode.removeChild(this) 405 | }) 406 | }, 407 | each: function(callback){ 408 | emptyArray.every.call(this, function(el, idx){ 409 | return callback.call(el, idx, el) !== false 410 | }) 411 | return this 412 | }, 413 | filter: function(selector){ 414 | if (isFunction(selector)) return this.not(this.not(selector)) 415 | return $(filter.call(this, function(element){ 416 | return zepto.matches(element, selector) 417 | })) 418 | }, 419 | add: function(selector,context){ 420 | return $(uniq(this.concat($(selector,context)))) 421 | }, 422 | is: function(selector){ 423 | return this.length > 0 && zepto.matches(this[0], selector) 424 | }, 425 | not: function(selector){ 426 | var nodes=[] 427 | if (isFunction(selector) && selector.call !== undefined) 428 | this.each(function(idx){ 429 | if (!selector.call(this,idx)) nodes.push(this) 430 | }) 431 | else { 432 | var excludes = typeof selector == 'string' ? this.filter(selector) : 433 | (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector) 434 | this.forEach(function(el){ 435 | if (excludes.indexOf(el) < 0) nodes.push(el) 436 | }) 437 | } 438 | return $(nodes) 439 | }, 440 | has: function(selector){ 441 | return this.filter(function(){ 442 | return isObject(selector) ? 443 | $.contains(this, selector) : 444 | $(this).find(selector).size() 445 | }) 446 | }, 447 | eq: function(idx){ 448 | return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1) 449 | }, 450 | first: function(){ 451 | var el = this[0] 452 | return el && !isObject(el) ? el : $(el) 453 | }, 454 | last: function(){ 455 | var el = this[this.length - 1] 456 | return el && !isObject(el) ? el : $(el) 457 | }, 458 | find: function(selector){ 459 | var result, $this = this 460 | if (typeof selector == 'object') 461 | result = $(selector).filter(function(){ 462 | var node = this 463 | return emptyArray.some.call($this, function(parent){ 464 | return $.contains(parent, node) 465 | }) 466 | }) 467 | else if (this.length == 1) result = $(zepto.qsa(this[0], selector)) 468 | else result = this.map(function(){ return zepto.qsa(this, selector) }) 469 | return result 470 | }, 471 | closest: function(selector, context){ 472 | var node = this[0], collection = false 473 | if (typeof selector == 'object') collection = $(selector) 474 | while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector))) 475 | node = node !== context && !isDocument(node) && node.parentNode 476 | return $(node) 477 | }, 478 | parents: function(selector){ 479 | var ancestors = [], nodes = this 480 | while (nodes.length > 0) 481 | nodes = $.map(nodes, function(node){ 482 | if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) { 483 | ancestors.push(node) 484 | return node 485 | } 486 | }) 487 | return filtered(ancestors, selector) 488 | }, 489 | parent: function(selector){ 490 | return filtered(uniq(this.pluck('parentNode')), selector) 491 | }, 492 | children: function(selector){ 493 | return filtered(this.map(function(){ return children(this) }), selector) 494 | }, 495 | contents: function() { 496 | return this.map(function() { return slice.call(this.childNodes) }) 497 | }, 498 | siblings: function(selector){ 499 | return filtered(this.map(function(i, el){ 500 | return filter.call(children(el.parentNode), function(child){ return child!==el }) 501 | }), selector) 502 | }, 503 | empty: function(){ 504 | return this.each(function(){ this.innerHTML = '' }) 505 | }, 506 | // `pluck` is borrowed from Prototype.js 507 | pluck: function(property){ 508 | return $.map(this, function(el){ return el[property] }) 509 | }, 510 | show: function(){ 511 | return this.each(function(){ 512 | this.style.display == "none" && (this.style.display = null) 513 | if (getComputedStyle(this, '').getPropertyValue("display") == "none") 514 | this.style.display = defaultDisplay(this.nodeName) 515 | }) 516 | }, 517 | replaceWith: function(newContent){ 518 | return this.before(newContent).remove() 519 | }, 520 | wrap: function(structure){ 521 | var func = isFunction(structure) 522 | if (this[0] && !func) 523 | var dom = $(structure).get(0), 524 | clone = dom.parentNode || this.length > 1 525 | 526 | return this.each(function(index){ 527 | $(this).wrapAll( 528 | func ? structure.call(this, index) : 529 | clone ? dom.cloneNode(true) : dom 530 | ) 531 | }) 532 | }, 533 | wrapAll: function(structure){ 534 | if (this[0]) { 535 | $(this[0]).before(structure = $(structure)) 536 | var children 537 | // drill down to the inmost element 538 | while ((children = structure.children()).length) structure = children.first() 539 | $(structure).append(this) 540 | } 541 | return this 542 | }, 543 | wrapInner: function(structure){ 544 | var func = isFunction(structure) 545 | return this.each(function(index){ 546 | var self = $(this), contents = self.contents(), 547 | dom = func ? structure.call(this, index) : structure 548 | contents.length ? contents.wrapAll(dom) : self.append(dom) 549 | }) 550 | }, 551 | unwrap: function(){ 552 | this.parent().each(function(){ 553 | $(this).replaceWith($(this).children()) 554 | }) 555 | return this 556 | }, 557 | clone: function(){ 558 | return this.map(function(){ return this.cloneNode(true) }) 559 | }, 560 | hide: function(){ 561 | return this.css("display", "none") 562 | }, 563 | toggle: function(setting){ 564 | return this.each(function(){ 565 | var el = $(this) 566 | ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide() 567 | }) 568 | }, 569 | prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') }, 570 | next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') }, 571 | html: function(html){ 572 | return html === undefined ? 573 | (this.length > 0 ? this[0].innerHTML : null) : 574 | this.each(function(idx){ 575 | var originHtml = this.innerHTML 576 | $(this).empty().append( funcArg(this, html, idx, originHtml) ) 577 | }) 578 | }, 579 | text: function(text){ 580 | return text === undefined ? 581 | (this.length > 0 ? this[0].textContent : null) : 582 | this.each(function(){ this.textContent = text }) 583 | }, 584 | attr: function(name, value){ 585 | var result 586 | return (typeof name == 'string' && value === undefined) ? 587 | (this.length == 0 || this[0].nodeType !== 1 ? undefined : 588 | (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() : 589 | (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result 590 | ) : 591 | this.each(function(idx){ 592 | if (this.nodeType !== 1) return 593 | if (isObject(name)) for (key in name) setAttribute(this, key, name[key]) 594 | else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name))) 595 | }) 596 | }, 597 | removeAttr: function(name){ 598 | return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) }) 599 | }, 600 | prop: function(name, value){ 601 | return (value === undefined) ? 602 | (this[0] && this[0][name]) : 603 | this.each(function(idx){ 604 | this[name] = funcArg(this, value, idx, this[name]) 605 | }) 606 | }, 607 | data: function(name, value){ 608 | var data = this.attr('data-' + dasherize(name), value) 609 | return data !== null ? deserializeValue(data) : undefined 610 | }, 611 | val: function(value){ 612 | return (value === undefined) ? 613 | (this[0] && (this[0].multiple ? 614 | $(this[0]).find('option').filter(function(o){ return this.selected }).pluck('value') : 615 | this[0].value) 616 | ) : 617 | this.each(function(idx){ 618 | this.value = funcArg(this, value, idx, this.value) 619 | }) 620 | }, 621 | offset: function(coordinates){ 622 | if (coordinates) return this.each(function(index){ 623 | var $this = $(this), 624 | coords = funcArg(this, coordinates, index, $this.offset()), 625 | parentOffset = $this.offsetParent().offset(), 626 | props = { 627 | top: coords.top - parentOffset.top, 628 | left: coords.left - parentOffset.left 629 | } 630 | 631 | if ($this.css('position') == 'static') props['position'] = 'relative' 632 | $this.css(props) 633 | }) 634 | if (this.length==0) return null 635 | var obj = this[0].getBoundingClientRect() 636 | return { 637 | left: obj.left + window.pageXOffset, 638 | top: obj.top + window.pageYOffset, 639 | width: Math.round(obj.width), 640 | height: Math.round(obj.height) 641 | } 642 | }, 643 | css: function(property, value){ 644 | if (arguments.length < 2 && typeof property == 'string') 645 | return this[0] && (this[0].style[camelize(property)] || getComputedStyle(this[0], '').getPropertyValue(property)) 646 | 647 | var css = '' 648 | if (type(property) == 'string') { 649 | if (!value && value !== 0) 650 | this.each(function(){ this.style.removeProperty(dasherize(property)) }) 651 | else 652 | css = dasherize(property) + ":" + maybeAddPx(property, value) 653 | } else { 654 | for (key in property) 655 | if (!property[key] && property[key] !== 0) 656 | this.each(function(){ this.style.removeProperty(dasherize(key)) }) 657 | else 658 | css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';' 659 | } 660 | 661 | return this.each(function(){ this.style.cssText += ';' + css }) 662 | }, 663 | index: function(element){ 664 | return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0]) 665 | }, 666 | hasClass: function(name){ 667 | return emptyArray.some.call(this, function(el){ 668 | return this.test(className(el)) 669 | }, classRE(name)) 670 | }, 671 | addClass: function(name){ 672 | return this.each(function(idx){ 673 | classList = [] 674 | var cls = className(this), newName = funcArg(this, name, idx, cls) 675 | newName.split(/\s+/g).forEach(function(klass){ 676 | if (!$(this).hasClass(klass)) classList.push(klass) 677 | }, this) 678 | classList.length && className(this, cls + (cls ? " " : "") + classList.join(" ")) 679 | }) 680 | }, 681 | removeClass: function(name){ 682 | return this.each(function(idx){ 683 | if (name === undefined) return className(this, '') 684 | classList = className(this) 685 | funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){ 686 | classList = classList.replace(classRE(klass), " ") 687 | }) 688 | className(this, classList.trim()) 689 | }) 690 | }, 691 | toggleClass: function(name, when){ 692 | return this.each(function(idx){ 693 | var $this = $(this), names = funcArg(this, name, idx, className(this)) 694 | names.split(/\s+/g).forEach(function(klass){ 695 | (when === undefined ? !$this.hasClass(klass) : when) ? 696 | $this.addClass(klass) : $this.removeClass(klass) 697 | }) 698 | }) 699 | }, 700 | scrollTop: function(){ 701 | if (!this.length) return 702 | return ('scrollTop' in this[0]) ? this[0].scrollTop : this[0].scrollY 703 | }, 704 | position: function() { 705 | if (!this.length) return 706 | 707 | var elem = this[0], 708 | // Get *real* offsetParent 709 | offsetParent = this.offsetParent(), 710 | // Get correct offsets 711 | offset = this.offset(), 712 | parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset() 713 | 714 | // Subtract element margins 715 | // note: when an element has margin: auto the offsetLeft and marginLeft 716 | // are the same in Safari causing offset.left to incorrectly be 0 717 | offset.top -= parseFloat( $(elem).css('margin-top') ) || 0 718 | offset.left -= parseFloat( $(elem).css('margin-left') ) || 0 719 | 720 | // Add offsetParent borders 721 | parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0 722 | parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0 723 | 724 | // Subtract the two offsets 725 | return { 726 | top: offset.top - parentOffset.top, 727 | left: offset.left - parentOffset.left 728 | } 729 | }, 730 | offsetParent: function() { 731 | return this.map(function(){ 732 | var parent = this.offsetParent || document.body 733 | while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static") 734 | parent = parent.offsetParent 735 | return parent 736 | }) 737 | } 738 | } 739 | 740 | // for now 741 | $.fn.detach = $.fn.remove 742 | 743 | // Generate the `width` and `height` functions 744 | ;['width', 'height'].forEach(function(dimension){ 745 | $.fn[dimension] = function(value){ 746 | var offset, el = this[0], 747 | Dimension = dimension.replace(/./, function(m){ return m[0].toUpperCase() }) 748 | if (value === undefined) return isWindow(el) ? el['inner' + Dimension] : 749 | isDocument(el) ? el.documentElement['offset' + Dimension] : 750 | (offset = this.offset()) && offset[dimension] 751 | else return this.each(function(idx){ 752 | el = $(this) 753 | el.css(dimension, funcArg(this, value, idx, el[dimension]())) 754 | }) 755 | } 756 | }) 757 | 758 | function traverseNode(node, fun) { 759 | fun(node) 760 | for (var key in node.childNodes) traverseNode(node.childNodes[key], fun) 761 | } 762 | 763 | // Generate the `after`, `prepend`, `before`, `append`, 764 | // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods. 765 | adjacencyOperators.forEach(function(operator, operatorIndex) { 766 | var inside = operatorIndex % 2 //=> prepend, append 767 | 768 | $.fn[operator] = function(){ 769 | // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings 770 | var argType, nodes = $.map(arguments, function(arg) { 771 | argType = type(arg) 772 | return argType == "object" || argType == "array" || arg == null ? 773 | arg : zepto.fragment(arg) 774 | }), 775 | parent, copyByClone = this.length > 1 776 | if (nodes.length < 1) return this 777 | 778 | return this.each(function(_, target){ 779 | parent = inside ? target : target.parentNode 780 | 781 | // convert all methods to a "before" operation 782 | target = operatorIndex == 0 ? target.nextSibling : 783 | operatorIndex == 1 ? target.firstChild : 784 | operatorIndex == 2 ? target : 785 | null 786 | 787 | nodes.forEach(function(node){ 788 | if (copyByClone) node = node.cloneNode(true) 789 | else if (!parent) return $(node).remove() 790 | 791 | traverseNode(parent.insertBefore(node, target), function(el){ 792 | if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' && 793 | (!el.type || el.type === 'text/javascript') && !el.src) 794 | window['eval'].call(window, el.innerHTML) 795 | }) 796 | }) 797 | }) 798 | } 799 | 800 | // after => insertAfter 801 | // prepend => prependTo 802 | // before => insertBefore 803 | // append => appendTo 804 | $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){ 805 | $(html)[operator](this) 806 | return this 807 | } 808 | }) 809 | 810 | zepto.Z.prototype = $.fn 811 | 812 | // Export internal API functions in the `$.zepto` namespace 813 | zepto.uniq = uniq 814 | zepto.deserializeValue = deserializeValue 815 | $.zepto = zepto 816 | 817 | return $ 818 | })() 819 | 820 | window.Zepto = Zepto 821 | '$' in window || (window.$ = Zepto) 822 | 823 | ;(function($){ 824 | function detect(ua){ 825 | var os = this.os = {}, browser = this.browser = {}, 826 | webkit = ua.match(/WebKit\/([\d.]+)/), 827 | android = ua.match(/(Android)\s+([\d.]+)/), 828 | ipad = ua.match(/(iPad).*OS\s([\d_]+)/), 829 | iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/), 830 | webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/), 831 | touchpad = webos && ua.match(/TouchPad/), 832 | kindle = ua.match(/Kindle\/([\d.]+)/), 833 | silk = ua.match(/Silk\/([\d._]+)/), 834 | blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/), 835 | bb10 = ua.match(/(BB10).*Version\/([\d.]+)/), 836 | rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/), 837 | playbook = ua.match(/PlayBook/), 838 | chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/), 839 | firefox = ua.match(/Firefox\/([\d.]+)/) 840 | 841 | // Todo: clean this up with a better OS/browser seperation: 842 | // - discern (more) between multiple browsers on android 843 | // - decide if kindle fire in silk mode is android or not 844 | // - Firefox on Android doesn't specify the Android version 845 | // - possibly devide in os, device and browser hashes 846 | 847 | if (browser.webkit = !!webkit) browser.version = webkit[1] 848 | 849 | if (android) os.android = true, os.version = android[2] 850 | if (iphone) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.') 851 | if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.') 852 | if (webos) os.webos = true, os.version = webos[2] 853 | if (touchpad) os.touchpad = true 854 | if (blackberry) os.blackberry = true, os.version = blackberry[2] 855 | if (bb10) os.bb10 = true, os.version = bb10[2] 856 | if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2] 857 | if (playbook) browser.playbook = true 858 | if (kindle) os.kindle = true, os.version = kindle[1] 859 | if (silk) browser.silk = true, browser.version = silk[1] 860 | if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true 861 | if (chrome) browser.chrome = true, browser.version = chrome[1] 862 | if (firefox) browser.firefox = true, browser.version = firefox[1] 863 | 864 | os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) || (firefox && ua.match(/Tablet/))) 865 | os.phone = !!(!os.tablet && (android || iphone || webos || blackberry || bb10 || 866 | (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) || (firefox && ua.match(/Mobile/)))) 867 | } 868 | 869 | detect.call($, navigator.userAgent) 870 | // make available to unit tests 871 | $.__detect = detect 872 | 873 | })(Zepto) 874 | 875 | ;(function($){ 876 | var $$ = $.zepto.qsa, handlers = {}, _zid = 1, specialEvents={}, 877 | hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' } 878 | 879 | specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents' 880 | 881 | function zid(element) { 882 | return element._zid || (element._zid = _zid++) 883 | } 884 | function findHandlers(element, event, fn, selector) { 885 | event = parse(event) 886 | if (event.ns) var matcher = matcherFor(event.ns) 887 | return (handlers[zid(element)] || []).filter(function(handler) { 888 | return handler 889 | && (!event.e || handler.e == event.e) 890 | && (!event.ns || matcher.test(handler.ns)) 891 | && (!fn || zid(handler.fn) === zid(fn)) 892 | && (!selector || handler.sel == selector) 893 | }) 894 | } 895 | function parse(event) { 896 | var parts = ('' + event).split('.') 897 | return {e: parts[0], ns: parts.slice(1).sort().join(' ')} 898 | } 899 | function matcherFor(ns) { 900 | return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)') 901 | } 902 | 903 | function eachEvent(events, fn, iterator){ 904 | if ($.type(events) != "string") $.each(events, iterator) 905 | else events.split(/\s/).forEach(function(type){ iterator(type, fn) }) 906 | } 907 | 908 | function eventCapture(handler, captureSetting) { 909 | return handler.del && 910 | (handler.e == 'focus' || handler.e == 'blur') || 911 | !!captureSetting 912 | } 913 | 914 | function realEvent(type) { 915 | return hover[type] || type 916 | } 917 | 918 | function add(element, events, fn, selector, getDelegate, capture){ 919 | var id = zid(element), set = (handlers[id] || (handlers[id] = [])) 920 | eachEvent(events, fn, function(event, fn){ 921 | var handler = parse(event) 922 | handler.fn = fn 923 | handler.sel = selector 924 | // emulate mouseenter, mouseleave 925 | if (handler.e in hover) fn = function(e){ 926 | var related = e.relatedTarget 927 | if (!related || (related !== this && !$.contains(this, related))) 928 | return handler.fn.apply(this, arguments) 929 | } 930 | handler.del = getDelegate && getDelegate(fn, event) 931 | var callback = handler.del || fn 932 | handler.proxy = function (e) { 933 | var result = callback.apply(element, [e].concat(e.data)) 934 | if (result === false) e.preventDefault(), e.stopPropagation() 935 | return result 936 | } 937 | handler.i = set.length 938 | set.push(handler) 939 | element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) 940 | }) 941 | } 942 | function remove(element, events, fn, selector, capture){ 943 | var id = zid(element) 944 | eachEvent(events || '', fn, function(event, fn){ 945 | findHandlers(element, event, fn, selector).forEach(function(handler){ 946 | delete handlers[id][handler.i] 947 | element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture)) 948 | }) 949 | }) 950 | } 951 | 952 | $.event = { add: add, remove: remove } 953 | 954 | $.proxy = function(fn, context) { 955 | if ($.isFunction(fn)) { 956 | var proxyFn = function(){ return fn.apply(context, arguments) } 957 | proxyFn._zid = zid(fn) 958 | return proxyFn 959 | } else if (typeof context == 'string') { 960 | return $.proxy(fn[context], fn) 961 | } else { 962 | throw new TypeError("expected function") 963 | } 964 | } 965 | 966 | $.fn.bind = function(event, callback){ 967 | return this.each(function(){ 968 | add(this, event, callback) 969 | }) 970 | } 971 | $.fn.unbind = function(event, callback){ 972 | return this.each(function(){ 973 | remove(this, event, callback) 974 | }) 975 | } 976 | $.fn.one = function(event, callback){ 977 | return this.each(function(i, element){ 978 | add(this, event, callback, null, function(fn, type){ 979 | return function(){ 980 | var result = fn.apply(element, arguments) 981 | remove(element, type, fn) 982 | return result 983 | } 984 | }) 985 | }) 986 | } 987 | 988 | var returnTrue = function(){return true}, 989 | returnFalse = function(){return false}, 990 | ignoreProperties = /^([A-Z]|layer[XY]$)/, 991 | eventMethods = { 992 | preventDefault: 'isDefaultPrevented', 993 | stopImmediatePropagation: 'isImmediatePropagationStopped', 994 | stopPropagation: 'isPropagationStopped' 995 | } 996 | function createProxy(event) { 997 | var key, proxy = { originalEvent: event } 998 | for (key in event) 999 | if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key] 1000 | 1001 | $.each(eventMethods, function(name, predicate) { 1002 | proxy[name] = function(){ 1003 | this[predicate] = returnTrue 1004 | return event[name].apply(event, arguments) 1005 | } 1006 | proxy[predicate] = returnFalse 1007 | }) 1008 | return proxy 1009 | } 1010 | 1011 | // emulates the 'defaultPrevented' property for browsers that have none 1012 | function fix(event) { 1013 | if (!('defaultPrevented' in event)) { 1014 | event.defaultPrevented = false 1015 | var prevent = event.preventDefault 1016 | event.preventDefault = function() { 1017 | this.defaultPrevented = true 1018 | prevent.call(this) 1019 | } 1020 | } 1021 | } 1022 | 1023 | $.fn.delegate = function(selector, event, callback){ 1024 | return this.each(function(i, element){ 1025 | add(element, event, callback, selector, function(fn){ 1026 | return function(e){ 1027 | var evt, match = $(e.target).closest(selector, element).get(0) 1028 | if (match) { 1029 | evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element}) 1030 | return fn.apply(match, [evt].concat([].slice.call(arguments, 1))) 1031 | } 1032 | } 1033 | }) 1034 | }) 1035 | } 1036 | $.fn.undelegate = function(selector, event, callback){ 1037 | return this.each(function(){ 1038 | remove(this, event, callback, selector) 1039 | }) 1040 | } 1041 | 1042 | $.fn.live = function(event, callback){ 1043 | $(document.body).delegate(this.selector, event, callback) 1044 | return this 1045 | } 1046 | $.fn.die = function(event, callback){ 1047 | $(document.body).undelegate(this.selector, event, callback) 1048 | return this 1049 | } 1050 | 1051 | $.fn.on = function(event, selector, callback){ 1052 | return !selector || $.isFunction(selector) ? 1053 | this.bind(event, selector || callback) : this.delegate(selector, event, callback) 1054 | } 1055 | $.fn.off = function(event, selector, callback){ 1056 | return !selector || $.isFunction(selector) ? 1057 | this.unbind(event, selector || callback) : this.undelegate(selector, event, callback) 1058 | } 1059 | 1060 | $.fn.trigger = function(event, data){ 1061 | if (typeof event == 'string' || $.isPlainObject(event)) event = $.Event(event) 1062 | fix(event) 1063 | event.data = data 1064 | return this.each(function(){ 1065 | // items in the collection might not be DOM elements 1066 | // (todo: possibly support events on plain old objects) 1067 | if('dispatchEvent' in this) this.dispatchEvent(event) 1068 | }) 1069 | } 1070 | 1071 | // triggers event handlers on current element just as if an event occurred, 1072 | // doesn't trigger an actual event, doesn't bubble 1073 | $.fn.triggerHandler = function(event, data){ 1074 | var e, result 1075 | this.each(function(i, element){ 1076 | e = createProxy(typeof event == 'string' ? $.Event(event) : event) 1077 | e.data = data 1078 | e.target = element 1079 | $.each(findHandlers(element, event.type || event), function(i, handler){ 1080 | result = handler.proxy(e) 1081 | if (e.isImmediatePropagationStopped()) return false 1082 | }) 1083 | }) 1084 | return result 1085 | } 1086 | 1087 | // shortcut methods for `.bind(event, fn)` for each event type 1088 | ;('focusin focusout load resize scroll unload click dblclick '+ 1089 | 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+ 1090 | 'change select keydown keypress keyup error').split(' ').forEach(function(event) { 1091 | $.fn[event] = function(callback) { 1092 | return callback ? 1093 | this.bind(event, callback) : 1094 | this.trigger(event) 1095 | } 1096 | }) 1097 | 1098 | ;['focus', 'blur'].forEach(function(name) { 1099 | $.fn[name] = function(callback) { 1100 | if (callback) this.bind(name, callback) 1101 | else this.each(function(){ 1102 | try { this[name]() } 1103 | catch(e) {} 1104 | }) 1105 | return this 1106 | } 1107 | }) 1108 | 1109 | $.Event = function(type, props) { 1110 | if (typeof type != 'string') props = type, type = props.type 1111 | var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true 1112 | if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name]) 1113 | event.initEvent(type, bubbles, true, null, null, null, null, null, null, null, null, null, null, null, null) 1114 | event.isDefaultPrevented = function(){ return this.defaultPrevented } 1115 | return event 1116 | } 1117 | 1118 | })(Zepto) 1119 | 1120 | ;(function($){ 1121 | var jsonpID = 0, 1122 | document = window.document, 1123 | key, 1124 | name, 1125 | rscript = /)<[^<]*)*<\/script>/gi, 1126 | scriptTypeRE = /^(?:text|application)\/javascript/i, 1127 | xmlTypeRE = /^(?:text|application)\/xml/i, 1128 | jsonType = 'application/json', 1129 | htmlType = 'text/html', 1130 | blankRE = /^\s*$/ 1131 | 1132 | // trigger a custom event and return false if it was cancelled 1133 | function triggerAndReturn(context, eventName, data) { 1134 | var event = $.Event(eventName) 1135 | $(context).trigger(event, data) 1136 | return !event.defaultPrevented 1137 | } 1138 | 1139 | // trigger an Ajax "global" event 1140 | function triggerGlobal(settings, context, eventName, data) { 1141 | if (settings.global) return triggerAndReturn(context || document, eventName, data) 1142 | } 1143 | 1144 | // Number of active Ajax requests 1145 | $.active = 0 1146 | 1147 | function ajaxStart(settings) { 1148 | if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart') 1149 | } 1150 | function ajaxStop(settings) { 1151 | if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop') 1152 | } 1153 | 1154 | // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable 1155 | function ajaxBeforeSend(xhr, settings) { 1156 | var context = settings.context 1157 | if (settings.beforeSend.call(context, xhr, settings) === false || 1158 | triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false) 1159 | return false 1160 | 1161 | triggerGlobal(settings, context, 'ajaxSend', [xhr, settings]) 1162 | } 1163 | function ajaxSuccess(data, xhr, settings) { 1164 | var context = settings.context, status = 'success' 1165 | settings.success.call(context, data, status, xhr) 1166 | triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data]) 1167 | ajaxComplete(status, xhr, settings) 1168 | } 1169 | // type: "timeout", "error", "abort", "parsererror" 1170 | function ajaxError(error, type, xhr, settings) { 1171 | var context = settings.context 1172 | settings.error.call(context, xhr, type, error) 1173 | triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error]) 1174 | ajaxComplete(type, xhr, settings) 1175 | } 1176 | // status: "success", "notmodified", "error", "timeout", "abort", "parsererror" 1177 | function ajaxComplete(status, xhr, settings) { 1178 | var context = settings.context 1179 | settings.complete.call(context, xhr, status) 1180 | triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings]) 1181 | ajaxStop(settings) 1182 | } 1183 | 1184 | // Empty function, used as default callback 1185 | function empty() {} 1186 | 1187 | $.ajaxJSONP = function(options){ 1188 | if (!('type' in options)) return $.ajax(options) 1189 | 1190 | var callbackName = 'jsonp' + (++jsonpID), 1191 | script = document.createElement('script'), 1192 | cleanup = function() { 1193 | clearTimeout(abortTimeout) 1194 | $(script).remove() 1195 | delete window[callbackName] 1196 | }, 1197 | abort = function(type){ 1198 | cleanup() 1199 | // In case of manual abort or timeout, keep an empty function as callback 1200 | // so that the SCRIPT tag that eventually loads won't result in an error. 1201 | if (!type || type == 'timeout') window[callbackName] = empty 1202 | ajaxError(null, type || 'abort', xhr, options) 1203 | }, 1204 | xhr = { abort: abort }, abortTimeout 1205 | 1206 | if (ajaxBeforeSend(xhr, options) === false) { 1207 | abort('abort') 1208 | return false 1209 | } 1210 | 1211 | window[callbackName] = function(data){ 1212 | cleanup() 1213 | ajaxSuccess(data, xhr, options) 1214 | } 1215 | 1216 | script.onerror = function() { abort('error') } 1217 | 1218 | script.src = options.url.replace(/=\?/, '=' + callbackName) 1219 | $('head').append(script) 1220 | 1221 | if (options.timeout > 0) abortTimeout = setTimeout(function(){ 1222 | abort('timeout') 1223 | }, options.timeout) 1224 | 1225 | return xhr 1226 | } 1227 | 1228 | $.ajaxSettings = { 1229 | // Default type of request 1230 | type: 'GET', 1231 | // Callback that is executed before request 1232 | beforeSend: empty, 1233 | // Callback that is executed if the request succeeds 1234 | success: empty, 1235 | // Callback that is executed the the server drops error 1236 | error: empty, 1237 | // Callback that is executed on request complete (both: error and success) 1238 | complete: empty, 1239 | // The context for the callbacks 1240 | context: null, 1241 | // Whether to trigger "global" Ajax events 1242 | global: true, 1243 | // Transport 1244 | xhr: function () { 1245 | return new window.XMLHttpRequest() 1246 | }, 1247 | // MIME types mapping 1248 | accepts: { 1249 | script: 'text/javascript, application/javascript', 1250 | json: jsonType, 1251 | xml: 'application/xml, text/xml', 1252 | html: htmlType, 1253 | text: 'text/plain' 1254 | }, 1255 | // Whether the request is to another domain 1256 | crossDomain: false, 1257 | // Default timeout 1258 | timeout: 0, 1259 | // Whether data should be serialized to string 1260 | processData: true, 1261 | // Whether the browser should be allowed to cache GET responses 1262 | cache: true, 1263 | } 1264 | 1265 | function mimeToDataType(mime) { 1266 | if (mime) mime = mime.split(';', 2)[0] 1267 | return mime && ( mime == htmlType ? 'html' : 1268 | mime == jsonType ? 'json' : 1269 | scriptTypeRE.test(mime) ? 'script' : 1270 | xmlTypeRE.test(mime) && 'xml' ) || 'text' 1271 | } 1272 | 1273 | function appendQuery(url, query) { 1274 | return (url + '&' + query).replace(/[&?]{1,2}/, '?') 1275 | } 1276 | 1277 | // serialize payload and append it to the URL for GET requests 1278 | function serializeData(options) { 1279 | if (options.processData && options.data && $.type(options.data) != "string") 1280 | options.data = $.param(options.data, options.traditional) 1281 | if (options.data && (!options.type || options.type.toUpperCase() == 'GET')) 1282 | options.url = appendQuery(options.url, options.data) 1283 | } 1284 | 1285 | $.ajax = function(options){ 1286 | var settings = $.extend({}, options || {}) 1287 | for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key] 1288 | 1289 | ajaxStart(settings) 1290 | 1291 | if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) && 1292 | RegExp.$2 != window.location.host 1293 | 1294 | if (!settings.url) settings.url = window.location.toString() 1295 | serializeData(settings) 1296 | if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now()) 1297 | 1298 | var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url) 1299 | if (dataType == 'jsonp' || hasPlaceholder) { 1300 | if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?') 1301 | return $.ajaxJSONP(settings) 1302 | } 1303 | 1304 | var mime = settings.accepts[dataType], 1305 | baseHeaders = { }, 1306 | protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol, 1307 | xhr = settings.xhr(), abortTimeout 1308 | 1309 | if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest' 1310 | if (mime) { 1311 | baseHeaders['Accept'] = mime 1312 | if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0] 1313 | xhr.overrideMimeType && xhr.overrideMimeType(mime) 1314 | } 1315 | if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET')) 1316 | baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded') 1317 | settings.headers = $.extend(baseHeaders, settings.headers || {}) 1318 | 1319 | xhr.onreadystatechange = function(){ 1320 | if (xhr.readyState == 4) { 1321 | xhr.onreadystatechange = empty; 1322 | clearTimeout(abortTimeout) 1323 | var result, error = false 1324 | if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) { 1325 | dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type')) 1326 | result = xhr.responseText 1327 | 1328 | try { 1329 | // http://perfectionkills.com/global-eval-what-are-the-options/ 1330 | if (dataType == 'script') (1,eval)(result) 1331 | else if (dataType == 'xml') result = xhr.responseXML 1332 | else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result) 1333 | } catch (e) { error = e } 1334 | 1335 | if (error) ajaxError(error, 'parsererror', xhr, settings) 1336 | else ajaxSuccess(result, xhr, settings) 1337 | } else { 1338 | ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings) 1339 | } 1340 | } 1341 | } 1342 | 1343 | var async = 'async' in settings ? settings.async : true 1344 | xhr.open(settings.type, settings.url, async) 1345 | 1346 | for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name]) 1347 | 1348 | if (ajaxBeforeSend(xhr, settings) === false) { 1349 | xhr.abort() 1350 | return false 1351 | } 1352 | 1353 | if (settings.timeout > 0) abortTimeout = setTimeout(function(){ 1354 | xhr.onreadystatechange = empty 1355 | xhr.abort() 1356 | ajaxError(null, 'timeout', xhr, settings) 1357 | }, settings.timeout) 1358 | 1359 | // avoid sending empty string (#319) 1360 | xhr.send(settings.data ? settings.data : null) 1361 | return xhr 1362 | } 1363 | 1364 | // handle optional data/success arguments 1365 | function parseArguments(url, data, success, dataType) { 1366 | var hasData = !$.isFunction(data) 1367 | return { 1368 | url: url, 1369 | data: hasData ? data : undefined, 1370 | success: !hasData ? data : $.isFunction(success) ? success : undefined, 1371 | dataType: hasData ? dataType || success : success 1372 | } 1373 | } 1374 | 1375 | $.get = function(url, data, success, dataType){ 1376 | return $.ajax(parseArguments.apply(null, arguments)) 1377 | } 1378 | 1379 | $.post = function(url, data, success, dataType){ 1380 | var options = parseArguments.apply(null, arguments) 1381 | options.type = 'POST' 1382 | return $.ajax(options) 1383 | } 1384 | 1385 | $.getJSON = function(url, data, success){ 1386 | var options = parseArguments.apply(null, arguments) 1387 | options.dataType = 'json' 1388 | return $.ajax(options) 1389 | } 1390 | 1391 | $.fn.load = function(url, data, success){ 1392 | if (!this.length) return this 1393 | var self = this, parts = url.split(/\s/), selector, 1394 | options = parseArguments(url, data, success), 1395 | callback = options.success 1396 | if (parts.length > 1) options.url = parts[0], selector = parts[1] 1397 | options.success = function(response){ 1398 | self.html(selector ? 1399 | $('
').html(response.replace(rscript, "")).find(selector) 1400 | : response) 1401 | callback && callback.apply(self, arguments) 1402 | } 1403 | $.ajax(options) 1404 | return this 1405 | } 1406 | 1407 | var escape = encodeURIComponent 1408 | 1409 | function serialize(params, obj, traditional, scope){ 1410 | var type, array = $.isArray(obj) 1411 | $.each(obj, function(key, value) { 1412 | type = $.type(value) 1413 | if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']' 1414 | // handle data in serializeArray() format 1415 | if (!scope && array) params.add(value.name, value.value) 1416 | // recurse into nested objects 1417 | else if (type == "array" || (!traditional && type == "object")) 1418 | serialize(params, value, traditional, key) 1419 | else params.add(key, value) 1420 | }) 1421 | } 1422 | 1423 | $.param = function(obj, traditional){ 1424 | var params = [] 1425 | params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) } 1426 | serialize(params, obj, traditional) 1427 | return params.join('&').replace(/%20/g, '+') 1428 | } 1429 | })(Zepto) 1430 | 1431 | ;(function ($) { 1432 | $.fn.serializeArray = function () { 1433 | var result = [], el 1434 | $( Array.prototype.slice.call(this.get(0).elements) ).each(function () { 1435 | el = $(this) 1436 | var type = el.attr('type') 1437 | if (this.nodeName.toLowerCase() != 'fieldset' && 1438 | !this.disabled && type != 'submit' && type != 'reset' && type != 'button' && 1439 | ((type != 'radio' && type != 'checkbox') || this.checked)) 1440 | result.push({ 1441 | name: el.attr('name'), 1442 | value: el.val() 1443 | }) 1444 | }) 1445 | return result 1446 | } 1447 | 1448 | $.fn.serialize = function () { 1449 | var result = [] 1450 | this.serializeArray().forEach(function (elm) { 1451 | result.push( encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value) ) 1452 | }) 1453 | return result.join('&') 1454 | } 1455 | 1456 | $.fn.submit = function (callback) { 1457 | if (callback) this.bind('submit', callback) 1458 | else if (this.length) { 1459 | var event = $.Event('submit') 1460 | this.eq(0).trigger(event) 1461 | if (!event.defaultPrevented) this.get(0).submit() 1462 | } 1463 | return this 1464 | } 1465 | 1466 | })(Zepto) 1467 | 1468 | ;(function($, undefined){ 1469 | var prefix = '', eventPrefix, endEventName, endAnimationName, 1470 | vendors = { Webkit: 'webkit', Moz: '', O: 'o', ms: 'MS' }, 1471 | document = window.document, testEl = document.createElement('div'), 1472 | supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i, 1473 | transform, 1474 | transitionProperty, transitionDuration, transitionTiming, 1475 | animationName, animationDuration, animationTiming, 1476 | cssReset = {} 1477 | 1478 | function dasherize(str) { return downcase(str.replace(/([a-z])([A-Z])/, '$1-$2')) } 1479 | function downcase(str) { return str.toLowerCase() } 1480 | function normalizeEvent(name) { return eventPrefix ? eventPrefix + name : downcase(name) } 1481 | 1482 | $.each(vendors, function(vendor, event){ 1483 | if (testEl.style[vendor + 'TransitionProperty'] !== undefined) { 1484 | prefix = '-' + downcase(vendor) + '-' 1485 | eventPrefix = event 1486 | return false 1487 | } 1488 | }) 1489 | 1490 | transform = prefix + 'transform' 1491 | cssReset[transitionProperty = prefix + 'transition-property'] = 1492 | cssReset[transitionDuration = prefix + 'transition-duration'] = 1493 | cssReset[transitionTiming = prefix + 'transition-timing-function'] = 1494 | cssReset[animationName = prefix + 'animation-name'] = 1495 | cssReset[animationDuration = prefix + 'animation-duration'] = 1496 | cssReset[animationTiming = prefix + 'animation-timing-function'] = '' 1497 | 1498 | $.fx = { 1499 | off: (eventPrefix === undefined && testEl.style.transitionProperty === undefined), 1500 | speeds: { _default: 400, fast: 200, slow: 600 }, 1501 | cssPrefix: prefix, 1502 | transitionEnd: normalizeEvent('TransitionEnd'), 1503 | animationEnd: normalizeEvent('AnimationEnd') 1504 | } 1505 | 1506 | $.fn.animate = function(properties, duration, ease, callback){ 1507 | if ($.isPlainObject(duration)) 1508 | ease = duration.easing, callback = duration.complete, duration = duration.duration 1509 | if (duration) duration = (typeof duration == 'number' ? duration : 1510 | ($.fx.speeds[duration] || $.fx.speeds._default)) / 1000 1511 | return this.anim(properties, duration, ease, callback) 1512 | } 1513 | 1514 | $.fn.anim = function(properties, duration, ease, callback){ 1515 | var key, cssValues = {}, cssProperties, transforms = '', 1516 | that = this, wrappedCallback, endEvent = $.fx.transitionEnd 1517 | 1518 | if (duration === undefined) duration = 0.4 1519 | if ($.fx.off) duration = 0 1520 | 1521 | if (typeof properties == 'string') { 1522 | // keyframe animation 1523 | cssValues[animationName] = properties 1524 | cssValues[animationDuration] = duration + 's' 1525 | cssValues[animationTiming] = (ease || 'linear') 1526 | endEvent = $.fx.animationEnd 1527 | } else { 1528 | cssProperties = [] 1529 | // CSS transitions 1530 | for (key in properties) 1531 | if (supportedTransforms.test(key)) transforms += key + '(' + properties[key] + ') ' 1532 | else cssValues[key] = properties[key], cssProperties.push(dasherize(key)) 1533 | 1534 | if (transforms) cssValues[transform] = transforms, cssProperties.push(transform) 1535 | if (duration > 0 && typeof properties === 'object') { 1536 | cssValues[transitionProperty] = cssProperties.join(', ') 1537 | cssValues[transitionDuration] = duration + 's' 1538 | cssValues[transitionTiming] = (ease || 'linear') 1539 | } 1540 | } 1541 | 1542 | wrappedCallback = function(event){ 1543 | if (typeof event !== 'undefined') { 1544 | if (event.target !== event.currentTarget) return // makes sure the event didn't bubble from "below" 1545 | $(event.target).unbind(endEvent, wrappedCallback) 1546 | } 1547 | $(this).css(cssReset) 1548 | callback && callback.call(this) 1549 | } 1550 | if (duration > 0) this.bind(endEvent, wrappedCallback) 1551 | 1552 | // trigger page reflow so new elements can animate 1553 | this.size() && this.get(0).clientLeft 1554 | 1555 | this.css(cssValues) 1556 | 1557 | if (duration <= 0) setTimeout(function() { 1558 | that.each(function(){ wrappedCallback.call(this) }) 1559 | }, 0) 1560 | 1561 | return this 1562 | } 1563 | 1564 | testEl = null 1565 | })(Zepto) 1566 | -------------------------------------------------------------------------------- /media/stylesheets/font-awesome.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 3.2.1 3 | * the iconic font designed for Bootstrap 4 | * ------------------------------------------------------------------------------ 5 | * The full suite of pictographic icons, examples, and documentation can be 6 | * found at http://fontawesome.io. Stay up to date on Twitter at 7 | * http://twitter.com/fontawesome. 8 | * 9 | * License 10 | * ------------------------------------------------------------------------------ 11 | * - The Font Awesome font is licensed under SIL OFL 1.1 - 12 | * http://scripts.sil.org/OFL 13 | * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - 14 | * http://opensource.org/licenses/mit-license.html 15 | * - Font Awesome documentation licensed under CC BY 3.0 - 16 | * http://creativecommons.org/licenses/by/3.0/ 17 | * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: 18 | * "Font Awesome by Dave Gandy - http://fontawesome.io" 19 | * 20 | * Author - Dave Gandy 21 | * ------------------------------------------------------------------------------ 22 | * Email: dave@fontawesome.io 23 | * Twitter: http://twitter.com/davegandy 24 | * Work: Lead Product Designer @ Kyruus - http://kyruus.com 25 | */ 26 | /* FONT PATH 27 | * -------------------------- */ 28 | @font-face { 29 | font-family: 'FontAwesome'; 30 | src: url('../font/fontawesome-webfont.eot?v=3.2.1'); 31 | src: url('../font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../font/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg'); 32 | font-weight: normal; 33 | font-style: normal; 34 | } 35 | /* FONT AWESOME CORE 36 | * -------------------------- */ 37 | [class^="icon-"], 38 | [class*=" icon-"] { 39 | font-family: FontAwesome; 40 | font-weight: normal; 41 | font-style: normal; 42 | text-decoration: inherit; 43 | -webkit-font-smoothing: antialiased; 44 | *margin-right: .3em; 45 | } 46 | [class^="icon-"]:before, 47 | [class*=" icon-"]:before { 48 | text-decoration: inherit; 49 | display: inline-block; 50 | speak: none; 51 | } 52 | /* makes the font 33% larger relative to the icon container */ 53 | .icon-large:before { 54 | vertical-align: -10%; 55 | font-size: 1.3333333333333333em; 56 | } 57 | /* makes sure icons active on rollover in links */ 58 | a [class^="icon-"], 59 | a [class*=" icon-"] { 60 | display: inline; 61 | } 62 | /* increased font size for icon-large */ 63 | [class^="icon-"].icon-fixed-width, 64 | [class*=" icon-"].icon-fixed-width { 65 | display: inline-block; 66 | width: 1.1428571428571428em; 67 | text-align: right; 68 | padding-right: 0.2857142857142857em; 69 | } 70 | [class^="icon-"].icon-fixed-width.icon-large, 71 | [class*=" icon-"].icon-fixed-width.icon-large { 72 | width: 1.4285714285714286em; 73 | } 74 | .icons-ul { 75 | margin-left: 2.142857142857143em; 76 | list-style-type: none; 77 | } 78 | .icons-ul > li { 79 | position: relative; 80 | } 81 | .icons-ul .icon-li { 82 | position: absolute; 83 | left: -2.142857142857143em; 84 | width: 2.142857142857143em; 85 | text-align: center; 86 | line-height: inherit; 87 | } 88 | [class^="icon-"].hide, 89 | [class*=" icon-"].hide { 90 | display: none; 91 | } 92 | .icon-muted { 93 | color: #eeeeee; 94 | } 95 | .icon-light { 96 | color: #ffffff; 97 | } 98 | .icon-dark { 99 | color: #333333; 100 | } 101 | .icon-border { 102 | border: solid 1px #eeeeee; 103 | padding: .2em .25em .15em; 104 | -webkit-border-radius: 3px; 105 | -moz-border-radius: 3px; 106 | border-radius: 3px; 107 | } 108 | .icon-2x { 109 | font-size: 2em; 110 | } 111 | .icon-2x.icon-border { 112 | border-width: 2px; 113 | -webkit-border-radius: 4px; 114 | -moz-border-radius: 4px; 115 | border-radius: 4px; 116 | } 117 | .icon-3x { 118 | font-size: 3em; 119 | } 120 | .icon-3x.icon-border { 121 | border-width: 3px; 122 | -webkit-border-radius: 5px; 123 | -moz-border-radius: 5px; 124 | border-radius: 5px; 125 | } 126 | .icon-4x { 127 | font-size: 4em; 128 | } 129 | .icon-4x.icon-border { 130 | border-width: 4px; 131 | -webkit-border-radius: 6px; 132 | -moz-border-radius: 6px; 133 | border-radius: 6px; 134 | } 135 | .icon-5x { 136 | font-size: 5em; 137 | } 138 | .icon-5x.icon-border { 139 | border-width: 5px; 140 | -webkit-border-radius: 7px; 141 | -moz-border-radius: 7px; 142 | border-radius: 7px; 143 | } 144 | .pull-right { 145 | float: right; 146 | } 147 | .pull-left { 148 | float: left; 149 | } 150 | [class^="icon-"].pull-left, 151 | [class*=" icon-"].pull-left { 152 | margin-right: .3em; 153 | } 154 | [class^="icon-"].pull-right, 155 | [class*=" icon-"].pull-right { 156 | margin-left: .3em; 157 | } 158 | /* BOOTSTRAP SPECIFIC CLASSES 159 | * -------------------------- */ 160 | /* Bootstrap 2.0 sprites.less reset */ 161 | [class^="icon-"], 162 | [class*=" icon-"] { 163 | display: inline; 164 | width: auto; 165 | height: auto; 166 | line-height: normal; 167 | vertical-align: baseline; 168 | background-image: none; 169 | background-position: 0% 0%; 170 | background-repeat: repeat; 171 | margin-top: 0; 172 | } 173 | /* more sprites.less reset */ 174 | .icon-white, 175 | .nav-pills > .active > a > [class^="icon-"], 176 | .nav-pills > .active > a > [class*=" icon-"], 177 | .nav-list > .active > a > [class^="icon-"], 178 | .nav-list > .active > a > [class*=" icon-"], 179 | .navbar-inverse .nav > .active > a > [class^="icon-"], 180 | .navbar-inverse .nav > .active > a > [class*=" icon-"], 181 | .dropdown-menu > li > a:hover > [class^="icon-"], 182 | .dropdown-menu > li > a:hover > [class*=" icon-"], 183 | .dropdown-menu > .active > a > [class^="icon-"], 184 | .dropdown-menu > .active > a > [class*=" icon-"], 185 | .dropdown-submenu:hover > a > [class^="icon-"], 186 | .dropdown-submenu:hover > a > [class*=" icon-"] { 187 | background-image: none; 188 | } 189 | /* keeps Bootstrap styles with and without icons the same */ 190 | .btn [class^="icon-"].icon-large, 191 | .nav [class^="icon-"].icon-large, 192 | .btn [class*=" icon-"].icon-large, 193 | .nav [class*=" icon-"].icon-large { 194 | line-height: .9em; 195 | } 196 | .btn [class^="icon-"].icon-spin, 197 | .nav [class^="icon-"].icon-spin, 198 | .btn [class*=" icon-"].icon-spin, 199 | .nav [class*=" icon-"].icon-spin { 200 | display: inline-block; 201 | } 202 | .nav-tabs [class^="icon-"], 203 | .nav-pills [class^="icon-"], 204 | .nav-tabs [class*=" icon-"], 205 | .nav-pills [class*=" icon-"], 206 | .nav-tabs [class^="icon-"].icon-large, 207 | .nav-pills [class^="icon-"].icon-large, 208 | .nav-tabs [class*=" icon-"].icon-large, 209 | .nav-pills [class*=" icon-"].icon-large { 210 | line-height: .9em; 211 | } 212 | .btn [class^="icon-"].pull-left.icon-2x, 213 | .btn [class*=" icon-"].pull-left.icon-2x, 214 | .btn [class^="icon-"].pull-right.icon-2x, 215 | .btn [class*=" icon-"].pull-right.icon-2x { 216 | margin-top: .18em; 217 | } 218 | .btn [class^="icon-"].icon-spin.icon-large, 219 | .btn [class*=" icon-"].icon-spin.icon-large { 220 | line-height: .8em; 221 | } 222 | .btn.btn-small [class^="icon-"].pull-left.icon-2x, 223 | .btn.btn-small [class*=" icon-"].pull-left.icon-2x, 224 | .btn.btn-small [class^="icon-"].pull-right.icon-2x, 225 | .btn.btn-small [class*=" icon-"].pull-right.icon-2x { 226 | margin-top: .25em; 227 | } 228 | .btn.btn-large [class^="icon-"], 229 | .btn.btn-large [class*=" icon-"] { 230 | margin-top: 0; 231 | } 232 | .btn.btn-large [class^="icon-"].pull-left.icon-2x, 233 | .btn.btn-large [class*=" icon-"].pull-left.icon-2x, 234 | .btn.btn-large [class^="icon-"].pull-right.icon-2x, 235 | .btn.btn-large [class*=" icon-"].pull-right.icon-2x { 236 | margin-top: .05em; 237 | } 238 | .btn.btn-large [class^="icon-"].pull-left.icon-2x, 239 | .btn.btn-large [class*=" icon-"].pull-left.icon-2x { 240 | margin-right: .2em; 241 | } 242 | .btn.btn-large [class^="icon-"].pull-right.icon-2x, 243 | .btn.btn-large [class*=" icon-"].pull-right.icon-2x { 244 | margin-left: .2em; 245 | } 246 | /* Fixes alignment in nav lists */ 247 | .nav-list [class^="icon-"], 248 | .nav-list [class*=" icon-"] { 249 | line-height: inherit; 250 | } 251 | /* EXTRAS 252 | * -------------------------- */ 253 | /* Stacked and layered icon */ 254 | .icon-stack { 255 | position: relative; 256 | display: inline-block; 257 | width: 2em; 258 | height: 2em; 259 | line-height: 2em; 260 | vertical-align: -35%; 261 | } 262 | .icon-stack [class^="icon-"], 263 | .icon-stack [class*=" icon-"] { 264 | display: block; 265 | text-align: center; 266 | position: absolute; 267 | width: 100%; 268 | height: 100%; 269 | font-size: 1em; 270 | line-height: inherit; 271 | *line-height: 2em; 272 | } 273 | .icon-stack .icon-stack-base { 274 | font-size: 2em; 275 | *line-height: 1em; 276 | } 277 | /* Animated rotating icon */ 278 | .icon-spin { 279 | display: inline-block; 280 | -moz-animation: spin 2s infinite linear; 281 | -o-animation: spin 2s infinite linear; 282 | -webkit-animation: spin 2s infinite linear; 283 | animation: spin 2s infinite linear; 284 | } 285 | /* Prevent stack and spinners from being taken inline when inside a link */ 286 | a .icon-stack, 287 | a .icon-spin { 288 | display: inline-block; 289 | text-decoration: none; 290 | } 291 | @-moz-keyframes spin { 292 | 0% { 293 | -moz-transform: rotate(0deg); 294 | } 295 | 100% { 296 | -moz-transform: rotate(359deg); 297 | } 298 | } 299 | @-webkit-keyframes spin { 300 | 0% { 301 | -webkit-transform: rotate(0deg); 302 | } 303 | 100% { 304 | -webkit-transform: rotate(359deg); 305 | } 306 | } 307 | @-o-keyframes spin { 308 | 0% { 309 | -o-transform: rotate(0deg); 310 | } 311 | 100% { 312 | -o-transform: rotate(359deg); 313 | } 314 | } 315 | @-ms-keyframes spin { 316 | 0% { 317 | -ms-transform: rotate(0deg); 318 | } 319 | 100% { 320 | -ms-transform: rotate(359deg); 321 | } 322 | } 323 | @keyframes spin { 324 | 0% { 325 | transform: rotate(0deg); 326 | } 327 | 100% { 328 | transform: rotate(359deg); 329 | } 330 | } 331 | /* Icon rotations and mirroring */ 332 | .icon-rotate-90:before { 333 | -webkit-transform: rotate(90deg); 334 | -moz-transform: rotate(90deg); 335 | -ms-transform: rotate(90deg); 336 | -o-transform: rotate(90deg); 337 | transform: rotate(90deg); 338 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); 339 | } 340 | .icon-rotate-180:before { 341 | -webkit-transform: rotate(180deg); 342 | -moz-transform: rotate(180deg); 343 | -ms-transform: rotate(180deg); 344 | -o-transform: rotate(180deg); 345 | transform: rotate(180deg); 346 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); 347 | } 348 | .icon-rotate-270:before { 349 | -webkit-transform: rotate(270deg); 350 | -moz-transform: rotate(270deg); 351 | -ms-transform: rotate(270deg); 352 | -o-transform: rotate(270deg); 353 | transform: rotate(270deg); 354 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); 355 | } 356 | .icon-flip-horizontal:before { 357 | -webkit-transform: scale(-1, 1); 358 | -moz-transform: scale(-1, 1); 359 | -ms-transform: scale(-1, 1); 360 | -o-transform: scale(-1, 1); 361 | transform: scale(-1, 1); 362 | } 363 | .icon-flip-vertical:before { 364 | -webkit-transform: scale(1, -1); 365 | -moz-transform: scale(1, -1); 366 | -ms-transform: scale(1, -1); 367 | -o-transform: scale(1, -1); 368 | transform: scale(1, -1); 369 | } 370 | /* ensure rotation occurs inside anchor tags */ 371 | a .icon-rotate-90:before, 372 | a .icon-rotate-180:before, 373 | a .icon-rotate-270:before, 374 | a .icon-flip-horizontal:before, 375 | a .icon-flip-vertical:before { 376 | display: inline-block; 377 | } 378 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen 379 | readers do not read off random characters that represent icons */ 380 | .icon-glass:before { 381 | content: "\f000"; 382 | } 383 | .icon-music:before { 384 | content: "\f001"; 385 | } 386 | .icon-search:before { 387 | content: "\f002"; 388 | } 389 | .icon-envelope-alt:before { 390 | content: "\f003"; 391 | } 392 | .icon-heart:before { 393 | content: "\f004"; 394 | } 395 | .icon-star:before { 396 | content: "\f005"; 397 | } 398 | .icon-star-empty:before { 399 | content: "\f006"; 400 | } 401 | .icon-user:before { 402 | content: "\f007"; 403 | } 404 | .icon-film:before { 405 | content: "\f008"; 406 | } 407 | .icon-th-large:before { 408 | content: "\f009"; 409 | } 410 | .icon-th:before { 411 | content: "\f00a"; 412 | } 413 | .icon-th-list:before { 414 | content: "\f00b"; 415 | } 416 | .icon-ok:before { 417 | content: "\f00c"; 418 | } 419 | .icon-remove:before { 420 | content: "\f00d"; 421 | } 422 | .icon-zoom-in:before { 423 | content: "\f00e"; 424 | } 425 | .icon-zoom-out:before { 426 | content: "\f010"; 427 | } 428 | .icon-power-off:before, 429 | .icon-off:before { 430 | content: "\f011"; 431 | } 432 | .icon-signal:before { 433 | content: "\f012"; 434 | } 435 | .icon-gear:before, 436 | .icon-cog:before { 437 | content: "\f013"; 438 | } 439 | .icon-trash:before { 440 | content: "\f014"; 441 | } 442 | .icon-home:before { 443 | content: "\f015"; 444 | } 445 | .icon-file-alt:before { 446 | content: "\f016"; 447 | } 448 | .icon-time:before { 449 | content: "\f017"; 450 | } 451 | .icon-road:before { 452 | content: "\f018"; 453 | } 454 | .icon-download-alt:before { 455 | content: "\f019"; 456 | } 457 | .icon-download:before { 458 | content: "\f01a"; 459 | } 460 | .icon-upload:before { 461 | content: "\f01b"; 462 | } 463 | .icon-inbox:before { 464 | content: "\f01c"; 465 | } 466 | .icon-play-circle:before { 467 | content: "\f01d"; 468 | } 469 | .icon-rotate-right:before, 470 | .icon-repeat:before { 471 | content: "\f01e"; 472 | } 473 | .icon-refresh:before { 474 | content: "\f021"; 475 | } 476 | .icon-list-alt:before { 477 | content: "\f022"; 478 | } 479 | .icon-lock:before { 480 | content: "\f023"; 481 | } 482 | .icon-flag:before { 483 | content: "\f024"; 484 | } 485 | .icon-headphones:before { 486 | content: "\f025"; 487 | } 488 | .icon-volume-off:before { 489 | content: "\f026"; 490 | } 491 | .icon-volume-down:before { 492 | content: "\f027"; 493 | } 494 | .icon-volume-up:before { 495 | content: "\f028"; 496 | } 497 | .icon-qrcode:before { 498 | content: "\f029"; 499 | } 500 | .icon-barcode:before { 501 | content: "\f02a"; 502 | } 503 | .icon-tag:before { 504 | content: "\f02b"; 505 | } 506 | .icon-tags:before { 507 | content: "\f02c"; 508 | } 509 | .icon-book:before { 510 | content: "\f02d"; 511 | } 512 | .icon-bookmark:before { 513 | content: "\f02e"; 514 | } 515 | .icon-print:before { 516 | content: "\f02f"; 517 | } 518 | .icon-camera:before { 519 | content: "\f030"; 520 | } 521 | .icon-font:before { 522 | content: "\f031"; 523 | } 524 | .icon-bold:before { 525 | content: "\f032"; 526 | } 527 | .icon-italic:before { 528 | content: "\f033"; 529 | } 530 | .icon-text-height:before { 531 | content: "\f034"; 532 | } 533 | .icon-text-width:before { 534 | content: "\f035"; 535 | } 536 | .icon-align-left:before { 537 | content: "\f036"; 538 | } 539 | .icon-align-center:before { 540 | content: "\f037"; 541 | } 542 | .icon-align-right:before { 543 | content: "\f038"; 544 | } 545 | .icon-align-justify:before { 546 | content: "\f039"; 547 | } 548 | .icon-list:before { 549 | content: "\f03a"; 550 | } 551 | .icon-indent-left:before { 552 | content: "\f03b"; 553 | } 554 | .icon-indent-right:before { 555 | content: "\f03c"; 556 | } 557 | .icon-facetime-video:before { 558 | content: "\f03d"; 559 | } 560 | .icon-picture:before { 561 | content: "\f03e"; 562 | } 563 | .icon-pencil:before { 564 | content: "\f040"; 565 | } 566 | .icon-map-marker:before { 567 | content: "\f041"; 568 | } 569 | .icon-adjust:before { 570 | content: "\f042"; 571 | } 572 | .icon-tint:before { 573 | content: "\f043"; 574 | } 575 | .icon-edit:before { 576 | content: "\f044"; 577 | } 578 | .icon-share:before { 579 | content: "\f045"; 580 | } 581 | .icon-check:before { 582 | content: "\f046"; 583 | } 584 | .icon-move:before { 585 | content: "\f047"; 586 | } 587 | .icon-step-backward:before { 588 | content: "\f048"; 589 | } 590 | .icon-fast-backward:before { 591 | content: "\f049"; 592 | } 593 | .icon-backward:before { 594 | content: "\f04a"; 595 | } 596 | .icon-play:before { 597 | content: "\f04b"; 598 | } 599 | .icon-pause:before { 600 | content: "\f04c"; 601 | } 602 | .icon-stop:before { 603 | content: "\f04d"; 604 | } 605 | .icon-forward:before { 606 | content: "\f04e"; 607 | } 608 | .icon-fast-forward:before { 609 | content: "\f050"; 610 | } 611 | .icon-step-forward:before { 612 | content: "\f051"; 613 | } 614 | .icon-eject:before { 615 | content: "\f052"; 616 | } 617 | .icon-chevron-left:before { 618 | content: "\f053"; 619 | } 620 | .icon-chevron-right:before { 621 | content: "\f054"; 622 | } 623 | .icon-plus-sign:before { 624 | content: "\f055"; 625 | } 626 | .icon-minus-sign:before { 627 | content: "\f056"; 628 | } 629 | .icon-remove-sign:before { 630 | content: "\f057"; 631 | } 632 | .icon-ok-sign:before { 633 | content: "\f058"; 634 | } 635 | .icon-question-sign:before { 636 | content: "\f059"; 637 | } 638 | .icon-info-sign:before { 639 | content: "\f05a"; 640 | } 641 | .icon-screenshot:before { 642 | content: "\f05b"; 643 | } 644 | .icon-remove-circle:before { 645 | content: "\f05c"; 646 | } 647 | .icon-ok-circle:before { 648 | content: "\f05d"; 649 | } 650 | .icon-ban-circle:before { 651 | content: "\f05e"; 652 | } 653 | .icon-arrow-left:before { 654 | content: "\f060"; 655 | } 656 | .icon-arrow-right:before { 657 | content: "\f061"; 658 | } 659 | .icon-arrow-up:before { 660 | content: "\f062"; 661 | } 662 | .icon-arrow-down:before { 663 | content: "\f063"; 664 | } 665 | .icon-mail-forward:before, 666 | .icon-share-alt:before { 667 | content: "\f064"; 668 | } 669 | .icon-resize-full:before { 670 | content: "\f065"; 671 | } 672 | .icon-resize-small:before { 673 | content: "\f066"; 674 | } 675 | .icon-plus:before { 676 | content: "\f067"; 677 | } 678 | .icon-minus:before { 679 | content: "\f068"; 680 | } 681 | .icon-asterisk:before { 682 | content: "\f069"; 683 | } 684 | .icon-exclamation-sign:before { 685 | content: "\f06a"; 686 | } 687 | .icon-gift:before { 688 | content: "\f06b"; 689 | } 690 | .icon-leaf:before { 691 | content: "\f06c"; 692 | } 693 | .icon-fire:before { 694 | content: "\f06d"; 695 | } 696 | .icon-eye-open:before { 697 | content: "\f06e"; 698 | } 699 | .icon-eye-close:before { 700 | content: "\f070"; 701 | } 702 | .icon-warning-sign:before { 703 | content: "\f071"; 704 | } 705 | .icon-plane:before { 706 | content: "\f072"; 707 | } 708 | .icon-calendar:before { 709 | content: "\f073"; 710 | } 711 | .icon-random:before { 712 | content: "\f074"; 713 | } 714 | .icon-comment:before { 715 | content: "\f075"; 716 | } 717 | .icon-magnet:before { 718 | content: "\f076"; 719 | } 720 | .icon-chevron-up:before { 721 | content: "\f077"; 722 | } 723 | .icon-chevron-down:before { 724 | content: "\f078"; 725 | } 726 | .icon-retweet:before { 727 | content: "\f079"; 728 | } 729 | .icon-shopping-cart:before { 730 | content: "\f07a"; 731 | } 732 | .icon-folder-close:before { 733 | content: "\f07b"; 734 | } 735 | .icon-folder-open:before { 736 | content: "\f07c"; 737 | } 738 | .icon-resize-vertical:before { 739 | content: "\f07d"; 740 | } 741 | .icon-resize-horizontal:before { 742 | content: "\f07e"; 743 | } 744 | .icon-bar-chart:before { 745 | content: "\f080"; 746 | } 747 | .icon-twitter-sign:before { 748 | content: "\f081"; 749 | } 750 | .icon-facebook-sign:before { 751 | content: "\f082"; 752 | } 753 | .icon-camera-retro:before { 754 | content: "\f083"; 755 | } 756 | .icon-key:before { 757 | content: "\f084"; 758 | } 759 | .icon-gears:before, 760 | .icon-cogs:before { 761 | content: "\f085"; 762 | } 763 | .icon-comments:before { 764 | content: "\f086"; 765 | } 766 | .icon-thumbs-up-alt:before { 767 | content: "\f087"; 768 | } 769 | .icon-thumbs-down-alt:before { 770 | content: "\f088"; 771 | } 772 | .icon-star-half:before { 773 | content: "\f089"; 774 | } 775 | .icon-heart-empty:before { 776 | content: "\f08a"; 777 | } 778 | .icon-signout:before { 779 | content: "\f08b"; 780 | } 781 | .icon-linkedin-sign:before { 782 | content: "\f08c"; 783 | } 784 | .icon-pushpin:before { 785 | content: "\f08d"; 786 | } 787 | .icon-external-link:before { 788 | content: "\f08e"; 789 | } 790 | .icon-signin:before { 791 | content: "\f090"; 792 | } 793 | .icon-trophy:before { 794 | content: "\f091"; 795 | } 796 | .icon-github-sign:before { 797 | content: "\f092"; 798 | } 799 | .icon-upload-alt:before { 800 | content: "\f093"; 801 | } 802 | .icon-lemon:before { 803 | content: "\f094"; 804 | } 805 | .icon-phone:before { 806 | content: "\f095"; 807 | } 808 | .icon-unchecked:before, 809 | .icon-check-empty:before { 810 | content: "\f096"; 811 | } 812 | .icon-bookmark-empty:before { 813 | content: "\f097"; 814 | } 815 | .icon-phone-sign:before { 816 | content: "\f098"; 817 | } 818 | .icon-twitter:before { 819 | content: "\f099"; 820 | } 821 | .icon-facebook:before { 822 | content: "\f09a"; 823 | } 824 | .icon-github:before { 825 | content: "\f09b"; 826 | } 827 | .icon-unlock:before { 828 | content: "\f09c"; 829 | } 830 | .icon-credit-card:before { 831 | content: "\f09d"; 832 | } 833 | .icon-rss:before { 834 | content: "\f09e"; 835 | } 836 | .icon-hdd:before { 837 | content: "\f0a0"; 838 | } 839 | .icon-bullhorn:before { 840 | content: "\f0a1"; 841 | } 842 | .icon-bell:before { 843 | content: "\f0a2"; 844 | } 845 | .icon-certificate:before { 846 | content: "\f0a3"; 847 | } 848 | .icon-hand-right:before { 849 | content: "\f0a4"; 850 | } 851 | .icon-hand-left:before { 852 | content: "\f0a5"; 853 | } 854 | .icon-hand-up:before { 855 | content: "\f0a6"; 856 | } 857 | .icon-hand-down:before { 858 | content: "\f0a7"; 859 | } 860 | .icon-circle-arrow-left:before { 861 | content: "\f0a8"; 862 | } 863 | .icon-circle-arrow-right:before { 864 | content: "\f0a9"; 865 | } 866 | .icon-circle-arrow-up:before { 867 | content: "\f0aa"; 868 | } 869 | .icon-circle-arrow-down:before { 870 | content: "\f0ab"; 871 | } 872 | .icon-globe:before { 873 | content: "\f0ac"; 874 | } 875 | .icon-wrench:before { 876 | content: "\f0ad"; 877 | } 878 | .icon-tasks:before { 879 | content: "\f0ae"; 880 | } 881 | .icon-filter:before { 882 | content: "\f0b0"; 883 | } 884 | .icon-briefcase:before { 885 | content: "\f0b1"; 886 | } 887 | .icon-fullscreen:before { 888 | content: "\f0b2"; 889 | } 890 | .icon-group:before { 891 | content: "\f0c0"; 892 | } 893 | .icon-link:before { 894 | content: "\f0c1"; 895 | } 896 | .icon-cloud:before { 897 | content: "\f0c2"; 898 | } 899 | .icon-beaker:before { 900 | content: "\f0c3"; 901 | } 902 | .icon-cut:before { 903 | content: "\f0c4"; 904 | } 905 | .icon-copy:before { 906 | content: "\f0c5"; 907 | } 908 | .icon-paperclip:before, 909 | .icon-paper-clip:before { 910 | content: "\f0c6"; 911 | } 912 | .icon-save:before { 913 | content: "\f0c7"; 914 | } 915 | .icon-sign-blank:before { 916 | content: "\f0c8"; 917 | } 918 | .icon-reorder:before { 919 | content: "\f0c9"; 920 | } 921 | .icon-list-ul:before { 922 | content: "\f0ca"; 923 | } 924 | .icon-list-ol:before { 925 | content: "\f0cb"; 926 | } 927 | .icon-strikethrough:before { 928 | content: "\f0cc"; 929 | } 930 | .icon-underline:before { 931 | content: "\f0cd"; 932 | } 933 | .icon-table:before { 934 | content: "\f0ce"; 935 | } 936 | .icon-magic:before { 937 | content: "\f0d0"; 938 | } 939 | .icon-truck:before { 940 | content: "\f0d1"; 941 | } 942 | .icon-pinterest:before { 943 | content: "\f0d2"; 944 | } 945 | .icon-pinterest-sign:before { 946 | content: "\f0d3"; 947 | } 948 | .icon-google-plus-sign:before { 949 | content: "\f0d4"; 950 | } 951 | .icon-google-plus:before { 952 | content: "\f0d5"; 953 | } 954 | .icon-money:before { 955 | content: "\f0d6"; 956 | } 957 | .icon-caret-down:before { 958 | content: "\f0d7"; 959 | } 960 | .icon-caret-up:before { 961 | content: "\f0d8"; 962 | } 963 | .icon-caret-left:before { 964 | content: "\f0d9"; 965 | } 966 | .icon-caret-right:before { 967 | content: "\f0da"; 968 | } 969 | .icon-columns:before { 970 | content: "\f0db"; 971 | } 972 | .icon-sort:before { 973 | content: "\f0dc"; 974 | } 975 | .icon-sort-down:before { 976 | content: "\f0dd"; 977 | } 978 | .icon-sort-up:before { 979 | content: "\f0de"; 980 | } 981 | .icon-envelope:before { 982 | content: "\f0e0"; 983 | } 984 | .icon-linkedin:before { 985 | content: "\f0e1"; 986 | } 987 | .icon-rotate-left:before, 988 | .icon-undo:before { 989 | content: "\f0e2"; 990 | } 991 | .icon-legal:before { 992 | content: "\f0e3"; 993 | } 994 | .icon-dashboard:before { 995 | content: "\f0e4"; 996 | } 997 | .icon-comment-alt:before { 998 | content: "\f0e5"; 999 | } 1000 | .icon-comments-alt:before { 1001 | content: "\f0e6"; 1002 | } 1003 | .icon-bolt:before { 1004 | content: "\f0e7"; 1005 | } 1006 | .icon-sitemap:before { 1007 | content: "\f0e8"; 1008 | } 1009 | .icon-umbrella:before { 1010 | content: "\f0e9"; 1011 | } 1012 | .icon-paste:before { 1013 | content: "\f0ea"; 1014 | } 1015 | .icon-lightbulb:before { 1016 | content: "\f0eb"; 1017 | } 1018 | .icon-exchange:before { 1019 | content: "\f0ec"; 1020 | } 1021 | .icon-cloud-download:before { 1022 | content: "\f0ed"; 1023 | } 1024 | .icon-cloud-upload:before { 1025 | content: "\f0ee"; 1026 | } 1027 | .icon-user-md:before { 1028 | content: "\f0f0"; 1029 | } 1030 | .icon-stethoscope:before { 1031 | content: "\f0f1"; 1032 | } 1033 | .icon-suitcase:before { 1034 | content: "\f0f2"; 1035 | } 1036 | .icon-bell-alt:before { 1037 | content: "\f0f3"; 1038 | } 1039 | .icon-coffee:before { 1040 | content: "\f0f4"; 1041 | } 1042 | .icon-food:before { 1043 | content: "\f0f5"; 1044 | } 1045 | .icon-file-text-alt:before { 1046 | content: "\f0f6"; 1047 | } 1048 | .icon-building:before { 1049 | content: "\f0f7"; 1050 | } 1051 | .icon-hospital:before { 1052 | content: "\f0f8"; 1053 | } 1054 | .icon-ambulance:before { 1055 | content: "\f0f9"; 1056 | } 1057 | .icon-medkit:before { 1058 | content: "\f0fa"; 1059 | } 1060 | .icon-fighter-jet:before { 1061 | content: "\f0fb"; 1062 | } 1063 | .icon-beer:before { 1064 | content: "\f0fc"; 1065 | } 1066 | .icon-h-sign:before { 1067 | content: "\f0fd"; 1068 | } 1069 | .icon-plus-sign-alt:before { 1070 | content: "\f0fe"; 1071 | } 1072 | .icon-double-angle-left:before { 1073 | content: "\f100"; 1074 | } 1075 | .icon-double-angle-right:before { 1076 | content: "\f101"; 1077 | } 1078 | .icon-double-angle-up:before { 1079 | content: "\f102"; 1080 | } 1081 | .icon-double-angle-down:before { 1082 | content: "\f103"; 1083 | } 1084 | .icon-angle-left:before { 1085 | content: "\f104"; 1086 | } 1087 | .icon-angle-right:before { 1088 | content: "\f105"; 1089 | } 1090 | .icon-angle-up:before { 1091 | content: "\f106"; 1092 | } 1093 | .icon-angle-down:before { 1094 | content: "\f107"; 1095 | } 1096 | .icon-desktop:before { 1097 | content: "\f108"; 1098 | } 1099 | .icon-laptop:before { 1100 | content: "\f109"; 1101 | } 1102 | .icon-tablet:before { 1103 | content: "\f10a"; 1104 | } 1105 | .icon-mobile-phone:before { 1106 | content: "\f10b"; 1107 | } 1108 | .icon-circle-blank:before { 1109 | content: "\f10c"; 1110 | } 1111 | .icon-quote-left:before { 1112 | content: "\f10d"; 1113 | } 1114 | .icon-quote-right:before { 1115 | content: "\f10e"; 1116 | } 1117 | .icon-spinner:before { 1118 | content: "\f110"; 1119 | } 1120 | .icon-circle:before { 1121 | content: "\f111"; 1122 | } 1123 | .icon-mail-reply:before, 1124 | .icon-reply:before { 1125 | content: "\f112"; 1126 | } 1127 | .icon-github-alt:before { 1128 | content: "\f113"; 1129 | } 1130 | .icon-folder-close-alt:before { 1131 | content: "\f114"; 1132 | } 1133 | .icon-folder-open-alt:before { 1134 | content: "\f115"; 1135 | } 1136 | .icon-expand-alt:before { 1137 | content: "\f116"; 1138 | } 1139 | .icon-collapse-alt:before { 1140 | content: "\f117"; 1141 | } 1142 | .icon-smile:before { 1143 | content: "\f118"; 1144 | } 1145 | .icon-frown:before { 1146 | content: "\f119"; 1147 | } 1148 | .icon-meh:before { 1149 | content: "\f11a"; 1150 | } 1151 | .icon-gamepad:before { 1152 | content: "\f11b"; 1153 | } 1154 | .icon-keyboard:before { 1155 | content: "\f11c"; 1156 | } 1157 | .icon-flag-alt:before { 1158 | content: "\f11d"; 1159 | } 1160 | .icon-flag-checkered:before { 1161 | content: "\f11e"; 1162 | } 1163 | .icon-terminal:before { 1164 | content: "\f120"; 1165 | } 1166 | .icon-code:before { 1167 | content: "\f121"; 1168 | } 1169 | .icon-reply-all:before { 1170 | content: "\f122"; 1171 | } 1172 | .icon-mail-reply-all:before { 1173 | content: "\f122"; 1174 | } 1175 | .icon-star-half-full:before, 1176 | .icon-star-half-empty:before { 1177 | content: "\f123"; 1178 | } 1179 | .icon-location-arrow:before { 1180 | content: "\f124"; 1181 | } 1182 | .icon-crop:before { 1183 | content: "\f125"; 1184 | } 1185 | .icon-code-fork:before { 1186 | content: "\f126"; 1187 | } 1188 | .icon-unlink:before { 1189 | content: "\f127"; 1190 | } 1191 | .icon-question:before { 1192 | content: "\f128"; 1193 | } 1194 | .icon-info:before { 1195 | content: "\f129"; 1196 | } 1197 | .icon-exclamation:before { 1198 | content: "\f12a"; 1199 | } 1200 | .icon-superscript:before { 1201 | content: "\f12b"; 1202 | } 1203 | .icon-subscript:before { 1204 | content: "\f12c"; 1205 | } 1206 | .icon-eraser:before { 1207 | content: "\f12d"; 1208 | } 1209 | .icon-puzzle-piece:before { 1210 | content: "\f12e"; 1211 | } 1212 | .icon-microphone:before { 1213 | content: "\f130"; 1214 | } 1215 | .icon-microphone-off:before { 1216 | content: "\f131"; 1217 | } 1218 | .icon-shield:before { 1219 | content: "\f132"; 1220 | } 1221 | .icon-calendar-empty:before { 1222 | content: "\f133"; 1223 | } 1224 | .icon-fire-extinguisher:before { 1225 | content: "\f134"; 1226 | } 1227 | .icon-rocket:before { 1228 | content: "\f135"; 1229 | } 1230 | .icon-maxcdn:before { 1231 | content: "\f136"; 1232 | } 1233 | .icon-chevron-sign-left:before { 1234 | content: "\f137"; 1235 | } 1236 | .icon-chevron-sign-right:before { 1237 | content: "\f138"; 1238 | } 1239 | .icon-chevron-sign-up:before { 1240 | content: "\f139"; 1241 | } 1242 | .icon-chevron-sign-down:before { 1243 | content: "\f13a"; 1244 | } 1245 | .icon-html5:before { 1246 | content: "\f13b"; 1247 | } 1248 | .icon-css3:before { 1249 | content: "\f13c"; 1250 | } 1251 | .icon-anchor:before { 1252 | content: "\f13d"; 1253 | } 1254 | .icon-unlock-alt:before { 1255 | content: "\f13e"; 1256 | } 1257 | .icon-bullseye:before { 1258 | content: "\f140"; 1259 | } 1260 | .icon-ellipsis-horizontal:before { 1261 | content: "\f141"; 1262 | } 1263 | .icon-ellipsis-vertical:before { 1264 | content: "\f142"; 1265 | } 1266 | .icon-rss-sign:before { 1267 | content: "\f143"; 1268 | } 1269 | .icon-play-sign:before { 1270 | content: "\f144"; 1271 | } 1272 | .icon-ticket:before { 1273 | content: "\f145"; 1274 | } 1275 | .icon-minus-sign-alt:before { 1276 | content: "\f146"; 1277 | } 1278 | .icon-check-minus:before { 1279 | content: "\f147"; 1280 | } 1281 | .icon-level-up:before { 1282 | content: "\f148"; 1283 | } 1284 | .icon-level-down:before { 1285 | content: "\f149"; 1286 | } 1287 | .icon-check-sign:before { 1288 | content: "\f14a"; 1289 | } 1290 | .icon-edit-sign:before { 1291 | content: "\f14b"; 1292 | } 1293 | .icon-external-link-sign:before { 1294 | content: "\f14c"; 1295 | } 1296 | .icon-share-sign:before { 1297 | content: "\f14d"; 1298 | } 1299 | .icon-compass:before { 1300 | content: "\f14e"; 1301 | } 1302 | .icon-collapse:before { 1303 | content: "\f150"; 1304 | } 1305 | .icon-collapse-top:before { 1306 | content: "\f151"; 1307 | } 1308 | .icon-expand:before { 1309 | content: "\f152"; 1310 | } 1311 | .icon-euro:before, 1312 | .icon-eur:before { 1313 | content: "\f153"; 1314 | } 1315 | .icon-gbp:before { 1316 | content: "\f154"; 1317 | } 1318 | .icon-dollar:before, 1319 | .icon-usd:before { 1320 | content: "\f155"; 1321 | } 1322 | .icon-rupee:before, 1323 | .icon-inr:before { 1324 | content: "\f156"; 1325 | } 1326 | .icon-yen:before, 1327 | .icon-jpy:before { 1328 | content: "\f157"; 1329 | } 1330 | .icon-renminbi:before, 1331 | .icon-cny:before { 1332 | content: "\f158"; 1333 | } 1334 | .icon-won:before, 1335 | .icon-krw:before { 1336 | content: "\f159"; 1337 | } 1338 | .icon-bitcoin:before, 1339 | .icon-btc:before { 1340 | content: "\f15a"; 1341 | } 1342 | .icon-file:before { 1343 | content: "\f15b"; 1344 | } 1345 | .icon-file-text:before { 1346 | content: "\f15c"; 1347 | } 1348 | .icon-sort-by-alphabet:before { 1349 | content: "\f15d"; 1350 | } 1351 | .icon-sort-by-alphabet-alt:before { 1352 | content: "\f15e"; 1353 | } 1354 | .icon-sort-by-attributes:before { 1355 | content: "\f160"; 1356 | } 1357 | .icon-sort-by-attributes-alt:before { 1358 | content: "\f161"; 1359 | } 1360 | .icon-sort-by-order:before { 1361 | content: "\f162"; 1362 | } 1363 | .icon-sort-by-order-alt:before { 1364 | content: "\f163"; 1365 | } 1366 | .icon-thumbs-up:before { 1367 | content: "\f164"; 1368 | } 1369 | .icon-thumbs-down:before { 1370 | content: "\f165"; 1371 | } 1372 | .icon-youtube-sign:before { 1373 | content: "\f166"; 1374 | } 1375 | .icon-youtube:before { 1376 | content: "\f167"; 1377 | } 1378 | .icon-xing:before { 1379 | content: "\f168"; 1380 | } 1381 | .icon-xing-sign:before { 1382 | content: "\f169"; 1383 | } 1384 | .icon-youtube-play:before { 1385 | content: "\f16a"; 1386 | } 1387 | .icon-dropbox:before { 1388 | content: "\f16b"; 1389 | } 1390 | .icon-stackexchange:before { 1391 | content: "\f16c"; 1392 | } 1393 | .icon-instagram:before { 1394 | content: "\f16d"; 1395 | } 1396 | .icon-flickr:before { 1397 | content: "\f16e"; 1398 | } 1399 | .icon-adn:before { 1400 | content: "\f170"; 1401 | } 1402 | .icon-bitbucket:before { 1403 | content: "\f171"; 1404 | } 1405 | .icon-bitbucket-sign:before { 1406 | content: "\f172"; 1407 | } 1408 | .icon-tumblr:before { 1409 | content: "\f173"; 1410 | } 1411 | .icon-tumblr-sign:before { 1412 | content: "\f174"; 1413 | } 1414 | .icon-long-arrow-down:before { 1415 | content: "\f175"; 1416 | } 1417 | .icon-long-arrow-up:before { 1418 | content: "\f176"; 1419 | } 1420 | .icon-long-arrow-left:before { 1421 | content: "\f177"; 1422 | } 1423 | .icon-long-arrow-right:before { 1424 | content: "\f178"; 1425 | } 1426 | .icon-apple:before { 1427 | content: "\f179"; 1428 | } 1429 | .icon-windows:before { 1430 | content: "\f17a"; 1431 | } 1432 | .icon-android:before { 1433 | content: "\f17b"; 1434 | } 1435 | .icon-linux:before { 1436 | content: "\f17c"; 1437 | } 1438 | .icon-dribbble:before { 1439 | content: "\f17d"; 1440 | } 1441 | .icon-skype:before { 1442 | content: "\f17e"; 1443 | } 1444 | .icon-foursquare:before { 1445 | content: "\f180"; 1446 | } 1447 | .icon-trello:before { 1448 | content: "\f181"; 1449 | } 1450 | .icon-female:before { 1451 | content: "\f182"; 1452 | } 1453 | .icon-male:before { 1454 | content: "\f183"; 1455 | } 1456 | .icon-gittip:before { 1457 | content: "\f184"; 1458 | } 1459 | .icon-sun:before { 1460 | content: "\f185"; 1461 | } 1462 | .icon-moon:before { 1463 | content: "\f186"; 1464 | } 1465 | .icon-archive:before { 1466 | content: "\f187"; 1467 | } 1468 | .icon-bug:before { 1469 | content: "\f188"; 1470 | } 1471 | .icon-vk:before { 1472 | content: "\f189"; 1473 | } 1474 | .icon-weibo:before { 1475 | content: "\f18a"; 1476 | } 1477 | .icon-renren:before { 1478 | content: "\f18b"; 1479 | } 1480 | -------------------------------------------------------------------------------- /media/stylesheets/main.css: -------------------------------------------------------------------------------- 1 | footer { 2 | margin-top: 500px; 3 | border-top: 1px solid Gainsboro; 4 | padding: 30px; 5 | background-color: WhiteSmoke; 6 | color: Gray; 7 | text-align: center; 8 | } 9 | 10 | .wrapper { 11 | background-color: #f1f1f1; 12 | margin-bottom: 30px; 13 | } 14 | 15 | .wrapper-text { 16 | padding: 10px; 17 | } 18 | 19 | .main { 20 | background-color: white; 21 | border: 1px dashed LightGray; 22 | height: 200px; 23 | padding: 10px; 24 | } 25 | 26 | .margin-bottom-40px { 27 | background-color: white; 28 | border-bottom: 1px dashed LightGray; 29 | border-left: 1px dashed LightGray; 30 | border-right: 1px dashed LightGray; 31 | height: 39px; 32 | line-height: 39px; 33 | text-align: center; 34 | } 35 | 36 | .other { 37 | background-color: white; 38 | border: 1px dashed LightGray; 39 | padding: 10px; 40 | margin-bottom: 10px; 41 | } 42 | 43 | .scroll-chaser { 44 | background-color: white; 45 | border: 1px dashed LightGray; 46 | height: 50px; 47 | padding: 10px; 48 | } 49 | 50 | .under { 51 | border: 1px dashed LightGray; 52 | padding: 10px; 53 | height: 300px; 54 | margin-bottom: 30px; 55 | } 56 | -------------------------------------------------------------------------------- /media/stylesheets/shCoreDefault.css: -------------------------------------------------------------------------------- 1 | /** 2 | * SyntaxHighlighter 3 | * http://alexgorbatchev.com/SyntaxHighlighter 4 | * 5 | * SyntaxHighlighter is donationware. If you are using it, please donate. 6 | * http://alexgorbatchev.com/SyntaxHighlighter/donate.html 7 | * 8 | * @version 9 | * 3.0.83 (July 02 2010) 10 | * 11 | * @copyright 12 | * Copyright (C) 2004-2010 Alex Gorbatchev. 13 | * 14 | * @license 15 | * Dual licensed under the MIT and GPL licenses. 16 | */ 17 | .syntaxhighlighter a, 18 | .syntaxhighlighter div, 19 | .syntaxhighlighter code, 20 | .syntaxhighlighter table, 21 | .syntaxhighlighter table td, 22 | .syntaxhighlighter table tr, 23 | .syntaxhighlighter table tbody, 24 | .syntaxhighlighter table thead, 25 | .syntaxhighlighter table caption, 26 | .syntaxhighlighter textarea { 27 | -moz-border-radius: 0 0 0 0 !important; 28 | -webkit-border-radius: 0 0 0 0 !important; 29 | background: none !important; 30 | border: 0 !important; 31 | bottom: auto !important; 32 | float: none !important; 33 | height: auto !important; 34 | left: auto !important; 35 | line-height: 1.1em !important; 36 | margin: 0 !important; 37 | outline: 0 !important; 38 | overflow: visible !important; 39 | padding: 0 !important; 40 | position: static !important; 41 | right: auto !important; 42 | text-align: left !important; 43 | top: auto !important; 44 | vertical-align: baseline !important; 45 | width: auto !important; 46 | box-sizing: content-box !important; 47 | font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; 48 | font-weight: normal !important; 49 | font-style: normal !important; 50 | font-size: 1em !important; 51 | min-height: inherit !important; 52 | min-height: auto !important; 53 | } 54 | 55 | .syntaxhighlighter { 56 | width: 100% !important; 57 | margin: 1em 0 1em 0 !important; 58 | position: relative !important; 59 | overflow: auto !important; 60 | font-size: 1em !important; 61 | } 62 | .syntaxhighlighter.source { 63 | overflow: hidden !important; 64 | } 65 | .syntaxhighlighter .bold { 66 | font-weight: bold !important; 67 | } 68 | .syntaxhighlighter .italic { 69 | font-style: italic !important; 70 | } 71 | .syntaxhighlighter .line { 72 | white-space: pre !important; 73 | } 74 | .syntaxhighlighter table { 75 | width: 100% !important; 76 | } 77 | .syntaxhighlighter table caption { 78 | text-align: left !important; 79 | padding: .5em 0 0.5em 1em !important; 80 | } 81 | .syntaxhighlighter table td.code { 82 | width: 100% !important; 83 | } 84 | .syntaxhighlighter table td.code .container { 85 | position: relative !important; 86 | } 87 | .syntaxhighlighter table td.code .container textarea { 88 | box-sizing: border-box !important; 89 | position: absolute !important; 90 | left: 0 !important; 91 | top: 0 !important; 92 | width: 100% !important; 93 | height: 100% !important; 94 | border: none !important; 95 | background: white !important; 96 | padding-left: 1em !important; 97 | overflow: hidden !important; 98 | white-space: pre !important; 99 | } 100 | .syntaxhighlighter table td.gutter .line { 101 | text-align: right !important; 102 | padding: 0 0.5em 0 1em !important; 103 | } 104 | .syntaxhighlighter table td.code .line { 105 | padding: 0 1em !important; 106 | } 107 | .syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { 108 | padding-left: 0em !important; 109 | } 110 | .syntaxhighlighter.show { 111 | display: block !important; 112 | } 113 | .syntaxhighlighter.collapsed table { 114 | display: none !important; 115 | } 116 | .syntaxhighlighter.collapsed .toolbar { 117 | padding: 0.1em 0.8em 0em 0.8em !important; 118 | font-size: 1em !important; 119 | position: static !important; 120 | width: auto !important; 121 | height: auto !important; 122 | } 123 | .syntaxhighlighter.collapsed .toolbar span { 124 | display: inline !important; 125 | margin-right: 1em !important; 126 | } 127 | .syntaxhighlighter.collapsed .toolbar span a { 128 | padding: 0 !important; 129 | display: none !important; 130 | } 131 | .syntaxhighlighter.collapsed .toolbar span a.expandSource { 132 | display: inline !important; 133 | } 134 | .syntaxhighlighter .toolbar { 135 | position: absolute !important; 136 | right: 1px !important; 137 | top: 1px !important; 138 | width: 11px !important; 139 | height: 11px !important; 140 | font-size: 10px !important; 141 | z-index: 10 !important; 142 | } 143 | .syntaxhighlighter .toolbar span.title { 144 | display: inline !important; 145 | } 146 | .syntaxhighlighter .toolbar a { 147 | display: block !important; 148 | text-align: center !important; 149 | text-decoration: none !important; 150 | padding-top: 1px !important; 151 | } 152 | .syntaxhighlighter .toolbar a.expandSource { 153 | display: none !important; 154 | } 155 | .syntaxhighlighter.ie { 156 | font-size: .9em !important; 157 | padding: 1px 0 1px 0 !important; 158 | } 159 | .syntaxhighlighter.ie .toolbar { 160 | line-height: 8px !important; 161 | } 162 | .syntaxhighlighter.ie .toolbar a { 163 | padding-top: 0px !important; 164 | } 165 | .syntaxhighlighter.printing .line.alt1 .content, 166 | .syntaxhighlighter.printing .line.alt2 .content, 167 | .syntaxhighlighter.printing .line.highlighted .number, 168 | .syntaxhighlighter.printing .line.highlighted.alt1 .content, 169 | .syntaxhighlighter.printing .line.highlighted.alt2 .content { 170 | background: none !important; 171 | } 172 | .syntaxhighlighter.printing .line .number { 173 | color: #bbbbbb !important; 174 | } 175 | .syntaxhighlighter.printing .line .content { 176 | color: black !important; 177 | } 178 | .syntaxhighlighter.printing .toolbar { 179 | display: none !important; 180 | } 181 | .syntaxhighlighter.printing a { 182 | text-decoration: none !important; 183 | } 184 | .syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { 185 | color: black !important; 186 | } 187 | .syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { 188 | color: #008200 !important; 189 | } 190 | .syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { 191 | color: blue !important; 192 | } 193 | .syntaxhighlighter.printing .keyword { 194 | color: #006699 !important; 195 | font-weight: bold !important; 196 | } 197 | .syntaxhighlighter.printing .preprocessor { 198 | color: gray !important; 199 | } 200 | .syntaxhighlighter.printing .variable { 201 | color: #aa7700 !important; 202 | } 203 | .syntaxhighlighter.printing .value { 204 | color: #009900 !important; 205 | } 206 | .syntaxhighlighter.printing .functions { 207 | color: #ff1493 !important; 208 | } 209 | .syntaxhighlighter.printing .constants { 210 | color: #0066cc !important; 211 | } 212 | .syntaxhighlighter.printing .script { 213 | font-weight: bold !important; 214 | } 215 | .syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { 216 | color: gray !important; 217 | } 218 | .syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { 219 | color: #ff1493 !important; 220 | } 221 | .syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { 222 | color: red !important; 223 | } 224 | .syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { 225 | color: black !important; 226 | } 227 | 228 | .syntaxhighlighter { 229 | background-color: white !important; 230 | } 231 | .syntaxhighlighter .line.alt1 { 232 | background-color: white !important; 233 | } 234 | .syntaxhighlighter .line.alt2 { 235 | background-color: white !important; 236 | } 237 | .syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { 238 | background-color: #e0e0e0 !important; 239 | } 240 | .syntaxhighlighter .line.highlighted.number { 241 | color: black !important; 242 | } 243 | .syntaxhighlighter table caption { 244 | color: black !important; 245 | } 246 | .syntaxhighlighter .gutter { 247 | color: #afafaf !important; 248 | } 249 | .syntaxhighlighter .gutter .line { 250 | border-right: 3px solid #6ce26c !important; 251 | } 252 | .syntaxhighlighter .gutter .line.highlighted { 253 | background-color: #6ce26c !important; 254 | color: white !important; 255 | } 256 | .syntaxhighlighter.printing .line .content { 257 | border: none !important; 258 | } 259 | .syntaxhighlighter.collapsed { 260 | overflow: visible !important; 261 | } 262 | .syntaxhighlighter.collapsed .toolbar { 263 | color: blue !important; 264 | background: white !important; 265 | border: 1px solid #6ce26c !important; 266 | } 267 | .syntaxhighlighter.collapsed .toolbar a { 268 | color: blue !important; 269 | } 270 | .syntaxhighlighter.collapsed .toolbar a:hover { 271 | color: red !important; 272 | } 273 | .syntaxhighlighter .toolbar { 274 | color: white !important; 275 | background: #6ce26c !important; 276 | border: none !important; 277 | } 278 | .syntaxhighlighter .toolbar a { 279 | color: white !important; 280 | } 281 | .syntaxhighlighter .toolbar a:hover { 282 | color: black !important; 283 | } 284 | .syntaxhighlighter .plain, .syntaxhighlighter .plain a { 285 | color: black !important; 286 | } 287 | .syntaxhighlighter .comments, .syntaxhighlighter .comments a { 288 | color: #008200 !important; 289 | } 290 | .syntaxhighlighter .string, .syntaxhighlighter .string a { 291 | color: blue !important; 292 | } 293 | .syntaxhighlighter .keyword { 294 | color: #006699 !important; 295 | } 296 | .syntaxhighlighter .preprocessor { 297 | color: gray !important; 298 | } 299 | .syntaxhighlighter .variable { 300 | color: #aa7700 !important; 301 | } 302 | .syntaxhighlighter .value { 303 | color: #009900 !important; 304 | } 305 | .syntaxhighlighter .functions { 306 | color: #ff1493 !important; 307 | } 308 | .syntaxhighlighter .constants { 309 | color: #0066cc !important; 310 | } 311 | .syntaxhighlighter .script { 312 | font-weight: bold !important; 313 | color: #006699 !important; 314 | background-color: none !important; 315 | } 316 | .syntaxhighlighter .color1, .syntaxhighlighter .color1 a { 317 | color: gray !important; 318 | } 319 | .syntaxhighlighter .color2, .syntaxhighlighter .color2 a { 320 | color: #ff1493 !important; 321 | } 322 | .syntaxhighlighter .color3, .syntaxhighlighter .color3 a { 323 | color: red !important; 324 | } 325 | 326 | .syntaxhighlighter .keyword { 327 | font-weight: bold !important; 328 | } 329 | -------------------------------------------------------------------------------- /media/stylesheets/syntax.css: -------------------------------------------------------------------------------- 1 | .hll { background-color: #ffffcc } 2 | .c { color: #408080; font-style: italic } /* Comment */ 3 | .err { border: 1px solid #FF0000 } /* Error */ 4 | .k { color: #008000; font-weight: bold } /* Keyword */ 5 | .o { color: #666666 } /* Operator */ 6 | .cm { color: #408080; font-style: italic } /* Comment.Multiline */ 7 | .cp { color: #BC7A00 } /* Comment.Preproc */ 8 | .c1 { color: #408080; font-style: italic } /* Comment.Single */ 9 | .cs { color: #408080; font-style: italic } /* Comment.Special */ 10 | .gd { color: #A00000 } /* Generic.Deleted */ 11 | .ge { font-style: italic } /* Generic.Emph */ 12 | .gr { color: #FF0000 } /* Generic.Error */ 13 | .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 14 | .gi { color: #00A000 } /* Generic.Inserted */ 15 | .go { color: #808080 } /* Generic.Output */ 16 | .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 17 | .gs { font-weight: bold } /* Generic.Strong */ 18 | .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 19 | .gt { color: #0040D0 } /* Generic.Traceback */ 20 | .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 21 | .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 22 | .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 23 | .kp { color: #008000 } /* Keyword.Pseudo */ 24 | .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 25 | .kt { color: #B00040 } /* Keyword.Type */ 26 | .m { color: #666666 } /* Literal.Number */ 27 | .s { color: #BA2121 } /* Literal.String */ 28 | .na { color: #7D9029 } /* Name.Attribute */ 29 | .nb { color: #008000 } /* Name.Builtin */ 30 | .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 31 | .no { color: #880000 } /* Name.Constant */ 32 | .nd { color: #AA22FF } /* Name.Decorator */ 33 | .ni { color: #999999; font-weight: bold } /* Name.Entity */ 34 | .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ 35 | .nf { color: #0000FF } /* Name.Function */ 36 | .nl { color: #A0A000 } /* Name.Label */ 37 | .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 38 | .nt { color: #008000; font-weight: bold } /* Name.Tag */ 39 | .nv { color: #19177C } /* Name.Variable */ 40 | .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 41 | .w { color: #bbbbbb } /* Text.Whitespace */ 42 | .mf { color: #666666 } /* Literal.Number.Float */ 43 | .mh { color: #666666 } /* Literal.Number.Hex */ 44 | .mi { color: #666666 } /* Literal.Number.Integer */ 45 | .mo { color: #666666 } /* Literal.Number.Oct */ 46 | .sb { color: #BA2121 } /* Literal.String.Backtick */ 47 | .sc { color: #BA2121 } /* Literal.String.Char */ 48 | .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 49 | .s2 { color: #BA2121 } /* Literal.String.Double */ 50 | .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ 51 | .sh { color: #BA2121 } /* Literal.String.Heredoc */ 52 | .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ 53 | .sx { color: #008000 } /* Literal.String.Other */ 54 | .sr { color: #BB6688 } /* Literal.String.Regex */ 55 | .s1 { color: #BA2121 } /* Literal.String.Single */ 56 | .ss { color: #19177C } /* Literal.String.Symbol */ 57 | .bp { color: #008000 } /* Name.Builtin.Pseudo */ 58 | .vc { color: #19177C } /* Name.Variable.Class */ 59 | .vg { color: #19177C } /* Name.Variable.Global */ 60 | .vi { color: #19177C } /* Name.Variable.Instance */ 61 | .il { color: #666666 } /* Literal.Number.Integer.Long */ 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Yuku Takahashi ", 3 | "name": "jquery-scrollchaser", 4 | "version": "0.0.6", 5 | "devDependencies": { 6 | "grunt": "~0.4.1", 7 | "grunt-contrib-uglify": "~0.2.2", 8 | "grunt-contrib-connect": "~0.3.0" 9 | } 10 | } 11 | --------------------------------------------------------------------------------