Files
bootstrap/docs/assets/js/raw-files.min.js
Alex Vasilenko 473a741ede prevent scrolling on mobiles
modal backdrop option for offcanvas
2014-07-02 14:22:46 +03:00

8 lines
59 KiB
JavaScript

/*!
* Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
* Copyright 2012-2014 Arnold Daniels
* Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
*/
var __js = {"fileinput.js":"/* ===========================================================\n * Bootstrap: fileinput.js v3.1.3\n * http://jasny.github.com/bootstrap/javascript/#fileinput\n * ===========================================================\n * Copyright 2012-2014 Arnold Daniels\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) { \"use strict\";\n\n var isIE = window.navigator.appName == 'Microsoft Internet Explorer'\n\n // FILEUPLOAD PUBLIC CLASS DEFINITION\n // =================================\n\n var Fileinput = function (element, options) {\n this.$element = $(element)\n \n this.$input = this.$element.find(':file')\n if (this.$input.length === 0) return\n\n this.name = this.$input.attr('name') || options.name\n\n this.$hidden = this.$element.find('input[type=hidden][name=\"' + this.name + '\"]')\n if (this.$hidden.length === 0) {\n this.$hidden = $('<input type=\"hidden\">').insertBefore(this.$input)\n }\n\n this.$preview = this.$element.find('.fileinput-preview')\n var height = this.$preview.css('height')\n if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {\n this.$preview.css('line-height', height)\n }\n \n this.original = {\n exists: this.$element.hasClass('fileinput-exists'),\n preview: this.$preview.html(),\n hiddenVal: this.$hidden.val()\n }\n \n this.listen()\n }\n \n Fileinput.prototype.listen = function() {\n this.$input.on('change.bs.fileinput', $.proxy(this.change, this))\n $(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))\n \n this.$element.find('[data-trigger=\"fileinput\"]').on('click.bs.fileinput', $.proxy(this.trigger, this))\n this.$element.find('[data-dismiss=\"fileinput\"]').on('click.bs.fileinput', $.proxy(this.clear, this))\n },\n\n Fileinput.prototype.change = function(e) {\n var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\\\/, '')}] : []) : e.target.files\n \n e.stopPropagation()\n\n if (files.length === 0) {\n this.clear()\n return\n }\n\n this.$hidden.val('')\n this.$hidden.attr('name', '')\n this.$input.attr('name', this.name)\n\n var file = files[0]\n\n if (this.$preview.length > 0 && (typeof file.type !== \"undefined\" ? file.type.match(/^image\\/(gif|png|jpeg)$/) : file.name.match(/\\.(gif|png|jpe?g)$/i)) && typeof FileReader !== \"undefined\") {\n var reader = new FileReader()\n var preview = this.$preview\n var element = this.$element\n\n reader.onload = function(re) {\n var $img = $('<img>')\n $img[0].src = re.target.result\n files[0].result = re.target.result\n \n element.find('.fileinput-filename').text(file.name)\n \n // if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account\n if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10) - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))\n \n preview.html($img)\n element.addClass('fileinput-exists').removeClass('fileinput-new')\n\n element.trigger('change.bs.fileinput', files)\n }\n\n reader.readAsDataURL(file)\n } else {\n this.$element.find('.fileinput-filename').text(file.name)\n this.$preview.text(file.name)\n \n this.$element.addClass('fileinput-exists').removeClass('fileinput-new')\n \n this.$element.trigger('change.bs.fileinput')\n }\n },\n\n Fileinput.prototype.clear = function(e) {\n if (e) e.preventDefault()\n \n this.$hidden.val('')\n this.$hidden.attr('name', this.name)\n this.$input.attr('name', '')\n\n //ie8+ doesn't support changing the value of input with type=file so clone instead\n if (isIE) { \n var inputClone = this.$input.clone(true);\n this.$input.after(inputClone);\n this.$input.remove();\n this.$input = inputClone;\n } else {\n this.$input.val('')\n }\n\n this.$preview.html('')\n this.$element.find('.fileinput-filename').text('')\n this.$element.addClass('fileinput-new').removeClass('fileinput-exists')\n \n if (e !== undefined) {\n this.$input.trigger('change')\n this.$element.trigger('clear.bs.fileinput')\n }\n },\n\n Fileinput.prototype.reset = function() {\n this.clear()\n\n this.$hidden.val(this.original.hiddenVal)\n this.$preview.html(this.original.preview)\n this.$element.find('.fileinput-filename').text('')\n\n if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')\n else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')\n \n this.$element.trigger('reset.bs.fileinput')\n },\n\n Fileinput.prototype.trigger = function(e) {\n this.$input.trigger('click')\n e.preventDefault()\n }\n\n \n // FILEUPLOAD PLUGIN DEFINITION\n // ===========================\n\n var old = $.fn.fileinput\n \n $.fn.fileinput = function (options) {\n return this.each(function () {\n var $this = $(this),\n data = $this.data('bs.fileinput')\n if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))\n if (typeof options == 'string') data[options]()\n })\n }\n\n $.fn.fileinput.Constructor = Fileinput\n\n\n // FILEINPUT NO CONFLICT\n // ====================\n\n $.fn.fileinput.noConflict = function () {\n $.fn.fileinput = old\n return this\n }\n\n\n // FILEUPLOAD DATA-API\n // ==================\n\n $(document).on('click.fileinput.data-api', '[data-provides=\"fileinput\"]', function (e) {\n var $this = $(this)\n if ($this.data('bs.fileinput')) return\n $this.fileinput($this.data())\n \n var $target = $(e.target).closest('[data-dismiss=\"fileinput\"],[data-trigger=\"fileinput\"]');\n if ($target.length > 0) {\n e.preventDefault()\n $target.trigger('click.bs.fileinput')\n }\n })\n\n}(window.jQuery);\n","inputmask.js":"/* ===========================================================\n * Bootstrap: inputmask.js v3.1.0\n * http://jasny.github.io/bootstrap/javascript/#inputmask\n * \n * Based on Masked Input plugin by Josh Bush (digitalbush.com)\n * ===========================================================\n * Copyright 2012-2014 Arnold Daniels\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n+function ($) { \"use strict\";\n\n var isIphone = (window.orientation !== undefined)\n var isAndroid = navigator.userAgent.toLowerCase().indexOf(\"android\") > -1\n var isIE = window.navigator.appName == 'Microsoft Internet Explorer'\n\n // INPUTMASK PUBLIC CLASS DEFINITION\n // =================================\n\n var Inputmask = function (element, options) {\n if (isAndroid) return // No support because caret positioning doesn't work on Android\n \n this.$element = $(element)\n this.options = $.extend({}, Inputmask.DEFAULTS, options)\n this.mask = String(this.options.mask)\n \n this.init()\n this.listen()\n \n this.checkVal() //Perform initial check for existing values\n }\n\n Inputmask.DEFAULTS = {\n mask: \"\",\n placeholder: \"_\",\n definitions: {\n '9': \"[0-9]\",\n 'a': \"[A-Za-z]\",\n 'w': \"[A-Za-z0-9]\",\n '*': \".\"\n }\n }\n\n Inputmask.prototype.init = function() {\n var defs = this.options.definitions\n var len = this.mask.length\n\n this.tests = [] \n this.partialPosition = this.mask.length\n this.firstNonMaskPos = null\n\n $.each(this.mask.split(\"\"), $.proxy(function(i, c) {\n if (c == '?') {\n len--\n this.partialPosition = i\n } else if (defs[c]) {\n this.tests.push(new RegExp(defs[c]))\n if (this.firstNonMaskPos === null)\n this.firstNonMaskPos = this.tests.length - 1\n } else {\n this.tests.push(null)\n }\n }, this))\n\n this.buffer = $.map(this.mask.split(\"\"), $.proxy(function(c, i) {\n if (c != '?') return defs[c] ? this.options.placeholder : c\n }, this))\n\n this.focusText = this.$element.val()\n\n this.$element.data(\"rawMaskFn\", $.proxy(function() {\n return $.map(this.buffer, function(c, i) {\n return this.tests[i] && c != this.options.placeholder ? c : null\n }).join('')\n }, this))\n }\n \n Inputmask.prototype.listen = function() {\n if (this.$element.attr(\"readonly\")) return\n\n var pasteEventName = (isIE ? 'paste' : 'input') + \".bs.inputmask\"\n\n this.$element\n .on(\"unmask.bs.inputmask\", $.proxy(this.unmask, this))\n\n .on(\"focus.bs.inputmask\", $.proxy(this.focusEvent, this))\n .on(\"blur.bs.inputmask\", $.proxy(this.blurEvent, this))\n\n .on(\"keydown.bs.inputmask\", $.proxy(this.keydownEvent, this))\n .on(\"keypress.bs.inputmask\", $.proxy(this.keypressEvent, this))\n\n .on(pasteEventName, $.proxy(this.pasteEvent, this))\n }\n\n //Helper Function for Caret positioning\n Inputmask.prototype.caret = function(begin, end) {\n if (this.$element.length === 0) return\n if (typeof begin == 'number') {\n end = (typeof end == 'number') ? end : begin\n return this.$element.each(function() {\n if (this.setSelectionRange) {\n this.setSelectionRange(begin, end)\n } else if (this.createTextRange) {\n var range = this.createTextRange()\n range.collapse(true)\n range.moveEnd('character', end)\n range.moveStart('character', begin)\n range.select()\n }\n })\n } else {\n if (this.$element[0].setSelectionRange) {\n begin = this.$element[0].selectionStart\n end = this.$element[0].selectionEnd\n } else if (document.selection && document.selection.createRange) {\n var range = document.selection.createRange()\n begin = 0 - range.duplicate().moveStart('character', -100000)\n end = begin + range.text.length\n }\n return {\n begin: begin, \n end: end\n }\n }\n }\n \n Inputmask.prototype.seekNext = function(pos) {\n var len = this.mask.length\n while (++pos <= len && !this.tests[pos]);\n\n return pos\n }\n \n Inputmask.prototype.seekPrev = function(pos) {\n while (--pos >= 0 && !this.tests[pos]);\n\n return pos\n }\n\n Inputmask.prototype.shiftL = function(begin,end) {\n var len = this.mask.length\n\n if (begin < 0) return\n\n for (var i = begin, j = this.seekNext(end); i < len; i++) {\n if (this.tests[i]) {\n if (j < len && this.tests[i].test(this.buffer[j])) {\n this.buffer[i] = this.buffer[j]\n this.buffer[j] = this.options.placeholder\n } else\n break\n j = this.seekNext(j)\n }\n }\n this.writeBuffer()\n this.caret(Math.max(this.firstNonMaskPos, begin))\n }\n\n Inputmask.prototype.shiftR = function(pos) {\n var len = this.mask.length\n\n for (var i = pos, c = this.options.placeholder; i < len; i++) {\n if (this.tests[i]) {\n var j = this.seekNext(i)\n var t = this.buffer[i]\n this.buffer[i] = c\n if (j < len && this.tests[j].test(t))\n c = t\n else\n break\n }\n }\n },\n\n Inputmask.prototype.unmask = function() {\n this.$element\n .unbind(\".bs.inputmask\")\n .removeData(\"bs.inputmask\")\n }\n\n Inputmask.prototype.focusEvent = function() {\n this.focusText = this.$element.val()\n var len = this.mask.length \n var pos = this.checkVal()\n this.writeBuffer()\n\n var that = this\n var moveCaret = function() {\n if (pos == len)\n that.caret(0, pos)\n else\n that.caret(pos)\n }\n\n moveCaret()\n setTimeout(moveCaret, 50)\n }\n\n Inputmask.prototype.blurEvent = function() {\n this.checkVal()\n if (this.$element.val() !== this.focusText) {\n this.$element.trigger('change')\n this.$element.trigger('input')\n }\n }\n\n Inputmask.prototype.keydownEvent = function(e) {\n var k = e.which\n\n //backspace, delete, and escape get special treatment\n if (k == 8 || k == 46 || (isIphone && k == 127)) {\n var pos = this.caret(),\n begin = pos.begin,\n end = pos.end\n\n if (end - begin === 0) {\n begin = k != 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1))\n end = k == 46 ? this.seekNext(end) : end\n }\n this.clearBuffer(begin, end)\n this.shiftL(begin, end - 1)\n\n return false\n } else if (k == 27) {//escape\n this.$element.val(this.focusText)\n this.caret(0, this.checkVal())\n return false\n }\n }\n\n Inputmask.prototype.keypressEvent = function(e) {\n var len = this.mask.length\n\n var k = e.which,\n pos = this.caret()\n\n if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore\n return true\n } else if (k) {\n if (pos.end - pos.begin !== 0) {\n this.clearBuffer(pos.begin, pos.end)\n this.shiftL(pos.begin, pos.end - 1)\n }\n\n var p = this.seekNext(pos.begin - 1)\n if (p < len) {\n var c = String.fromCharCode(k)\n if (this.tests[p].test(c)) {\n this.shiftR(p)\n this.buffer[p] = c\n this.writeBuffer()\n var next = this.seekNext(p)\n this.caret(next)\n }\n }\n return false\n }\n }\n\n Inputmask.prototype.pasteEvent = function() {\n var that = this\n\n setTimeout(function() {\n that.caret(that.checkVal(true))\n }, 0)\n }\n\n Inputmask.prototype.clearBuffer = function(start, end) {\n var len = this.mask.length\n\n for (var i = start; i < end && i < len; i++) {\n if (this.tests[i])\n this.buffer[i] = this.options.placeholder\n }\n }\n\n Inputmask.prototype.writeBuffer = function() {\n return this.$element.val(this.buffer.join('')).val()\n }\n\n Inputmask.prototype.checkVal = function(allow) {\n var len = this.mask.length\n //try to place characters where they belong\n var test = this.$element.val()\n var lastMatch = -1\n\n for (var i = 0, pos = 0; i < len; i++) {\n if (this.tests[i]) {\n this.buffer[i] = this.options.placeholder\n while (pos++ < test.length) {\n var c = test.charAt(pos - 1)\n if (this.tests[i].test(c)) {\n this.buffer[i] = c\n lastMatch = i\n break\n }\n }\n if (pos > test.length)\n break\n } else if (this.buffer[i] == test.charAt(pos) && i != this.partialPosition) {\n pos++\n lastMatch = i\n }\n }\n if (!allow && lastMatch + 1 < this.partialPosition) {\n this.$element.val(\"\")\n this.clearBuffer(0, len)\n } else if (allow || lastMatch + 1 >= this.partialPosition) {\n this.writeBuffer()\n if (!allow) this.$element.val(this.$element.val().substring(0, lastMatch + 1))\n }\n return (this.partialPosition ? i : this.firstNonMaskPos)\n }\n\n \n // INPUTMASK PLUGIN DEFINITION\n // ===========================\n\n var old = $.fn.inputmask\n \n $.fn.inputmask = function (options) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.inputmask')\n \n if (!data) $this.data('bs.inputmask', (data = new Inputmask(this, options)))\n })\n }\n\n $.fn.inputmask.Constructor = Inputmask\n\n\n // INPUTMASK NO CONFLICT\n // ====================\n\n $.fn.inputmask.noConflict = function () {\n $.fn.inputmask = old\n return this\n }\n\n\n // INPUTMASK DATA-API\n // ==================\n\n $(document).on('focus.bs.inputmask.data-api', '[data-mask]', function (e) {\n var $this = $(this)\n if ($this.data('bs.inputmask')) return\n $this.inputmask($this.data())\n })\n\n}(window.jQuery);\n","offcanvas.js":"/* ========================================================================\n * Bootstrap: offcanvas.js v3.1.3\n * http://jasny.github.io/bootstrap/javascript/#offcanvas\n * ========================================================================\n * Copyright 2013-2014 Arnold Daniels\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================================== */\n\n+function ($) { \"use strict\";\n\n // OFFCANVAS PUBLIC CLASS DEFINITION\n // =================================\n\n var OffCanvas = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, OffCanvas.DEFAULTS, options)\n this.state = null\n this.placement = null\n \n if (this.options.recalc) {\n this.calcClone()\n $(window).on('resize', $.proxy(this.recalc, this))\n }\n \n if (this.options.autohide)\n $(document).on('click', $.proxy(this.autohide, this))\n\n if (this.options.toggle) this.toggle()\n \n if (this.options.disablescrolling) {\n this.options.disableScrolling = this.options.disablescrolling\n delete this.options.disablescrolling\n }\n }\n\n OffCanvas.DEFAULTS = {\n toggle: true,\n placement: 'auto',\n autohide: true,\n recalc: true,\n disableScrolling: true,\n modal: false\n }\n\n OffCanvas.prototype.offset = function () {\n switch (this.placement) {\n case 'left':\n case 'right': return this.$element.outerWidth()\n case 'top':\n case 'bottom': return this.$element.outerHeight()\n }\n }\n \n OffCanvas.prototype.calcPlacement = function () {\n if (this.options.placement !== 'auto') {\n this.placement = this.options.placement\n return\n }\n \n if (!this.$element.hasClass('in')) {\n this.$element.css('visiblity', 'hidden !important').addClass('in')\n } \n \n var horizontal = $(window).width() / this.$element.width()\n var vertical = $(window).height() / this.$element.height()\n \n var element = this.$element\n function ab(a, b) {\n if (element.css(b) === 'auto') return a\n if (element.css(a) === 'auto') return b\n \n var size_a = parseInt(element.css(a), 10)\n var size_b = parseInt(element.css(b), 10)\n \n return size_a > size_b ? b : a\n }\n \n this.placement = horizontal >= vertical ? ab('left', 'right') : ab('top', 'bottom')\n \n if (this.$element.css('visibility') === 'hidden !important') {\n this.$element.removeClass('in').css('visiblity', '')\n }\n }\n \n OffCanvas.prototype.opposite = function (placement) {\n switch (placement) {\n case 'top': return 'bottom'\n case 'left': return 'right'\n case 'bottom': return 'top'\n case 'right': return 'left'\n }\n }\n \n OffCanvas.prototype.getCanvasElements = function() {\n // Return a set containing the canvas plus all fixed elements\n var canvas = this.options.canvas ? $(this.options.canvas) : this.$element\n \n var fixed_elements = canvas.find('*').filter(function() {\n return $(this).css('position') === 'fixed'\n }).not(this.options.exclude)\n \n return canvas.add(fixed_elements)\n }\n \n OffCanvas.prototype.slide = function (elements, offset, callback) {\n // Use jQuery animation if CSS transitions aren't supported\n if (!$.support.transition) {\n var anim = {}\n anim[this.placement] = \"+=\" + offset\n return elements.animate(anim, 350, callback)\n }\n\n var placement = this.placement\n var opposite = this.opposite(placement)\n \n elements.each(function() {\n if ($(this).css(placement) !== 'auto')\n $(this).css(placement, (parseInt($(this).css(placement), 10) || 0) + offset)\n \n if ($(this).css(opposite) !== 'auto')\n $(this).css(opposite, (parseInt($(this).css(opposite), 10) || 0) - offset)\n })\n \n this.$element\n .one($.support.transition.end, callback)\n .emulateTransitionEnd(350)\n }\n\n OffCanvas.prototype.disableScrolling = function() {\n var bodyWidth = $('body').width()\n var prop = 'padding-' + this.opposite(this.placement)\n\n if ($('body').data('offcanvas-style') === undefined) {\n $('body').data('offcanvas-style', $('body').attr('style') || '')\n }\n \n $('body').css('overflow', 'hidden')\n\n if ($('body').width() > bodyWidth) {\n var padding = parseInt($('body').css(prop), 10) + $('body').width() - bodyWidth\n \n setTimeout(function() {\n $('body').css(prop, padding)\n }, 1)\n }\n //disable scrolling on mobiles (they ignore overflow:hidden)\n $('body').on('touchmove.bs', function(e) {\n e.preventDefault();\n });\n }\n\n OffCanvas.prototype.enableScrolling = function() {\n $('body').off('touchmove.bs');\n }\n\n OffCanvas.prototype.show = function () {\n if (this.state) return\n \n var startEvent = $.Event('show.bs.offcanvas')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n this.state = 'slide-in'\n this.calcPlacement();\n \n var elements = this.getCanvasElements()\n var placement = this.placement\n var opposite = this.opposite(placement)\n var offset = this.offset()\n\n if (elements.index(this.$element) !== -1) {\n $(this.$element).data('offcanvas-style', $(this.$element).attr('style') || '')\n this.$element.css(placement, -1 * offset)\n this.$element.css(placement); // Workaround: Need to get the CSS property for it to be applied before the next line of code\n }\n\n elements.addClass('canvas-sliding').each(function() {\n if ($(this).data('offcanvas-style') === undefined) $(this).data('offcanvas-style', $(this).attr('style') || '')\n if ($(this).css('position') === 'static') $(this).css('position', 'relative')\n if (($(this).css(placement) === 'auto' || $(this).css(placement) === '0px') &&\n ($(this).css(opposite) === 'auto' || $(this).css(opposite) === '0px')) {\n $(this).css(placement, 0)\n }\n })\n \n if (this.options.disableScrolling) this.disableScrolling()\n if (this.options.modal) this.toggleBackdrop()\n \n var complete = function () {\n if (this.state != 'slide-in') return\n \n this.state = 'slid'\n\n elements.removeClass('canvas-sliding').addClass('canvas-slid')\n this.$element.trigger('shown.bs.offcanvas')\n }\n\n setTimeout($.proxy(function() {\n this.$element.addClass('in')\n this.slide(elements, offset, $.proxy(complete, this))\n }, this), 1)\n }\n\n OffCanvas.prototype.hide = function (fast) {\n if (this.state !== 'slid') return\n\n var startEvent = $.Event('hide.bs.offcanvas')\n this.$element.trigger(startEvent)\n if (startEvent.isDefaultPrevented()) return\n\n this.state = 'slide-out'\n\n var elements = $('.canvas-slid')\n var placement = this.placement\n var offset = -1 * this.offset()\n\n var complete = function () {\n if (this.state != 'slide-out') return\n \n this.state = null\n this.placement = null\n \n this.$element.removeClass('in')\n \n elements.removeClass('canvas-sliding')\n elements.add(this.$element).add('body').each(function() {\n $(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')\n })\n\n this.$element.trigger('hidden.bs.offcanvas')\n }\n\n if (this.options.disableScrolling) this.enableScrolling()\n if (this.options.modal) this.toggleBackdrop()\n\n elements.removeClass('canvas-slid').addClass('canvas-sliding')\n \n setTimeout($.proxy(function() {\n this.slide(elements, offset, $.proxy(complete, this))\n }, this), 1)\n }\n\n OffCanvas.prototype.toggle = function () {\n if (this.state === 'slide-in' || this.state === 'slide-out') return\n this[this.state === 'slid' ? 'hide' : 'show']()\n }\n\n OffCanvas.prototype.toggleBackdrop = function (callback) {\n callback = callback || $.noop;\n if (this.state == 'slide-in') {\n var doAnimate = $.support.transition;\n\n this.$backdrop = $('<div class=\"modal-backdrop fade\" />')\n .insertAfter(this.$element);\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n doAnimate ?\n this.$backdrop\n .one($.support.transition.end, callback)\n .emulateTransitionEnd(150) :\n callback()\n } else if (this.state == 'slide-out' && this.$backdrop) {\n this.$backdrop.removeClass('in');\n $('body').off('touchmove.bs');\n var self = this;\n if ($.support.transition) {\n this.$backdrop\n .one($.support.transition.end, function() {\n self.$backdrop.remove();\n callback()\n self.$backdrop = null;\n })\n .emulateTransitionEnd(150);\n } else {\n this.$backdrop.remove();\n this.$backdrop = null;\n callback();\n }\n } else if (callback) {\n callback()\n }\n }\n\n OffCanvas.prototype.calcClone = function() {\n this.$calcClone = this.$element.clone()\n .html('')\n .addClass('offcanvas-clone').removeClass('in')\n .appendTo($('body'))\n }\n\n OffCanvas.prototype.recalc = function () {\n if (this.$calcClone.css('display') === 'none' || (this.state !== 'slid' && this.state !== 'slide-in')) return\n \n this.state = null\n this.placement = null\n var elements = this.getCanvasElements()\n \n this.$element.removeClass('in')\n \n elements.removeClass('canvas-slid')\n elements.add(this.$element).add('body').each(function() {\n $(this).attr('style', $(this).data('offcanvas-style')).removeData('offcanvas-style')\n })\n }\n \n OffCanvas.prototype.autohide = function (e) {\n if ($(e.target).closest(this.$element).length === 0) this.hide()\n }\n\n // OFFCANVAS PLUGIN DEFINITION\n // ==========================\n\n var old = $.fn.offcanvas\n\n $.fn.offcanvas = function (option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.offcanvas')\n var options = $.extend({}, OffCanvas.DEFAULTS, $this.data(), typeof option === 'object' && option)\n\n if (!data) $this.data('bs.offcanvas', (data = new OffCanvas(this, options)))\n if (typeof option === 'string') data[option]()\n })\n }\n\n $.fn.offcanvas.Constructor = OffCanvas\n\n\n // OFFCANVAS NO CONFLICT\n // ====================\n\n $.fn.offcanvas.noConflict = function () {\n $.fn.offcanvas = old\n return this\n }\n\n\n // OFFCANVAS DATA-API\n // =================\n\n $(document).on('click.bs.offcanvas.data-api', '[data-toggle=offcanvas]', function (e) {\n var $this = $(this), href\n var target = $this.attr('data-target')\n || e.preventDefault()\n || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n var $canvas = $(target)\n var data = $canvas.data('bs.offcanvas')\n var option = data ? 'toggle' : $this.data()\n\n e.stopPropagation()\n\n if (data) data.toggle()\n else $canvas.offcanvas(option)\n })\n\n}(window.jQuery);\n","rowlink.js":"/* ============================================================\n * Bootstrap: rowlink.js v3.1.3\n * http://jasny.github.io/bootstrap/javascript/#rowlink\n * ============================================================\n * Copyright 2012-2014 Arnold Daniels\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n+function ($) { \"use strict\";\n\n var Rowlink = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, Rowlink.DEFAULTS, options)\n \n this.$element.on('click.bs.rowlink', 'td:not(.rowlink-skip)', $.proxy(this.click, this))\n }\n\n Rowlink.DEFAULTS = {\n target: \"a\"\n }\n\n Rowlink.prototype.click = function(e) {\n var target = $(e.currentTarget).closest('tr').find(this.options.target)[0]\n if ($(e.target)[0] === target) return\n \n e.preventDefault();\n \n if (target.click) {\n target.click()\n } else if (document.createEvent) {\n var evt = document.createEvent(\"MouseEvents\"); \n evt.initMouseEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); \n target.dispatchEvent(evt);\n }\n }\n\n \n // ROWLINK PLUGIN DEFINITION\n // ===========================\n\n var old = $.fn.rowlink\n\n $.fn.rowlink = function (options) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.rowlink')\n if (!data) $this.data('bs.rowlink', (data = new Rowlink(this, options)))\n })\n }\n\n $.fn.rowlink.Constructor = Rowlink\n\n\n // ROWLINK NO CONFLICT\n // ====================\n\n $.fn.rowlink.noConflict = function () {\n $.fn.rowlink = old\n return this\n }\n\n\n // ROWLINK DATA-API\n // ==================\n\n $(document).on('click.bs.rowlink.data-api', '[data-link=\"row\"]', function (e) {\n if ($(e.target).closest('.rowlink-skip').length !== 0) return\n \n var $this = $(this)\n if ($this.data('bs.rowlink')) return\n $this.rowlink($this.data())\n $(e.target).trigger('click.bs.rowlink')\n })\n \n}(window.jQuery);\n","transition.js":"/* ========================================================================\n * Bootstrap: transition.js v3.1.3\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n if ($.support.transition !== undefined) return // Prevent conflict with Twitter Bootstrap\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false, $el = this\n $(this).one($.support.transition.end, function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n })\n\n}(window.jQuery);\n"}
var __less = {"alerts-fixed.less":"// Fixed alerts\n// Position to the top or bottom.\n// ------------------------------------------------\n\n.alert-fixed-top,\n.alert-fixed-bottom {\n position: fixed;\n width: 100%;\n z-index: @zindex-alert-fixed;\n border-radius: 0;\n margin: 0;\n left: 0;\n\n @media (min-width: @alert-fixed-width) {\n width: @alert-fixed-width;\n left: 50%;\n margin-left: (-1 * (@alert-fixed-width / 2));\n }\n}\n\n.alert-fixed-top {\n top: 0;\n border-width: 0 0 1px 0;\n \n @media (min-width: @alert-fixed-width) {\n .border-bottom-radius(@alert-border-radius);\n border-width: 0 1px 1px 1px;\n }\n}\n\n.alert-fixed-bottom {\n bottom: 0;\n border-width: 1px 0 0 0;\n \n @media (min-width: @alert-fixed-width) {\n .border-top-radius(@alert-border-radius);\n border-width: 1px 1px 0 1px;\n }\n}\n","button-labels.less":"// Labels for buttons\n// --------------------------------------------------\n\n.button-label-size(@padding-vertical; @padding-horizontal; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n left: (-1 * @padding-horizontal);\n border-radius: (@border-radius - 1px) 0 0 (@border-radius - 1px);\n\n &.btn-label-right {\n left: auto;\n right: (-1 * @padding-horizontal);\n border-radius: 0 (@border-radius - 1px) (@border-radius - 1px) 0;\n }\n}\n\n\n.btn-labeled {\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.btn-label {\n position: relative;\n background: transparent;\n background: rgba(0, 0, 0, 0.15);\n display: inline-block;\n .button-label-size(@padding-base-vertical; @padding-base-horizontal; @border-radius-base);\n}\n\n.btn-lg .btn-label {\n .button-label-size(@padding-large-vertical; @padding-large-horizontal; @border-radius-large);\n}\n.btn-sm .btn-label {\n .button-label-size(@padding-small-vertical; @padding-small-horizontal; @border-radius-small);\n}\n.btn-xs .btn-label {\n .button-label-size(1px; 5px; @border-radius-small);\n}\n","fileinput.less":"// Fileinput.less\n// CSS for file upload button and fileinput widget\n// ------------------------------------------------\n\n.btn-file {\n overflow: hidden;\n position: relative;\n vertical-align: middle;\n > input {\n position: absolute;\n top: 0;\n right: 0;\n margin: 0;\n opacity: 0;\n filter: alpha(opacity=0);\n font-size: 23px;\n height: 100%;\n width: 100%;\n direction: ltr;\n cursor: pointer;\n }\n}\n\n.fileinput {\n margin-bottom: 9px;\n display: inline-block;\n .form-control {\n padding-top: 7px;\n padding-bottom: 5px;\n display: inline-block;\n margin-bottom: 0px;\n vertical-align: middle;\n cursor: text;\n }\n .thumbnail {\n overflow: hidden;\n display: inline-block;\n margin-bottom: 5px;\n vertical-align: middle;\n text-align: center;\n > img {\n max-height: 100%;\n }\n }\n .btn {\n vertical-align: middle;\n }\n}\n.fileinput-exists .fileinput-new,\n.fileinput-new .fileinput-exists {\n display: none;\n}\n.fileinput-inline .fileinput-controls {\n display: inline;\n}\n\n.fileinput-filename {\n vertical-align: middle;\n display: inline-block;\n overflow: hidden;\n}\n.form-control .fileinput-filename {\n vertical-align: bottom;\n}\n\n.fileinput.input-group {\n display: table;\n \n > * {\n position: relative;\n z-index: 2;\n }\n > .btn-file {\n z-index: 1;\n }\n}\n\n// Not 100% correct, but helps in typical use case\n.fileinput-new.input-group .btn-file,\n.fileinput-new .input-group .btn-file {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n\n &.btn-xs,\n &.btn-sm {\n border-radius: 0 @border-radius-small @border-radius-small 0;\n }\n &.btn-lg {\n border-radius: 0 @border-radius-large @border-radius-large 0;\n }\n}\n\n.form-group.has-warning .fileinput {\n .fileinput-preview {\n color: @state-warning-text;\n }\n .thumbnail {\n border-color: @state-warning-border;\n }\n}\n.form-group.has-error .fileinput {\n .fileinput-preview {\n color: @state-danger-text;\n }\n .thumbnail {\n border-color: @state-danger-border;\n }\n}\n.form-group.has-success .fileinput {\n .fileinput-preview {\n color: @state-success-text;\n }\n .thumbnail {\n border-color: @state-success-border;\n }\n}\n\n\n// Input group fixes\n\n.input-group-addon:not(:first-child) {\n border-left: 0;\n}\n","grid-container-smooth.less":"// Smooth sizing container\n// -------------------------\n\n.container-smooth {\n max-width: @container-lg;\n \n @media (min-width: 1px) {\n width: auto;\n }\n}\n","jasny-bootstrap.less":"// Twitter Bootstrap's \"variables.less\" should already be imported\n\n// Core variables and mixins\n@import \"variables.less\";\n\n// Core CSS\n@import \"grid-container-smooth.less\";\n@import \"button-labels.less\";\n\n// Components\n@import \"nav-tab-alignment.less\";\n@import \"navmenu.less\";\n@import \"alerts-fixed.less\";\n\n// Components w/ JavaScript\n@import \"offcanvas.less\";\n@import \"rowlink.less\";\n@import \"fileinput.less\";\n","nav-tab-alignment.less":"// Alignment options\n// -------------------------\n\n// bottom\n.nav-tabs-bottom {\n border-bottom: 0;\n border-top: 1px solid @nav-tabs-border-color;\n\n > li {\n margin-bottom: 0;\n margin-top: -1px;\n\n > a {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n\n > a:hover,\n > a:focus,\n &.active > a,\n &.active > a:hover,\n &.active > a:focus {\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-top-color: transparent;\n }\n }\n}\n\n// left\n.nav-tabs-left {\n border-bottom: 0;\n border-right: 1px solid @nav-tabs-border-color;\n\n > li {\n margin-bottom: 0;\n margin-right: -1px;\n float: none;\n\n > a {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n margin-right: 0;\n margin-bottom: 2px;\n }\n\n > a:hover,\n > a:focus,\n &.active > a,\n &.active > a:hover,\n &.active > a:focus {\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-right-color: transparent;\n }\n }\n\n .row > & {\n padding-right: 0;\n padding-left: (@grid-gutter-width / 2);\n margin-right: -1px;\n position: relative;\n z-index: 1;\n\n & + .tab-content {\n border-left: 1px solid @nav-tabs-active-link-hover-border-color;\n }\n }\n}\n\n// right\n.nav-tabs-right {\n border-bottom: 0;\n border-left: 1px solid @nav-tabs-border-color;\n\n > li {\n margin-bottom: 0;\n margin-left: -1px;\n float: none;\n\n > a {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n margin-left: 0;\n margin-bottom: 2px;\n }\n\n > a:hover,\n > a:focus,\n &.active > a,\n &.active > a:hover,\n &.active > a:focus {\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-left-color: transparent;\n }\n }\n\n .row > & {\n padding-left: 0;\n padding-right: (@grid-gutter-width / 2);\n }\n}\n","navmenu.less":"// Navmenu and offcanvas navbar\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navmenu from which we expand to create the fixed navmenu\n// variations.\n\n.navmenu,\n.navbar-offcanvas {\n width: @navmenu-width;\n height: auto;\n border-width: 1px;\n border-style: solid;\n border-radius: @border-radius-base;\n}\n\n.navmenu-fixed-left,\n.navmenu-fixed-right,\n.navbar-offcanvas {\n position: fixed;\n z-index: @zindex-navmenu-fixed;\n top: 0;\n bottom: 0;\n overflow-y: auto;\n border-radius: 0;\n}\n.navmenu-fixed-left,\n.navbar-offcanvas.navmenu-fixed-left {\n left: 0;\n right: auto;\n border-width: 0 1px 0 0;\n}\n.navmenu-fixed-right,\n.navbar-offcanvas {\n left: auto;\n right: 0;\n border-width: 0 0 0 1px;\n}\n\n.navmenu-nav {\n margin-bottom: @navmenu-margin-vertical;\n\n &.dropdown-menu {\n position: static;\n margin: 0;\n padding-top: 0;\n float: none;\n border: none;\n .box-shadow(none);\n border-radius: 0;\n }\n}\n\n.navbar-offcanvas {\n .navbar-nav {\n margin: 0;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.offcanvas {\n position: static;\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n // Account for first and last children spacing\n .navbar-nav.navbar-left:first-child {\n margin-left: -@navbar-padding-horizontal;\n }\n .navbar-nav.navbar-right:last-child {\n margin-right: -@navbar-padding-horizontal;\n }\n\n .navmenu-brand {\n display: none;\n }\n }\n}\n\n// Brand/project name\n\n.navmenu-brand {\n display: block;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n }\n margin: @navmenu-margin-vertical 0;\n}\n\n// Alternate navmenus\n// --------------------------------------------------\n\n// Default navmenu\n.navmenu-default,\n.navbar-default .navbar-offcanvas {\n background-color: @navmenu-default-bg;\n border-color: @navmenu-default-border;\n\n .navmenu-brand {\n color: @navmenu-default-brand-color;\n &:hover,\n &:focus {\n color: @navmenu-default-brand-hover-color;\n background-color: @navmenu-default-brand-hover-bg;\n }\n }\n\n .navmenu-text {\n color: @navmenu-default-color;\n }\n\n .navmenu-nav {\n // Caret should match text color on hover\n > .dropdown > a:hover .caret,\n > .dropdown > a:focus .caret {\n border-top-color: @navmenu-default-link-hover-color;\n border-bottom-color: @navmenu-default-link-hover-color;\n }\n\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navmenu-default-link-active-bg;\n color: @navmenu-default-link-active-color;\n .caret {\n border-top-color: @navmenu-default-link-active-color;\n border-bottom-color: @navmenu-default-link-active-color;\n }\n }\n }\n > .dropdown > a .caret {\n border-top-color: @navmenu-default-link-color;\n border-bottom-color: @navmenu-default-link-color;\n }\n &.dropdown-menu {\n background-color: @navmenu-default-link-active-bg;\n & > .divider {\n background-color: @navmenu-default-bg;\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n background-color: darken(@navmenu-default-link-active-bg, 6.5%);\n }\n }\n }\n\n > li > a {\n color: @navmenu-default-link-color;\n &:hover,\n &:focus {\n color: @navmenu-default-link-hover-color;\n background-color: @navmenu-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navmenu-default-link-active-color;\n background-color: @navmenu-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navmenu-default-link-disabled-color;\n background-color: @navmenu-default-link-disabled-bg;\n }\n }\n }\n}\n\n// Inverse navmenu\n.navmenu-inverse,\n.navbar-inverse .navbar-offcanvas {\n background-color: @navmenu-inverse-bg;\n border-color: @navmenu-inverse-border;\n\n .navmenu-brand {\n color: @navmenu-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navmenu-inverse-brand-hover-color;\n background-color: @navmenu-inverse-brand-hover-bg;\n }\n }\n\n .navmenu-text {\n color: @navmenu-inverse-color;\n }\n\n .navmenu-nav {\n // Caret should match text color on hover\n > .dropdown > a:hover .caret,\n > .dropdown > a:focus .caret {\n border-top-color: @navmenu-inverse-link-hover-color;\n border-bottom-color: @navmenu-inverse-link-hover-color;\n }\n\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navmenu-inverse-link-active-bg;\n color: @navmenu-inverse-link-active-color;\n .caret {\n border-top-color: @navmenu-inverse-link-active-color;\n border-bottom-color: @navmenu-inverse-link-active-color;\n }\n }\n }\n > .dropdown > a .caret {\n border-top-color: @navmenu-inverse-link-color;\n border-bottom-color: @navmenu-inverse-link-color;\n }\n &.dropdown-menu {\n background-color: @navmenu-inverse-link-active-bg;\n & > .divider {\n background-color: @navmenu-inverse-bg;\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n background-color: darken(@navmenu-inverse-link-active-bg, 6.5%);\n }\n }\n }\n\n > li > a {\n color: @navmenu-inverse-link-color;\n &:hover,\n &:focus {\n color: @navmenu-inverse-link-hover-color;\n background-color: @navmenu-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navmenu-inverse-link-active-color;\n background-color: @navmenu-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navmenu-inverse-link-disabled-color;\n background-color: @navmenu-inverse-link-disabled-bg;\n }\n }\n }\n}\n","offcanvas.less":"// Off canvas navigation\n// --------------------------------------------------\n\n.offcanvas {\n display: none;\n &.in {\n display: block;\n }\n}\n\n@media (max-width: @screen-xs-max) {\n .offcanvas-xs {\n .offcanvas;\n }\n}\n@media (max-width: @screen-sm-max) {\n .offcanvas-sm {\n .offcanvas;\n }\n}\n@media (max-width: @screen-md-max) {\n .offcanvas-md {\n .offcanvas;\n }\n}\n.offcanvas-lg {\n .offcanvas;\n}\n\n.canvas-sliding {\n -webkit-transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;\n transition: top 0.35s, left 0.35s, bottom 0.35s, right 0.35s;\n}\n\n.offcanvas-clone {\n height: 0px !important;\n width: 0px !important;\n overflow: hidden !important;\n border: none !important;\n margin: 0px !important;\n padding: 0px !important;\n position: absolute !important;\n top: auto !important;\n left: auto !important;\n bottom: 0px !important;\n right: 0px !important;\n opacity: 0 !important;\n}\n","rowlink.less":"// Rowlink\n// --------------------------------------------------\n\n.table.rowlink,\n.table .rowlink {\n td:not(.rowlink-skip) {\n cursor: pointer;\n\n a {\n color: inherit;\n font: inherit;\n text-decoration: inherit;\n }\n }\n}\n\n.table-hover.rowlink,\n.table-hover .rowlink {\n tr:hover td {\n background-color: darken(@table-bg-hover, 15%);\n }\n}\n","variables.less":"//\n// Variables\n//\n// Either Twitter Bootstrap's \"variables.less\" or this package's\n// \"default-variables.less\" should be loaded before this file.\n// -------------------------------------------------------------\n\n@zindex-navmenu-fixed: @zindex-modal;\n@zindex-alert-fixed: 1035;\n\n@container-smooth: @container-lg;\n\n@alert-fixed-width: @screen-md-min;\n\n\n//== Navmenu\n\n// Basics of a navmenu\n@navmenu-width: 300px;\n@navmenu-margin-vertical: (0.5 * @line-height-computed);\n@navmenu-default-color: #777;\n@navmenu-default-bg: #f8f8f8;\n@navmenu-default-border: darken(@navmenu-default-bg, 6.5%);\n\n// Navmenu links\n@navmenu-default-link-color: #777;\n@navmenu-default-link-hover-color: #333;\n@navmenu-default-link-hover-bg: transparent;\n@navmenu-default-link-active-color: #555;\n@navmenu-default-link-active-bg: darken(@navmenu-default-bg, 6.5%);\n@navmenu-default-link-disabled-color: #ccc;\n@navmenu-default-link-disabled-bg: transparent;\n\n// Navmenu brand label\n@navmenu-default-brand-color: @navmenu-default-link-color;\n@navmenu-default-brand-hover-color: darken(@navmenu-default-link-color, 10%);\n@navmenu-default-brand-hover-bg: transparent;\n\n\n// Inverted navmenu\n//\n// Reset inverted navmenu basics\n@navmenu-inverse-color: @gray-light;\n@navmenu-inverse-bg: #222;\n@navmenu-inverse-border: darken(@navmenu-inverse-bg, 10%);\n\n// Inverted navmenu links\n@navmenu-inverse-link-color: @gray-light;\n@navmenu-inverse-link-hover-color: #fff;\n@navmenu-inverse-link-hover-bg: transparent;\n@navmenu-inverse-link-active-color: @navmenu-inverse-link-hover-color;\n@navmenu-inverse-link-active-bg: darken(@navmenu-inverse-bg, 10%);\n@navmenu-inverse-link-disabled-color: #444;\n@navmenu-inverse-link-disabled-bg: transparent;\n\n// Inverted navmenu brand label\n@navmenu-inverse-brand-color: @navmenu-inverse-link-color;\n@navmenu-inverse-brand-hover-color: #fff;\n@navmenu-inverse-brand-hover-bg: transparent;\n\n// Inverted navmenu search\n// Normal navmenu needs no special styles or vars\n@navmenu-inverse-search-bg: lighten(@navmenu-inverse-bg, 25%);\n@navmenu-inverse-search-bg-focus: #fff;\n@navmenu-inverse-search-border: @navmenu-inverse-bg;\n@navmenu-inverse-search-placeholder-color: #ccc;\n","build/mixins.less":"//\n// These mixins are used when Jasny Bootstrap is\n// built without importing Twitter Bootstrap.\n// --------------------------------------------------\n\n\n// CSS3 PROPERTIES\n// --------------------------------------------------\n\n// Single side border-radius\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n\n// Drop shadows\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n\n// Transition\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}","build/variables.less":"//\n// These variables are used when Jasny Bootstrap is built\n// without importing Twitter Bootstrap.\n// --------------------------------------------------------\n\n//-- Colors\n//\n//## Gray colors for use across Bootstrap.\n\n@gray-darker: lighten(#000, 13.5%); // #222\n@gray-dark: lighten(#000, 20%); // #333\n@gray: lighten(#000, 33.5%); // #555\n@gray-light: lighten(#000, 60%); // #999\n@gray-lighter: lighten(#000, 93.5%); // #eee\n\n//-- Typography\n//\n//## Font size and line-height.\n\n@font-size-base: 14px;\n@font-size-large: ceil((@font-size-base * 1.25)); // ~18px\n@font-size-small: ceil((@font-size-base * 0.85)); // ~12px\n\n//** Unit-less `line-height` for use in components like buttons.\n@line-height-base: 1.428571429; // 20/14\n//** Computed \"line-height\" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.\n@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px\n\n\n//== Components\n//\n//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).\n\n@padding-base-vertical: 6px;\n@padding-base-horizontal: 12px;\n\n@padding-large-vertical: 10px;\n@padding-large-horizontal: 16px;\n\n@padding-small-vertical: 5px;\n@padding-small-horizontal: 10px;\n\n@padding-xs-vertical: 1px;\n@padding-xs-horizontal: 5px;\n\n@line-height-large: 1.33;\n@line-height-small: 1.5;\n\n@border-radius-base: 4px;\n@border-radius-large: 6px;\n@border-radius-small: 3px;\n\n\n//== Tables\n//\n//## Customizes the `.table` component with basic values, each used across all table variations.\n\n//** Background color used for `.table-hover`.\n@table-bg-hover: #f5f5f5;\n\n\n//-- Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//\n// Note: These variables are not generated into the Customizer.\n\n@zindex-navmenu-fixed: 1030;\n@zindex-alert-fixed: 1035;\n\n@zindex-modal: 1050;\n\n\n//== Media queries breakpoints\n//\n//## Define the breakpoints at which your layout will change, adapting to different screen sizes.\n\n// Extra small screen / phone\n@screen-xs: 480px;\n\n// Small screen / tablet\n@screen-sm: 768px;\n\n// Medium screen / desktop\n@screen-md: 992px;\n\n// Large screen / wide desktop\n@screen-lg: 1200px;\n\n//-- So media queries don't overlap when required, provide a maximum\n//\n// Note: These variables are not generated into the Customizer.\n@screen-xs-min: @screen-xs;\n@screen-sm-min: @screen-sm;\n@screen-md-min: @screen-md;\n@screen-lg-min: @screen-lg;\n\n@screen-xs-max: (@screen-sm-min - 1);\n@screen-sm-max: (@screen-md-min - 1);\n@screen-md-max: (@screen-lg-min - 1);\n\n//--\n@container-lg: ((1140px + @grid-gutter-width));\n\n//== Grid system\n//\n//## Define your custom responsive grid.\n\n//** Padding between columns. Gets divided in half for the left and right.\n@grid-gutter-width: 30px;\n//** Point at which the navbar becomes uncollapsed.\n@grid-float-breakpoint: 768px;\n\n//** Maximum with of a smooth container.\n@container-smooth: @container-lg;\n\n//== Navbar\n//\n//##\n\n// Basics of a navbar\n@navbar-height: 50px;\n@navbar-padding-horizontal: floor((@grid-gutter-width / 2));\n@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);\n\n\n//== Navmenu\n//\n//##\n\n// Basics of a navmenu\n@navmenu-width: 300px;\n@navmenu-margin-vertical: (0.5 * @line-height-computed);\n@navmenu-default-color: #777;\n@navmenu-default-bg: #f8f8f8;\n@navmenu-default-border: darken(@navmenu-default-bg, 6.5%);\n\n// Navmenu links\n@navmenu-default-link-color: #777;\n@navmenu-default-link-hover-color: #333;\n@navmenu-default-link-hover-bg: transparent;\n@navmenu-default-link-active-color: #555;\n@navmenu-default-link-active-bg: darken(@navmenu-default-bg, 6.5%);\n@navmenu-default-link-disabled-color: #ccc;\n@navmenu-default-link-disabled-bg: transparent;\n\n// Navmenu brand label\n@navmenu-default-brand-color: @navmenu-default-link-color;\n@navmenu-default-brand-hover-color: darken(@navmenu-default-link-color, 10%);\n@navmenu-default-brand-hover-bg: transparent;\n\n\n// Inverted navmenu\n//\n// Reset inverted navmenu basics\n@navmenu-inverse-color: @gray-light;\n@navmenu-inverse-bg: #222;\n@navmenu-inverse-border: darken(@navmenu-inverse-bg, 10%);\n\n// Inverted navmenu links\n@navmenu-inverse-link-color: @gray-light;\n@navmenu-inverse-link-hover-color: #fff;\n@navmenu-inverse-link-hover-bg: transparent;\n@navmenu-inverse-link-active-color: @navmenu-inverse-link-hover-color;\n@navmenu-inverse-link-active-bg: darken(@navmenu-inverse-bg, 10%);\n@navmenu-inverse-link-disabled-color: #444;\n@navmenu-inverse-link-disabled-bg: transparent;\n\n// Inverted navmenu brand label\n@navmenu-inverse-brand-color: @navmenu-inverse-link-color;\n@navmenu-inverse-brand-hover-color: #fff;\n@navmenu-inverse-brand-hover-bg: transparent;\n\n// Inverted navmenu search\n// Normal navmenu needs no special styles or vars\n@navmenu-inverse-search-bg: lighten(@navmenu-inverse-bg, 25%);\n@navmenu-inverse-search-bg-focus: #fff;\n@navmenu-inverse-search-border: @navmenu-inverse-bg;\n@navmenu-inverse-search-placeholder-color: #ccc;\n\n\n//== Navs\n//\n//##\n\n@nav-link-padding: 10px 15px;\n@nav-tabs-active-link-hover-border-color: #ddd;\n@nav-tabs-border-color: #ddd;\n\n\n//== Form states and alerts\n//\n//## Define colors for form feedback states and, by default, alerts.\n\n@state-success-text: #3c763d;\n@state-success-bg: #dff0d8;\n@state-success-border: darken(spin(@state-success-bg, -10), 5%);\n\n@state-info-text: #31708f;\n@state-info-bg: #d9edf7;\n@state-info-border: darken(spin(@state-info-bg, -10), 7%);\n\n@state-warning-text: #8a6d3b;\n@state-warning-bg: #fcf8e3;\n@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);\n\n@state-danger-text: #a94442;\n@state-danger-bg: #f2dede;\n@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);\n\n\n//== Alerts\n//\n//## Define alert colors, border radius, and padding.\n\n@alert-border-radius: @border-radius-base;\n@alert-fixed-width: @screen-md;\n"}