distrib/gitblit.properties
@@ -295,6 +295,13 @@ # SINCE 0.7.0 web.enableRpcAdministration = false # If true, the web ui layout will respond and adapt to the browser's dimensions. # if false, the web ui will use a 940px fixed-width layout. # http://twitter.github.com/bootstrap/scaffolding.html#responsive # # SINCE 1.0.0 web.useResponsiveLayout = true # Allow Gravatar images to be displayed in Gitblit pages. # # SINCE 0.8.0 docs/04_releases.mkd
@@ -11,11 +11,14 @@ #### changes - Changed default layout for web ui from fixed-width layout to responsive (issue 101) - IUserService interface has changed to better accomodate custom authentication and/or custom authorization - Updated Japanese translation (Github/zakki) #### additions - Added setting to control responsive or fixed-width layout (issue 101) **New:** *web.useResponsiveLayout = true* - Added setting to control charsets for blob string decoding. Default encodings are UTF-8, ISO-8859-1, and server's default charset. (issue 97) **New:** *web.blobEncodings = UTF-8 ISO-8859-1* - Exposed JGit's internal configuration settings in gitblit.properties/web.xml (issue 93) @@ -32,6 +35,11 @@ - Added script to facilitate proxy environment setup on Linux (Github/mragab) - Added Spanish translation (Eduardo Guervos Narvaez) #### dependency changes - updated to Bootstrap 2.0.4 - added Ivy 2.2.0 (for Grape support in Groovy hook scripts) **0.9.3** *released 2012-04-11* #### fixes resources/bootstrap/css/bootstrap-responsive.css
@@ -1,5 +1,5 @@ /*! * Bootstrap Responsive v2.0.2 * Bootstrap Responsive v2.0.4 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 @@ -7,85 +7,86 @@ * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ .clearfix { *zoom: 1; } .clearfix:before, .clearfix:after { display: table; content: ""; } .clearfix:after { clear: both; } .hide-text { overflow: hidden; text-indent: 100%; white-space: nowrap; font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 28px; /* Make inputs at least the height of their button counterpart */ /* Makes inputs behave like true block-level elements */ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none; display: none !important; } .visible-tablet { display: none; display: none !important; } .visible-desktop { display: block; } .hidden-phone { display: block; } .hidden-tablet { display: block; } .hidden-desktop { display: none; display: none !important; } @media (max-width: 767px) { .visible-phone { display: block; display: inherit !important; } .hidden-phone { display: none; display: none !important; } .hidden-desktop { display: block; display: inherit !important; } .visible-desktop { display: none; display: none !important; } } @media (min-width: 768px) and (max-width: 979px) { .visible-tablet { display: block; display: inherit !important; } .hidden-tablet { display: none; display: none !important; } .hidden-desktop { display: block; display: inherit !important; } .visible-desktop { display: none; display: none !important ; } } @media (max-width: 480px) { .nav-collapse { -webkit-transform: translate3d(0, 0, 0); @@ -111,14 +112,14 @@ padding-top: 0; } .form-horizontal .form-actions { padding-left: 10px; padding-right: 10px; padding-left: 10px; } .modal { position: absolute; top: 10px; left: 10px; right: 10px; left: 10px; width: auto; margin: 0; } @@ -133,14 +134,28 @@ position: static; } } @media (max-width: 767px) { body { padding-left: 20px; padding-right: 20px; padding-left: 20px; } .navbar-fixed-top { margin-left: -20px; .navbar-fixed-top, .navbar-fixed-bottom { margin-right: -20px; margin-left: -20px; } .container-fluid { padding: 0; } .dl-horizontal dt { float: none; width: auto; clear: none; text-align: left; } .dl-horizontal dd { margin-left: 0; } .container { width: auto; @@ -148,19 +163,20 @@ .row-fluid { width: 100%; } .row { .row, .thumbnails { margin-left: 0; } .row > [class*="span"], .row-fluid > [class*="span"] { float: none; [class*="span"], .row-fluid [class*="span"] { display: block; float: none; width: auto; margin: 0; margin-left: 0; } .thumbnails [class*="span"] { width: auto; } .input-large, .input-xlarge, .input-xxlarge, input[class*="span"], select[class*="span"], textarea[class*="span"], @@ -168,20 +184,20 @@ display: block; width: 100%; min-height: 28px; /* Make inputs at least the height of their button counterpart */ /* Makes inputs behave like true block-level elements */ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .input-prepend input, .input-append input, .input-prepend input[class*="span"], .input-append input[class*="span"] { display: inline-block; width: auto; } } @media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; @@ -288,205 +304,136 @@ .row-fluid:after { clear: both; } .row-fluid > [class*="span"] { .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 28px; margin-left: 2.762430939%; *margin-left: 2.709239449638298%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .row-fluid > [class*="span"]:first-child { .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid > .span12 { .row-fluid .span12 { width: 99.999999993%; *width: 99.9468085036383%; } .row-fluid > .span11 { .row-fluid .span11 { width: 91.436464082%; *width: 91.38327259263829%; } .row-fluid > .span10 { .row-fluid .span10 { width: 82.87292817100001%; *width: 82.8197366816383%; } .row-fluid > .span9 { .row-fluid .span9 { width: 74.30939226%; *width: 74.25620077063829%; } .row-fluid > .span8 { .row-fluid .span8 { width: 65.74585634900001%; *width: 65.6926648596383%; } .row-fluid > .span7 { .row-fluid .span7 { width: 57.182320438000005%; *width: 57.129128948638304%; } .row-fluid > .span6 { .row-fluid .span6 { width: 48.618784527%; *width: 48.5655930376383%; } .row-fluid > .span5 { .row-fluid .span5 { width: 40.055248616%; *width: 40.0020571266383%; } .row-fluid > .span4 { .row-fluid .span4 { width: 31.491712705%; *width: 31.4385212156383%; } .row-fluid > .span3 { .row-fluid .span3 { width: 22.928176794%; *width: 22.874985304638297%; } .row-fluid > .span2 { .row-fluid .span2 { width: 14.364640883%; *width: 14.311449393638298%; } .row-fluid > .span1 { .row-fluid .span1 { width: 5.801104972%; *width: 5.747913482638298%; } input, textarea, .uneditable-input { margin-left: 0; } input.span12, textarea.span12, .uneditable-input.span12 { input.span12, textarea.span12, .uneditable-input.span12 { width: 714px; } input.span11, textarea.span11, .uneditable-input.span11 { input.span11, textarea.span11, .uneditable-input.span11 { width: 652px; } input.span10, textarea.span10, .uneditable-input.span10 { input.span10, textarea.span10, .uneditable-input.span10 { width: 590px; } input.span9, textarea.span9, .uneditable-input.span9 { input.span9, textarea.span9, .uneditable-input.span9 { width: 528px; } input.span8, textarea.span8, .uneditable-input.span8 { input.span8, textarea.span8, .uneditable-input.span8 { width: 466px; } input.span7, textarea.span7, .uneditable-input.span7 { input.span7, textarea.span7, .uneditable-input.span7 { width: 404px; } input.span6, textarea.span6, .uneditable-input.span6 { input.span6, textarea.span6, .uneditable-input.span6 { width: 342px; } input.span5, textarea.span5, .uneditable-input.span5 { input.span5, textarea.span5, .uneditable-input.span5 { width: 280px; } input.span4, textarea.span4, .uneditable-input.span4 { input.span4, textarea.span4, .uneditable-input.span4 { width: 218px; } input.span3, textarea.span3, .uneditable-input.span3 { input.span3, textarea.span3, .uneditable-input.span3 { width: 156px; } input.span2, textarea.span2, .uneditable-input.span2 { input.span2, textarea.span2, .uneditable-input.span2 { width: 94px; } input.span1, textarea.span1, .uneditable-input.span1 { input.span1, textarea.span1, .uneditable-input.span1 { width: 32px; } } @media (max-width: 979px) { body { padding-top: 0; } .navbar-fixed-top { position: static; margin-bottom: 18px; } .navbar-fixed-top .navbar-inner { padding: 5px; } .navbar .container { width: auto; padding: 0; } .navbar .brand { padding-left: 10px; padding-right: 10px; margin: 0 0 0 -5px; } .navbar .nav-collapse { clear: left; } .navbar .nav { float: none; margin: 0 0 9px; } .navbar .nav > li { float: none; } .navbar .nav > li > a { margin-bottom: 2px; } .navbar .nav > .divider-vertical { display: none; } .navbar .nav .nav-header { color: #999999; text-shadow: none; } .navbar .nav > li > a, .navbar .dropdown-menu a { padding: 6px 15px; font-weight: bold; color: #999999; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .navbar .dropdown-menu li + li a { margin-bottom: 2px; } .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover { background-color: #222222; } .navbar .dropdown-menu { position: static; top: auto; left: auto; float: none; display: block; max-width: none; margin: 0 15px; padding: 0; background-color: transparent; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .navbar .dropdown-menu:before, .navbar .dropdown-menu:after { display: none; } .navbar .dropdown-menu .divider { display: none; } .navbar-form, .navbar-search { float: none; padding: 9px 15px; margin: 9px 0; border-top: 1px solid #222222; border-bottom: 1px solid #222222; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } .navbar .nav.pull-right { float: none; margin-left: 0; } .navbar-static .navbar-inner { padding-left: 10px; padding-right: 10px; } .btn-navbar { display: block; } .nav-collapse { overflow: hidden; height: 0; } } @media (min-width: 980px) { .nav-collapse.collapse { height: auto !important; overflow: visible !important; } } @media (min-width: 1200px) { .row { margin-left: -30px; @@ -593,88 +540,132 @@ .row-fluid:after { clear: both; } .row-fluid > [class*="span"] { .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 28px; margin-left: 2.564102564%; *margin-left: 2.510911074638298%; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .row-fluid > [class*="span"]:first-child { .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid > .span12 { .row-fluid .span12 { width: 100%; *width: 99.94680851063829%; } .row-fluid > .span11 { .row-fluid .span11 { width: 91.45299145300001%; *width: 91.3997999636383%; } .row-fluid > .span10 { .row-fluid .span10 { width: 82.905982906%; *width: 82.8527914166383%; } .row-fluid > .span9 { .row-fluid .span9 { width: 74.358974359%; *width: 74.30578286963829%; } .row-fluid > .span8 { .row-fluid .span8 { width: 65.81196581200001%; *width: 65.7587743226383%; } .row-fluid > .span7 { .row-fluid .span7 { width: 57.264957265%; *width: 57.2117657756383%; } .row-fluid > .span6 { .row-fluid .span6 { width: 48.717948718%; *width: 48.6647572286383%; } .row-fluid > .span5 { .row-fluid .span5 { width: 40.170940171000005%; *width: 40.117748681638304%; } .row-fluid > .span4 { .row-fluid .span4 { width: 31.623931624%; *width: 31.5707401346383%; } .row-fluid > .span3 { .row-fluid .span3 { width: 23.076923077%; *width: 23.0237315876383%; } .row-fluid > .span2 { .row-fluid .span2 { width: 14.529914530000001%; *width: 14.4767230406383%; } .row-fluid > .span1 { .row-fluid .span1 { width: 5.982905983%; *width: 5.929714493638298%; } input, textarea, .uneditable-input { margin-left: 0; } input.span12, textarea.span12, .uneditable-input.span12 { input.span12, textarea.span12, .uneditable-input.span12 { width: 1160px; } input.span11, textarea.span11, .uneditable-input.span11 { input.span11, textarea.span11, .uneditable-input.span11 { width: 1060px; } input.span10, textarea.span10, .uneditable-input.span10 { input.span10, textarea.span10, .uneditable-input.span10 { width: 960px; } input.span9, textarea.span9, .uneditable-input.span9 { input.span9, textarea.span9, .uneditable-input.span9 { width: 860px; } input.span8, textarea.span8, .uneditable-input.span8 { input.span8, textarea.span8, .uneditable-input.span8 { width: 760px; } input.span7, textarea.span7, .uneditable-input.span7 { input.span7, textarea.span7, .uneditable-input.span7 { width: 660px; } input.span6, textarea.span6, .uneditable-input.span6 { input.span6, textarea.span6, .uneditable-input.span6 { width: 560px; } input.span5, textarea.span5, .uneditable-input.span5 { input.span5, textarea.span5, .uneditable-input.span5 { width: 460px; } input.span4, textarea.span4, .uneditable-input.span4 { input.span4, textarea.span4, .uneditable-input.span4 { width: 360px; } input.span3, textarea.span3, .uneditable-input.span3 { input.span3, textarea.span3, .uneditable-input.span3 { width: 260px; } input.span2, textarea.span2, .uneditable-input.span2 { input.span2, textarea.span2, .uneditable-input.span2 { width: 160px; } input.span1, textarea.span1, .uneditable-input.span1 { input.span1, textarea.span1, .uneditable-input.span1 { width: 60px; } .thumbnails { @@ -683,4 +674,142 @@ .thumbnails > li { margin-left: 30px; } .row-fluid .thumbnails { margin-left: 0; } } @media (max-width: 979px) { body { padding-top: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: static; } .navbar-fixed-top { margin-bottom: 18px; } .navbar-fixed-bottom { margin-top: 18px; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding: 5px; } .navbar .container { width: auto; padding: 0; } .navbar .brand { padding-right: 10px; padding-left: 10px; margin: 0 0 0 -5px; } .nav-collapse { clear: both; } .nav-collapse .nav { float: none; margin: 0 0 9px; } .nav-collapse .nav > li { float: none; } .nav-collapse .nav > li > a { margin-bottom: 2px; } .nav-collapse .nav > .divider-vertical { display: none; } .nav-collapse .nav .nav-header { color: #999999; text-shadow: none; } .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { padding: 6px 15px; font-weight: bold; color: #999999; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } .nav-collapse .btn { padding: 4px 10px 4px; font-weight: normal; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .nav-collapse .dropdown-menu li + li a { margin-bottom: 2px; } .nav-collapse .nav > li > a:hover, .nav-collapse .dropdown-menu a:hover { background-color: #222222; } .nav-collapse.in .btn-group { padding: 0; margin-top: 5px; } .nav-collapse .dropdown-menu { position: static; top: auto; left: auto; display: block; float: none; max-width: none; padding: 0; margin: 0 15px; background-color: transparent; border: none; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .nav-collapse .dropdown-menu:before, .nav-collapse .dropdown-menu:after { display: none; } .nav-collapse .dropdown-menu .divider { display: none; } .nav-collapse .navbar-form, .nav-collapse .navbar-search { float: none; padding: 9px 15px; margin: 9px 0; border-top: 1px solid #222222; border-bottom: 1px solid #222222; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); } .navbar .nav-collapse .nav.pull-right { float: none; margin-left: 0; } .nav-collapse, .nav-collapse.collapse { height: 0; overflow: hidden; } .navbar .btn-navbar { display: block; } .navbar-static .navbar-inner { padding-right: 10px; padding-left: 10px; } } @media (min-width: 980px) { .nav-collapse.collapse { height: auto !important; overflow: visible !important; } } resources/bootstrap/css/bootstrap.css
Diff too large resources/bootstrap/img/glyphicons-halflings-white.pngresources/bootstrap/img/glyphicons-halflings.pngresources/bootstrap/js/bootstrap.js
@@ -1,5 +1,5 @@ /* =================================================== * bootstrap-transition.js v2.0.2 * bootstrap-transition.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#transitions * =================================================== * Copyright 2012 Twitter, Inc. @@ -17,39 +17,49 @@ * limitations under the License. * ========================================================== */ !function( $ ) { $(function () { "use strict" "use strict"; // jshint ;_; /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) * ======================================================= */ $.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" var transitionEnd = (function () { var el = document.createElement('bootstrap') , transEndEventNames = { 'WebkitTransition' : 'webkitTransitionEnd' , 'MozTransition' : 'transitionend' , 'OTransition' : 'oTransitionEnd' , 'msTransition' : 'MSTransitionEnd' , 'transition' : 'transitionend' } return transitionEnd , name for (name in transEndEventNames){ if (el.style[name] !== undefined) { return transEndEventNames[name] } } }()) return transitionEnd && { end: transitionEnd } })() }) }( window.jQuery );/* ========================================================== * bootstrap-alert.js v2.0.2 * bootstrap-alert.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#alerts * ========================================================== * Copyright 2012 Twitter, Inc. @@ -70,7 +80,8 @@ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* ALERT CLASS DEFINITION * ====================== */ @@ -80,11 +91,7 @@ $(el).on('click', dismiss, this.close) } Alert.prototype = { constructor: Alert , close: function ( e ) { Alert.prototype.close = function (e) { var $this = $(this) , selector = $this.attr('data-target') , $parent @@ -95,15 +102,16 @@ } $parent = $(selector) $parent.trigger('close') e && e.preventDefault() $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) $parent .trigger('close') .removeClass('in') $parent.trigger(e = $.Event('close')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { $parent @@ -114,8 +122,6 @@ $.support.transition && $parent.hasClass('fade') ? $parent.on($.support.transition.end, removeElement) : removeElement() } } @@ -142,7 +148,7 @@ }) }( window.jQuery );/* ============================================================ * bootstrap-button.js v2.0.2 * bootstrap-button.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#buttons * ============================================================ * Copyright 2012 Twitter, Inc. @@ -160,9 +166,11 @@ * limitations under the License. * ============================================================ */ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* BUTTON PUBLIC CLASS DEFINITION * ============================== */ @@ -172,11 +180,7 @@ this.options = $.extend({}, $.fn.button.defaults, options) } Button.prototype = { constructor: Button , setState: function ( state ) { Button.prototype.setState = function (state) { var d = 'disabled' , $el = this.$element , data = $el.data() @@ -195,7 +199,7 @@ }, 0) } , toggle: function () { Button.prototype.toggle = function () { var $parent = this.$element.parent('[data-toggle="buttons-radio"]') $parent && $parent @@ -203,8 +207,6 @@ .removeClass('active') this.$element.toggleClass('active') } } @@ -241,7 +243,7 @@ }) }( window.jQuery );/* ========================================================== * bootstrap-carousel.js v2.0.2 * bootstrap-carousel.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. @@ -262,14 +264,15 @@ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* CAROUSEL CLASS DEFINITION * ========================= */ var Carousel = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.carousel.defaults, options) this.options = options this.options.slide && this.slide(this.options.slide) this.options.pause == 'hover' && this.$element .on('mouseenter', $.proxy(this.pause, this)) @@ -278,8 +281,11 @@ Carousel.prototype = { cycle: function () { this.interval = setInterval($.proxy(this.next, this), this.options.interval) cycle: function (e) { if (!e) this.paused = false this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) return this } @@ -304,7 +310,8 @@ return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) } , pause: function () { , pause: function (e) { if (!e) this.paused = true clearInterval(this.interval) this.interval = null return this @@ -327,6 +334,7 @@ , direction = type == 'next' ? 'left' : 'right' , fallback = type == 'next' ? 'first' : 'last' , that = this , e = $.Event('slide') this.sliding = true @@ -336,24 +344,26 @@ if ($next.hasClass('active')) return if (!$.support.transition && this.$element.hasClass('slide')) { this.$element.trigger('slide') $active.removeClass('active') $next.addClass('active') this.sliding = false this.$element.trigger('slid') } else { if ($.support.transition && this.$element.hasClass('slide')) { this.$element.trigger(e) if (e.isDefaultPrevented()) return $next.addClass(type) $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) this.$element.trigger('slide') this.$element.one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false setTimeout(function () { that.$element.trigger('slid') }, 0) }) } else { this.$element.trigger(e) if (e.isDefaultPrevented()) return $active.removeClass('active') $next.addClass('active') this.sliding = false this.$element.trigger('slid') } isCycling && this.cycle() @@ -371,11 +381,11 @@ return this.each(function () { var $this = $(this) , data = $this.data('carousel') , options = typeof option == 'object' && option , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) if (!data) $this.data('carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option) else if (typeof option == 'string' || (option = options.slide)) data[option]() else data.cycle() else if (options.interval) data.cycle() }) } @@ -401,7 +411,7 @@ }) }( window.jQuery );/* ============================================================= * bootstrap-collapse.js v2.0.2 * bootstrap-collapse.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. @@ -419,16 +429,21 @@ * limitations under the License. * ============================================================ */ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* COLLAPSE PUBLIC CLASS DEFINITION * ================================ */ var Collapse = function ( element, options ) { this.$element = $(element) this.options = $.extend({}, $.fn.collapse.defaults, options) if (this.options["parent"]) { this.$parent = $(this.options["parent"]) if (this.options.parent) { this.$parent = $(this.options.parent) } this.options.toggle && this.toggle() @@ -444,27 +459,35 @@ } , show: function () { var dimension = this.dimension() , scroll = $.camelCase(['scroll', dimension].join('-')) , actives = this.$parent && this.$parent.find('.in') var dimension , scroll , actives , hasData if (this.transitioning) return dimension = this.dimension() scroll = $.camelCase(['scroll', dimension].join('-')) actives = this.$parent && this.$parent.find('> .accordion-group > .in') if (actives && actives.length) { hasData = actives.data('collapse') if (hasData && hasData.transitioning) return actives.collapse('hide') hasData || actives.data('collapse', null) } this.$element[dimension](0) this.transition('addClass', 'show', 'shown') this.transition('addClass', $.Event('show'), 'shown') this.$element[dimension](this.$element[0][scroll]) } , hide: function () { var dimension = this.dimension() var dimension if (this.transitioning) return dimension = this.dimension() this.reset(this.$element[dimension]()) this.transition('removeClass', 'hide', 'hidden') this.transition('removeClass', $.Event('hide'), 'hidden') this.$element[dimension](0) } @@ -476,7 +499,7 @@ [dimension](size || 'auto') [0].offsetWidth this.$element[size ? 'addClass' : 'removeClass']('collapse') this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') return this } @@ -484,13 +507,18 @@ , transition: function ( method, startEvent, completeEvent ) { var that = this , complete = function () { if (startEvent == 'show') that.reset() if (startEvent.type == 'show') that.reset() that.transitioning = 0 that.$element.trigger(completeEvent) } this.$element .trigger(startEvent) [method]('in') this.$element.trigger(startEvent) if (startEvent.isDefaultPrevented()) return this.transitioning = 1 this.$element[method]('in') $.support.transition && this.$element.hasClass('collapse') ? this.$element.one($.support.transition.end, complete) : @@ -502,6 +530,7 @@ } } /* COLLAPSIBLE PLUGIN DEFINITION * ============================== */ @@ -538,7 +567,7 @@ }) }( window.jQuery );/* ============================================================ * bootstrap-dropdown.js v2.0.2 * bootstrap-dropdown.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. @@ -559,7 +588,8 @@ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* DROPDOWN CLASS DEFINITION * ========================= */ @@ -578,9 +608,13 @@ , toggle: function ( e ) { var $this = $(this) , selector = $this.attr('data-target') , $parent , selector , isActive if ($this.is('.disabled, :disabled')) return selector = $this.attr('data-target') if (!selector) { selector = $this.attr('href') @@ -593,7 +627,8 @@ isActive = $parent.hasClass('open') clearMenus() !isActive && $parent.toggleClass('open') if (!isActive) $parent.toggleClass('open') return false } @@ -625,11 +660,13 @@ $(function () { $('html').on('click.dropdown.data-api', clearMenus) $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) $('body') .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() }) .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) }) }( window.jQuery );/* ========================================================= * bootstrap-modal.js v2.0.2 * bootstrap-modal.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. @@ -650,7 +687,8 @@ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* MODAL CLASS DEFINITION * ====================== */ @@ -671,19 +709,23 @@ , show: function () { var that = this , e = $.Event('show') if (this.isShown) return this.$element.trigger(e) if (this.isShown || e.isDefaultPrevented()) return $('body').addClass('modal-open') this.isShown = true this.$element.trigger('show') escape.call(this) backdrop.call(this, function () { var transition = $.support.transition && that.$element.hasClass('fade') !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position if (!that.$element.parent().length) { that.$element.appendTo(document.body) //don't move modals dom position } that.$element .show() @@ -704,18 +746,21 @@ , hide: function ( e ) { e && e.preventDefault() if (!this.isShown) return var that = this e = $.Event('hide') this.$element.trigger(e) if (!this.isShown || e.isDefaultPrevented()) return this.isShown = false $('body').removeClass('modal-open') escape.call(this) this.$element .trigger('hide') .removeClass('in') this.$element.removeClass('in') $.support.transition && this.$element.hasClass('fade') ? hideWithTransition.call(this) : @@ -838,7 +883,7 @@ }) }( window.jQuery );/* =========================================================== * bootstrap-tooltip.js v2.0.2 * bootstrap-tooltip.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#tooltips * Inspired by the original jQuery.tipsy by Jason Frame * =========================================================== @@ -857,9 +902,11 @@ * limitations under the License. * ========================================================== */ !function( $ ) { "use strict" "use strict"; // jshint ;_; /* TOOLTIP PUBLIC CLASS DEFINITION * =============================== */ @@ -909,31 +956,25 @@ , enter: function ( e ) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.show) { self.show() } else { if (!self.options.delay || !self.options.delay.show) return self.show() clearTimeout(this.timeout) self.hoverState = 'in' setTimeout(function() { if (self.hoverState == 'in') { self.show() } this.timeout = setTimeout(function() { if (self.hoverState == 'in') self.show() }, self.options.delay.show) } } , leave: function ( e ) { var self = $(e.currentTarget)[this.type](this._options).data(this.type) if (!self.options.delay || !self.options.delay.hide) { self.hide() } else { if (this.timeout) clearTimeout(this.timeout) if (!self.options.delay || !self.options.delay.hide) return self.hide() self.hoverState = 'out' setTimeout(function() { if (self.hoverState == 'out') { self.hide() } this.timeout = setTimeout(function() { if (self.hoverState == 'out') self.hide() }, self.options.delay.hide) } } , show: function () { @@ -991,9 +1032,20 @@ } } , isHTML: function(text) { // html string detection logic adapted from jQuery return typeof text != 'string' || ( text.charAt(0) === "<" && text.charAt( text.length - 1 ) === ">" && text.length >= 3 ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text) } , setContent: function () { var $tip = this.tip() $tip.find('.tooltip-inner').html(this.getTitle()) , title = this.getTitle() $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title) $tip.removeClass('fade in top bottom left right') } @@ -1044,8 +1096,6 @@ title = $e.attr('data-original-title') || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) title = (title || '').toString().replace(/(^\s*|\s*$)/, "") return title } @@ -1098,16 +1148,17 @@ $.fn.tooltip.defaults = { animation: true , delay: 0 , selector: false , placement: 'top' , selector: false , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' , trigger: 'hover' , title: '' , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' , delay: 0 } }( window.jQuery );/* =========================================================== * bootstrap-popover.js v2.0.2 }(window.jQuery); /* =========================================================== * bootstrap-popover.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#popovers * =========================================================== * Copyright 2012 Twitter, Inc. @@ -1128,11 +1179,16 @@ !function( $ ) { "use strict" "use strict"; // jshint ;_; /* POPOVER PUBLIC CLASS DEFINITION * =============================== */ var Popover = function ( element, options ) { this.init('popover', element, options) } /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js ========================================== */ @@ -1146,8 +1202,8 @@ , title = this.getTitle() , content = this.getContent() $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title) $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content) $tip.find('.popover-title')[this.isHTML(title) ? 'html' : 'text'](title) $tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](content) $tip.removeClass('fade top bottom left right in') } @@ -1163,8 +1219,6 @@ content = $e.attr('data-content') || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) content = content.toString().replace(/(^\s*|\s*$)/, "") return content } @@ -1201,7 +1255,7 @@ }) }( window.jQuery );/* ============================================================= * bootstrap-scrollspy.js v2.0.2 * bootstrap-scrollspy.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1219,9 +1273,11 @@ * limitations under the License. * ============================================================== */ !function ( $ ) { "use strict" "use strict"; // jshint ;_; /* SCROLLSPY CLASS DEFINITION * ========================== */ @@ -1235,7 +1291,7 @@ this.selector = (this.options.target || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 || '') + ' .nav li > a' this.$body = $('body').on('click.scroll.data-api', this.selector, process) this.$body = $('body') this.refresh() this.process() } @@ -1245,24 +1301,42 @@ constructor: ScrollSpy , refresh: function () { this.targets = this.$body var self = this , $targets this.offsets = $([]) this.targets = $([]) $targets = this.$body .find(this.selector) .map(function () { var href = $(this).attr('href') return /^#\w/.test(href) && $(href).length ? href : null var $el = $(this) , href = $el.data('target') || $el.attr('href') , $href = /^#\w/.test(href) && $(href) return ( $href && href.length && [[ $href.position().top, href ]] ) || null }) this.offsets = $.map(this.targets, function (id) { return $(id).position().top .sort(function (a, b) { return a[0] - b[0] }) .each(function () { self.offsets.push(this[0]) self.targets.push(this[1]) }) } , process: function () { var scrollTop = this.$scrollElement.scrollTop() + this.options.offset , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight , maxScroll = scrollHeight - this.$scrollElement.height() , offsets = this.offsets , targets = this.targets , activeTarget = this.activeTarget , i if (scrollTop >= maxScroll) { return activeTarget != (i = targets.last()[0]) && this.activate ( i ) } for (i = offsets.length; i--;) { activeTarget != targets[i] @@ -1274,21 +1348,27 @@ , activate: function (target) { var active , selector this.activeTarget = target this.$body .find(this.selector).parent('.active') $(this.selector) .parent('.active') .removeClass('active') active = this.$body .find(this.selector + '[href="' + target + '"]') selector = this.selector + '[data-target="' + target + '"],' + this.selector + '[href="' + target + '"]' active = $(selector) .parent('li') .addClass('active') if ( active.parent('.dropdown-menu') ) { active.closest('li.dropdown').addClass('active') active = active.closest('li.dropdown').addClass('active') } active.trigger('activate') } } @@ -1325,7 +1405,7 @@ }) }( window.jQuery );/* ======================================================== * bootstrap-tab.js v2.0.2 * bootstrap-tab.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2012 Twitter, Inc. @@ -1346,7 +1426,8 @@ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* TAB CLASS DEFINITION * ==================== */ @@ -1365,6 +1446,7 @@ , selector = $this.attr('data-target') , previous , $target , e if (!selector) { selector = $this.attr('href') @@ -1375,10 +1457,13 @@ previous = $ul.find('.active a').last()[0] $this.trigger({ type: 'show' , relatedTarget: previous e = $.Event('show', { relatedTarget: previous }) $this.trigger(e) if (e.isDefaultPrevented()) return $target = $(selector) @@ -1454,7 +1539,7 @@ }) }( window.jQuery );/* ============================================================= * bootstrap-typeahead.js v2.0.2 * bootstrap-typeahead.js v2.0.4 * http://twitter.github.com/bootstrap/javascript.html#typeahead * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1472,9 +1557,14 @@ * limitations under the License. * ============================================================ */ !function( $ ){ "use strict" "use strict"; // jshint ;_; /* TYPEAHEAD PUBLIC CLASS DEFINITION * ================================= */ var Typeahead = function ( element, options ) { this.$element = $(element) @@ -1482,6 +1572,7 @@ this.matcher = this.options.matcher || this.matcher this.sorter = this.options.sorter || this.sorter this.highlighter = this.options.highlighter || this.highlighter this.updater = this.options.updater || this.updater this.$menu = $(this.options.menu).appendTo('body') this.source = this.options.source this.shown = false @@ -1494,9 +1585,14 @@ , select: function () { var val = this.$menu.find('.active').attr('data-value') this.$element.val(val) this.$element.change(); this.$element .val(this.updater(val)) .change() return this.hide() } , updater: function (item) { return item } , show: function () { @@ -1532,7 +1628,7 @@ } items = $.grep(this.source, function (item) { if (that.matcher(item)) return item return that.matcher(item) }) items = this.sorter(items) @@ -1564,7 +1660,8 @@ } , highlighter: function (item) { return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) { var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { return '<strong>' + match + '</strong>' }) } @@ -1656,11 +1753,13 @@ break case 38: // up arrow if (e.type != 'keydown') break e.preventDefault() this.prev() break case 40: // down arrow if (e.type != 'keydown') break e.preventDefault() this.next() break resources/gitblit.css
@@ -40,8 +40,16 @@ color: #0069D6; } .navbar { height:40px !important; .navbar .brand { padding: 7px 20px; } .navbar .pull-right { margin: 0; } .navbar ul.nav { margin: 0 !important; } .navbar ul.nav li a { @@ -52,10 +60,14 @@ .navbar ul.nav li a:hover { color: #abd4ff !important; text-decoration: underline; } .navbar .nav .active > a:hover { text-decoration: underline; } .navbar-inner { height:40px !important; background-color:#000050; background-repeat:repeat-x; background-image:-khtml-gradient(linear, left top, left bottom, from(#000060), to(#000040)); @@ -77,6 +89,7 @@ background-image: url(arrow_page.png); background-position: center bottom; outline: 0; padding-bottom:1px; } .navbar .active a { src/com/gitblit/utils/ActivityUtils.java
@@ -151,12 +151,12 @@ * @param email * address to query Gravatar * @param width * size of thumbnail. if width <= 0, the defalt of 60 is used. * size of thumbnail. if width <= 0, the default of 50 is used. * @return */ public static String getGravatarThumbnailUrl(String email, int width) { if (width <= 0) { width = 60; width = 50; } String emailHash = StringUtils.getMD5(email); String url = MessageFormat.format( src/com/gitblit/wicket/pages/ActivityPage.html
@@ -8,10 +8,10 @@ <div class="pageTitle"> <h2><wicket:message key="gb.recentActivity"></wicket:message><small> / <span wicket:id="subheader">[days back]</span></small></h2> </div> <div style="height: 155px;text-align: center;"> <div class="hidden-phone" style="height: 155px;text-align: center;"> <table> <tr> <td><span id="chartDaily"></span></td> <td><span class="hidden-tablet" id="chartDaily"></span></td> <td><span id="chartRepositories"></span></td> <td><span id="chartAuthors"></span></td> </tr> src/com/gitblit/wicket/pages/BasePage.html
@@ -8,14 +8,10 @@ <wicket:head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title wicket:id="title">[page title]</title> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"/> <link rel="stylesheet" type="text/css" href="gitblit.css"/> <!-- Responsive CSS must be included after the above body css! --> <!-- <link rel="stylesheet" href="bootstrap/css/bootstrap-responsive.css"/> --> <link rel="icon" href="gitblt-favicon.png" type="image/png" /> <script type="text/javascript" src="bootstrap/js/jquery.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> <link rel="stylesheet" href="bootstrap/css/bootstrap.css"/> <link rel="stylesheet" type="text/css" href="gitblit.css"/> </wicket:head> <body> @@ -35,6 +31,22 @@ </footer> </div> <!-- Override Bootstrap's responsive menu background highlighting --> <style> @media (max-width: 979px) { .nav-collapse .nav > li > a:hover, .nav-collapse .dropdown-menu a:hover { background-color: #000070; } .navbar div > ul .dropdown-menu li a { color: #ccc; } } </style> <!-- Include scripts at end for faster page loading --> <script type="text/javascript" src="bootstrap/js/jquery.js"></script> <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script> </body> <!-- user fragment --> src/com/gitblit/wicket/pages/BasePage.java
@@ -27,6 +27,7 @@ import org.apache.wicket.PageParameters; import org.apache.wicket.RestartResponseAtInterceptPageException; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.CSSPackageResource; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; @@ -57,15 +58,23 @@ public BasePage() { super(); logger = LoggerFactory.getLogger(getClass()); customizeHeader(); loginByCookie(); } public BasePage(PageParameters params) { super(params); logger = LoggerFactory.getLogger(getClass()); customizeHeader(); loginByCookie(); } private void customizeHeader() { if (GitBlit.getBoolean(Keys.web.useResponsiveLayout, true)) { add(CSSPackageResource.getHeaderContribution("bootstrap/css/bootstrap-responsive.css")); } } @Override protected void onBeforeRender() { if (GitBlit.isDebugMode()) { src/com/gitblit/wicket/pages/CommitDiffPage.html
@@ -27,7 +27,7 @@ <tr wicket:id="changedPath"> <td class="changeType"><span wicket:id="changeType">[change type]</span></td> <td class="path"><span wicket:id="pathName">[commit path]</span></td> <td class="rightAlign"> <td class="hidden-phone rightAlign"> <span class="link"> <a wicket:id="patch"><wicket:message key="gb.patch"></wicket:message></a> | <a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="blame"><wicket:message key="gb.blame"></wicket:message></a> | <a wicket:id="history"><wicket:message key="gb.history"></wicket:message></a> </span> src/com/gitblit/wicket/pages/CommitPage.html
@@ -15,9 +15,10 @@ <!-- commit header --> <div wicket:id="commitHeader">[commit header]</div> <!-- Author Gravatar --> <span style="float:right;vertical-align: top;" wicket:id="authorAvatar" /> <div class="row"> <div class="span10"> <!-- commit info --> <table class="plain"> <tr><th><wicket:message key="gb.refs">refs</wicket:message></th><td><div wicket:id="refsPanel">[references]</div></td></tr> @@ -43,6 +44,9 @@ </td> </tr> </table> </div> </div> <!-- full message --> <pre class="commit_message" wicket:id="fullMessage">[commit message]</pre> @@ -74,7 +78,7 @@ <tr wicket:id="changedPath"> <td class="changeType"><span wicket:id="changeType">[change type]</span></td> <td class="path"><span wicket:id="pathName">[commit path]</span></td> <td class="rightAlign"> <td class="hidden-phone rightAlign"> <span class="link"> <a wicket:id="diff"><wicket:message key="gb.diff"></wicket:message></a> | <a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="blame"><wicket:message key="gb.blame"></wicket:message></a> | <a wicket:id="history"><wicket:message key="gb.history"></wicket:message></a> </span> src/com/gitblit/wicket/pages/CommitPage.java
@@ -82,7 +82,6 @@ add(createPersonPanel("commitAuthor", c.getAuthorIdent(), Constants.SearchType.AUTHOR)); add(WicketUtils.createTimestampLabel("commitAuthorDate", c.getAuthorIdent().getWhen(), getTimeZone())); add(new GravatarImage("authorAvatar", c.getAuthorIdent())); // committer add(createPersonPanel("commitCommitter", c.getCommitterIdent(), Constants.SearchType.COMMITTER)); src/com/gitblit/wicket/pages/LuceneSearchPage.html
@@ -17,8 +17,8 @@ <div class="pageTitle"> <h2><wicket:message key="gb.search"></wicket:message></h2> </div> <form class="form-inline" style="margin:0px;" wicket:id="searchForm"> <div class="row-fluid"> <form class="form-inline" wicket:id="searchForm"> <div class="row"> <div class="span3"> <h3><wicket:message key="gb.repositories"></wicket:message></h3> <select wicket:id="repositories" ></select> src/com/gitblit/wicket/pages/RepositoryPage.html
@@ -21,11 +21,11 @@ <div class="nav-collapse" wicket:id="navPanel"></div> <a class="brand" style="text-decoration: none;" wicket:id="syndication"> <a class="hidden-phone hidden-tablet brand" style="text-decoration: none;" wicket:id="syndication"> <img style="border:0px;vertical-align:middle;" src="feed_16x16.png"></img> </a> <form class="pull-right" style="margin-top:7px;" wicket:id="searchForm"> <form class="hidden-phone hidden-tablet pull-right" style="margin-top:7px;" wicket:id="searchForm"> <span class="search"> <select class="small" wicket:id="searchType"/> <input type="text" id="searchBox" wicket:id="searchBox" value=""/> @@ -37,15 +37,17 @@ <!-- page content --> <div class="container"> <div style="text-align:center;padding-top:5px;" wicket:id="feedback">[Feedback Panel]</div> <div style="text-align:center;" wicket:id="feedback">[Feedback Panel]</div> <!-- page header --> <div class="pageTitle"> <span wicket:id="workingCopy"></span> <div class="row"> <div wicket:id="workingCopy"></div> <div class="span9"> <h2><span wicket:id="repositoryName">[repository name]</span> <small><span wicket:id="pageName">[page name]</span></small></h2> </div> </div> </div> <wicket:child /> </div> src/com/gitblit/wicket/pages/RepositoryPage.java
@@ -153,7 +153,7 @@ protected void setupPage(String repositoryName, String pageName) { add(new LinkPanel("repositoryName", null, StringUtils.stripDotGit(repositoryName), SummaryPage.class, WicketUtils.newRepositoryParameter(repositoryName))); add(new Label("pageName", pageName)); add(new Label("pageName", pageName).setRenderBodyOnly(true)); if (getRepositoryModel().isBare) { add(new Label("workingCopy").setVisible(false)); } else { src/com/gitblit/wicket/pages/RootPage.html
@@ -19,21 +19,21 @@ <div class="nav-collapse" wicket:id="navPanel"></div> <form class="pull-right" style="margin-top:5px;" wicket:id="loginForm"> <form class="pull-right" wicket:id="loginForm"> <span class="form-search"> <input wicket:id="username" class="input-small" type="text" /> <input wicket:id="password" class="input-small" type="password" /> <button class="btn btn-primary" style="margin-top:0px; "type="submit"><wicket:message key="gb.login"></wicket:message></button> <button class="btn btn-primary" type="submit"><wicket:message key="gb.login"></wicket:message></button> </span> </form> </div> </div> </div> <div style="text-align:center;padding-top:5px;" wicket:id="feedback">[Feedback Panel]</div> <!-- subclass content --> <div class="container"> <div style="text-align:center" wicket:id="feedback">[Feedback Panel]</div> <wicket:child/> </div> </wicket:extend> src/com/gitblit/wicket/pages/SummaryPage.html
@@ -8,7 +8,7 @@ <div style="clear:both;"> <!-- Repository Activity Chart --> <div style="float:right;"> <div class="hidden-phone" style="float:right;"> <img class="activityGraph" wicket:id="commitsChart" /> </div> @@ -17,8 +17,8 @@ <table class="plain"> <tr><th><wicket:message key="gb.description">[description]</wicket:message></th><td><span wicket:id="repositoryDescription">[repository description]</span></td></tr> <tr><th><wicket:message key="gb.owner">[owner]</wicket:message></th><td><span wicket:id="repositoryOwner">[repository owner]</span></td></tr> <tr><th><wicket:message key="gb.lastChange">[last change]</wicket:message></th><td><span wicket:id="repositoryLastChange">[repository last change]</span></td></tr> <tr><th><wicket:message key="gb.stats">[stats]</wicket:message></th><td><span wicket:id="branchStats">[branch stats]</span> <span class="link"><a wicket:id="metrics"><wicket:message key="gb.metrics">[metrics]</wicket:message></a></span></td></tr> <tr class="hidden-phone"><th><wicket:message key="gb.lastChange">[last change]</wicket:message></th><td><span wicket:id="repositoryLastChange">[repository last change]</span></td></tr> <tr class="hidden-phone"><th><wicket:message key="gb.stats">[stats]</wicket:message></th><td><span wicket:id="branchStats">[branch stats]</span> <span class="link"><a wicket:id="metrics"><wicket:message key="gb.metrics">[metrics]</wicket:message></a></span></td></tr> <tr><th valign="middle"><wicket:message key="gb.repositoryUrl">[URL]</wicket:message></th><td><img style="vertical-align: middle;" wicket:id="accessRestrictionIcon" /><span wicket:id="repositoryCloneUrl">[repository clone url]</span><div wicket:id="otherUrls" style="margin-left:20px;"></div></td></tr> </table> </div> src/com/gitblit/wicket/pages/SummaryPage.java
@@ -189,7 +189,7 @@ && GitBlit.getBoolean(Keys.web.generateActivityGraph, true)) { IChartData data = WicketUtils.getChartData(metrics); ChartProvider provider = new ChartProvider(new Dimension(340, 100), ChartType.LINE, ChartProvider provider = new ChartProvider(new Dimension(290, 100), ChartType.LINE, data); ChartAxis dateAxis = new ChartAxis(ChartAxisType.BOTTOM); dateAxis.setLabels(new String[] { metrics.get(0).name, src/com/gitblit/wicket/pages/TreePage.html
@@ -24,7 +24,7 @@ <td class="icon"><img wicket:id="pathIcon" /></td> <td><span wicket:id="pathName"></span></td> <td class="size"><span wicket:id="pathSize">[path size]</span></td> <td class="mode"><span wicket:id="pathPermissions">[path permissions]</span></td> <td class="hidden-phone mode"><span wicket:id="pathPermissions">[path permissions]</span></td> <td class="treeLinks"><span wicket:id="pathLinks">[path links]</span></td> </tr> </table> src/com/gitblit/wicket/panels/ActivityPanel.html
@@ -11,11 +11,11 @@ <div class="header"><i class="icon-refresh" style="vertical-align: middle;"></i> <span style="font-weight:bold;" wicket:id="title">[title]</span></div> <table class="activity"> <tr wicket:id="commit"> <td class="date" style="width:60px; vertical-align: middle;text-align: right;padding-right:10px;" ><span wicket:id="time">[time of day]</span></td> <td class="hidden-phone date" style="width:60px; vertical-align: middle;text-align: right;padding-right:10px;" ><span wicket:id="time">[time of day]</span></td> <td style="width:10em;text-align:left;vertical-align: middle;"> <span wicket:id="repository" class="repositorySwatch">[repository link]</span> </td> <td style="width:30px;vertical-align: middle;"><span wicket:id="avatar" style="vertical-align: middle;"></span></td> <td class="hidden-phone" style="width:30px;vertical-align: middle;"><span wicket:id="avatar" style="vertical-align: middle;"></span></td> <td style="vertical-align: middle;"> <img wicket:id="commitIcon" style="vertical-align: middle;"></img> <span wicket:id="message">[shortlog commit link]</span><br/> @@ -24,7 +24,7 @@ <td style="text-align:right;vertical-align: middle;"> <div wicket:id="commitRefs">[commit refs]</div> </td> <td class="rightAlign" style="width:7em;vertical-align: middle;"> <td class="hidden-phone rightAlign" style="width:7em;vertical-align: middle;"> <span class="link"> <a wicket:id="view" target="_blank"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="diff" target="_blank"><wicket:message key="gb.diff"></wicket:message></a> | <a wicket:id="tree" target="_blank"><wicket:message key="gb.tree"></wicket:message></a> </span> src/com/gitblit/wicket/panels/BranchesPanel.html
@@ -15,9 +15,9 @@ <tr wicket:id="branch"> <td class="date"><span wicket:id="branchDate">[branch date]</span></td> <td><span wicket:id="branchName">[branch name]</span></td> <td class="author"><span wicket:id="branchAuthor">[branch author]</span></td> <td><span wicket:id="branchLog">[branch log]</span></td> <td class="rightAlign"> <td class="hidden-phone hidden-tablet author"><span wicket:id="branchAuthor">[branch author]</span></td> <td class="hidden-phone"><span wicket:id="branchLog">[branch log]</span></td> <td class="hidden-phone rightAlign"> <span wicket:id="branchLinks"></span> </td> </tr> src/com/gitblit/wicket/panels/CommitHeaderPanel.html
@@ -6,10 +6,19 @@ <wicket:panel> <div class="commitHeader"> <div style="float:right;"> <span wicket:id="author">[author]</span> <span wicket:id="date">[date]</span> <div class="row"> <div> <span class="pull-right" wicket:id="authorAvatar"></span> </div> <span wicket:id="shortmessage">[short message]</span> <span wicket:id="commitid">[commit id]</span> <div class="span9"> <div wicket:id="shortmessage">[short message]</div> <div wicket:id="author">[author]</div> <div> <span wicket:id="date">[date]</span> <span class="hidden-phone" style="padding-left:20px;color:#888;" wicket:id="commitid">[commit id]</span> </div> </div> </div> </div> </wicket:panel> </html> src/com/gitblit/wicket/panels/CommitHeaderPanel.java
@@ -40,8 +40,9 @@ add(new LinkPanel("shortmessage", "title", StringUtils.trimString(c.getShortMessage(), Constants.LEN_SHORTLOG), CommitPage.class, WicketUtils.newObjectParameter(repositoryName, c.getName()))); add(new Label("commitid", "(" + c.getName().substring(0, 8) + ")")); add(new Label("commitid", c.getName())); add(new Label("author", c.getAuthorIdent().getName())); add(WicketUtils.createDateLabel("date", c.getAuthorIdent().getWhen(), getTimeZone())); add(new GravatarImage("authorAvatar", c.getAuthorIdent())); } } src/com/gitblit/wicket/panels/HistoryPanel.html
@@ -18,9 +18,9 @@ <tr wicket:id="commit"> <td class="date"><span wicket:id="commitDate">[commit date]</span></td> <td class="icon"><img wicket:id="commitIcon" /></td> <td class="author"><span wicket:id="commitAuthor">[commit author]</span></td> <td class="hidden-phone author"><span wicket:id="commitAuthor">[commit author]</span></td> <td class="message"><table class="nestedTable"><tr><td><span style="vertical-align:middle;" wicket:id="commitShortMessage">[commit short message]</span></td><td><div style="text-align:right;" wicket:id="commitRefs">[commit refs]</div></td></tr></table></td> <td class="rightAlign"> <td class="hidden-phone rightAlign"> <span wicket:id="historyLinks">[history links]</span> </td> </tr> src/com/gitblit/wicket/panels/LinkPanel.java
@@ -83,7 +83,7 @@ WicketUtils.setCssClass(icon, bootstrapIcon); link.add(icon); } link.add(new Label("label", labelModel)); link.add(new Label("label", labelModel).setRenderBodyOnly(true)); add(link); } src/com/gitblit/wicket/panels/LogPanel.html
@@ -12,11 +12,11 @@ <table class="pretty"> <tbody> <tr wicket:id="commit"> <td class="date"><span wicket:id="commitDate">[commit date]</span></td> <td class="author"><span wicket:id="commitAuthor">[commit author]</span></td> <td class="icon"><img wicket:id="commitIcon" /></td> <td class="date" style="width:6em;"><span wicket:id="commitDate">[commit date]</span></td> <td class="hidden-phone author"><span wicket:id="commitAuthor">[commit author]</span></td> <td class="hidden-phone icon"><img wicket:id="commitIcon" /></td> <td class="message"><table class="nestedTable"><tr><td><span style="vertical-align:middle;" wicket:id="commitShortMessage">[commit short message]</span></td><td><div style="text-align:right;" wicket:id="commitRefs">[commit refs]</div></td></tr></table></td> <td class="rightAlign"> <td class="hidden-phone hidden-tablet rightAlign"> <span class="link"> <a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="diff"><wicket:message key="gb.diff"></wicket:message></a> | <a wicket:id="tree"><wicket:message key="gb.tree"></wicket:message></a> </span> src/com/gitblit/wicket/panels/RepositoriesPanel.html
@@ -42,12 +42,12 @@ <img style="vertical-align: middle;" src="git-black-16x16.png"/> <wicket:message key="gb.repository">Repository</wicket:message> </th> <th wicket:id="orderByDescription"><wicket:message key="gb.description">Description</wicket:message></th> <th wicket:id="orderByOwner"><wicket:message key="gb.owner">Owner</wicket:message></th> <th></th> <th class="hidden-phone" wicket:id="orderByDescription"><wicket:message key="gb.description">Description</wicket:message></th> <th class="hidden-tablet hidden-phone" wicket:id="orderByOwner"><wicket:message key="gb.owner">Owner</wicket:message></th> <th class="hidden-phone"></th> <th wicket:id="orderByDate"><wicket:message key="gb.lastChange">Last Change</wicket:message></th> <th></th> <th class="right"></th> <th class="hidden-phone"></th> <th class="hidden-phone right"></th> </tr> </wicket:fragment> @@ -57,12 +57,12 @@ <img style="vertical-align: middle;" src="git-black-16x16.png"/> <wicket:message key="gb.repository">Repository</wicket:message> </th> <th><wicket:message key="gb.description">Description</wicket:message></th> <th><wicket:message key="gb.owner">Owner</wicket:message></th> <th></th> <th class="hidden-phone" ><span><wicket:message key="gb.description">Description</wicket:message></span></th> <th class="hidden-tablet hidden-phone"><span><wicket:message key="gb.owner">Owner</wicket:message></span></th> <th class="hidden-phone"></th> <th><wicket:message key="gb.lastChange">Last Change</wicket:message></th> <th></th> <th class="right"></th> <th class="hidden-phone"></th> <th class="hidden-phone right"></th> </tr> </wicket:fragment> @@ -72,12 +72,12 @@ <wicket:fragment wicket:id="repositoryRow"> <td class="left" style="padding-left:3px;" ><b><span class="repositorySwatch" wicket:id="repositorySwatch"></span></b> <span style="padding-left:3px;" wicket:id="repositoryName">[repository name]</span></td> <td><div class="list" wicket:id="repositoryDescription">[repository description]</div></td> <td class="author"><span wicket:id="repositoryOwner">[repository owner]</span></td> <td style="text-align: right;padding-right:10px;"><img class="inlineIcon" wicket:id="ticketsIcon" /><img class="inlineIcon" wicket:id="docsIcon" /><img class="inlineIcon" wicket:id="frozenIcon" /><img class="inlineIcon" wicket:id="federatedIcon" /><img class="inlineIcon" wicket:id="accessRestrictionIcon" /></td> <td class="hidden-phone"><span class="list" wicket:id="repositoryDescription">[repository description]</span></td> <td class="hidden-tablet hidden-phone author"><span wicket:id="repositoryOwner">[repository owner]</span></td> <td class="hidden-phone" style="text-align: right;padding-right:10px;"><img class="inlineIcon" wicket:id="ticketsIcon" /><img class="inlineIcon" wicket:id="docsIcon" /><img class="inlineIcon" wicket:id="frozenIcon" /><img class="inlineIcon" wicket:id="federatedIcon" /><img class="inlineIcon" wicket:id="accessRestrictionIcon" /></td> <td><span wicket:id="repositoryLastChange">[last change]</span></td> <td style="text-align: right;padding-right:15px;"><span style="font-size:0.8em;" wicket:id="repositorySize">[repository size]</span></td> <td class="rightAlign"> <td class="hidden-phone" style="text-align: right;padding-right:15px;"><span style="font-size:0.8em;" wicket:id="repositorySize">[repository size]</span></td> <td class="hidden-phone rightAlign"> <span wicket:id="repositoryLinks"></span> <a style="text-decoration: none;" wicket:id="syndication"> <img style="border:0px;vertical-align:middle;" src="feed_16x16.png"></img> src/com/gitblit/wicket/panels/RepositoryUrlPanel.html
@@ -5,7 +5,7 @@ lang="en"> <wicket:panel> <span wicket:id="repositoryUrl" style="color: blue;">[repository url]</span><span wicket:id="copyFunction"></span> <span wicket:id="repositoryUrl" style="color: blue;">[repository url]</span><span class="hidden-phone hidden-tablet" wicket:id="copyFunction"></span> <!-- Plain JavaScript manual copy & paste --> <wicket:fragment wicket:id="jsPanel"> src/com/gitblit/wicket/panels/TagsPanel.html
@@ -14,9 +14,9 @@ <tr wicket:id="tag"> <td class="date"><span wicket:id="tagDate">[tag date]</span></td> <td><b><span wicket:id="tagName">[tag name]</span></b></td> <td class="icon"><img wicket:id="tagIcon" /></td> <td><span wicket:id="tagDescription">[tag description]</span></td> <td class="rightAlign"> <td class="hidden-phone icon"><img wicket:id="tagIcon" /></td> <td class="hidden-phone"><span wicket:id="tagDescription">[tag description]</span></td> <td class="hidden-phone rightAlign"> <span wicket:id="tagLinks"></span> </td> </tr> src/com/gitblit/wicket/panels/UsersPanel.html
@@ -15,19 +15,19 @@ <img style="vertical-align: middle; border: 1px solid #888; background-color: white;" src="user_16x16.png"/> <wicket:message key="gb.users">[users]</wicket:message> </th> <th class="left"><wicket:message key="gb.displayName">[display name]</wicket:message></th> <th class="hidden-phone hidden-tablet left"><wicket:message key="gb.displayName">[display name]</wicket:message></th> <th style="width:120px;"><wicket:message key="gb.accessLevel">[access level]</wicket:message></th> <th style="width:140px;"><wicket:message key="gb.teamMemberships">[team memberships]</wicket:message></th> <th style="width:100px;"><wicket:message key="gb.repositories">[repositories]</wicket:message></th> <th class="hidden-phone" style="width:100px;"><wicket:message key="gb.repositories">[repositories]</wicket:message></th> <th style="width:80px;" class="right"></th> </tr> <tbody> <tr wicket:id="userRow"> <td class="left" ><span class="list" wicket:id="username">[username]</span></td> <td class="left" ><span class="list" wicket:id="displayName">[display name]</span></td> <td class="hidden-phone hidden-tablet left" ><span class="list" wicket:id="displayName">[display name]</span></td> <td class="left" ><span class="list" wicket:id="accesslevel">[access level]</span></td> <td class="left" ><span class="list" wicket:id="teams">[team memberships]</span></td> <td class="left" ><span class="list" wicket:id="repositories">[repositories]</span></td> <td class="hidden-phone left" ><span class="list" wicket:id="repositories">[repositories]</span></td> <td class="rightAlign"><span wicket:id="userLinks"></span></td> </tr> </tbody>