.
9 |
10 | .list-group {
11 | // No need to set list-style: none; since .list-group-item is block level
12 | margin-bottom: 20px;
13 | padding-left: 0; // reset padding because ul and ol
14 | }
15 |
16 |
17 | // Individual list items
18 | //
19 | // Use on `li`s or `div`s within the `.list-group` parent.
20 |
21 | .list-group-item {
22 | position: relative;
23 | display: block;
24 | padding: 10px 15px;
25 | // Place the border on the list items and negative margin up for better styling
26 | margin-bottom: -1px;
27 | background-color: @list-group-bg;
28 | border: 1px solid @list-group-border;
29 |
30 | // Round the first and last items
31 | &:first-child {
32 | .border-top-radius(@list-group-border-radius);
33 | }
34 | &:last-child {
35 | margin-bottom: 0;
36 | .border-bottom-radius(@list-group-border-radius);
37 | }
38 |
39 | // Align badges within list items
40 | > .badge {
41 | float: right;
42 | }
43 | > .badge + .badge {
44 | margin-right: 5px;
45 | }
46 | }
47 |
48 |
49 | // Linked list items
50 | //
51 | // Use anchor elements instead of `li`s or `div`s to create linked list items.
52 | // Includes an extra `.active` modifier class for showing selected items.
53 |
54 | a.list-group-item {
55 | color: @list-group-link-color;
56 |
57 | .list-group-item-heading {
58 | color: @list-group-link-heading-color;
59 | }
60 |
61 | // Hover state
62 | &:hover,
63 | &:focus {
64 | text-decoration: none;
65 | background-color: @list-group-hover-bg;
66 | }
67 |
68 | // Active class on item itself, not parent
69 | &.active,
70 | &.active:hover,
71 | &.active:focus {
72 | z-index: 2; // Place active items above their siblings for proper border styling
73 | color: @list-group-active-color;
74 | background-color: @list-group-active-bg;
75 | border-color: @list-group-active-border;
76 |
77 | // Force color to inherit for custom content
78 | .list-group-item-heading {
79 | color: inherit;
80 | }
81 | .list-group-item-text {
82 | color: @list-group-active-text-color;
83 | }
84 | }
85 | }
86 |
87 |
88 | // Contextual variants
89 | //
90 | // Add modifier classes to change text and background color on individual items.
91 | // Organizationally, this must come after the `:hover` states.
92 |
93 | .list-group-item-variant(success; @state-success-bg; @state-success-text);
94 | .list-group-item-variant(info; @state-info-bg; @state-info-text);
95 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
96 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
97 |
98 |
99 | // Custom content options
100 | //
101 | // Extra classes for creating well-formatted content within `.list-group-item`s.
102 |
103 | .list-group-item-heading {
104 | margin-top: 0;
105 | margin-bottom: 5px;
106 | }
107 | .list-group-item-text {
108 | margin-bottom: 0;
109 | line-height: 1.3;
110 | }
111 |
--------------------------------------------------------------------------------
/js/bootstrap/button.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: button.js v3.1.0
3 | * http://getbootstrap.com/javascript/#buttons
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // BUTTON PUBLIC CLASS DEFINITION
14 | // ==============================
15 |
16 | var Button = function (element, options) {
17 | this.$element = $(element)
18 | this.options = $.extend({}, Button.DEFAULTS, options)
19 | this.isLoading = false
20 | }
21 |
22 | Button.DEFAULTS = {
23 | loadingText: 'loading...'
24 | }
25 |
26 | Button.prototype.setState = function (state) {
27 | var d = 'disabled'
28 | var $el = this.$element
29 | var val = $el.is('input') ? 'val' : 'html'
30 | var data = $el.data()
31 |
32 | state = state + 'Text'
33 |
34 | if (!data.resetText) $el.data('resetText', $el[val]())
35 |
36 | $el[val](data[state] || this.options[state])
37 |
38 | // push to event loop to allow forms to submit
39 | setTimeout($.proxy(function () {
40 | if (state == 'loadingText') {
41 | this.isLoading = true
42 | $el.addClass(d).attr(d, d)
43 | } else if (this.isLoading) {
44 | this.isLoading = false
45 | $el.removeClass(d).removeAttr(d)
46 | }
47 | }, this), 0)
48 | }
49 |
50 | Button.prototype.toggle = function () {
51 | var changed = true
52 | var $parent = this.$element.closest('[data-toggle="buttons"]')
53 |
54 | if ($parent.length) {
55 | var $input = this.$element.find('input')
56 | if ($input.prop('type') == 'radio') {
57 | if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
58 | else $parent.find('.active').removeClass('active')
59 | }
60 | if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
61 | }
62 |
63 | if (changed) this.$element.toggleClass('active')
64 | }
65 |
66 |
67 | // BUTTON PLUGIN DEFINITION
68 | // ========================
69 |
70 | var old = $.fn.button
71 |
72 | $.fn.button = function (option) {
73 | return this.each(function () {
74 | var $this = $(this)
75 | var data = $this.data('bs.button')
76 | var options = typeof option == 'object' && option
77 |
78 | if (!data) $this.data('bs.button', (data = new Button(this, options)))
79 |
80 | if (option == 'toggle') data.toggle()
81 | else if (option) data.setState(option)
82 | })
83 | }
84 |
85 | $.fn.button.Constructor = Button
86 |
87 |
88 | // BUTTON NO CONFLICT
89 | // ==================
90 |
91 | $.fn.button.noConflict = function () {
92 | $.fn.button = old
93 | return this
94 | }
95 |
96 |
97 | // BUTTON DATA-API
98 | // ===============
99 |
100 | $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
101 | var $btn = $(e.target)
102 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
103 | $btn.button('toggle')
104 | e.preventDefault()
105 | })
106 |
107 | }(jQuery);
108 |
--------------------------------------------------------------------------------
/css/flexslider.min.css:
--------------------------------------------------------------------------------
1 | .flex-container a:active,.flex-container a:focus,.flexslider a:active,.flexslider a:focus{outline:0}.flex-control-nav,.flex-direction-nav,.slides{margin:0;padding:0;list-style:none}.flexslider{padding:0}.flexslider .slides>li{display:none;-webkit-backface-visibility:hidden}.flexslider .slides img{width:100%;display:block}.flex-pauseplay span{text-transform:capitalize}.slides:after{content:"\0020";display:block;clear:both;visibility:hidden;line-height:0;height:0}html[xmlns] .slides{display:block}* html .slides{height:1%}.no-js .slides>li:first-child{display:block}.flexslider{margin:0 0 60px;background:#fff;border:4px solid #fff;position:relative;-webkit-border-radius:4px;-moz-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.2);-moz-box-shadow:0 1px 4px rgba(0,0,0,.2);-o-box-shadow:0 1px 4px rgba(0,0,0,.2);box-shadow:0 1px 4px rgba(0,0,0,.2);zoom:1}.flex-viewport{max-height:2000px;-webkit-transition:all 1s ease;-moz-transition:all 1s ease;-o-transition:all 1s ease;transition:all 1s ease}.loading .flex-viewport{max-height:300px}.flexslider .slides{zoom:1}.carousel li{margin-right:5px}.flex-direction-nav{*height:0}.flex-direction-nav a{display:block;width:60px;height:60px;background:0 0;border:2px solid #fff;border-radius:50%;margin:-20px 0 0;position:absolute;top:50%;z-index:10;overflow:hidden;opacity:1;color:rgba(0,0,0,.8);text-shadow:1px 1px 0 rgba(255,255,255,.3);-webkit-transition:all .3s ease;-moz-transition:all .3s ease;transition:all .3s ease;cursor:pointer}.flex-direction-nav a:hover{background:rgba(255,255,255,.3)}.flex-direction-nav .flex-prev{left:17px}.flex-direction-nav .flex-next{right:17px;text-align:right}.flexslider:hover .flex-prev{opacity:.7;left:10px}.flexslider:hover .flex-next{opacity:.7;right:10px}.flexslider:hover .flex-next:hover,.flexslider:hover .flex-prev:hover{opacity:1}.flex-disabled{opacity:0!important}.flex-direction-nav a:before{font-family:ElegantIcons;font-size:38px;display:inline-block;content:'#';position:relative;top:-3px;color:#fff;left:7px;padding-bottom:22px}.flex-direction-nav a.flex-next:before{content:'$';right:8px;left:-9px}.flex-pauseplay a{display:block;width:20px;height:20px;position:absolute;bottom:5px;left:10px;opacity:.8;z-index:10;overflow:hidden;cursor:pointer;color:#000}.flex-pauseplay a:before{font-family:flexslider-icon;font-size:20px;display:inline-block;content:'\f004'}.flex-pauseplay a:hover{opacity:1}.flex-pauseplay a.flex-play:before{content:'\f003'}.flex-control-nav{width:100%;position:absolute;bottom:44px;text-align:center;z-index:10}.flex-control-nav li{margin:0 5px;display:inline-block;zoom:1;*display:inline}.flex-control-paging li a{width:8px;height:8px;display:block;background:#fff;background:rgba(255,255,255,.5);cursor:pointer;text-indent:-9999px;-webkit-border-radius:50%;-moz-border-radius:20px;-o-border-radius:50%;border-radius:50%;transition:all .5s ease;-webkit-transition:all .5s ease;-moz-transition:all .5s ease}.flex-control-paging li a:hover{background:#fff;background:rgba(255,255,255,.7)}.flex-control-paging li a.flex-active{background:#fff;background:rgba(255,255,255,.9);cursor:default}.flex-control-thumbs{margin:5px 0 0;position:static;overflow:hidden}.flex-control-thumbs li{width:25%;float:left;margin:0}.flex-control-thumbs img{width:100%;display:block;opacity:.7;cursor:pointer}.flex-control-thumbs img:hover{opacity:1}.flex-control-thumbs .flex-active{opacity:1;cursor:default}@media screen and (max-width:860px){.flex-direction-nav .flex-prev{opacity:1;left:10px}.flex-direction-nav .flex-next{opacity:1;right:10px}}
--------------------------------------------------------------------------------
/js/bootstrap/tab.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: tab.js v3.1.0
3 | * http://getbootstrap.com/javascript/#tabs
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // TAB CLASS DEFINITION
14 | // ====================
15 |
16 | var Tab = function (element) {
17 | this.element = $(element)
18 | }
19 |
20 | Tab.prototype.show = function () {
21 | var $this = this.element
22 | var $ul = $this.closest('ul:not(.dropdown-menu)')
23 | var selector = $this.data('target')
24 |
25 | if (!selector) {
26 | selector = $this.attr('href')
27 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
28 | }
29 |
30 | if ($this.parent('li').hasClass('active')) return
31 |
32 | var previous = $ul.find('.active:last a')[0]
33 | var e = $.Event('show.bs.tab', {
34 | relatedTarget: previous
35 | })
36 |
37 | $this.trigger(e)
38 |
39 | if (e.isDefaultPrevented()) return
40 |
41 | var $target = $(selector)
42 |
43 | this.activate($this.parent('li'), $ul)
44 | this.activate($target, $target.parent(), function () {
45 | $this.trigger({
46 | type: 'shown.bs.tab',
47 | relatedTarget: previous
48 | })
49 | })
50 | }
51 |
52 | Tab.prototype.activate = function (element, container, callback) {
53 | var $active = container.find('> .active')
54 | var transition = callback
55 | && $.support.transition
56 | && $active.hasClass('fade')
57 |
58 | function next() {
59 | $active
60 | .removeClass('active')
61 | .find('> .dropdown-menu > .active')
62 | .removeClass('active')
63 |
64 | element.addClass('active')
65 |
66 | if (transition) {
67 | element[0].offsetWidth // reflow for transition
68 | element.addClass('in')
69 | } else {
70 | element.removeClass('fade')
71 | }
72 |
73 | if (element.parent('.dropdown-menu')) {
74 | element.closest('li.dropdown').addClass('active')
75 | }
76 |
77 | callback && callback()
78 | }
79 |
80 | transition ?
81 | $active
82 | .one($.support.transition.end, next)
83 | .emulateTransitionEnd(150) :
84 | next()
85 |
86 | $active.removeClass('in')
87 | }
88 |
89 |
90 | // TAB PLUGIN DEFINITION
91 | // =====================
92 |
93 | var old = $.fn.tab
94 |
95 | $.fn.tab = function ( option ) {
96 | return this.each(function () {
97 | var $this = $(this)
98 | var data = $this.data('bs.tab')
99 |
100 | if (!data) $this.data('bs.tab', (data = new Tab(this)))
101 | if (typeof option == 'string') data[option]()
102 | })
103 | }
104 |
105 | $.fn.tab.Constructor = Tab
106 |
107 |
108 | // TAB NO CONFLICT
109 | // ===============
110 |
111 | $.fn.tab.noConflict = function () {
112 | $.fn.tab = old
113 | return this
114 | }
115 |
116 |
117 | // TAB DATA-API
118 | // ============
119 |
120 | $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
121 | e.preventDefault()
122 | $(this).tab('show')
123 | })
124 |
125 | }(jQuery);
126 |
--------------------------------------------------------------------------------
/js/bootstrap/popover.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: popover.js v3.1.0
3 | * http://getbootstrap.com/javascript/#popovers
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // POPOVER PUBLIC CLASS DEFINITION
14 | // ===============================
15 |
16 | var Popover = function (element, options) {
17 | this.init('popover', element, options)
18 | }
19 |
20 | if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
21 |
22 | Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
23 | placement: 'right',
24 | trigger: 'click',
25 | content: '',
26 | template: '
'
27 | })
28 |
29 |
30 | // NOTE: POPOVER EXTENDS tooltip.js
31 | // ================================
32 |
33 | Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
34 |
35 | Popover.prototype.constructor = Popover
36 |
37 | Popover.prototype.getDefaults = function () {
38 | return Popover.DEFAULTS
39 | }
40 |
41 | Popover.prototype.setContent = function () {
42 | var $tip = this.tip()
43 | var title = this.getTitle()
44 | var content = this.getContent()
45 |
46 | $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
47 | $tip.find('.popover-content')[ // we use append for html objects to maintain js events
48 | this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
49 | ](content)
50 |
51 | $tip.removeClass('fade top bottom left right in')
52 |
53 | // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
54 | // this manually by checking the contents.
55 | if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
56 | }
57 |
58 | Popover.prototype.hasContent = function () {
59 | return this.getTitle() || this.getContent()
60 | }
61 |
62 | Popover.prototype.getContent = function () {
63 | var $e = this.$element
64 | var o = this.options
65 |
66 | return $e.attr('data-content')
67 | || (typeof o.content == 'function' ?
68 | o.content.call($e[0]) :
69 | o.content)
70 | }
71 |
72 | Popover.prototype.arrow = function () {
73 | return this.$arrow = this.$arrow || this.tip().find('.arrow')
74 | }
75 |
76 | Popover.prototype.tip = function () {
77 | if (!this.$tip) this.$tip = $(this.options.template)
78 | return this.$tip
79 | }
80 |
81 |
82 | // POPOVER PLUGIN DEFINITION
83 | // =========================
84 |
85 | var old = $.fn.popover
86 |
87 | $.fn.popover = function (option) {
88 | return this.each(function () {
89 | var $this = $(this)
90 | var data = $this.data('bs.popover')
91 | var options = typeof option == 'object' && option
92 |
93 | if (!data && option == 'destroy') return
94 | if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
95 | if (typeof option == 'string') data[option]()
96 | })
97 | }
98 |
99 | $.fn.popover.Constructor = Popover
100 |
101 |
102 | // POPOVER NO CONFLICT
103 | // ===================
104 |
105 | $.fn.popover.noConflict = function () {
106 | $.fn.popover = old
107 | return this
108 | }
109 |
110 | }(jQuery);
111 |
--------------------------------------------------------------------------------
/css/less/popovers.less:
--------------------------------------------------------------------------------
1 | //
2 | // Popovers
3 | // --------------------------------------------------
4 |
5 |
6 | .popover {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | z-index: @zindex-popover;
11 | display: none;
12 | max-width: @popover-max-width;
13 | padding: 1px;
14 | text-align: left; // Reset given new insertion method
15 | background-color: @popover-bg;
16 | background-clip: padding-box;
17 | border: 1px solid @popover-fallback-border-color;
18 | border: 1px solid @popover-border-color;
19 | border-radius: @border-radius-large;
20 | .box-shadow(0 5px 10px rgba(0,0,0,.2));
21 |
22 | // Overrides for proper insertion
23 | white-space: normal;
24 |
25 | // Offset the popover to account for the popover arrow
26 | &.top { margin-top: -@popover-arrow-width; }
27 | &.right { margin-left: @popover-arrow-width; }
28 | &.bottom { margin-top: @popover-arrow-width; }
29 | &.left { margin-left: -@popover-arrow-width; }
30 | }
31 |
32 | .popover-title {
33 | margin: 0; // reset heading margin
34 | padding: 8px 14px;
35 | font-size: @font-size-base;
36 | font-weight: normal;
37 | line-height: 18px;
38 | background-color: @popover-title-bg;
39 | border-bottom: 1px solid darken(@popover-title-bg, 5%);
40 | border-radius: 5px 5px 0 0;
41 | }
42 |
43 | .popover-content {
44 | padding: 9px 14px;
45 | }
46 |
47 | // Arrows
48 | //
49 | // .arrow is outer, .arrow:after is inner
50 |
51 | .popover > .arrow {
52 | &,
53 | &:after {
54 | position: absolute;
55 | display: block;
56 | width: 0;
57 | height: 0;
58 | border-color: transparent;
59 | border-style: solid;
60 | }
61 | }
62 | .popover > .arrow {
63 | border-width: @popover-arrow-outer-width;
64 | }
65 | .popover > .arrow:after {
66 | border-width: @popover-arrow-width;
67 | content: "";
68 | }
69 |
70 | .popover {
71 | &.top > .arrow {
72 | left: 50%;
73 | margin-left: -@popover-arrow-outer-width;
74 | border-bottom-width: 0;
75 | border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
76 | border-top-color: @popover-arrow-outer-color;
77 | bottom: -@popover-arrow-outer-width;
78 | &:after {
79 | content: " ";
80 | bottom: 1px;
81 | margin-left: -@popover-arrow-width;
82 | border-bottom-width: 0;
83 | border-top-color: @popover-arrow-color;
84 | }
85 | }
86 | &.right > .arrow {
87 | top: 50%;
88 | left: -@popover-arrow-outer-width;
89 | margin-top: -@popover-arrow-outer-width;
90 | border-left-width: 0;
91 | border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
92 | border-right-color: @popover-arrow-outer-color;
93 | &:after {
94 | content: " ";
95 | left: 1px;
96 | bottom: -@popover-arrow-width;
97 | border-left-width: 0;
98 | border-right-color: @popover-arrow-color;
99 | }
100 | }
101 | &.bottom > .arrow {
102 | left: 50%;
103 | margin-left: -@popover-arrow-outer-width;
104 | border-top-width: 0;
105 | border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
106 | border-bottom-color: @popover-arrow-outer-color;
107 | top: -@popover-arrow-outer-width;
108 | &:after {
109 | content: " ";
110 | top: 1px;
111 | margin-left: -@popover-arrow-width;
112 | border-top-width: 0;
113 | border-bottom-color: @popover-arrow-color;
114 | }
115 | }
116 |
117 | &.left > .arrow {
118 | top: 50%;
119 | right: -@popover-arrow-outer-width;
120 | margin-top: -@popover-arrow-outer-width;
121 | border-right-width: 0;
122 | border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
123 | border-left-color: @popover-arrow-outer-color;
124 | &:after {
125 | content: " ";
126 | right: 1px;
127 | border-right-width: 0;
128 | border-left-color: @popover-arrow-color;
129 | bottom: -@popover-arrow-width;
130 | }
131 | }
132 |
133 | }
134 |
--------------------------------------------------------------------------------
/css/less/modals.less:
--------------------------------------------------------------------------------
1 | //
2 | // Modals
3 | // --------------------------------------------------
4 |
5 | // .modal-open - body class for killing the scroll
6 | // .modal - container to scroll within
7 | // .modal-dialog - positioning shell for the actual modal
8 | // .modal-content - actual modal w/ bg and corners and shit
9 |
10 | // Kill the scroll on the body
11 | .modal-open {
12 | overflow: hidden;
13 | }
14 |
15 | // Container that the modal scrolls within
16 | .modal {
17 | display: none;
18 | overflow: auto;
19 | overflow-y: scroll;
20 | position: fixed;
21 | top: 0;
22 | right: 0;
23 | bottom: 0;
24 | left: 0;
25 | z-index: @zindex-modal;
26 | -webkit-overflow-scrolling: touch;
27 |
28 | // Prevent Chrome on Windows from adding a focus outline. For details, see
29 | // https://github.com/twbs/bootstrap/pull/10951.
30 | outline: 0;
31 |
32 | // When fading in the modal, animate it to slide down
33 | &.fade .modal-dialog {
34 | .translate(0, -25%);
35 | .transition-transform(~"0.3s ease-out");
36 | }
37 | &.in .modal-dialog { .translate(0, 0)}
38 | }
39 |
40 | // Shell div to position the modal with bottom padding
41 | .modal-dialog {
42 | position: relative;
43 | width: auto;
44 | margin: 10px;
45 | }
46 |
47 | // Actual modal
48 | .modal-content {
49 | position: relative;
50 | background-color: @modal-content-bg;
51 | border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
52 | border: 1px solid @modal-content-border-color;
53 | border-radius: @border-radius-large;
54 | .box-shadow(0 3px 9px rgba(0,0,0,.5));
55 | background-clip: padding-box;
56 | // Remove focus outline from opened modal
57 | outline: none;
58 | }
59 |
60 | // Modal background
61 | .modal-backdrop {
62 | position: fixed;
63 | top: 0;
64 | right: 0;
65 | bottom: 0;
66 | left: 0;
67 | z-index: @zindex-modal-background;
68 | background-color: @modal-backdrop-bg;
69 | // Fade for backdrop
70 | &.fade { .opacity(0); }
71 | &.in { .opacity(@modal-backdrop-opacity); }
72 | }
73 |
74 | // Modal header
75 | // Top section of the modal w/ title and dismiss
76 | .modal-header {
77 | padding: @modal-title-padding;
78 | border-bottom: 1px solid @modal-header-border-color;
79 | min-height: (@modal-title-padding + @modal-title-line-height);
80 | }
81 | // Close icon
82 | .modal-header .close {
83 | margin-top: -2px;
84 | }
85 |
86 | // Title text within header
87 | .modal-title {
88 | margin: 0;
89 | line-height: @modal-title-line-height;
90 | }
91 |
92 | // Modal body
93 | // Where all modal content resides (sibling of .modal-header and .modal-footer)
94 | .modal-body {
95 | position: relative;
96 | padding: @modal-inner-padding;
97 | }
98 |
99 | // Footer (for actions)
100 | .modal-footer {
101 | margin-top: 15px;
102 | padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;
103 | text-align: right; // right align buttons
104 | border-top: 1px solid @modal-footer-border-color;
105 | &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
106 |
107 | // Properly space out buttons
108 | .btn + .btn {
109 | margin-left: 5px;
110 | margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
111 | }
112 | // but override that for button groups
113 | .btn-group .btn + .btn {
114 | margin-left: -1px;
115 | }
116 | // and override it for block buttons as well
117 | .btn-block + .btn-block {
118 | margin-left: 0;
119 | }
120 | }
121 |
122 | // Scale up the modal
123 | @media (min-width: @screen-sm-min) {
124 | // Automatically set modal's width for larger viewports
125 | .modal-dialog {
126 | width: @modal-md;
127 | margin: 30px auto;
128 | }
129 | .modal-content {
130 | .box-shadow(0 5px 15px rgba(0,0,0,.5));
131 | }
132 |
133 | // Modal sizes
134 | .modal-sm { width: @modal-sm; }
135 | }
136 |
137 | @media (min-width: @screen-md-min) {
138 | .modal-lg { width: @modal-lg; }
139 | }
140 |
--------------------------------------------------------------------------------
/js/placeholders.min.js:
--------------------------------------------------------------------------------
1 | /* Placeholders.js v3.0.2 */
2 | (function(t){"use strict";function e(t,e,r){return t.addEventListener?t.addEventListener(e,r,!1):t.attachEvent?t.attachEvent("on"+e,r):void 0}function r(t,e){var r,n;for(r=0,n=t.length;n>r;r++)if(t[r]===e)return!0;return!1}function n(t,e){var r;t.createTextRange?(r=t.createTextRange(),r.move("character",e),r.select()):t.selectionStart&&(t.focus(),t.setSelectionRange(e,e))}function a(t,e){try{return t.type=e,!0}catch(r){return!1}}t.Placeholders={Utils:{addEventListener:e,inArray:r,moveCaret:n,changeType:a}}})(this),function(t){"use strict";function e(){}function r(){try{return document.activeElement}catch(t){}}function n(t,e){var r,n,a=!!e&&t.value!==e,u=t.value===t.getAttribute(V);return(a||u)&&"true"===t.getAttribute(D)?(t.removeAttribute(D),t.value=t.value.replace(t.getAttribute(V),""),t.className=t.className.replace(R,""),n=t.getAttribute(F),parseInt(n,10)>=0&&(t.setAttribute("maxLength",n),t.removeAttribute(F)),r=t.getAttribute(P),r&&(t.type=r),!0):!1}function a(t){var e,r,n=t.getAttribute(V);return""===t.value&&n?(t.setAttribute(D,"true"),t.value=n,t.className+=" "+I,r=t.getAttribute(F),r||(t.setAttribute(F,t.maxLength),t.removeAttribute("maxLength")),e=t.getAttribute(P),e?t.type="text":"password"===t.type&&M.changeType(t,"text")&&t.setAttribute(P,"password"),!0):!1}function u(t,e){var r,n,a,u,i,l,o;if(t&&t.getAttribute(V))e(t);else for(a=t?t.getElementsByTagName("input"):b,u=t?t.getElementsByTagName("textarea"):f,r=a?a.length:0,n=u?u.length:0,o=0,l=r+n;l>o;o++)i=r>o?a[o]:u[o-r],e(i)}function i(t){u(t,n)}function l(t){u(t,a)}function o(t){return function(){m&&t.value===t.getAttribute(V)&&"true"===t.getAttribute(D)?M.moveCaret(t,0):n(t)}}function c(t){return function(){a(t)}}function s(t){return function(e){return A=t.value,"true"===t.getAttribute(D)&&A===t.getAttribute(V)&&M.inArray(C,e.keyCode)?(e.preventDefault&&e.preventDefault(),!1):void 0}}function d(t){return function(){n(t,A),""===t.value&&(t.blur(),M.moveCaret(t,0))}}function g(t){return function(){t===r()&&t.value===t.getAttribute(V)&&"true"===t.getAttribute(D)&&M.moveCaret(t,0)}}function v(t){return function(){i(t)}}function p(t){t.form&&(T=t.form,"string"==typeof T&&(T=document.getElementById(T)),T.getAttribute(U)||(M.addEventListener(T,"submit",v(T)),T.setAttribute(U,"true"))),M.addEventListener(t,"focus",o(t)),M.addEventListener(t,"blur",c(t)),m&&(M.addEventListener(t,"keydown",s(t)),M.addEventListener(t,"keyup",d(t)),M.addEventListener(t,"click",g(t))),t.setAttribute(j,"true"),t.setAttribute(V,x),(m||t!==r())&&a(t)}var b,f,m,h,A,y,E,x,L,T,N,S,w,B=["text","search","url","tel","email","password","number","textarea"],C=[27,33,34,35,36,37,38,39,40,8,46],k="#ccc",I="placeholdersjs",R=RegExp("(?:^|\\s)"+I+"(?!\\S)"),V="data-placeholder-value",D="data-placeholder-active",P="data-placeholder-type",U="data-placeholder-submit",j="data-placeholder-bound",q="data-placeholder-focus",z="data-placeholder-live",F="data-placeholder-maxlength",G=document.createElement("input"),H=document.getElementsByTagName("head")[0],J=document.documentElement,K=t.Placeholders,M=K.Utils;if(K.nativeSupport=void 0!==G.placeholder,!K.nativeSupport){for(b=document.getElementsByTagName("input"),f=document.getElementsByTagName("textarea"),m="false"===J.getAttribute(q),h="false"!==J.getAttribute(z),y=document.createElement("style"),y.type="text/css",E=document.createTextNode("."+I+" { color:"+k+"; }"),y.styleSheet?y.styleSheet.cssText=E.nodeValue:y.appendChild(E),H.insertBefore(y,H.firstChild),w=0,S=b.length+f.length;S>w;w++)N=b.length>w?b[w]:f[w-b.length],x=N.attributes.placeholder,x&&(x=x.nodeValue,x&&M.inArray(B,N.type)&&p(N));L=setInterval(function(){for(w=0,S=b.length+f.length;S>w;w++)N=b.length>w?b[w]:f[w-b.length],x=N.attributes.placeholder,x?(x=x.nodeValue,x&&M.inArray(B,N.type)&&(N.getAttribute(j)||p(N),(x!==N.getAttribute(V)||"password"===N.type&&!N.getAttribute(P))&&("password"===N.type&&!N.getAttribute(P)&&M.changeType(N,"text")&&N.setAttribute(P,"password"),N.value===N.getAttribute(V)&&(N.value=x),N.setAttribute(V,x)))):N.getAttribute(D)&&(n(N),N.removeAttribute(V));h||clearInterval(L)},100)}M.addEventListener(t,"beforeunload",function(){K.disable()}),K.disable=K.nativeSupport?e:i,K.enable=K.nativeSupport?e:l}(this);
--------------------------------------------------------------------------------
/css/less/buttons.less:
--------------------------------------------------------------------------------
1 | //
2 | // Buttons
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // --------------------------------------------------
8 |
9 | .btn {
10 | display: inline-block;
11 | margin-bottom: 0; // For input.btn
12 | font-weight: @btn-font-weight;
13 | text-align: center;
14 | vertical-align: middle;
15 | cursor: pointer;
16 | background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
17 | border: 1px solid transparent;
18 | white-space: nowrap;
19 | .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);
20 | .user-select(none);
21 |
22 | &,
23 | &:active,
24 | &.active {
25 | &:focus {
26 | .tab-focus();
27 | }
28 | }
29 |
30 | &:hover,
31 | &:focus {
32 | color: @btn-default-color;
33 | text-decoration: none;
34 | }
35 |
36 | &:active,
37 | &.active {
38 | outline: 0;
39 | background-image: none;
40 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
41 | }
42 |
43 | &.disabled,
44 | &[disabled],
45 | fieldset[disabled] & {
46 | cursor: not-allowed;
47 | pointer-events: none; // Future-proof disabling of clicks
48 | .opacity(.65);
49 | .box-shadow(none);
50 | }
51 | }
52 |
53 |
54 | // Alternate buttons
55 | // --------------------------------------------------
56 |
57 | .btn-default {
58 | .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
59 | }
60 | .btn-primary {
61 | .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
62 | }
63 | // Success appears as green
64 | .btn-success {
65 | .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
66 | }
67 | // Info appears as blue-green
68 | .btn-info {
69 | .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
70 | }
71 | // Warning appears as orange
72 | .btn-warning {
73 | .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
74 | }
75 | // Danger and error appear as red
76 | .btn-danger {
77 | .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
78 | }
79 |
80 |
81 | // Link buttons
82 | // -------------------------
83 |
84 | // Make a button look and behave like a link
85 | .btn-link {
86 | color: @link-color;
87 | font-weight: normal;
88 | cursor: pointer;
89 | border-radius: 0;
90 |
91 | &,
92 | &:active,
93 | &[disabled],
94 | fieldset[disabled] & {
95 | background-color: transparent;
96 | .box-shadow(none);
97 | }
98 | &,
99 | &:hover,
100 | &:focus,
101 | &:active {
102 | border-color: transparent;
103 | }
104 | &:hover,
105 | &:focus {
106 | color: @link-hover-color;
107 | text-decoration: underline;
108 | background-color: transparent;
109 | }
110 | &[disabled],
111 | fieldset[disabled] & {
112 | &:hover,
113 | &:focus {
114 | color: @btn-link-disabled-color;
115 | text-decoration: none;
116 | }
117 | }
118 | }
119 |
120 |
121 | // Button Sizes
122 | // --------------------------------------------------
123 |
124 | .btn-lg {
125 | // line-height: ensure even-numbered height of button next to large input
126 | .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
127 | }
128 | .btn-sm {
129 | // line-height: ensure proper height of button next to small input
130 | .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
131 | }
132 | .btn-xs {
133 | .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);
134 | }
135 |
136 |
137 | // Block button
138 | // --------------------------------------------------
139 |
140 | .btn-block {
141 | display: block;
142 | width: 100%;
143 | padding-left: 0;
144 | padding-right: 0;
145 | }
146 |
147 | // Vertically space out multiple block buttons
148 | .btn-block + .btn-block {
149 | margin-top: 5px;
150 | }
151 |
152 | // Specificity overrides
153 | input[type="submit"],
154 | input[type="reset"],
155 | input[type="button"] {
156 | &.btn-block {
157 | width: 100%;
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/css/custom.css:
--------------------------------------------------------------------------------
1 | .dark-layer {
2 | content: "";
3 | background-color: rgba(0, 0, 0, 0.4);
4 | z-index: 1;
5 | position: absolute;
6 | width: 100%;
7 | height: 100%;
8 | top: 0;
9 | left: 0;
10 | }
11 |
12 | .schedule a {
13 | color: #E12B00;
14 | border: none;
15 | }
16 |
17 | .schedule a:hover {
18 | color: #E12B00;
19 | text-decoration: underline;
20 | border: none;
21 | }
22 |
23 | .schedule a:active {
24 | color: red;
25 | text-decoration: underline;
26 | border: none;
27 | }
28 |
29 | .schedule a:visited {
30 | color: #B82300;
31 | text-decoration: none;
32 | border: none;
33 | }
34 |
35 | .tweets-feed {
36 | color: #FFFFFF;
37 | line-height: 25px;
38 | font-size: 20px;
39 | transition: opacity 0.2s linear;
40 | margin-bottom: 20px;
41 | height: 250px;
42 | }
43 |
44 | .tweets-feed a {
45 | color: #FFFFFF;
46 | text-decoration: underline;
47 | font-weight:700;
48 | }
49 |
50 | .tweets-feed a:hover {
51 | color: #FFFFFF;
52 | }
53 |
54 | .tweets-feed .dateTweeted {
55 | font-size: 15px;
56 | display: block;
57 | text-align: center;
58 | margin: 10px auto;
59 | }
60 |
61 | .subscribe-1 .email-subscribe {
62 | margin-bottom: 50px !important;
63 | }
64 | .newsletter-name{
65 | padding-right: 0px;
66 | }
67 | .newsletter-name input{
68 | border-radius: 10px 0px 0px 10px;
69 | }
70 | .newsletter-email{
71 | padding-left: 5px;
72 | padding-right: 5px;
73 | }
74 | .newsletter-email input{
75 | border-radius: 0px;
76 | margin-left: 10px;
77 |
78 | }
79 | .newsletter-submit{
80 | padding-left: 0px;
81 |
82 | }
83 | .newsletter-submit input{
84 | border-radius: 0px 10px 10px 0px;
85 | margin-left: 14px;
86 |
87 | }
88 | .social-profiles a i{
89 | transition: all .5s;
90 | }
91 | .social-profiles a:hover i{
92 | color: grey;
93 | }
94 | .sticky-nav .menu li a:hover {
95 | border-color: #C3BFBF;
96 | border-bottom-width: 2px;
97 | margin-bottom: 2px;
98 | }
99 |
100 | .sidebar-content .widget ul li a:hover{
101 | border-color: #C3BFBF;
102 | border-bottom-width: 2px;
103 | margin-top: 2px;
104 | margin-bottom: 2px;
105 | }
106 | .item .wp-post-image{
107 | height: auto;
108 | }
109 | @media screen and (min-width: 350px) and (max-width: 440px)
110 | {
111 | #DevPrograms{
112 | height: 90vh;
113 | }
114 | }
115 | @media screen and (min-width: 290px) and (max-width: 350px)
116 | {
117 | #DevPrograms{
118 | height: 115vh;
119 | }
120 | }
121 |
122 | @media screen and (min-width: 240px) and (max-width: 290px)
123 | {
124 | #DevPrograms{
125 | height: 120vh;
126 | }
127 | }
128 |
129 | @media screen and (max-width: 240px)
130 | {
131 | #DevPrograms{
132 | height: 180vh;
133 | }
134 | }
135 |
136 | /*css classes for hiding and showing Donation and regular supporter parts in donate.html*/
137 | .appear{
138 | display: block;
139 | }
140 | .hide{
141 | display: none;
142 | }
143 |
144 | .text-white a:focus {
145 | color: lightgray;
146 | border-bottom: 4px solid lightgray;
147 | text-decoration: none;
148 | }
149 |
150 | .text-white a:hover {
151 | color: white;
152 | border-bottom: 4px solid white;
153 | }
154 |
155 | .baddition{
156 | margin-left: 600px;
157 | }
158 | .background-image {
159 | width: 100%;
160 | }
161 |
162 | @media screen and (max-width: 560px){
163 | .price{
164 | font-size: 10vw !important;
165 | }
166 | }
167 |
168 | nav{
169 | -webkit-transition: top 0.7s ease-in-out !important;
170 | transition: top 0.7s ease-in-out !important;
171 | }
172 | .mobile-menu-toggle{
173 | position: absolute;
174 | top: -7px;
175 | }
176 | .embedded-video-holder{
177 | margin-top: 10px;
178 | }
179 | .has-submenu{
180 | position: relative;
181 | }
182 | .submenu{
183 | top: 0px;
184 | left: 100%;
185 | }
186 | .has-submenu > a:after{
187 | display: inline-block;
188 |
189 | font-family: 'Pe-icon-7-stroke';
190 | speak: none;
191 | font-style: normal;
192 | font-weight: normal;
193 | font-variant: normal;
194 | text-transform: none;
195 | line-height: 1;
196 | -webkit-font-smoothing: antialiased;
197 | -moz-osx-font-smoothing: grayscale;
198 | content: "\e684";
199 | color: #fff;
200 | font-size: 24px;
201 | position: absolute;
202 | top: 3px;
203 | right: 25px;
204 | color: #333;
205 | }
206 | .has-submenu:hover > a:after{
207 | color: #fff;
208 | }
209 | .nav-dropdown li:hover > a{
210 | color: #fff;
211 | }
212 | .equal-row{
213 | display: flex;
214 | flex-wrap: wrap;
215 | }
216 |
--------------------------------------------------------------------------------
/js/bootstrap/affix.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: affix.js v3.1.0
3 | * http://getbootstrap.com/javascript/#affix
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // AFFIX CLASS DEFINITION
14 | // ======================
15 |
16 | var Affix = function (element, options) {
17 | this.options = $.extend({}, Affix.DEFAULTS, options)
18 | this.$window = $(window)
19 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
20 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
21 |
22 | this.$element = $(element)
23 | this.affixed =
24 | this.unpin =
25 | this.pinnedOffset = null
26 |
27 | this.checkPosition()
28 | }
29 |
30 | Affix.RESET = 'affix affix-top affix-bottom'
31 |
32 | Affix.DEFAULTS = {
33 | offset: 0
34 | }
35 |
36 | Affix.prototype.getPinnedOffset = function () {
37 | if (this.pinnedOffset) return this.pinnedOffset
38 | this.$element.removeClass(Affix.RESET).addClass('affix')
39 | var scrollTop = this.$window.scrollTop()
40 | var position = this.$element.offset()
41 | return (this.pinnedOffset = position.top - scrollTop)
42 | }
43 |
44 | Affix.prototype.checkPositionWithEventLoop = function () {
45 | setTimeout($.proxy(this.checkPosition, this), 1)
46 | }
47 |
48 | Affix.prototype.checkPosition = function () {
49 | if (!this.$element.is(':visible')) return
50 |
51 | var scrollHeight = $(document).height()
52 | var scrollTop = this.$window.scrollTop()
53 | var position = this.$element.offset()
54 | var offset = this.options.offset
55 | var offsetTop = offset.top
56 | var offsetBottom = offset.bottom
57 |
58 | if (this.affixed == 'top') position.top += scrollTop
59 |
60 | if (typeof offset != 'object') offsetBottom = offsetTop = offset
61 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
62 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
63 |
64 | var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
65 | offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
66 | offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
67 |
68 | if (this.affixed === affix) return
69 | if (this.unpin) this.$element.css('top', '')
70 |
71 | var affixType = 'affix' + (affix ? '-' + affix : '')
72 | var e = $.Event(affixType + '.bs.affix')
73 |
74 | this.$element.trigger(e)
75 |
76 | if (e.isDefaultPrevented()) return
77 |
78 | this.affixed = affix
79 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
80 |
81 | this.$element
82 | .removeClass(Affix.RESET)
83 | .addClass(affixType)
84 | .trigger($.Event(affixType.replace('affix', 'affixed')))
85 |
86 | if (affix == 'bottom') {
87 | this.$element.offset({ top: scrollHeight - offsetBottom - this.$element.height() })
88 | }
89 | }
90 |
91 |
92 | // AFFIX PLUGIN DEFINITION
93 | // =======================
94 |
95 | var old = $.fn.affix
96 |
97 | $.fn.affix = function (option) {
98 | return this.each(function () {
99 | var $this = $(this)
100 | var data = $this.data('bs.affix')
101 | var options = typeof option == 'object' && option
102 |
103 | if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
104 | if (typeof option == 'string') data[option]()
105 | })
106 | }
107 |
108 | $.fn.affix.Constructor = Affix
109 |
110 |
111 | // AFFIX NO CONFLICT
112 | // =================
113 |
114 | $.fn.affix.noConflict = function () {
115 | $.fn.affix = old
116 | return this
117 | }
118 |
119 |
120 | // AFFIX DATA-API
121 | // ==============
122 |
123 | $(window).on('load', function () {
124 | $('[data-spy="affix"]').each(function () {
125 | var $spy = $(this)
126 | var data = $spy.data()
127 |
128 | data.offset = data.offset || {}
129 |
130 | if (data.offsetBottom) data.offset.bottom = data.offsetBottom
131 | if (data.offsetTop) data.offset.top = data.offsetTop
132 |
133 | $spy.affix(data)
134 | })
135 | })
136 |
137 | }(jQuery);
138 |
--------------------------------------------------------------------------------
/js/bootstrap/dropdown.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: dropdown.js v3.1.0
3 | * http://getbootstrap.com/javascript/#dropdowns
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // DROPDOWN CLASS DEFINITION
14 | // =========================
15 |
16 | var backdrop = '.dropdown-backdrop'
17 | var toggle = '[data-toggle=dropdown]'
18 | var Dropdown = function (element) {
19 | $(element).on('click.bs.dropdown', this.toggle)
20 | }
21 |
22 | Dropdown.prototype.toggle = function (e) {
23 | var $this = $(this)
24 |
25 | if ($this.is('.disabled, :disabled')) return
26 |
27 | var $parent = getParent($this)
28 | var isActive = $parent.hasClass('open')
29 |
30 | clearMenus()
31 |
32 | if (!isActive) {
33 | if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
34 | // if mobile we use a backdrop because click events don't delegate
35 | $('
').insertAfter($(this)).on('click', clearMenus)
36 | }
37 |
38 | var relatedTarget = { relatedTarget: this }
39 | $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
40 |
41 | if (e.isDefaultPrevented()) return
42 |
43 | $parent
44 | .toggleClass('open')
45 | .trigger('shown.bs.dropdown', relatedTarget)
46 |
47 | $this.focus()
48 | }
49 |
50 | return false
51 | }
52 |
53 | Dropdown.prototype.keydown = function (e) {
54 | if (!/(38|40|27)/.test(e.keyCode)) return
55 |
56 | var $this = $(this)
57 |
58 | e.preventDefault()
59 | e.stopPropagation()
60 |
61 | if ($this.is('.disabled, :disabled')) return
62 |
63 | var $parent = getParent($this)
64 | var isActive = $parent.hasClass('open')
65 |
66 | if (!isActive || (isActive && e.keyCode == 27)) {
67 | if (e.which == 27) $parent.find(toggle).focus()
68 | return $this.click()
69 | }
70 |
71 | var desc = ' li:not(.divider):visible a'
72 | var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
73 |
74 | if (!$items.length) return
75 |
76 | var index = $items.index($items.filter(':focus'))
77 |
78 | if (e.keyCode == 38 && index > 0) index-- // up
79 | if (e.keyCode == 40 && index < $items.length - 1) index++ // down
80 | if (!~index) index = 0
81 |
82 | $items.eq(index).focus()
83 | }
84 |
85 | function clearMenus(e) {
86 | $(backdrop).remove()
87 | $(toggle).each(function () {
88 | var $parent = getParent($(this))
89 | var relatedTarget = { relatedTarget: this }
90 | if (!$parent.hasClass('open')) return
91 | $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
92 | if (e.isDefaultPrevented()) return
93 | $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
94 | })
95 | }
96 |
97 | function getParent($this) {
98 | var selector = $this.attr('data-target')
99 |
100 | if (!selector) {
101 | selector = $this.attr('href')
102 | selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
103 | }
104 |
105 | var $parent = selector && $(selector)
106 |
107 | return $parent && $parent.length ? $parent : $this.parent()
108 | }
109 |
110 |
111 | // DROPDOWN PLUGIN DEFINITION
112 | // ==========================
113 |
114 | var old = $.fn.dropdown
115 |
116 | $.fn.dropdown = function (option) {
117 | return this.each(function () {
118 | var $this = $(this)
119 | var data = $this.data('bs.dropdown')
120 |
121 | if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
122 | if (typeof option == 'string') data[option].call($this)
123 | })
124 | }
125 |
126 | $.fn.dropdown.Constructor = Dropdown
127 |
128 |
129 | // DROPDOWN NO CONFLICT
130 | // ====================
131 |
132 | $.fn.dropdown.noConflict = function () {
133 | $.fn.dropdown = old
134 | return this
135 | }
136 |
137 |
138 | // APPLY TO STANDARD DROPDOWN ELEMENTS
139 | // ===================================
140 |
141 | $(document)
142 | .on('click.bs.dropdown.data-api', clearMenus)
143 | .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
144 | .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
145 | .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
146 |
147 | }(jQuery);
148 |
--------------------------------------------------------------------------------
/css/less/input-groups.less:
--------------------------------------------------------------------------------
1 | //
2 | // Input groups
3 | // --------------------------------------------------
4 |
5 | // Base styles
6 | // -------------------------
7 | .input-group {
8 | position: relative; // For dropdowns
9 | display: table;
10 | border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
11 |
12 | // Undo padding and float of grid classes
13 | &[class*="col-"] {
14 | float: none;
15 | padding-left: 0;
16 | padding-right: 0;
17 | }
18 |
19 | .form-control {
20 | // Ensure that the input is always above the *appended* addon button for
21 | // proper border colors.
22 | position: relative;
23 | z-index: 2;
24 |
25 | // IE9 fubars the placeholder attribute in text inputs and the arrows on
26 | // select elements in input groups. To fix it, we float the input. Details:
27 | // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855
28 | float: left;
29 |
30 | width: 100%;
31 | margin-bottom: 0;
32 | }
33 | }
34 |
35 | // Sizing options
36 | //
37 | // Remix the default form control sizing classes into new ones for easier
38 | // manipulation.
39 |
40 | .input-group-lg > .form-control,
41 | .input-group-lg > .input-group-addon,
42 | .input-group-lg > .input-group-btn > .btn { .input-lg(); }
43 | .input-group-sm > .form-control,
44 | .input-group-sm > .input-group-addon,
45 | .input-group-sm > .input-group-btn > .btn { .input-sm(); }
46 |
47 |
48 | // Display as table-cell
49 | // -------------------------
50 | .input-group-addon,
51 | .input-group-btn,
52 | .input-group .form-control {
53 | display: table-cell;
54 |
55 | &:not(:first-child):not(:last-child) {
56 | border-radius: 0;
57 | }
58 | }
59 | // Addon and addon wrapper for buttons
60 | .input-group-addon,
61 | .input-group-btn {
62 | width: 1%;
63 | white-space: nowrap;
64 | vertical-align: middle; // Match the inputs
65 | }
66 |
67 | // Text input groups
68 | // -------------------------
69 | .input-group-addon {
70 | padding: @padding-base-vertical @padding-base-horizontal;
71 | font-size: @font-size-base;
72 | font-weight: normal;
73 | line-height: 1;
74 | color: @input-color;
75 | text-align: center;
76 | background-color: @input-group-addon-bg;
77 | border: 1px solid @input-group-addon-border-color;
78 | border-radius: @border-radius-base;
79 |
80 | // Sizing
81 | &.input-sm {
82 | padding: @padding-small-vertical @padding-small-horizontal;
83 | font-size: @font-size-small;
84 | border-radius: @border-radius-small;
85 | }
86 | &.input-lg {
87 | padding: @padding-large-vertical @padding-large-horizontal;
88 | font-size: @font-size-large;
89 | border-radius: @border-radius-large;
90 | }
91 |
92 | // Nuke default margins from checkboxes and radios to vertically center within.
93 | input[type="radio"],
94 | input[type="checkbox"] {
95 | margin-top: 0;
96 | }
97 | }
98 |
99 | // Reset rounded corners
100 | .input-group .form-control:first-child,
101 | .input-group-addon:first-child,
102 | .input-group-btn:first-child > .btn,
103 | .input-group-btn:first-child > .btn-group > .btn,
104 | .input-group-btn:first-child > .dropdown-toggle,
105 | .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
106 | .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
107 | .border-right-radius(0);
108 | }
109 | .input-group-addon:first-child {
110 | border-right: 0;
111 | }
112 | .input-group .form-control:last-child,
113 | .input-group-addon:last-child,
114 | .input-group-btn:last-child > .btn,
115 | .input-group-btn:last-child > .btn-group > .btn,
116 | .input-group-btn:last-child > .dropdown-toggle,
117 | .input-group-btn:first-child > .btn:not(:first-child),
118 | .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
119 | .border-left-radius(0);
120 | }
121 | .input-group-addon:last-child {
122 | border-left: 0;
123 | }
124 |
125 | // Button input groups
126 | // -------------------------
127 | .input-group-btn {
128 | position: relative;
129 | // Jankily prevent input button groups from wrapping with `white-space` and
130 | // `font-size` in combination with `inline-block` on buttons.
131 | font-size: 0;
132 | white-space: nowrap;
133 |
134 | // Negative margin for spacing, position for bringing hovered/focused/actived
135 | // element above the siblings.
136 | > .btn {
137 | position: relative;
138 | + .btn {
139 | margin-left: -1px;
140 | }
141 | // Bring the "active" button to the front
142 | &:hover,
143 | &:focus,
144 | &:active {
145 | z-index: 2;
146 | }
147 | }
148 |
149 | // Negative margin to only have a 1px border between the two
150 | &:first-child {
151 | > .btn,
152 | > .btn-group {
153 | margin-right: -1px;
154 | }
155 | }
156 | &:last-child {
157 | > .btn,
158 | > .btn-group {
159 | margin-left: -1px;
160 | }
161 | }
162 | }
163 |
--------------------------------------------------------------------------------
/css/flexslider.css:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery FlexSlider v2.2.0
3 | * http://www.woothemes.com/flexslider/
4 | *
5 | * Copyright 2012 WooThemes
6 | * Free to use under the GPLv2 license.
7 | * http://www.gnu.org/licenses/gpl-2.0.html
8 | *
9 | * Contributing author: Tyler Smith (@mbmufffin)
10 | */
11 |
12 |
13 | /* Browser Resets
14 | *********************************/
15 | .flex-container a:active,
16 | .flexslider a:active,
17 | .flex-container a:focus,
18 | .flexslider a:focus {outline: none;}
19 | .slides,
20 | .flex-control-nav,
21 | .flex-direction-nav {margin: 0; padding: 0; list-style: none;}
22 |
23 |
24 | /* FlexSlider Necessary Styles
25 | *********************************/
26 | .flexslider {margin: 0; padding: 0;}
27 | .flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;} /* Hide the slides before the JS is loaded. Avoids image jumping */
28 | .flexslider .slides img {width: 100%; display: block;}
29 | .flex-pauseplay span {text-transform: capitalize;}
30 |
31 | /* Clearfix for the .slides element */
32 | .slides:after {content: "\0020"; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;}
33 | html[xmlns] .slides {display: block;}
34 | * html .slides {height: 1%;}
35 |
36 | /* No JavaScript Fallback */
37 | /* If you are not using another script, such as Modernizr, make sure you
38 | * include js that eliminates this class on page load */
39 | .no-js .slides > li:first-child {display: block;}
40 |
41 | /* FlexSlider Default Theme
42 | *********************************/
43 | .flexslider { margin: 0 0 60px; background: #fff; border: 4px solid #fff; position: relative; -webkit-border-radius: 4px; -moz-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.2); -moz-box-shadow: 0 1px 4px rgba(0,0,0,.2); -o-box-shadow: 0 1px 4px rgba(0,0,0,.2); box-shadow: 0 1px 4px rgba(0,0,0,.2); zoom: 1; }
44 | .flex-viewport { max-height: 2000px; -webkit-transition: all 1s ease; -moz-transition: all 1s ease; -o-transition: all 1s ease; transition: all 1s ease; }
45 | .loading .flex-viewport { max-height: 300px; }
46 | .flexslider .slides { zoom: 1; }
47 | .carousel li { margin-right: 5px; }
48 |
49 | /* Direction Nav */
50 | .flex-direction-nav {*height: 0;}
51 | .flex-direction-nav a { display: block; width: 60px; height: 60px; background: none; border: 2px solid #fff; border-radius: 50%; margin: -20px 0 0; position: absolute; top: 50%; z-index: 10; overflow: hidden; opacity: 1; cursor: pointer; color: rgba(0,0,0,0.8); text-shadow: 1px 1px 0 rgba(255,255,255,0.3); -webkit-transition: all .3s ease; -moz-transition: all .3s ease; transition: all .3s ease; cursor: pointer; }
52 | .flex-direction-nav a:hover{ background: rgba(255,255,255,0.3); }
53 | .flex-direction-nav .flex-prev { left: 17px; }
54 | .flex-direction-nav .flex-next { right: 17px; text-align: right; }
55 | .flexslider:hover .flex-prev { opacity: 0.7; left: 10px; }
56 | .flexslider:hover .flex-next { opacity: 0.7; right: 10px; }
57 | .flexslider:hover .flex-next:hover, .flexslider:hover .flex-prev:hover { opacity: 1; }
58 | .flex-disabled{ opacity: 0 !important; }
59 | .flex-direction-nav a:before { font-family: 'ElegantIcons'; font-size: 38px; display: inline-block; content: '#'; position: relative; top: -3px; color: #fff; left: 7px; padding-bottom: 22px; }
60 | .flex-direction-nav a.flex-next:before { content: '$'; right: 8px; left: -9px; }
61 |
62 | /* Pause/Play */
63 | .flex-pauseplay a { display: block; width: 20px; height: 20px; position: absolute; bottom: 5px; left: 10px; opacity: 0.8; z-index: 10; overflow: hidden; cursor: pointer; color: #000; }
64 | .flex-pauseplay a:before { font-family: "flexslider-icon"; font-size: 20px; display: inline-block; content: '\f004'; }
65 | .flex-pauseplay a:hover { opacity: 1; }
66 | .flex-pauseplay a.flex-play:before { content: '\f003'; }
67 |
68 | /* Control Nav */
69 | .flex-control-nav {width: 100%; position: absolute; bottom: 44px; text-align: center; z-index: 5;}
70 | .flex-control-nav li {margin: 0 5px; display: inline-block; zoom: 1; *display: inline;}
71 | .flex-control-paging li a {width: 8px; height: 8px; display: block; background: #fff; background: rgba(255,255,255,0.5); cursor: pointer; text-indent: -9999px; -webkit-border-radius: 50%; -moz-border-radius: 20px; -o-border-radius: 50%; border-radius: 50%; transition: all .5s ease; -webkit-transition: all .5s ease; -moz-transition: all .5s ease; }
72 | .flex-control-paging li a:hover { background: #fff; background: rgba(255,255,255,0.7); }
73 | .flex-control-paging li a.flex-active { background: #fff; background: rgba(255,255,255,0.9); cursor: default; }
74 |
75 | .flex-control-thumbs {margin: 5px 0 0; position: static; overflow: hidden;}
76 | .flex-control-thumbs li {width: 25%; float: left; margin: 0;}
77 | .flex-control-thumbs img {width: 100%; display: block; opacity: .7; cursor: pointer;}
78 | .flex-control-thumbs img:hover {opacity: 1;}
79 | .flex-control-thumbs .flex-active {opacity: 1; cursor: default;}
80 |
81 | @media screen and (max-width: 860px) {
82 | .flex-direction-nav .flex-prev { opacity: 1; left: 10px;}
83 | .flex-direction-nav .flex-next { opacity: 1; right: 10px;}
84 | }
85 |
--------------------------------------------------------------------------------
/js/bootstrap/scrollspy.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: scrollspy.js v3.1.0
3 | * http://getbootstrap.com/javascript/#scrollspy
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // SCROLLSPY CLASS DEFINITION
14 | // ==========================
15 |
16 | function ScrollSpy(element, options) {
17 | var href
18 | var process = $.proxy(this.process, this)
19 |
20 | this.$element = $(element).is('body') ? $(window) : $(element)
21 | this.$body = $('body')
22 | this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
23 | this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
24 | this.selector = (this.options.target
25 | || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
26 | || '') + ' .nav li > a'
27 | this.offsets = $([])
28 | this.targets = $([])
29 | this.activeTarget = null
30 |
31 | this.refresh()
32 | this.process()
33 | }
34 |
35 | ScrollSpy.DEFAULTS = {
36 | offset: 10
37 | }
38 |
39 | ScrollSpy.prototype.refresh = function () {
40 | var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
41 |
42 | this.offsets = $([])
43 | this.targets = $([])
44 |
45 | var self = this
46 | var $targets = this.$body
47 | .find(this.selector)
48 | .map(function () {
49 | var $el = $(this)
50 | var href = $el.data('target') || $el.attr('href')
51 | var $href = /^#./.test(href) && $(href)
52 |
53 | return ($href
54 | && $href.length
55 | && $href.is(':visible')
56 | && [[ $href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null
57 | })
58 | .sort(function (a, b) { return a[0] - b[0] })
59 | .each(function () {
60 | self.offsets.push(this[0])
61 | self.targets.push(this[1])
62 | })
63 | }
64 |
65 | ScrollSpy.prototype.process = function () {
66 | var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
67 | var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
68 | var maxScroll = scrollHeight - this.$scrollElement.height()
69 | var offsets = this.offsets
70 | var targets = this.targets
71 | var activeTarget = this.activeTarget
72 | var i
73 |
74 | if (scrollTop >= maxScroll) {
75 | return activeTarget != (i = targets.last()[0]) && this.activate(i)
76 | }
77 |
78 | if (activeTarget && scrollTop <= offsets[0]) {
79 | return activeTarget != (i = targets[0]) && this.activate(i)
80 | }
81 |
82 | for (i = offsets.length; i--;) {
83 | activeTarget != targets[i]
84 | && scrollTop >= offsets[i]
85 | && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
86 | && this.activate( targets[i] )
87 | }
88 | }
89 |
90 | ScrollSpy.prototype.activate = function (target) {
91 | this.activeTarget = target
92 |
93 | $(this.selector)
94 | .parentsUntil(this.options.target, '.active')
95 | .removeClass('active')
96 |
97 | var selector = this.selector +
98 | '[data-target="' + target + '"],' +
99 | this.selector + '[href="' + target + '"]'
100 |
101 | var active = $(selector)
102 | .parents('li')
103 | .addClass('active')
104 |
105 | if (active.parent('.dropdown-menu').length) {
106 | active = active
107 | .closest('li.dropdown')
108 | .addClass('active')
109 | }
110 |
111 | active.trigger('activate.bs.scrollspy')
112 | }
113 |
114 |
115 | // SCROLLSPY PLUGIN DEFINITION
116 | // ===========================
117 |
118 | var old = $.fn.scrollspy
119 |
120 | $.fn.scrollspy = function (option) {
121 | return this.each(function () {
122 | var $this = $(this)
123 | var data = $this.data('bs.scrollspy')
124 | var options = typeof option == 'object' && option
125 |
126 | if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
127 | if (typeof option == 'string') data[option]()
128 | })
129 | }
130 |
131 | $.fn.scrollspy.Constructor = ScrollSpy
132 |
133 |
134 | // SCROLLSPY NO CONFLICT
135 | // =====================
136 |
137 | $.fn.scrollspy.noConflict = function () {
138 | $.fn.scrollspy = old
139 | return this
140 | }
141 |
142 |
143 | // SCROLLSPY DATA-API
144 | // ==================
145 |
146 | $(window).on('load', function () {
147 | $('[data-spy="scroll"]').each(function () {
148 | var $spy = $(this)
149 | $spy.scrollspy($spy.data())
150 | })
151 | })
152 |
153 | }(jQuery);
154 |
--------------------------------------------------------------------------------
/js/bootstrap/collapse.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: collapse.js v3.1.0
3 | * http://getbootstrap.com/javascript/#collapse
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // COLLAPSE PUBLIC CLASS DEFINITION
14 | // ================================
15 |
16 | var Collapse = function (element, options) {
17 | this.$element = $(element)
18 | this.options = $.extend({}, Collapse.DEFAULTS, options)
19 | this.transitioning = null
20 |
21 | if (this.options.parent) this.$parent = $(this.options.parent)
22 | if (this.options.toggle) this.toggle()
23 | }
24 |
25 | Collapse.DEFAULTS = {
26 | toggle: true
27 | }
28 |
29 | Collapse.prototype.dimension = function () {
30 | var hasWidth = this.$element.hasClass('width')
31 | return hasWidth ? 'width' : 'height'
32 | }
33 |
34 | Collapse.prototype.show = function () {
35 | if (this.transitioning || this.$element.hasClass('in')) return
36 |
37 | var startEvent = $.Event('show.bs.collapse')
38 | this.$element.trigger(startEvent)
39 | if (startEvent.isDefaultPrevented()) return
40 |
41 | var actives = this.$parent && this.$parent.find('> .panel > .in')
42 |
43 | if (actives && actives.length) {
44 | var hasData = actives.data('bs.collapse')
45 | if (hasData && hasData.transitioning) return
46 | actives.collapse('hide')
47 | hasData || actives.data('bs.collapse', null)
48 | }
49 |
50 | var dimension = this.dimension()
51 |
52 | this.$element
53 | .removeClass('collapse')
54 | .addClass('collapsing')
55 | [dimension](0)
56 |
57 | this.transitioning = 1
58 |
59 | var complete = function () {
60 | this.$element
61 | .removeClass('collapsing')
62 | .addClass('collapse in')
63 | [dimension]('auto')
64 | this.transitioning = 0
65 | this.$element.trigger('shown.bs.collapse')
66 | }
67 |
68 | if (!$.support.transition) return complete.call(this)
69 |
70 | var scrollSize = $.camelCase(['scroll', dimension].join('-'))
71 |
72 | this.$element
73 | .one($.support.transition.end, $.proxy(complete, this))
74 | .emulateTransitionEnd(350)
75 | [dimension](this.$element[0][scrollSize])
76 | }
77 |
78 | Collapse.prototype.hide = function () {
79 | if (this.transitioning || !this.$element.hasClass('in')) return
80 |
81 | var startEvent = $.Event('hide.bs.collapse')
82 | this.$element.trigger(startEvent)
83 | if (startEvent.isDefaultPrevented()) return
84 |
85 | var dimension = this.dimension()
86 |
87 | this.$element
88 | [dimension](this.$element[dimension]())
89 | [0].offsetHeight
90 |
91 | this.$element
92 | .addClass('collapsing')
93 | .removeClass('collapse')
94 | .removeClass('in')
95 |
96 | this.transitioning = 1
97 |
98 | var complete = function () {
99 | this.transitioning = 0
100 | this.$element
101 | .trigger('hidden.bs.collapse')
102 | .removeClass('collapsing')
103 | .addClass('collapse')
104 | }
105 |
106 | if (!$.support.transition) return complete.call(this)
107 |
108 | this.$element
109 | [dimension](0)
110 | .one($.support.transition.end, $.proxy(complete, this))
111 | .emulateTransitionEnd(350)
112 | }
113 |
114 | Collapse.prototype.toggle = function () {
115 | this[this.$element.hasClass('in') ? 'hide' : 'show']()
116 | }
117 |
118 |
119 | // COLLAPSE PLUGIN DEFINITION
120 | // ==========================
121 |
122 | var old = $.fn.collapse
123 |
124 | $.fn.collapse = function (option) {
125 | return this.each(function () {
126 | var $this = $(this)
127 | var data = $this.data('bs.collapse')
128 | var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
129 |
130 | if (!data && options.toggle && option == 'show') option = !option
131 | if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
132 | if (typeof option == 'string') data[option]()
133 | })
134 | }
135 |
136 | $.fn.collapse.Constructor = Collapse
137 |
138 |
139 | // COLLAPSE NO CONFLICT
140 | // ====================
141 |
142 | $.fn.collapse.noConflict = function () {
143 | $.fn.collapse = old
144 | return this
145 | }
146 |
147 |
148 | // COLLAPSE DATA-API
149 | // =================
150 |
151 | $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
152 | var $this = $(this), href
153 | var target = $this.attr('data-target')
154 | || e.preventDefault()
155 | || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
156 | var $target = $(target)
157 | var data = $target.data('bs.collapse')
158 | var option = data ? 'toggle' : $this.data()
159 | var parent = $this.attr('data-parent')
160 | var $parent = parent && $(parent)
161 |
162 | if (!data || !data.transitioning) {
163 | if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
164 | $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
165 | }
166 |
167 | $target.collapse(option)
168 | })
169 |
170 | }(jQuery);
171 |
--------------------------------------------------------------------------------
/css/less/tables.less:
--------------------------------------------------------------------------------
1 | //
2 | // Tables
3 | // --------------------------------------------------
4 |
5 |
6 | table {
7 | max-width: 100%;
8 | background-color: @table-bg;
9 | }
10 | th {
11 | text-align: left;
12 | }
13 |
14 |
15 | // Baseline styles
16 |
17 | .table {
18 | width: 100%;
19 | margin-bottom: @line-height-computed;
20 | // Cells
21 | > thead,
22 | > tbody,
23 | > tfoot {
24 | > tr {
25 | > th,
26 | > td {
27 | padding: @table-cell-padding;
28 | line-height: @line-height-base;
29 | vertical-align: top;
30 | border-top: 1px solid @table-border-color;
31 | }
32 | }
33 | }
34 | // Bottom align for column headings
35 | > thead > tr > th {
36 | vertical-align: bottom;
37 | border-bottom: 2px solid @table-border-color;
38 | }
39 | // Remove top border from thead by default
40 | > caption + thead,
41 | > colgroup + thead,
42 | > thead:first-child {
43 | > tr:first-child {
44 | > th,
45 | > td {
46 | border-top: 0;
47 | }
48 | }
49 | }
50 | // Account for multiple tbody instances
51 | > tbody + tbody {
52 | border-top: 2px solid @table-border-color;
53 | }
54 |
55 | // Nesting
56 | .table {
57 | background-color: @body-bg;
58 | }
59 | }
60 |
61 |
62 | // Condensed table w/ half padding
63 |
64 | .table-condensed {
65 | > thead,
66 | > tbody,
67 | > tfoot {
68 | > tr {
69 | > th,
70 | > td {
71 | padding: @table-condensed-cell-padding;
72 | }
73 | }
74 | }
75 | }
76 |
77 |
78 | // Bordered version
79 | //
80 | // Add borders all around the table and between all the columns.
81 |
82 | .table-bordered {
83 | border: 1px solid @table-border-color;
84 | > thead,
85 | > tbody,
86 | > tfoot {
87 | > tr {
88 | > th,
89 | > td {
90 | border: 1px solid @table-border-color;
91 | }
92 | }
93 | }
94 | > thead > tr {
95 | > th,
96 | > td {
97 | border-bottom-width: 2px;
98 | }
99 | }
100 | }
101 |
102 |
103 | // Zebra-striping
104 | //
105 | // Default zebra-stripe styles (alternating gray and transparent backgrounds)
106 |
107 | .table-striped {
108 | > tbody > tr:nth-child(odd) {
109 | > td,
110 | > th {
111 | background-color: @table-bg-accent;
112 | }
113 | }
114 | }
115 |
116 |
117 | // Hover effect
118 | //
119 | // Placed here since it has to come after the potential zebra striping
120 |
121 | .table-hover {
122 | > tbody > tr:hover {
123 | > td,
124 | > th {
125 | background-color: @table-bg-hover;
126 | }
127 | }
128 | }
129 |
130 |
131 | // Table cell sizing
132 | //
133 | // Reset default table behavior
134 |
135 | table col[class*="col-"] {
136 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
137 | float: none;
138 | display: table-column;
139 | }
140 | table {
141 | td,
142 | th {
143 | &[class*="col-"] {
144 | position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)
145 | float: none;
146 | display: table-cell;
147 | }
148 | }
149 | }
150 |
151 |
152 | // Table backgrounds
153 | //
154 | // Exact selectors below required to override `.table-striped` and prevent
155 | // inheritance to nested tables.
156 |
157 | // Generate the contextual variants
158 | .table-row-variant(active; @table-bg-active);
159 | .table-row-variant(success; @state-success-bg);
160 | .table-row-variant(info; @state-info-bg);
161 | .table-row-variant(warning; @state-warning-bg);
162 | .table-row-variant(danger; @state-danger-bg);
163 |
164 |
165 | // Responsive tables
166 | //
167 | // Wrap your tables in `.table-responsive` and we'll make them mobile friendly
168 | // by enabling horizontal scrolling. Only applies <768px. Everything above that
169 | // will display normally.
170 |
171 | @media (max-width: @screen-xs-max) {
172 | .table-responsive {
173 | width: 100%;
174 | margin-bottom: (@line-height-computed * 0.75);
175 | overflow-y: hidden;
176 | overflow-x: scroll;
177 | -ms-overflow-style: -ms-autohiding-scrollbar;
178 | border: 1px solid @table-border-color;
179 | -webkit-overflow-scrolling: touch;
180 |
181 | // Tighten up spacing
182 | > .table {
183 | margin-bottom: 0;
184 |
185 | // Ensure the content doesn't wrap
186 | > thead,
187 | > tbody,
188 | > tfoot {
189 | > tr {
190 | > th,
191 | > td {
192 | white-space: nowrap;
193 | }
194 | }
195 | }
196 | }
197 |
198 | // Special overrides for the bordered tables
199 | > .table-bordered {
200 | border: 0;
201 |
202 | // Nuke the appropriate borders so that the parent can handle them
203 | > thead,
204 | > tbody,
205 | > tfoot {
206 | > tr {
207 | > th:first-child,
208 | > td:first-child {
209 | border-left: 0;
210 | }
211 | > th:last-child,
212 | > td:last-child {
213 | border-right: 0;
214 | }
215 | }
216 | }
217 |
218 | // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
219 | // chances are there will be only one `tr` in a `thead` and that would
220 | // remove the border altogether.
221 | > tbody,
222 | > tfoot {
223 | > tr:last-child {
224 | > th,
225 | > td {
226 | border-bottom: 0;
227 | }
228 | }
229 | }
230 |
231 | }
232 | }
233 | }
234 |
--------------------------------------------------------------------------------
/css/less/dropdowns.less:
--------------------------------------------------------------------------------
1 | //
2 | // Dropdown menus
3 | // --------------------------------------------------
4 |
5 |
6 | // Dropdown arrow/caret
7 | .caret {
8 | display: inline-block;
9 | width: 0;
10 | height: 0;
11 | margin-left: 2px;
12 | vertical-align: middle;
13 | border-top: @caret-width-base solid;
14 | border-right: @caret-width-base solid transparent;
15 | border-left: @caret-width-base solid transparent;
16 | }
17 |
18 | // The dropdown wrapper (div)
19 | .dropdown {
20 | position: relative;
21 | }
22 |
23 | // Prevent the focus on the dropdown toggle when closing dropdowns
24 | .dropdown-toggle:focus {
25 | outline: 0;
26 | }
27 |
28 | // The dropdown menu (ul)
29 | .dropdown-menu {
30 | position: absolute;
31 | top: 100%;
32 | left: 0;
33 | z-index: @zindex-dropdown;
34 | display: none; // none by default, but block on "open" of the menu
35 | float: left;
36 | min-width: 160px;
37 | padding: 5px 0;
38 | margin: 2px 0 0; // override default ul
39 | list-style: none;
40 | font-size: @font-size-base;
41 | background-color: @dropdown-bg;
42 | border: 1px solid @dropdown-fallback-border; // IE8 fallback
43 | border: 1px solid @dropdown-border;
44 | border-radius: @border-radius-base;
45 | .box-shadow(0 6px 12px rgba(0,0,0,.175));
46 | background-clip: padding-box;
47 |
48 | // Aligns the dropdown menu to right
49 | //
50 | // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
51 | &.pull-right {
52 | right: 0;
53 | left: auto;
54 | }
55 |
56 | // Dividers (basically an hr) within the dropdown
57 | .divider {
58 | .nav-divider(@dropdown-divider-bg);
59 | }
60 |
61 | // Links within the dropdown menu
62 | > li > a {
63 | display: block;
64 | padding: 3px 20px;
65 | clear: both;
66 | font-weight: normal;
67 | line-height: @line-height-base;
68 | color: @dropdown-link-color;
69 | white-space: nowrap; // prevent links from randomly breaking onto new lines
70 | }
71 | }
72 |
73 | // Hover/Focus state
74 | .dropdown-menu > li > a {
75 | &:hover,
76 | &:focus {
77 | text-decoration: none;
78 | color: @dropdown-link-hover-color;
79 | background-color: @dropdown-link-hover-bg;
80 | }
81 | }
82 |
83 | // Active state
84 | .dropdown-menu > .active > a {
85 | &,
86 | &:hover,
87 | &:focus {
88 | color: @dropdown-link-active-color;
89 | text-decoration: none;
90 | outline: 0;
91 | background-color: @dropdown-link-active-bg;
92 | }
93 | }
94 |
95 | // Disabled state
96 | //
97 | // Gray out text and ensure the hover/focus state remains gray
98 |
99 | .dropdown-menu > .disabled > a {
100 | &,
101 | &:hover,
102 | &:focus {
103 | color: @dropdown-link-disabled-color;
104 | }
105 | }
106 | // Nuke hover/focus effects
107 | .dropdown-menu > .disabled > a {
108 | &:hover,
109 | &:focus {
110 | text-decoration: none;
111 | background-color: transparent;
112 | background-image: none; // Remove CSS gradient
113 | .reset-filter();
114 | cursor: not-allowed;
115 | }
116 | }
117 |
118 | // Open state for the dropdown
119 | .open {
120 | // Show the menu
121 | > .dropdown-menu {
122 | display: block;
123 | }
124 |
125 | // Remove the outline when :focus is triggered
126 | > a {
127 | outline: 0;
128 | }
129 | }
130 |
131 | // Menu positioning
132 | //
133 | // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
134 | // menu with the parent.
135 | .dropdown-menu-right {
136 | left: auto; // Reset the default from `.dropdown-menu`
137 | right: 0;
138 | }
139 | // With v3, we enabled auto-flipping if you have a dropdown within a right
140 | // aligned nav component. To enable the undoing of that, we provide an override
141 | // to restore the default dropdown menu alignment.
142 | //
143 | // This is only for left-aligning a dropdown menu within a `.navbar-right` or
144 | // `.pull-right` nav component.
145 | .dropdown-menu-left {
146 | left: 0;
147 | right: auto;
148 | }
149 |
150 | // Dropdown section headers
151 | .dropdown-header {
152 | display: block;
153 | padding: 3px 20px;
154 | font-size: @font-size-small;
155 | line-height: @line-height-base;
156 | color: @dropdown-header-color;
157 | }
158 |
159 | // Backdrop to catch body clicks on mobile, etc.
160 | .dropdown-backdrop {
161 | position: fixed;
162 | left: 0;
163 | right: 0;
164 | bottom: 0;
165 | top: 0;
166 | z-index: (@zindex-dropdown - 10);
167 | }
168 |
169 | // Right aligned dropdowns
170 | .pull-right > .dropdown-menu {
171 | right: 0;
172 | left: auto;
173 | }
174 |
175 | // Allow for dropdowns to go bottom up (aka, dropup-menu)
176 | //
177 | // Just add .dropup after the standard .dropdown class and you're set, bro.
178 | // TODO: abstract this so that the navbar fixed styles are not placed here?
179 |
180 | .dropup,
181 | .navbar-fixed-bottom .dropdown {
182 | // Reverse the caret
183 | .caret {
184 | border-top: 0;
185 | border-bottom: @caret-width-base solid;
186 | content: "";
187 | }
188 | // Different positioning for bottom up menu
189 | .dropdown-menu {
190 | top: auto;
191 | bottom: 100%;
192 | margin-bottom: 1px;
193 | }
194 | }
195 |
196 |
197 | // Component alignment
198 | //
199 | // Reiterate per navbar.less and the modified component alignment there.
200 |
201 | @media (min-width: @grid-float-breakpoint) {
202 | .navbar-right {
203 | .dropdown-menu {
204 | .dropdown-menu-right();
205 | }
206 | // Necessary for overrides of the default right aligned menu.
207 | // Will remove come v4 in all likelihood.
208 | .dropdown-menu-left {
209 | .dropdown-menu-left();
210 | }
211 | }
212 | }
213 |
214 |
--------------------------------------------------------------------------------
/css/less/carousel.less:
--------------------------------------------------------------------------------
1 | //
2 | // Carousel
3 | // --------------------------------------------------
4 |
5 |
6 | // Wrapper for the slide container and indicators
7 | .carousel {
8 | position: relative;
9 | }
10 |
11 | .carousel-inner {
12 | position: relative;
13 | overflow: hidden;
14 | width: 100%;
15 |
16 | > .item {
17 | display: none;
18 | position: relative;
19 | .transition(.6s ease-in-out left);
20 |
21 | // Account for jankitude on images
22 | > img,
23 | > a > img {
24 | &:extend(.img-responsive);
25 | line-height: 1;
26 | }
27 | }
28 |
29 | > .active,
30 | > .next,
31 | > .prev { display: block; }
32 |
33 | > .active {
34 | left: 0;
35 | }
36 |
37 | > .next,
38 | > .prev {
39 | position: absolute;
40 | top: 0;
41 | width: 100%;
42 | }
43 |
44 | > .next {
45 | left: 100%;
46 | }
47 | > .prev {
48 | left: -100%;
49 | }
50 | > .next.left,
51 | > .prev.right {
52 | left: 0;
53 | }
54 |
55 | > .active.left {
56 | left: -100%;
57 | }
58 | > .active.right {
59 | left: 100%;
60 | }
61 |
62 | }
63 |
64 | // Left/right controls for nav
65 | // ---------------------------
66 |
67 | .carousel-control {
68 | position: absolute;
69 | top: 0;
70 | left: 0;
71 | bottom: 0;
72 | width: @carousel-control-width;
73 | .opacity(@carousel-control-opacity);
74 | font-size: @carousel-control-font-size;
75 | color: @carousel-control-color;
76 | text-align: center;
77 | text-shadow: @carousel-text-shadow;
78 | // We can't have this transition here because WebKit cancels the carousel
79 | // animation if you trip this while in the middle of another animation.
80 |
81 | // Set gradients for backgrounds
82 | &.left {
83 | #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
84 | }
85 | &.right {
86 | left: auto;
87 | right: 0;
88 | #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
89 | }
90 |
91 | // Hover/focus state
92 | &:hover,
93 | &:focus {
94 | outline: none;
95 | color: @carousel-control-color;
96 | text-decoration: none;
97 | .opacity(.9);
98 | }
99 |
100 | // Toggles
101 | .icon-prev,
102 | .icon-next,
103 | .glyphicon-chevron-left,
104 | .glyphicon-chevron-right {
105 | position: absolute;
106 | top: 50%;
107 | z-index: 5;
108 | display: inline-block;
109 | }
110 | .icon-prev,
111 | .glyphicon-chevron-left {
112 | left: 50%;
113 | }
114 | .icon-next,
115 | .glyphicon-chevron-right {
116 | right: 50%;
117 | }
118 | .icon-prev,
119 | .icon-next {
120 | width: 20px;
121 | height: 20px;
122 | margin-top: -10px;
123 | margin-left: -10px;
124 | font-family: serif;
125 | }
126 |
127 | .icon-prev {
128 | &:before {
129 | content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
130 | }
131 | }
132 | .icon-next {
133 | &:before {
134 | content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
135 | }
136 | }
137 | }
138 |
139 | // Optional indicator pips
140 | //
141 | // Add an unordered list with the following class and add a list item for each
142 | // slide your carousel holds.
143 |
144 | .carousel-indicators {
145 | position: absolute;
146 | bottom: 10px;
147 | left: 50%;
148 | z-index: 15;
149 | width: 60%;
150 | margin-left: -30%;
151 | padding-left: 0;
152 | list-style: none;
153 | text-align: center;
154 |
155 | li {
156 | display: inline-block;
157 | width: 10px;
158 | height: 10px;
159 | margin: 1px;
160 | text-indent: -999px;
161 | border: 1px solid @carousel-indicator-border-color;
162 | border-radius: 10px;
163 | cursor: pointer;
164 |
165 | // IE8-9 hack for event handling
166 | //
167 | // Internet Explorer 8-9 does not support clicks on elements without a set
168 | // `background-color`. We cannot use `filter` since that's not viewed as a
169 | // background color by the browser. Thus, a hack is needed.
170 | //
171 | // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
172 | // set alpha transparency for the best results possible.
173 | background-color: #000 \9; // IE8
174 | background-color: rgba(0,0,0,0); // IE9
175 | }
176 | .active {
177 | margin: 0;
178 | width: 12px;
179 | height: 12px;
180 | background-color: @carousel-indicator-active-bg;
181 | }
182 | }
183 |
184 | // Optional captions
185 | // -----------------------------
186 | // Hidden by default for smaller viewports
187 | .carousel-caption {
188 | position: absolute;
189 | left: 15%;
190 | right: 15%;
191 | bottom: 20px;
192 | z-index: 10;
193 | padding-top: 20px;
194 | padding-bottom: 20px;
195 | color: @carousel-caption-color;
196 | text-align: center;
197 | text-shadow: @carousel-text-shadow;
198 | & .btn {
199 | text-shadow: none; // No shadow for button elements in carousel-caption
200 | }
201 | }
202 |
203 |
204 | // Scale up controls for tablets and up
205 | @media screen and (min-width: @screen-sm-min) {
206 |
207 | // Scale up the controls a smidge
208 | .carousel-control {
209 | .glyphicon-chevron-left,
210 | .glyphicon-chevron-right,
211 | .icon-prev,
212 | .icon-next {
213 | width: 30px;
214 | height: 30px;
215 | margin-top: -15px;
216 | margin-left: -15px;
217 | font-size: 30px;
218 | }
219 | }
220 |
221 | // Show and left align the captions
222 | .carousel-caption {
223 | left: 20%;
224 | right: 20%;
225 | padding-bottom: 30px;
226 | }
227 |
228 | // Move up the indicators
229 | .carousel-indicators {
230 | bottom: 20px;
231 | }
232 | }
233 |
--------------------------------------------------------------------------------
/css/less/navs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Navs
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | // --------------------------------------------------
8 |
9 | .nav {
10 | margin-bottom: 0;
11 | padding-left: 0; // Override default ul/ol
12 | list-style: none;
13 | &:extend(.clearfix all);
14 |
15 | > li {
16 | position: relative;
17 | display: block;
18 |
19 | > a {
20 | position: relative;
21 | display: block;
22 | padding: @nav-link-padding;
23 | &:hover,
24 | &:focus {
25 | text-decoration: none;
26 | background-color: @nav-link-hover-bg;
27 | }
28 | }
29 |
30 | // Disabled state sets text to gray and nukes hover/tab effects
31 | &.disabled > a {
32 | color: @nav-disabled-link-color;
33 |
34 | &:hover,
35 | &:focus {
36 | color: @nav-disabled-link-hover-color;
37 | text-decoration: none;
38 | background-color: transparent;
39 | cursor: not-allowed;
40 | }
41 | }
42 | }
43 |
44 | // Open dropdowns
45 | .open > a {
46 | &,
47 | &:hover,
48 | &:focus {
49 | background-color: @nav-link-hover-bg;
50 | border-color: @link-color;
51 | }
52 | }
53 |
54 | // Nav dividers (deprecated with v3.0.1)
55 | //
56 | // This should have been removed in v3 with the dropping of `.nav-list`, but
57 | // we missed it. We don't currently support this anywhere, but in the interest
58 | // of maintaining backward compatibility in case you use it, it's deprecated.
59 | .nav-divider {
60 | .nav-divider();
61 | }
62 |
63 | // Prevent IE8 from misplacing imgs
64 | //
65 | // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
66 | > li > a > img {
67 | max-width: none;
68 | }
69 | }
70 |
71 |
72 | // Tabs
73 | // -------------------------
74 |
75 | // Give the tabs something to sit on
76 | .nav-tabs {
77 | border-bottom: 1px solid @nav-tabs-border-color;
78 | > li {
79 | float: left;
80 | // Make the list-items overlay the bottom border
81 | margin-bottom: -1px;
82 |
83 | // Actual tabs (as links)
84 | > a {
85 | margin-right: 2px;
86 | line-height: @line-height-base;
87 | border: 1px solid transparent;
88 | border-radius: @border-radius-base @border-radius-base 0 0;
89 | &:hover {
90 | border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
91 | }
92 | }
93 |
94 | // Active state, and its :hover to override normal :hover
95 | &.active > a {
96 | &,
97 | &:hover,
98 | &:focus {
99 | color: @nav-tabs-active-link-hover-color;
100 | background-color: @nav-tabs-active-link-hover-bg;
101 | border: 1px solid @nav-tabs-active-link-hover-border-color;
102 | border-bottom-color: transparent;
103 | cursor: default;
104 | }
105 | }
106 | }
107 | // pulling this in mainly for less shorthand
108 | &.nav-justified {
109 | .nav-justified();
110 | .nav-tabs-justified();
111 | }
112 | }
113 |
114 |
115 | // Pills
116 | // -------------------------
117 | .nav-pills {
118 | > li {
119 | float: left;
120 |
121 | // Links rendered as pills
122 | > a {
123 | border-radius: @nav-pills-border-radius;
124 | }
125 | + li {
126 | margin-left: 2px;
127 | }
128 |
129 | // Active state
130 | &.active > a {
131 | &,
132 | &:hover,
133 | &:focus {
134 | color: @nav-pills-active-link-hover-color;
135 | background-color: @nav-pills-active-link-hover-bg;
136 | }
137 | }
138 | }
139 | }
140 |
141 |
142 | // Stacked pills
143 | .nav-stacked {
144 | > li {
145 | float: none;
146 | + li {
147 | margin-top: 2px;
148 | margin-left: 0; // no need for this gap between nav items
149 | }
150 | }
151 | }
152 |
153 |
154 | // Nav variations
155 | // --------------------------------------------------
156 |
157 | // Justified nav links
158 | // -------------------------
159 |
160 | .nav-justified {
161 | width: 100%;
162 |
163 | > li {
164 | float: none;
165 | > a {
166 | text-align: center;
167 | margin-bottom: 5px;
168 | }
169 | }
170 |
171 | > .dropdown .dropdown-menu {
172 | top: auto;
173 | left: auto;
174 | }
175 |
176 | @media (min-width: @screen-sm-min) {
177 | > li {
178 | display: table-cell;
179 | width: 1%;
180 | > a {
181 | margin-bottom: 0;
182 | }
183 | }
184 | }
185 | }
186 |
187 | // Move borders to anchors instead of bottom of list
188 | //
189 | // Mixin for adding on top the shared `.nav-justified` styles for our tabs
190 | .nav-tabs-justified {
191 | border-bottom: 0;
192 |
193 | > li > a {
194 | // Override margin from .nav-tabs
195 | margin-right: 0;
196 | border-radius: @border-radius-base;
197 | }
198 |
199 | > .active > a,
200 | > .active > a:hover,
201 | > .active > a:focus {
202 | border: 1px solid @nav-tabs-justified-link-border-color;
203 | }
204 |
205 | @media (min-width: @screen-sm-min) {
206 | > li > a {
207 | border-bottom: 1px solid @nav-tabs-justified-link-border-color;
208 | border-radius: @border-radius-base @border-radius-base 0 0;
209 | }
210 | > .active > a,
211 | > .active > a:hover,
212 | > .active > a:focus {
213 | border-bottom-color: @nav-tabs-justified-active-link-border-color;
214 | }
215 | }
216 | }
217 |
218 |
219 | // Tabbable tabs
220 | // -------------------------
221 |
222 | // Hide tabbable panes to start, show them when `.active`
223 | .tab-content {
224 | > .tab-pane {
225 | display: none;
226 | }
227 | > .active {
228 | display: block;
229 | }
230 | }
231 |
232 |
233 | // Dropdowns
234 | // -------------------------
235 |
236 | // Specific dropdowns
237 | .nav-tabs .dropdown-menu {
238 | // make dropdown border overlap tab border
239 | margin-top: -1px;
240 | // Remove the top rounded corners here since there is a hard edge above the menu
241 | .border-top-radius(0);
242 | }
243 |
--------------------------------------------------------------------------------
/css/less/button-groups.less:
--------------------------------------------------------------------------------
1 | //
2 | // Button groups
3 | // --------------------------------------------------
4 |
5 | // Make the div behave like a button
6 | .btn-group,
7 | .btn-group-vertical {
8 | position: relative;
9 | display: inline-block;
10 | vertical-align: middle; // match .btn alignment given font-size hack above
11 | > .btn {
12 | position: relative;
13 | float: left;
14 | // Bring the "active" button to the front
15 | &:hover,
16 | &:focus,
17 | &:active,
18 | &.active {
19 | z-index: 2;
20 | }
21 | &:focus {
22 | // Remove focus outline when dropdown JS adds it after closing the menu
23 | outline: none;
24 | }
25 | }
26 | }
27 |
28 | // Prevent double borders when buttons are next to each other
29 | .btn-group {
30 | .btn + .btn,
31 | .btn + .btn-group,
32 | .btn-group + .btn,
33 | .btn-group + .btn-group {
34 | margin-left: -1px;
35 | }
36 | }
37 |
38 | // Optional: Group multiple button groups together for a toolbar
39 | .btn-toolbar {
40 | margin-left: -5px; // Offset the first child's margin
41 | &:extend(.clearfix all);
42 |
43 | .btn-group,
44 | .input-group {
45 | float: left;
46 | }
47 | > .btn,
48 | > .btn-group,
49 | > .input-group {
50 | margin-left: 5px;
51 | }
52 | }
53 |
54 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
55 | border-radius: 0;
56 | }
57 |
58 | // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
59 | .btn-group > .btn:first-child {
60 | margin-left: 0;
61 | &:not(:last-child):not(.dropdown-toggle) {
62 | .border-right-radius(0);
63 | }
64 | }
65 | // Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
66 | .btn-group > .btn:last-child:not(:first-child),
67 | .btn-group > .dropdown-toggle:not(:first-child) {
68 | .border-left-radius(0);
69 | }
70 |
71 | // Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
72 | .btn-group > .btn-group {
73 | float: left;
74 | }
75 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
76 | border-radius: 0;
77 | }
78 | .btn-group > .btn-group:first-child {
79 | > .btn:last-child,
80 | > .dropdown-toggle {
81 | .border-right-radius(0);
82 | }
83 | }
84 | .btn-group > .btn-group:last-child > .btn:first-child {
85 | .border-left-radius(0);
86 | }
87 |
88 | // On active and open, don't show outline
89 | .btn-group .dropdown-toggle:active,
90 | .btn-group.open .dropdown-toggle {
91 | outline: 0;
92 | }
93 |
94 |
95 | // Sizing
96 | //
97 | // Remix the default button sizing classes into new ones for easier manipulation.
98 |
99 | .btn-group-xs > .btn { &:extend(.btn-xs); }
100 | .btn-group-sm > .btn { &:extend(.btn-sm); }
101 | .btn-group-lg > .btn { &:extend(.btn-lg); }
102 |
103 |
104 | // Split button dropdowns
105 | // ----------------------
106 |
107 | // Give the line between buttons some depth
108 | .btn-group > .btn + .dropdown-toggle {
109 | padding-left: 8px;
110 | padding-right: 8px;
111 | }
112 | .btn-group > .btn-lg + .dropdown-toggle {
113 | padding-left: 12px;
114 | padding-right: 12px;
115 | }
116 |
117 | // The clickable button for toggling the menu
118 | // Remove the gradient and set the same inset shadow as the :active state
119 | .btn-group.open .dropdown-toggle {
120 | .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
121 |
122 | // Show no shadow for `.btn-link` since it has no other button styles.
123 | &.btn-link {
124 | .box-shadow(none);
125 | }
126 | }
127 |
128 |
129 | // Reposition the caret
130 | .btn .caret {
131 | margin-left: 0;
132 | }
133 | // Carets in other button sizes
134 | .btn-lg .caret {
135 | border-width: @caret-width-large @caret-width-large 0;
136 | border-bottom-width: 0;
137 | }
138 | // Upside down carets for .dropup
139 | .dropup .btn-lg .caret {
140 | border-width: 0 @caret-width-large @caret-width-large;
141 | }
142 |
143 |
144 | // Vertical button groups
145 | // ----------------------
146 |
147 | .btn-group-vertical {
148 | > .btn,
149 | > .btn-group,
150 | > .btn-group > .btn {
151 | display: block;
152 | float: none;
153 | width: 100%;
154 | max-width: 100%;
155 | }
156 |
157 | // Clear floats so dropdown menus can be properly placed
158 | > .btn-group {
159 | &:extend(.clearfix all);
160 | > .btn {
161 | float: none;
162 | }
163 | }
164 |
165 | > .btn + .btn,
166 | > .btn + .btn-group,
167 | > .btn-group + .btn,
168 | > .btn-group + .btn-group {
169 | margin-top: -1px;
170 | margin-left: 0;
171 | }
172 | }
173 |
174 | .btn-group-vertical > .btn {
175 | &:not(:first-child):not(:last-child) {
176 | border-radius: 0;
177 | }
178 | &:first-child:not(:last-child) {
179 | border-top-right-radius: @border-radius-base;
180 | .border-bottom-radius(0);
181 | }
182 | &:last-child:not(:first-child) {
183 | border-bottom-left-radius: @border-radius-base;
184 | .border-top-radius(0);
185 | }
186 | }
187 | .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
188 | border-radius: 0;
189 | }
190 | .btn-group-vertical > .btn-group:first-child:not(:last-child) {
191 | > .btn:last-child,
192 | > .dropdown-toggle {
193 | .border-bottom-radius(0);
194 | }
195 | }
196 | .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
197 | .border-top-radius(0);
198 | }
199 |
200 |
201 |
202 | // Justified button groups
203 | // ----------------------
204 |
205 | .btn-group-justified {
206 | display: table;
207 | width: 100%;
208 | table-layout: fixed;
209 | border-collapse: separate;
210 | > .btn,
211 | > .btn-group {
212 | float: none;
213 | display: table-cell;
214 | width: 1%;
215 | }
216 | > .btn-group .btn {
217 | width: 100%;
218 | }
219 | }
220 |
221 |
222 | // Checkbox and radio options
223 | [data-toggle="buttons"] > .btn > input[type="radio"],
224 | [data-toggle="buttons"] > .btn > input[type="checkbox"] {
225 | display: none;
226 | }
227 |
--------------------------------------------------------------------------------
/css/less/panels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Panels
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .panel {
8 | margin-bottom: @line-height-computed;
9 | background-color: @panel-bg;
10 | border: 1px solid transparent;
11 | border-radius: @panel-border-radius;
12 | .box-shadow(0 1px 1px rgba(0,0,0,.05));
13 | }
14 |
15 | // Panel contents
16 | .panel-body {
17 | padding: @panel-body-padding;
18 | &:extend(.clearfix all);
19 | }
20 |
21 | // Optional heading
22 | .panel-heading {
23 | padding: 10px 15px;
24 | border-bottom: 1px solid transparent;
25 | .border-top-radius((@panel-border-radius - 1));
26 |
27 | > .dropdown .dropdown-toggle {
28 | color: inherit;
29 | }
30 | }
31 |
32 | // Within heading, strip any `h*` tag of its default margins for spacing.
33 | .panel-title {
34 | margin-top: 0;
35 | margin-bottom: 0;
36 | font-size: ceil((@font-size-base * 1.125));
37 | color: inherit;
38 |
39 | > a {
40 | color: inherit;
41 | }
42 | }
43 |
44 | // Optional footer (stays gray in every modifier class)
45 | .panel-footer {
46 | padding: 10px 15px;
47 | background-color: @panel-footer-bg;
48 | border-top: 1px solid @panel-inner-border;
49 | .border-bottom-radius((@panel-border-radius - 1));
50 | }
51 |
52 |
53 | // List groups in panels
54 | //
55 | // By default, space out list group content from panel headings to account for
56 | // any kind of custom content between the two.
57 |
58 | .panel {
59 | > .list-group {
60 | margin-bottom: 0;
61 |
62 | .list-group-item {
63 | border-width: 1px 0;
64 | border-radius: 0;
65 | }
66 |
67 | // Add border top radius for first one
68 | &:first-child {
69 | .list-group-item:first-child {
70 | border-top: 0;
71 | .border-top-radius((@panel-border-radius - 1));
72 | }
73 | }
74 | // Add border bottom radius for last one
75 | &:last-child {
76 | .list-group-item:last-child {
77 | border-bottom: 0;
78 | .border-bottom-radius((@panel-border-radius - 1));
79 | }
80 | }
81 | }
82 | }
83 | // Collapse space between when there's no additional content.
84 | .panel-heading + .list-group {
85 | .list-group-item:first-child {
86 | border-top-width: 0;
87 | }
88 | }
89 |
90 |
91 | // Tables in panels
92 | //
93 | // Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
94 | // watch it go full width.
95 |
96 | .panel {
97 | > .table,
98 | > .table-responsive > .table {
99 | margin-bottom: 0;
100 | }
101 | // Add border top radius for first one
102 | > .table:first-child,
103 | > .table-responsive:first-child > .table:first-child {
104 | .border-top-radius((@panel-border-radius - 1));
105 |
106 | > thead:first-child,
107 | > tbody:first-child {
108 | > tr:first-child {
109 | td:first-child,
110 | th:first-child {
111 | border-top-left-radius: (@panel-border-radius - 1);
112 | }
113 | td:last-child,
114 | th:last-child {
115 | border-top-right-radius: (@panel-border-radius - 1);
116 | }
117 | }
118 | }
119 | }
120 | // Add border bottom radius for last one
121 | > .table:last-child,
122 | > .table-responsive:last-child > .table:last-child {
123 | .border-bottom-radius((@panel-border-radius - 1));
124 |
125 | > tbody:last-child,
126 | > tfoot:last-child {
127 | > tr:last-child {
128 | td:first-child,
129 | th:first-child {
130 | border-bottom-left-radius: (@panel-border-radius - 1);
131 | }
132 | td:last-child,
133 | th:last-child {
134 | border-bottom-right-radius: (@panel-border-radius - 1);
135 | }
136 | }
137 | }
138 | }
139 | > .panel-body + .table,
140 | > .panel-body + .table-responsive {
141 | border-top: 1px solid @table-border-color;
142 | }
143 | > .table > tbody:first-child > tr:first-child th,
144 | > .table > tbody:first-child > tr:first-child td {
145 | border-top: 0;
146 | }
147 | > .table-bordered,
148 | > .table-responsive > .table-bordered {
149 | border: 0;
150 | > thead,
151 | > tbody,
152 | > tfoot {
153 | > tr {
154 | > th:first-child,
155 | > td:first-child {
156 | border-left: 0;
157 | }
158 | > th:last-child,
159 | > td:last-child {
160 | border-right: 0;
161 | }
162 | }
163 | }
164 | > thead,
165 | > tbody {
166 | > tr:first-child {
167 | > td,
168 | > th {
169 | border-bottom: 0;
170 | }
171 | }
172 | }
173 | > tbody,
174 | > tfoot {
175 | > tr:last-child {
176 | > td,
177 | > th {
178 | border-bottom: 0;
179 | }
180 | }
181 | }
182 | }
183 | > .table-responsive {
184 | border: 0;
185 | margin-bottom: 0;
186 | }
187 | }
188 |
189 |
190 | // Collapsable panels (aka, accordion)
191 | //
192 | // Wrap a series of panels in `.panel-group` to turn them into an accordion with
193 | // the help of our collapse JavaScript plugin.
194 |
195 | .panel-group {
196 | margin-bottom: @line-height-computed;
197 |
198 | // Tighten up margin so it's only between panels
199 | .panel {
200 | margin-bottom: 0;
201 | border-radius: @panel-border-radius;
202 | overflow: hidden; // crop contents when collapsed
203 | + .panel {
204 | margin-top: 5px;
205 | }
206 | }
207 |
208 | .panel-heading {
209 | border-bottom: 0;
210 | + .panel-collapse .panel-body {
211 | border-top: 1px solid @panel-inner-border;
212 | }
213 | }
214 | .panel-footer {
215 | border-top: 0;
216 | + .panel-collapse .panel-body {
217 | border-bottom: 1px solid @panel-inner-border;
218 | }
219 | }
220 | }
221 |
222 |
223 | // Contextual variations
224 | .panel-default {
225 | .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
226 | }
227 | .panel-primary {
228 | .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);
229 | }
230 | .panel-success {
231 | .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);
232 | }
233 | .panel-info {
234 | .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);
235 | }
236 | .panel-warning {
237 | .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);
238 | }
239 | .panel-danger {
240 | .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);
241 | }
242 |
--------------------------------------------------------------------------------
/js/tweetsfetcher.js:
--------------------------------------------------------------------------------
1 | /* Taken from https://github.com/fossasia/fossasia-loklak-webtweets/blob/gh-pages/js/tweets.js */
2 |
3 | var interval_id = null;
4 |
5 | function Interval() {
6 | if (interval_id !== null){
7 | clearInterval(interval_id)
8 | interval_id = window.setInterval(nextTweet, 6600); //6.6 secs
9 | } else{
10 | interval_id = window.setInterval(nextTweet, 6600); //6.6 secs
11 | }
12 | }
13 |
14 | function datafetcher() {
15 | loklakFetcher.getTweets({}, datahandler);
16 | Interval();
17 | }
18 |
19 | function datahandler(raw) {
20 | stuff = raw; //Makes the data available globally.
21 | parser(stuff);
22 | }
23 |
24 | var tweetNum = 0;
25 |
26 | function parseFunc(){
27 | parser(stuff)
28 | }
29 |
30 | function nextTweet() {
31 | tweetNum += 1;
32 | var tweetsEl = document.getElementsByClassName('tweets-feed')[0];
33 | //go back to the first tweet if it's greater than the amount of tweets available
34 | if(tweetNum == tweetsEl.dataset.count) {
35 | tweetNum = 0;
36 | }
37 | Interval();
38 | document.getElementsByClassName('tweets-feed')[0].style.opacity = 0;
39 | window.setTimeout(parseFunc, 560);
40 | }
41 | function lastTweet() {
42 | if (tweetNum > 0) {
43 | tweetNum -= 1;
44 | Interval();
45 | document.getElementsByClassName('tweets-feed')[0].style.opacity = 0;
46 | window.setTimeout(parseFunc, 560);
47 | }
48 | }
49 |
50 | function parser(data) {
51 | var parsed = ""
52 | var tweet = data.statuses[tweetNum].text;
53 | var words = tweet.split(" ");
54 | var loklakLinkCount = 0;
55 | for (word in words) {
56 | if (words[word].startsWith("@")) {
57 | parsed += "
" + words[word] + " ";
58 | } else if (words[word].startsWith("#")) {
59 | parsed += "
" + words[word] + " ";
60 | } else if (words[word].startsWith("http")) {
61 | if (words[word].startsWith("http://loklak")) {
62 | parsed += "
" + data.statuses[tweetNum].links[loklakLinkCount] + " ";
63 | loklakLinkCount += 1;
64 | } else {
65 | parsed += "
" + words[word] + " ";
66 | }
67 | } else {
68 | parsed += words[word] + " ";
69 | }
70 | }
71 | var date = +new Date(data.statuses[tweetNum].created_at);
72 | var myDate = new Date();
73 | myDate = myDate.getTime();
74 | var difference = myDate-date; //it's in miliseconds
75 | var difference = Math.round(difference/1000/3600/24);
76 | parsed += "
";
77 |
78 | document.getElementsByClassName("tweets-feed")[0].innerHTML = parsed;
79 | document.getElementsByClassName("tweets-feed")[0].style.opacity = 1;
80 | }
81 |
82 | /* Taken from https://github.com/fossasia/fossasia-loklak-webtweets/blob/gh-pages/js/loklak-fetcher.js
83 | See documentation at https://github.com/fossasia/fossasia-loklak-webtweets
84 | */
85 |
86 |
87 | var loklakFetcher;
88 |
89 | window.onload = (function() {
90 | var script = null;
91 |
92 | loklakFetcher = {
93 | /**
94 | * Fetches tweets from the public loklak API, with the options provided
95 | * @param {object} options Object with allowed GET-attributes, see
96 | * loklak.org/api.html
97 | * @param {function} callback Function called after getting the results.
98 | * These are passed as first argument
99 | */
100 | getTweets: function(options, callback) {
101 | if(typeof options === 'function') { // A callback has been provided as 2nd
102 | // argument (no options)
103 | var callback = options;
104 | options = {};
105 | } else if(callback === undefined) { // No callback has been provided, even
106 | // as 2nd argument
107 | throw new Error('[LOKLAK-FETCHER] No callback provided');
108 | }
109 |
110 | var settings = [ 'count', 'source', 'fields', 'limit', 'tzOffset',
111 | 'minified' ]; // Field names for all the possible parameters
112 | var defaults = [ 100, 'cache', '', '', 0, true ]; // Default values
113 |
114 | // Check if no options have been provided
115 | if(typeof options === 'undefined') {
116 | var options = {}; // Create 'options' to avoid ReferenceErrors later
117 | }
118 |
119 | //Check if there are any data elements set
120 | var tweetsEl = document.getElementsByClassName("tweets-feed")[0];
121 | var dataset = tweetsEl.dataset;
122 | if(dataset.count) {
123 | options[settings[0]] = dataset.count; //count is index 0
124 | }
125 |
126 | if(dataset.query) {
127 | var query = dataset.query.replace(/\s/gi, '%20').replace(/#/gi, '%23'); //replace spaces and hashtags in URL
128 | } else {
129 | query = '';
130 | }
131 |
132 | if(dataset.start) {
133 | query = query + "%20since:" + dataset.start;
134 | }
135 |
136 | if(dataset.end) {
137 | query = query + "%20until:" + dataset.end;
138 | }
139 |
140 | if(dataset.from) {
141 | query = query + "%20from:" + dataset.from;
142 | }
143 |
144 |
145 |
146 | // Write unset options as their default
147 | for(index in settings) {
148 | if(options[settings[index]] === undefined) {
149 | options[settings[index]] = defaults[index];
150 | }
151 | }
152 |
153 | // Create the URL with all the parameters
154 | var url = 'http://api.loklak.org/api/search.json' +
155 | '?callback=loklakFetcher.handleData' +
156 | '&q=' + query +
157 | '&count=' + options.count +
158 | '&source=' + options.source +
159 | '&fields=' + options.fields +
160 | '&limit=' + options.limit +
161 | '&timezoneOffset=' + options.tzOffset +
162 | '&minified=' + options.minified;
163 | // If the script element for JSONP already exists, remove it
164 | if(script !== null) {
165 | document.head.removeChild(script);
166 | }
167 | /**
168 | * Invokes the callback function, passing the data from the server as the
169 | * first and only argument.
170 | * @param {object} data JSON coming from loklak's API
171 | */
172 | this.handleData = function(data) {
173 | callback(data);
174 | };
175 |
176 | // Create the script tag for JSONP
177 | script = document.createElement("script");
178 | script.src = url;
179 | document.head.appendChild(script);
180 | }
181 | };
182 | datafetcher();
183 |
184 | });
185 |
--------------------------------------------------------------------------------
/js/bootstrap/carousel.js:
--------------------------------------------------------------------------------
1 | /* ========================================================================
2 | * Bootstrap: carousel.js v3.1.0
3 | * http://getbootstrap.com/javascript/#carousel
4 | * ========================================================================
5 | * Copyright 2011-2014 Twitter, Inc.
6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7 | * ======================================================================== */
8 |
9 |
10 | +function ($) {
11 | 'use strict';
12 |
13 | // CAROUSEL CLASS DEFINITION
14 | // =========================
15 |
16 | var Carousel = function (element, options) {
17 | this.$element = $(element)
18 | this.$indicators = this.$element.find('.carousel-indicators')
19 | this.options = options
20 | this.paused =
21 | this.sliding =
22 | this.interval =
23 | this.$active =
24 | this.$items = null
25 |
26 | this.options.pause == 'hover' && this.$element
27 | .on('mouseenter', $.proxy(this.pause, this))
28 | .on('mouseleave', $.proxy(this.cycle, this))
29 | }
30 |
31 | Carousel.DEFAULTS = {
32 | interval: 5000,
33 | pause: 'hover',
34 | wrap: true
35 | }
36 |
37 | Carousel.prototype.cycle = function (e) {
38 | e || (this.paused = false)
39 |
40 | this.interval && clearInterval(this.interval)
41 |
42 | this.options.interval
43 | && !this.paused
44 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
45 |
46 | return this
47 | }
48 |
49 | Carousel.prototype.getActiveIndex = function () {
50 | this.$active = this.$element.find('.item.active')
51 | this.$items = this.$active.parent().children()
52 |
53 | return this.$items.index(this.$active)
54 | }
55 |
56 | Carousel.prototype.to = function (pos) {
57 | var that = this
58 | var activeIndex = this.getActiveIndex()
59 |
60 | if (pos > (this.$items.length - 1) || pos < 0) return
61 |
62 | if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
63 | if (activeIndex == pos) return this.pause().cycle()
64 |
65 | return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
66 | }
67 |
68 | Carousel.prototype.pause = function (e) {
69 | e || (this.paused = true)
70 |
71 | if (this.$element.find('.next, .prev').length && $.support.transition) {
72 | this.$element.trigger($.support.transition.end)
73 | this.cycle(true)
74 | }
75 |
76 | this.interval = clearInterval(this.interval)
77 |
78 | return this
79 | }
80 |
81 | Carousel.prototype.next = function () {
82 | if (this.sliding) return
83 | return this.slide('next')
84 | }
85 |
86 | Carousel.prototype.prev = function () {
87 | if (this.sliding) return
88 | return this.slide('prev')
89 | }
90 |
91 | Carousel.prototype.slide = function (type, next) {
92 | var $active = this.$element.find('.item.active')
93 | var $next = next || $active[type]()
94 | var isCycling = this.interval
95 | var direction = type == 'next' ? 'left' : 'right'
96 | var fallback = type == 'next' ? 'first' : 'last'
97 | var that = this
98 |
99 | if (!$next.length) {
100 | if (!this.options.wrap) return
101 | $next = this.$element.find('.item')[fallback]()
102 | }
103 |
104 | if ($next.hasClass('active')) return this.sliding = false
105 |
106 | var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
107 | this.$element.trigger(e)
108 | if (e.isDefaultPrevented()) return
109 |
110 | this.sliding = true
111 |
112 | isCycling && this.pause()
113 |
114 | if (this.$indicators.length) {
115 | this.$indicators.find('.active').removeClass('active')
116 | this.$element.one('slid.bs.carousel', function () {
117 | var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
118 | $nextIndicator && $nextIndicator.addClass('active')
119 | })
120 | }
121 |
122 | if ($.support.transition && this.$element.hasClass('slide')) {
123 | $next.addClass(type)
124 | $next[0].offsetWidth // force reflow
125 | $active.addClass(direction)
126 | $next.addClass(direction)
127 | $active
128 | .one($.support.transition.end, function () {
129 | $next.removeClass([type, direction].join(' ')).addClass('active')
130 | $active.removeClass(['active', direction].join(' '))
131 | that.sliding = false
132 | setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
133 | })
134 | .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
135 | } else {
136 | $active.removeClass('active')
137 | $next.addClass('active')
138 | this.sliding = false
139 | this.$element.trigger('slid.bs.carousel')
140 | }
141 |
142 | isCycling && this.cycle()
143 |
144 | return this
145 | }
146 |
147 |
148 | // CAROUSEL PLUGIN DEFINITION
149 | // ==========================
150 |
151 | var old = $.fn.carousel
152 |
153 | $.fn.carousel = function (option) {
154 | return this.each(function () {
155 | var $this = $(this)
156 | var data = $this.data('bs.carousel')
157 | var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
158 | var action = typeof option == 'string' ? option : options.slide
159 |
160 | if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
161 | if (typeof option == 'number') data.to(option)
162 | else if (action) data[action]()
163 | else if (options.interval) data.pause().cycle()
164 | })
165 | }
166 |
167 | $.fn.carousel.Constructor = Carousel
168 |
169 |
170 | // CAROUSEL NO CONFLICT
171 | // ====================
172 |
173 | $.fn.carousel.noConflict = function () {
174 | $.fn.carousel = old
175 | return this
176 | }
177 |
178 |
179 | // CAROUSEL DATA-API
180 | // =================
181 |
182 | $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
183 | var $this = $(this), href
184 | var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
185 | var options = $.extend({}, $target.data(), $this.data())
186 | var slideIndex = $this.attr('data-slide-to')
187 | if (slideIndex) options.interval = false
188 |
189 | $target.carousel(options)
190 |
191 | if (slideIndex = $this.attr('data-slide-to')) {
192 | $target.data('bs.carousel').to(slideIndex)
193 | }
194 |
195 | e.preventDefault()
196 | })
197 |
198 | $(window).on('load', function () {
199 | $('[data-ride="carousel"]').each(function () {
200 | var $carousel = $(this)
201 | $carousel.carousel($carousel.data())
202 | })
203 | })
204 |
205 | }(jQuery);
206 |
--------------------------------------------------------------------------------
/css/less/type.less:
--------------------------------------------------------------------------------
1 | //
2 | // Typography
3 | // --------------------------------------------------
4 |
5 |
6 | // Headings
7 | // -------------------------
8 |
9 | h1, h2, h3, h4, h5, h6,
10 | .h1, .h2, .h3, .h4, .h5, .h6 {
11 | font-family: @headings-font-family;
12 | font-weight: @headings-font-weight;
13 | line-height: @headings-line-height;
14 | color: @headings-color;
15 |
16 | small,
17 | .small {
18 | font-weight: normal;
19 | line-height: 1;
20 | color: @headings-small-color;
21 | }
22 | }
23 |
24 | h1, .h1,
25 | h2, .h2,
26 | h3, .h3 {
27 | margin-top: @line-height-computed;
28 | margin-bottom: (@line-height-computed / 2);
29 |
30 | small,
31 | .small {
32 | font-size: 65%;
33 | }
34 | }
35 | h4, .h4,
36 | h5, .h5,
37 | h6, .h6 {
38 | margin-top: (@line-height-computed / 2);
39 | margin-bottom: (@line-height-computed / 2);
40 |
41 | small,
42 | .small {
43 | font-size: 75%;
44 | }
45 | }
46 |
47 | h1, .h1 { font-size: @font-size-h1; }
48 | h2, .h2 { font-size: @font-size-h2; }
49 | h3, .h3 { font-size: @font-size-h3; }
50 | h4, .h4 { font-size: @font-size-h4; }
51 | h5, .h5 { font-size: @font-size-h5; }
52 | h6, .h6 { font-size: @font-size-h6; }
53 |
54 |
55 | // Body text
56 | // -------------------------
57 |
58 | p {
59 | margin: 0 0 (@line-height-computed / 2);
60 | }
61 |
62 | .lead {
63 | margin-bottom: @line-height-computed;
64 | font-size: floor((@font-size-base * 1.15));
65 | font-weight: 200;
66 | line-height: 1.4;
67 |
68 | @media (min-width: @screen-sm-min) {
69 | font-size: (@font-size-base * 1.5);
70 | }
71 | }
72 |
73 |
74 | // Emphasis & misc
75 | // -------------------------
76 |
77 | // Ex: 14px base font * 85% = about 12px
78 | small,
79 | .small { font-size: 85%; }
80 |
81 | // Undo browser default styling
82 | cite { font-style: normal; }
83 |
84 | // Alignment
85 | .text-left { text-align: left; }
86 | .text-right { text-align: right; }
87 | .text-center { text-align: center; }
88 | .text-justify { text-align: justify; }
89 |
90 | // Contextual colors
91 | .text-muted {
92 | color: @text-muted;
93 | }
94 | .text-primary {
95 | .text-emphasis-variant(@brand-primary);
96 | }
97 | .text-success {
98 | .text-emphasis-variant(@state-success-text);
99 | }
100 | .text-info {
101 | .text-emphasis-variant(@state-info-text);
102 | }
103 | .text-warning {
104 | .text-emphasis-variant(@state-warning-text);
105 | }
106 | .text-danger {
107 | .text-emphasis-variant(@state-danger-text);
108 | }
109 |
110 | // Contextual backgrounds
111 | // For now we'll leave these alongside the text classes until v4 when we can
112 | // safely shift things around (per SemVer rules).
113 | .bg-primary {
114 | // Given the contrast here, this is the only class to have its color inverted
115 | // automatically.
116 | color: #fff;
117 | .bg-variant(@brand-primary);
118 | }
119 | .bg-success {
120 | .bg-variant(@state-success-bg);
121 | }
122 | .bg-info {
123 | .bg-variant(@state-info-bg);
124 | }
125 | .bg-warning {
126 | .bg-variant(@state-warning-bg);
127 | }
128 | .bg-danger {
129 | .bg-variant(@state-danger-bg);
130 | }
131 |
132 |
133 | // Page header
134 | // -------------------------
135 |
136 | .page-header {
137 | padding-bottom: ((@line-height-computed / 2) - 1);
138 | margin: (@line-height-computed * 2) 0 @line-height-computed;
139 | border-bottom: 1px solid @page-header-border-color;
140 | }
141 |
142 |
143 | // Lists
144 | // --------------------------------------------------
145 |
146 | // Unordered and Ordered lists
147 | ul,
148 | ol {
149 | margin-top: 0;
150 | margin-bottom: (@line-height-computed / 2);
151 | ul,
152 | ol {
153 | margin-bottom: 0;
154 | }
155 | }
156 |
157 | // List options
158 |
159 | // Unstyled keeps list items block level, just removes default browser padding and list-style
160 | .list-unstyled {
161 | padding-left: 0;
162 | list-style: none;
163 | }
164 |
165 | // Inline turns list items into inline-block
166 | .list-inline {
167 | .list-unstyled();
168 | margin-left: -5px;
169 |
170 | > li {
171 | display: inline-block;
172 | padding-left: 5px;
173 | padding-right: 5px;
174 | }
175 | }
176 |
177 | // Description Lists
178 | dl {
179 | margin-top: 0; // Remove browser default
180 | margin-bottom: @line-height-computed;
181 | }
182 | dt,
183 | dd {
184 | line-height: @line-height-base;
185 | }
186 | dt {
187 | font-weight: bold;
188 | }
189 | dd {
190 | margin-left: 0; // Undo browser default
191 | }
192 |
193 | // Horizontal description lists
194 | //
195 | // Defaults to being stacked without any of the below styles applied, until the
196 | // grid breakpoint is reached (default of ~768px).
197 |
198 | @media (min-width: @grid-float-breakpoint) {
199 | .dl-horizontal {
200 | dt {
201 | float: left;
202 | width: (@component-offset-horizontal - 20);
203 | clear: left;
204 | text-align: right;
205 | .text-overflow();
206 | }
207 | dd {
208 | margin-left: @component-offset-horizontal;
209 | &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
210 | }
211 | }
212 | }
213 |
214 | // MISC
215 | // ----
216 |
217 | // Abbreviations and acronyms
218 | abbr[title],
219 | // Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
220 | abbr[data-original-title] {
221 | cursor: help;
222 | border-bottom: 1px dotted @abbr-border-color;
223 | }
224 | .initialism {
225 | font-size: 90%;
226 | text-transform: uppercase;
227 | }
228 |
229 | // Blockquotes
230 | blockquote {
231 | padding: (@line-height-computed / 2) @line-height-computed;
232 | margin: 0 0 @line-height-computed;
233 | font-size: @blockquote-font-size;
234 | border-left: 5px solid @blockquote-border-color;
235 |
236 | p,
237 | ul,
238 | ol {
239 | &:last-child {
240 | margin-bottom: 0;
241 | }
242 | }
243 |
244 | // Note: Deprecated small and .small as of v3.1.0
245 | // Context: https://github.com/twbs/bootstrap/issues/11660
246 | footer,
247 | small,
248 | .small {
249 | display: block;
250 | font-size: 80%; // back to default font-size
251 | line-height: @line-height-base;
252 | color: @blockquote-small-color;
253 |
254 | &:before {
255 | content: '\2014 \00A0'; // em dash, nbsp
256 | }
257 | }
258 | }
259 |
260 | // Opposite alignment of blockquote
261 | //
262 | // Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.
263 | .blockquote-reverse,
264 | blockquote.pull-right {
265 | padding-right: 15px;
266 | padding-left: 0;
267 | border-right: 5px solid @blockquote-border-color;
268 | border-left: 0;
269 | text-align: right;
270 |
271 | // Account for citation
272 | footer,
273 | small,
274 | .small {
275 | &:before { content: ''; }
276 | &:after {
277 | content: '\00A0 \2014'; // nbsp, em dash
278 | }
279 | }
280 | }
281 |
282 | // Quotes
283 | blockquote:before,
284 | blockquote:after {
285 | content: "";
286 | }
287 |
288 | // Addresses
289 | address {
290 | margin-bottom: @line-height-computed;
291 | font-style: normal;
292 | line-height: @line-height-base;
293 | }
294 |
--------------------------------------------------------------------------------
/js/lightbox.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Lightbox v2.7.1
3 | * by Lokesh Dhakar - http://lokeshdhakar.com/projects/lightbox2/
4 | *
5 | * @license http://creativecommons.org/licenses/by/2.5/
6 | * - Free for use in both personal and commercial projects
7 | * - Attribution requires leaving author name, author link, and the license info intact
8 | */
9 | (function(){var a=jQuery,b=function(){function a(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return a.prototype.albumLabel=function(a,b){return"Image "+a+" of "+b},a}(),c=function(){function b(a){this.options=a,this.album=[],this.currentImageIndex=void 0,this.init()}return b.prototype.init=function(){this.enable(),this.build()},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){var b=this;a("