http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/assets/bootstrap/js/bootstrap.min.js
----------------------------------------------------------------------
diff --git a/assets/bootstrap/js/bootstrap.min.js 
b/assets/bootstrap/js/bootstrap.min.js
new file mode 100755
index 0000000..2fac40d
--- /dev/null
+++ b/assets/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,12 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer 
(http://getbootstrap.com/customize/?id=797685887ce86a89f1b08a9b11f473a4)
+ * Config saved to config.json and 
https://gist.github.com/797685887ce86a89f1b08a9b11f473a4
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires 
jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" 
")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new 
Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but 
lower than version 4")}(jQuery),+function(t){"use strict";function e(e){return 
this.each(function(){var 
i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new 
o(this)),"string"==typeof e&&n[e].call(i)})}var 
i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function
 i(){a.detach().trigger("closed.bs.alert").remove()}var 
n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var
 
a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasCl
 
ass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var
 
n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return
 
t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use
 strict";function e(e){return this.each(function(){var 
o=t(this),n=o.data("bs.button"),s="object"==typeof 
e&&e;n||o.data("bs.button",n=new 
i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var 
i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var
 
i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeA
 ttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var 
t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var 
i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else
 
this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var
 
o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return
 
t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var
 
o=t(i.target).closest(".btn");e.call(o,"toggle"),t(i.target).is('input[type="radio"],
 
input[type="checkbox"]')||(i.preventDefault(),o.is("input,button")?o.trigger("focus"):o.find("input:visi
 ble,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api 
blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use
 strict";function e(e){return this.each(function(){var 
o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof
 e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new 
i(this,s)),"number"==typeof 
e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var 
i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in
 
document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t
 
.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case
 37:this.prev();break;case 
39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return
 
e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return
 
this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var
 
i=this.getItemIndex(e),o="prev"==t&&0===i||"next"==t&&i==this.$items.length-1;if(o&&!this.options.wrap)return
 e;var n="prev"==t?-1:1,s=(i+n)%this.$items.length;return 
this.$items.eq(s)},i.prototype.to=function(t){var 
e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));re
 turn t>this.$items.length-1||0>t?void 
0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return
 e||(this.paused=!0),this.$element.find(".next, 
.prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return
 this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return 
this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var 
n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return
 this.sliding=!1;var 
h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").re
 moveClass("active");var 
p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var
 c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return 
t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join("
 ")).addClass("active"),n.removeClass(["active",r].join(" 
")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var
 
o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return
 t.fn.carousel=o,this};var n=function(i){var 
o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var
 
a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s
 
.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var
 i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function 
e(e){var 
i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var
 o=i&&t(i);return o&&o.length?o:e.parent()}function 
i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var 
o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function
 o(e){return this.each(function(){var 
i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new 
a(this)),"string"==t
 ypeof e&&o[e].call(i)})}var 
n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var
 n=t(this);if(!n.is(".disabled, :disabled")){var 
s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in 
document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var
 
r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var
 o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, 
:disabled")){var 
n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 
27==i.which&&n.find(s).trigger("focus"),o.trigger("c
 lick");var r=" li:not(.disabled):visible 
a",l=n.find(".dropdown-menu"+r);if(l.length){var 
h=l.index(i.target);38==i.which&&h>0&&h--,40==i.which&&h<l.length-1&&h++,~h||(h=0),l.eq(h).trigger("focus")}}}};var
 
r=t.fn.dropdown;t.fn.dropdown=o,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return
 
t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown
 
form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,a.prototype.toggle).on("keydown.bs.dropdown.data-api",s,a.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",a.prototype.keydown)}(jQuery),+function(t){"use
 strict";function e(e,o){return this.each(function(){var 
n=t(this),s=n.data("bs.modal"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof
 e&&e);s||n.data("bs.modal",s=new i(this,a)),"string"==typeof 
e?s[e](o):a.show&&s.show(o)})}var 
i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=th
 
is.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return
 this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var 
o=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(o.$element
 )&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var 
n=t.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),n&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var
 
s=t.Event("shown.bs.modal",{relatedTarget:e});n?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(s)}).emulateTransitionEnd(i.TRANSITION_DURATION):o.$element.trigger("focus").trigger(s)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this))
 
.emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var
 
t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=fun
 ction(e){var 
o=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var
 
s=t.support.transition&&n;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop
 
"+n).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return
 
this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else
 if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var 
a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else
 e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.a
 djustDialog=function(){var 
t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var
 t=window.innerWidth;if(!t){var 
e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var
 
t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var
 t=document.createElement("div");t.className="modal
 -scrollbar-measure",this.$body.append(t);var 
e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var 
o=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return
 
t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var
 
o=t(this),n=o.attr("href"),s=t(o.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),a=s.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},s.data(),o.data());o.is("a")&&i.preventDefault(),s.one("show.bs.modal",function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),e.call(s,a,this)})}(jQuery),+function(t){"use
 strict";function e(e){return this.each(function(){var 
o=t(this),n=o.data("bs.tooltip"),s="object"==typeof 
e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.tooltip",n=new 
i(this,s)),"string"==typeof e&&n[e]())})}var 
i=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.ho
 
verState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div
 class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div 
class="tooltip-inner"></div></div>',trigger:"hover 
focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof
 document.constructor&&!this.options.selector)throw new Error("`selector` 
option must be specified when initializing "+this.type+" on the window.document 
object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var 
a=n[s];if("click"
 
==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else
 if("manual"!=a){var 
r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return
 i.DEFAULTS},i.prototype.getOptions=function(e){return 
e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof
 
e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var
 e={},i=this.getDefaults();return 
this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var
 i=e instanceof 
this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new 
this.constructor(e.currentTarg
 et,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e 
instanceof 
t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var
 t in 
this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var
 i=e instanceof 
this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new 
this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e
 instanceof 
t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),i.isInStateTrue()?void
 
0:(clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):
 i.hide())},i.prototype.show=function(){var 
e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var
 
o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var
 
n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var
 r="function"==typeof 
this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var
 d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var 
f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top
 
-c<u.top?"bottom":"right"==r&&d.right+p>u.width?"left":"left"==r&&d.left-p<u.left?"right":r,s.removeClass(f).addClass(r)}var
 g=this.getCalculatedOffset(r,d,p,c);this.applyPlacement(g,r);var 
v=function(){var 
t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",v).emulateTransitionEnd(i.TRANSITION_DURATION):v()}},i.prototype.applyPlacement=function(e,i){var
 
o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,a=parseInt(o.css("margin-top"),10),r=parseInt(o.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var
 l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=s&&(e.top=e.top+s-h);var 
d=this.getViewportAdjustedDelta(i,e,l,h);d.left?e.left+=d.left:e.top+=d.top;var 
p=/top|bottom/.test(i),c=p?2*d.left-n+l:2*d.top-s+h,f=p?"o
 
ffsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],p)},i.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},i.prototype.setContent=function(){var
 
t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade
 in top bottom left right")},i.prototype.hide=function(e){function 
o(){"in"!=n.hoverState&&s.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var
 n=this,s=t(this.$tip),a=t.Event("hide.bs."+this.type);return 
this.$element.trigger(a),a.isDefaultPrevented()?void 
0:(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),this.hoverState=null,this)},i.prototype.fixTitle=function(){var
 t=this.$element;(t.attr("title")||"string"!=typeof 
t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},
 i.prototype.hasContent=function(){return 
this.getTitle()},i.prototype.getPosition=function(e){e=e||this.$element;var 
i=e[0],o="BODY"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var
 s=window.SVGElement&&i instanceof 
window.SVGElement,a=o?{top:0,left:0}:s?null:e.offset(),r={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=o?{width:t(window).width(),height:t(window).height()}:null;return
 
t.extend({},n,r,l,a)},i.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},i.prototype.getViewportAdjustedDelta=function(t,e,i,o){var
 n={top:0,left:0};if(!this.$viewport)return n;var 
s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|le
 ft/.test(t)){var 
r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var
 
h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return
 n},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return 
t=e.attr("data-original-title")||("function"==typeof 
i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do 
t+=~~(1e6*Math.random());while(document.getElementById(t));return 
t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw
 new Error(this.type+" `template` option must consist of exactly 1 top-level 
element!");return this.$tip},i.prototype.arrow=function(){return 
this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var
 
 i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new 
this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var
 
t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var
 
o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return
 t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return 
this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof 
e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.popover",n=new 
i(this,s)),"string"==typeof e&&n[e]())})}var 
i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new 
Error("Popover requires tooltip.js");i.VERS
 
ION="3.3.7",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div
 class="popover" role="tooltip"><div class="arrow"></div><h3 
class="popover-title"></h3><div 
class="popover-content"></div></div>'}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return
 i.DEFAULTS},i.prototype.setContent=function(){var 
t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof
 i?"html":"append":"text"](i),t.removeClass("fade top bottom left right 
in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return
 this.getTitle()||this.getContent()},i.prototype.getContent=function(){var 
t=this.$element,e=this.options;return 
t.attr("data-content")||("function"==typeof e.content?e.conten
 t.call(t[0]):e.content)},i.prototype.arrow=function(){return 
this.$arrow=this.$arrow||this.tip().find(".arrow")};var 
o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return
 t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return 
this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new 
i(this)),"string"==typeof e&&n[e]()})}var 
i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var
 
e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var
 n=i.find(".active:last 
a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var
 
r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidd
 
en.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function
 s(){a.removeClass("active").find("> .dropdown-menu > 
.active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var
 a=o.find("> 
.active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> 
.fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var
 
o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return
 t.fn.tab=o,this};var 
n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="
 
tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use
 strict";function e(e){return this.each(function(){var 
o=t(this),n=o.data("bs.affix"),s="object"==typeof 
e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var 
i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix
 affix-top 
affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var
 
n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return
 i>n?"top":!1;if("bottom"==this.affixed)return 
null!=i?n+this.unpin<=s.top?!1:"bottom":t-o>=n+a?!1:"bottom";var 
r=null==this.affixed,l=r?n:s.top,h=r
 ?a:e;return 
null!=i&&i>=n?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return
 this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var 
t=this.$target.scrollTop(),e=this.$element.offset();return 
this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var
 
e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof
 o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof 
s&&(s=o.bottom(this.$element));var 
r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var
 
l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element
 
.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var
 
o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return
 
t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var
 
i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use
 strict";function e(e){var 
i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return
 t(o)}function i(e){return this.each(function(){var 
i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof
 
e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new
 o(this,s)),"string"==typeof e&&n[e]()})}var 
o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collaps
 
e"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.7",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){var
 t=this.$element.hasClass("width");return 
t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var
 e,n=this.$parent&&this.$parent.children(".panel").children(".in, 
.collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var
 
s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var
 
a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var
 r=fun
 ction(){this.$element.removeClass("collapsing").addClass("collapse 
in")[a](""),this.transitioning=0,
+this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return 
r.call(this);var 
l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var
 
e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var
 
i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse
 
in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var
 
n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return
 t.support.transition?void 
this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION):n.call(this)}}},o.prototype.toggle=function(){this[this.$el
 ement.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return 
t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var
 
n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var
 
i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var
 
n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return
 
t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var
 n=t(this);n.attr("data-target")||o.preventDefault();var 
s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),+function(t){"use
 strict";function 
e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+"
 .nav li > a",this.offse
 
ts=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function
 i(i){return this.each(function(){var 
o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof 
i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof 
i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return
 
this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var
 
e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var
 e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return 
s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return
 t[0]-e[0]}).each(function(){e.
 
offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var
 
t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return
 a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return 
this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(void 
0===n[t+1]||e<n[t+1])&&this.activate(s[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var
 
i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var
 o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollsp
 y.noConflict=function(){return 
t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var
 e=t(this);i.call(e,e.data())})})}(jQuery),+function(t){"use strict";function 
e(){var 
t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd
 otransitionend",transition:"transitionend"};for(var i in e)if(void 
0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var
 i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var 
n=function(){i||t(o).trigger(t.support.transition.end)};return 
setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return
 t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 
0}})})}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/assets/css/confluence.css
----------------------------------------------------------------------
diff --git a/assets/css/confluence.css b/assets/css/confluence.css
deleted file mode 100644
index f72b1b8..0000000
--- a/assets/css/confluence.css
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- - Licensed to the Apache Software Foundation (ASF) under one
- - or more contributor license agreements.  See the NOTICE file
- - distributed with this work for additional information
- - regarding copyright ownership.  The ASF licenses this file
- - to you 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.
-*/
-
-/* This CSS is for customizing Confluence rendered HTML only.  Shiro-specific
-   site elements are customized in style.css */ 
-
-.nobr sup img {
-    display: none;
-}
-
-.preformattedContent pre {
-    padding: 5px 10px;
-    border: 1px dashed #1a6c0b;
-    background-color: #f0f0f0;
-}
-
-blockquote {
-    margin: 10px;
-    padding: 0 10px;
-    border-left: 1px solid #1a6c0b;
-}
-
-table.confluenceTable {
-    margin: 5px;
-    border-collapse: collapse;
-}
-
-/* Added as a temporary fix for CONF-4223. The table elements appear to be 
inheriting the border: none attribute from the sectionMacro class */
-
-table.confluenceTable td.confluenceTd {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-}
-
-/* Added as a temporary fix for CONF-4223. The table elements appear to be 
inheriting the border: none attribute from the sectionMacro class */
-
-table.confluenceTable th.confluenceTh {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-    background-color: #f0f0f0;
-    text-align: center;
-}
-
-td.confluenceTd {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-}
-
-th.confluenceTh {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #ccc;
-    padding: 3px 4px 3px 4px;
-    background-color: #f0f0f0;
-    text-align: center;
-}
-
-.panelMacro {
-    width: 100%;
-    margin: 10px 0 10px 0;
-}
-
-.panelMacro * td {
-    padding: 1em 0 0 1em;
-}
-
-.panelMacro * td:last-child {
-    padding: 0.8em 1em 1em 0.6em;
-}
-
-.panelMacro * b:first-child {
-    display: block;
-    margin: 0 0 -0.5em 0;
-}
-
-.tipMacro {
-    width: 100%;
-    border: 1px solid #090;
-    background-color: #dfd;
-}
-.infoMacro {
-    width: 100%;
-    border: 1px solid #3c78b5;
-    background-color: #D8E4F1;
-}
-.noteMacro {
-    width: 100%;
-    border: 1px solid #f0c000;
-    background-color: #ffffce;
-}
-.warningMacro {
-    width: 100%;
-    border: 1px solid #c00;
-    background-color: #fcc;
-}
-
-.code {
-    border: 1px dashed #1a6c0b;
-    font-size: 1em;
-    font-family: 'courier new', Courier, serif;
-    margin: 1em 0;
-    line-height: 1em;
-}
-
-.codeHeader {
-    background-color: #f0f0f0;
-    border-bottom: 1px dashed #1a6c0b;
-    padding: 3px;
-    text-align: center;
-}
-
-.codeContent {
-    text-align: left;
-    background-color: #f0f0f0;
-    padding: 3px;
-}
-
-.code-keyword {
-    color: #000091;
-    background-color: inherit;
-}
-
-.code-object {
-    color: #910091;
-    background-color: inherit;
-}
-
-.code-quote {
-    color: #009100;
-    background-color: inherit;
-}
-
-.code-comment {
-    color: #808080;
-    background-color: inherit;
-}
-
-.code-xml .code-keyword {
-    color: inherit;
-    font-weight: bold;
-}
-
-.code-tag {
-    color: #000091;
-    background-color: inherit;
-}
-
-/* ===================== Blog Posts ==================== */
-
-/* The Confluence user images in the news feeds are not showing properly (the 
href needs to be fixed).
-   So, hide them until we can address this: */
-
-.blog-post-listing {
-    margin: 1.8em 0 0 0;
-    padding: 0 0 0.8em 0;
-    border-bottom: 1px solid #d2d2d2;
-}
-.blog-post-listing .logoBlock {
-    display: none;
-}
-
-.blog-post-listing span.blogHeading .page-metadata {
-    font-size: 0.8em;
-}
-
-.blog-post-listing .endsection {
-    display: none;
-}
-
-.blog-post-listing a.blogHeading {
-    font-size: 2em;
-    font-weight: bold;
-}

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/assets/css/normalize.css
----------------------------------------------------------------------
diff --git a/assets/css/normalize.css b/assets/css/normalize.css
deleted file mode 100644
index 73abb76..0000000
--- a/assets/css/normalize.css
+++ /dev/null
@@ -1,375 +0,0 @@
-/*! normalize.css v2.0.1 | MIT License | git.io/normalize */
-
-/* ==========================================================================
-   HTML5 display definitions
-   ========================================================================== 
*/
-
-/*
- * Corrects `block` display not defined in IE 8/9.
- */
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section,
-summary {
-    display: block;
-}
-
-/*
- * Corrects `inline-block` display not defined in IE 8/9.
- */
-
-audio,
-canvas,
-video {
-    display: inline-block;
-}
-
-/*
- * Prevents modern browsers from displaying `audio` without controls.
- * Remove excess height in iOS 5 devices.
- */
-
-audio:not([controls]) {
-    display: none;
-    height: 0;
-}
-
-/*
- * Addresses styling for `hidden` attribute not present in IE 8/9.
- */
-
-[hidden] {
-    display: none;
-}
-
-/* ==========================================================================
-   Base
-   ========================================================================== 
*/
-
-/*
- * 1. Sets default font family to sans-serif.
- * 2. Prevents iOS text size adjust after orientation change, without disabling
- *    user zoom.
- */
-
-html {
-    font-family: sans-serif; /* 1 */
-    -webkit-text-size-adjust: 100%; /* 2 */
-    -ms-text-size-adjust: 100%; /* 2 */
-}
-
-/*
- * Removes default margin.
- */
-
-body {
-    margin: 0;
-}
-
-/* ==========================================================================
-   Links
-   ========================================================================== 
*/
-
-/*
- * Addresses `outline` inconsistency between Chrome and other browsers.
- */
-
-a:focus {
-    outline: thin dotted;
-}
-
-/*
- * Improves readability when focused and also mouse hovered in all browsers.
- */
-
-a:active,
-a:hover {
-    outline: 0;
-}
-
-/* ==========================================================================
-   Typography
-   ========================================================================== 
*/
-
-/*
- * Addresses `h1` font sizes within `section` and `article` in Firefox 4+,
- * Safari 5, and Chrome.
- */
-
-h1 {
-    font-size: 2em;
-}
-
-/*
- * Addresses styling not present in IE 8/9, Safari 5, and Chrome.
- */
-
-abbr[title] {
-    border-bottom: 1px dotted;
-}
-
-/*
- * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
- */
-
-b,
-strong {
-    font-weight: bold;
-}
-
-/*
- * Addresses styling not present in Safari 5 and Chrome.
- */
-
-dfn {
-    font-style: italic;
-}
-
-/*
- * Addresses styling not present in IE 8/9.
- */
-
-mark {
-    background: #ff0;
-    color: #000;
-}
-
-
-/*
- * Corrects font family set oddly in Safari 5 and Chrome.
- */
-
-code,
-kbd,
-pre,
-samp {
-    font-family: monospace, serif;
-    font-size: 1em;
-}
-
-/*
- * Improves readability of pre-formatted text in all browsers.
- */
-
-pre {
-    white-space: pre;
-    white-space: pre-wrap;
-    word-wrap: break-word;
-}
-
-/*
- * Sets consistent quote types.
- */
-
-q {
-    quotes: "\201C" "\201D" "\2018" "\2019";
-}
-
-/*
- * Addresses inconsistent and variable font size in all browsers.
- */
-
-small {
-    font-size: 80%;
-}
-
-/*
- * Prevents `sub` and `sup` affecting `line-height` in all browsers.
- */
-
-sub,
-sup {
-    font-size: 75%;
-    line-height: 0;
-    position: relative;
-    vertical-align: baseline;
-}
-
-sup {
-    top: -0.5em;
-}
-
-sub {
-    bottom: -0.25em;
-}
-
-/* ==========================================================================
-   Embedded content
-   ========================================================================== 
*/
-
-/*
- * Removes border when inside `a` element in IE 8/9.
- */
-
-img {
-    border: 0;
-}
-
-/*
- * Corrects overflow displayed oddly in IE 9.
- */
-
-svg:not(:root) {
-    overflow: hidden;
-}
-
-/* ==========================================================================
-   Figures
-   ========================================================================== 
*/
-
-/*
- * Addresses margin not present in IE 8/9 and Safari 5.
- */
-
-figure {
-    margin: 0;
-}
-
-/* ==========================================================================
-   Forms
-   ========================================================================== 
*/
-
-/*
- * Define consistent border, margin, and padding.
- */
-
-fieldset {
-    border: 1px solid #c0c0c0;
-    margin: 0 2px;
-    padding: 0.35em 0.625em 0.75em;
-}
-
-/*
- * 1. Corrects color not being inherited in IE 8/9.
- * 2. Remove padding so people aren't caught out if they zero out fieldsets.
- */
-
-legend {
-    border: 0; /* 1 */
-    padding: 0; /* 2 */
-}
-
-/*
- * 1. Corrects font family not being inherited in all browsers.
- * 2. Corrects font size not being inherited in all browsers.
- * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome
- */
-
-button,
-input,
-select,
-textarea {
-    font-family: inherit; /* 1 */
-    font-size: 100%; /* 2 */
-    margin: 0; /* 3 */
-}
-
-/*
- * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in
- * the UA stylesheet.
- */
-
-button,
-input {
-    line-height: normal;
-}
-
-/*
- * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
- *    and `video` controls.
- * 2. Corrects inability to style clickable `input` types in iOS.
- * 3. Improves usability and consistency of cursor style between image-type
- *    `input` and others.
- */
-
-button,
-html input[type="button"], /* 1 */
-input[type="reset"],
-input[type="submit"] {
-    -webkit-appearance: button; /* 2 */
-    cursor: pointer; /* 3 */
-}
-
-/*
- * Re-set default cursor for disabled elements.
- */
-
-button[disabled],
-input[disabled] {
-    cursor: default;
-}
-
-/*
- * 1. Addresses box sizing set to `content-box` in IE 8/9.
- * 2. Removes excess padding in IE 8/9.
- */
-
-input[type="checkbox"],
-input[type="radio"] {
-    box-sizing: border-box; /* 1 */
-    padding: 0; /* 2 */
-}
-
-/*
- * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
- * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
- *    (include `-moz` to future-proof).
- */
-
-input[type="search"] {
-    -webkit-appearance: textfield; /* 1 */
-    -moz-box-sizing: content-box;
-    -webkit-box-sizing: content-box; /* 2 */
-    box-sizing: content-box;
-}
-
-/*
- * Removes inner padding and search cancel button in Safari 5 and Chrome
- * on OS X.
- */
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-    -webkit-appearance: none;
-}
-
-/*
- * Removes inner padding and border in Firefox 4+.
- */
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-    border: 0;
-    padding: 0;
-}
-
-/*
- * 1. Removes default vertical scrollbar in IE 8/9.
- * 2. Improves readability and alignment in all browsers.
- */
-
-textarea {
-    overflow: auto; /* 1 */
-    vertical-align: top; /* 2 */
-}
-
-/* ==========================================================================
-   Tables
-   ========================================================================== 
*/
-
-/*
- * Remove most spacing between table cells.
- */
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/assets/css/style.css
----------------------------------------------------------------------
diff --git a/assets/css/style.css b/assets/css/style.css
index d289831..3504d70 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -18,57 +18,6 @@
  - under the License.
 */
 
-/* ========================================================
- * Global Styling
- * ======================================================== */
-
-a:link {color:#3254a0; text-decoration:none;}
-a:visited {color:#3254a0; text-decoration:none;}
-a:hover {color: #4068c3; text-decoration:underline;}
-a:active {color: #4377d7; text-decoration:none;}
-
-body {
-       background:url(../images/back.jpg);
-       font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
-       text-shadow: 1px 1px 0 #fff;
-       filter: dropshadow(color=#fff, offx=1, offy=1);
-}
-
-.wrapper {
-       position:relative;
-    width:960px;
-       margin:auto;
-       padding:0 10px 0 10px;
-}
-
-.clearfix {
-       clear:both;
-}
-
-h1 {
-       color:#3254a0;
-}
-
-h2 {
-       color:#3254a0;
-}
-
-menu, ol, ul {
-    padding: 0 0 0 2em;
-}
-
-dl, menu, ol, ul, li {
-    margin: 1em 0;
-}
-
-/* Table of Contents chunks: */
-.toc ol {margin: 0.5em 0;}
-.toc ul {margin: 0.5em 0;}
-.toc li {margin: 0.5em 0;}
-
-/* ========================================================
- * Header Styling
- * ======================================================== */
 
 #top-bar {
        background:url(../images/topbar.jpg);
@@ -76,304 +25,133 @@ dl, menu, ol, ul, li {
        width:100%;
 }
 
-#header {
-       height:85px;
-       border-bottom:#dfdfdf 1px solid;
-}
-
-#logo {
-       background:url(../images/apache-shiro-logo.png);
-       width:239px;
-       height:85px;
-       float:left;
-       margin:10px 0 0 0;
-}
 
-ul.navigation {
-    float: right;
-    margin: 4px 10px 0 0;
-    padding: 25px 0 0 0;
-}
-ul.navigation ul {
-    margin: 0;
-}
-ul.navigation li {
-    list-style-type: none;
-    float: left;
-    padding: 0 0 0 27px;
-}
-ul.navigation a {
-    font-size: 1.1em;
-    font-weight: bold;
-}
+/** =======================================================  */
+/** Github Ribbon */
+/** ======================================================= **/
 
-#content {
-       position:relative;
-       clear:both;
-       margin:25px 0 0 0;
-}
-
-/* ========================================================
- * 2-Column Page Styling (e.g. index.html)
- * ======================================================== */
-
-/* ============ 2-Column Main Content ===================== */
-
-#main-content {
-       float:left;
-       width:640px;
-}
-
-#main-content > h1 {
-    margin: 0.5em 0 0.5em 0;
-}
-
-/* Home page intro paragraph: */
-#main-content > p {
-    font-size: 0.9em;
-    margin: 0 0 2em 0;
-}
-
-#main-content table {margin:20px 0 20px 0;}
-#main-content td {padding:2px;}
-
-/* ============ 2-Column Right Column ===================== */
-
-#right-column {
-       float:right;
-       width:240px;
-}
-
-/* Download button: */
-.download {
-    background:url(../images/download.png) 0px 0px;
-    width:243px;
-    height:42px;
-    clear:both;
-    margin:20px 0 20px 0;
-}
-
-.download:hover {
-    background:url(../images/download.png) 0px -42px;
+.github-fork-ribbon.right-top:before {
+       background-color: #3254a0;
 }
 
-/* Email (announce@) signup: */
-.email {margin:20px 0 0 0;}
-
-.email-form {
-    width:165px;
-    height:26px;
-    border:#333 1px solid;
-    float:left;
-    padding:0 0 0 3px;
-}
 
-.join-email {
-    background:url(../images/join-email.png) 0px 0px;
-    width:68px;
-    height:28px;
-    float:right;
-}
+/** =======================================================  */
+/** Yellow smiles! */
+/** ======================================================= **/
 
-.join-email:hover {
-    background:url(../images/join-email.png) 0px -28px;
-}
 
-/* NEWS */
-#right-column h2 {
-    background:#3254a0;
-    color:#FFF;
-    font-size:16px;
-    font-weight:bold;
-    width:234px;
-    padding:3px 0 3px 3px;
-    text-shadow:none;
-    display:block;
-    margin:20px 0 5px 0;
-    clear:both;
+/* Yellow smiles! */
+.fa-smile-o {
+       position: relative;
 }
-
-#right-column h3 {
-    font-size: 0.95em;
-    margin: 12px 0 0 0;
+.fa-smile-o:before {
+       content: "\f111";
+       color: #f1c40f;
 }
-
-#right-column p {
-    font-size: 0.87em;
-    margin: 0.85em 0;
+.fa-smile-o:after {
+       left: 0;
+       position: absolute;
+       content: "\f118";
 }
 
-#right-column .more {
-       position:relative;
-       color:#3254a0;
-       font-size:11px;
-       margin:0 0 0 0;
-       display:block;
-       text-align:right;
-}
 
-/* Communities */
-.communities {
-       width:100%;
-       text-align:center;
-       margin:20px 0 0 0;
-}
+/** =======================================================  */
+/** Footer Styling*/
+/** ======================================================= **/
 
-/* HOME */
-.service-tabs {
-       -webkit-border-radius:10px;
-       border-radius:10px;
-       width:265px;
-       height:78px;
-       margin:5px 5px 5px 5px;
-       float:left;
-       color:#464646;
-       font-size:12px;
+.wrapper {
        position:relative;
-       padding:5px 5px 0 40px;
-       -webkit-box-shadow: 1px 1px 0px 0px #fff;
-       box-shadow: 1px 1px 0px 0px #fff;
-       line-height:14px;
+       width:960px;
+       margin:auto;
+       padding:0 10px 0 10px;
 }
 
-.service-tabs:hover {
-       background-color:#e8e8e8;
+.footer-shield {
+       position: absolute;
+       width: 103px;
+       height: 113px;
+       right: -100px;
+       top: -80px;
+       background:url(../images/footer-shield.png);
 }
 
-.service-tabs h2 {
-    padding: 0;
-    margin: 0;
-       color:#3254a0;
+html {
+       position: relative;
+       min-height: 100%;
 }
-
-.more {
-       position:absolute;
-       bottom:5px;
-       right:5px;
-       color:#3254a0;
-       font-size:11px;
+body {
+       /* Margin bottom by footer height + image */
+       margin-bottom: 160px;
 }
 
-.authentication {background:url(../images/authentication.png) no-repeat 
#f2f2f2;}
-.authorization {background:url(../images/authorization.png) no-repeat #f2f2f2;}
-.cryptography {background:url(../images/crypt.png) no-repeat #f2f2f2;}
-.session-management {background:url(../images/session.png) no-repeat #f2f2f2;}
-.web-integration {background:url(../images/web-integration.png) no-repeat 
#f2f2f2;}
-.integrations {background:url(../images/integration.png) no-repeat #f2f2f2;}
-
-.video-box {
-       margin:50px 0 0 0;
+.footer-padding {
+       height: 160px;
 }
 
-.video-box td {
-    vertical-align: top;
+.custom-footer {
+       position: absolute;
+       bottom: 0;
+       width: 100%;
+       /* Set the fixed height of the footer here */
+       height: 60px;
+       background: #e8e8e8;
+       padding-top: 10px;
 }
 
-.video-box h1 {
-    margin: 0;
-    padding: 0;
+.editThisPage {
+       position:absolute; bottom:2%; right:2%;
+       font-size:16px;
 }
 
-/* ========================================================
- * Single Column (Normal) Page Styling
- * ======================================================== */
+/** =======================================================  */
+/** Main page tiles */
+/** ======================================================= **/
 
-.breadcrumbs {
-       font-size:11px;
+.authentication {
+       background:url(../images/authentication.png) no-repeat #f2f2f2 right 
10px top 5px;
 }
-
-.number {
-       list-style:decimal;
-       margin:0 0 0 20px;
-       font-weight:normal;
+.authorization {
+       background:url(../images/authorization.png) no-repeat #f2f2f2 right 
10px top 5px;
 }
-
-.roman {
-       list-style:upper-roman;
-       margin:0 0 0 20px;
-       font-weight:bold;
+.cryptography {
+       background:url(../images/crypt.png) no-repeat #f2f2f2 right 10px top 
5px;
 }
-
-.bullet {
-       list-style:inside;
+.session-management {
+       background:url(../images/session.png) no-repeat #f2f2f2 right 10px top 
5px;
 }
-
-.table-header {
-       background-color:#f0f0f0;
-       text-align:center;
-       font-weight:bold;
+.web-integration {
+       background:url(../images/web-integration.png) no-repeat #f2f2f2 right 
10px top 5px;
 }
-
-.code {
-       border:#333 dashed 1px;
-       background:#f0f0f0;
-       padding:3px;
+.integrations {
+       background:url(../images/integration.png) no-repeat #f2f2f2 right 10px 
top 5px;
 }
 
-/* ========================================================
- * Footer Styling
- * ======================================================== */
 
-#footer {
-       width:100%;
-       background:#e8e8e8;
-       height:50px;
-       margin:60px 0 0 0;
-       padding:10px 0 0 0;
-       font-size:12px;
+/** =======================================================  */
+/** News posts */
+/** ======================================================= **/
+.blog-post-listing {
+       margin: 1.8em 0 0 0;
+       padding: 0 0 0.8em 0;
+       border-bottom: 1px solid #d2d2d2;
 }
-
-.footer-shield {
-       background:url(../images/footer-shield.png);
-       width:103px;
-       height:113px;
-       position:absolute;
-       right:-100px;
-       top:-80px;
-}
-
-.github-fork-ribbon.right-top:before {
-       background-color: #3254a0;
+.blog-post-listing .logoBlock {
+       display: none;
 }
 
-.info, .warning {
-       border: 1px solid;
-       margin: 10px 0px;
-       padding: 15px 10px 15px 50px;
-       background-repeat: no-repeat;
-       background-position: 10px center;
-}
-.info > span, .warning >span {
-       font-weight: bold;
+.blog-post-listing span.blogHeading .page-metadata {
+       font-size: 0.8em;
 }
-.info {
-       color: #00529B;
-       background-color: #BDE5F8;
-}
-.info:before, .warning:before {
-       content: '\0026a0';
 
-}
-.warning {
-       color: #9F6000;
-       background-color: #FEEFB3;
+.blog-post-listing .endsection {
+       display: none;
 }
 
-.editThisPage {
-       position:absolute; bottom:2%; right:2%;
-       font-size:16px;
+.blog-post-listing a.blogHeading {
+       font-size: 2em;
+       font-weight: bold;
 }
 
-/* Yello smiles! */
-.fa-smile-o {
-       position: relative;
-}
-.fa-smile-o:before {
-       content: "\f111";
-       color: #f1c40f;
-}
-.fa-smile-o:after {
-       left: 0;
-       position: absolute;
-       content: "\f118";
+.news-content {
+       padding-top: 1em;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/assets/js/jquery_googleanalytics/jquery.google-analytics.js
----------------------------------------------------------------------
diff --git a/assets/js/jquery_googleanalytics/jquery.google-analytics.js 
b/assets/js/jquery_googleanalytics/jquery.google-analytics.js
deleted file mode 100644
index 69ea0ea..0000000
--- a/assets/js/jquery_googleanalytics/jquery.google-analytics.js
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
-* jquery-google-analytics plugin
-*
-* A jQuery plugin that makes it easier to implement Google Analytics tracking,
-* including event and link tracking.
-*
-* Adds the following methods to jQuery:
-*   - $.trackPage() - Adds Google Analytics tracking on the page from which
-*     it's called.
-*   - $.trackPageview() - Tracks a pageview using the given uri. Can be used 
for tracking Ajax requests: 
http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=55519
-*   - $.trackEvent() - Tracks an event using the given parameters.
-*   - $('a').track() - Adds event tracking to element(s).
-*   - $.timePageLoad() - Measures the time it takes  an event using the given 
parameters.
-*
-* Features:
-*   - Improves page load time by loading Google Analytics code without 
blocking.
-*   - Easy and extensible event and link tracking plugin for jQuery and Google 
Analytics
-*   - Automatic internal/external link detection. Default behavior is to skip
-*     tracking of internal links.
-*   - Enforces that tracking event handler is added to an element only once.
-*   - Configurable: custom event tracking, skip internal links, metadata
-*     extraction using callbacks.
-*
-* Copyright (c) 2008-09 Christian Hellsten
-*
-* Plugin homepage:
-*   http://aktagon.com/projects/jquery/google-analytics/
-*   http://github.com/christianhellsten/jquery-google-analytics/
-*
-* Examples:
-*   http://aktagon.com/projects/jquery/google-analytics/examples/
-*   http://code.google.com/apis/analytics/docs/eventTrackerGuide.html
-*
-* Repository:
-*   git://github.com/christianhellsten/jquery-google-analytics.git
-*
-* Version 1.1.3
-*
-* Tested with:
-*   - Mac: Firefox 3, Safari 3
-*   - Linux: Firefox 3
-*   - Windows: Firefox 3, Internet Explorer 6
-*
-* Licensed under the MIT license:
-* http://www.opensource.org/licenses/mit-license.php
-*
-* Credits:
-*   - http://google.com/analytics
-*   - http://lyncd.com: 
-*       Idea for trackPage method came from this blog post: 
http://lyncd.com/2009/03/better-google-analytics-javascript/
-*/
-(function($) {
-
-  var pageTracker;
-
-  /**
-   * Enables Google Analytics tracking on the page from which it's called. 
-   *
-   * Usage:
-   *  <script type="text/javascript">
-   *    $.trackPage('UA-xxx-xxx', options);
-   *  </script>
-   *
-   * Parameters:
-   *   account_id - Your Google Analytics account ID.
-   *   options - An object containing one or more optional parameters:
-   *     - onload - boolean - If false, the Google Analytics code is loaded
-   *       when this method is called instead of on window.onload.
-   *     - status_code - The HTTP status code of the current server response.
-   *       If this is set to something other than 200 then the page is tracked
-   *       as an error page. For more details: 
http://www.google.com/support/analytics/bin/answer.py?hl=en&answer=86927
-   *     - callback  - function to be executed after the Google Analytics code 
is laoded and initialized
-   *
-   */
-  $.trackPage = function(account_id, options) {
-    var host = (("https:" == document.location.protocol) ? "https://ssl."; : 
"http://www.";);
-    var script;
-
-    // Use default options, if necessary
-    var settings = $.extend({}, {onload: true, status_code: 200}, options);
-    var src  = host + 'google-analytics.com/ga.js';
-
-    function init_analytics() {
-      if (typeof _gat != undefined) {
-        debug('Google Analytics loaded');
-
-        pageTracker = _gat._getTracker(account_id);
-
-        if(settings.status_code == null || settings.status_code == 200) {
-          pageTracker._trackPageview();
-        } else {
-          debug('Tracking error ' + settings.status_code);
-          pageTracker._trackPageview("/" + settings.status_code + 
".html?page=" + document.location.pathname + document.location.search + 
"&from=" + document.referrer);
-        }
-        if($.isFunction(settings.callback)){
-          settings.callback();
-        }
-      }
-      else { 
-        throw "_gat is undefined"; // setInterval loading?
-      }
-    }
-
-    load_script = function() {
-      $.ajax({
-        type: "GET",
-        url: src,
-        success: function() {          
-          init_analytics(); 
-        },
-        dataType: "script",
-        cache: true // We want the cached version
-      });
-    }
-    
-    // Enable tracking when called or on page load?
-    if(settings.onload == true || settings.onload == null) {
-      $(window).load(load_script);
-    } else {
-      load_script();
-    }
-  }
-
-  /**
-   * Tracks an event using the given parameters. 
-   *
-   * The trackEvent method takes four arguments:
-   *
-   *  category - required string used to group events
-   *  action - required string used to define event type, eg. click, download
-   *  label - optional label to attach to event, eg. buy
-   *  value - optional numerical value to attach to event, eg. price
-   *  skip_internal - optional boolean value. If true then internal links are 
not tracked.
-   *
-   */
-  $.trackEvent = function(category, action, label, value) {
-    if(typeof pageTracker == 'undefined') {
-      debug('FATAL: pageTracker is not defined'); // blocked by whatever
-    } else {
-      pageTracker._trackEvent(category, action, label, value);
-    }
-  };
-
-  /**
-   * Tracks a pageview using the given uri.
-   *
-   */
-  $.trackPageview = function(uri) {
-    if(typeof pageTracker == 'undefined') {
-      debug('FATAL: pageTracker is not defined');
-    } else {
-      pageTracker._trackPageview(uri);
-    }
-  }
-
-  /**
-   * Adds click tracking to elements. Usage:
-   *
-   *  $('a').track()
-   *
-   */
-  $.fn.track = function(options) {
-    // Add event handler to all matching elements
-    return this.each(function() {
-      var element = $(this);
-
-      // Prevent an element from being tracked multiple times.
-      if (element.hasClass('tracked')) {
-        return false;
-      } else {
-        element.addClass('tracked');
-      } 
-
-      // Use default options, if necessary
-      var settings = $.extend({}, $.fn.track.defaults, options);
-
-      // Merge custom options with defaults.
-      var category = evaluate(element, settings.category);
-      var action   = evaluate(element, settings.action);
-      var label    = evaluate(element, settings.label);
-      var value    = evaluate(element, settings.value);
-      var event_name = evaluate(element, settings.event_name);
-      
-      var message = "category:'" + category + "' action:'" + action + "' 
label:'" + label + "' value:'" + value + "'";
-      
-      debug('Tracking ' + event_name + ' ' + message);
-
-      // Bind the event to this element. 
-      // TODO Use .live since jQuery 1.4 now supports it better.
-      element.bind(event_name + '.track', function() {       
-        // Should we skip internal links? REFACTOR
-        var skip = settings.skip_internal && (element[0].hostname == 
location.hostname);
-      
-        if(!skip) {
-          $.trackEvent(category, action, label, value);
-          debug('Tracked ' + message);
-        } else {
-          debug('Skipped ' + message);
-        }
-
-        return true;
-      });
-    });
-    
-    /**
-     * Checks whether a setting value is a string or a function.
-     * 
-     * If second parameter is a string: returns the value of the second 
parameter.
-     * If the second parameter is a function: passes the element to the 
function and returns function's return value.
-     */
-    function evaluate(element, text_or_function) {
-      if(typeof text_or_function == 'function') {
-        text_or_function = text_or_function(element);
-      }
-      return text_or_function;
-    };
-  };
-
-  /**
-   * Prints to Firebug console, if available. To enable:
-   *   $.fn.track.defaults.debug = true;
-   */
-  function debug(message) {
-    if (typeof console != 'undefined' && typeof console.debug != 'undefined' 
&& $.fn.track.defaults.debug) {
-      console.debug(message);
-    }
-  };
-
-  /**
-   * Default (overridable) settings.
-   */
-  $.fn.track.defaults = {
-    category      : function(element) { return (element[0].hostname == 
location.hostname) ? 'internal':'external'; },
-    action        : 'click',
-    label         : function(element) { return element.attr('href'); },
-    value         : null,
-    skip_internal : true,
-    event_name    : 'click',
-    debug         : false
-  };
-})(jQuery);

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/download.html.vtl
----------------------------------------------------------------------
diff --git a/download.html.vtl b/download.html.vtl
index a54e670..fbe8746 100644
--- a/download.html.vtl
+++ b/download.html.vtl
@@ -3,12 +3,12 @@
 
 #macro(artifactTable, $versionObject)
 
-<table>
+<table style="width: 100%" class="table">
     <thead>
     <tr>
-        <th>Artifact</th>
-        <th>Maven Usage</th>
-        <th>Notes</th>
+        <th class="col-md-1">Artifact</th>
+        <th class="col-md-3">Maven Usage</th>
+        <th class="col-md-3">Notes</th>
     </tr>
     </thead>
     <tbody>
@@ -30,8 +30,7 @@
                 #if($artifact.gavAlt)
                     $artifact.gavAlt
                 #else
-<pre><code class="xml">
-&lt;dependency&gt;
+<pre><code class="xml">&lt;dependency&gt;
   &lt;groupId&gt;$artifact.g&lt;/groupId&gt;
   &lt;artifactId&gt;$artifact.a&lt;/artifactId&gt;
   &lt;version&gt;$version&lt;/version&gt;
@@ -125,14 +124,10 @@
 <h3><a name="latestGit"></a>${latestRelease} Git Source repository</h3>
 
 <p>The source can be cloned anonymously from Git with this command:</p>
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-git clone https:<span class="code-comment">//github.com/apache/shiro.git</span>
+<pre><code style="bash">git clone https://github.com/apache/shiro.git
 git checkout shiro-root-${latestRelease} -b shiro-root-${latestRelease}
+</code>
 </pre>
-    </div>
-</div>
 
 <h2><a name="previous"></a>Previous Releases</h2>
 
@@ -165,14 +160,9 @@ git checkout shiro-root-${latestRelease} -b 
shiro-root-${latestRelease}
 <h3><a name="1.2.xGit"></a>${shiro12x.version} Git Source repository</h3>
 
 <p>The source can be cloned anonymously from Git with this command:</p>
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-git clone https:<span class="code-comment">//github.com/apache/shiro.git</span>
+<pre><code class="bash">git clone https://github.com/apache/shiro.git
 git checkout shiro-root-${shiro12x.version} -b shiro-root-${shiro12x.version}
-</pre>
-    </div>
-</div>
+</code></pre>
 
 
 <h3><a name="1.1.0"></a>${shiro11x.version}</h3>
@@ -203,14 +193,9 @@ git checkout shiro-root-${shiro12x.version} -b 
shiro-root-${shiro12x.version}
 <h4><a name="1.1.0Git"></a>${shiro11x.version} Git Source repository</h4>
 
 <p>The source can be cloned anonymously from Git with this command:</p>
-<div class="code panel" style="border-width: 1px;">
-    <div class="codeContent panelContent">
-<pre class="code-java">
-git clone https:<span class="code-comment">//github.com/apache/shiro.git</span>
+<pre><code class="bash">git clone https://github.com/apache/shiro.git
 git checkout shiro-root-${shiro11x.version} -b shiro-root-${shiro11x.version}
-</pre>
-    </div>
-</div>
+</code></pre>
 
 
 <input type="hidden" id="ghEditPage" value="download.html.vtl"></input>

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 6c0b73f..01eb687 100644
--- a/index.html
+++ b/index.html
@@ -1,110 +1,163 @@
-<div id="main-content">
 
-    <h1>Welcome to Apache Shiro</h1>
+<div class="row">
+
+    <div class="col-md-3 col-md-push-9">
+        <!--<div class="news" style="margin-bottom: 20px;">-->
+            <!--<h5>Latest News</h5>-->
+            <!--<ul class="list-unstyled">-->
+                <!--{% for post in site.categories.news limit:4 %}-->
+                <!--<li><a href="{{ post.url }}">{{ post.title }}</a>-->
+                    <!--<span class="small">({{post.date| date:"%b %d, 
%Y"}})</span></li>-->
+                <!--{% endfor %}-->
+            <!--</ul>-->
+            <!--<p class="small" style="text-align: right;"><a 
href="news.html">Archive</a></p>-->
+        <!--</div>-->
+
+        <div class="hidden-xs hidden-sm">
+            <a href="download.html" class="btn btn-success btn-lg btn-block" 
style="margin-bottom: 30px;">
+                Download
+            </a>
+
+            <div class="panel panel-primary">
+                <div class=" panel-heading" style="text-align: center;">
+                    Popular Guides:
+                </div>
+
+                <div class="panel-body">
+                    <div>
+                        <a href="java-authentication-guide.html">Java 
Authentication Guide</a>
+                        <p><small>Learn how Shiro securely verifies 
identities.</small></p>
+                    </div>
+                    <div>
+                        <a href="java-authorization-guide.html">Java 
Authorization Guide</a></h3>
+                        <p>Learn how Shiro handles permissions, roles and 
users.</p>
+                    </div>
+                    <div>
+                        <a href="webapp-tutorial.html">Web App 
Tutorial</a></h3>
+                        <p>Step-by-step tutorial for securing a web 
application with Apache Shiro.</p>
+                    </div>
+                </div>
+            </div>
+
+            <div class="panel panel-primary">
+                <div class=" panel-heading" style="text-align: center;">
+                    Communities Using Shiro:
+                </div>
+
+                <div class="panel-body communities">
+                    <img src="assets/images/logos.png" class="img-responsive 
center-block">
+                </div>
+            </div>
 
-    <p>Apache Shiro is a powerful and easy-to-use Java security framework that 
performs authentication,
-        authorization, cryptography, and session management. With 
Shiro&#8217;s easy-to-understand API, you can
-        quickly and easily secure any application &#8211; from the smallest 
mobile applications to the largest web
-        and enterprise applications.</p>
-
-    <a href="authentication-features.html">
-        <div class="service-tabs authentication">
-            <h2>Authentication</h2>
-
-            <p>Support logins across one or more pluggable data soucres (LDAP, 
JDBC, Active Directory...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
         </div>
-    </a>
+    </div>
 
-    <a href="authorization-features.html">
-        <div class="service-tabs authorization">
-            <h2>Authorization</h2>
+    <div class="col-md-9 col-md-pull-3">
 
-            <p>Perform access control based on roles or fine grained 
permissions, also using plug...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
-        </div>
-    </a>
 
-    <a href="cryptography-features.html">
-        <div class="service-tabs cryptography">
-            <h2>Cryptography</h2>
 
-            <p>Secure data with the easiest possible Cryptography API&#8217;s 
available, giving you...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
+
+        <div class="jumbotron">
+            <b>Apache Shiro&trade;</b> is a powerful and easy-to-use Java 
security framework that performs authentication,
+            authorization, cryptography, and session management. With 
Shiro&#8217;s easy-to-understand API, you can
+            quickly and easily secure any application &#8211; from the 
smallest mobile applications to the largest web
+            and enterprise applications.
         </div>
-    </a>
 
-    <a href="session-management-features.html">
-        <div class="service-tabs session-management">
-            <h2>Session Management</h2>
+        <div class="row row-padded">
+            <div class="col-md-6 col-sm-6">
+                <h1>Getting Started</h1>
 
-            <p>Use sessions in any environment, even outside web or EJB 
containers. Easily...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
+                <ul>
+                    <li><a 
href="https://www.infoq.com/articles/apache-shiro";>What is Apache 
Shiro?</a></li>
+                    <li><a href="10-minute-tutorial.html">10 Minute 
Tutorial</a></li>
+                    <li><a href="articles.html">More articles...</a></li>
+                </ul>
+            </div>
+
+            <div class="col-md-6 col-sm-6 col-padded-top col-center">
+                <div style="width: 100%; max-width: 272px; display: 
inline-block; text-align: center; margin-left: 50px; padding-bottom: 15px;">
+                    <iframe frameborder="0" scrolling="auto" width="310" 
height="233"
+                            
src="http://www.youtube.com/embed/YJByiDvOhsc?rel=0"; 
allowfullscreen="true"></iframe>
+                </div>
+            </div>
         </div>
-    </a>
 
-    <a href="web-features.html">
-        <div class="service-tabs web-integration">
-            <h2>Web Integration</h2>
-
-            <p>Save development time with innovative approaches that easily 
handle web specific...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
+        <div class="row row-padded">
+            <div class="col-md-6 col-sm-6 panel ">
+                <div class="panel-heading authentication">
+                    <h2 class="panel-title"> Authentication </h2>
+                </div>
+                <div class="panel-body">
+                    <p>Support logins across one or more pluggable data 
soucres (LDAP, JDBC, Active Directory...</p>
+                    <a href="authentication-features.html"><span 
class="more">Read More &gt;&gt;&gt;</span></a>
+                </div>
+            </div>
+
+            <div class="col-md-6 col-sm-6 panel">
+                <div class="panel-heading authorization">
+                    <h2 class="panel-title"> Authorization</h2>
+                </div>
+                <div class="panel-body">
+                    <p>Perform access control based on roles or fine grained 
permissions, also using plug...</p>
+                    <a href="authorization-features.html"><span 
class="more">Read More &gt;&gt;&gt;</span></a>
+                </div>
+            </div>
         </div>
-    </a>
 
-    <a href="integration.html">
-        <div class="service-tabs integrations">
-            <h2>Integrations</h2>
+        <div class="row row-padded">
+            <div class="col-md-6 col-sm-6 panel">
+                <div class="panel-heading cryptography">
+                    <h2 class="panel-title"> Cryptography</h2>
+                </div>
+                <div class="panel-body">
+                    <p>Secure data with the easiest possible Cryptography 
API&#8217;s available, giving you...</p>
+                    <a href="cryptography-features.html"><span 
class="more">Read More &gt;&gt;&gt;</span></a>
+                </div>
+            </div>
+
+            <div class="col-md-6 col-sm-6 panel">
+                <div class="panel-heading session-management">
+                    <h2 class="panel-title"> Session Management</h2>
+                </div>
+                <div class="panel-body">
+                    <p>Use sessions in any environment, even outside web or 
EJB containers. Easily...</p>
+                    <a href="session-management-features.html"><span 
class="more">Read More &gt;&gt;&gt;</span></a>
+                </div>
+            </div>
+        </div>
 
-            <p>API&#8217;s giving you power and simplicty beyond what Java 
provides by default...</p>
-            <span class="more">Read More &gt;&gt;&gt;</span>
+        <div class="row row-padded">
+            <div class="col-md-6 col-sm-6 panel">
+                <div class="panel-heading web-integration">
+                    <h2 class="panel-title"> Web Integration</h2>
+                </div>
+                <div class="panel-body">
+                    <p>Save development time with innovative approaches that 
easily handle web specific...</p>
+                    <a href="web-features.html"><span class="more">Read More 
&gt;&gt;&gt;</span></a>
+                </div>
+            </div>
+
+            <div class="col-md-6 col-sm-6 panel">
+                <div class="panel-heading integrations">
+                    <h2 class="panel-title"> Integrations</h2>
+                </div>
+                <div class="panel-body">
+                    <p>API&#8217;s giving you power and simplicty beyond what 
Java provides by default...</p>
+                    <a href="integration.html"><span class="more">Read More 
&gt;&gt;&gt;</span></a>
+                </div>
+            </div>
         </div>
-    </a>
 
-    <div class="clearfix"></div>
 
-    <table class="video-box" width="640" cellspacing="0" cellpadding="0">
-        <tr>
-            <td colspan="1" rowspan="1">
-                <iframe frameborder="0" scrolling="auto" width="310" 
height="233"
-                        src="http://www.youtube.com/embed/YJByiDvOhsc?rel=0"; 
allowfullscreen="true"></iframe>
-            </td>
-            <td colspan="1" rowspan="1">
-                <h1>Getting Started</h1>
-                <ul>
-                    <li><a 
href="https://www.infoq.com/articles/apache-shiro";>What is Apache 
Shiro?</a></li>
-                    <li><a href="10-minute-tutorial.html">10 Minute 
Tutorial</a></li>
-                    <li><a href="articles.html">More articles...</a></li>
-                </ul>
-            </td>
-        </tr>
-    </table>
 
+    </div>
 </div>
 
-<div id="right-column">
 
-    <a href="download.html"><div class="download"></div></a>
 
-    <h2>Popular Guides</h2>
 
-    <h3><a href="java-authentication-guide.html">Java Authentication 
Guide</a></h3>
-    <p>Learn how Shiro securely verifies identities.</p>
-    <a href="java-authentication-guide.html"><span class="more">Read More 
&gt;&gt;&gt;</span></a>
 
-    <h3><a href="java-authorization-guide.html">Java Authorization 
Guide</a></h3>
-    <p>Learn how Shiro handles permissions, roles and users.</p>
-    <a href="java-authorization-guide.html"><span class="more">Read More 
&gt;&gt;&gt;</span></a>
-               
-    <h3><a href="webapp-tutorial.html">Web App Tutorial</a></h3>
-    <p>Step-by-step tutorial for securing a web application with Apache 
Shiro.</p>
-    <a href="webapp-tutorial.html"><span class="more">Read More 
&gt;&gt;&gt;</span></a>
-               
 
-    <h2>Communities Using Shiro</h2>
 
-    <div class="communities"><img src="assets/images/logos.png"></div>
-
-</div>
 
-<div class="clearfix"></div>

http://git-wip-us.apache.org/repos/asf/shiro-site/blob/38f7c6ce/session-management.md.vtl
----------------------------------------------------------------------
diff --git a/session-management.md.vtl b/session-management.md.vtl
index 1594dbe..0dacbc3 100644
--- a/session-management.md.vtl
+++ b/session-management.md.vtl
@@ -192,18 +192,15 @@ However, as you might expect, Shiro already has some good 
`SessionDAO` implement
 
 #warning('Web Applications', 'The above 
<code>securityManager.sessionManager.sessionDAO = $sessionDAO</code> assignment 
only works when using a Shiro native session manager. Web applications by 
default do not use a native session manager and instead retain the Servlet 
Container''s default session manager which does not support a SessionDAO. If 
you would like to enable a SessionDAO in a web-based application for custom 
session storage or session clustering, you will have to first configure a 
native web session manager. For example:
 
-<div><pre><code class="ini">
-[main]
+<div><pre><code class="ini">[main]
 ...
 sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
 securityManager.sessionManager = $sessionManager
 
-; Configure a SessionDAO and then set it:
+# Configure a SessionDAO and then set it:
 securityManager.sessionManager.sessionDAO = $sessionDAO
-
-')
 </code></pre></div>
-
+')
 #danger('Configure a SessionDAO!', 'Shiro''s default configuration native 
SessionManagers use <strong>in-memory-only</strong> Session storage. This is 
unsuitable for most production applications. Most production applications will 
want to either configure the provided EHCache support (see below) or provide 
their own <code>SessionDAO</code> implementation.
 
 Note that web applications use a servlet-container-based SessionManager by 
default and do not have this issue. This is only an issue when using a Shiro 
native SessionManager.')

Reply via email to