├── README.md
├── app.js
├── models
├── db.js
├── post.js
└── user.js
├── package.json
├── public
├── img
│ ├── glyphicons-halflings-white.png
│ └── glyphicons-halflings.png
├── javascripts
│ ├── bootstrap.js
│ └── jquery.js
└── stylesheets
│ ├── bootstrap-responsive.css
│ └── bootstrap.css
├── routes
└── index.js
├── settings.js
└── views
├── index.ejs
├── layout.ejs
├── login.ejs
├── posts.ejs
├── reg.ejs
├── say.ejs
└── user.ejs
/README.md:
--------------------------------------------------------------------------------
1 | # Microblog
2 |
3 | A tiny mircoblog system using Node.js for learning purposes.
4 |
5 | https://www.byvoid.com/project/node
6 |
7 | Node.js開發指南
8 |
9 | 
10 | 
11 |
12 | 臺灣版
13 |
14 | 
15 |
16 | ## 注意
17 |
18 | 此項目以Express2.x爲基礎,請注意使用`package.json`中的版本。
19 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Module dependencies.
3 | */
4 |
5 | var express = require('express');
6 | var routes = require('./routes');
7 | var settings = require('./settings');
8 | var MongoStore = require('connect-mongo');
9 |
10 | var app = module.exports = express.createServer();
11 |
12 | // Configuration
13 |
14 | app.configure(function(){
15 | app.set('views', __dirname + '/views');
16 | app.set('view engine', 'ejs');
17 | app.use(express.bodyParser());
18 | app.use(express.methodOverride());
19 | app.use(express.cookieParser());
20 | app.use(express.session({
21 | secret: settings.cookieSecret,
22 | store: new MongoStore({
23 | db: settings.db
24 | })
25 | }));
26 | app.use(express.router(routes));
27 | app.use(express.static(__dirname + '/public'));
28 | });
29 |
30 | app.configure('development', function(){
31 | app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
32 | });
33 |
34 | app.configure('production', function(){
35 | app.use(express.errorHandler());
36 | });
37 |
38 | app.dynamicHelpers({
39 | user: function(req, res) {
40 | return req.session.user;
41 | },
42 | error: function(req, res) {
43 | var err = req.flash('error');
44 | if (err.length)
45 | return err;
46 | else
47 | return null;
48 | },
49 | success: function(req, res) {
50 | var succ = req.flash('success');
51 | if (succ.length)
52 | return succ;
53 | else
54 | return null;
55 | },
56 | });
57 |
58 | app.listen(3000);
59 | console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
60 |
--------------------------------------------------------------------------------
/models/db.js:
--------------------------------------------------------------------------------
1 | var settings = require('../settings');
2 | var Db = require('mongodb').Db;
3 | var Connection = require('mongodb').Connection;
4 | var Server = require('mongodb').Server;
5 |
6 | module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}));
7 |
--------------------------------------------------------------------------------
/models/post.js:
--------------------------------------------------------------------------------
1 | var mongodb = require('./db');
2 |
3 | function Post(username, post, time) {
4 | this.user = username;
5 | this.post = post;
6 | if (time) {
7 | this.time = time;
8 | } else {
9 | this.time = new Date();
10 | }
11 | };
12 | module.exports = Post;
13 |
14 | Post.prototype.save = function save(callback) {
15 | // 存入 Mongodb 的文檔
16 | var post = {
17 | user: this.user,
18 | post: this.post,
19 | time: this.time,
20 | };
21 | mongodb.open(function(err, db) {
22 | if (err) {
23 | return callback(err);
24 | }
25 | // 讀取 posts 集合
26 | db.collection('posts', function(err, collection) {
27 | if (err) {
28 | mongodb.close();
29 | return callback(err);
30 | }
31 | // 爲 user 屬性添加索引
32 | collection.ensureIndex('user');
33 | // 寫入 post 文檔
34 | collection.insert(post, {safe: true}, function(err, post) {
35 | mongodb.close();
36 | callback(err, post);
37 | });
38 | });
39 | });
40 | };
41 |
42 | Post.get = function get(username, callback) {
43 | mongodb.open(function(err, db) {
44 | if (err) {
45 | return callback(err);
46 | }
47 | // 讀取 posts 集合
48 | db.collection('posts', function(err, collection) {
49 | if (err) {
50 | mongodb.close();
51 | return callback(err);
52 | }
53 | // 查找 user 屬性爲 username 的文檔,如果 username 是 null 則匹配全部
54 | var query = {};
55 | if (username) {
56 | query.user = username;
57 | }
58 | collection.find(query).sort({time: -1}).toArray(function(err, docs) {
59 | mongodb.close();
60 | if (err) {
61 | callback(err, null);
62 | }
63 | // 封裝 posts 爲 Post 對象
64 | var posts = [];
65 | docs.forEach(function(doc, index) {
66 | var post = new Post(doc.user, doc.post, doc.time);
67 | posts.push(post);
68 | });
69 | callback(null, posts);
70 | });
71 | });
72 | });
73 | };
74 |
--------------------------------------------------------------------------------
/models/user.js:
--------------------------------------------------------------------------------
1 | var mongodb = require('./db');
2 |
3 | function User(user) {
4 | this.name = user.name;
5 | this.password = user.password;
6 | };
7 | module.exports = User;
8 |
9 | User.prototype.save = function save(callback) {
10 | // 存入 Mongodb 的文檔
11 | var user = {
12 | name: this.name,
13 | password: this.password,
14 | };
15 | mongodb.open(function(err, db) {
16 | if (err) {
17 | return callback(err);
18 | }
19 | // 讀取 users 集合
20 | db.collection('users', function(err, collection) {
21 | if (err) {
22 | mongodb.close();
23 | return callback(err);
24 | }
25 | // 爲 name 屬性添加索引
26 | collection.ensureIndex('name', {unique: true});
27 | // 寫入 user 文檔
28 | collection.insert(user, {safe: true}, function(err, user) {
29 | mongodb.close();
30 | callback(err, user);
31 | });
32 | });
33 | });
34 | };
35 |
36 | User.get = function get(username, callback) {
37 | mongodb.open(function(err, db) {
38 | if (err) {
39 | return callback(err);
40 | }
41 | // 讀取 users 集合
42 | db.collection('users', function(err, collection) {
43 | if (err) {
44 | mongodb.close();
45 | return callback(err);
46 | }
47 | // 查找 name 屬性爲 username 的文檔
48 | collection.findOne({name: username}, function(err, doc) {
49 | mongodb.close();
50 | if (doc) {
51 | // 封裝文檔爲 User 對象
52 | var user = new User(doc);
53 | callback(err, user);
54 | } else {
55 | callback(err, null);
56 | }
57 | });
58 | });
59 | });
60 | };
61 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "microblog"
3 | , "version": "0.0.1"
4 | , "private": true
5 | , "dependencies": {
6 | "express": "2.5.8"
7 | , "ejs": "0.0.1"
8 | , "connect-mongo": "0.1.7"
9 | , "mongodb": "0.9.9"
10 | }
11 | }
--------------------------------------------------------------------------------
/public/img/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BYVoid/microblog/189c22f31248ebece319c1892b798fad09e074c3/public/img/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/public/img/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BYVoid/microblog/189c22f31248ebece319c1892b798fad09e074c3/public/img/glyphicons-halflings.png
--------------------------------------------------------------------------------
/public/javascripts/bootstrap.js:
--------------------------------------------------------------------------------
1 | /* ===================================================
2 | * bootstrap-transition.js v2.0.1
3 | * http://twitter.github.com/bootstrap/javascript.html#transitions
4 | * ===================================================
5 | * Copyright 2012 Twitter, Inc.
6 | *
7 | * Licensed under the Apache License, Version 2.0 (the "License");
8 | * you may not use this file except in compliance with the License.
9 | * You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing, software
14 | * distributed under the License is distributed on an "AS IS" BASIS,
15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 | * See the License for the specific language governing permissions and
17 | * limitations under the License.
18 | * ========================================================== */
19 |
20 | !function( $ ) {
21 |
22 | $(function () {
23 |
24 | "use strict"
25 |
26 | /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27 | * ======================================================= */
28 |
29 | $.support.transition = (function () {
30 | var thisBody = document.body || document.documentElement
31 | , thisStyle = thisBody.style
32 | , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
33 |
34 | return support && {
35 | end: (function () {
36 | var transitionEnd = "TransitionEnd"
37 | if ( $.browser.webkit ) {
38 | transitionEnd = "webkitTransitionEnd"
39 | } else if ( $.browser.mozilla ) {
40 | transitionEnd = "transitionend"
41 | } else if ( $.browser.opera ) {
42 | transitionEnd = "oTransitionEnd"
43 | }
44 | return transitionEnd
45 | }())
46 | }
47 | })()
48 |
49 | })
50 |
51 | }( window.jQuery );/* ==========================================================
52 | * bootstrap-alert.js v2.0.1
53 | * http://twitter.github.com/bootstrap/javascript.html#alerts
54 | * ==========================================================
55 | * Copyright 2012 Twitter, Inc.
56 | *
57 | * Licensed under the Apache License, Version 2.0 (the "License");
58 | * you may not use this file except in compliance with the License.
59 | * You may obtain a copy of the License at
60 | *
61 | * http://www.apache.org/licenses/LICENSE-2.0
62 | *
63 | * Unless required by applicable law or agreed to in writing, software
64 | * distributed under the License is distributed on an "AS IS" BASIS,
65 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
66 | * See the License for the specific language governing permissions and
67 | * limitations under the License.
68 | * ========================================================== */
69 |
70 |
71 | !function( $ ){
72 |
73 | "use strict"
74 |
75 | /* ALERT CLASS DEFINITION
76 | * ====================== */
77 |
78 | var dismiss = '[data-dismiss="alert"]'
79 | , Alert = function ( el ) {
80 | $(el).on('click', dismiss, this.close)
81 | }
82 |
83 | Alert.prototype = {
84 |
85 | constructor: Alert
86 |
87 | , close: function ( e ) {
88 | var $this = $(this)
89 | , selector = $this.attr('data-target')
90 | , $parent
91 |
92 | if (!selector) {
93 | selector = $this.attr('href')
94 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
95 | }
96 |
97 | $parent = $(selector)
98 | $parent.trigger('close')
99 |
100 | e && e.preventDefault()
101 |
102 | $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
103 |
104 | $parent
105 | .trigger('close')
106 | .removeClass('in')
107 |
108 | function removeElement() {
109 | $parent
110 | .trigger('closed')
111 | .remove()
112 | }
113 |
114 | $.support.transition && $parent.hasClass('fade') ?
115 | $parent.on($.support.transition.end, removeElement) :
116 | removeElement()
117 | }
118 |
119 | }
120 |
121 |
122 | /* ALERT PLUGIN DEFINITION
123 | * ======================= */
124 |
125 | $.fn.alert = function ( option ) {
126 | return this.each(function () {
127 | var $this = $(this)
128 | , data = $this.data('alert')
129 | if (!data) $this.data('alert', (data = new Alert(this)))
130 | if (typeof option == 'string') data[option].call($this)
131 | })
132 | }
133 |
134 | $.fn.alert.Constructor = Alert
135 |
136 |
137 | /* ALERT DATA-API
138 | * ============== */
139 |
140 | $(function () {
141 | $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
142 | })
143 |
144 | }( window.jQuery );/* ============================================================
145 | * bootstrap-button.js v2.0.1
146 | * http://twitter.github.com/bootstrap/javascript.html#buttons
147 | * ============================================================
148 | * Copyright 2012 Twitter, Inc.
149 | *
150 | * Licensed under the Apache License, Version 2.0 (the "License");
151 | * you may not use this file except in compliance with the License.
152 | * You may obtain a copy of the License at
153 | *
154 | * http://www.apache.org/licenses/LICENSE-2.0
155 | *
156 | * Unless required by applicable law or agreed to in writing, software
157 | * distributed under the License is distributed on an "AS IS" BASIS,
158 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
159 | * See the License for the specific language governing permissions and
160 | * limitations under the License.
161 | * ============================================================ */
162 |
163 | !function( $ ){
164 |
165 | "use strict"
166 |
167 | /* BUTTON PUBLIC CLASS DEFINITION
168 | * ============================== */
169 |
170 | var Button = function ( element, options ) {
171 | this.$element = $(element)
172 | this.options = $.extend({}, $.fn.button.defaults, options)
173 | }
174 |
175 | Button.prototype = {
176 |
177 | constructor: Button
178 |
179 | , setState: function ( state ) {
180 | var d = 'disabled'
181 | , $el = this.$element
182 | , data = $el.data()
183 | , val = $el.is('input') ? 'val' : 'html'
184 |
185 | state = state + 'Text'
186 | data.resetText || $el.data('resetText', $el[val]())
187 |
188 | $el[val](data[state] || this.options[state])
189 |
190 | // push to event loop to allow forms to submit
191 | setTimeout(function () {
192 | state == 'loadingText' ?
193 | $el.addClass(d).attr(d, d) :
194 | $el.removeClass(d).removeAttr(d)
195 | }, 0)
196 | }
197 |
198 | , toggle: function () {
199 | var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
200 |
201 | $parent && $parent
202 | .find('.active')
203 | .removeClass('active')
204 |
205 | this.$element.toggleClass('active')
206 | }
207 |
208 | }
209 |
210 |
211 | /* BUTTON PLUGIN DEFINITION
212 | * ======================== */
213 |
214 | $.fn.button = function ( option ) {
215 | return this.each(function () {
216 | var $this = $(this)
217 | , data = $this.data('button')
218 | , options = typeof option == 'object' && option
219 | if (!data) $this.data('button', (data = new Button(this, options)))
220 | if (option == 'toggle') data.toggle()
221 | else if (option) data.setState(option)
222 | })
223 | }
224 |
225 | $.fn.button.defaults = {
226 | loadingText: 'loading...'
227 | }
228 |
229 | $.fn.button.Constructor = Button
230 |
231 |
232 | /* BUTTON DATA-API
233 | * =============== */
234 |
235 | $(function () {
236 | $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
237 | var $btn = $(e.target)
238 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
239 | $btn.button('toggle')
240 | })
241 | })
242 |
243 | }( window.jQuery );/* ==========================================================
244 | * bootstrap-carousel.js v2.0.1
245 | * http://twitter.github.com/bootstrap/javascript.html#carousel
246 | * ==========================================================
247 | * Copyright 2012 Twitter, Inc.
248 | *
249 | * Licensed under the Apache License, Version 2.0 (the "License");
250 | * you may not use this file except in compliance with the License.
251 | * You may obtain a copy of the License at
252 | *
253 | * http://www.apache.org/licenses/LICENSE-2.0
254 | *
255 | * Unless required by applicable law or agreed to in writing, software
256 | * distributed under the License is distributed on an "AS IS" BASIS,
257 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
258 | * See the License for the specific language governing permissions and
259 | * limitations under the License.
260 | * ========================================================== */
261 |
262 |
263 | !function( $ ){
264 |
265 | "use strict"
266 |
267 | /* CAROUSEL CLASS DEFINITION
268 | * ========================= */
269 |
270 | var Carousel = function (element, options) {
271 | this.$element = $(element)
272 | this.options = $.extend({}, $.fn.carousel.defaults, options)
273 | this.options.slide && this.slide(this.options.slide)
274 | this.options.pause == 'hover' && this.$element
275 | .on('mouseenter', $.proxy(this.pause, this))
276 | .on('mouseleave', $.proxy(this.cycle, this))
277 | }
278 |
279 | Carousel.prototype = {
280 |
281 | cycle: function () {
282 | this.interval = setInterval($.proxy(this.next, this), this.options.interval)
283 | return this
284 | }
285 |
286 | , to: function (pos) {
287 | var $active = this.$element.find('.active')
288 | , children = $active.parent().children()
289 | , activePos = children.index($active)
290 | , that = this
291 |
292 | if (pos > (children.length - 1) || pos < 0) return
293 |
294 | if (this.sliding) {
295 | return this.$element.one('slid', function () {
296 | that.to(pos)
297 | })
298 | }
299 |
300 | if (activePos == pos) {
301 | return this.pause().cycle()
302 | }
303 |
304 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
305 | }
306 |
307 | , pause: function () {
308 | clearInterval(this.interval)
309 | this.interval = null
310 | return this
311 | }
312 |
313 | , next: function () {
314 | if (this.sliding) return
315 | return this.slide('next')
316 | }
317 |
318 | , prev: function () {
319 | if (this.sliding) return
320 | return this.slide('prev')
321 | }
322 |
323 | , slide: function (type, next) {
324 | var $active = this.$element.find('.active')
325 | , $next = next || $active[type]()
326 | , isCycling = this.interval
327 | , direction = type == 'next' ? 'left' : 'right'
328 | , fallback = type == 'next' ? 'first' : 'last'
329 | , that = this
330 |
331 | this.sliding = true
332 |
333 | isCycling && this.pause()
334 |
335 | $next = $next.length ? $next : this.$element.find('.item')[fallback]()
336 |
337 | if ($next.hasClass('active')) return
338 |
339 | if (!$.support.transition && this.$element.hasClass('slide')) {
340 | this.$element.trigger('slide')
341 | $active.removeClass('active')
342 | $next.addClass('active')
343 | this.sliding = false
344 | this.$element.trigger('slid')
345 | } else {
346 | $next.addClass(type)
347 | $next[0].offsetWidth // force reflow
348 | $active.addClass(direction)
349 | $next.addClass(direction)
350 | this.$element.trigger('slide')
351 | this.$element.one($.support.transition.end, function () {
352 | $next.removeClass([type, direction].join(' ')).addClass('active')
353 | $active.removeClass(['active', direction].join(' '))
354 | that.sliding = false
355 | setTimeout(function () { that.$element.trigger('slid') }, 0)
356 | })
357 | }
358 |
359 | isCycling && this.cycle()
360 |
361 | return this
362 | }
363 |
364 | }
365 |
366 |
367 | /* CAROUSEL PLUGIN DEFINITION
368 | * ========================== */
369 |
370 | $.fn.carousel = function ( option ) {
371 | return this.each(function () {
372 | var $this = $(this)
373 | , data = $this.data('carousel')
374 | , options = typeof option == 'object' && option
375 | if (!data) $this.data('carousel', (data = new Carousel(this, options)))
376 | if (typeof option == 'number') data.to(option)
377 | else if (typeof option == 'string' || (option = options.slide)) data[option]()
378 | else data.cycle()
379 | })
380 | }
381 |
382 | $.fn.carousel.defaults = {
383 | interval: 5000
384 | , pause: 'hover'
385 | }
386 |
387 | $.fn.carousel.Constructor = Carousel
388 |
389 |
390 | /* CAROUSEL DATA-API
391 | * ================= */
392 |
393 | $(function () {
394 | $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
395 | var $this = $(this), href
396 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
397 | , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
398 | $target.carousel(options)
399 | e.preventDefault()
400 | })
401 | })
402 |
403 | }( window.jQuery );/* =============================================================
404 | * bootstrap-collapse.js v2.0.1
405 | * http://twitter.github.com/bootstrap/javascript.html#collapse
406 | * =============================================================
407 | * Copyright 2012 Twitter, Inc.
408 | *
409 | * Licensed under the Apache License, Version 2.0 (the "License");
410 | * you may not use this file except in compliance with the License.
411 | * You may obtain a copy of the License at
412 | *
413 | * http://www.apache.org/licenses/LICENSE-2.0
414 | *
415 | * Unless required by applicable law or agreed to in writing, software
416 | * distributed under the License is distributed on an "AS IS" BASIS,
417 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
418 | * See the License for the specific language governing permissions and
419 | * limitations under the License.
420 | * ============================================================ */
421 |
422 | !function( $ ){
423 |
424 | "use strict"
425 |
426 | var Collapse = function ( element, options ) {
427 | this.$element = $(element)
428 | this.options = $.extend({}, $.fn.collapse.defaults, options)
429 |
430 | if (this.options["parent"]) {
431 | this.$parent = $(this.options["parent"])
432 | }
433 |
434 | this.options.toggle && this.toggle()
435 | }
436 |
437 | Collapse.prototype = {
438 |
439 | constructor: Collapse
440 |
441 | , dimension: function () {
442 | var hasWidth = this.$element.hasClass('width')
443 | return hasWidth ? 'width' : 'height'
444 | }
445 |
446 | , show: function () {
447 | var dimension = this.dimension()
448 | , scroll = $.camelCase(['scroll', dimension].join('-'))
449 | , actives = this.$parent && this.$parent.find('.in')
450 | , hasData
451 |
452 | if (actives && actives.length) {
453 | hasData = actives.data('collapse')
454 | actives.collapse('hide')
455 | hasData || actives.data('collapse', null)
456 | }
457 |
458 | this.$element[dimension](0)
459 | this.transition('addClass', 'show', 'shown')
460 | this.$element[dimension](this.$element[0][scroll])
461 |
462 | }
463 |
464 | , hide: function () {
465 | var dimension = this.dimension()
466 | this.reset(this.$element[dimension]())
467 | this.transition('removeClass', 'hide', 'hidden')
468 | this.$element[dimension](0)
469 | }
470 |
471 | , reset: function ( size ) {
472 | var dimension = this.dimension()
473 |
474 | this.$element
475 | .removeClass('collapse')
476 | [dimension](size || 'auto')
477 | [0].offsetWidth
478 |
479 | this.$element[size ? 'addClass' : 'removeClass']('collapse')
480 |
481 | return this
482 | }
483 |
484 | , transition: function ( method, startEvent, completeEvent ) {
485 | var that = this
486 | , complete = function () {
487 | if (startEvent == 'show') that.reset()
488 | that.$element.trigger(completeEvent)
489 | }
490 |
491 | this.$element
492 | .trigger(startEvent)
493 | [method]('in')
494 |
495 | $.support.transition && this.$element.hasClass('collapse') ?
496 | this.$element.one($.support.transition.end, complete) :
497 | complete()
498 | }
499 |
500 | , toggle: function () {
501 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
502 | }
503 |
504 | }
505 |
506 | /* COLLAPSIBLE PLUGIN DEFINITION
507 | * ============================== */
508 |
509 | $.fn.collapse = function ( option ) {
510 | return this.each(function () {
511 | var $this = $(this)
512 | , data = $this.data('collapse')
513 | , options = typeof option == 'object' && option
514 | if (!data) $this.data('collapse', (data = new Collapse(this, options)))
515 | if (typeof option == 'string') data[option]()
516 | })
517 | }
518 |
519 | $.fn.collapse.defaults = {
520 | toggle: true
521 | }
522 |
523 | $.fn.collapse.Constructor = Collapse
524 |
525 |
526 | /* COLLAPSIBLE DATA-API
527 | * ==================== */
528 |
529 | $(function () {
530 | $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
531 | var $this = $(this), href
532 | , target = $this.attr('data-target')
533 | || e.preventDefault()
534 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
535 | , option = $(target).data('collapse') ? 'toggle' : $this.data()
536 | $(target).collapse(option)
537 | })
538 | })
539 |
540 | }( window.jQuery );/* ============================================================
541 | * bootstrap-dropdown.js v2.0.1
542 | * http://twitter.github.com/bootstrap/javascript.html#dropdowns
543 | * ============================================================
544 | * Copyright 2012 Twitter, Inc.
545 | *
546 | * Licensed under the Apache License, Version 2.0 (the "License");
547 | * you may not use this file except in compliance with the License.
548 | * You may obtain a copy of the License at
549 | *
550 | * http://www.apache.org/licenses/LICENSE-2.0
551 | *
552 | * Unless required by applicable law or agreed to in writing, software
553 | * distributed under the License is distributed on an "AS IS" BASIS,
554 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
555 | * See the License for the specific language governing permissions and
556 | * limitations under the License.
557 | * ============================================================ */
558 |
559 |
560 | !function( $ ){
561 |
562 | "use strict"
563 |
564 | /* DROPDOWN CLASS DEFINITION
565 | * ========================= */
566 |
567 | var toggle = '[data-toggle="dropdown"]'
568 | , Dropdown = function ( element ) {
569 | var $el = $(element).on('click.dropdown.data-api', this.toggle)
570 | $('html').on('click.dropdown.data-api', function () {
571 | $el.parent().removeClass('open')
572 | })
573 | }
574 |
575 | Dropdown.prototype = {
576 |
577 | constructor: Dropdown
578 |
579 | , toggle: function ( e ) {
580 | var $this = $(this)
581 | , selector = $this.attr('data-target')
582 | , $parent
583 | , isActive
584 |
585 | if (!selector) {
586 | selector = $this.attr('href')
587 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
588 | }
589 |
590 | $parent = $(selector)
591 | $parent.length || ($parent = $this.parent())
592 |
593 | isActive = $parent.hasClass('open')
594 |
595 | clearMenus()
596 | !isActive && $parent.toggleClass('open')
597 |
598 | return false
599 | }
600 |
601 | }
602 |
603 | function clearMenus() {
604 | $(toggle).parent().removeClass('open')
605 | }
606 |
607 |
608 | /* DROPDOWN PLUGIN DEFINITION
609 | * ========================== */
610 |
611 | $.fn.dropdown = function ( option ) {
612 | return this.each(function () {
613 | var $this = $(this)
614 | , data = $this.data('dropdown')
615 | if (!data) $this.data('dropdown', (data = new Dropdown(this)))
616 | if (typeof option == 'string') data[option].call($this)
617 | })
618 | }
619 |
620 | $.fn.dropdown.Constructor = Dropdown
621 |
622 |
623 | /* APPLY TO STANDARD DROPDOWN ELEMENTS
624 | * =================================== */
625 |
626 | $(function () {
627 | $('html').on('click.dropdown.data-api', clearMenus)
628 | $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
629 | })
630 |
631 | }( window.jQuery );/* =========================================================
632 | * bootstrap-modal.js v2.0.1
633 | * http://twitter.github.com/bootstrap/javascript.html#modals
634 | * =========================================================
635 | * Copyright 2012 Twitter, Inc.
636 | *
637 | * Licensed under the Apache License, Version 2.0 (the "License");
638 | * you may not use this file except in compliance with the License.
639 | * You may obtain a copy of the License at
640 | *
641 | * http://www.apache.org/licenses/LICENSE-2.0
642 | *
643 | * Unless required by applicable law or agreed to in writing, software
644 | * distributed under the License is distributed on an "AS IS" BASIS,
645 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
646 | * See the License for the specific language governing permissions and
647 | * limitations under the License.
648 | * ========================================================= */
649 |
650 |
651 | !function( $ ){
652 |
653 | "use strict"
654 |
655 | /* MODAL CLASS DEFINITION
656 | * ====================== */
657 |
658 | var Modal = function ( content, options ) {
659 | this.options = options
660 | this.$element = $(content)
661 | .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
662 | }
663 |
664 | Modal.prototype = {
665 |
666 | constructor: Modal
667 |
668 | , toggle: function () {
669 | return this[!this.isShown ? 'show' : 'hide']()
670 | }
671 |
672 | , show: function () {
673 | var that = this
674 |
675 | if (this.isShown) return
676 |
677 | $('body').addClass('modal-open')
678 |
679 | this.isShown = true
680 | this.$element.trigger('show')
681 |
682 | escape.call(this)
683 | backdrop.call(this, function () {
684 | var transition = $.support.transition && that.$element.hasClass('fade')
685 |
686 | !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
687 |
688 | that.$element
689 | .show()
690 |
691 | if (transition) {
692 | that.$element[0].offsetWidth // force reflow
693 | }
694 |
695 | that.$element.addClass('in')
696 |
697 | transition ?
698 | that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
699 | that.$element.trigger('shown')
700 |
701 | })
702 | }
703 |
704 | , hide: function ( e ) {
705 | e && e.preventDefault()
706 |
707 | if (!this.isShown) return
708 |
709 | var that = this
710 | this.isShown = false
711 |
712 | $('body').removeClass('modal-open')
713 |
714 | escape.call(this)
715 |
716 | this.$element
717 | .trigger('hide')
718 | .removeClass('in')
719 |
720 | $.support.transition && this.$element.hasClass('fade') ?
721 | hideWithTransition.call(this) :
722 | hideModal.call(this)
723 | }
724 |
725 | }
726 |
727 |
728 | /* MODAL PRIVATE METHODS
729 | * ===================== */
730 |
731 | function hideWithTransition() {
732 | var that = this
733 | , timeout = setTimeout(function () {
734 | that.$element.off($.support.transition.end)
735 | hideModal.call(that)
736 | }, 500)
737 |
738 | this.$element.one($.support.transition.end, function () {
739 | clearTimeout(timeout)
740 | hideModal.call(that)
741 | })
742 | }
743 |
744 | function hideModal( that ) {
745 | this.$element
746 | .hide()
747 | .trigger('hidden')
748 |
749 | backdrop.call(this)
750 | }
751 |
752 | function backdrop( callback ) {
753 | var that = this
754 | , animate = this.$element.hasClass('fade') ? 'fade' : ''
755 |
756 | if (this.isShown && this.options.backdrop) {
757 | var doAnimate = $.support.transition && animate
758 |
759 | this.$backdrop = $('
')
760 | .appendTo(document.body)
761 |
762 | if (this.options.backdrop != 'static') {
763 | this.$backdrop.click($.proxy(this.hide, this))
764 | }
765 |
766 | if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
767 |
768 | this.$backdrop.addClass('in')
769 |
770 | doAnimate ?
771 | this.$backdrop.one($.support.transition.end, callback) :
772 | callback()
773 |
774 | } else if (!this.isShown && this.$backdrop) {
775 | this.$backdrop.removeClass('in')
776 |
777 | $.support.transition && this.$element.hasClass('fade')?
778 | this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
779 | removeBackdrop.call(this)
780 |
781 | } else if (callback) {
782 | callback()
783 | }
784 | }
785 |
786 | function removeBackdrop() {
787 | this.$backdrop.remove()
788 | this.$backdrop = null
789 | }
790 |
791 | function escape() {
792 | var that = this
793 | if (this.isShown && this.options.keyboard) {
794 | $(document).on('keyup.dismiss.modal', function ( e ) {
795 | e.which == 27 && that.hide()
796 | })
797 | } else if (!this.isShown) {
798 | $(document).off('keyup.dismiss.modal')
799 | }
800 | }
801 |
802 |
803 | /* MODAL PLUGIN DEFINITION
804 | * ======================= */
805 |
806 | $.fn.modal = function ( option ) {
807 | return this.each(function () {
808 | var $this = $(this)
809 | , data = $this.data('modal')
810 | , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
811 | if (!data) $this.data('modal', (data = new Modal(this, options)))
812 | if (typeof option == 'string') data[option]()
813 | else if (options.show) data.show()
814 | })
815 | }
816 |
817 | $.fn.modal.defaults = {
818 | backdrop: true
819 | , keyboard: true
820 | , show: true
821 | }
822 |
823 | $.fn.modal.Constructor = Modal
824 |
825 |
826 | /* MODAL DATA-API
827 | * ============== */
828 |
829 | $(function () {
830 | $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
831 | var $this = $(this), href
832 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
833 | , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
834 |
835 | e.preventDefault()
836 | $target.modal(option)
837 | })
838 | })
839 |
840 | }( window.jQuery );/* ===========================================================
841 | * bootstrap-tooltip.js v2.0.1
842 | * http://twitter.github.com/bootstrap/javascript.html#tooltips
843 | * Inspired by the original jQuery.tipsy by Jason Frame
844 | * ===========================================================
845 | * Copyright 2012 Twitter, Inc.
846 | *
847 | * Licensed under the Apache License, Version 2.0 (the "License");
848 | * you may not use this file except in compliance with the License.
849 | * You may obtain a copy of the License at
850 | *
851 | * http://www.apache.org/licenses/LICENSE-2.0
852 | *
853 | * Unless required by applicable law or agreed to in writing, software
854 | * distributed under the License is distributed on an "AS IS" BASIS,
855 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
856 | * See the License for the specific language governing permissions and
857 | * limitations under the License.
858 | * ========================================================== */
859 |
860 | !function( $ ) {
861 |
862 | "use strict"
863 |
864 | /* TOOLTIP PUBLIC CLASS DEFINITION
865 | * =============================== */
866 |
867 | var Tooltip = function ( element, options ) {
868 | this.init('tooltip', element, options)
869 | }
870 |
871 | Tooltip.prototype = {
872 |
873 | constructor: Tooltip
874 |
875 | , init: function ( type, element, options ) {
876 | var eventIn
877 | , eventOut
878 |
879 | this.type = type
880 | this.$element = $(element)
881 | this.options = this.getOptions(options)
882 | this.enabled = true
883 |
884 | if (this.options.trigger != 'manual') {
885 | eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
886 | eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
887 | this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
888 | this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
889 | }
890 |
891 | this.options.selector ?
892 | (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
893 | this.fixTitle()
894 | }
895 |
896 | , getOptions: function ( options ) {
897 | options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
898 |
899 | if (options.delay && typeof options.delay == 'number') {
900 | options.delay = {
901 | show: options.delay
902 | , hide: options.delay
903 | }
904 | }
905 |
906 | return options
907 | }
908 |
909 | , enter: function ( e ) {
910 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
911 |
912 | if (!self.options.delay || !self.options.delay.show) {
913 | self.show()
914 | } else {
915 | self.hoverState = 'in'
916 | setTimeout(function() {
917 | if (self.hoverState == 'in') {
918 | self.show()
919 | }
920 | }, self.options.delay.show)
921 | }
922 | }
923 |
924 | , leave: function ( e ) {
925 | var self = $(e.currentTarget)[this.type](this._options).data(this.type)
926 |
927 | if (!self.options.delay || !self.options.delay.hide) {
928 | self.hide()
929 | } else {
930 | self.hoverState = 'out'
931 | setTimeout(function() {
932 | if (self.hoverState == 'out') {
933 | self.hide()
934 | }
935 | }, self.options.delay.hide)
936 | }
937 | }
938 |
939 | , show: function () {
940 | var $tip
941 | , inside
942 | , pos
943 | , actualWidth
944 | , actualHeight
945 | , placement
946 | , tp
947 |
948 | if (this.hasContent() && this.enabled) {
949 | $tip = this.tip()
950 | this.setContent()
951 |
952 | if (this.options.animation) {
953 | $tip.addClass('fade')
954 | }
955 |
956 | placement = typeof this.options.placement == 'function' ?
957 | this.options.placement.call(this, $tip[0], this.$element[0]) :
958 | this.options.placement
959 |
960 | inside = /in/.test(placement)
961 |
962 | $tip
963 | .remove()
964 | .css({ top: 0, left: 0, display: 'block' })
965 | .appendTo(inside ? this.$element : document.body)
966 |
967 | pos = this.getPosition(inside)
968 |
969 | actualWidth = $tip[0].offsetWidth
970 | actualHeight = $tip[0].offsetHeight
971 |
972 | switch (inside ? placement.split(' ')[1] : placement) {
973 | case 'bottom':
974 | tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
975 | break
976 | case 'top':
977 | tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
978 | break
979 | case 'left':
980 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
981 | break
982 | case 'right':
983 | tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
984 | break
985 | }
986 |
987 | $tip
988 | .css(tp)
989 | .addClass(placement)
990 | .addClass('in')
991 | }
992 | }
993 |
994 | , setContent: function () {
995 | var $tip = this.tip()
996 | $tip.find('.tooltip-inner').html(this.getTitle())
997 | $tip.removeClass('fade in top bottom left right')
998 | }
999 |
1000 | , hide: function () {
1001 | var that = this
1002 | , $tip = this.tip()
1003 |
1004 | $tip.removeClass('in')
1005 |
1006 | function removeWithAnimation() {
1007 | var timeout = setTimeout(function () {
1008 | $tip.off($.support.transition.end).remove()
1009 | }, 500)
1010 |
1011 | $tip.one($.support.transition.end, function () {
1012 | clearTimeout(timeout)
1013 | $tip.remove()
1014 | })
1015 | }
1016 |
1017 | $.support.transition && this.$tip.hasClass('fade') ?
1018 | removeWithAnimation() :
1019 | $tip.remove()
1020 | }
1021 |
1022 | , fixTitle: function () {
1023 | var $e = this.$element
1024 | if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
1025 | $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
1026 | }
1027 | }
1028 |
1029 | , hasContent: function () {
1030 | return this.getTitle()
1031 | }
1032 |
1033 | , getPosition: function (inside) {
1034 | return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
1035 | width: this.$element[0].offsetWidth
1036 | , height: this.$element[0].offsetHeight
1037 | })
1038 | }
1039 |
1040 | , getTitle: function () {
1041 | var title
1042 | , $e = this.$element
1043 | , o = this.options
1044 |
1045 | title = $e.attr('data-original-title')
1046 | || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
1047 |
1048 | title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
1049 |
1050 | return title
1051 | }
1052 |
1053 | , tip: function () {
1054 | return this.$tip = this.$tip || $(this.options.template)
1055 | }
1056 |
1057 | , validate: function () {
1058 | if (!this.$element[0].parentNode) {
1059 | this.hide()
1060 | this.$element = null
1061 | this.options = null
1062 | }
1063 | }
1064 |
1065 | , enable: function () {
1066 | this.enabled = true
1067 | }
1068 |
1069 | , disable: function () {
1070 | this.enabled = false
1071 | }
1072 |
1073 | , toggleEnabled: function () {
1074 | this.enabled = !this.enabled
1075 | }
1076 |
1077 | , toggle: function () {
1078 | this[this.tip().hasClass('in') ? 'hide' : 'show']()
1079 | }
1080 |
1081 | }
1082 |
1083 |
1084 | /* TOOLTIP PLUGIN DEFINITION
1085 | * ========================= */
1086 |
1087 | $.fn.tooltip = function ( option ) {
1088 | return this.each(function () {
1089 | var $this = $(this)
1090 | , data = $this.data('tooltip')
1091 | , options = typeof option == 'object' && option
1092 | if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
1093 | if (typeof option == 'string') data[option]()
1094 | })
1095 | }
1096 |
1097 | $.fn.tooltip.Constructor = Tooltip
1098 |
1099 | $.fn.tooltip.defaults = {
1100 | animation: true
1101 | , delay: 0
1102 | , selector: false
1103 | , placement: 'top'
1104 | , trigger: 'hover'
1105 | , title: ''
1106 | , template: ''
1107 | }
1108 |
1109 | }( window.jQuery );/* ===========================================================
1110 | * bootstrap-popover.js v2.0.1
1111 | * http://twitter.github.com/bootstrap/javascript.html#popovers
1112 | * ===========================================================
1113 | * Copyright 2012 Twitter, Inc.
1114 | *
1115 | * Licensed under the Apache License, Version 2.0 (the "License");
1116 | * you may not use this file except in compliance with the License.
1117 | * You may obtain a copy of the License at
1118 | *
1119 | * http://www.apache.org/licenses/LICENSE-2.0
1120 | *
1121 | * Unless required by applicable law or agreed to in writing, software
1122 | * distributed under the License is distributed on an "AS IS" BASIS,
1123 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1124 | * See the License for the specific language governing permissions and
1125 | * limitations under the License.
1126 | * =========================================================== */
1127 |
1128 |
1129 | !function( $ ) {
1130 |
1131 | "use strict"
1132 |
1133 | var Popover = function ( element, options ) {
1134 | this.init('popover', element, options)
1135 | }
1136 |
1137 | /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
1138 | ========================================== */
1139 |
1140 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
1141 |
1142 | constructor: Popover
1143 |
1144 | , setContent: function () {
1145 | var $tip = this.tip()
1146 | , title = this.getTitle()
1147 | , content = this.getContent()
1148 |
1149 | $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
1150 | $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
1151 |
1152 | $tip.removeClass('fade top bottom left right in')
1153 | }
1154 |
1155 | , hasContent: function () {
1156 | return this.getTitle() || this.getContent()
1157 | }
1158 |
1159 | , getContent: function () {
1160 | var content
1161 | , $e = this.$element
1162 | , o = this.options
1163 |
1164 | content = $e.attr('data-content')
1165 | || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
1166 |
1167 | content = content.toString().replace(/(^\s*|\s*$)/, "")
1168 |
1169 | return content
1170 | }
1171 |
1172 | , tip: function() {
1173 | if (!this.$tip) {
1174 | this.$tip = $(this.options.template)
1175 | }
1176 | return this.$tip
1177 | }
1178 |
1179 | })
1180 |
1181 |
1182 | /* POPOVER PLUGIN DEFINITION
1183 | * ======================= */
1184 |
1185 | $.fn.popover = function ( option ) {
1186 | return this.each(function () {
1187 | var $this = $(this)
1188 | , data = $this.data('popover')
1189 | , options = typeof option == 'object' && option
1190 | if (!data) $this.data('popover', (data = new Popover(this, options)))
1191 | if (typeof option == 'string') data[option]()
1192 | })
1193 | }
1194 |
1195 | $.fn.popover.Constructor = Popover
1196 |
1197 | $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
1198 | placement: 'right'
1199 | , content: ''
1200 | , template: ''
1201 | })
1202 |
1203 | }( window.jQuery );/* =============================================================
1204 | * bootstrap-scrollspy.js v2.0.1
1205 | * http://twitter.github.com/bootstrap/javascript.html#scrollspy
1206 | * =============================================================
1207 | * Copyright 2012 Twitter, Inc.
1208 | *
1209 | * Licensed under the Apache License, Version 2.0 (the "License");
1210 | * you may not use this file except in compliance with the License.
1211 | * You may obtain a copy of the License at
1212 | *
1213 | * http://www.apache.org/licenses/LICENSE-2.0
1214 | *
1215 | * Unless required by applicable law or agreed to in writing, software
1216 | * distributed under the License is distributed on an "AS IS" BASIS,
1217 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1218 | * See the License for the specific language governing permissions and
1219 | * limitations under the License.
1220 | * ============================================================== */
1221 |
1222 | !function ( $ ) {
1223 |
1224 | "use strict"
1225 |
1226 | /* SCROLLSPY CLASS DEFINITION
1227 | * ========================== */
1228 |
1229 | function ScrollSpy( element, options) {
1230 | var process = $.proxy(this.process, this)
1231 | , $element = $(element).is('body') ? $(window) : $(element)
1232 | , href
1233 | this.options = $.extend({}, $.fn.scrollspy.defaults, options)
1234 | this.$scrollElement = $element.on('scroll.scroll.data-api', process)
1235 | this.selector = (this.options.target
1236 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
1237 | || '') + ' .nav li > a'
1238 | this.$body = $('body').on('click.scroll.data-api', this.selector, process)
1239 | this.refresh()
1240 | this.process()
1241 | }
1242 |
1243 | ScrollSpy.prototype = {
1244 |
1245 | constructor: ScrollSpy
1246 |
1247 | , refresh: function () {
1248 | this.targets = this.$body
1249 | .find(this.selector)
1250 | .map(function () {
1251 | var href = $(this).attr('href')
1252 | return /^#\w/.test(href) && $(href).length ? href : null
1253 | })
1254 |
1255 | this.offsets = $.map(this.targets, function (id) {
1256 | return $(id).position().top
1257 | })
1258 | }
1259 |
1260 | , process: function () {
1261 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
1262 | , offsets = this.offsets
1263 | , targets = this.targets
1264 | , activeTarget = this.activeTarget
1265 | , i
1266 |
1267 | for (i = offsets.length; i--;) {
1268 | activeTarget != targets[i]
1269 | && scrollTop >= offsets[i]
1270 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
1271 | && this.activate( targets[i] )
1272 | }
1273 | }
1274 |
1275 | , activate: function (target) {
1276 | var active
1277 |
1278 | this.activeTarget = target
1279 |
1280 | this.$body
1281 | .find(this.selector).parent('.active')
1282 | .removeClass('active')
1283 |
1284 | active = this.$body
1285 | .find(this.selector + '[href="' + target + '"]')
1286 | .parent('li')
1287 | .addClass('active')
1288 |
1289 | if ( active.parent('.dropdown-menu') ) {
1290 | active.closest('li.dropdown').addClass('active')
1291 | }
1292 | }
1293 |
1294 | }
1295 |
1296 |
1297 | /* SCROLLSPY PLUGIN DEFINITION
1298 | * =========================== */
1299 |
1300 | $.fn.scrollspy = function ( option ) {
1301 | return this.each(function () {
1302 | var $this = $(this)
1303 | , data = $this.data('scrollspy')
1304 | , options = typeof option == 'object' && option
1305 | if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
1306 | if (typeof option == 'string') data[option]()
1307 | })
1308 | }
1309 |
1310 | $.fn.scrollspy.Constructor = ScrollSpy
1311 |
1312 | $.fn.scrollspy.defaults = {
1313 | offset: 10
1314 | }
1315 |
1316 |
1317 | /* SCROLLSPY DATA-API
1318 | * ================== */
1319 |
1320 | $(function () {
1321 | $('[data-spy="scroll"]').each(function () {
1322 | var $spy = $(this)
1323 | $spy.scrollspy($spy.data())
1324 | })
1325 | })
1326 |
1327 | }( window.jQuery );/* ========================================================
1328 | * bootstrap-tab.js v2.0.1
1329 | * http://twitter.github.com/bootstrap/javascript.html#tabs
1330 | * ========================================================
1331 | * Copyright 2012 Twitter, Inc.
1332 | *
1333 | * Licensed under the Apache License, Version 2.0 (the "License");
1334 | * you may not use this file except in compliance with the License.
1335 | * You may obtain a copy of the License at
1336 | *
1337 | * http://www.apache.org/licenses/LICENSE-2.0
1338 | *
1339 | * Unless required by applicable law or agreed to in writing, software
1340 | * distributed under the License is distributed on an "AS IS" BASIS,
1341 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1342 | * See the License for the specific language governing permissions and
1343 | * limitations under the License.
1344 | * ======================================================== */
1345 |
1346 |
1347 | !function( $ ){
1348 |
1349 | "use strict"
1350 |
1351 | /* TAB CLASS DEFINITION
1352 | * ==================== */
1353 |
1354 | var Tab = function ( element ) {
1355 | this.element = $(element)
1356 | }
1357 |
1358 | Tab.prototype = {
1359 |
1360 | constructor: Tab
1361 |
1362 | , show: function () {
1363 | var $this = this.element
1364 | , $ul = $this.closest('ul:not(.dropdown-menu)')
1365 | , selector = $this.attr('data-target')
1366 | , previous
1367 | , $target
1368 |
1369 | if (!selector) {
1370 | selector = $this.attr('href')
1371 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
1372 | }
1373 |
1374 | if ( $this.parent('li').hasClass('active') ) return
1375 |
1376 | previous = $ul.find('.active a').last()[0]
1377 |
1378 | $this.trigger({
1379 | type: 'show'
1380 | , relatedTarget: previous
1381 | })
1382 |
1383 | $target = $(selector)
1384 |
1385 | this.activate($this.parent('li'), $ul)
1386 | this.activate($target, $target.parent(), function () {
1387 | $this.trigger({
1388 | type: 'shown'
1389 | , relatedTarget: previous
1390 | })
1391 | })
1392 | }
1393 |
1394 | , activate: function ( element, container, callback) {
1395 | var $active = container.find('> .active')
1396 | , transition = callback
1397 | && $.support.transition
1398 | && $active.hasClass('fade')
1399 |
1400 | function next() {
1401 | $active
1402 | .removeClass('active')
1403 | .find('> .dropdown-menu > .active')
1404 | .removeClass('active')
1405 |
1406 | element.addClass('active')
1407 |
1408 | if (transition) {
1409 | element[0].offsetWidth // reflow for transition
1410 | element.addClass('in')
1411 | } else {
1412 | element.removeClass('fade')
1413 | }
1414 |
1415 | if ( element.parent('.dropdown-menu') ) {
1416 | element.closest('li.dropdown').addClass('active')
1417 | }
1418 |
1419 | callback && callback()
1420 | }
1421 |
1422 | transition ?
1423 | $active.one($.support.transition.end, next) :
1424 | next()
1425 |
1426 | $active.removeClass('in')
1427 | }
1428 | }
1429 |
1430 |
1431 | /* TAB PLUGIN DEFINITION
1432 | * ===================== */
1433 |
1434 | $.fn.tab = function ( option ) {
1435 | return this.each(function () {
1436 | var $this = $(this)
1437 | , data = $this.data('tab')
1438 | if (!data) $this.data('tab', (data = new Tab(this)))
1439 | if (typeof option == 'string') data[option]()
1440 | })
1441 | }
1442 |
1443 | $.fn.tab.Constructor = Tab
1444 |
1445 |
1446 | /* TAB DATA-API
1447 | * ============ */
1448 |
1449 | $(function () {
1450 | $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
1451 | e.preventDefault()
1452 | $(this).tab('show')
1453 | })
1454 | })
1455 |
1456 | }( window.jQuery );/* =============================================================
1457 | * bootstrap-typeahead.js v2.0.1
1458 | * http://twitter.github.com/bootstrap/javascript.html#typeahead
1459 | * =============================================================
1460 | * Copyright 2012 Twitter, Inc.
1461 | *
1462 | * Licensed under the Apache License, Version 2.0 (the "License");
1463 | * you may not use this file except in compliance with the License.
1464 | * You may obtain a copy of the License at
1465 | *
1466 | * http://www.apache.org/licenses/LICENSE-2.0
1467 | *
1468 | * Unless required by applicable law or agreed to in writing, software
1469 | * distributed under the License is distributed on an "AS IS" BASIS,
1470 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1471 | * See the License for the specific language governing permissions and
1472 | * limitations under the License.
1473 | * ============================================================ */
1474 |
1475 | !function( $ ){
1476 |
1477 | "use strict"
1478 |
1479 | var Typeahead = function ( element, options ) {
1480 | this.$element = $(element)
1481 | this.options = $.extend({}, $.fn.typeahead.defaults, options)
1482 | this.matcher = this.options.matcher || this.matcher
1483 | this.sorter = this.options.sorter || this.sorter
1484 | this.highlighter = this.options.highlighter || this.highlighter
1485 | this.$menu = $(this.options.menu).appendTo('body')
1486 | this.source = this.options.source
1487 | this.shown = false
1488 | this.listen()
1489 | }
1490 |
1491 | Typeahead.prototype = {
1492 |
1493 | constructor: Typeahead
1494 |
1495 | , select: function () {
1496 | var val = this.$menu.find('.active').attr('data-value')
1497 | this.$element.val(val)
1498 | this.$element.change();
1499 | return this.hide()
1500 | }
1501 |
1502 | , show: function () {
1503 | var pos = $.extend({}, this.$element.offset(), {
1504 | height: this.$element[0].offsetHeight
1505 | })
1506 |
1507 | this.$menu.css({
1508 | top: pos.top + pos.height
1509 | , left: pos.left
1510 | })
1511 |
1512 | this.$menu.show()
1513 | this.shown = true
1514 | return this
1515 | }
1516 |
1517 | , hide: function () {
1518 | this.$menu.hide()
1519 | this.shown = false
1520 | return this
1521 | }
1522 |
1523 | , lookup: function (event) {
1524 | var that = this
1525 | , items
1526 | , q
1527 |
1528 | this.query = this.$element.val()
1529 |
1530 | if (!this.query) {
1531 | return this.shown ? this.hide() : this
1532 | }
1533 |
1534 | items = $.grep(this.source, function (item) {
1535 | if (that.matcher(item)) return item
1536 | })
1537 |
1538 | items = this.sorter(items)
1539 |
1540 | if (!items.length) {
1541 | return this.shown ? this.hide() : this
1542 | }
1543 |
1544 | return this.render(items.slice(0, this.options.items)).show()
1545 | }
1546 |
1547 | , matcher: function (item) {
1548 | return ~item.toLowerCase().indexOf(this.query.toLowerCase())
1549 | }
1550 |
1551 | , sorter: function (items) {
1552 | var beginswith = []
1553 | , caseSensitive = []
1554 | , caseInsensitive = []
1555 | , item
1556 |
1557 | while (item = items.shift()) {
1558 | if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
1559 | else if (~item.indexOf(this.query)) caseSensitive.push(item)
1560 | else caseInsensitive.push(item)
1561 | }
1562 |
1563 | return beginswith.concat(caseSensitive, caseInsensitive)
1564 | }
1565 |
1566 | , highlighter: function (item) {
1567 | return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
1568 | return '' + match + ''
1569 | })
1570 | }
1571 |
1572 | , render: function (items) {
1573 | var that = this
1574 |
1575 | items = $(items).map(function (i, item) {
1576 | i = $(that.options.item).attr('data-value', item)
1577 | i.find('a').html(that.highlighter(item))
1578 | return i[0]
1579 | })
1580 |
1581 | items.first().addClass('active')
1582 | this.$menu.html(items)
1583 | return this
1584 | }
1585 |
1586 | , next: function (event) {
1587 | var active = this.$menu.find('.active').removeClass('active')
1588 | , next = active.next()
1589 |
1590 | if (!next.length) {
1591 | next = $(this.$menu.find('li')[0])
1592 | }
1593 |
1594 | next.addClass('active')
1595 | }
1596 |
1597 | , prev: function (event) {
1598 | var active = this.$menu.find('.active').removeClass('active')
1599 | , prev = active.prev()
1600 |
1601 | if (!prev.length) {
1602 | prev = this.$menu.find('li').last()
1603 | }
1604 |
1605 | prev.addClass('active')
1606 | }
1607 |
1608 | , listen: function () {
1609 | this.$element
1610 | .on('blur', $.proxy(this.blur, this))
1611 | .on('keypress', $.proxy(this.keypress, this))
1612 | .on('keyup', $.proxy(this.keyup, this))
1613 |
1614 | if ($.browser.webkit || $.browser.msie) {
1615 | this.$element.on('keydown', $.proxy(this.keypress, this))
1616 | }
1617 |
1618 | this.$menu
1619 | .on('click', $.proxy(this.click, this))
1620 | .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
1621 | }
1622 |
1623 | , keyup: function (e) {
1624 | switch(e.keyCode) {
1625 | case 40: // down arrow
1626 | case 38: // up arrow
1627 | break
1628 |
1629 | case 9: // tab
1630 | case 13: // enter
1631 | if (!this.shown) return
1632 | this.select()
1633 | break
1634 |
1635 | case 27: // escape
1636 | if (!this.shown) return
1637 | this.hide()
1638 | break
1639 |
1640 | default:
1641 | this.lookup()
1642 | }
1643 |
1644 | e.stopPropagation()
1645 | e.preventDefault()
1646 | }
1647 |
1648 | , keypress: function (e) {
1649 | if (!this.shown) return
1650 |
1651 | switch(e.keyCode) {
1652 | case 9: // tab
1653 | case 13: // enter
1654 | case 27: // escape
1655 | e.preventDefault()
1656 | break
1657 |
1658 | case 38: // up arrow
1659 | e.preventDefault()
1660 | this.prev()
1661 | break
1662 |
1663 | case 40: // down arrow
1664 | e.preventDefault()
1665 | this.next()
1666 | break
1667 | }
1668 |
1669 | e.stopPropagation()
1670 | }
1671 |
1672 | , blur: function (e) {
1673 | var that = this
1674 | setTimeout(function () { that.hide() }, 150)
1675 | }
1676 |
1677 | , click: function (e) {
1678 | e.stopPropagation()
1679 | e.preventDefault()
1680 | this.select()
1681 | }
1682 |
1683 | , mouseenter: function (e) {
1684 | this.$menu.find('.active').removeClass('active')
1685 | $(e.currentTarget).addClass('active')
1686 | }
1687 |
1688 | }
1689 |
1690 |
1691 | /* TYPEAHEAD PLUGIN DEFINITION
1692 | * =========================== */
1693 |
1694 | $.fn.typeahead = function ( option ) {
1695 | return this.each(function () {
1696 | var $this = $(this)
1697 | , data = $this.data('typeahead')
1698 | , options = typeof option == 'object' && option
1699 | if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
1700 | if (typeof option == 'string') data[option]()
1701 | })
1702 | }
1703 |
1704 | $.fn.typeahead.defaults = {
1705 | source: []
1706 | , items: 8
1707 | , menu: ''
1708 | , item: ''
1709 | }
1710 |
1711 | $.fn.typeahead.Constructor = Typeahead
1712 |
1713 |
1714 | /* TYPEAHEAD DATA-API
1715 | * ================== */
1716 |
1717 | $(function () {
1718 | $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
1719 | var $this = $(this)
1720 | if ($this.data('typeahead')) return
1721 | e.preventDefault()
1722 | $this.typeahead($this.data())
1723 | })
1724 | })
1725 |
1726 | }( window.jQuery );
--------------------------------------------------------------------------------
/public/stylesheets/bootstrap-responsive.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Responsive v2.0.2
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 | .clearfix {
11 | *zoom: 1;
12 | }
13 | .clearfix:before,
14 | .clearfix:after {
15 | display: table;
16 | content: "";
17 | }
18 | .clearfix:after {
19 | clear: both;
20 | }
21 | .hide-text {
22 | overflow: hidden;
23 | text-indent: 100%;
24 | white-space: nowrap;
25 | }
26 | .input-block-level {
27 | display: block;
28 | width: 100%;
29 | min-height: 28px;
30 | /* Make inputs at least the height of their button counterpart */
31 |
32 | /* Makes inputs behave like true block-level elements */
33 |
34 | -webkit-box-sizing: border-box;
35 | -moz-box-sizing: border-box;
36 | -ms-box-sizing: border-box;
37 | box-sizing: border-box;
38 | }
39 | .hidden {
40 | display: none;
41 | visibility: hidden;
42 | }
43 | .visible-phone {
44 | display: none;
45 | }
46 | .visible-tablet {
47 | display: none;
48 | }
49 | .visible-desktop {
50 | display: block;
51 | }
52 | .hidden-phone {
53 | display: block;
54 | }
55 | .hidden-tablet {
56 | display: block;
57 | }
58 | .hidden-desktop {
59 | display: none;
60 | }
61 | @media (max-width: 767px) {
62 | .visible-phone {
63 | display: block;
64 | }
65 | .hidden-phone {
66 | display: none;
67 | }
68 | .hidden-desktop {
69 | display: block;
70 | }
71 | .visible-desktop {
72 | display: none;
73 | }
74 | }
75 | @media (min-width: 768px) and (max-width: 979px) {
76 | .visible-tablet {
77 | display: block;
78 | }
79 | .hidden-tablet {
80 | display: none;
81 | }
82 | .hidden-desktop {
83 | display: block;
84 | }
85 | .visible-desktop {
86 | display: none;
87 | }
88 | }
89 | @media (max-width: 480px) {
90 | .nav-collapse {
91 | -webkit-transform: translate3d(0, 0, 0);
92 | }
93 | .page-header h1 small {
94 | display: block;
95 | line-height: 18px;
96 | }
97 | input[type="checkbox"],
98 | input[type="radio"] {
99 | border: 1px solid #ccc;
100 | }
101 | .form-horizontal .control-group > label {
102 | float: none;
103 | width: auto;
104 | padding-top: 0;
105 | text-align: left;
106 | }
107 | .form-horizontal .controls {
108 | margin-left: 0;
109 | }
110 | .form-horizontal .control-list {
111 | padding-top: 0;
112 | }
113 | .form-horizontal .form-actions {
114 | padding-left: 10px;
115 | padding-right: 10px;
116 | }
117 | .modal {
118 | position: absolute;
119 | top: 10px;
120 | left: 10px;
121 | right: 10px;
122 | width: auto;
123 | margin: 0;
124 | }
125 | .modal.fade.in {
126 | top: auto;
127 | }
128 | .modal-header .close {
129 | padding: 10px;
130 | margin: -10px;
131 | }
132 | .carousel-caption {
133 | position: static;
134 | }
135 | }
136 | @media (max-width: 767px) {
137 | body {
138 | padding-left: 20px;
139 | padding-right: 20px;
140 | }
141 | .navbar-fixed-top {
142 | margin-left: -20px;
143 | margin-right: -20px;
144 | }
145 | .container {
146 | width: auto;
147 | }
148 | .row-fluid {
149 | width: 100%;
150 | }
151 | .row {
152 | margin-left: 0;
153 | }
154 | .row > [class*="span"],
155 | .row-fluid > [class*="span"] {
156 | float: none;
157 | display: block;
158 | width: auto;
159 | margin: 0;
160 | }
161 | .thumbnails [class*="span"] {
162 | width: auto;
163 | }
164 | input[class*="span"],
165 | select[class*="span"],
166 | textarea[class*="span"],
167 | .uneditable-input {
168 | display: block;
169 | width: 100%;
170 | min-height: 28px;
171 | /* Make inputs at least the height of their button counterpart */
172 |
173 | /* Makes inputs behave like true block-level elements */
174 |
175 | -webkit-box-sizing: border-box;
176 | -moz-box-sizing: border-box;
177 | -ms-box-sizing: border-box;
178 | box-sizing: border-box;
179 | }
180 | .input-prepend input[class*="span"],
181 | .input-append input[class*="span"] {
182 | width: auto;
183 | }
184 | }
185 | @media (min-width: 768px) and (max-width: 979px) {
186 | .row {
187 | margin-left: -20px;
188 | *zoom: 1;
189 | }
190 | .row:before,
191 | .row:after {
192 | display: table;
193 | content: "";
194 | }
195 | .row:after {
196 | clear: both;
197 | }
198 | [class*="span"] {
199 | float: left;
200 | margin-left: 20px;
201 | }
202 | .container,
203 | .navbar-fixed-top .container,
204 | .navbar-fixed-bottom .container {
205 | width: 724px;
206 | }
207 | .span12 {
208 | width: 724px;
209 | }
210 | .span11 {
211 | width: 662px;
212 | }
213 | .span10 {
214 | width: 600px;
215 | }
216 | .span9 {
217 | width: 538px;
218 | }
219 | .span8 {
220 | width: 476px;
221 | }
222 | .span7 {
223 | width: 414px;
224 | }
225 | .span6 {
226 | width: 352px;
227 | }
228 | .span5 {
229 | width: 290px;
230 | }
231 | .span4 {
232 | width: 228px;
233 | }
234 | .span3 {
235 | width: 166px;
236 | }
237 | .span2 {
238 | width: 104px;
239 | }
240 | .span1 {
241 | width: 42px;
242 | }
243 | .offset12 {
244 | margin-left: 764px;
245 | }
246 | .offset11 {
247 | margin-left: 702px;
248 | }
249 | .offset10 {
250 | margin-left: 640px;
251 | }
252 | .offset9 {
253 | margin-left: 578px;
254 | }
255 | .offset8 {
256 | margin-left: 516px;
257 | }
258 | .offset7 {
259 | margin-left: 454px;
260 | }
261 | .offset6 {
262 | margin-left: 392px;
263 | }
264 | .offset5 {
265 | margin-left: 330px;
266 | }
267 | .offset4 {
268 | margin-left: 268px;
269 | }
270 | .offset3 {
271 | margin-left: 206px;
272 | }
273 | .offset2 {
274 | margin-left: 144px;
275 | }
276 | .offset1 {
277 | margin-left: 82px;
278 | }
279 | .row-fluid {
280 | width: 100%;
281 | *zoom: 1;
282 | }
283 | .row-fluid:before,
284 | .row-fluid:after {
285 | display: table;
286 | content: "";
287 | }
288 | .row-fluid:after {
289 | clear: both;
290 | }
291 | .row-fluid > [class*="span"] {
292 | float: left;
293 | margin-left: 2.762430939%;
294 | }
295 | .row-fluid > [class*="span"]:first-child {
296 | margin-left: 0;
297 | }
298 | .row-fluid > .span12 {
299 | width: 99.999999993%;
300 | }
301 | .row-fluid > .span11 {
302 | width: 91.436464082%;
303 | }
304 | .row-fluid > .span10 {
305 | width: 82.87292817100001%;
306 | }
307 | .row-fluid > .span9 {
308 | width: 74.30939226%;
309 | }
310 | .row-fluid > .span8 {
311 | width: 65.74585634900001%;
312 | }
313 | .row-fluid > .span7 {
314 | width: 57.182320438000005%;
315 | }
316 | .row-fluid > .span6 {
317 | width: 48.618784527%;
318 | }
319 | .row-fluid > .span5 {
320 | width: 40.055248616%;
321 | }
322 | .row-fluid > .span4 {
323 | width: 31.491712705%;
324 | }
325 | .row-fluid > .span3 {
326 | width: 22.928176794%;
327 | }
328 | .row-fluid > .span2 {
329 | width: 14.364640883%;
330 | }
331 | .row-fluid > .span1 {
332 | width: 5.801104972%;
333 | }
334 | input,
335 | textarea,
336 | .uneditable-input {
337 | margin-left: 0;
338 | }
339 | input.span12, textarea.span12, .uneditable-input.span12 {
340 | width: 714px;
341 | }
342 | input.span11, textarea.span11, .uneditable-input.span11 {
343 | width: 652px;
344 | }
345 | input.span10, textarea.span10, .uneditable-input.span10 {
346 | width: 590px;
347 | }
348 | input.span9, textarea.span9, .uneditable-input.span9 {
349 | width: 528px;
350 | }
351 | input.span8, textarea.span8, .uneditable-input.span8 {
352 | width: 466px;
353 | }
354 | input.span7, textarea.span7, .uneditable-input.span7 {
355 | width: 404px;
356 | }
357 | input.span6, textarea.span6, .uneditable-input.span6 {
358 | width: 342px;
359 | }
360 | input.span5, textarea.span5, .uneditable-input.span5 {
361 | width: 280px;
362 | }
363 | input.span4, textarea.span4, .uneditable-input.span4 {
364 | width: 218px;
365 | }
366 | input.span3, textarea.span3, .uneditable-input.span3 {
367 | width: 156px;
368 | }
369 | input.span2, textarea.span2, .uneditable-input.span2 {
370 | width: 94px;
371 | }
372 | input.span1, textarea.span1, .uneditable-input.span1 {
373 | width: 32px;
374 | }
375 | }
376 | @media (max-width: 979px) {
377 | body {
378 | padding-top: 0;
379 | }
380 | .navbar-fixed-top {
381 | position: static;
382 | margin-bottom: 18px;
383 | }
384 | .navbar-fixed-top .navbar-inner {
385 | padding: 5px;
386 | }
387 | .navbar .container {
388 | width: auto;
389 | padding: 0;
390 | }
391 | .navbar .brand {
392 | padding-left: 10px;
393 | padding-right: 10px;
394 | margin: 0 0 0 -5px;
395 | }
396 | .navbar .nav-collapse {
397 | clear: left;
398 | }
399 | .navbar .nav {
400 | float: none;
401 | margin: 0 0 9px;
402 | }
403 | .navbar .nav > li {
404 | float: none;
405 | }
406 | .navbar .nav > li > a {
407 | margin-bottom: 2px;
408 | }
409 | .navbar .nav > .divider-vertical {
410 | display: none;
411 | }
412 | .navbar .nav .nav-header {
413 | color: #999999;
414 | text-shadow: none;
415 | }
416 | .navbar .nav > li > a,
417 | .navbar .dropdown-menu a {
418 | padding: 6px 15px;
419 | font-weight: bold;
420 | color: #999999;
421 | -webkit-border-radius: 3px;
422 | -moz-border-radius: 3px;
423 | border-radius: 3px;
424 | }
425 | .navbar .dropdown-menu li + li a {
426 | margin-bottom: 2px;
427 | }
428 | .navbar .nav > li > a:hover,
429 | .navbar .dropdown-menu a:hover {
430 | background-color: #222222;
431 | }
432 | .navbar .dropdown-menu {
433 | position: static;
434 | top: auto;
435 | left: auto;
436 | float: none;
437 | display: block;
438 | max-width: none;
439 | margin: 0 15px;
440 | padding: 0;
441 | background-color: transparent;
442 | border: none;
443 | -webkit-border-radius: 0;
444 | -moz-border-radius: 0;
445 | border-radius: 0;
446 | -webkit-box-shadow: none;
447 | -moz-box-shadow: none;
448 | box-shadow: none;
449 | }
450 | .navbar .dropdown-menu:before,
451 | .navbar .dropdown-menu:after {
452 | display: none;
453 | }
454 | .navbar .dropdown-menu .divider {
455 | display: none;
456 | }
457 | .navbar-form,
458 | .navbar-search {
459 | float: none;
460 | padding: 9px 15px;
461 | margin: 9px 0;
462 | border-top: 1px solid #222222;
463 | border-bottom: 1px solid #222222;
464 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
465 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
466 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
467 | }
468 | .navbar .nav.pull-right {
469 | float: none;
470 | margin-left: 0;
471 | }
472 | .navbar-static .navbar-inner {
473 | padding-left: 10px;
474 | padding-right: 10px;
475 | }
476 | .btn-navbar {
477 | display: block;
478 | }
479 | .nav-collapse {
480 | overflow: hidden;
481 | height: 0;
482 | }
483 | }
484 | @media (min-width: 980px) {
485 | .nav-collapse.collapse {
486 | height: auto !important;
487 | overflow: visible !important;
488 | }
489 | }
490 | @media (min-width: 1200px) {
491 | .row {
492 | margin-left: -30px;
493 | *zoom: 1;
494 | }
495 | .row:before,
496 | .row:after {
497 | display: table;
498 | content: "";
499 | }
500 | .row:after {
501 | clear: both;
502 | }
503 | [class*="span"] {
504 | float: left;
505 | margin-left: 30px;
506 | }
507 | .container,
508 | .navbar-fixed-top .container,
509 | .navbar-fixed-bottom .container {
510 | width: 1170px;
511 | }
512 | .span12 {
513 | width: 1170px;
514 | }
515 | .span11 {
516 | width: 1070px;
517 | }
518 | .span10 {
519 | width: 970px;
520 | }
521 | .span9 {
522 | width: 870px;
523 | }
524 | .span8 {
525 | width: 770px;
526 | }
527 | .span7 {
528 | width: 670px;
529 | }
530 | .span6 {
531 | width: 570px;
532 | }
533 | .span5 {
534 | width: 470px;
535 | }
536 | .span4 {
537 | width: 370px;
538 | }
539 | .span3 {
540 | width: 270px;
541 | }
542 | .span2 {
543 | width: 170px;
544 | }
545 | .span1 {
546 | width: 70px;
547 | }
548 | .offset12 {
549 | margin-left: 1230px;
550 | }
551 | .offset11 {
552 | margin-left: 1130px;
553 | }
554 | .offset10 {
555 | margin-left: 1030px;
556 | }
557 | .offset9 {
558 | margin-left: 930px;
559 | }
560 | .offset8 {
561 | margin-left: 830px;
562 | }
563 | .offset7 {
564 | margin-left: 730px;
565 | }
566 | .offset6 {
567 | margin-left: 630px;
568 | }
569 | .offset5 {
570 | margin-left: 530px;
571 | }
572 | .offset4 {
573 | margin-left: 430px;
574 | }
575 | .offset3 {
576 | margin-left: 330px;
577 | }
578 | .offset2 {
579 | margin-left: 230px;
580 | }
581 | .offset1 {
582 | margin-left: 130px;
583 | }
584 | .row-fluid {
585 | width: 100%;
586 | *zoom: 1;
587 | }
588 | .row-fluid:before,
589 | .row-fluid:after {
590 | display: table;
591 | content: "";
592 | }
593 | .row-fluid:after {
594 | clear: both;
595 | }
596 | .row-fluid > [class*="span"] {
597 | float: left;
598 | margin-left: 2.564102564%;
599 | }
600 | .row-fluid > [class*="span"]:first-child {
601 | margin-left: 0;
602 | }
603 | .row-fluid > .span12 {
604 | width: 100%;
605 | }
606 | .row-fluid > .span11 {
607 | width: 91.45299145300001%;
608 | }
609 | .row-fluid > .span10 {
610 | width: 82.905982906%;
611 | }
612 | .row-fluid > .span9 {
613 | width: 74.358974359%;
614 | }
615 | .row-fluid > .span8 {
616 | width: 65.81196581200001%;
617 | }
618 | .row-fluid > .span7 {
619 | width: 57.264957265%;
620 | }
621 | .row-fluid > .span6 {
622 | width: 48.717948718%;
623 | }
624 | .row-fluid > .span5 {
625 | width: 40.170940171000005%;
626 | }
627 | .row-fluid > .span4 {
628 | width: 31.623931624%;
629 | }
630 | .row-fluid > .span3 {
631 | width: 23.076923077%;
632 | }
633 | .row-fluid > .span2 {
634 | width: 14.529914530000001%;
635 | }
636 | .row-fluid > .span1 {
637 | width: 5.982905983%;
638 | }
639 | input,
640 | textarea,
641 | .uneditable-input {
642 | margin-left: 0;
643 | }
644 | input.span12, textarea.span12, .uneditable-input.span12 {
645 | width: 1160px;
646 | }
647 | input.span11, textarea.span11, .uneditable-input.span11 {
648 | width: 1060px;
649 | }
650 | input.span10, textarea.span10, .uneditable-input.span10 {
651 | width: 960px;
652 | }
653 | input.span9, textarea.span9, .uneditable-input.span9 {
654 | width: 860px;
655 | }
656 | input.span8, textarea.span8, .uneditable-input.span8 {
657 | width: 760px;
658 | }
659 | input.span7, textarea.span7, .uneditable-input.span7 {
660 | width: 660px;
661 | }
662 | input.span6, textarea.span6, .uneditable-input.span6 {
663 | width: 560px;
664 | }
665 | input.span5, textarea.span5, .uneditable-input.span5 {
666 | width: 460px;
667 | }
668 | input.span4, textarea.span4, .uneditable-input.span4 {
669 | width: 360px;
670 | }
671 | input.span3, textarea.span3, .uneditable-input.span3 {
672 | width: 260px;
673 | }
674 | input.span2, textarea.span2, .uneditable-input.span2 {
675 | width: 160px;
676 | }
677 | input.span1, textarea.span1, .uneditable-input.span1 {
678 | width: 60px;
679 | }
680 | .thumbnails {
681 | margin-left: -30px;
682 | }
683 | .thumbnails > li {
684 | margin-left: 30px;
685 | }
686 | }
687 |
--------------------------------------------------------------------------------
/public/stylesheets/bootstrap.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v2.0.2
3 | *
4 | * Copyright 2012 Twitter, Inc
5 | * Licensed under the Apache License v2.0
6 | * http://www.apache.org/licenses/LICENSE-2.0
7 | *
8 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
9 | */
10 | .clearfix {
11 | *zoom: 1;
12 | }
13 | .clearfix:before,
14 | .clearfix:after {
15 | display: table;
16 | content: "";
17 | }
18 | .clearfix:after {
19 | clear: both;
20 | }
21 | .hide-text {
22 | overflow: hidden;
23 | text-indent: 100%;
24 | white-space: nowrap;
25 | }
26 | .input-block-level {
27 | display: block;
28 | width: 100%;
29 | min-height: 28px;
30 | /* Make inputs at least the height of their button counterpart */
31 |
32 | /* Makes inputs behave like true block-level elements */
33 |
34 | -webkit-box-sizing: border-box;
35 | -moz-box-sizing: border-box;
36 | -ms-box-sizing: border-box;
37 | box-sizing: border-box;
38 | }
39 | article,
40 | aside,
41 | details,
42 | figcaption,
43 | figure,
44 | footer,
45 | header,
46 | hgroup,
47 | nav,
48 | section {
49 | display: block;
50 | }
51 | audio,
52 | canvas,
53 | video {
54 | display: inline-block;
55 | *display: inline;
56 | *zoom: 1;
57 | }
58 | audio:not([controls]) {
59 | display: none;
60 | }
61 | html {
62 | font-size: 100%;
63 | -webkit-text-size-adjust: 100%;
64 | -ms-text-size-adjust: 100%;
65 | }
66 | a:focus {
67 | outline: thin dotted #333;
68 | outline: 5px auto -webkit-focus-ring-color;
69 | outline-offset: -2px;
70 | }
71 | a:hover,
72 | a:active {
73 | outline: 0;
74 | }
75 | sub,
76 | sup {
77 | position: relative;
78 | font-size: 75%;
79 | line-height: 0;
80 | vertical-align: baseline;
81 | }
82 | sup {
83 | top: -0.5em;
84 | }
85 | sub {
86 | bottom: -0.25em;
87 | }
88 | img {
89 | height: auto;
90 | border: 0;
91 | -ms-interpolation-mode: bicubic;
92 | vertical-align: middle;
93 | }
94 | button,
95 | input,
96 | select,
97 | textarea {
98 | margin: 0;
99 | font-size: 100%;
100 | vertical-align: middle;
101 | }
102 | button,
103 | input {
104 | *overflow: visible;
105 | line-height: normal;
106 | }
107 | button::-moz-focus-inner,
108 | input::-moz-focus-inner {
109 | padding: 0;
110 | border: 0;
111 | }
112 | button,
113 | input[type="button"],
114 | input[type="reset"],
115 | input[type="submit"] {
116 | cursor: pointer;
117 | -webkit-appearance: button;
118 | }
119 | input[type="search"] {
120 | -webkit-appearance: textfield;
121 | -webkit-box-sizing: content-box;
122 | -moz-box-sizing: content-box;
123 | box-sizing: content-box;
124 | }
125 | input[type="search"]::-webkit-search-decoration,
126 | input[type="search"]::-webkit-search-cancel-button {
127 | -webkit-appearance: none;
128 | }
129 | textarea {
130 | overflow: auto;
131 | vertical-align: top;
132 | }
133 | body {
134 | margin: 0;
135 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
136 | font-size: 13px;
137 | line-height: 18px;
138 | color: #333333;
139 | background-color: #ffffff;
140 | }
141 | a {
142 | color: #0088cc;
143 | text-decoration: none;
144 | }
145 | a:hover {
146 | color: #005580;
147 | text-decoration: underline;
148 | }
149 | .row {
150 | margin-left: -20px;
151 | *zoom: 1;
152 | }
153 | .row:before,
154 | .row:after {
155 | display: table;
156 | content: "";
157 | }
158 | .row:after {
159 | clear: both;
160 | }
161 | [class*="span"] {
162 | float: left;
163 | margin-left: 20px;
164 | }
165 | .container,
166 | .navbar-fixed-top .container,
167 | .navbar-fixed-bottom .container {
168 | width: 940px;
169 | }
170 | .span12 {
171 | width: 940px;
172 | }
173 | .span11 {
174 | width: 860px;
175 | }
176 | .span10 {
177 | width: 780px;
178 | }
179 | .span9 {
180 | width: 700px;
181 | }
182 | .span8 {
183 | width: 620px;
184 | }
185 | .span7 {
186 | width: 540px;
187 | }
188 | .span6 {
189 | width: 460px;
190 | }
191 | .span5 {
192 | width: 380px;
193 | }
194 | .span4 {
195 | width: 300px;
196 | }
197 | .span3 {
198 | width: 220px;
199 | }
200 | .span2 {
201 | width: 140px;
202 | }
203 | .span1 {
204 | width: 60px;
205 | }
206 | .offset12 {
207 | margin-left: 980px;
208 | }
209 | .offset11 {
210 | margin-left: 900px;
211 | }
212 | .offset10 {
213 | margin-left: 820px;
214 | }
215 | .offset9 {
216 | margin-left: 740px;
217 | }
218 | .offset8 {
219 | margin-left: 660px;
220 | }
221 | .offset7 {
222 | margin-left: 580px;
223 | }
224 | .offset6 {
225 | margin-left: 500px;
226 | }
227 | .offset5 {
228 | margin-left: 420px;
229 | }
230 | .offset4 {
231 | margin-left: 340px;
232 | }
233 | .offset3 {
234 | margin-left: 260px;
235 | }
236 | .offset2 {
237 | margin-left: 180px;
238 | }
239 | .offset1 {
240 | margin-left: 100px;
241 | }
242 | .row-fluid {
243 | width: 100%;
244 | *zoom: 1;
245 | }
246 | .row-fluid:before,
247 | .row-fluid:after {
248 | display: table;
249 | content: "";
250 | }
251 | .row-fluid:after {
252 | clear: both;
253 | }
254 | .row-fluid > [class*="span"] {
255 | float: left;
256 | margin-left: 2.127659574%;
257 | }
258 | .row-fluid > [class*="span"]:first-child {
259 | margin-left: 0;
260 | }
261 | .row-fluid > .span12 {
262 | width: 99.99999998999999%;
263 | }
264 | .row-fluid > .span11 {
265 | width: 91.489361693%;
266 | }
267 | .row-fluid > .span10 {
268 | width: 82.97872339599999%;
269 | }
270 | .row-fluid > .span9 {
271 | width: 74.468085099%;
272 | }
273 | .row-fluid > .span8 {
274 | width: 65.95744680199999%;
275 | }
276 | .row-fluid > .span7 {
277 | width: 57.446808505%;
278 | }
279 | .row-fluid > .span6 {
280 | width: 48.93617020799999%;
281 | }
282 | .row-fluid > .span5 {
283 | width: 40.425531911%;
284 | }
285 | .row-fluid > .span4 {
286 | width: 31.914893614%;
287 | }
288 | .row-fluid > .span3 {
289 | width: 23.404255317%;
290 | }
291 | .row-fluid > .span2 {
292 | width: 14.89361702%;
293 | }
294 | .row-fluid > .span1 {
295 | width: 6.382978723%;
296 | }
297 | .container {
298 | margin-left: auto;
299 | margin-right: auto;
300 | *zoom: 1;
301 | }
302 | .container:before,
303 | .container:after {
304 | display: table;
305 | content: "";
306 | }
307 | .container:after {
308 | clear: both;
309 | }
310 | .container-fluid {
311 | padding-left: 20px;
312 | padding-right: 20px;
313 | *zoom: 1;
314 | }
315 | .container-fluid:before,
316 | .container-fluid:after {
317 | display: table;
318 | content: "";
319 | }
320 | .container-fluid:after {
321 | clear: both;
322 | }
323 | p {
324 | margin: 0 0 9px;
325 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
326 | font-size: 13px;
327 | line-height: 18px;
328 | }
329 | p small {
330 | font-size: 11px;
331 | color: #999999;
332 | }
333 | .lead {
334 | margin-bottom: 18px;
335 | font-size: 20px;
336 | font-weight: 200;
337 | line-height: 27px;
338 | }
339 | h1,
340 | h2,
341 | h3,
342 | h4,
343 | h5,
344 | h6 {
345 | margin: 0;
346 | font-family: inherit;
347 | font-weight: bold;
348 | color: inherit;
349 | text-rendering: optimizelegibility;
350 | }
351 | h1 small,
352 | h2 small,
353 | h3 small,
354 | h4 small,
355 | h5 small,
356 | h6 small {
357 | font-weight: normal;
358 | color: #999999;
359 | }
360 | h1 {
361 | font-size: 30px;
362 | line-height: 36px;
363 | }
364 | h1 small {
365 | font-size: 18px;
366 | }
367 | h2 {
368 | font-size: 24px;
369 | line-height: 36px;
370 | }
371 | h2 small {
372 | font-size: 18px;
373 | }
374 | h3 {
375 | line-height: 27px;
376 | font-size: 18px;
377 | }
378 | h3 small {
379 | font-size: 14px;
380 | }
381 | h4,
382 | h5,
383 | h6 {
384 | line-height: 18px;
385 | }
386 | h4 {
387 | font-size: 14px;
388 | }
389 | h4 small {
390 | font-size: 12px;
391 | }
392 | h5 {
393 | font-size: 12px;
394 | }
395 | h6 {
396 | font-size: 11px;
397 | color: #999999;
398 | text-transform: uppercase;
399 | }
400 | .page-header {
401 | padding-bottom: 17px;
402 | margin: 18px 0;
403 | border-bottom: 1px solid #eeeeee;
404 | }
405 | .page-header h1 {
406 | line-height: 1;
407 | }
408 | ul,
409 | ol {
410 | padding: 0;
411 | margin: 0 0 9px 25px;
412 | }
413 | ul ul,
414 | ul ol,
415 | ol ol,
416 | ol ul {
417 | margin-bottom: 0;
418 | }
419 | ul {
420 | list-style: disc;
421 | }
422 | ol {
423 | list-style: decimal;
424 | }
425 | li {
426 | line-height: 18px;
427 | }
428 | ul.unstyled,
429 | ol.unstyled {
430 | margin-left: 0;
431 | list-style: none;
432 | }
433 | dl {
434 | margin-bottom: 18px;
435 | }
436 | dt,
437 | dd {
438 | line-height: 18px;
439 | }
440 | dt {
441 | font-weight: bold;
442 | line-height: 17px;
443 | }
444 | dd {
445 | margin-left: 9px;
446 | }
447 | .dl-horizontal dt {
448 | float: left;
449 | clear: left;
450 | width: 120px;
451 | text-align: right;
452 | }
453 | .dl-horizontal dd {
454 | margin-left: 130px;
455 | }
456 | hr {
457 | margin: 18px 0;
458 | border: 0;
459 | border-top: 1px solid #eeeeee;
460 | border-bottom: 1px solid #ffffff;
461 | }
462 | strong {
463 | font-weight: bold;
464 | }
465 | em {
466 | font-style: italic;
467 | }
468 | .muted {
469 | color: #999999;
470 | }
471 | abbr[title] {
472 | border-bottom: 1px dotted #ddd;
473 | cursor: help;
474 | }
475 | abbr.initialism {
476 | font-size: 90%;
477 | text-transform: uppercase;
478 | }
479 | blockquote {
480 | padding: 0 0 0 15px;
481 | margin: 0 0 18px;
482 | border-left: 5px solid #eeeeee;
483 | }
484 | blockquote p {
485 | margin-bottom: 0;
486 | font-size: 16px;
487 | font-weight: 300;
488 | line-height: 22.5px;
489 | }
490 | blockquote small {
491 | display: block;
492 | line-height: 18px;
493 | color: #999999;
494 | }
495 | blockquote small:before {
496 | content: '\2014 \00A0';
497 | }
498 | blockquote.pull-right {
499 | float: right;
500 | padding-left: 0;
501 | padding-right: 15px;
502 | border-left: 0;
503 | border-right: 5px solid #eeeeee;
504 | }
505 | blockquote.pull-right p,
506 | blockquote.pull-right small {
507 | text-align: right;
508 | }
509 | q:before,
510 | q:after,
511 | blockquote:before,
512 | blockquote:after {
513 | content: "";
514 | }
515 | address {
516 | display: block;
517 | margin-bottom: 18px;
518 | line-height: 18px;
519 | font-style: normal;
520 | }
521 | small {
522 | font-size: 100%;
523 | }
524 | cite {
525 | font-style: normal;
526 | }
527 | code,
528 | pre {
529 | padding: 0 3px 2px;
530 | font-family: Menlo, Monaco, "Courier New", monospace;
531 | font-size: 12px;
532 | color: #333333;
533 | -webkit-border-radius: 3px;
534 | -moz-border-radius: 3px;
535 | border-radius: 3px;
536 | }
537 | code {
538 | padding: 2px 4px;
539 | color: #d14;
540 | background-color: #f7f7f9;
541 | border: 1px solid #e1e1e8;
542 | }
543 | pre {
544 | display: block;
545 | padding: 8.5px;
546 | margin: 0 0 9px;
547 | font-size: 12.025px;
548 | line-height: 18px;
549 | background-color: #f5f5f5;
550 | border: 1px solid #ccc;
551 | border: 1px solid rgba(0, 0, 0, 0.15);
552 | -webkit-border-radius: 4px;
553 | -moz-border-radius: 4px;
554 | border-radius: 4px;
555 | white-space: pre;
556 | white-space: pre-wrap;
557 | word-break: break-all;
558 | word-wrap: break-word;
559 | }
560 | pre.prettyprint {
561 | margin-bottom: 18px;
562 | }
563 | pre code {
564 | padding: 0;
565 | color: inherit;
566 | background-color: transparent;
567 | border: 0;
568 | }
569 | .pre-scrollable {
570 | max-height: 340px;
571 | overflow-y: scroll;
572 | }
573 | .label {
574 | padding: 1px 4px 2px;
575 | font-size: 10.998px;
576 | font-weight: bold;
577 | line-height: 13px;
578 | color: #ffffff;
579 | vertical-align: middle;
580 | white-space: nowrap;
581 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
582 | background-color: #999999;
583 | -webkit-border-radius: 3px;
584 | -moz-border-radius: 3px;
585 | border-radius: 3px;
586 | }
587 | .label:hover {
588 | color: #ffffff;
589 | text-decoration: none;
590 | }
591 | .label-important {
592 | background-color: #b94a48;
593 | }
594 | .label-important:hover {
595 | background-color: #953b39;
596 | }
597 | .label-warning {
598 | background-color: #f89406;
599 | }
600 | .label-warning:hover {
601 | background-color: #c67605;
602 | }
603 | .label-success {
604 | background-color: #468847;
605 | }
606 | .label-success:hover {
607 | background-color: #356635;
608 | }
609 | .label-info {
610 | background-color: #3a87ad;
611 | }
612 | .label-info:hover {
613 | background-color: #2d6987;
614 | }
615 | .label-inverse {
616 | background-color: #333333;
617 | }
618 | .label-inverse:hover {
619 | background-color: #1a1a1a;
620 | }
621 | .badge {
622 | padding: 1px 9px 2px;
623 | font-size: 12.025px;
624 | font-weight: bold;
625 | white-space: nowrap;
626 | color: #ffffff;
627 | background-color: #999999;
628 | -webkit-border-radius: 9px;
629 | -moz-border-radius: 9px;
630 | border-radius: 9px;
631 | }
632 | .badge:hover {
633 | color: #ffffff;
634 | text-decoration: none;
635 | cursor: pointer;
636 | }
637 | .badge-error {
638 | background-color: #b94a48;
639 | }
640 | .badge-error:hover {
641 | background-color: #953b39;
642 | }
643 | .badge-warning {
644 | background-color: #f89406;
645 | }
646 | .badge-warning:hover {
647 | background-color: #c67605;
648 | }
649 | .badge-success {
650 | background-color: #468847;
651 | }
652 | .badge-success:hover {
653 | background-color: #356635;
654 | }
655 | .badge-info {
656 | background-color: #3a87ad;
657 | }
658 | .badge-info:hover {
659 | background-color: #2d6987;
660 | }
661 | .badge-inverse {
662 | background-color: #333333;
663 | }
664 | .badge-inverse:hover {
665 | background-color: #1a1a1a;
666 | }
667 | table {
668 | max-width: 100%;
669 | border-collapse: collapse;
670 | border-spacing: 0;
671 | background-color: transparent;
672 | }
673 | .table {
674 | width: 100%;
675 | margin-bottom: 18px;
676 | }
677 | .table th,
678 | .table td {
679 | padding: 8px;
680 | line-height: 18px;
681 | text-align: left;
682 | vertical-align: top;
683 | border-top: 1px solid #dddddd;
684 | }
685 | .table th {
686 | font-weight: bold;
687 | }
688 | .table thead th {
689 | vertical-align: bottom;
690 | }
691 | .table colgroup + thead tr:first-child th,
692 | .table colgroup + thead tr:first-child td,
693 | .table thead:first-child tr:first-child th,
694 | .table thead:first-child tr:first-child td {
695 | border-top: 0;
696 | }
697 | .table tbody + tbody {
698 | border-top: 2px solid #dddddd;
699 | }
700 | .table-condensed th,
701 | .table-condensed td {
702 | padding: 4px 5px;
703 | }
704 | .table-bordered {
705 | border: 1px solid #dddddd;
706 | border-left: 0;
707 | border-collapse: separate;
708 | *border-collapse: collapsed;
709 | -webkit-border-radius: 4px;
710 | -moz-border-radius: 4px;
711 | border-radius: 4px;
712 | }
713 | .table-bordered th,
714 | .table-bordered td {
715 | border-left: 1px solid #dddddd;
716 | }
717 | .table-bordered thead:first-child tr:first-child th,
718 | .table-bordered tbody:first-child tr:first-child th,
719 | .table-bordered tbody:first-child tr:first-child td {
720 | border-top: 0;
721 | }
722 | .table-bordered thead:first-child tr:first-child th:first-child,
723 | .table-bordered tbody:first-child tr:first-child td:first-child {
724 | -webkit-border-radius: 4px 0 0 0;
725 | -moz-border-radius: 4px 0 0 0;
726 | border-radius: 4px 0 0 0;
727 | }
728 | .table-bordered thead:first-child tr:first-child th:last-child,
729 | .table-bordered tbody:first-child tr:first-child td:last-child {
730 | -webkit-border-radius: 0 4px 0 0;
731 | -moz-border-radius: 0 4px 0 0;
732 | border-radius: 0 4px 0 0;
733 | }
734 | .table-bordered thead:last-child tr:last-child th:first-child,
735 | .table-bordered tbody:last-child tr:last-child td:first-child {
736 | -webkit-border-radius: 0 0 0 4px;
737 | -moz-border-radius: 0 0 0 4px;
738 | border-radius: 0 0 0 4px;
739 | }
740 | .table-bordered thead:last-child tr:last-child th:last-child,
741 | .table-bordered tbody:last-child tr:last-child td:last-child {
742 | -webkit-border-radius: 0 0 4px 0;
743 | -moz-border-radius: 0 0 4px 0;
744 | border-radius: 0 0 4px 0;
745 | }
746 | .table-striped tbody tr:nth-child(odd) td,
747 | .table-striped tbody tr:nth-child(odd) th {
748 | background-color: #f9f9f9;
749 | }
750 | .table tbody tr:hover td,
751 | .table tbody tr:hover th {
752 | background-color: #f5f5f5;
753 | }
754 | table .span1 {
755 | float: none;
756 | width: 44px;
757 | margin-left: 0;
758 | }
759 | table .span2 {
760 | float: none;
761 | width: 124px;
762 | margin-left: 0;
763 | }
764 | table .span3 {
765 | float: none;
766 | width: 204px;
767 | margin-left: 0;
768 | }
769 | table .span4 {
770 | float: none;
771 | width: 284px;
772 | margin-left: 0;
773 | }
774 | table .span5 {
775 | float: none;
776 | width: 364px;
777 | margin-left: 0;
778 | }
779 | table .span6 {
780 | float: none;
781 | width: 444px;
782 | margin-left: 0;
783 | }
784 | table .span7 {
785 | float: none;
786 | width: 524px;
787 | margin-left: 0;
788 | }
789 | table .span8 {
790 | float: none;
791 | width: 604px;
792 | margin-left: 0;
793 | }
794 | table .span9 {
795 | float: none;
796 | width: 684px;
797 | margin-left: 0;
798 | }
799 | table .span10 {
800 | float: none;
801 | width: 764px;
802 | margin-left: 0;
803 | }
804 | table .span11 {
805 | float: none;
806 | width: 844px;
807 | margin-left: 0;
808 | }
809 | table .span12 {
810 | float: none;
811 | width: 924px;
812 | margin-left: 0;
813 | }
814 | table .span13 {
815 | float: none;
816 | width: 1004px;
817 | margin-left: 0;
818 | }
819 | table .span14 {
820 | float: none;
821 | width: 1084px;
822 | margin-left: 0;
823 | }
824 | table .span15 {
825 | float: none;
826 | width: 1164px;
827 | margin-left: 0;
828 | }
829 | table .span16 {
830 | float: none;
831 | width: 1244px;
832 | margin-left: 0;
833 | }
834 | table .span17 {
835 | float: none;
836 | width: 1324px;
837 | margin-left: 0;
838 | }
839 | table .span18 {
840 | float: none;
841 | width: 1404px;
842 | margin-left: 0;
843 | }
844 | table .span19 {
845 | float: none;
846 | width: 1484px;
847 | margin-left: 0;
848 | }
849 | table .span20 {
850 | float: none;
851 | width: 1564px;
852 | margin-left: 0;
853 | }
854 | table .span21 {
855 | float: none;
856 | width: 1644px;
857 | margin-left: 0;
858 | }
859 | table .span22 {
860 | float: none;
861 | width: 1724px;
862 | margin-left: 0;
863 | }
864 | table .span23 {
865 | float: none;
866 | width: 1804px;
867 | margin-left: 0;
868 | }
869 | table .span24 {
870 | float: none;
871 | width: 1884px;
872 | margin-left: 0;
873 | }
874 | form {
875 | margin: 0 0 18px;
876 | }
877 | fieldset {
878 | padding: 0;
879 | margin: 0;
880 | border: 0;
881 | }
882 | legend {
883 | display: block;
884 | width: 100%;
885 | padding: 0;
886 | margin-bottom: 27px;
887 | font-size: 19.5px;
888 | line-height: 36px;
889 | color: #333333;
890 | border: 0;
891 | border-bottom: 1px solid #eee;
892 | }
893 | legend small {
894 | font-size: 13.5px;
895 | color: #999999;
896 | }
897 | label,
898 | input,
899 | button,
900 | select,
901 | textarea {
902 | font-size: 13px;
903 | font-weight: normal;
904 | line-height: 18px;
905 | }
906 | input,
907 | button,
908 | select,
909 | textarea {
910 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
911 | }
912 | label {
913 | display: block;
914 | margin-bottom: 5px;
915 | color: #333333;
916 | }
917 | input,
918 | textarea,
919 | select,
920 | .uneditable-input {
921 | display: inline-block;
922 | width: 210px;
923 | height: 18px;
924 | padding: 4px;
925 | margin-bottom: 9px;
926 | font-size: 13px;
927 | line-height: 18px;
928 | color: #555555;
929 | border: 1px solid #cccccc;
930 | -webkit-border-radius: 3px;
931 | -moz-border-radius: 3px;
932 | border-radius: 3px;
933 | }
934 | .uneditable-textarea {
935 | width: auto;
936 | height: auto;
937 | }
938 | label input,
939 | label textarea,
940 | label select {
941 | display: block;
942 | }
943 | input[type="image"],
944 | input[type="checkbox"],
945 | input[type="radio"] {
946 | width: auto;
947 | height: auto;
948 | padding: 0;
949 | margin: 3px 0;
950 | *margin-top: 0;
951 | /* IE7 */
952 |
953 | line-height: normal;
954 | cursor: pointer;
955 | -webkit-border-radius: 0;
956 | -moz-border-radius: 0;
957 | border-radius: 0;
958 | border: 0 \9;
959 | /* IE9 and down */
960 |
961 | }
962 | input[type="image"] {
963 | border: 0;
964 | }
965 | input[type="file"] {
966 | width: auto;
967 | padding: initial;
968 | line-height: initial;
969 | border: initial;
970 | background-color: #ffffff;
971 | background-color: initial;
972 | -webkit-box-shadow: none;
973 | -moz-box-shadow: none;
974 | box-shadow: none;
975 | }
976 | input[type="button"],
977 | input[type="reset"],
978 | input[type="submit"] {
979 | width: auto;
980 | height: auto;
981 | }
982 | select,
983 | input[type="file"] {
984 | height: 28px;
985 | /* In IE7, the height of the select element cannot be changed by height, only font-size */
986 |
987 | *margin-top: 4px;
988 | /* For IE7, add top margin to align select with labels */
989 |
990 | line-height: 28px;
991 | }
992 | input[type="file"] {
993 | line-height: 18px \9;
994 | }
995 | select {
996 | width: 220px;
997 | background-color: #ffffff;
998 | }
999 | select[multiple],
1000 | select[size] {
1001 | height: auto;
1002 | }
1003 | input[type="image"] {
1004 | -webkit-box-shadow: none;
1005 | -moz-box-shadow: none;
1006 | box-shadow: none;
1007 | }
1008 | textarea {
1009 | height: auto;
1010 | }
1011 | input[type="hidden"] {
1012 | display: none;
1013 | }
1014 | .radio,
1015 | .checkbox {
1016 | padding-left: 18px;
1017 | }
1018 | .radio input[type="radio"],
1019 | .checkbox input[type="checkbox"] {
1020 | float: left;
1021 | margin-left: -18px;
1022 | }
1023 | .controls > .radio:first-child,
1024 | .controls > .checkbox:first-child {
1025 | padding-top: 5px;
1026 | }
1027 | .radio.inline,
1028 | .checkbox.inline {
1029 | display: inline-block;
1030 | padding-top: 5px;
1031 | margin-bottom: 0;
1032 | vertical-align: middle;
1033 | }
1034 | .radio.inline + .radio.inline,
1035 | .checkbox.inline + .checkbox.inline {
1036 | margin-left: 10px;
1037 | }
1038 | input,
1039 | textarea {
1040 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1041 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1042 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1043 | -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
1044 | -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
1045 | -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
1046 | -o-transition: border linear 0.2s, box-shadow linear 0.2s;
1047 | transition: border linear 0.2s, box-shadow linear 0.2s;
1048 | }
1049 | input:focus,
1050 | textarea:focus {
1051 | border-color: rgba(82, 168, 236, 0.8);
1052 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
1053 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
1054 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
1055 | outline: 0;
1056 | outline: thin dotted \9;
1057 | /* IE6-9 */
1058 |
1059 | }
1060 | input[type="file"]:focus,
1061 | input[type="radio"]:focus,
1062 | input[type="checkbox"]:focus,
1063 | select:focus {
1064 | -webkit-box-shadow: none;
1065 | -moz-box-shadow: none;
1066 | box-shadow: none;
1067 | outline: thin dotted #333;
1068 | outline: 5px auto -webkit-focus-ring-color;
1069 | outline-offset: -2px;
1070 | }
1071 | .input-mini {
1072 | width: 60px;
1073 | }
1074 | .input-small {
1075 | width: 90px;
1076 | }
1077 | .input-medium {
1078 | width: 150px;
1079 | }
1080 | .input-large {
1081 | width: 210px;
1082 | }
1083 | .input-xlarge {
1084 | width: 270px;
1085 | }
1086 | .input-xxlarge {
1087 | width: 530px;
1088 | }
1089 | input[class*="span"],
1090 | select[class*="span"],
1091 | textarea[class*="span"],
1092 | .uneditable-input {
1093 | float: none;
1094 | margin-left: 0;
1095 | }
1096 | input,
1097 | textarea,
1098 | .uneditable-input {
1099 | margin-left: 0;
1100 | }
1101 | input.span12, textarea.span12, .uneditable-input.span12 {
1102 | width: 930px;
1103 | }
1104 | input.span11, textarea.span11, .uneditable-input.span11 {
1105 | width: 850px;
1106 | }
1107 | input.span10, textarea.span10, .uneditable-input.span10 {
1108 | width: 770px;
1109 | }
1110 | input.span9, textarea.span9, .uneditable-input.span9 {
1111 | width: 690px;
1112 | }
1113 | input.span8, textarea.span8, .uneditable-input.span8 {
1114 | width: 610px;
1115 | }
1116 | input.span7, textarea.span7, .uneditable-input.span7 {
1117 | width: 530px;
1118 | }
1119 | input.span6, textarea.span6, .uneditable-input.span6 {
1120 | width: 450px;
1121 | }
1122 | input.span5, textarea.span5, .uneditable-input.span5 {
1123 | width: 370px;
1124 | }
1125 | input.span4, textarea.span4, .uneditable-input.span4 {
1126 | width: 290px;
1127 | }
1128 | input.span3, textarea.span3, .uneditable-input.span3 {
1129 | width: 210px;
1130 | }
1131 | input.span2, textarea.span2, .uneditable-input.span2 {
1132 | width: 130px;
1133 | }
1134 | input.span1, textarea.span1, .uneditable-input.span1 {
1135 | width: 50px;
1136 | }
1137 | input[disabled],
1138 | select[disabled],
1139 | textarea[disabled],
1140 | input[readonly],
1141 | select[readonly],
1142 | textarea[readonly] {
1143 | background-color: #eeeeee;
1144 | border-color: #ddd;
1145 | cursor: not-allowed;
1146 | }
1147 | .control-group.warning > label,
1148 | .control-group.warning .help-block,
1149 | .control-group.warning .help-inline {
1150 | color: #c09853;
1151 | }
1152 | .control-group.warning input,
1153 | .control-group.warning select,
1154 | .control-group.warning textarea {
1155 | color: #c09853;
1156 | border-color: #c09853;
1157 | }
1158 | .control-group.warning input:focus,
1159 | .control-group.warning select:focus,
1160 | .control-group.warning textarea:focus {
1161 | border-color: #a47e3c;
1162 | -webkit-box-shadow: 0 0 6px #dbc59e;
1163 | -moz-box-shadow: 0 0 6px #dbc59e;
1164 | box-shadow: 0 0 6px #dbc59e;
1165 | }
1166 | .control-group.warning .input-prepend .add-on,
1167 | .control-group.warning .input-append .add-on {
1168 | color: #c09853;
1169 | background-color: #fcf8e3;
1170 | border-color: #c09853;
1171 | }
1172 | .control-group.error > label,
1173 | .control-group.error .help-block,
1174 | .control-group.error .help-inline {
1175 | color: #b94a48;
1176 | }
1177 | .control-group.error input,
1178 | .control-group.error select,
1179 | .control-group.error textarea {
1180 | color: #b94a48;
1181 | border-color: #b94a48;
1182 | }
1183 | .control-group.error input:focus,
1184 | .control-group.error select:focus,
1185 | .control-group.error textarea:focus {
1186 | border-color: #953b39;
1187 | -webkit-box-shadow: 0 0 6px #d59392;
1188 | -moz-box-shadow: 0 0 6px #d59392;
1189 | box-shadow: 0 0 6px #d59392;
1190 | }
1191 | .control-group.error .input-prepend .add-on,
1192 | .control-group.error .input-append .add-on {
1193 | color: #b94a48;
1194 | background-color: #f2dede;
1195 | border-color: #b94a48;
1196 | }
1197 | .control-group.success > label,
1198 | .control-group.success .help-block,
1199 | .control-group.success .help-inline {
1200 | color: #468847;
1201 | }
1202 | .control-group.success input,
1203 | .control-group.success select,
1204 | .control-group.success textarea {
1205 | color: #468847;
1206 | border-color: #468847;
1207 | }
1208 | .control-group.success input:focus,
1209 | .control-group.success select:focus,
1210 | .control-group.success textarea:focus {
1211 | border-color: #356635;
1212 | -webkit-box-shadow: 0 0 6px #7aba7b;
1213 | -moz-box-shadow: 0 0 6px #7aba7b;
1214 | box-shadow: 0 0 6px #7aba7b;
1215 | }
1216 | .control-group.success .input-prepend .add-on,
1217 | .control-group.success .input-append .add-on {
1218 | color: #468847;
1219 | background-color: #dff0d8;
1220 | border-color: #468847;
1221 | }
1222 | input:focus:required:invalid,
1223 | textarea:focus:required:invalid,
1224 | select:focus:required:invalid {
1225 | color: #b94a48;
1226 | border-color: #ee5f5b;
1227 | }
1228 | input:focus:required:invalid:focus,
1229 | textarea:focus:required:invalid:focus,
1230 | select:focus:required:invalid:focus {
1231 | border-color: #e9322d;
1232 | -webkit-box-shadow: 0 0 6px #f8b9b7;
1233 | -moz-box-shadow: 0 0 6px #f8b9b7;
1234 | box-shadow: 0 0 6px #f8b9b7;
1235 | }
1236 | .form-actions {
1237 | padding: 17px 20px 18px;
1238 | margin-top: 18px;
1239 | margin-bottom: 18px;
1240 | background-color: #eeeeee;
1241 | border-top: 1px solid #ddd;
1242 | *zoom: 1;
1243 | }
1244 | .form-actions:before,
1245 | .form-actions:after {
1246 | display: table;
1247 | content: "";
1248 | }
1249 | .form-actions:after {
1250 | clear: both;
1251 | }
1252 | .uneditable-input {
1253 | display: block;
1254 | background-color: #ffffff;
1255 | border-color: #eee;
1256 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1257 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1258 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
1259 | cursor: not-allowed;
1260 | }
1261 | :-moz-placeholder {
1262 | color: #999999;
1263 | }
1264 | ::-webkit-input-placeholder {
1265 | color: #999999;
1266 | }
1267 | .help-block,
1268 | .help-inline {
1269 | color: #555555;
1270 | }
1271 | .help-block {
1272 | display: block;
1273 | margin-bottom: 9px;
1274 | }
1275 | .help-inline {
1276 | display: inline-block;
1277 | *display: inline;
1278 | /* IE7 inline-block hack */
1279 |
1280 | *zoom: 1;
1281 | vertical-align: middle;
1282 | padding-left: 5px;
1283 | }
1284 | .input-prepend,
1285 | .input-append {
1286 | margin-bottom: 5px;
1287 | }
1288 | .input-prepend input,
1289 | .input-append input,
1290 | .input-prepend select,
1291 | .input-append select,
1292 | .input-prepend .uneditable-input,
1293 | .input-append .uneditable-input {
1294 | *margin-left: 0;
1295 | -webkit-border-radius: 0 3px 3px 0;
1296 | -moz-border-radius: 0 3px 3px 0;
1297 | border-radius: 0 3px 3px 0;
1298 | }
1299 | .input-prepend input:focus,
1300 | .input-append input:focus,
1301 | .input-prepend select:focus,
1302 | .input-append select:focus,
1303 | .input-prepend .uneditable-input:focus,
1304 | .input-append .uneditable-input:focus {
1305 | position: relative;
1306 | z-index: 2;
1307 | }
1308 | .input-prepend .uneditable-input,
1309 | .input-append .uneditable-input {
1310 | border-left-color: #ccc;
1311 | }
1312 | .input-prepend .add-on,
1313 | .input-append .add-on {
1314 | display: inline-block;
1315 | width: auto;
1316 | min-width: 16px;
1317 | height: 18px;
1318 | padding: 4px 5px;
1319 | font-weight: normal;
1320 | line-height: 18px;
1321 | text-align: center;
1322 | text-shadow: 0 1px 0 #ffffff;
1323 | vertical-align: middle;
1324 | background-color: #eeeeee;
1325 | border: 1px solid #ccc;
1326 | }
1327 | .input-prepend .add-on,
1328 | .input-append .add-on,
1329 | .input-prepend .btn,
1330 | .input-append .btn {
1331 | -webkit-border-radius: 3px 0 0 3px;
1332 | -moz-border-radius: 3px 0 0 3px;
1333 | border-radius: 3px 0 0 3px;
1334 | }
1335 | .input-prepend .active,
1336 | .input-append .active {
1337 | background-color: #a9dba9;
1338 | border-color: #46a546;
1339 | }
1340 | .input-prepend .add-on,
1341 | .input-prepend .btn {
1342 | margin-right: -1px;
1343 | }
1344 | .input-append input,
1345 | .input-append select .uneditable-input {
1346 | -webkit-border-radius: 3px 0 0 3px;
1347 | -moz-border-radius: 3px 0 0 3px;
1348 | border-radius: 3px 0 0 3px;
1349 | }
1350 | .input-append .uneditable-input {
1351 | border-left-color: #eee;
1352 | border-right-color: #ccc;
1353 | }
1354 | .input-append .add-on,
1355 | .input-append .btn {
1356 | margin-left: -1px;
1357 | -webkit-border-radius: 0 3px 3px 0;
1358 | -moz-border-radius: 0 3px 3px 0;
1359 | border-radius: 0 3px 3px 0;
1360 | }
1361 | .input-prepend.input-append input,
1362 | .input-prepend.input-append select,
1363 | .input-prepend.input-append .uneditable-input {
1364 | -webkit-border-radius: 0;
1365 | -moz-border-radius: 0;
1366 | border-radius: 0;
1367 | }
1368 | .input-prepend.input-append .add-on:first-child,
1369 | .input-prepend.input-append .btn:first-child {
1370 | margin-right: -1px;
1371 | -webkit-border-radius: 3px 0 0 3px;
1372 | -moz-border-radius: 3px 0 0 3px;
1373 | border-radius: 3px 0 0 3px;
1374 | }
1375 | .input-prepend.input-append .add-on:last-child,
1376 | .input-prepend.input-append .btn:last-child {
1377 | margin-left: -1px;
1378 | -webkit-border-radius: 0 3px 3px 0;
1379 | -moz-border-radius: 0 3px 3px 0;
1380 | border-radius: 0 3px 3px 0;
1381 | }
1382 | .search-query {
1383 | padding-left: 14px;
1384 | padding-right: 14px;
1385 | margin-bottom: 0;
1386 | -webkit-border-radius: 14px;
1387 | -moz-border-radius: 14px;
1388 | border-radius: 14px;
1389 | }
1390 | .form-search input,
1391 | .form-inline input,
1392 | .form-horizontal input,
1393 | .form-search textarea,
1394 | .form-inline textarea,
1395 | .form-horizontal textarea,
1396 | .form-search select,
1397 | .form-inline select,
1398 | .form-horizontal select,
1399 | .form-search .help-inline,
1400 | .form-inline .help-inline,
1401 | .form-horizontal .help-inline,
1402 | .form-search .uneditable-input,
1403 | .form-inline .uneditable-input,
1404 | .form-horizontal .uneditable-input,
1405 | .form-search .input-prepend,
1406 | .form-inline .input-prepend,
1407 | .form-horizontal .input-prepend,
1408 | .form-search .input-append,
1409 | .form-inline .input-append,
1410 | .form-horizontal .input-append {
1411 | display: inline-block;
1412 | margin-bottom: 0;
1413 | }
1414 | .form-search .hide,
1415 | .form-inline .hide,
1416 | .form-horizontal .hide {
1417 | display: none;
1418 | }
1419 | .form-search label,
1420 | .form-inline label {
1421 | display: inline-block;
1422 | }
1423 | .form-search .input-append,
1424 | .form-inline .input-append,
1425 | .form-search .input-prepend,
1426 | .form-inline .input-prepend {
1427 | margin-bottom: 0;
1428 | }
1429 | .form-search .radio,
1430 | .form-search .checkbox,
1431 | .form-inline .radio,
1432 | .form-inline .checkbox {
1433 | padding-left: 0;
1434 | margin-bottom: 0;
1435 | vertical-align: middle;
1436 | }
1437 | .form-search .radio input[type="radio"],
1438 | .form-search .checkbox input[type="checkbox"],
1439 | .form-inline .radio input[type="radio"],
1440 | .form-inline .checkbox input[type="checkbox"] {
1441 | float: left;
1442 | margin-left: 0;
1443 | margin-right: 3px;
1444 | }
1445 | .control-group {
1446 | margin-bottom: 9px;
1447 | }
1448 | legend + .control-group {
1449 | margin-top: 18px;
1450 | -webkit-margin-top-collapse: separate;
1451 | }
1452 | .form-horizontal .control-group {
1453 | margin-bottom: 18px;
1454 | *zoom: 1;
1455 | }
1456 | .form-horizontal .control-group:before,
1457 | .form-horizontal .control-group:after {
1458 | display: table;
1459 | content: "";
1460 | }
1461 | .form-horizontal .control-group:after {
1462 | clear: both;
1463 | }
1464 | .form-horizontal .control-label {
1465 | float: left;
1466 | width: 140px;
1467 | padding-top: 5px;
1468 | text-align: right;
1469 | }
1470 | .form-horizontal .controls {
1471 | margin-left: 160px;
1472 | /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */
1473 |
1474 | *display: inline-block;
1475 | *margin-left: 0;
1476 | *padding-left: 20px;
1477 | }
1478 | .form-horizontal .help-block {
1479 | margin-top: 9px;
1480 | margin-bottom: 0;
1481 | }
1482 | .form-horizontal .form-actions {
1483 | padding-left: 160px;
1484 | }
1485 | .btn {
1486 | display: inline-block;
1487 | *display: inline;
1488 | /* IE7 inline-block hack */
1489 |
1490 | *zoom: 1;
1491 | padding: 4px 10px 4px;
1492 | margin-bottom: 0;
1493 | font-size: 13px;
1494 | line-height: 18px;
1495 | color: #333333;
1496 | text-align: center;
1497 | text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
1498 | vertical-align: middle;
1499 | background-color: #f5f5f5;
1500 | background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
1501 | background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
1502 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
1503 | background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
1504 | background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
1505 | background-image: linear-gradient(top, #ffffff, #e6e6e6);
1506 | background-repeat: repeat-x;
1507 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
1508 | border-color: #e6e6e6 #e6e6e6 #bfbfbf;
1509 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1510 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1511 | border: 1px solid #cccccc;
1512 | border-bottom-color: #b3b3b3;
1513 | -webkit-border-radius: 4px;
1514 | -moz-border-radius: 4px;
1515 | border-radius: 4px;
1516 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1517 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1518 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
1519 | cursor: pointer;
1520 | *margin-left: .3em;
1521 | }
1522 | .btn:hover,
1523 | .btn:active,
1524 | .btn.active,
1525 | .btn.disabled,
1526 | .btn[disabled] {
1527 | background-color: #e6e6e6;
1528 | }
1529 | .btn:active,
1530 | .btn.active {
1531 | background-color: #cccccc \9;
1532 | }
1533 | .btn:first-child {
1534 | *margin-left: 0;
1535 | }
1536 | .btn:hover {
1537 | color: #333333;
1538 | text-decoration: none;
1539 | background-color: #e6e6e6;
1540 | background-position: 0 -15px;
1541 | -webkit-transition: background-position 0.1s linear;
1542 | -moz-transition: background-position 0.1s linear;
1543 | -ms-transition: background-position 0.1s linear;
1544 | -o-transition: background-position 0.1s linear;
1545 | transition: background-position 0.1s linear;
1546 | }
1547 | .btn:focus {
1548 | outline: thin dotted #333;
1549 | outline: 5px auto -webkit-focus-ring-color;
1550 | outline-offset: -2px;
1551 | }
1552 | .btn.active,
1553 | .btn:active {
1554 | background-image: none;
1555 | -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
1556 | -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
1557 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
1558 | background-color: #e6e6e6;
1559 | background-color: #d9d9d9 \9;
1560 | outline: 0;
1561 | }
1562 | .btn.disabled,
1563 | .btn[disabled] {
1564 | cursor: default;
1565 | background-image: none;
1566 | background-color: #e6e6e6;
1567 | opacity: 0.65;
1568 | filter: alpha(opacity=65);
1569 | -webkit-box-shadow: none;
1570 | -moz-box-shadow: none;
1571 | box-shadow: none;
1572 | }
1573 | .btn-large {
1574 | padding: 9px 14px;
1575 | font-size: 15px;
1576 | line-height: normal;
1577 | -webkit-border-radius: 5px;
1578 | -moz-border-radius: 5px;
1579 | border-radius: 5px;
1580 | }
1581 | .btn-large [class^="icon-"] {
1582 | margin-top: 1px;
1583 | }
1584 | .btn-small {
1585 | padding: 5px 9px;
1586 | font-size: 11px;
1587 | line-height: 16px;
1588 | }
1589 | .btn-small [class^="icon-"] {
1590 | margin-top: -1px;
1591 | }
1592 | .btn-mini {
1593 | padding: 2px 6px;
1594 | font-size: 11px;
1595 | line-height: 14px;
1596 | }
1597 | .btn-primary,
1598 | .btn-primary:hover,
1599 | .btn-warning,
1600 | .btn-warning:hover,
1601 | .btn-danger,
1602 | .btn-danger:hover,
1603 | .btn-success,
1604 | .btn-success:hover,
1605 | .btn-info,
1606 | .btn-info:hover,
1607 | .btn-inverse,
1608 | .btn-inverse:hover {
1609 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
1610 | color: #ffffff;
1611 | }
1612 | .btn-primary.active,
1613 | .btn-warning.active,
1614 | .btn-danger.active,
1615 | .btn-success.active,
1616 | .btn-info.active,
1617 | .btn-inverse.active {
1618 | color: rgba(255, 255, 255, 0.75);
1619 | }
1620 | .btn-primary {
1621 | background-color: #0074cc;
1622 | background-image: -moz-linear-gradient(top, #0088cc, #0055cc);
1623 | background-image: -ms-linear-gradient(top, #0088cc, #0055cc);
1624 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));
1625 | background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);
1626 | background-image: -o-linear-gradient(top, #0088cc, #0055cc);
1627 | background-image: linear-gradient(top, #0088cc, #0055cc);
1628 | background-repeat: repeat-x;
1629 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);
1630 | border-color: #0055cc #0055cc #003580;
1631 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1632 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1633 | }
1634 | .btn-primary:hover,
1635 | .btn-primary:active,
1636 | .btn-primary.active,
1637 | .btn-primary.disabled,
1638 | .btn-primary[disabled] {
1639 | background-color: #0055cc;
1640 | }
1641 | .btn-primary:active,
1642 | .btn-primary.active {
1643 | background-color: #004099 \9;
1644 | }
1645 | .btn-warning {
1646 | background-color: #faa732;
1647 | background-image: -moz-linear-gradient(top, #fbb450, #f89406);
1648 | background-image: -ms-linear-gradient(top, #fbb450, #f89406);
1649 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
1650 | background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
1651 | background-image: -o-linear-gradient(top, #fbb450, #f89406);
1652 | background-image: linear-gradient(top, #fbb450, #f89406);
1653 | background-repeat: repeat-x;
1654 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
1655 | border-color: #f89406 #f89406 #ad6704;
1656 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1657 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1658 | }
1659 | .btn-warning:hover,
1660 | .btn-warning:active,
1661 | .btn-warning.active,
1662 | .btn-warning.disabled,
1663 | .btn-warning[disabled] {
1664 | background-color: #f89406;
1665 | }
1666 | .btn-warning:active,
1667 | .btn-warning.active {
1668 | background-color: #c67605 \9;
1669 | }
1670 | .btn-danger {
1671 | background-color: #da4f49;
1672 | background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
1673 | background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
1674 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
1675 | background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
1676 | background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
1677 | background-image: linear-gradient(top, #ee5f5b, #bd362f);
1678 | background-repeat: repeat-x;
1679 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
1680 | border-color: #bd362f #bd362f #802420;
1681 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1682 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1683 | }
1684 | .btn-danger:hover,
1685 | .btn-danger:active,
1686 | .btn-danger.active,
1687 | .btn-danger.disabled,
1688 | .btn-danger[disabled] {
1689 | background-color: #bd362f;
1690 | }
1691 | .btn-danger:active,
1692 | .btn-danger.active {
1693 | background-color: #942a25 \9;
1694 | }
1695 | .btn-success {
1696 | background-color: #5bb75b;
1697 | background-image: -moz-linear-gradient(top, #62c462, #51a351);
1698 | background-image: -ms-linear-gradient(top, #62c462, #51a351);
1699 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
1700 | background-image: -webkit-linear-gradient(top, #62c462, #51a351);
1701 | background-image: -o-linear-gradient(top, #62c462, #51a351);
1702 | background-image: linear-gradient(top, #62c462, #51a351);
1703 | background-repeat: repeat-x;
1704 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
1705 | border-color: #51a351 #51a351 #387038;
1706 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1707 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1708 | }
1709 | .btn-success:hover,
1710 | .btn-success:active,
1711 | .btn-success.active,
1712 | .btn-success.disabled,
1713 | .btn-success[disabled] {
1714 | background-color: #51a351;
1715 | }
1716 | .btn-success:active,
1717 | .btn-success.active {
1718 | background-color: #408140 \9;
1719 | }
1720 | .btn-info {
1721 | background-color: #49afcd;
1722 | background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
1723 | background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
1724 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
1725 | background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
1726 | background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
1727 | background-image: linear-gradient(top, #5bc0de, #2f96b4);
1728 | background-repeat: repeat-x;
1729 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
1730 | border-color: #2f96b4 #2f96b4 #1f6377;
1731 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1732 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1733 | }
1734 | .btn-info:hover,
1735 | .btn-info:active,
1736 | .btn-info.active,
1737 | .btn-info.disabled,
1738 | .btn-info[disabled] {
1739 | background-color: #2f96b4;
1740 | }
1741 | .btn-info:active,
1742 | .btn-info.active {
1743 | background-color: #24748c \9;
1744 | }
1745 | .btn-inverse {
1746 | background-color: #414141;
1747 | background-image: -moz-linear-gradient(top, #555555, #222222);
1748 | background-image: -ms-linear-gradient(top, #555555, #222222);
1749 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));
1750 | background-image: -webkit-linear-gradient(top, #555555, #222222);
1751 | background-image: -o-linear-gradient(top, #555555, #222222);
1752 | background-image: linear-gradient(top, #555555, #222222);
1753 | background-repeat: repeat-x;
1754 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);
1755 | border-color: #222222 #222222 #000000;
1756 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
1757 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
1758 | }
1759 | .btn-inverse:hover,
1760 | .btn-inverse:active,
1761 | .btn-inverse.active,
1762 | .btn-inverse.disabled,
1763 | .btn-inverse[disabled] {
1764 | background-color: #222222;
1765 | }
1766 | .btn-inverse:active,
1767 | .btn-inverse.active {
1768 | background-color: #080808 \9;
1769 | }
1770 | button.btn,
1771 | input[type="submit"].btn {
1772 | *padding-top: 2px;
1773 | *padding-bottom: 2px;
1774 | }
1775 | button.btn::-moz-focus-inner,
1776 | input[type="submit"].btn::-moz-focus-inner {
1777 | padding: 0;
1778 | border: 0;
1779 | }
1780 | button.btn.btn-large,
1781 | input[type="submit"].btn.btn-large {
1782 | *padding-top: 7px;
1783 | *padding-bottom: 7px;
1784 | }
1785 | button.btn.btn-small,
1786 | input[type="submit"].btn.btn-small {
1787 | *padding-top: 3px;
1788 | *padding-bottom: 3px;
1789 | }
1790 | button.btn.btn-mini,
1791 | input[type="submit"].btn.btn-mini {
1792 | *padding-top: 1px;
1793 | *padding-bottom: 1px;
1794 | }
1795 | [class^="icon-"],
1796 | [class*=" icon-"] {
1797 | display: inline-block;
1798 | width: 14px;
1799 | height: 14px;
1800 | line-height: 14px;
1801 | vertical-align: text-top;
1802 | background-image: url("../img/glyphicons-halflings.png");
1803 | background-position: 14px 14px;
1804 | background-repeat: no-repeat;
1805 | *margin-right: .3em;
1806 | }
1807 | [class^="icon-"]:last-child,
1808 | [class*=" icon-"]:last-child {
1809 | *margin-left: 0;
1810 | }
1811 | .icon-white {
1812 | background-image: url("../img/glyphicons-halflings-white.png");
1813 | }
1814 | .icon-glass {
1815 | background-position: 0 0;
1816 | }
1817 | .icon-music {
1818 | background-position: -24px 0;
1819 | }
1820 | .icon-search {
1821 | background-position: -48px 0;
1822 | }
1823 | .icon-envelope {
1824 | background-position: -72px 0;
1825 | }
1826 | .icon-heart {
1827 | background-position: -96px 0;
1828 | }
1829 | .icon-star {
1830 | background-position: -120px 0;
1831 | }
1832 | .icon-star-empty {
1833 | background-position: -144px 0;
1834 | }
1835 | .icon-user {
1836 | background-position: -168px 0;
1837 | }
1838 | .icon-film {
1839 | background-position: -192px 0;
1840 | }
1841 | .icon-th-large {
1842 | background-position: -216px 0;
1843 | }
1844 | .icon-th {
1845 | background-position: -240px 0;
1846 | }
1847 | .icon-th-list {
1848 | background-position: -264px 0;
1849 | }
1850 | .icon-ok {
1851 | background-position: -288px 0;
1852 | }
1853 | .icon-remove {
1854 | background-position: -312px 0;
1855 | }
1856 | .icon-zoom-in {
1857 | background-position: -336px 0;
1858 | }
1859 | .icon-zoom-out {
1860 | background-position: -360px 0;
1861 | }
1862 | .icon-off {
1863 | background-position: -384px 0;
1864 | }
1865 | .icon-signal {
1866 | background-position: -408px 0;
1867 | }
1868 | .icon-cog {
1869 | background-position: -432px 0;
1870 | }
1871 | .icon-trash {
1872 | background-position: -456px 0;
1873 | }
1874 | .icon-home {
1875 | background-position: 0 -24px;
1876 | }
1877 | .icon-file {
1878 | background-position: -24px -24px;
1879 | }
1880 | .icon-time {
1881 | background-position: -48px -24px;
1882 | }
1883 | .icon-road {
1884 | background-position: -72px -24px;
1885 | }
1886 | .icon-download-alt {
1887 | background-position: -96px -24px;
1888 | }
1889 | .icon-download {
1890 | background-position: -120px -24px;
1891 | }
1892 | .icon-upload {
1893 | background-position: -144px -24px;
1894 | }
1895 | .icon-inbox {
1896 | background-position: -168px -24px;
1897 | }
1898 | .icon-play-circle {
1899 | background-position: -192px -24px;
1900 | }
1901 | .icon-repeat {
1902 | background-position: -216px -24px;
1903 | }
1904 | .icon-refresh {
1905 | background-position: -240px -24px;
1906 | }
1907 | .icon-list-alt {
1908 | background-position: -264px -24px;
1909 | }
1910 | .icon-lock {
1911 | background-position: -287px -24px;
1912 | }
1913 | .icon-flag {
1914 | background-position: -312px -24px;
1915 | }
1916 | .icon-headphones {
1917 | background-position: -336px -24px;
1918 | }
1919 | .icon-volume-off {
1920 | background-position: -360px -24px;
1921 | }
1922 | .icon-volume-down {
1923 | background-position: -384px -24px;
1924 | }
1925 | .icon-volume-up {
1926 | background-position: -408px -24px;
1927 | }
1928 | .icon-qrcode {
1929 | background-position: -432px -24px;
1930 | }
1931 | .icon-barcode {
1932 | background-position: -456px -24px;
1933 | }
1934 | .icon-tag {
1935 | background-position: 0 -48px;
1936 | }
1937 | .icon-tags {
1938 | background-position: -25px -48px;
1939 | }
1940 | .icon-book {
1941 | background-position: -48px -48px;
1942 | }
1943 | .icon-bookmark {
1944 | background-position: -72px -48px;
1945 | }
1946 | .icon-print {
1947 | background-position: -96px -48px;
1948 | }
1949 | .icon-camera {
1950 | background-position: -120px -48px;
1951 | }
1952 | .icon-font {
1953 | background-position: -144px -48px;
1954 | }
1955 | .icon-bold {
1956 | background-position: -167px -48px;
1957 | }
1958 | .icon-italic {
1959 | background-position: -192px -48px;
1960 | }
1961 | .icon-text-height {
1962 | background-position: -216px -48px;
1963 | }
1964 | .icon-text-width {
1965 | background-position: -240px -48px;
1966 | }
1967 | .icon-align-left {
1968 | background-position: -264px -48px;
1969 | }
1970 | .icon-align-center {
1971 | background-position: -288px -48px;
1972 | }
1973 | .icon-align-right {
1974 | background-position: -312px -48px;
1975 | }
1976 | .icon-align-justify {
1977 | background-position: -336px -48px;
1978 | }
1979 | .icon-list {
1980 | background-position: -360px -48px;
1981 | }
1982 | .icon-indent-left {
1983 | background-position: -384px -48px;
1984 | }
1985 | .icon-indent-right {
1986 | background-position: -408px -48px;
1987 | }
1988 | .icon-facetime-video {
1989 | background-position: -432px -48px;
1990 | }
1991 | .icon-picture {
1992 | background-position: -456px -48px;
1993 | }
1994 | .icon-pencil {
1995 | background-position: 0 -72px;
1996 | }
1997 | .icon-map-marker {
1998 | background-position: -24px -72px;
1999 | }
2000 | .icon-adjust {
2001 | background-position: -48px -72px;
2002 | }
2003 | .icon-tint {
2004 | background-position: -72px -72px;
2005 | }
2006 | .icon-edit {
2007 | background-position: -96px -72px;
2008 | }
2009 | .icon-share {
2010 | background-position: -120px -72px;
2011 | }
2012 | .icon-check {
2013 | background-position: -144px -72px;
2014 | }
2015 | .icon-move {
2016 | background-position: -168px -72px;
2017 | }
2018 | .icon-step-backward {
2019 | background-position: -192px -72px;
2020 | }
2021 | .icon-fast-backward {
2022 | background-position: -216px -72px;
2023 | }
2024 | .icon-backward {
2025 | background-position: -240px -72px;
2026 | }
2027 | .icon-play {
2028 | background-position: -264px -72px;
2029 | }
2030 | .icon-pause {
2031 | background-position: -288px -72px;
2032 | }
2033 | .icon-stop {
2034 | background-position: -312px -72px;
2035 | }
2036 | .icon-forward {
2037 | background-position: -336px -72px;
2038 | }
2039 | .icon-fast-forward {
2040 | background-position: -360px -72px;
2041 | }
2042 | .icon-step-forward {
2043 | background-position: -384px -72px;
2044 | }
2045 | .icon-eject {
2046 | background-position: -408px -72px;
2047 | }
2048 | .icon-chevron-left {
2049 | background-position: -432px -72px;
2050 | }
2051 | .icon-chevron-right {
2052 | background-position: -456px -72px;
2053 | }
2054 | .icon-plus-sign {
2055 | background-position: 0 -96px;
2056 | }
2057 | .icon-minus-sign {
2058 | background-position: -24px -96px;
2059 | }
2060 | .icon-remove-sign {
2061 | background-position: -48px -96px;
2062 | }
2063 | .icon-ok-sign {
2064 | background-position: -72px -96px;
2065 | }
2066 | .icon-question-sign {
2067 | background-position: -96px -96px;
2068 | }
2069 | .icon-info-sign {
2070 | background-position: -120px -96px;
2071 | }
2072 | .icon-screenshot {
2073 | background-position: -144px -96px;
2074 | }
2075 | .icon-remove-circle {
2076 | background-position: -168px -96px;
2077 | }
2078 | .icon-ok-circle {
2079 | background-position: -192px -96px;
2080 | }
2081 | .icon-ban-circle {
2082 | background-position: -216px -96px;
2083 | }
2084 | .icon-arrow-left {
2085 | background-position: -240px -96px;
2086 | }
2087 | .icon-arrow-right {
2088 | background-position: -264px -96px;
2089 | }
2090 | .icon-arrow-up {
2091 | background-position: -289px -96px;
2092 | }
2093 | .icon-arrow-down {
2094 | background-position: -312px -96px;
2095 | }
2096 | .icon-share-alt {
2097 | background-position: -336px -96px;
2098 | }
2099 | .icon-resize-full {
2100 | background-position: -360px -96px;
2101 | }
2102 | .icon-resize-small {
2103 | background-position: -384px -96px;
2104 | }
2105 | .icon-plus {
2106 | background-position: -408px -96px;
2107 | }
2108 | .icon-minus {
2109 | background-position: -433px -96px;
2110 | }
2111 | .icon-asterisk {
2112 | background-position: -456px -96px;
2113 | }
2114 | .icon-exclamation-sign {
2115 | background-position: 0 -120px;
2116 | }
2117 | .icon-gift {
2118 | background-position: -24px -120px;
2119 | }
2120 | .icon-leaf {
2121 | background-position: -48px -120px;
2122 | }
2123 | .icon-fire {
2124 | background-position: -72px -120px;
2125 | }
2126 | .icon-eye-open {
2127 | background-position: -96px -120px;
2128 | }
2129 | .icon-eye-close {
2130 | background-position: -120px -120px;
2131 | }
2132 | .icon-warning-sign {
2133 | background-position: -144px -120px;
2134 | }
2135 | .icon-plane {
2136 | background-position: -168px -120px;
2137 | }
2138 | .icon-calendar {
2139 | background-position: -192px -120px;
2140 | }
2141 | .icon-random {
2142 | background-position: -216px -120px;
2143 | }
2144 | .icon-comment {
2145 | background-position: -240px -120px;
2146 | }
2147 | .icon-magnet {
2148 | background-position: -264px -120px;
2149 | }
2150 | .icon-chevron-up {
2151 | background-position: -288px -120px;
2152 | }
2153 | .icon-chevron-down {
2154 | background-position: -313px -119px;
2155 | }
2156 | .icon-retweet {
2157 | background-position: -336px -120px;
2158 | }
2159 | .icon-shopping-cart {
2160 | background-position: -360px -120px;
2161 | }
2162 | .icon-folder-close {
2163 | background-position: -384px -120px;
2164 | }
2165 | .icon-folder-open {
2166 | background-position: -408px -120px;
2167 | }
2168 | .icon-resize-vertical {
2169 | background-position: -432px -119px;
2170 | }
2171 | .icon-resize-horizontal {
2172 | background-position: -456px -118px;
2173 | }
2174 | .btn-group {
2175 | position: relative;
2176 | *zoom: 1;
2177 | *margin-left: .3em;
2178 | }
2179 | .btn-group:before,
2180 | .btn-group:after {
2181 | display: table;
2182 | content: "";
2183 | }
2184 | .btn-group:after {
2185 | clear: both;
2186 | }
2187 | .btn-group:first-child {
2188 | *margin-left: 0;
2189 | }
2190 | .btn-group + .btn-group {
2191 | margin-left: 5px;
2192 | }
2193 | .btn-toolbar {
2194 | margin-top: 9px;
2195 | margin-bottom: 9px;
2196 | }
2197 | .btn-toolbar .btn-group {
2198 | display: inline-block;
2199 | *display: inline;
2200 | /* IE7 inline-block hack */
2201 |
2202 | *zoom: 1;
2203 | }
2204 | .btn-group .btn {
2205 | position: relative;
2206 | float: left;
2207 | margin-left: -1px;
2208 | -webkit-border-radius: 0;
2209 | -moz-border-radius: 0;
2210 | border-radius: 0;
2211 | }
2212 | .btn-group .btn:first-child {
2213 | margin-left: 0;
2214 | -webkit-border-top-left-radius: 4px;
2215 | -moz-border-radius-topleft: 4px;
2216 | border-top-left-radius: 4px;
2217 | -webkit-border-bottom-left-radius: 4px;
2218 | -moz-border-radius-bottomleft: 4px;
2219 | border-bottom-left-radius: 4px;
2220 | }
2221 | .btn-group .btn:last-child,
2222 | .btn-group .dropdown-toggle {
2223 | -webkit-border-top-right-radius: 4px;
2224 | -moz-border-radius-topright: 4px;
2225 | border-top-right-radius: 4px;
2226 | -webkit-border-bottom-right-radius: 4px;
2227 | -moz-border-radius-bottomright: 4px;
2228 | border-bottom-right-radius: 4px;
2229 | }
2230 | .btn-group .btn.large:first-child {
2231 | margin-left: 0;
2232 | -webkit-border-top-left-radius: 6px;
2233 | -moz-border-radius-topleft: 6px;
2234 | border-top-left-radius: 6px;
2235 | -webkit-border-bottom-left-radius: 6px;
2236 | -moz-border-radius-bottomleft: 6px;
2237 | border-bottom-left-radius: 6px;
2238 | }
2239 | .btn-group .btn.large:last-child,
2240 | .btn-group .large.dropdown-toggle {
2241 | -webkit-border-top-right-radius: 6px;
2242 | -moz-border-radius-topright: 6px;
2243 | border-top-right-radius: 6px;
2244 | -webkit-border-bottom-right-radius: 6px;
2245 | -moz-border-radius-bottomright: 6px;
2246 | border-bottom-right-radius: 6px;
2247 | }
2248 | .btn-group .btn:hover,
2249 | .btn-group .btn:focus,
2250 | .btn-group .btn:active,
2251 | .btn-group .btn.active {
2252 | z-index: 2;
2253 | }
2254 | .btn-group .dropdown-toggle:active,
2255 | .btn-group.open .dropdown-toggle {
2256 | outline: 0;
2257 | }
2258 | .btn-group .dropdown-toggle {
2259 | padding-left: 8px;
2260 | padding-right: 8px;
2261 | -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2262 | -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2263 | box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
2264 | *padding-top: 3px;
2265 | *padding-bottom: 3px;
2266 | }
2267 | .btn-group .btn-mini.dropdown-toggle {
2268 | padding-left: 5px;
2269 | padding-right: 5px;
2270 | *padding-top: 1px;
2271 | *padding-bottom: 1px;
2272 | }
2273 | .btn-group .btn-small.dropdown-toggle {
2274 | *padding-top: 4px;
2275 | *padding-bottom: 4px;
2276 | }
2277 | .btn-group .btn-large.dropdown-toggle {
2278 | padding-left: 12px;
2279 | padding-right: 12px;
2280 | }
2281 | .btn-group.open {
2282 | *z-index: 1000;
2283 | }
2284 | .btn-group.open .dropdown-menu {
2285 | display: block;
2286 | margin-top: 1px;
2287 | -webkit-border-radius: 5px;
2288 | -moz-border-radius: 5px;
2289 | border-radius: 5px;
2290 | }
2291 | .btn-group.open .dropdown-toggle {
2292 | background-image: none;
2293 | -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
2294 | -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
2295 | box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
2296 | }
2297 | .btn .caret {
2298 | margin-top: 7px;
2299 | margin-left: 0;
2300 | }
2301 | .btn:hover .caret,
2302 | .open.btn-group .caret {
2303 | opacity: 1;
2304 | filter: alpha(opacity=100);
2305 | }
2306 | .btn-mini .caret {
2307 | margin-top: 5px;
2308 | }
2309 | .btn-small .caret {
2310 | margin-top: 6px;
2311 | }
2312 | .btn-large .caret {
2313 | margin-top: 6px;
2314 | border-left: 5px solid transparent;
2315 | border-right: 5px solid transparent;
2316 | border-top: 5px solid #000000;
2317 | }
2318 | .btn-primary .caret,
2319 | .btn-warning .caret,
2320 | .btn-danger .caret,
2321 | .btn-info .caret,
2322 | .btn-success .caret,
2323 | .btn-inverse .caret {
2324 | border-top-color: #ffffff;
2325 | border-bottom-color: #ffffff;
2326 | opacity: 0.75;
2327 | filter: alpha(opacity=75);
2328 | }
2329 | .nav {
2330 | margin-left: 0;
2331 | margin-bottom: 18px;
2332 | list-style: none;
2333 | }
2334 | .nav > li > a {
2335 | display: block;
2336 | }
2337 | .nav > li > a:hover {
2338 | text-decoration: none;
2339 | background-color: #eeeeee;
2340 | }
2341 | .nav .nav-header {
2342 | display: block;
2343 | padding: 3px 15px;
2344 | font-size: 11px;
2345 | font-weight: bold;
2346 | line-height: 18px;
2347 | color: #999999;
2348 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
2349 | text-transform: uppercase;
2350 | }
2351 | .nav li + .nav-header {
2352 | margin-top: 9px;
2353 | }
2354 | .nav-list {
2355 | padding-left: 15px;
2356 | padding-right: 15px;
2357 | margin-bottom: 0;
2358 | }
2359 | .nav-list > li > a,
2360 | .nav-list .nav-header {
2361 | margin-left: -15px;
2362 | margin-right: -15px;
2363 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
2364 | }
2365 | .nav-list > li > a {
2366 | padding: 3px 15px;
2367 | }
2368 | .nav-list > .active > a,
2369 | .nav-list > .active > a:hover {
2370 | color: #ffffff;
2371 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
2372 | background-color: #0088cc;
2373 | }
2374 | .nav-list [class^="icon-"] {
2375 | margin-right: 2px;
2376 | }
2377 | .nav-list .divider {
2378 | height: 1px;
2379 | margin: 8px 1px;
2380 | overflow: hidden;
2381 | background-color: #e5e5e5;
2382 | border-bottom: 1px solid #ffffff;
2383 | *width: 100%;
2384 | *margin: -5px 0 5px;
2385 | }
2386 | .nav-tabs,
2387 | .nav-pills {
2388 | *zoom: 1;
2389 | }
2390 | .nav-tabs:before,
2391 | .nav-pills:before,
2392 | .nav-tabs:after,
2393 | .nav-pills:after {
2394 | display: table;
2395 | content: "";
2396 | }
2397 | .nav-tabs:after,
2398 | .nav-pills:after {
2399 | clear: both;
2400 | }
2401 | .nav-tabs > li,
2402 | .nav-pills > li {
2403 | float: left;
2404 | }
2405 | .nav-tabs > li > a,
2406 | .nav-pills > li > a {
2407 | padding-right: 12px;
2408 | padding-left: 12px;
2409 | margin-right: 2px;
2410 | line-height: 14px;
2411 | }
2412 | .nav-tabs {
2413 | border-bottom: 1px solid #ddd;
2414 | }
2415 | .nav-tabs > li {
2416 | margin-bottom: -1px;
2417 | }
2418 | .nav-tabs > li > a {
2419 | padding-top: 8px;
2420 | padding-bottom: 8px;
2421 | line-height: 18px;
2422 | border: 1px solid transparent;
2423 | -webkit-border-radius: 4px 4px 0 0;
2424 | -moz-border-radius: 4px 4px 0 0;
2425 | border-radius: 4px 4px 0 0;
2426 | }
2427 | .nav-tabs > li > a:hover {
2428 | border-color: #eeeeee #eeeeee #dddddd;
2429 | }
2430 | .nav-tabs > .active > a,
2431 | .nav-tabs > .active > a:hover {
2432 | color: #555555;
2433 | background-color: #ffffff;
2434 | border: 1px solid #ddd;
2435 | border-bottom-color: transparent;
2436 | cursor: default;
2437 | }
2438 | .nav-pills > li > a {
2439 | padding-top: 8px;
2440 | padding-bottom: 8px;
2441 | margin-top: 2px;
2442 | margin-bottom: 2px;
2443 | -webkit-border-radius: 5px;
2444 | -moz-border-radius: 5px;
2445 | border-radius: 5px;
2446 | }
2447 | .nav-pills > .active > a,
2448 | .nav-pills > .active > a:hover {
2449 | color: #ffffff;
2450 | background-color: #0088cc;
2451 | }
2452 | .nav-stacked > li {
2453 | float: none;
2454 | }
2455 | .nav-stacked > li > a {
2456 | margin-right: 0;
2457 | }
2458 | .nav-tabs.nav-stacked {
2459 | border-bottom: 0;
2460 | }
2461 | .nav-tabs.nav-stacked > li > a {
2462 | border: 1px solid #ddd;
2463 | -webkit-border-radius: 0;
2464 | -moz-border-radius: 0;
2465 | border-radius: 0;
2466 | }
2467 | .nav-tabs.nav-stacked > li:first-child > a {
2468 | -webkit-border-radius: 4px 4px 0 0;
2469 | -moz-border-radius: 4px 4px 0 0;
2470 | border-radius: 4px 4px 0 0;
2471 | }
2472 | .nav-tabs.nav-stacked > li:last-child > a {
2473 | -webkit-border-radius: 0 0 4px 4px;
2474 | -moz-border-radius: 0 0 4px 4px;
2475 | border-radius: 0 0 4px 4px;
2476 | }
2477 | .nav-tabs.nav-stacked > li > a:hover {
2478 | border-color: #ddd;
2479 | z-index: 2;
2480 | }
2481 | .nav-pills.nav-stacked > li > a {
2482 | margin-bottom: 3px;
2483 | }
2484 | .nav-pills.nav-stacked > li:last-child > a {
2485 | margin-bottom: 1px;
2486 | }
2487 | .nav-tabs .dropdown-menu,
2488 | .nav-pills .dropdown-menu {
2489 | margin-top: 1px;
2490 | border-width: 1px;
2491 | }
2492 | .nav-pills .dropdown-menu {
2493 | -webkit-border-radius: 4px;
2494 | -moz-border-radius: 4px;
2495 | border-radius: 4px;
2496 | }
2497 | .nav-tabs .dropdown-toggle .caret,
2498 | .nav-pills .dropdown-toggle .caret {
2499 | border-top-color: #0088cc;
2500 | border-bottom-color: #0088cc;
2501 | margin-top: 6px;
2502 | }
2503 | .nav-tabs .dropdown-toggle:hover .caret,
2504 | .nav-pills .dropdown-toggle:hover .caret {
2505 | border-top-color: #005580;
2506 | border-bottom-color: #005580;
2507 | }
2508 | .nav-tabs .active .dropdown-toggle .caret,
2509 | .nav-pills .active .dropdown-toggle .caret {
2510 | border-top-color: #333333;
2511 | border-bottom-color: #333333;
2512 | }
2513 | .nav > .dropdown.active > a:hover {
2514 | color: #000000;
2515 | cursor: pointer;
2516 | }
2517 | .nav-tabs .open .dropdown-toggle,
2518 | .nav-pills .open .dropdown-toggle,
2519 | .nav > .open.active > a:hover {
2520 | color: #ffffff;
2521 | background-color: #999999;
2522 | border-color: #999999;
2523 | }
2524 | .nav .open .caret,
2525 | .nav .open.active .caret,
2526 | .nav .open a:hover .caret {
2527 | border-top-color: #ffffff;
2528 | border-bottom-color: #ffffff;
2529 | opacity: 1;
2530 | filter: alpha(opacity=100);
2531 | }
2532 | .tabs-stacked .open > a:hover {
2533 | border-color: #999999;
2534 | }
2535 | .tabbable {
2536 | *zoom: 1;
2537 | }
2538 | .tabbable:before,
2539 | .tabbable:after {
2540 | display: table;
2541 | content: "";
2542 | }
2543 | .tabbable:after {
2544 | clear: both;
2545 | }
2546 | .tab-content {
2547 | display: table;
2548 | width: 100%;
2549 | }
2550 | .tabs-below .nav-tabs,
2551 | .tabs-right .nav-tabs,
2552 | .tabs-left .nav-tabs {
2553 | border-bottom: 0;
2554 | }
2555 | .tab-content > .tab-pane,
2556 | .pill-content > .pill-pane {
2557 | display: none;
2558 | }
2559 | .tab-content > .active,
2560 | .pill-content > .active {
2561 | display: block;
2562 | }
2563 | .tabs-below .nav-tabs {
2564 | border-top: 1px solid #ddd;
2565 | }
2566 | .tabs-below .nav-tabs > li {
2567 | margin-top: -1px;
2568 | margin-bottom: 0;
2569 | }
2570 | .tabs-below .nav-tabs > li > a {
2571 | -webkit-border-radius: 0 0 4px 4px;
2572 | -moz-border-radius: 0 0 4px 4px;
2573 | border-radius: 0 0 4px 4px;
2574 | }
2575 | .tabs-below .nav-tabs > li > a:hover {
2576 | border-bottom-color: transparent;
2577 | border-top-color: #ddd;
2578 | }
2579 | .tabs-below .nav-tabs .active > a,
2580 | .tabs-below .nav-tabs .active > a:hover {
2581 | border-color: transparent #ddd #ddd #ddd;
2582 | }
2583 | .tabs-left .nav-tabs > li,
2584 | .tabs-right .nav-tabs > li {
2585 | float: none;
2586 | }
2587 | .tabs-left .nav-tabs > li > a,
2588 | .tabs-right .nav-tabs > li > a {
2589 | min-width: 74px;
2590 | margin-right: 0;
2591 | margin-bottom: 3px;
2592 | }
2593 | .tabs-left .nav-tabs {
2594 | float: left;
2595 | margin-right: 19px;
2596 | border-right: 1px solid #ddd;
2597 | }
2598 | .tabs-left .nav-tabs > li > a {
2599 | margin-right: -1px;
2600 | -webkit-border-radius: 4px 0 0 4px;
2601 | -moz-border-radius: 4px 0 0 4px;
2602 | border-radius: 4px 0 0 4px;
2603 | }
2604 | .tabs-left .nav-tabs > li > a:hover {
2605 | border-color: #eeeeee #dddddd #eeeeee #eeeeee;
2606 | }
2607 | .tabs-left .nav-tabs .active > a,
2608 | .tabs-left .nav-tabs .active > a:hover {
2609 | border-color: #ddd transparent #ddd #ddd;
2610 | *border-right-color: #ffffff;
2611 | }
2612 | .tabs-right .nav-tabs {
2613 | float: right;
2614 | margin-left: 19px;
2615 | border-left: 1px solid #ddd;
2616 | }
2617 | .tabs-right .nav-tabs > li > a {
2618 | margin-left: -1px;
2619 | -webkit-border-radius: 0 4px 4px 0;
2620 | -moz-border-radius: 0 4px 4px 0;
2621 | border-radius: 0 4px 4px 0;
2622 | }
2623 | .tabs-right .nav-tabs > li > a:hover {
2624 | border-color: #eeeeee #eeeeee #eeeeee #dddddd;
2625 | }
2626 | .tabs-right .nav-tabs .active > a,
2627 | .tabs-right .nav-tabs .active > a:hover {
2628 | border-color: #ddd #ddd #ddd transparent;
2629 | *border-left-color: #ffffff;
2630 | }
2631 | .navbar {
2632 | *position: relative;
2633 | *z-index: 2;
2634 | overflow: visible;
2635 | margin-bottom: 18px;
2636 | }
2637 | .navbar-inner {
2638 | padding-left: 20px;
2639 | padding-right: 20px;
2640 | background-color: #2c2c2c;
2641 | background-image: -moz-linear-gradient(top, #333333, #222222);
2642 | background-image: -ms-linear-gradient(top, #333333, #222222);
2643 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
2644 | background-image: -webkit-linear-gradient(top, #333333, #222222);
2645 | background-image: -o-linear-gradient(top, #333333, #222222);
2646 | background-image: linear-gradient(top, #333333, #222222);
2647 | background-repeat: repeat-x;
2648 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
2649 | -webkit-border-radius: 4px;
2650 | -moz-border-radius: 4px;
2651 | border-radius: 4px;
2652 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
2653 | -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
2654 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
2655 | }
2656 | .navbar .container {
2657 | width: auto;
2658 | }
2659 | .btn-navbar {
2660 | display: none;
2661 | float: right;
2662 | padding: 7px 10px;
2663 | margin-left: 5px;
2664 | margin-right: 5px;
2665 | background-color: #2c2c2c;
2666 | background-image: -moz-linear-gradient(top, #333333, #222222);
2667 | background-image: -ms-linear-gradient(top, #333333, #222222);
2668 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
2669 | background-image: -webkit-linear-gradient(top, #333333, #222222);
2670 | background-image: -o-linear-gradient(top, #333333, #222222);
2671 | background-image: linear-gradient(top, #333333, #222222);
2672 | background-repeat: repeat-x;
2673 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
2674 | border-color: #222222 #222222 #000000;
2675 | border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
2676 | filter: progid:dximagetransform.microsoft.gradient(enabled=false);
2677 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
2678 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
2679 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
2680 | }
2681 | .btn-navbar:hover,
2682 | .btn-navbar:active,
2683 | .btn-navbar.active,
2684 | .btn-navbar.disabled,
2685 | .btn-navbar[disabled] {
2686 | background-color: #222222;
2687 | }
2688 | .btn-navbar:active,
2689 | .btn-navbar.active {
2690 | background-color: #080808 \9;
2691 | }
2692 | .btn-navbar .icon-bar {
2693 | display: block;
2694 | width: 18px;
2695 | height: 2px;
2696 | background-color: #f5f5f5;
2697 | -webkit-border-radius: 1px;
2698 | -moz-border-radius: 1px;
2699 | border-radius: 1px;
2700 | -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
2701 | -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
2702 | box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
2703 | }
2704 | .btn-navbar .icon-bar + .icon-bar {
2705 | margin-top: 3px;
2706 | }
2707 | .nav-collapse.collapse {
2708 | height: auto;
2709 | }
2710 | .navbar {
2711 | color: #999999;
2712 | }
2713 | .navbar .brand:hover {
2714 | text-decoration: none;
2715 | }
2716 | .navbar .brand {
2717 | float: left;
2718 | display: block;
2719 | padding: 8px 20px 12px;
2720 | margin-left: -20px;
2721 | font-size: 20px;
2722 | font-weight: 200;
2723 | line-height: 1;
2724 | color: #ffffff;
2725 | }
2726 | .navbar .navbar-text {
2727 | margin-bottom: 0;
2728 | line-height: 40px;
2729 | }
2730 | .navbar .btn,
2731 | .navbar .btn-group {
2732 | margin-top: 5px;
2733 | }
2734 | .navbar .btn-group .btn {
2735 | margin-top: 0;
2736 | }
2737 | .navbar-form {
2738 | margin-bottom: 0;
2739 | *zoom: 1;
2740 | }
2741 | .navbar-form:before,
2742 | .navbar-form:after {
2743 | display: table;
2744 | content: "";
2745 | }
2746 | .navbar-form:after {
2747 | clear: both;
2748 | }
2749 | .navbar-form input,
2750 | .navbar-form select,
2751 | .navbar-form .radio,
2752 | .navbar-form .checkbox {
2753 | margin-top: 5px;
2754 | }
2755 | .navbar-form input,
2756 | .navbar-form select {
2757 | display: inline-block;
2758 | margin-bottom: 0;
2759 | }
2760 | .navbar-form input[type="image"],
2761 | .navbar-form input[type="checkbox"],
2762 | .navbar-form input[type="radio"] {
2763 | margin-top: 3px;
2764 | }
2765 | .navbar-form .input-append,
2766 | .navbar-form .input-prepend {
2767 | margin-top: 6px;
2768 | white-space: nowrap;
2769 | }
2770 | .navbar-form .input-append input,
2771 | .navbar-form .input-prepend input {
2772 | margin-top: 0;
2773 | }
2774 | .navbar-search {
2775 | position: relative;
2776 | float: left;
2777 | margin-top: 6px;
2778 | margin-bottom: 0;
2779 | }
2780 | .navbar-search .search-query {
2781 | padding: 4px 9px;
2782 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
2783 | font-size: 13px;
2784 | font-weight: normal;
2785 | line-height: 1;
2786 | color: #ffffff;
2787 | background-color: #626262;
2788 | border: 1px solid #151515;
2789 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
2790 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
2791 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
2792 | -webkit-transition: none;
2793 | -moz-transition: none;
2794 | -ms-transition: none;
2795 | -o-transition: none;
2796 | transition: none;
2797 | }
2798 | .navbar-search .search-query:-moz-placeholder {
2799 | color: #cccccc;
2800 | }
2801 | .navbar-search .search-query::-webkit-input-placeholder {
2802 | color: #cccccc;
2803 | }
2804 | .navbar-search .search-query:focus,
2805 | .navbar-search .search-query.focused {
2806 | padding: 5px 10px;
2807 | color: #333333;
2808 | text-shadow: 0 1px 0 #ffffff;
2809 | background-color: #ffffff;
2810 | border: 0;
2811 | -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
2812 | -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
2813 | box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
2814 | outline: 0;
2815 | }
2816 | .navbar-fixed-top,
2817 | .navbar-fixed-bottom {
2818 | position: fixed;
2819 | right: 0;
2820 | left: 0;
2821 | z-index: 1030;
2822 | margin-bottom: 0;
2823 | }
2824 | .navbar-fixed-top .navbar-inner,
2825 | .navbar-fixed-bottom .navbar-inner {
2826 | padding-left: 0;
2827 | padding-right: 0;
2828 | -webkit-border-radius: 0;
2829 | -moz-border-radius: 0;
2830 | border-radius: 0;
2831 | }
2832 | .navbar-fixed-top .container,
2833 | .navbar-fixed-bottom .container {
2834 | width: 940px;
2835 | }
2836 | .navbar-fixed-top {
2837 | top: 0;
2838 | }
2839 | .navbar-fixed-bottom {
2840 | bottom: 0;
2841 | }
2842 | .navbar .nav {
2843 | position: relative;
2844 | left: 0;
2845 | display: block;
2846 | float: left;
2847 | margin: 0 10px 0 0;
2848 | }
2849 | .navbar .nav.pull-right {
2850 | float: right;
2851 | }
2852 | .navbar .nav > li {
2853 | display: block;
2854 | float: left;
2855 | }
2856 | .navbar .nav > li > a {
2857 | float: none;
2858 | padding: 10px 10px 11px;
2859 | line-height: 19px;
2860 | color: #999999;
2861 | text-decoration: none;
2862 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
2863 | }
2864 | .navbar .nav > li > a:hover {
2865 | background-color: transparent;
2866 | color: #ffffff;
2867 | text-decoration: none;
2868 | }
2869 | .navbar .nav .active > a,
2870 | .navbar .nav .active > a:hover {
2871 | color: #ffffff;
2872 | text-decoration: none;
2873 | background-color: #222222;
2874 | }
2875 | .navbar .divider-vertical {
2876 | height: 40px;
2877 | width: 1px;
2878 | margin: 0 9px;
2879 | overflow: hidden;
2880 | background-color: #222222;
2881 | border-right: 1px solid #333333;
2882 | }
2883 | .navbar .nav.pull-right {
2884 | margin-left: 10px;
2885 | margin-right: 0;
2886 | }
2887 | .navbar .dropdown-menu {
2888 | margin-top: 1px;
2889 | -webkit-border-radius: 4px;
2890 | -moz-border-radius: 4px;
2891 | border-radius: 4px;
2892 | }
2893 | .navbar .dropdown-menu:before {
2894 | content: '';
2895 | display: inline-block;
2896 | border-left: 7px solid transparent;
2897 | border-right: 7px solid transparent;
2898 | border-bottom: 7px solid #ccc;
2899 | border-bottom-color: rgba(0, 0, 0, 0.2);
2900 | position: absolute;
2901 | top: -7px;
2902 | left: 9px;
2903 | }
2904 | .navbar .dropdown-menu:after {
2905 | content: '';
2906 | display: inline-block;
2907 | border-left: 6px solid transparent;
2908 | border-right: 6px solid transparent;
2909 | border-bottom: 6px solid #ffffff;
2910 | position: absolute;
2911 | top: -6px;
2912 | left: 10px;
2913 | }
2914 | .navbar-fixed-bottom .dropdown-menu:before {
2915 | border-top: 7px solid #ccc;
2916 | border-top-color: rgba(0, 0, 0, 0.2);
2917 | border-bottom: 0;
2918 | bottom: -7px;
2919 | top: auto;
2920 | }
2921 | .navbar-fixed-bottom .dropdown-menu:after {
2922 | border-top: 6px solid #ffffff;
2923 | border-bottom: 0;
2924 | bottom: -6px;
2925 | top: auto;
2926 | }
2927 | .navbar .nav .dropdown-toggle .caret,
2928 | .navbar .nav .open.dropdown .caret {
2929 | border-top-color: #ffffff;
2930 | border-bottom-color: #ffffff;
2931 | }
2932 | .navbar .nav .active .caret {
2933 | opacity: 1;
2934 | filter: alpha(opacity=100);
2935 | }
2936 | .navbar .nav .open > .dropdown-toggle,
2937 | .navbar .nav .active > .dropdown-toggle,
2938 | .navbar .nav .open.active > .dropdown-toggle {
2939 | background-color: transparent;
2940 | }
2941 | .navbar .nav .active > .dropdown-toggle:hover {
2942 | color: #ffffff;
2943 | }
2944 | .navbar .nav.pull-right .dropdown-menu,
2945 | .navbar .nav .dropdown-menu.pull-right {
2946 | left: auto;
2947 | right: 0;
2948 | }
2949 | .navbar .nav.pull-right .dropdown-menu:before,
2950 | .navbar .nav .dropdown-menu.pull-right:before {
2951 | left: auto;
2952 | right: 12px;
2953 | }
2954 | .navbar .nav.pull-right .dropdown-menu:after,
2955 | .navbar .nav .dropdown-menu.pull-right:after {
2956 | left: auto;
2957 | right: 13px;
2958 | }
2959 | .breadcrumb {
2960 | padding: 7px 14px;
2961 | margin: 0 0 18px;
2962 | list-style: none;
2963 | background-color: #fbfbfb;
2964 | background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
2965 | background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
2966 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
2967 | background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
2968 | background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
2969 | background-image: linear-gradient(top, #ffffff, #f5f5f5);
2970 | background-repeat: repeat-x;
2971 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
2972 | border: 1px solid #ddd;
2973 | -webkit-border-radius: 3px;
2974 | -moz-border-radius: 3px;
2975 | border-radius: 3px;
2976 | -webkit-box-shadow: inset 0 1px 0 #ffffff;
2977 | -moz-box-shadow: inset 0 1px 0 #ffffff;
2978 | box-shadow: inset 0 1px 0 #ffffff;
2979 | }
2980 | .breadcrumb li {
2981 | display: inline-block;
2982 | *display: inline;
2983 | /* IE7 inline-block hack */
2984 |
2985 | *zoom: 1;
2986 | text-shadow: 0 1px 0 #ffffff;
2987 | }
2988 | .breadcrumb .divider {
2989 | padding: 0 5px;
2990 | color: #999999;
2991 | }
2992 | .breadcrumb .active a {
2993 | color: #333333;
2994 | }
2995 | .pagination {
2996 | height: 36px;
2997 | margin: 18px 0;
2998 | }
2999 | .pagination ul {
3000 | display: inline-block;
3001 | *display: inline;
3002 | /* IE7 inline-block hack */
3003 |
3004 | *zoom: 1;
3005 | margin-left: 0;
3006 | margin-bottom: 0;
3007 | -webkit-border-radius: 3px;
3008 | -moz-border-radius: 3px;
3009 | border-radius: 3px;
3010 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
3011 | -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
3012 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
3013 | }
3014 | .pagination li {
3015 | display: inline;
3016 | }
3017 | .pagination a {
3018 | float: left;
3019 | padding: 0 14px;
3020 | line-height: 34px;
3021 | text-decoration: none;
3022 | border: 1px solid #ddd;
3023 | border-left-width: 0;
3024 | }
3025 | .pagination a:hover,
3026 | .pagination .active a {
3027 | background-color: #f5f5f5;
3028 | }
3029 | .pagination .active a {
3030 | color: #999999;
3031 | cursor: default;
3032 | }
3033 | .pagination .disabled span,
3034 | .pagination .disabled a,
3035 | .pagination .disabled a:hover {
3036 | color: #999999;
3037 | background-color: transparent;
3038 | cursor: default;
3039 | }
3040 | .pagination li:first-child a {
3041 | border-left-width: 1px;
3042 | -webkit-border-radius: 3px 0 0 3px;
3043 | -moz-border-radius: 3px 0 0 3px;
3044 | border-radius: 3px 0 0 3px;
3045 | }
3046 | .pagination li:last-child a {
3047 | -webkit-border-radius: 0 3px 3px 0;
3048 | -moz-border-radius: 0 3px 3px 0;
3049 | border-radius: 0 3px 3px 0;
3050 | }
3051 | .pagination-centered {
3052 | text-align: center;
3053 | }
3054 | .pagination-right {
3055 | text-align: right;
3056 | }
3057 | .pager {
3058 | margin-left: 0;
3059 | margin-bottom: 18px;
3060 | list-style: none;
3061 | text-align: center;
3062 | *zoom: 1;
3063 | }
3064 | .pager:before,
3065 | .pager:after {
3066 | display: table;
3067 | content: "";
3068 | }
3069 | .pager:after {
3070 | clear: both;
3071 | }
3072 | .pager li {
3073 | display: inline;
3074 | }
3075 | .pager a {
3076 | display: inline-block;
3077 | padding: 5px 14px;
3078 | background-color: #fff;
3079 | border: 1px solid #ddd;
3080 | -webkit-border-radius: 15px;
3081 | -moz-border-radius: 15px;
3082 | border-radius: 15px;
3083 | }
3084 | .pager a:hover {
3085 | text-decoration: none;
3086 | background-color: #f5f5f5;
3087 | }
3088 | .pager .next a {
3089 | float: right;
3090 | }
3091 | .pager .previous a {
3092 | float: left;
3093 | }
3094 | .pager .disabled a,
3095 | .pager .disabled a:hover {
3096 | color: #999999;
3097 | background-color: #fff;
3098 | cursor: default;
3099 | }
3100 | .thumbnails {
3101 | margin-left: -20px;
3102 | list-style: none;
3103 | *zoom: 1;
3104 | }
3105 | .thumbnails:before,
3106 | .thumbnails:after {
3107 | display: table;
3108 | content: "";
3109 | }
3110 | .thumbnails:after {
3111 | clear: both;
3112 | }
3113 | .thumbnails > li {
3114 | float: left;
3115 | margin: 0 0 18px 20px;
3116 | }
3117 | .thumbnail {
3118 | display: block;
3119 | padding: 4px;
3120 | line-height: 1;
3121 | border: 1px solid #ddd;
3122 | -webkit-border-radius: 4px;
3123 | -moz-border-radius: 4px;
3124 | border-radius: 4px;
3125 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
3126 | -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
3127 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
3128 | }
3129 | a.thumbnail:hover {
3130 | border-color: #0088cc;
3131 | -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
3132 | -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
3133 | box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
3134 | }
3135 | .thumbnail > img {
3136 | display: block;
3137 | max-width: 100%;
3138 | margin-left: auto;
3139 | margin-right: auto;
3140 | }
3141 | .thumbnail .caption {
3142 | padding: 9px;
3143 | }
3144 | .alert {
3145 | padding: 8px 35px 8px 14px;
3146 | margin-bottom: 18px;
3147 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
3148 | background-color: #fcf8e3;
3149 | border: 1px solid #fbeed5;
3150 | -webkit-border-radius: 4px;
3151 | -moz-border-radius: 4px;
3152 | border-radius: 4px;
3153 | color: #c09853;
3154 | }
3155 | .alert-heading {
3156 | color: inherit;
3157 | }
3158 | .alert .close {
3159 | position: relative;
3160 | top: -2px;
3161 | right: -21px;
3162 | line-height: 18px;
3163 | }
3164 | .alert-success {
3165 | background-color: #dff0d8;
3166 | border-color: #d6e9c6;
3167 | color: #468847;
3168 | }
3169 | .alert-danger,
3170 | .alert-error {
3171 | background-color: #f2dede;
3172 | border-color: #eed3d7;
3173 | color: #b94a48;
3174 | }
3175 | .alert-info {
3176 | background-color: #d9edf7;
3177 | border-color: #bce8f1;
3178 | color: #3a87ad;
3179 | }
3180 | .alert-block {
3181 | padding-top: 14px;
3182 | padding-bottom: 14px;
3183 | }
3184 | .alert-block > p,
3185 | .alert-block > ul {
3186 | margin-bottom: 0;
3187 | }
3188 | .alert-block p + p {
3189 | margin-top: 5px;
3190 | }
3191 | @-webkit-keyframes progress-bar-stripes {
3192 | from {
3193 | background-position: 0 0;
3194 | }
3195 | to {
3196 | background-position: 40px 0;
3197 | }
3198 | }
3199 | @-moz-keyframes progress-bar-stripes {
3200 | from {
3201 | background-position: 0 0;
3202 | }
3203 | to {
3204 | background-position: 40px 0;
3205 | }
3206 | }
3207 | @-ms-keyframes progress-bar-stripes {
3208 | from {
3209 | background-position: 0 0;
3210 | }
3211 | to {
3212 | background-position: 40px 0;
3213 | }
3214 | }
3215 | @keyframes progress-bar-stripes {
3216 | from {
3217 | background-position: 0 0;
3218 | }
3219 | to {
3220 | background-position: 40px 0;
3221 | }
3222 | }
3223 | .progress {
3224 | overflow: hidden;
3225 | height: 18px;
3226 | margin-bottom: 18px;
3227 | background-color: #f7f7f7;
3228 | background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
3229 | background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
3230 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
3231 | background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
3232 | background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
3233 | background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
3234 | background-repeat: repeat-x;
3235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
3236 | -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
3237 | -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
3238 | box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
3239 | -webkit-border-radius: 4px;
3240 | -moz-border-radius: 4px;
3241 | border-radius: 4px;
3242 | }
3243 | .progress .bar {
3244 | width: 0%;
3245 | height: 18px;
3246 | color: #ffffff;
3247 | font-size: 12px;
3248 | text-align: center;
3249 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
3250 | background-color: #0e90d2;
3251 | background-image: -moz-linear-gradient(top, #149bdf, #0480be);
3252 | background-image: -ms-linear-gradient(top, #149bdf, #0480be);
3253 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
3254 | background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
3255 | background-image: -o-linear-gradient(top, #149bdf, #0480be);
3256 | background-image: linear-gradient(top, #149bdf, #0480be);
3257 | background-repeat: repeat-x;
3258 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
3259 | -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
3260 | -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
3261 | box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
3262 | -webkit-box-sizing: border-box;
3263 | -moz-box-sizing: border-box;
3264 | -ms-box-sizing: border-box;
3265 | box-sizing: border-box;
3266 | -webkit-transition: width 0.6s ease;
3267 | -moz-transition: width 0.6s ease;
3268 | -ms-transition: width 0.6s ease;
3269 | -o-transition: width 0.6s ease;
3270 | transition: width 0.6s ease;
3271 | }
3272 | .progress-striped .bar {
3273 | background-color: #149bdf;
3274 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
3275 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3276 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3277 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3278 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3279 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3280 | -webkit-background-size: 40px 40px;
3281 | -moz-background-size: 40px 40px;
3282 | -o-background-size: 40px 40px;
3283 | background-size: 40px 40px;
3284 | }
3285 | .progress.active .bar {
3286 | -webkit-animation: progress-bar-stripes 2s linear infinite;
3287 | -moz-animation: progress-bar-stripes 2s linear infinite;
3288 | animation: progress-bar-stripes 2s linear infinite;
3289 | }
3290 | .progress-danger .bar {
3291 | background-color: #dd514c;
3292 | background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
3293 | background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
3294 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
3295 | background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
3296 | background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
3297 | background-image: linear-gradient(top, #ee5f5b, #c43c35);
3298 | background-repeat: repeat-x;
3299 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
3300 | }
3301 | .progress-danger.progress-striped .bar {
3302 | background-color: #ee5f5b;
3303 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
3304 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3305 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3306 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3307 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3308 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3309 | }
3310 | .progress-success .bar {
3311 | background-color: #5eb95e;
3312 | background-image: -moz-linear-gradient(top, #62c462, #57a957);
3313 | background-image: -ms-linear-gradient(top, #62c462, #57a957);
3314 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
3315 | background-image: -webkit-linear-gradient(top, #62c462, #57a957);
3316 | background-image: -o-linear-gradient(top, #62c462, #57a957);
3317 | background-image: linear-gradient(top, #62c462, #57a957);
3318 | background-repeat: repeat-x;
3319 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
3320 | }
3321 | .progress-success.progress-striped .bar {
3322 | background-color: #62c462;
3323 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
3324 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3325 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3326 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3327 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3328 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3329 | }
3330 | .progress-info .bar {
3331 | background-color: #4bb1cf;
3332 | background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
3333 | background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
3334 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
3335 | background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
3336 | background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
3337 | background-image: linear-gradient(top, #5bc0de, #339bb9);
3338 | background-repeat: repeat-x;
3339 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
3340 | }
3341 | .progress-info.progress-striped .bar {
3342 | background-color: #5bc0de;
3343 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
3344 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3345 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3346 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3347 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3348 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3349 | }
3350 | .progress-warning .bar {
3351 | background-color: #faa732;
3352 | background-image: -moz-linear-gradient(top, #fbb450, #f89406);
3353 | background-image: -ms-linear-gradient(top, #fbb450, #f89406);
3354 | background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
3355 | background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
3356 | background-image: -o-linear-gradient(top, #fbb450, #f89406);
3357 | background-image: linear-gradient(top, #fbb450, #f89406);
3358 | background-repeat: repeat-x;
3359 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
3360 | }
3361 | .progress-warning.progress-striped .bar {
3362 | background-color: #fbb450;
3363 | background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
3364 | background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3365 | background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3366 | background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3367 | background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3368 | background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
3369 | }
3370 | .hero-unit {
3371 | padding: 60px;
3372 | margin-bottom: 30px;
3373 | background-color: #eeeeee;
3374 | -webkit-border-radius: 6px;
3375 | -moz-border-radius: 6px;
3376 | border-radius: 6px;
3377 | }
3378 | .hero-unit h1 {
3379 | margin-bottom: 0;
3380 | font-size: 60px;
3381 | line-height: 1;
3382 | color: inherit;
3383 | letter-spacing: -1px;
3384 | }
3385 | .hero-unit p {
3386 | font-size: 18px;
3387 | font-weight: 200;
3388 | line-height: 27px;
3389 | color: inherit;
3390 | }
3391 | .tooltip {
3392 | position: absolute;
3393 | z-index: 1020;
3394 | display: block;
3395 | visibility: visible;
3396 | padding: 5px;
3397 | font-size: 11px;
3398 | opacity: 0;
3399 | filter: alpha(opacity=0);
3400 | }
3401 | .tooltip.in {
3402 | opacity: 0.8;
3403 | filter: alpha(opacity=80);
3404 | }
3405 | .tooltip.top {
3406 | margin-top: -2px;
3407 | }
3408 | .tooltip.right {
3409 | margin-left: 2px;
3410 | }
3411 | .tooltip.bottom {
3412 | margin-top: 2px;
3413 | }
3414 | .tooltip.left {
3415 | margin-left: -2px;
3416 | }
3417 | .tooltip.top .tooltip-arrow {
3418 | bottom: 0;
3419 | left: 50%;
3420 | margin-left: -5px;
3421 | border-left: 5px solid transparent;
3422 | border-right: 5px solid transparent;
3423 | border-top: 5px solid #000000;
3424 | }
3425 | .tooltip.left .tooltip-arrow {
3426 | top: 50%;
3427 | right: 0;
3428 | margin-top: -5px;
3429 | border-top: 5px solid transparent;
3430 | border-bottom: 5px solid transparent;
3431 | border-left: 5px solid #000000;
3432 | }
3433 | .tooltip.bottom .tooltip-arrow {
3434 | top: 0;
3435 | left: 50%;
3436 | margin-left: -5px;
3437 | border-left: 5px solid transparent;
3438 | border-right: 5px solid transparent;
3439 | border-bottom: 5px solid #000000;
3440 | }
3441 | .tooltip.right .tooltip-arrow {
3442 | top: 50%;
3443 | left: 0;
3444 | margin-top: -5px;
3445 | border-top: 5px solid transparent;
3446 | border-bottom: 5px solid transparent;
3447 | border-right: 5px solid #000000;
3448 | }
3449 | .tooltip-inner {
3450 | max-width: 200px;
3451 | padding: 3px 8px;
3452 | color: #ffffff;
3453 | text-align: center;
3454 | text-decoration: none;
3455 | background-color: #000000;
3456 | -webkit-border-radius: 4px;
3457 | -moz-border-radius: 4px;
3458 | border-radius: 4px;
3459 | }
3460 | .tooltip-arrow {
3461 | position: absolute;
3462 | width: 0;
3463 | height: 0;
3464 | }
3465 | .popover {
3466 | position: absolute;
3467 | top: 0;
3468 | left: 0;
3469 | z-index: 1010;
3470 | display: none;
3471 | padding: 5px;
3472 | }
3473 | .popover.top {
3474 | margin-top: -5px;
3475 | }
3476 | .popover.right {
3477 | margin-left: 5px;
3478 | }
3479 | .popover.bottom {
3480 | margin-top: 5px;
3481 | }
3482 | .popover.left {
3483 | margin-left: -5px;
3484 | }
3485 | .popover.top .arrow {
3486 | bottom: 0;
3487 | left: 50%;
3488 | margin-left: -5px;
3489 | border-left: 5px solid transparent;
3490 | border-right: 5px solid transparent;
3491 | border-top: 5px solid #000000;
3492 | }
3493 | .popover.right .arrow {
3494 | top: 50%;
3495 | left: 0;
3496 | margin-top: -5px;
3497 | border-top: 5px solid transparent;
3498 | border-bottom: 5px solid transparent;
3499 | border-right: 5px solid #000000;
3500 | }
3501 | .popover.bottom .arrow {
3502 | top: 0;
3503 | left: 50%;
3504 | margin-left: -5px;
3505 | border-left: 5px solid transparent;
3506 | border-right: 5px solid transparent;
3507 | border-bottom: 5px solid #000000;
3508 | }
3509 | .popover.left .arrow {
3510 | top: 50%;
3511 | right: 0;
3512 | margin-top: -5px;
3513 | border-top: 5px solid transparent;
3514 | border-bottom: 5px solid transparent;
3515 | border-left: 5px solid #000000;
3516 | }
3517 | .popover .arrow {
3518 | position: absolute;
3519 | width: 0;
3520 | height: 0;
3521 | }
3522 | .popover-inner {
3523 | padding: 3px;
3524 | width: 280px;
3525 | overflow: hidden;
3526 | background: #000000;
3527 | background: rgba(0, 0, 0, 0.8);
3528 | -webkit-border-radius: 6px;
3529 | -moz-border-radius: 6px;
3530 | border-radius: 6px;
3531 | -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3532 | -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3533 | box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3534 | }
3535 | .popover-title {
3536 | padding: 9px 15px;
3537 | line-height: 1;
3538 | background-color: #f5f5f5;
3539 | border-bottom: 1px solid #eee;
3540 | -webkit-border-radius: 3px 3px 0 0;
3541 | -moz-border-radius: 3px 3px 0 0;
3542 | border-radius: 3px 3px 0 0;
3543 | }
3544 | .popover-content {
3545 | padding: 14px;
3546 | background-color: #ffffff;
3547 | -webkit-border-radius: 0 0 3px 3px;
3548 | -moz-border-radius: 0 0 3px 3px;
3549 | border-radius: 0 0 3px 3px;
3550 | -webkit-background-clip: padding-box;
3551 | -moz-background-clip: padding-box;
3552 | background-clip: padding-box;
3553 | }
3554 | .popover-content p,
3555 | .popover-content ul,
3556 | .popover-content ol {
3557 | margin-bottom: 0;
3558 | }
3559 | .modal-open .dropdown-menu {
3560 | z-index: 2050;
3561 | }
3562 | .modal-open .dropdown.open {
3563 | *z-index: 2050;
3564 | }
3565 | .modal-open .popover {
3566 | z-index: 2060;
3567 | }
3568 | .modal-open .tooltip {
3569 | z-index: 2070;
3570 | }
3571 | .modal-backdrop {
3572 | position: fixed;
3573 | top: 0;
3574 | right: 0;
3575 | bottom: 0;
3576 | left: 0;
3577 | z-index: 1040;
3578 | background-color: #000000;
3579 | }
3580 | .modal-backdrop.fade {
3581 | opacity: 0;
3582 | }
3583 | .modal-backdrop,
3584 | .modal-backdrop.fade.in {
3585 | opacity: 0.8;
3586 | filter: alpha(opacity=80);
3587 | }
3588 | .modal {
3589 | position: fixed;
3590 | top: 50%;
3591 | left: 50%;
3592 | z-index: 1050;
3593 | overflow: auto;
3594 | width: 560px;
3595 | margin: -250px 0 0 -280px;
3596 | background-color: #ffffff;
3597 | border: 1px solid #999;
3598 | border: 1px solid rgba(0, 0, 0, 0.3);
3599 | *border: 1px solid #999;
3600 | /* IE6-7 */
3601 |
3602 | -webkit-border-radius: 6px;
3603 | -moz-border-radius: 6px;
3604 | border-radius: 6px;
3605 | -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3606 | -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3607 | box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
3608 | -webkit-background-clip: padding-box;
3609 | -moz-background-clip: padding-box;
3610 | background-clip: padding-box;
3611 | }
3612 | .modal.fade {
3613 | -webkit-transition: opacity .3s linear, top .3s ease-out;
3614 | -moz-transition: opacity .3s linear, top .3s ease-out;
3615 | -ms-transition: opacity .3s linear, top .3s ease-out;
3616 | -o-transition: opacity .3s linear, top .3s ease-out;
3617 | transition: opacity .3s linear, top .3s ease-out;
3618 | top: -25%;
3619 | }
3620 | .modal.fade.in {
3621 | top: 50%;
3622 | }
3623 | .modal-header {
3624 | padding: 9px 15px;
3625 | border-bottom: 1px solid #eee;
3626 | }
3627 | .modal-header .close {
3628 | margin-top: 2px;
3629 | }
3630 | .modal-body {
3631 | overflow-y: auto;
3632 | max-height: 400px;
3633 | padding: 15px;
3634 | }
3635 | .modal-form {
3636 | margin-bottom: 0;
3637 | }
3638 | .modal-footer {
3639 | padding: 14px 15px 15px;
3640 | margin-bottom: 0;
3641 | text-align: right;
3642 | background-color: #f5f5f5;
3643 | border-top: 1px solid #ddd;
3644 | -webkit-border-radius: 0 0 6px 6px;
3645 | -moz-border-radius: 0 0 6px 6px;
3646 | border-radius: 0 0 6px 6px;
3647 | -webkit-box-shadow: inset 0 1px 0 #ffffff;
3648 | -moz-box-shadow: inset 0 1px 0 #ffffff;
3649 | box-shadow: inset 0 1px 0 #ffffff;
3650 | *zoom: 1;
3651 | }
3652 | .modal-footer:before,
3653 | .modal-footer:after {
3654 | display: table;
3655 | content: "";
3656 | }
3657 | .modal-footer:after {
3658 | clear: both;
3659 | }
3660 | .modal-footer .btn + .btn {
3661 | margin-left: 5px;
3662 | margin-bottom: 0;
3663 | }
3664 | .modal-footer .btn-group .btn + .btn {
3665 | margin-left: -1px;
3666 | }
3667 | .dropdown {
3668 | position: relative;
3669 | }
3670 | .dropdown-toggle {
3671 | *margin-bottom: -3px;
3672 | }
3673 | .dropdown-toggle:active,
3674 | .open .dropdown-toggle {
3675 | outline: 0;
3676 | }
3677 | .caret {
3678 | display: inline-block;
3679 | width: 0;
3680 | height: 0;
3681 | vertical-align: top;
3682 | border-left: 4px solid transparent;
3683 | border-right: 4px solid transparent;
3684 | border-top: 4px solid #000000;
3685 | opacity: 0.3;
3686 | filter: alpha(opacity=30);
3687 | content: "";
3688 | }
3689 | .dropdown .caret {
3690 | margin-top: 8px;
3691 | margin-left: 2px;
3692 | }
3693 | .dropdown:hover .caret,
3694 | .open.dropdown .caret {
3695 | opacity: 1;
3696 | filter: alpha(opacity=100);
3697 | }
3698 | .dropdown-menu {
3699 | position: absolute;
3700 | top: 100%;
3701 | left: 0;
3702 | z-index: 1000;
3703 | float: left;
3704 | display: none;
3705 | min-width: 160px;
3706 | padding: 4px 0;
3707 | margin: 0;
3708 | list-style: none;
3709 | background-color: #ffffff;
3710 | border-color: #ccc;
3711 | border-color: rgba(0, 0, 0, 0.2);
3712 | border-style: solid;
3713 | border-width: 1px;
3714 | -webkit-border-radius: 0 0 5px 5px;
3715 | -moz-border-radius: 0 0 5px 5px;
3716 | border-radius: 0 0 5px 5px;
3717 | -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
3718 | -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
3719 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
3720 | -webkit-background-clip: padding-box;
3721 | -moz-background-clip: padding;
3722 | background-clip: padding-box;
3723 | *border-right-width: 2px;
3724 | *border-bottom-width: 2px;
3725 | }
3726 | .dropdown-menu.pull-right {
3727 | right: 0;
3728 | left: auto;
3729 | }
3730 | .dropdown-menu .divider {
3731 | height: 1px;
3732 | margin: 8px 1px;
3733 | overflow: hidden;
3734 | background-color: #e5e5e5;
3735 | border-bottom: 1px solid #ffffff;
3736 | *width: 100%;
3737 | *margin: -5px 0 5px;
3738 | }
3739 | .dropdown-menu a {
3740 | display: block;
3741 | padding: 3px 15px;
3742 | clear: both;
3743 | font-weight: normal;
3744 | line-height: 18px;
3745 | color: #333333;
3746 | white-space: nowrap;
3747 | }
3748 | .dropdown-menu li > a:hover,
3749 | .dropdown-menu .active > a,
3750 | .dropdown-menu .active > a:hover {
3751 | color: #ffffff;
3752 | text-decoration: none;
3753 | background-color: #0088cc;
3754 | }
3755 | .dropdown.open {
3756 | *z-index: 1000;
3757 | }
3758 | .dropdown.open .dropdown-toggle {
3759 | color: #ffffff;
3760 | background: #ccc;
3761 | background: rgba(0, 0, 0, 0.3);
3762 | }
3763 | .dropdown.open .dropdown-menu {
3764 | display: block;
3765 | }
3766 | .pull-right .dropdown-menu {
3767 | left: auto;
3768 | right: 0;
3769 | }
3770 | .dropup .caret,
3771 | .navbar-fixed-bottom .dropdown .caret {
3772 | border-top: 0;
3773 | border-bottom: 4px solid #000000;
3774 | content: "\2191";
3775 | }
3776 | .dropup .dropdown-menu,
3777 | .navbar-fixed-bottom .dropdown .dropdown-menu {
3778 | top: auto;
3779 | bottom: 100%;
3780 | margin-bottom: 1px;
3781 | }
3782 | .typeahead {
3783 | margin-top: 2px;
3784 | -webkit-border-radius: 4px;
3785 | -moz-border-radius: 4px;
3786 | border-radius: 4px;
3787 | }
3788 | .accordion {
3789 | margin-bottom: 18px;
3790 | }
3791 | .accordion-group {
3792 | margin-bottom: 2px;
3793 | border: 1px solid #e5e5e5;
3794 | -webkit-border-radius: 4px;
3795 | -moz-border-radius: 4px;
3796 | border-radius: 4px;
3797 | }
3798 | .accordion-heading {
3799 | border-bottom: 0;
3800 | }
3801 | .accordion-heading .accordion-toggle {
3802 | display: block;
3803 | padding: 8px 15px;
3804 | }
3805 | .accordion-inner {
3806 | padding: 9px 15px;
3807 | border-top: 1px solid #e5e5e5;
3808 | }
3809 | .carousel {
3810 | position: relative;
3811 | margin-bottom: 18px;
3812 | line-height: 1;
3813 | }
3814 | .carousel-inner {
3815 | overflow: hidden;
3816 | width: 100%;
3817 | position: relative;
3818 | }
3819 | .carousel .item {
3820 | display: none;
3821 | position: relative;
3822 | -webkit-transition: 0.6s ease-in-out left;
3823 | -moz-transition: 0.6s ease-in-out left;
3824 | -ms-transition: 0.6s ease-in-out left;
3825 | -o-transition: 0.6s ease-in-out left;
3826 | transition: 0.6s ease-in-out left;
3827 | }
3828 | .carousel .item > img {
3829 | display: block;
3830 | line-height: 1;
3831 | }
3832 | .carousel .active,
3833 | .carousel .next,
3834 | .carousel .prev {
3835 | display: block;
3836 | }
3837 | .carousel .active {
3838 | left: 0;
3839 | }
3840 | .carousel .next,
3841 | .carousel .prev {
3842 | position: absolute;
3843 | top: 0;
3844 | width: 100%;
3845 | }
3846 | .carousel .next {
3847 | left: 100%;
3848 | }
3849 | .carousel .prev {
3850 | left: -100%;
3851 | }
3852 | .carousel .next.left,
3853 | .carousel .prev.right {
3854 | left: 0;
3855 | }
3856 | .carousel .active.left {
3857 | left: -100%;
3858 | }
3859 | .carousel .active.right {
3860 | left: 100%;
3861 | }
3862 | .carousel-control {
3863 | position: absolute;
3864 | top: 40%;
3865 | left: 15px;
3866 | width: 40px;
3867 | height: 40px;
3868 | margin-top: -20px;
3869 | font-size: 60px;
3870 | font-weight: 100;
3871 | line-height: 30px;
3872 | color: #ffffff;
3873 | text-align: center;
3874 | background: #222222;
3875 | border: 3px solid #ffffff;
3876 | -webkit-border-radius: 23px;
3877 | -moz-border-radius: 23px;
3878 | border-radius: 23px;
3879 | opacity: 0.5;
3880 | filter: alpha(opacity=50);
3881 | }
3882 | .carousel-control.right {
3883 | left: auto;
3884 | right: 15px;
3885 | }
3886 | .carousel-control:hover {
3887 | color: #ffffff;
3888 | text-decoration: none;
3889 | opacity: 0.9;
3890 | filter: alpha(opacity=90);
3891 | }
3892 | .carousel-caption {
3893 | position: absolute;
3894 | left: 0;
3895 | right: 0;
3896 | bottom: 0;
3897 | padding: 10px 15px 5px;
3898 | background: #333333;
3899 | background: rgba(0, 0, 0, 0.75);
3900 | }
3901 | .carousel-caption h4,
3902 | .carousel-caption p {
3903 | color: #ffffff;
3904 | }
3905 | .well {
3906 | min-height: 20px;
3907 | padding: 19px;
3908 | margin-bottom: 20px;
3909 | background-color: #f5f5f5;
3910 | border: 1px solid #eee;
3911 | border: 1px solid rgba(0, 0, 0, 0.05);
3912 | -webkit-border-radius: 4px;
3913 | -moz-border-radius: 4px;
3914 | border-radius: 4px;
3915 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
3916 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
3917 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
3918 | }
3919 | .well blockquote {
3920 | border-color: #ddd;
3921 | border-color: rgba(0, 0, 0, 0.15);
3922 | }
3923 | .well-large {
3924 | padding: 24px;
3925 | -webkit-border-radius: 6px;
3926 | -moz-border-radius: 6px;
3927 | border-radius: 6px;
3928 | }
3929 | .well-small {
3930 | padding: 9px;
3931 | -webkit-border-radius: 3px;
3932 | -moz-border-radius: 3px;
3933 | border-radius: 3px;
3934 | }
3935 | .close {
3936 | float: right;
3937 | font-size: 20px;
3938 | font-weight: bold;
3939 | line-height: 18px;
3940 | color: #000000;
3941 | text-shadow: 0 1px 0 #ffffff;
3942 | opacity: 0.2;
3943 | filter: alpha(opacity=20);
3944 | }
3945 | .close:hover {
3946 | color: #000000;
3947 | text-decoration: none;
3948 | opacity: 0.4;
3949 | filter: alpha(opacity=40);
3950 | cursor: pointer;
3951 | }
3952 | .pull-right {
3953 | float: right;
3954 | }
3955 | .pull-left {
3956 | float: left;
3957 | }
3958 | .hide {
3959 | display: none;
3960 | }
3961 | .show {
3962 | display: block;
3963 | }
3964 | .invisible {
3965 | visibility: hidden;
3966 | }
3967 | .fade {
3968 | -webkit-transition: opacity 0.15s linear;
3969 | -moz-transition: opacity 0.15s linear;
3970 | -ms-transition: opacity 0.15s linear;
3971 | -o-transition: opacity 0.15s linear;
3972 | transition: opacity 0.15s linear;
3973 | opacity: 0;
3974 | }
3975 | .fade.in {
3976 | opacity: 1;
3977 | }
3978 | .collapse {
3979 | -webkit-transition: height 0.35s ease;
3980 | -moz-transition: height 0.35s ease;
3981 | -ms-transition: height 0.35s ease;
3982 | -o-transition: height 0.35s ease;
3983 | transition: height 0.35s ease;
3984 | position: relative;
3985 | overflow: hidden;
3986 | height: 0;
3987 | }
3988 | .collapse.in {
3989 | height: auto;
3990 | }
3991 | /*!
3992 | * Bootstrap Responsive v2.0.2
3993 | *
3994 | * Copyright 2012 Twitter, Inc
3995 | * Licensed under the Apache License v2.0
3996 | * http://www.apache.org/licenses/LICENSE-2.0
3997 | *
3998 | * Designed and built with all the love in the world @twitter by @mdo and @fat.
3999 | */
4000 | .hidden {
4001 | display: none;
4002 | visibility: hidden;
4003 | }
4004 | .visible-phone {
4005 | display: none;
4006 | }
4007 | .visible-tablet {
4008 | display: none;
4009 | }
4010 | .visible-desktop {
4011 | display: block;
4012 | }
4013 | .hidden-phone {
4014 | display: block;
4015 | }
4016 | .hidden-tablet {
4017 | display: block;
4018 | }
4019 | .hidden-desktop {
4020 | display: none;
4021 | }
4022 | @media (max-width: 767px) {
4023 | .visible-phone {
4024 | display: block;
4025 | }
4026 | .hidden-phone {
4027 | display: none;
4028 | }
4029 | .hidden-desktop {
4030 | display: block;
4031 | }
4032 | .visible-desktop {
4033 | display: none;
4034 | }
4035 | }
4036 | @media (min-width: 768px) and (max-width: 979px) {
4037 | .visible-tablet {
4038 | display: block;
4039 | }
4040 | .hidden-tablet {
4041 | display: none;
4042 | }
4043 | .hidden-desktop {
4044 | display: block;
4045 | }
4046 | .visible-desktop {
4047 | display: none;
4048 | }
4049 | }
4050 | @media (max-width: 480px) {
4051 | .nav-collapse {
4052 | -webkit-transform: translate3d(0, 0, 0);
4053 | }
4054 | .page-header h1 small {
4055 | display: block;
4056 | line-height: 18px;
4057 | }
4058 | input[type="checkbox"],
4059 | input[type="radio"] {
4060 | border: 1px solid #ccc;
4061 | }
4062 | .form-horizontal .control-group > label {
4063 | float: none;
4064 | width: auto;
4065 | padding-top: 0;
4066 | text-align: left;
4067 | }
4068 | .form-horizontal .controls {
4069 | margin-left: 0;
4070 | }
4071 | .form-horizontal .control-list {
4072 | padding-top: 0;
4073 | }
4074 | .form-horizontal .form-actions {
4075 | padding-left: 10px;
4076 | padding-right: 10px;
4077 | }
4078 | .modal {
4079 | position: absolute;
4080 | top: 10px;
4081 | left: 10px;
4082 | right: 10px;
4083 | width: auto;
4084 | margin: 0;
4085 | }
4086 | .modal.fade.in {
4087 | top: auto;
4088 | }
4089 | .modal-header .close {
4090 | padding: 10px;
4091 | margin: -10px;
4092 | }
4093 | .carousel-caption {
4094 | position: static;
4095 | }
4096 | }
4097 | @media (max-width: 767px) {
4098 | body {
4099 | padding-left: 20px;
4100 | padding-right: 20px;
4101 | }
4102 | .navbar-fixed-top {
4103 | margin-left: -20px;
4104 | margin-right: -20px;
4105 | }
4106 | .container {
4107 | width: auto;
4108 | }
4109 | .row-fluid {
4110 | width: 100%;
4111 | }
4112 | .row {
4113 | margin-left: 0;
4114 | }
4115 | .row > [class*="span"],
4116 | .row-fluid > [class*="span"] {
4117 | float: none;
4118 | display: block;
4119 | width: auto;
4120 | margin: 0;
4121 | }
4122 | .thumbnails [class*="span"] {
4123 | width: auto;
4124 | }
4125 | input[class*="span"],
4126 | select[class*="span"],
4127 | textarea[class*="span"],
4128 | .uneditable-input {
4129 | display: block;
4130 | width: 100%;
4131 | min-height: 28px;
4132 | /* Make inputs at least the height of their button counterpart */
4133 |
4134 | /* Makes inputs behave like true block-level elements */
4135 |
4136 | -webkit-box-sizing: border-box;
4137 | -moz-box-sizing: border-box;
4138 | -ms-box-sizing: border-box;
4139 | box-sizing: border-box;
4140 | }
4141 | .input-prepend input[class*="span"],
4142 | .input-append input[class*="span"] {
4143 | width: auto;
4144 | }
4145 | }
4146 | @media (min-width: 768px) and (max-width: 979px) {
4147 | .row {
4148 | margin-left: -20px;
4149 | *zoom: 1;
4150 | }
4151 | .row:before,
4152 | .row:after {
4153 | display: table;
4154 | content: "";
4155 | }
4156 | .row:after {
4157 | clear: both;
4158 | }
4159 | [class*="span"] {
4160 | float: left;
4161 | margin-left: 20px;
4162 | }
4163 | .container,
4164 | .navbar-fixed-top .container,
4165 | .navbar-fixed-bottom .container {
4166 | width: 724px;
4167 | }
4168 | .span12 {
4169 | width: 724px;
4170 | }
4171 | .span11 {
4172 | width: 662px;
4173 | }
4174 | .span10 {
4175 | width: 600px;
4176 | }
4177 | .span9 {
4178 | width: 538px;
4179 | }
4180 | .span8 {
4181 | width: 476px;
4182 | }
4183 | .span7 {
4184 | width: 414px;
4185 | }
4186 | .span6 {
4187 | width: 352px;
4188 | }
4189 | .span5 {
4190 | width: 290px;
4191 | }
4192 | .span4 {
4193 | width: 228px;
4194 | }
4195 | .span3 {
4196 | width: 166px;
4197 | }
4198 | .span2 {
4199 | width: 104px;
4200 | }
4201 | .span1 {
4202 | width: 42px;
4203 | }
4204 | .offset12 {
4205 | margin-left: 764px;
4206 | }
4207 | .offset11 {
4208 | margin-left: 702px;
4209 | }
4210 | .offset10 {
4211 | margin-left: 640px;
4212 | }
4213 | .offset9 {
4214 | margin-left: 578px;
4215 | }
4216 | .offset8 {
4217 | margin-left: 516px;
4218 | }
4219 | .offset7 {
4220 | margin-left: 454px;
4221 | }
4222 | .offset6 {
4223 | margin-left: 392px;
4224 | }
4225 | .offset5 {
4226 | margin-left: 330px;
4227 | }
4228 | .offset4 {
4229 | margin-left: 268px;
4230 | }
4231 | .offset3 {
4232 | margin-left: 206px;
4233 | }
4234 | .offset2 {
4235 | margin-left: 144px;
4236 | }
4237 | .offset1 {
4238 | margin-left: 82px;
4239 | }
4240 | .row-fluid {
4241 | width: 100%;
4242 | *zoom: 1;
4243 | }
4244 | .row-fluid:before,
4245 | .row-fluid:after {
4246 | display: table;
4247 | content: "";
4248 | }
4249 | .row-fluid:after {
4250 | clear: both;
4251 | }
4252 | .row-fluid > [class*="span"] {
4253 | float: left;
4254 | margin-left: 2.762430939%;
4255 | }
4256 | .row-fluid > [class*="span"]:first-child {
4257 | margin-left: 0;
4258 | }
4259 | .row-fluid > .span12 {
4260 | width: 99.999999993%;
4261 | }
4262 | .row-fluid > .span11 {
4263 | width: 91.436464082%;
4264 | }
4265 | .row-fluid > .span10 {
4266 | width: 82.87292817100001%;
4267 | }
4268 | .row-fluid > .span9 {
4269 | width: 74.30939226%;
4270 | }
4271 | .row-fluid > .span8 {
4272 | width: 65.74585634900001%;
4273 | }
4274 | .row-fluid > .span7 {
4275 | width: 57.182320438000005%;
4276 | }
4277 | .row-fluid > .span6 {
4278 | width: 48.618784527%;
4279 | }
4280 | .row-fluid > .span5 {
4281 | width: 40.055248616%;
4282 | }
4283 | .row-fluid > .span4 {
4284 | width: 31.491712705%;
4285 | }
4286 | .row-fluid > .span3 {
4287 | width: 22.928176794%;
4288 | }
4289 | .row-fluid > .span2 {
4290 | width: 14.364640883%;
4291 | }
4292 | .row-fluid > .span1 {
4293 | width: 5.801104972%;
4294 | }
4295 | input,
4296 | textarea,
4297 | .uneditable-input {
4298 | margin-left: 0;
4299 | }
4300 | input.span12, textarea.span12, .uneditable-input.span12 {
4301 | width: 714px;
4302 | }
4303 | input.span11, textarea.span11, .uneditable-input.span11 {
4304 | width: 652px;
4305 | }
4306 | input.span10, textarea.span10, .uneditable-input.span10 {
4307 | width: 590px;
4308 | }
4309 | input.span9, textarea.span9, .uneditable-input.span9 {
4310 | width: 528px;
4311 | }
4312 | input.span8, textarea.span8, .uneditable-input.span8 {
4313 | width: 466px;
4314 | }
4315 | input.span7, textarea.span7, .uneditable-input.span7 {
4316 | width: 404px;
4317 | }
4318 | input.span6, textarea.span6, .uneditable-input.span6 {
4319 | width: 342px;
4320 | }
4321 | input.span5, textarea.span5, .uneditable-input.span5 {
4322 | width: 280px;
4323 | }
4324 | input.span4, textarea.span4, .uneditable-input.span4 {
4325 | width: 218px;
4326 | }
4327 | input.span3, textarea.span3, .uneditable-input.span3 {
4328 | width: 156px;
4329 | }
4330 | input.span2, textarea.span2, .uneditable-input.span2 {
4331 | width: 94px;
4332 | }
4333 | input.span1, textarea.span1, .uneditable-input.span1 {
4334 | width: 32px;
4335 | }
4336 | }
4337 | @media (max-width: 979px) {
4338 | body {
4339 | padding-top: 0;
4340 | }
4341 | .navbar-fixed-top {
4342 | position: static;
4343 | margin-bottom: 18px;
4344 | }
4345 | .navbar-fixed-top .navbar-inner {
4346 | padding: 5px;
4347 | }
4348 | .navbar .container {
4349 | width: auto;
4350 | padding: 0;
4351 | }
4352 | .navbar .brand {
4353 | padding-left: 10px;
4354 | padding-right: 10px;
4355 | margin: 0 0 0 -5px;
4356 | }
4357 | .navbar .nav-collapse {
4358 | clear: left;
4359 | }
4360 | .navbar .nav {
4361 | float: none;
4362 | margin: 0 0 9px;
4363 | }
4364 | .navbar .nav > li {
4365 | float: none;
4366 | }
4367 | .navbar .nav > li > a {
4368 | margin-bottom: 2px;
4369 | }
4370 | .navbar .nav > .divider-vertical {
4371 | display: none;
4372 | }
4373 | .navbar .nav .nav-header {
4374 | color: #999999;
4375 | text-shadow: none;
4376 | }
4377 | .navbar .nav > li > a,
4378 | .navbar .dropdown-menu a {
4379 | padding: 6px 15px;
4380 | font-weight: bold;
4381 | color: #999999;
4382 | -webkit-border-radius: 3px;
4383 | -moz-border-radius: 3px;
4384 | border-radius: 3px;
4385 | }
4386 | .navbar .dropdown-menu li + li a {
4387 | margin-bottom: 2px;
4388 | }
4389 | .navbar .nav > li > a:hover,
4390 | .navbar .dropdown-menu a:hover {
4391 | background-color: #222222;
4392 | }
4393 | .navbar .dropdown-menu {
4394 | position: static;
4395 | top: auto;
4396 | left: auto;
4397 | float: none;
4398 | display: block;
4399 | max-width: none;
4400 | margin: 0 15px;
4401 | padding: 0;
4402 | background-color: transparent;
4403 | border: none;
4404 | -webkit-border-radius: 0;
4405 | -moz-border-radius: 0;
4406 | border-radius: 0;
4407 | -webkit-box-shadow: none;
4408 | -moz-box-shadow: none;
4409 | box-shadow: none;
4410 | }
4411 | .navbar .dropdown-menu:before,
4412 | .navbar .dropdown-menu:after {
4413 | display: none;
4414 | }
4415 | .navbar .dropdown-menu .divider {
4416 | display: none;
4417 | }
4418 | .navbar-form,
4419 | .navbar-search {
4420 | float: none;
4421 | padding: 9px 15px;
4422 | margin: 9px 0;
4423 | border-top: 1px solid #222222;
4424 | border-bottom: 1px solid #222222;
4425 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4426 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4427 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4428 | }
4429 | .navbar .nav.pull-right {
4430 | float: none;
4431 | margin-left: 0;
4432 | }
4433 | .navbar-static .navbar-inner {
4434 | padding-left: 10px;
4435 | padding-right: 10px;
4436 | }
4437 | .btn-navbar {
4438 | display: block;
4439 | }
4440 | .nav-collapse {
4441 | overflow: hidden;
4442 | height: 0;
4443 | }
4444 | }
4445 | @media (min-width: 980px) {
4446 | .nav-collapse.collapse {
4447 | height: auto !important;
4448 | overflow: visible !important;
4449 | }
4450 | }
4451 | @media (min-width: 1200px) {
4452 | .row {
4453 | margin-left: -30px;
4454 | *zoom: 1;
4455 | }
4456 | .row:before,
4457 | .row:after {
4458 | display: table;
4459 | content: "";
4460 | }
4461 | .row:after {
4462 | clear: both;
4463 | }
4464 | [class*="span"] {
4465 | float: left;
4466 | margin-left: 30px;
4467 | }
4468 | .container,
4469 | .navbar-fixed-top .container,
4470 | .navbar-fixed-bottom .container {
4471 | width: 1170px;
4472 | }
4473 | .span12 {
4474 | width: 1170px;
4475 | }
4476 | .span11 {
4477 | width: 1070px;
4478 | }
4479 | .span10 {
4480 | width: 970px;
4481 | }
4482 | .span9 {
4483 | width: 870px;
4484 | }
4485 | .span8 {
4486 | width: 770px;
4487 | }
4488 | .span7 {
4489 | width: 670px;
4490 | }
4491 | .span6 {
4492 | width: 570px;
4493 | }
4494 | .span5 {
4495 | width: 470px;
4496 | }
4497 | .span4 {
4498 | width: 370px;
4499 | }
4500 | .span3 {
4501 | width: 270px;
4502 | }
4503 | .span2 {
4504 | width: 170px;
4505 | }
4506 | .span1 {
4507 | width: 70px;
4508 | }
4509 | .offset12 {
4510 | margin-left: 1230px;
4511 | }
4512 | .offset11 {
4513 | margin-left: 1130px;
4514 | }
4515 | .offset10 {
4516 | margin-left: 1030px;
4517 | }
4518 | .offset9 {
4519 | margin-left: 930px;
4520 | }
4521 | .offset8 {
4522 | margin-left: 830px;
4523 | }
4524 | .offset7 {
4525 | margin-left: 730px;
4526 | }
4527 | .offset6 {
4528 | margin-left: 630px;
4529 | }
4530 | .offset5 {
4531 | margin-left: 530px;
4532 | }
4533 | .offset4 {
4534 | margin-left: 430px;
4535 | }
4536 | .offset3 {
4537 | margin-left: 330px;
4538 | }
4539 | .offset2 {
4540 | margin-left: 230px;
4541 | }
4542 | .offset1 {
4543 | margin-left: 130px;
4544 | }
4545 | .row-fluid {
4546 | width: 100%;
4547 | *zoom: 1;
4548 | }
4549 | .row-fluid:before,
4550 | .row-fluid:after {
4551 | display: table;
4552 | content: "";
4553 | }
4554 | .row-fluid:after {
4555 | clear: both;
4556 | }
4557 | .row-fluid > [class*="span"] {
4558 | float: left;
4559 | margin-left: 2.564102564%;
4560 | }
4561 | .row-fluid > [class*="span"]:first-child {
4562 | margin-left: 0;
4563 | }
4564 | .row-fluid > .span12 {
4565 | width: 100%;
4566 | }
4567 | .row-fluid > .span11 {
4568 | width: 91.45299145300001%;
4569 | }
4570 | .row-fluid > .span10 {
4571 | width: 82.905982906%;
4572 | }
4573 | .row-fluid > .span9 {
4574 | width: 74.358974359%;
4575 | }
4576 | .row-fluid > .span8 {
4577 | width: 65.81196581200001%;
4578 | }
4579 | .row-fluid > .span7 {
4580 | width: 57.264957265%;
4581 | }
4582 | .row-fluid > .span6 {
4583 | width: 48.717948718%;
4584 | }
4585 | .row-fluid > .span5 {
4586 | width: 40.170940171000005%;
4587 | }
4588 | .row-fluid > .span4 {
4589 | width: 31.623931624%;
4590 | }
4591 | .row-fluid > .span3 {
4592 | width: 23.076923077%;
4593 | }
4594 | .row-fluid > .span2 {
4595 | width: 14.529914530000001%;
4596 | }
4597 | .row-fluid > .span1 {
4598 | width: 5.982905983%;
4599 | }
4600 | input,
4601 | textarea,
4602 | .uneditable-input {
4603 | margin-left: 0;
4604 | }
4605 | input.span12, textarea.span12, .uneditable-input.span12 {
4606 | width: 1160px;
4607 | }
4608 | input.span11, textarea.span11, .uneditable-input.span11 {
4609 | width: 1060px;
4610 | }
4611 | input.span10, textarea.span10, .uneditable-input.span10 {
4612 | width: 960px;
4613 | }
4614 | input.span9, textarea.span9, .uneditable-input.span9 {
4615 | width: 860px;
4616 | }
4617 | input.span8, textarea.span8, .uneditable-input.span8 {
4618 | width: 760px;
4619 | }
4620 | input.span7, textarea.span7, .uneditable-input.span7 {
4621 | width: 660px;
4622 | }
4623 | input.span6, textarea.span6, .uneditable-input.span6 {
4624 | width: 560px;
4625 | }
4626 | input.span5, textarea.span5, .uneditable-input.span5 {
4627 | width: 460px;
4628 | }
4629 | input.span4, textarea.span4, .uneditable-input.span4 {
4630 | width: 360px;
4631 | }
4632 | input.span3, textarea.span3, .uneditable-input.span3 {
4633 | width: 260px;
4634 | }
4635 | input.span2, textarea.span2, .uneditable-input.span2 {
4636 | width: 160px;
4637 | }
4638 | input.span1, textarea.span1, .uneditable-input.span1 {
4639 | width: 60px;
4640 | }
4641 | .thumbnails {
4642 | margin-left: -30px;
4643 | }
4644 | .thumbnails > li {
4645 | margin-left: 30px;
4646 | }
4647 | }
4648 |
--------------------------------------------------------------------------------
/routes/index.js:
--------------------------------------------------------------------------------
1 | var crypto = require('crypto');
2 | var User = require('../models/user.js');
3 | var Post = require('../models/post.js');
4 |
5 | module.exports = function(app) {
6 | app.get('/', function(req, res) {
7 | Post.get(null, function(err, posts) {
8 | if (err) {
9 | posts = [];
10 | }
11 | res.render('index', {
12 | title: '首頁',
13 | posts: posts,
14 | });
15 | });
16 | });
17 |
18 | app.get('/reg', checkNotLogin);
19 | app.get('/reg', function(req, res) {
20 | res.render('reg', {
21 | title: '用戶註冊',
22 | });
23 | });
24 |
25 | app.post('/reg', checkNotLogin);
26 | app.post('/reg', function(req, res) {
27 | //檢驗用戶兩次輸入的口令是否一致
28 | if (req.body['password-repeat'] != req.body['password']) {
29 | req.flash('error', '兩次輸入的口令不一致');
30 | return res.redirect('/reg');
31 | }
32 |
33 | //生成口令的散列值
34 | var md5 = crypto.createHash('md5');
35 | var password = md5.update(req.body.password).digest('base64');
36 |
37 | var newUser = new User({
38 | name: req.body.username,
39 | password: password,
40 | });
41 |
42 | //檢查用戶名是否已經存在
43 | User.get(newUser.name, function(err, user) {
44 | if (user)
45 | err = 'Username already exists.';
46 | if (err) {
47 | req.flash('error', err);
48 | return res.redirect('/reg');
49 | }
50 | //如果不存在則新增用戶
51 | newUser.save(function(err) {
52 | if (err) {
53 | req.flash('error', err);
54 | return res.redirect('/reg');
55 | }
56 | req.session.user = newUser;
57 | req.flash('success', '註冊成功');
58 | res.redirect('/');
59 | });
60 | });
61 | });
62 |
63 | app.get('/login', checkNotLogin);
64 | app.get('/login', function(req, res) {
65 | res.render('login', {
66 | title: '用戶登入',
67 | });
68 | });
69 |
70 | app.post('/login', checkNotLogin);
71 | app.post('/login', function(req, res) {
72 | //生成口令的散列值
73 | var md5 = crypto.createHash('md5');
74 | var password = md5.update(req.body.password).digest('base64');
75 |
76 | User.get(req.body.username, function(err, user) {
77 | if (!user) {
78 | req.flash('error', '用戶不存在');
79 | return res.redirect('/login');
80 | }
81 | if (user.password != password) {
82 | req.flash('error', '用戶口令錯誤');
83 | return res.redirect('/login');
84 | }
85 | req.session.user = user;
86 | req.flash('success', '登入成功');
87 | res.redirect('/');
88 | });
89 | });
90 |
91 | app.get('/logout', checkLogin);
92 | app.get('/logout', function(req, res) {
93 | req.session.user = null;
94 | req.flash('success', '登出成功');
95 | res.redirect('/');
96 | });
97 |
98 | app.get('/u/:user', function(req, res) {
99 | User.get(req.params.user, function(err, user) {
100 | if (!user) {
101 | req.flash('error', '用戶不存在');
102 | return res.redirect('/');
103 | }
104 | Post.get(user.name, function(err, posts) {
105 | if (err) {
106 | req.flash('error', err);
107 | return res.redirect('/');
108 | }
109 | res.render('user', {
110 | title: user.name,
111 | posts: posts,
112 | });
113 | });
114 | });
115 | });
116 |
117 | app.post('/post', checkLogin);
118 | app.post('/post', function(req, res) {
119 | var currentUser = req.session.user;
120 | var post = new Post(currentUser.name, req.body.post);
121 | post.save(function(err) {
122 | if (err) {
123 | req.flash('error', err);
124 | return res.redirect('/');
125 | }
126 | req.flash('success', '發表成功');
127 | res.redirect('/u/' + currentUser.name);
128 | });
129 | });
130 | };
131 |
132 | function checkLogin(req, res, next) {
133 | if (!req.session.user) {
134 | req.flash('error', '未登入');
135 | return res.redirect('/login');
136 | }
137 | next();
138 | }
139 |
140 | function checkNotLogin(req, res, next) {
141 | if (req.session.user) {
142 | req.flash('error', '已登入');
143 | return res.redirect('/');
144 | }
145 | next();
146 | }
147 |
--------------------------------------------------------------------------------
/settings.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | cookieSecret: 'microblogbyvoid',
3 | db: 'microblog',
4 | host: 'localhost',
5 | };
6 |
--------------------------------------------------------------------------------
/views/index.ejs:
--------------------------------------------------------------------------------
1 | <% if (!user) { %>
2 |
3 |
歡迎來到 Microblog
4 |
Microblog 是一個基於 Node.js 的微博系統。
5 |
6 | 登錄
7 | 立即註冊
8 |
9 |
10 | <% } else { %>
11 | <%- partial('say') %>
12 | <% } %>
13 | <%- partial('posts') %>
14 |
--------------------------------------------------------------------------------
/views/layout.ejs:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 | <%= title %> - Microblog
6 |
7 |
13 |
14 |
15 |
16 |
17 |
40 |
41 |
42 | <% if (success) { %>
43 |
44 | <%= success %>
45 |
46 | <% } %>
47 | <% if (error) { %>
48 |
49 | <%= error %>
50 |
51 | <% } %>
52 | <%- body %>
53 |
54 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/views/login.ejs:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/views/posts.ejs:
--------------------------------------------------------------------------------
1 | <% posts.forEach(function(post, index) {
2 | if (index % 3 == 0) { %>
3 |
4 | <%} %>
5 |
6 |
7 |
<%= post.time %>
8 |
<%= post.post %>
9 |
10 | <% if (index % 3 == 2) { %>
11 |
12 | <% } %>
13 | <%}) %>
14 | <% if (posts.length % 3 != 0) { %>
15 |
16 | <%} %>
17 |
--------------------------------------------------------------------------------
/views/reg.ejs:
--------------------------------------------------------------------------------
1 |
28 |
--------------------------------------------------------------------------------
/views/say.ejs:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/views/user.ejs:
--------------------------------------------------------------------------------
1 | <% if (user) { %>
2 | <%- partial('say') %>
3 | <% } %>
4 | <%- partial('posts') %>
5 |
--------------------------------------------------------------------------------