diff options
| author | Mark Otto <[email protected]> | 2011-10-20 09:14:02 -0700 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2011-10-20 09:14:02 -0700 |
| commit | 80332e8340dfdb9d73caa682016746823b9d0d82 (patch) | |
| tree | 655b9f9c9e93c485ca29a3fcc147f450c8565b89 | |
| parent | a5d2450e88693de5e96d9a9f3f4e82853723f764 (diff) | |
| parent | 523e02f7df3bb706654b43cf604e61c9396212e1 (diff) | |
| download | bootstrap-80332e8340dfdb9d73caa682016746823b9d0d82.tar.xz bootstrap-80332e8340dfdb9d73caa682016746823b9d0d82.zip | |
Merge branch '2.0-wip' of github.com:twitter/bootstrap into 2.0-wip
| -rw-r--r-- | docs/assets/js/application.js | 2 | ||||
| -rw-r--r-- | docs/index.html | 65 | ||||
| -rw-r--r-- | js/bootstrap-accordion.js | 41 | ||||
| -rw-r--r-- | js/bootstrap-alerts.js | 82 | ||||
| -rw-r--r-- | js/bootstrap-dropdown.js | 31 | ||||
| -rw-r--r-- | js/bootstrap-modal.js | 83 | ||||
| -rw-r--r-- | js/bootstrap-popover.js | 3 | ||||
| -rw-r--r-- | js/bootstrap-scrollspy.js | 56 | ||||
| -rw-r--r-- | js/bootstrap-tabs.js | 31 | ||||
| -rw-r--r-- | js/bootstrap-transitions.js | 45 | ||||
| -rw-r--r-- | js/bootstrap-twipsy.js | 33 | ||||
| -rw-r--r-- | js/tests/index.html | 1 |
12 files changed, 213 insertions, 260 deletions
diff --git a/docs/assets/js/application.js b/docs/assets/js/application.js index 16a20e068..74024caa1 100644 --- a/docs/assets/js/application.js +++ b/docs/assets/js/application.js @@ -1,4 +1,4 @@ -$(document).ready(function(){ +$(function(){ // table sort example // ================== diff --git a/docs/index.html b/docs/index.html index 3908552bd..49e6d0431 100644 --- a/docs/index.html +++ b/docs/index.html @@ -53,8 +53,8 @@ <li class="dropdown"> <a href="#" class="dropdown-toggle" data-dropdown="true">Patterns</a> <ul class="dropdown-menu"> - <li><a href="#navigation">Navigation</a></li> <li><a href="#media">Media</a></li> + <li><a href="#navigation">Navigation</a></li> <li><a href="#alerts">Alerts</a></li> <li><a href="#popovers">Popovers</a></li> <li><a href="#autocomplete">Autocomplete</a></li> @@ -147,36 +147,38 @@ <!-- About Bootstrap ================================================== --> - <div class="row"> - <div class="span4"> - <h2>Built for and by nerds</h2> - <p>Engineers at Twitter have historically used almost any library they were familiar with to meet front-end requirements. Bootstrap began as an answer to the challenges that presented. With the help of many awesome folks, Bootstrap has grown significantly.</p> - <p>Read more on <a href="https://dev.twitter.com/blog/bootstrap-twitter">dev.twitter.com ›</a></p> - </div> - <div class="span4"> - <h2>Cross-everything</h2> - <p>Bootstrap is tested and supported in major modern browsers like Chrome, Safari, Internet Explorer, and Firefox.</p> - <img class="browser-support" src="assets/img/browsers.png" alt="Tested and supported in Chrome, Safari, Internet Explorer, and Firefox"> - <ul> - <li>Latest Safari</li> - <li>Latest Google Chrome</li> - <li>Firefox 4+</li> - <li>Internet Explorer 7+</li> - <li>Opera 11</li> - </ul> - </div> - <div class="span4"> - <h2>What's included</h2> - <p>Bootstrap comes complete with compiled CSS, uncompiled, and example templates.</p> - <ul> - <li><span class="label">New in 1.3</span> <a href="./javascript.html">Javascript plugins</a></li> - <li>All original .less files</li> - <li>Fully <a href="../bootstrap.css">compiled</a> and <a href="../bootstrap.min.css">minified</a> CSS</li> - <li>Complete styleguide documentation</li> - <li>Three example pages with different layouts</li> - </ul> - </div> - </div><!-- /row --> + <section id="about"> + <div class="row"> + <div class="span4"> + <h2>Built for and by nerds</h2> + <p>Engineers at Twitter have historically used almost any library they were familiar with to meet front-end requirements. Bootstrap began as an answer to the challenges that presented. With the help of many awesome folks, Bootstrap has grown significantly.</p> + <p>Read more on <a href="https://dev.twitter.com/blog/bootstrap-twitter">dev.twitter.com ›</a></p> + </div> + <div class="span4"> + <h2>Cross-everything</h2> + <p>Bootstrap is tested and supported in major modern browsers like Chrome, Safari, Internet Explorer, and Firefox.</p> + <img class="browser-support" src="assets/img/browsers.png" alt="Tested and supported in Chrome, Safari, Internet Explorer, and Firefox"> + <ul> + <li>Latest Safari</li> + <li>Latest Google Chrome</li> + <li>Firefox 4+</li> + <li>Internet Explorer 7+</li> + <li>Opera 11</li> + </ul> + </div> + <div class="span4"> + <h2>What's included</h2> + <p>Bootstrap comes complete with compiled CSS, uncompiled, and example templates.</p> + <ul> + <li><span class="label">New in 1.3</span> <a href="./javascript.html">Javascript plugins</a></li> + <li>All original .less files</li> + <li>Fully <a href="../bootstrap.css">compiled</a> and <a href="../bootstrap.min.css">minified</a> CSS</li> + <li>Complete styleguide documentation</li> + <li>Three example pages with different layouts</li> + </ul> + </div> + </div><!-- /row --> + </section> <h3>Quick-start examples</h3> <p>Need some quick templates? Check out these basic examples we've put together:</p> @@ -2184,6 +2186,7 @@ Lorem ipsum dolar sit amet illo error <a href="#" title="below">ipsum</a> verita <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script> <script src="assets/js/google-code-prettify/prettify.js"></script> <script>$(function () { prettyPrint() })</script> + <script src="../js/bootstrap-transitions.js"></script> <script src="../js/bootstrap-dropdown.js"></script> <script src="../js/bootstrap-twipsy.js"></script> <script src="../js/bootstrap-scrollspy.js"></script> diff --git a/js/bootstrap-accordion.js b/js/bootstrap-accordion.js new file mode 100644 index 000000000..9a24b5ddf --- /dev/null +++ b/js/bootstrap-accordion.js @@ -0,0 +1,41 @@ +/* ============================================================= + * bootstrap-accordion.js v2.0.0 + * http://twitter.github.com/bootstrap/javascript.html#accordion + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + +(function( $ ){ + + var Accordion = function ( element, options ) {} + + Accordion.prototype = {} + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + $.fn.accordion = function ( options ) { + + if ( options === true ) { + return this.data('accordion') + } + + return this.each(function () { + new Accordion(this, options) + }) + } + + +})( window.jQuery || window.ender )
\ No newline at end of file diff --git a/js/bootstrap-alerts.js b/js/bootstrap-alerts.js index 4498270cb..4f1acfa3d 100644 --- a/js/bootstrap-alerts.js +++ b/js/bootstrap-alerts.js @@ -1,5 +1,5 @@ /* ========================================================== - * bootstrap-alerts.js v1.3.0 + * bootstrap-alerts.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#alerts * ========================================================== * Copyright 2011 Twitter, Inc. @@ -17,90 +17,32 @@ * limitations under the License. * ========================================================== */ - (function( $ ){ - /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) - * ======================================================= */ - - var transitionEnd - - $(document).ready(function () { - - $.support.transition = (function () { - var thisBody = document.body || document.documentElement - , thisStyle = thisBody.style - , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined - return support - })() - - // set CSS transition event type - if ( $.support.transition ) { - transitionEnd = "TransitionEnd" - if ( $.browser.webkit ) { - transitionEnd = "webkitTransitionEnd" - } else if ( $.browser.mozilla ) { - transitionEnd = "transitionend" - } else if ( $.browser.opera ) { - transitionEnd = "oTransitionEnd" - } - } - - }) - /* ALERT CLASS DEFINITION * ====================== */ - var Alert = function ( content, selector ) { - this.$element = $(content) - .delegate('[data-alert-dismiss]', 'click', this.close) - } - - Alert.prototype = { - - close: function (e) { - var $element = $(this).parent('.alert-message') + function close(e) { + var $element = $(this).parent('.alert-message') - e && e.preventDefault() - e && e.stopPropagation() + e && e.preventDefault() + $element.removeClass('in') - $element.removeClass('in') - - function removeElement () { - $element.remove() - } - - $.support.transition && $element.hasClass('fade') ? - $element.bind(transitionEnd, removeElement) : - removeElement() + function removeElement () { + $element.remove() } + $.support.transition && $element.hasClass('fade') ? + $element.bind($.support.transition.end, removeElement) : + removeElement() } /* ALERT PLUGIN DEFINITION * ======================= */ - $.fn.alert = function ( options ) { - - if ( options === true ) { - return this.data('alert') - } - - return this.each(function () { - var $this = $(this) - - if ( typeof options == 'string' ) { - return $this.data('alert')[options]() - } - - $(this).data('alert', new Alert( this )) - - }) - } - - $(document).ready(function () { - new Alert($('body')) + $(function () { + $('body').delegate('[data-alert-dismiss]', 'click', close) }) })( window.jQuery || window.ender )
\ No newline at end of file diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js index 6379653c5..d12fe48cb 100644 --- a/js/bootstrap-dropdown.js +++ b/js/bootstrap-dropdown.js @@ -1,5 +1,5 @@ /* ============================================================ - * bootstrap-dropdown.js v1.3.0 + * bootstrap-dropdown.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#dropdown * ============================================================ * Copyright 2011 Twitter, Inc. @@ -20,34 +20,23 @@ (function( $ ){ - var d = '[data-dropdown]' - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - $.fn.dropdown = function () { - return this.each(function () { - $(this).delegate(d, 'click', function (e) { - var li = $(this).parent('li') - , isActive = li.hasClass('open') - - clearMenus() - !isActive && li.toggleClass('open') - return false - }) - }) - } - /* APPLY TO STANDARD DROPDOWN ELEMENTS * =================================== */ + var selector = '[data-dropdown]' function clearMenus() { - $(d).parent('li').removeClass('open') + $(selector).parent('li').removeClass('open') } $(function () { $('html').bind("click", clearMenus) - $('body').dropdown() + $('body').delegate(selector, 'click', function (e) { + var li = $(this).parent('li') + , isActive = li.hasClass('open') + clearMenus() + !isActive && li.toggleClass('open') + return false + }) }) })( window.jQuery || window.ender )
\ No newline at end of file diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js index 60b83d58f..984b091d6 100644 --- a/js/bootstrap-modal.js +++ b/js/bootstrap-modal.js @@ -1,5 +1,5 @@ /* ========================================================= - * bootstrap-modal.js v1.3.0 + * bootstrap-modal.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#modal * ========================================================= * Copyright 2011 Twitter, Inc. @@ -20,35 +20,6 @@ !function( $ ){ - /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) - * ======================================================= */ - - var transitionEnd - - $(document).ready(function () { - - $.support.transition = (function () { - var thisBody = document.body || document.documentElement - , thisStyle = thisBody.style - , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined - return support - })() - - // set CSS transition event type - if ( $.support.transition ) { - transitionEnd = "TransitionEnd" - if ( $.browser.webkit ) { - transitionEnd = "webkitTransitionEnd" - } else if ( $.browser.mozilla ) { - transitionEnd = "transitionend" - } else if ( $.browser.opera ) { - transitionEnd = "oTransitionEnd" - } - } - - }) - - /* MODAL PUBLIC CLASS DEFINITION * ============================= */ @@ -76,25 +47,7 @@ this.$element.trigger('show') escape.call(this) - backdrop.call(this, function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - that.$element - .appendTo(document.body) - .show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - - transition ? - that.$element.one(transitionEnd, function () { that.$element.trigger('shown') }) : - that.$element.trigger('shown') - - }) + backdrop.call(this) return this } @@ -124,7 +77,7 @@ } $.support.transition && this.$element.hasClass('fade') ? - this.$element.one(transitionEnd, removeElement) : + this.$element.one($.support.transition.end, removeElement) : removeElement() return this @@ -136,9 +89,11 @@ /* MODAL PRIVATE METHODS * ===================== */ - function backdrop ( callback ) { + function backdrop () { var that = this , animate = this.$element.hasClass('fade') ? 'fade' : '' + , callback = $.proxy(show, this) + if ( this.isShown && this.settings.backdrop ) { var doAnimate = $.support.transition && animate @@ -156,7 +111,7 @@ this.$backdrop.addClass('in') doAnimate ? - this.$backdrop.one(transitionEnd, callback) : + this.$backdrop.one($.support.transition.end, callback) : callback() } else if ( !this.isShown && this.$backdrop ) { @@ -168,13 +123,33 @@ } $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one(transitionEnd, removeElement) : + this.$backdrop.one($.support.transition.end, removeElement) : removeElement() } else if ( callback ) { callback() } } + function show() { + var transition = $.support.transition && that.$element.hasClass('fade') + , that = this + + this.$element + .appendTo(document.body) + .show() + + if (transition) { + this.$element[0].offsetWidth // force reflow + } + + this.$element + .addClass('in') + + transition ? + this.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : + this.$element.trigger('shown') + } + function escape() { var that = this if ( this.isShown && this.settings.keyboard ) { @@ -233,7 +208,7 @@ /* MODAL DATA-IMPLEMENTATION * ========================= */ - $(document).ready(function () { + $(function () { $('body').delegate('[data-controls-modal]', 'click', function (e) { e.preventDefault() var $this = $(this).data('show', true) diff --git a/js/bootstrap-popover.js b/js/bootstrap-popover.js index 1cf4b8917..3fdde19b5 100644 --- a/js/bootstrap-popover.js +++ b/js/bootstrap-popover.js @@ -1,5 +1,5 @@ /* =========================================================== - * bootstrap-popover.js v1.3.0 + * bootstrap-popover.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#popover * =========================================================== * Copyright 2011 Twitter, Inc. @@ -62,7 +62,6 @@ }) - /* POPOVER PLUGIN DEFINITION * ======================= */ diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js index 4b146e580..1269d91ec 100644 --- a/js/bootstrap-scrollspy.js +++ b/js/bootstrap-scrollspy.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-scrollspy.js v1.3.0 + * bootstrap-scrollspy.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2011 Twitter, Inc. @@ -22,14 +22,14 @@ var $window = $(window) - function ScrollSpy( topbar, selector ) { - var processScroll = $.proxy(this.processScroll, this) - this.$topbar = $(topbar) - this.selector = selector || 'li > a' + function ScrollSpy() { + var process = $.proxy(this.process, this) + this.$topbar = $('body') + this.selector = '[data-scrollspy] li > a' this.refresh() - this.$topbar.delegate(this.selector, 'click', processScroll) - $window.scroll(processScroll) - this.processScroll() + this.$topbar.delegate(this.selector, 'click', process) + $window.scroll(process) + this.process() } ScrollSpy.prototype = { @@ -45,7 +45,7 @@ }) } - , processScroll: function () { + , process: function () { var scrollTop = $window.scrollTop() + 10 , offsets = this.offsets , targets = this.targets @@ -56,50 +56,34 @@ activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activateButton( targets[i] ) + && this.activate( targets[i] ) } } - , activateButton: function (target) { + , activate: function (target) { + var active + this.activeTarget = target this.$topbar .find(this.selector).parent('.active') .removeClass('active') - this.$topbar + active = this.$topbar .find(this.selector + '[href="' + target + '"]') .parent('li') .addClass('active') - } - - } - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - $.fn.scrollSpy = function( options ) { - var scrollspy = this.data('scrollspy') - - if (!scrollspy) { - return this.each(function () { - $(this).data('scrollspy', new ScrollSpy( this, options )) - }) - } - - if ( options === true ) { - return scrollspy - } + if ( active.parent('.dropdown-menu') ) { + active.closest('li.dropdown').addClass('active') + } - if ( typeof options == 'string' ) { - scrollspy[options]() - } + } - return this } - $(document).ready(function () { - $('body').scrollSpy('[data-scrollspy] li > a') + $(function () { + new ScrollSpy() }) }( window.jQuery || window.ender )
\ No newline at end of file diff --git a/js/bootstrap-tabs.js b/js/bootstrap-tabs.js index b94adfc25..86bd4784f 100644 --- a/js/bootstrap-tabs.js +++ b/js/bootstrap-tabs.js @@ -1,5 +1,5 @@ /* ======================================================== - * bootstrap-tabs.js v1.3.0 + * bootstrap-tabs.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2011 Twitter, Inc. @@ -21,24 +21,33 @@ !function( $ ){ function activate ( element, container ) { - container.find('> .active').removeClass('active') + container + .find('> .active') + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + element.addClass('active') + + if ( element.parent('.dropdown-menu') ) { + element.closest('li.dropdown').addClass('active') + } } function tab( e ) { var $this = $(this) - , $ul = $this.closest('ul') + , $ul = $this.closest('ul:not(.dropdown-menu)') , href = $this.attr('href') , previous - if (/^#\w+/.test(href)) { + if ( /^#\w+/.test(href) ) { e.preventDefault() - if ($this.parent('li').hasClass('active')) { + if ( $this.parent('li').hasClass('active') ) { return } - previous = $ul.find('.active a')[0] + previous = $ul.find('.active a').last()[0] $href = $(href) activate($this.parent('li'), $ul) @@ -55,14 +64,8 @@ /* TABS/PILLS PLUGIN DEFINITION * ============================ */ - $.fn.tabs = $.fn.pills = function ( selector ) { - return this.each(function () { - $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab) - }) - } - - $(document).ready(function () { - $('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a') + $(function () { + $('body').delegate('ul[data-tabs] > li > a, ul[data-pills] > li > a', 'click', tab) }) }( window.jQuery || window.ender );
\ No newline at end of file diff --git a/js/bootstrap-transitions.js b/js/bootstrap-transitions.js new file mode 100644 index 000000000..49b5338a8 --- /dev/null +++ b/js/bootstrap-transitions.js @@ -0,0 +1,45 @@ +/* =================================================== + * bootstrap-transitions.js v2.0.0 + * http://twitter.github.com/bootstrap/javascript.html + * =================================================== + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + +$(function () { + + /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) + * ======================================================= */ + + $.support.transition = (function () { + var thisBody = document.body || document.documentElement + , thisStyle = thisBody.style + , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined + + return support && { + end: (function () { + var transitionEnd = "TransitionEnd" + if ( $.browser.webkit ) { + transitionEnd = "webkitTransitionEnd" + } else if ( $.browser.mozilla ) { + transitionEnd = "transitionend" + } else if ( $.browser.opera ) { + transitionEnd = "oTransitionEnd" + } + return transitionEnd + })() + } + })() + +})
\ No newline at end of file diff --git a/js/bootstrap-twipsy.js b/js/bootstrap-twipsy.js index 0144c4815..7c195fbc7 100644 --- a/js/bootstrap-twipsy.js +++ b/js/bootstrap-twipsy.js @@ -1,5 +1,5 @@ /* ========================================================== - * bootstrap-twipsy.js v1.3.0 + * bootstrap-twipsy.js v2.0.0 * http://twitter.github.com/bootstrap/javascript.html#twipsy * Adapted from the original jQuery.tipsy by Jason Frame * ========================================================== @@ -21,35 +21,6 @@ !function( $ ) { - /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) - * ======================================================= */ - - var transitionEnd - - $(document).ready(function () { - - $.support.transition = (function () { - var thisBody = document.body || document.documentElement - , thisStyle = thisBody.style - , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined - return support - })() - - // set CSS transition event type - if ( $.support.transition ) { - transitionEnd = "TransitionEnd" - if ( $.browser.webkit ) { - transitionEnd = "webkitTransitionEnd" - } else if ( $.browser.mozilla ) { - transitionEnd = "transitionend" - } else if ( $.browser.opera ) { - transitionEnd = "oTransitionEnd" - } - } - - }) - - /* TWIPSY PUBLIC CLASS DEFINITION * ============================== */ @@ -131,7 +102,7 @@ } $.support.transition && this.$tip.hasClass('fade') ? - $tip.bind(transitionEnd, removeElement) : + $tip.bind($.support.transition.end, removeElement) : removeElement() } diff --git a/js/tests/index.html b/js/tests/index.html index 2ca94102a..617fcd92a 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -11,6 +11,7 @@ <script src="vendor/qunit.js"></script> <!-- plugin sources --> + <script src="../../js/bootstrap-transitions.js"></script> <script src="../../js/bootstrap-alerts.js"></script> <script src="../../js/bootstrap-dropdown.js"></script> <script src="../../js/bootstrap-modal.js"></script> |
