http://git-wip-us.apache.org/repos/asf/ambari/blob/2a77e39c/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff ---------------------------------------------------------------------- diff --git a/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff b/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff differ
http://git-wip-us.apache.org/repos/asf/ambari/blob/2a77e39c/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff2 ---------------------------------------------------------------------- diff --git a/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff2 b/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/ambari-web/vendor/fonts/glyphicons-halflings-regular.woff2 differ http://git-wip-us.apache.org/repos/asf/ambari/blob/2a77e39c/ambari-web/vendor/scripts/bootstrap-combobox.js ---------------------------------------------------------------------- diff --git a/ambari-web/vendor/scripts/bootstrap-combobox.js b/ambari-web/vendor/scripts/bootstrap-combobox.js index 09c2fba..ec3e7d3 100644 --- a/ambari-web/vendor/scripts/bootstrap-combobox.js +++ b/ambari-web/vendor/scripts/bootstrap-combobox.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-combobox.js v1.0.0 + * bootstrap-combobox.js v1.1.7 * ============================================================= * Copyright 2012 Daniel Farrell * @@ -16,235 +16,447 @@ * limitations under the License. * ============================================================ */ -!function ($) { - - "use strict" - - var Combobox = function (element, options) { - this.options = $.extend({}, $.fn.combobox.defaults, options) - this.$container = this.setup(element) - this.$element = this.$container.find('input') - this.$button = this.$container.find('.dropdown-toggle') - this.$target = this.$container.find('select') - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.$menu = $(this.options.menu).appendTo('body') - this.placeholder = this.options.placeholder || this.$target.attr('data-placeholder') - this.$element.attr('placeholder', this.placeholder) - this.shown = false - this.selected = false - this.refresh() - this.listen() - } - - /* NOTE: COMBOBOX EXTENDS BOOTSTRAP-TYPEAHEAD.js - ========================================== */ - - Combobox.prototype = $.extend({}, $.fn.typeahead.Constructor.prototype, { - - constructor:Combobox, setup:function (element) { - var select = $(element) - , combobox = $(this.options.template) - select.before(combobox) - select.detach() - combobox.append(select) - return combobox - }, - parse:function () { - var map = {} +!function( $ ) { + + "use strict"; + + /* COMBOBOX PUBLIC CLASS DEFINITION + * ================================ */ + + var Combobox = function ( element, options ) { + this.options = $.extend({}, $.fn.combobox.defaults, options); + this.template = this.options.template || this.template + this.$source = $(element); + this.$container = this.setup(); + this.$element = this.$container.find('input[type=text]'); + this.$target = this.$container.find('input[type=hidden]'); + this.$button = this.$container.find('.dropdown-toggle'); + this.$menu = $(this.options.menu).appendTo('body'); + this.matcher = this.options.matcher || this.matcher; + this.sorter = this.options.sorter || this.sorter; + this.highlighter = this.options.highlighter || this.highlighter; + this.shown = false; + this.selected = false; + this.refresh(); + this.transferAttributes(); + this.listen(); + }; + + Combobox.prototype = { + + constructor: Combobox + + , setup: function () { + var combobox = $(this.template()); + this.$source.before(combobox); + this.$source.hide(); + return combobox; + } + + , disable: function() { + this.$element.prop('disabled', true); + this.$button.attr('disabled', true); + this.disabled = true; + this.$container.addClass('combobox-disabled'); + } + + , enable: function() { + this.$element.prop('disabled', false); + this.$button.attr('disabled', false); + this.disabled = false; + this.$container.removeClass('combobox-disabled'); + } + , parse: function () { + var that = this + , map = {} , source = [] , selected = false - this.$target.find('option').each(function () { - var option = $(this) - map[option.text()] = option.val() - source.push(option.text()) - if (option.attr('selected')) selected = option.html() + , selectedValue = ''; + this.$source.find('option').each(function() { + var option = $(this); + if (option.val() === '') { + that.options.placeholder = option.text(); + return; + } + map[option.text()] = option.val(); + source.push(option.text()); + if (option.prop('selected')) { + selected = option.text(); + selectedValue = option.val(); + } }) - this.map = map + this.map = map; if (selected) { - this.$element.val(selected) - this.$container.addClass('combobox-selected') - this.selected = true + this.$element.val(selected); + this.$target.val(selectedValue); + this.$container.addClass('combobox-selected'); + this.selected = true; } - return source - }, - toggle:function () { - if (this.$container.hasClass('combobox-selected')) { - this.clearTarget() - this.$element.val('').focus() - } else { - if (this.shown) { - this.hide() - } else { - this.lookup() - } + return source; + } + + , transferAttributes: function() { + this.options.placeholder = this.$source.attr('data-placeholder') || this.options.placeholder + if(this.options.appendId !== "undefined") { + this.$element.attr('id', this.$source.attr('id') + this.options.appendId); } - }, - clearTarget:function () { - this.$target.val('') - this.$container.removeClass('combobox-selected') - this.selected = false - this.$target.trigger('change') - }, - refresh:function () { - this.source = this.parse() - this.options.items = this.source.length - } - - // modified typeahead function adding container and target handling - , select:function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element.val(val) - this.$container.addClass('combobox-selected') - this.$target.val(this.map[val]) - this.$target.trigger('change') - this.selected = true - return this.hide() - } - - // modified typeahead function removing the blank handling - , lookup:function (event) { - var that = this - , items - , q + this.$element.attr('placeholder', this.options.placeholder) + this.$target.prop('name', this.$source.prop('name')) + this.$target.val(this.$source.val()) + this.$source.removeAttr('name') // Remove from source otherwise form will pass parameter twice. + this.$element.attr('required', this.$source.attr('required')) + this.$element.attr('rel', this.$source.attr('rel')) + this.$element.attr('title', this.$source.attr('title')) + this.$element.attr('class', this.$source.attr('class')) + this.$element.attr('tabindex', this.$source.attr('tabindex')) + this.$source.removeAttr('tabindex') + if (this.$source.attr('disabled')!==undefined) + this.disable(); + } + + , select: function () { + var val = this.$menu.find('.active').attr('data-value'); + this.$element.val(this.updater(val)).trigger('change'); + this.$target.val(this.map[val]).trigger('change'); + this.$source.val(this.map[val]).trigger('change'); + this.$container.addClass('combobox-selected'); + this.selected = true; + return this.hide(); + } + + , updater: function (item) { + return item; + } + + , show: function () { + var pos = $.extend({}, this.$element.position(), { + height: this.$element[0].offsetHeight + }); + + this.$menu + .insertAfter(this.$element) + .css({ + top: pos.top + pos.height + , left: pos.left + }) + .show(); + + $('.dropdown-menu').on('mousedown', $.proxy(this.scrollSafety, this)); + + this.shown = true; + return this; + } + + , hide: function () { + this.$menu.hide(); + $('.dropdown-menu').off('mousedown', $.proxy(this.scrollSafety, this)); + this.$element.on('blur', $.proxy(this.blur, this)); + this.shown = false; + return this; + } + + , lookup: function (event) { + this.query = this.$element.val(); + return this.process(this.source); + } - this.query = this.$element.val() + , process: function (items) { + var that = this; - items = $.grep(this.source, function (item) { - if (that.matcher(item)) return item + items = $.grep(items, function (item) { + return that.matcher(item); }) - items = this.sorter(items) + items = this.sorter(items); if (!items.length) { - return this.shown ? this.hide() : this + return this.shown ? this.hide() : this; } - return this.render(items.slice(0, this.options.items)).show() + return this.render(items.slice(0, this.options.items)).show(); } - // modified typeahead function adding button handling - , listen:function () { - this.$element - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) + , template: function() { + if (this.options.bsVersion == '2') { + return '<div class="combobox-container"><input type="hidden" /> <div class="input-append"> <input type="text" autocomplete="false" /> <span class="add-on dropdown-toggle" data-dropdown="dropdown"> <span class="caret"/> <i class="icon-remove"/> </span> </div> </div>' + } else { + return '<div class="combobox-container"> <input type="hidden" /> <div class="input-group"> <input type="text" autocomplete="false" /> <span class="input-group-addon dropdown-toggle" data-dropdown="dropdown"> <span class="caret" /> <span class="glyphicon glyphicon-remove" /> </span> </div> </div>' + } + } + + , matcher: function (item) { + return ~item.toLowerCase().indexOf(this.query.toLowerCase()); + } + + , sorter: function (items) { + var beginswith = [] + , caseSensitive = [] + , caseInsensitive = [] + , item; + + while (item = items.shift()) { + if (!item.toLowerCase().indexOf(this.query.toLowerCase())) {beginswith.push(item);} + else if (~item.indexOf(this.query)) {caseSensitive.push(item);} + else {caseInsensitive.push(item);} + } + + return beginswith.concat(caseSensitive, caseInsensitive); + } + + , highlighter: function (item) { + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); + return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { + return '<strong>' + match + '</strong>'; + }) + } + + , render: function (items) { + var that = this; + + items = $(items).map(function (i, item) { + i = $(that.options.item).attr('data-value', item); + i.find('a').html(that.highlighter(item)); + return i[0]; + }) + + items.first().addClass('active'); + this.$menu.html(items); + return this; + } - if ($.browser.webkit || $.browser.msie) { - this.$element.on('keydown', $.proxy(this.keypress, this)) + , next: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , next = active.next(); + + if (!next.length) { + next = $(this.$menu.find('li')[0]); } -// hide menu hack - this.$button.on('mouseenter', $.proxy(this.addClassOnMouseEnter, this.$button)) - .on('mouseleave', $.proxy(this.addClassOnMouseLeave, this.$button)); + next.addClass('active'); + } - $(window).on('click', $.proxy(this.hideList, this)); -// hide menu hack end + , prev: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , prev = active.prev(); + if (!prev.length) { + prev = this.$menu.find('li').last(); + } + + prev.addClass('active'); + } + + , toggle: function () { + if (!this.disabled) { + if (this.$container.hasClass('combobox-selected')) { + this.clearTarget(); + this.triggerChange(); + this.clearElement(); + } else { + if (this.shown) { + this.hide(); + } else { + this.clearElement(); + this.lookup(); + } + } + } + } + + , scrollSafety: function(e) { + if (e.target.tagName == 'UL') { + this.$element.off('blur'); + } + } + , clearElement: function () { + this.$element.val('').focus(); + } + + , clearTarget: function () { + this.$source.val(''); + this.$target.val(''); + this.$container.removeClass('combobox-selected'); + this.selected = false; + } + + , triggerChange: function () { + this.$source.trigger('change'); + } + + , refresh: function () { + this.source = this.parse(); + this.options.items = this.source.length; + } + + , listen: function () { + this.$element + .on('focus', $.proxy(this.focus, this)) + .on('blur', $.proxy(this.blur, this)) + .on('keypress', $.proxy(this.keypress, this)) + .on('keyup', $.proxy(this.keyup, this)); + + if (this.eventSupported('keydown')) { + this.$element.on('keydown', $.proxy(this.keydown, this)); + } this.$menu .on('click', $.proxy(this.click, this)) .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) + .on('mouseleave', 'li', $.proxy(this.mouseleave, this)); this.$button - .on('click', $.proxy(this.toggle, this)) + .on('click', $.proxy(this.toggle, this)); + } + + , eventSupported: function(eventName) { + var isSupported = eventName in this.$element; + if (!isSupported) { + this.$element.setAttribute(eventName, 'return;'); + isSupported = typeof this.$element[eventName] === 'function'; + } + return isSupported; } - // modified typeahead function to clear on type and prevent on moving around - , keyup:function (e) { - switch (e.keyCode) { + , move: function (e) { + if (!this.shown) {return;} + + switch(e.keyCode) { + case 9: // tab + case 13: // enter + case 27: // escape + e.preventDefault(); + break; + + case 38: // up arrow + e.preventDefault(); + this.prev(); + this.fixMenuScroll(); + break; + case 40: // down arrow + e.preventDefault(); + this.next(); + this.fixMenuScroll(); + break; + } + + e.stopPropagation(); + } + + , fixMenuScroll: function(){ + var active = this.$menu.find('.active'); + if(active.length){ + var top = active.position().top; + var bottom = top + active.height(); + var scrollTop = this.$menu.scrollTop(); + var menuHeight = this.$menu.height(); + if(bottom > menuHeight){ + this.$menu.scrollTop(scrollTop + bottom - menuHeight); + } else if(top < 0){ + this.$menu.scrollTop(scrollTop + top); + } + } + } + + , keydown: function (e) { + this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]); + this.move(e); + } + + , keypress: function (e) { + if (this.suppressKeyPressRepeat) {return;} + this.move(e); + } + + , keyup: function (e) { + switch(e.keyCode) { + case 40: // down arrow + if (!this.shown){ + this.toggle(); + } + break; case 39: // right arrow case 38: // up arrow case 37: // left arrow case 36: // home case 35: // end case 16: // shift - break + case 17: // ctrl + case 18: // alt + break; case 9: // tab case 13: // enter - if (!this.shown) return - this.select() - break + if (!this.shown) {return;} + this.select(); + break; case 27: // escape - if (!this.shown) return - this.hide() - break + if (!this.shown) {return;} + this.hide(); + break; default: - this.clearTarget() - this.lookup() + this.clearTarget(); + this.lookup(); } - e.stopPropagation() - e.preventDefault() - }, - - addClassOnMouseEnter:function (e) { - console.warn("Enter"); - this.addClass('hover'); - }, + e.stopPropagation(); + e.preventDefault(); + } - addClassOnMouseLeave:function (e) { - console.warn("Leave"); - this.removeClass('hover'); - }, + , focus: function (e) { + this.focused = true; + } - // modified typeahead function to only hide menu if it is visible - blur:function (e) { - var that = this - e.stopPropagation() - e.preventDefault() - var val = this.$element.val() - if (!this.selected && val != "") { - this.$element.val("") - this.$target.val("").trigger('change') - } - if (this.shown) { - setTimeout(function () { - that.hide() - }, 150) - } - }, - - /** - * hide list - * @param e - */ - hideList:function (e) { - if (!this.$button.is(".hover")) { - var that = this; - if (this.shown) { - setTimeout(function () { - that.hide() - }, 150) - } + , blur: function (e) { + var that = this; + this.focused = false; + var val = this.$element.val(); + if (!this.selected && val !== '' ) { + this.$element.val(''); + this.$source.val('').trigger('change'); + this.$target.val('').trigger('change'); } + if (!this.mousedover && this.shown) {setTimeout(function () { that.hide(); }, 200);} } - }) + + , click: function (e) { + e.stopPropagation(); + e.preventDefault(); + this.select(); + this.$element.focus(); + } + + , mouseenter: function (e) { + this.mousedover = true; + this.$menu.find('.active').removeClass('active'); + $(e.currentTarget).addClass('active'); + } + + , mouseleave: function (e) { + this.mousedover = false; + } + }; /* COMBOBOX PLUGIN DEFINITION * =========================== */ - - $.fn.combobox = function (option) { + $.fn.combobox = function ( option ) { return this.each(function () { var $this = $(this) , data = $this.data('combobox') - , options = typeof option == 'object' && option - if (!data) $this.data('combobox', (data = new Combobox(this, options))) - if (typeof option == 'string') data[option]() - }) - } + , options = typeof option == 'object' && option; + if(!data) {$this.data('combobox', (data = new Combobox(this, options)));} + if (typeof option == 'string') {data[option]();} + }); + }; $.fn.combobox.defaults = { - template:'<div class="combobox-container"><input type="text" autocomplete="off" /><span class="add-on btn dropdown-toggle" data-dropdown="dropdown"><span class="caret"/><span class="combobox-clear"><i class="icon-remove"/></span></span></div>', - menu:'<ul class="typeahead typeahead-long dropdown-menu"></ul>', - item:'<li><a href="#"></a></li>', placeholder:null - } + bsVersion: '3' + , menu: '<ul class="typeahead typeahead-long dropdown-menu"></ul>' + , item: '<li><a href="#"></a></li>' + }; - $.fn.combobox.Constructor = Combobox + $.fn.combobox.Constructor = Combobox; -}(window.jQuery); +}( window.jQuery ); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/2a77e39c/ambari-web/vendor/scripts/bootstrap-datepicker.js ---------------------------------------------------------------------- diff --git a/ambari-web/vendor/scripts/bootstrap-datepicker.js b/ambari-web/vendor/scripts/bootstrap-datepicker.js index 51686e1..9ed8e68 100644 --- a/ambari-web/vendor/scripts/bootstrap-datepicker.js +++ b/ambari-web/vendor/scripts/bootstrap-datepicker.js @@ -334,6 +334,12 @@ var zIndex = parseInt(this.element.parents().filter(function() { return $(this).css('z-index') != 'auto'; }).first().css('z-index'))+10; + $('.modal').each(function(index, popup) { + var modalZIndex = $(popup).css('z-index'); + if (modalZIndex > zIndex) { + zIndex = modalZIndex; + } + }); var offset = this.component ? this.component.parent().offset() : this.element.offset(); var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(true); this.picker.css({