Added: incubator/samoa/site/assets/js/bootstrap.min.js URL: http://svn.apache.org/viewvc/incubator/samoa/site/assets/js/bootstrap.min.js?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/assets/js/bootstrap.min.js (added) +++ incubator/samoa/site/assets/js/bootstrap.min.js Sun Feb 22 13:41:20 2015 @@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply (this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.1",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict" ;function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.1",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$ele ment.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=thi s.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".it em"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c="prev"==a?-1:1,d=this.getItemIndex(b),e=(d+c)%this.$items.length;return this.$items.eq(e)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next" ==b?"left":"right",i="next"==b?"first":"last",j=this;if(!f.length){if(!this.options.wrap)return;f=this.$element.find(".item")[i]()}if(f.hasClass("active"))return this.sliding=!1;var k=f[0],l=a.Event("slide.bs.carousel",{relatedTarget:k,direction:h});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var m=a(this.$indicators.children()[this.getItemIndex(f)]);m&&m.addClass("active")}var n=a.Event("slid.bs.carousel",{relatedTarget:k,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),j.sliding=!1,setTimeout(function(){j.$element.trigger(n)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trig ger(n)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(f.toggle=!1),e||c. data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a(this.options.trigger).filter('[href="#'+b.id+'"], [data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.1",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.di mension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[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 e=function(){this.transit ioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g= f.data("bs.collapse"),h=g?"toggle":a.extend({},e.data(),{trigger:this});c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.1",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart "in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){ return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.1",c.TRANSITION_DURATI ON=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.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"]',a.proxy(this.hide,this)),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.options.backdrop&&d.adjustBackdrop(),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$element.find(".modal-dialog").one("bsTransitionEnd",function(){d.$element.trigger("focus").trigge r(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off ("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').prependTo(this.$element).on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one(" bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},c.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body. scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevente d()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.tooltip",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.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}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport &&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter =function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a. contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this .getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arr ow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=this.tip(),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d= "BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.w idth&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$elemen t.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b,g=f&&f.selector;(e||"destroy"!=b)&&(g?(e||d.data("bs.popover",e={}),e[g]||(e[g]=new c(this,f))):e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.1",c.DEFAULTS=a.extend({},a.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>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.pro totype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process ,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.1",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")| |d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selec tor).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.1",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]}) +})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.1",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=i?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function( ){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a("body").height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d =a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
Added: incubator/samoa/site/assets/js/npm.js URL: http://svn.apache.org/viewvc/incubator/samoa/site/assets/js/npm.js?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/assets/js/npm.js (added) +++ incubator/samoa/site/assets/js/npm.js Sun Feb 22 13:41:20 2015 @@ -0,0 +1,13 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('../../js/transition.js') +require('../../js/alert.js') +require('../../js/button.js') +require('../../js/carousel.js') +require('../../js/collapse.js') +require('../../js/dropdown.js') +require('../../js/modal.js') +require('../../js/tooltip.js') +require('../../js/popover.js') +require('../../js/scrollspy.js') +require('../../js/tab.js') +require('../../js/affix.js') \ No newline at end of file Added: incubator/samoa/site/css/main.css URL: http://svn.apache.org/viewvc/incubator/samoa/site/css/main.css?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/css/main.css (added) +++ incubator/samoa/site/css/main.css Sun Feb 22 13:41:20 2015 @@ -0,0 +1,167 @@ +.highlight { + margin-bottom: 15px; } + +/** + * Syntax highlighting styles + */ +.highlight { + background: #fff; } + .highlight .c { + color: #998; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + font-weight: bold; } + .highlight .o { + font-weight: bold; } + .highlight .cm { + color: #998; + font-style: italic; } + .highlight .cp { + color: #999; + font-weight: bold; } + .highlight .c1 { + color: #998; + font-style: italic; } + .highlight .cs { + color: #999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000; + background-color: #fdd; } + .highlight .gd .x { + color: #000; + background-color: #faa; } + .highlight .ge { + font-style: italic; } + .highlight .gr { + color: #a00; } + .highlight .gh { + color: #999; } + .highlight .gi { + color: #000; + background-color: #dfd; } + .highlight .gi .x { + color: #000; + background-color: #afa; } + .highlight .go { + color: #888; } + .highlight .gp { + color: #555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaa; } + .highlight .gt { + color: #a00; } + .highlight .kc { + font-weight: bold; } + .highlight .kd { + font-weight: bold; } + .highlight .kp { + font-weight: bold; } + .highlight .kr { + font-weight: bold; } + .highlight .kt { + color: #458; + font-weight: bold; } + .highlight .m { + color: #099; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #458; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #900; + font-weight: bold; } + .highlight .nf { + color: #900; + font-weight: bold; } + .highlight .nn { + color: #555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + font-weight: bold; } + .highlight .w { + color: #bbb; } + .highlight .mf { + color: #099; } + .highlight .mh { + color: #099; } + .highlight .mi { + color: #099; } + .highlight .mo { + color: #099; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #099; } + +#sidebar { + float: left; + background: #F6F9FB; + border: 1px solid #E1E1E1; + padding: 0px 10px 10px 0px; + margin-left: 0px; } + +#sidebar a.current { + color: #E00000; } + +#sidebar ul { + list-style: none; + font-size: 0.83em; + padding-left: 20px; } + +#sidebar ul li { + margin-top: 3px; } + +#aboutcontent { + width: 70%; + margin-top: 0px; + margin-left: 220px; } + +#footer { + font-size: 0.7em; } Added: incubator/samoa/site/documentation/Adaptive-Model-Rules-Regressor.html URL: http://svn.apache.org/viewvc/incubator/samoa/site/documentation/Adaptive-Model-Rules-Regressor.html?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/documentation/Adaptive-Model-Rules-Regressor.html (added) +++ incubator/samoa/site/documentation/Adaptive-Model-Rules-Regressor.html Sun Feb 22 13:41:20 2015 @@ -0,0 +1,134 @@ +<!DOCTYPE html> +<html> + + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="/assets/favicon.ico"> + + <title>Adaptive Model Rules Regressor</title> + + <!-- Bootstrap core CSS --> + <link href="/assets/css/bootstrap.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="/assets/css/theme.css" rel="stylesheet"> + + <link href="/css/main.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> + <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + <script src="/assets/js/ie-emulation-modes-warning.js"></script> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + + + <body> + <div class="container"> + <!-- Fixed navbar --> + <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/index.html">Apache SAMOA</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/index.html">Home</a></li> + <li><a href="/documentation/Home.html">Documentation</a></li> + <li><a href="/documentation/Team.html">Contributors</a></li> + <li><a href="/documentation/Bylaws.html">Bylaws</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + + + + + + <!-- Documentation --> +<!-- <div class="container"> --> + + <header class="post-header"> + <h1 class="post-title">Adaptive Model Rules Regressor</h1> + <p class="post-meta"></p> + </header> + + <article class="post-content"> + <h3 id="adaptive-model-rules-regressor">Adaptive Model Rules Regressor</h3> + +<p><a href="http://www.ecmlpkdd2013.org/wp-content/uploads/2013/07/251.pdf">Adaptive Model Rules (AMRules)</a> is an innovative algorithm for learning regression rules with streaming data. In AMRules, the rule model consists of a set of normal rules and a default rule (a rule with no features). Hoeffding bound is used to define a confidence interval to decide whether to expand a rule. If the ratio of the 2 largest standard deviation reduction (SDR) measure among all potential features of a rule is is within this interval, the feature with the largest SDR will be added to the rule to expand it. If the default rule is expanded, it will become a normal rule and will be added to the model's rule set. A new default rule is initialized to replace the expanded one. A rule in the set might also be removed if the Page-Hinckley test indicates that its cumulative error exceed a threshold.</p> + +<h3 id="vertical-adaptive-model-rules-regressor">Vertical Adaptive Model Rules Regressor</h3> + +<p>Vertical Adaptive Model Rules Regressor (VAMR) is the vertical parallel implementation of AMRules in SAMOA. The diagram below shows the components of the implementation. +<img src="images/vamr.png" alt="Vertical AMRules"></p> + +<p>The <em>Source PI</em> and <em>Evaluator PI</em> are components of the <a href="Prequential-Evaluation-Task.html">Prequential Evaluation task</a>. The <em>Source PI</em> produces the incoming instances while <em>Evaluator PI</em> reads prediction results from VAMR and reports their accuracy and throughput.</p> + +<p>The core of VAMR implementation consists of one <em>Model Aggregator PI</em> and multiple <em>Learner PIs</em>. Each <em>Learner PI</em> is responsible for training a subset of rules. The <em>Model Aggregator PI</em> manages the rule model (rule set and default rule) to compute the prediction results for incoming instances. It is also responsible for the training the default rule and creation of new rules. </p> + +<p>For each incoming instance from <em>Source PI</em>, <em>Model Aggregator PI</em> appies the current rule set to compute the prediction. The instance is also forwarded from <em>Model Aggregator PI</em> to the <em>Learner PI(s)</em> to train those rules that cover this instance. If an instance is not covered by any rule in the set, the default rule will be used for prediction and will also be trained with this instance. When the default rule expands and create a new rule, the new rule will be sent from <em>Model aggregator PI</em> to one of the <em>Learner PIs</em>. When the <em>Learner PIs</em> expand or remove a rule, an update message is also sent back to the <em>Model Aggregator PI</em>.</p> + +<p>The number of <em>Learner PIs</em> can be set with the <code>-p</code> option:</p> +<div class="highlight"><pre><code class="language-text" data-lang="text">PrequentialEvaluationTask -l (com.yahoo.labs.samoa.learners.classifiers.rules.VerticalAMRulesRegressor -p 4) +</code></pre></div> +<h3 id="horizontal-adaptive-model-rules-regressor">Horizontal Adaptive Model Rules Regressor</h3> + +<p>Horizontal Adaptive Model Rules Regressor (HAMR) is an extended implementation of VAMR. The components of a [[Prequential Evaluation task|Prequential Evaluation Task]] with HAMR are shown in the diagram below. +<img src="images/hamr.png" alt="Horizontal AMRules"></p> + +<p>In HAMR, the <em>Model Aggregator PI</em> is replicated, each processes only a partition of the incoming stream from <em>Source PI</em>. The default rule is moved from the <em>Model Aggregator PI</em> to a special <em>Learner PI</em>, called <em>Default Rule Learner PI</em>. This new PI is reposible for both the training and predicting steps for default rule. </p> + +<p>For each incoming instance from <em>Source PI</em>, <em>Model Aggregator PIs</em> apply the current rule set to compute the prediction. If the instance is covered by a rule in the set, its prediction is computed by the <em>Model Aggregator PI</em> and, then, it is forwarded to the <em>Learner PI(s)</em> for training. Otherwise, the instance is forwarded to <em>Default Rule Learner PI</em> for both prediction and training. </p> + +<p>Newly created rules are sent from <em>Default Rule Learner PI</em> to all <em>Model Aggregator PIs</em> and one of the <em>Learner PIs</em>. Update messages are also sent from <em>Learner PIs</em> to all <em>Model Aggregator PIs</em> when a rule is expanded or removed.</p> + +<p>The number of <em>Learner PIs</em> can be set with the <code>-p</code> option and the number of <em>Model Aggregator PIs</em> can be set with the <code>-r</code> option:</p> +<div class="highlight"><pre><code class="language-text" data-lang="text">PrequentialEvaluationTask -l (com.yahoo.labs.samoa.learners.classifiers.rules.HorizontalAMRulesRegressor -r 4 -p 2) +</code></pre></div> + </article> + +<!-- </div> --> + + + + <hr/> +<div id="footer" class="container text-center"> + + <p class="text-muted credit"><p> +Copyright © 2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. Apache SAMOA, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> + +</div> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/docs.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> + + </div> + + </body> + +</html> Added: incubator/samoa/site/documentation/Bagging-and-Boosting.html URL: http://svn.apache.org/viewvc/incubator/samoa/site/documentation/Bagging-and-Boosting.html?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/documentation/Bagging-and-Boosting.html (added) +++ incubator/samoa/site/documentation/Bagging-and-Boosting.html Sun Feb 22 13:41:20 2015 @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<html> + + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="/assets/favicon.ico"> + + <title>Bagging and Boosting</title> + + <!-- Bootstrap core CSS --> + <link href="/assets/css/bootstrap.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="/assets/css/theme.css" rel="stylesheet"> + + <link href="/css/main.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> + <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + <script src="/assets/js/ie-emulation-modes-warning.js"></script> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + + + <body> + <div class="container"> + <!-- Fixed navbar --> + <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/index.html">Apache SAMOA</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/index.html">Home</a></li> + <li><a href="/documentation/Home.html">Documentation</a></li> + <li><a href="/documentation/Team.html">Contributors</a></li> + <li><a href="/documentation/Bylaws.html">Bylaws</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + + + + + + <!-- Documentation --> +<!-- <div class="container"> --> + + <header class="post-header"> + <h1 class="post-title">Bagging and Boosting</h1> + <p class="post-meta"></p> + </header> + + <article class="post-content"> + <p>Ensemble methods are combinations of several models whose individual predictions are combined in some manner (e.g., averaging or voting) to form a final prediction. When tackling non-stationary concepts, ensembles of classifiers have several advantages over single classifier methods: they are easy to scale and parallelize, they can adapt to change quickly by pruning under-performing parts of the ensemble, and they therefore usually also generate more accurate concept descriptions.</p> + +<p>Bagging and boosting are traditional ensemble methods for streaming environments. +It is possible to use the classifiers available in <a href="http://moa.cms.waikato.ac.nz">MOA</a> by using the <a href="https://github.com/samoa-moa/samoa-moa">SAMOA-MOA</a> adapter.</p> + +<h3 id="bagging">Bagging</h3> + +<p>You can use Bagging as a SAMOA learner, specifying the number of learners to use with parameter <code>-s</code> and the base learner to use with parameter <code>-l</code></p> + +<p><code>(classifiers.ensemble.Bagging -s 10 -l (classifiers.trees.VerticalHoeffdingTree))</code></p> + +<h6 id="only-with-samoa-moa-adapter">Only with SAMOA-MOA adapter</h6> + +<p><code>(classifiers.ensemble.Bagging -s 10 -l (classifiers.SingleClassifier -l (MOAClassifierAdapter -l moa.classifiers.trees.HoeffdingTree)))</code></p> + +<h3 id="adaptive-bagging">Adaptive Bagging</h3> + +<p>If data is evolving, it is better to use an adaptive version of bagging, where each base learner has a change detector that monitors its accuracy. When the accuracy of a base learner decreases, a new base learner is built to replace it.</p> + +<p><code>(classifiers.ensemble.AdaptiveBagging -s 10 -l (classifiers.trees.VerticalHoeffdingTree))</code></p> + +<h6 id="only-with-samoa-moa-adapter">Only with SAMOA-MOA adapter</h6> + +<p><code>(classifiers.ensemble.AdaptiveBagging -s 10 -l (classifiers.SingleClassifier -l (com.yahoo.labs.samoa.learners.classifiers.MOAClassifierAdapter -l moa.classifiers.trees.HoeffdingTree)))</code></p> + +<h3 id="boosting">Boosting</h3> + +<p>Boosting is a well known ensemble method, that has a very good performance in non-streaming setting. SAMOA implements the version of Oza and Russel (<em>Nikunj C. Oza, Stuart J. Russell: Experimental comparisons of online and batch versions of bagging and boosting. KDD 2001:359-364</em>)</p> + +<p><code>(classifiers.ensemble.Boosting -s 10 -l (classifiers.trees.VerticalHoeffdingTree))</code></p> + +<h6 id="only-with-samoa-moa-adapter">Only with SAMOA-MOA adapter</h6> + +<p><code>(classifiers.ensemble.Boosting -s 10 -l (classifiers.SingleClassifier -l (MOAClassifierAdapter -l moa.classifiers.trees.HoeffdingTree)))</code></p> + + </article> + +<!-- </div> --> + + + + <hr/> +<div id="footer" class="container text-center"> + + <p class="text-muted credit"><p> +Copyright © 2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. Apache SAMOA, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> + +</div> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/docs.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> + + </div> + + </body> + +</html> Added: incubator/samoa/site/documentation/Building-SAMOA.html URL: http://svn.apache.org/viewvc/incubator/samoa/site/documentation/Building-SAMOA.html?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/documentation/Building-SAMOA.html (added) +++ incubator/samoa/site/documentation/Building-SAMOA.html Sun Feb 22 13:41:20 2015 @@ -0,0 +1,139 @@ +<!DOCTYPE html> +<html> + + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="/assets/favicon.ico"> + + <title>Building Apache SAMOA</title> + + <!-- Bootstrap core CSS --> + <link href="/assets/css/bootstrap.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="/assets/css/theme.css" rel="stylesheet"> + + <link href="/css/main.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> + <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + <script src="/assets/js/ie-emulation-modes-warning.js"></script> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + + + <body> + <div class="container"> + <!-- Fixed navbar --> + <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/index.html">Apache SAMOA</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/index.html">Home</a></li> + <li><a href="/documentation/Home.html">Documentation</a></li> + <li><a href="/documentation/Team.html">Contributors</a></li> + <li><a href="/documentation/Bylaws.html">Bylaws</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + + + + + + <!-- Documentation --> +<!-- <div class="container"> --> + + <header class="post-header"> + <h1 class="post-title">Building Apache SAMOA</h1> + <p class="post-meta"></p> + </header> + + <article class="post-content"> + <p>To build SAMOA to run on local mode, on your own computer without a cluster, is simple as cloning the repository and installing it.</p> +<div class="highlight"><pre><code class="language-bash" data-lang="bash">git clone http://git.apache.org/incubator-samoa.git +<span class="nb">cd </span>incubator-samoa +mvn package +</code></pre></div> +<p>The deployable jar for SAMOA will be in <code>target/SAMOA-Local-0.3.0-SNAPSHOT.jar</code>.</p> + +<h3 id="storm">Storm</h3> + +<p>Simply clone the repository and install SAMOA.</p> +<div class="highlight"><pre><code class="language-bash" data-lang="bash">git clone http://git.apache.org/incubator-samoa.git +<span class="nb">cd </span>incubator-samoa +mvn -Pstorm package +</code></pre></div> +<p>The deployable jar for SAMOA will be in <code>target/SAMOA-Storm-0.3.0-SNAPSHOT.jar</code>.</p> + +<ul> +<li><a href="Executing-SAMOA-with-Apache-Storm.html">1.1 Executing SAMOA with Apache Storm</a></li> +</ul> + +<h3 id="s4">S4</h3> + +<p>If you want to compile SAMOA for Apache S4, you will need to install the S4 dependencies manually as explained in <a href="Executing-SAMOA-with-Apache-S4.html">Executing SAMOA with Apache S4</a>.</p> + +<p>Once the dependencies are installed, you can simply clone the repository and install SAMOA.</p> +<div class="highlight"><pre><code class="language-bash" data-lang="bash">git clone http://git.apache.org/incubator-samoa.git +<span class="nb">cd </span>incubator-samoa +mvn -P<variant> package <span class="c"># where variant is "storm" or "s4"</span> + +mvn -Pstorm,s4 package <span class="c"># e.g., to get both versions</span> +</code></pre></div> +<p>The deployable jars for SAMOA will be in <code>target/SAMOA-<variant>-<version>-SNAPSHOT.jar</code>. For example, for S4 <code>target/SAMOA-S4-0.3.0-SNAPSHOT.jar</code>.</p> + +<ul> +<li><a href="Executing-SAMOA-with-Apache-S4.html">1.2 Executing SAMOA with Apache S4</a></li> +</ul> + + </article> + +<!-- </div> --> + + + + <hr/> +<div id="footer" class="container text-center"> + + <p class="text-muted credit"><p> +Copyright © 2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. Apache SAMOA, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> + +</div> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/docs.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> + + </div> + + </body> + +</html> Added: incubator/samoa/site/documentation/Bylaws.html URL: http://svn.apache.org/viewvc/incubator/samoa/site/documentation/Bylaws.html?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/documentation/Bylaws.html (added) +++ incubator/samoa/site/documentation/Bylaws.html Sun Feb 22 13:41:20 2015 @@ -0,0 +1,325 @@ +<!DOCTYPE html> +<html> + + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="/assets/favicon.ico"> + + <title>Apache SAMOA Bylaws</title> + + <!-- Bootstrap core CSS --> + <link href="/assets/css/bootstrap.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="/assets/css/theme.css" rel="stylesheet"> + + <link href="/css/main.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> + <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + <script src="/assets/js/ie-emulation-modes-warning.js"></script> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + + + <body> + <div class="container"> + <!-- Fixed navbar --> + <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/index.html">Apache SAMOA</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/index.html">Home</a></li> + <li><a href="/documentation/Home.html">Documentation</a></li> + <li><a href="/documentation/Team.html">Contributors</a></li> + <li><a href="/documentation/Bylaws.html">Bylaws</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + + + + + + <!-- Documentation --> +<!-- <div class="container"> --> + + <header class="post-header"> + <h1 class="post-title">Apache SAMOA Bylaws</h1> + <p class="post-meta"></p> + </header> + + <article class="post-content"> + <h1 id="samoa-bylaws-(draft)">SAMOA Bylaws (Draft)</h1> + +<p>This document defines the bylaws under which the Apache SAMOA project operates.</p> + +<p>Apache SAMOA is a project of the Apache Software Foundation (ASF). The foundation holds the copyright on the code in the Apache SAMOA codebase. The foundation <a href="http://www.apache.org/foundation/faq.html">FAQ</a> explains the operation and background of the foundation.</p> + +<p>Apache SAMOA is typical of Apache projects in that it operates under a set of principles, known collectively as the <em>Apache Way</em>. If you are new to Apache development, please refer to the <a href="http://incubator.apache.org">Apache Incubator</a> for more information on how Apache projects operate.</p> + +<h2 id="roles-and-responsibilities">Roles and Responsibilities</h2> + +<p>Apache projects define a set of roles with associated rights and responsibilities. These roles govern which tasks an individual may perform within the project. The roles are defined in the following sections.</p> + +<h3 id="users:">Users:</h3> + +<p>The most important participants in the project are people who use our software. The majority of our developers start out as users and guide their development efforts from the user's perspective.</p> + +<p>Users contribute to Apache projects by providing feedback to developers in the form of bug reports and feature suggestions. In addition, users participate in the Apache community by helping other users on mailing lists and user support forums.</p> + +<h3 id="contributors:">Contributors:</h3> + +<p>All of the volunteers who are contributing time, code, documentation, or resources to the SAMOA project. A contributor that makes sustained, welcome contributions to the project may be invited to become a Committer, though the exact timing of such invitations depends on many factors.</p> + +<h3 id="committers:">Committers:</h3> + +<p>The project's Committers are responsible for the project's technical management. Committers have access to all project source repositories. Committers may cast binding votes on any technical discussion regarding SAMOA.</p> + +<p>Committer access is by invitation only and must be approved by lazy consensus of the active PMC members. A Committer is considered emeritus by their own declaration or by not contributing in any form to the project for over six months. An emeritus Committer may request reinstatement of commit access from the PMC. Such reinstatement is subject to lazy consensus approval of active PMC members.</p> + +<p>All Apache Committers are required to have a signed <a href="http://www.apache.org/licenses/icla.txt">Contributor License Agreement (CLA)</a> on file with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html">Committer FAQ</a> which provides more details on the requirements for Committers</p> + +<p>A Committer who makes a sustained contribution to the project may be invited to become a member of the PMC. The form of contribution is not limited to code. It can also include other activities such as code review, helping out users on the mailing lists, documentation, and testing.</p> + +<h3 id="project-management-committee-(pmc):">Project Management Committee (PMC):</h3> + +<p>The PMC is responsible to the board and the ASF for the management and oversight of the Apache SAMOA codebase. The responsibilities of the PMC include</p> + +<ul> +<li>Deciding what is distributed as products of the Apache SAMOA project. In particular all releases must be approved by the PMC.</li> +<li>Maintaining the project's shared resources, including the codebase repository, mailing lists, websites.</li> +<li>Speaking on behalf of the project.</li> +<li>Resolving license disputes regarding products of the project.</li> +<li>Nominating new PMC members and Committers.</li> +<li>Maintaining these bylaws and other guidelines of the project.</li> +</ul> + +<p>Membership of the PMC is by invitation only and must be approved by consensus approval of the active PMC members. A PMC member is considered "emeritus" by their own declaration or by not contributing in any form to the project for over six months. An emeritus member may request reinstatement to the PMC. Such reinstatement is subject to consensus approval of the active PMC members.</p> + +<p>The chair of the PMC is appointed by the ASF board. The chair is an office holder of the Apache Software Foundation (Vice President, Apache SAMOA) and has primary responsibility to the board for the management of the projects within the scope of the SAMOA PMC. The chair reports to the board quarterly on developments within the SAMOA project.</p> + +<p>The chair of the PMC is rotated annually. When the chair is rotated, or if the current chair of the PMC resigns, the PMC votes to recommend a new chair using <a href="http://wiki.apache.org/general/BoardVoting">Single Transferable Vote (STV)</a> voting. The decision must be ratified by the ASF board.</p> + +<h2 id="voting">Voting</h2> + +<p>Decisions regarding the project are made by votes on the primary project development mailing list (<a href="mailto:[email protected]">[email protected]</a>). Where necessary, PMC voting may take place on the private SAMOA PMC mailing list. Votes are clearly indicated by subject line starting with [VOTE]. Votes may contain multiple items for approval and these should be clearly separated. Voting is carried out by replying to the vote mail. Voting may take four flavors.</p> + +<table><thead> +<tr> +<th>Vote</th> +<th>Meaning</th> +</tr> +</thead><tbody> +<tr> +<td>+1</td> +<td>'Yes', 'Agree', or 'the action should be performed'.</td> +</tr> +<tr> +<td>+0</td> +<td>Neutral about the proposed action (or mildly negative but not enough so to want to block it).</td> +</tr> +<tr> +<td>-1</td> +<td>This is a negative vote. On issues where consensus is required, this vote counts as a veto. All vetoes must contain an explanation of why the veto is appropriate. Vetoes with no explanation are void. It may also be appropriate for a -1 vote to include an alternative course of action.</td> +</tr> +</tbody></table> + +<p>All participants in the SAMOA project are encouraged to show their agreement with or against a particular action by voting. For technical decisions, only the votes of active Committers are binding. Non-binding votes are still useful for those with binding votes to understand the perception of an action in the wider SAMOA community. For PMC decisions, only the votes of active PMC members are binding.</p> + +<p>Voting can also be applied to changes already made to the SAMOA codebase. These typically take the form of a veto (-1) in reply to the commit message sent when the commit is made. Note that this should be a rare occurrence. All efforts should be made to discuss issues when they are still patches before the code is committed.</p> + +<p>Only active (i.e., non-emeritus) Committers and PMC members have binding votes.</p> + +<h2 id="approvals">Approvals</h2> + +<p>These are the types of approval that can be sought. Different actions require different types of approval.</p> + +<table><thead> +<tr> +<th>Approval</th> +<th>Requirements</th> +</tr> +</thead><tbody> +<tr> +<td>Consensus</td> +<td>requires all binding-vote holders to cast +1 votes and no binding -1 vetoes (consensus votes are rarely required due to the impracticality of getting all eligible voters to cast a vote).</td> +</tr> +<tr> +<td>2/3 Majority</td> +<td>requires at least 2/3 of binding-vote holders to cast +1 votes. (2/3 majority is typically used for actions that affect the foundation of the project, e.g., adopting a new codebase to replace an existing product).</td> +</tr> +<tr> +<td>Lazy Consensus</td> +<td>requires 2 binding +1 votes and no -1 votes ('silence gives assent').</td> +</tr> +<tr> +<td>Lazy Majority</td> +<td>requires 3 binding +1 votes and more binding +1 votes than -1 vetoes.</td> +</tr> +<tr> +<td>Lazy 2/3 Majority</td> +<td>requires at least 3 votes and twice as many +1 votes as -1 vetoes.</td> +</tr> +</tbody></table> + +<h3 id="vetoes">Vetoes</h3> + +<p>A valid, binding veto cannot be overruled. If a veto is cast, it must be accompanied by a valid reason explaining the reasons for the veto. The validity of a veto, if challenged, can be confirmed by anyone who has a binding vote. This does not necessarily signify agreement with the veto - merely that the veto is valid.</p> + +<p>If you disagree with a valid veto, you must lobby the person casting the veto to withdraw their veto. If a veto is not withdrawn, any action that has been vetoed must be reversed in a timely manner.</p> + +<h2 id="actions">Actions</h2> + +<p>This section describes the various actions which are undertaken within the project, the corresponding approval required for that action and those who have binding votes over the action.</p> + +<table><thead> +<tr> +<th>Action</th> +<th>Description</th> +<th>Approval</th> +<th>Binding Votes</th> +<th>Minimum Length</th> +<th>Mailing List</th> +</tr> +</thead><tbody> +<tr> +<td>Code Change</td> +<td>A change made to a codebase of the project and committed by a committer. This includes source code, documentation, and website content.</td> +<td>Lazy Consensus (with at least one +1 vote from someone who has not authored the patch). The code can be committed as soon as the required number of binding votes is reached.</td> +<td>Active Committers</td> +<td>1 day</td> +<td>JIRA or GitHub pull request (with notification sent to dev@)</td> +</tr> +<tr> +<td>Release Plan</td> +<td>Defines the timetable and actions for a release. The plan also nominates a Release Manager.</td> +<td>Lazy Majority</td> +<td>Active Committers</td> +<td>3 days</td> +<td>dev@</td> +</tr> +<tr> +<td>Product Release</td> +<td>Accepting the official release of a product of the project.</td> +<td>Lazy Majority</td> +<td>Active PMC members</td> +<td>3 days</td> +<td>dev@</td> +</tr> +<tr> +<td>Adoption of New Codebase</td> +<td>Replacing the codebase for an existing, released product with an alternative codebase. If such a vote fails to gain approval, the existing code base will continue. This action also covers the creation of new sub-projects and sub-modules within the project.</td> +<td>Lazy 2/3 Majority</td> +<td>Active PMC members</td> +<td>7 days</td> +<td>dev@</td> +</tr> +<tr> +<td>New Committer</td> +<td>Electing a new Committer for the project.</td> +<td>Lazy Consensus</td> +<td>Active PMC members</td> +<td>7 days</td> +<td>private@</td> +</tr> +<tr> +<td>New PMC Member</td> +<td>Promoting a Committer to the PMC of the project.</td> +<td>Consensus</td> +<td>Active PMC members</td> +<td>7 days</td> +<td>private@</td> +</tr> +<tr> +<td>Emeritus PMC Member re-instatement</td> +<td>When an emeritus PMC member requests to be re-instated as an active PMC member.</td> +<td>Consensus</td> +<td>Active PMC members</td> +<td>7 days</td> +<td>private@</td> +</tr> +<tr> +<td>Emeritus Committer re-instatement</td> +<td>When an emeritus Committer requests to be re-instated as an active committer.</td> +<td>Consensus</td> +<td>Active PMC members</td> +<td>7 days</td> +<td>private@</td> +</tr> +<tr> +<td>Committer Removal</td> +<td>When removal of commit privileges is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td> +<td>Consensus</td> +<td>Active PMC members (excluding the committer in question if member of the PMC)</td> +<td>7 Days</td> +<td>private@</td> +</tr> +<tr> +<td>PMC Member Removal</td> +<td>When removal of a PMC member is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td> +<td>Consensus</td> +<td>Active PMC members (excluding the member in question)</td> +<td>7 Days</td> +<td>private@</td> +</tr> +<tr> +<td>Modifying Bylaws</td> +<td>Modifying this document.</td> +<td>2/3 Majority</td> +<td>Active PMC members</td> +<td>7 Days</td> +<td>dev@</td> +</tr> +</tbody></table> + + </article> + +<!-- </div> --> + + + + <hr/> +<div id="footer" class="container text-center"> + + <p class="text-muted credit"><p> +Copyright © 2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. Apache SAMOA, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> + +</div> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/docs.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> + + </div> + + </body> + +</html> Added: incubator/samoa/site/documentation/Content-Event.html URL: http://svn.apache.org/viewvc/incubator/samoa/site/documentation/Content-Event.html?rev=1661475&view=auto ============================================================================== --- incubator/samoa/site/documentation/Content-Event.html (added) +++ incubator/samoa/site/documentation/Content-Event.html Sun Feb 22 13:41:20 2015 @@ -0,0 +1,218 @@ +<!DOCTYPE html> +<html> + + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="description" content=""> + <meta name="author" content=""> + <link rel="icon" href="/assets/favicon.ico"> + + <title>Content Event</title> + + <!-- Bootstrap core CSS --> + <link href="/assets/css/bootstrap.min.css" rel="stylesheet"> + <!-- Bootstrap theme --> + <link href="/assets/css/bootstrap-theme.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="/assets/css/theme.css" rel="stylesheet"> + + <link href="/css/main.css" rel="stylesheet"> + + <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> + <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> + <script src="/assets/js/ie-emulation-modes-warning.js"></script> + + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + </head> + + + + <body> + <div class="container"> + <!-- Fixed navbar --> + <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> + <div class="container"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="/index.html">Apache SAMOA</a> + </div> + <div id="navbar" class="navbar-collapse collapse"> + <ul class="nav navbar-nav"> + <li><a href="/index.html">Home</a></li> + <li><a href="/documentation/Home.html">Documentation</a></li> + <li><a href="/documentation/Team.html">Contributors</a></li> + <li><a href="/documentation/Bylaws.html">Bylaws</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </nav> + + + + + + <!-- Documentation --> +<!-- <div class="container"> --> + + <header class="post-header"> + <h1 class="post-title">Content Event</h1> + <p class="post-meta"></p> + </header> + + <article class="post-content"> + <p>A message or an event is called Content Event in SAMOA. As the name suggests, it is an event which contains content which needs to be processed by the processors.</p> + +<h3 id="1.-implementation">1. Implementation</h3> + +<p>ContentEvent has been implemented as an interface in SAMOA. Users need to implement <code>ContentEvent</code> interface to create their custom message classes. As it can be seen in the following code, key is the necessary part of a message.</p> +<div class="highlight"><pre><code class="language-text" data-lang="text">package com.yahoo.labs.samoa.core; + +public interface ContentEvent extends java.io.Serializable { + + public String getKey(); + + public void setKey(String str); + + public boolean isLastEvent(); +} +</code></pre></div> +<h3 id="2.-methods">2. Methods</h3> + +<p>Following is a brief description of methods.</p> + +<h5 id="2.1-string-getkey()">2.1 <code>String getKey()</code></h5> + +<p>Each message is identified by a key in SAMOA. All user-defined message classes should have a key state variable. Each instance of the custom message should be assigned a key. This method should return the key of the respective message.</p> + +<h5 id="2.2-void-setkey(string-str)">2.2 <code>void setKey(String str)</code></h5> + +<p>This method is used to assign a key to the message.</p> + +<h5 id="2.3-boolean-islastevent()">2.3 <code>boolean isLastEvent()</code></h5> + +<p>This method lets SAMOA know that this message is the last message.</p> + +<h3 id="3.-example">3. Example</h3> + +<p>Following is the example of a <code>Message</code> class which implements <code>ContentEvent</code> interface. As <code>ContentEvent</code> is an interface, it can not hold variables. A user-defined message class should have its own data variables and its getter methods. In the following example, <code>value</code> variable of type <code>Object</code> is added to the class. Using a generic type <code>Object</code> is beneficial in the sense that any object can be passed to it and later it can be casted back to the original type. The following example also adds a <code>streamId</code> variable which stores the <code>id</code> of the stream the message belongs to. This is not a requirement but can be beneficial in certain applications.</p> +<div class="highlight"><pre><code class="language-text" data-lang="text">import com.yahoo.labs.samoa.core.ContentEvent; + +/** + * A general key-value message class which adds a stream id in the class variables + * Stream id information helps in determining to which stream does the message belongs to. + */ +public class Message implements ContentEvent { + + /** + * To tell if the message is the last message of the stream. This may be required in some applications where + * a stream can cease to exist + */ + private boolean last=false; + /** + * Id of the stream to which the message belongs + */ + private String streamId; + /** + * The key of the message. Can be any sting value. Duplicates are allowed. + */ + private String key; + /** + * The value of the message. Can be any object. Casting may be necessary to the desired type. + */ + private Object value; + + public Message() + {} + + /** + * @param key + * @param value + * @param isLastEvent + * @param streamId + */ + public Message(String key, Object value, boolean isLastEvent, String streamId) + { + this.key=key; + this.value = value; + this.last = isLastEvent; + this.streamId=streamId; + } + + @Override + public String getKey() { + return key; + } + + @Override + public void setKey(String str) { + this.key = str; + } + + @Override + public boolean isLastEvent() { + return last; + } + + /** + * @return value of the message + */ + public String getValue() + { + return value.toString(); + } + + /** + * @return id of the stream to which the message belongs + */ + public String getStreamId() { + return streamId; + } + /** + * @param streamId + */ + public void setStreamId(String streamId) { + this.streamId = streamId; + } + +} +</code></pre></div> + </article> + +<!-- </div> --> + + + + <hr/> +<div id="footer" class="container text-center"> + + <p class="text-muted credit"><p> +Copyright © 2014 <a href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved. Apache SAMOA, Apache, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> + +</div> + + <!-- Bootstrap core JavaScript + ================================================== --> + <!-- Placed at the end of the document so the pages load faster --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> + <script src="/assets/js/bootstrap.min.js"></script> + <script src="/assets/js/docs.min.js"></script> + <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> + <script src="/assets/js/ie10-viewport-bug-workaround.js"></script> + + </div> + + </body> + +</html>
