ComponentJS.plugin("testdrive",function(a,b,c){var d={};b.usecase=function(){var c=b.params("usecase",arguments,{name:{pos:0,req:!0,valid:"string"},desc:{pos:1,req:!0,valid:"string"},conf:{def:{},valid:"object"},func:{pos:2,req:!0,valid:"(function|null)"}});if(null===c.func)delete d[c.name];else{if(a.isdefined(d[c.name]))throw a.exception("usecase",'usecase of name "'+c.name+'" already defined');d[c.name]={desc:c.desc,conf:c.conf,func:c.func}}},b.suite=function(){var e=c.jQuery||c.$;if("function"!=typeof e)throw new Error("testdrive#suite() requires jQuery");var f="ComponentJS-testdrive-suite",g=e("body > ."+f);0===g.length&&(g=e('
ComponentJS Test-Drive Use-Cases Suite
close
'),g.hide(),e("body").append(g));var h=e(c).width(),i=h/10*8,j=function(a){e(g).animate({top:-400},300,"swing",function(){e(g).hide(),e(g).remove(),"function"==typeof a&&a()})};if(e("body > ."+f).filter(":visible").length>0)return void j();g.width(i).height(400).css("box-sizing","content-box").css("top",-400).css("left",h/2-i/2).css("position","absolute").css("z-index",1e4).css("background-color","#f8f8f8").css("-webkit-box-shadow","0 4px 16px 0 #909090").css("box-shadow","0 4px 16px 0 #909090").css("-webkit-border-radius","0 0 8px 8px").css("border-radius","0 0 8px 8px").css("color","#000000").css("font-family","sans-serif").css("font-size","11pt"),e("."+f+"-head",g).width(i-20).height(20).css("box-sizing","content-box").css("position","relative").css("background","#666666").css("background","-moz-linear-gradient(top, #666666 0%, #333333 49%, #222222 51%, #000000 100%)").css("background","-webkit-linear-gradient(top, #666666 0% ,#333333 49% ,#222222 51%, #000000 100%)").css("background","linear-gradient(to bottom, #666666 0%, #333333 49%, #222222 51%, #000000 100%)").css("color","#ffffff").css("padding","7px 10px 7px 10px").css("font-size","16px"),e("."+f+"-head-close",g).css("position","absolute").css("right","10px").css("top","6px").css("padding","4px 10px 4px 10px").css("font-size","12px").css("color","#c0c0c0").css("border","1px solid #606060").css("cursor","pointer"),e("."+f+"-list",g).width(i).height(370).css("overflow","scroll").css("overflow-x","hidden");var k=e("");k.append('Identifier | Description |
');var l=0;a.foreach(a.keysof(d).sort(),function(a){k.append(''+a+' | '+d[a].desc+" |
")}),e("."+f+"-list",g).html(k),e("."+f+"-list table",g).width(i).css("border-collapse","collapse"),e("."+f+"-list-row",g).css("cursor","pointer"),e("."+f+"-list-row-first",g).width(i).css("background-color","#909090").css("color","#f0f0f0"),e("."+f+"-list-row-1",g).width(i).css("background-color","#f0f0f0"),e("."+f+"-list-name",g).css("padding","2px 10px 2px 10px").css("font-family","monospace").css("white-space","nowrap"),e("."+f+"-list-desc",g).width("100%").css("padding","2px 10px 2px 10px"),e("."+f+"-list-row",g).on("click",function(a){var c=a.target;"tr"!==e(c).prop("tagName")&&(c=e(c).parent());var d=e(c).data("id");"string"==typeof d&&""!==d&&j(function(){b.drive(d).then(null,function(a){alert('ComponentJS: testdrive: use case "" failed: '+a)})})}),e("."+f+"-head-close",g).on("click",j),function(a){e(g).show().animate({top:0},300,"swing",a)}()},b.promise=function(){var a={exports:{}};return function(b,c,d){"function"==typeof define&&void 0!==define.amd?define(c,function(){return d()}):"object"==typeof a&&"object"==typeof a.exports?a.exports=d():b[c]=function(){var a=b[c],e=d();return e.noConflict=function(){return b[c]=a,e},e}()}(this,"Thenable",function(){var a=function(b){if(!(this instanceof a))return new a(b);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof b&&b.call(this,this.fulfill.bind(this),this.reject.bind(this))},b=function(a,b,c){if(0!==a[b].length){var d=a[b];a[b]=[];var e=function(){for(var a=0;a0&&(i=setTimeout(function(){i=null,h||(h=!0,b.debug(1,'drive: usecase "'+c.name+'", TIMEOUT after '+c.timeout+" ms"),f.reject(new Error('usecase "'+c.name+'": timeout')))},c.timeout));var j={};a.extend(j,e.conf),a.extend(j,c.conf),b.debug(1,'drive: usecase "'+c.name+'" ('+d[c.name].desc+"), EXECUTING"+(a.keysof(c.conf).length>0?" with configuration "+a.json(c.conf):"")+(c.timeout>0?" and timeout of "+c.timeout+" ms":""));var k;try{k=e.func.apply(j,[j])}catch(a){h||(h=!0,b.debug(1,'drive: usecase "'+c.name+'", EXCEPTION: '+a.message),f.reject(new Error('usecase "'+c.name+'": '+a.message)))}return null!==i&&(clearTimeout(i),i=null),h||("object"!=typeof k&&"function"!=typeof k||"function"!=typeof k.then?f.fulfill(!0):g=k),g=g.then(null,function(a){return b.debug(1,'drive: usecase "'+c.name+'" failed: '+a),a})},b.ensure=function(){var a=b.params("ensure",arguments,{path:{pos:0,req:!0,valid:"string"},state:{pos:1,req:!0,valid:"string"},min:{def:!0,valid:"boolean"},max:{def:!1,valid:"boolean"},sync:{def:!1,valid:"boolean"}}),c=new b.promise,d=b(a.path);return d.state({state:a.state,min:a.min,max:a.max,sync:a.sync,func:function(a){c.fulfill(d)}}),c.proxy};var e=[],f=function(c,d,f){var g;if(a.states.length<=1)throw a.exception("await(internal)","no user-defined component states");if(d===a.states[1].state&&"enter"===f)for(g=0;g