From 0b67c74e46d75ae7a2221e1d316e437c45f28280 Mon Sep 17 00:00:00 2001 From: jeremychone Date: Wed, 10 Oct 2012 18:32:52 -0700 Subject: [PATCH] . minor fix setting the entityType daoHandler method as internal (to not wrap it) --- dist/brite.js | 4 ++-- dist/brite.min.js | 2 +- src/js/brite.dao.js | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/brite.js b/dist/brite.js index 9cc595e..92c2346 100644 --- a/dist/brite.js +++ b/dist/brite.js @@ -1683,8 +1683,8 @@ var brite = brite || {}; } var internalMethods = { - idName : true, - isDataChange : true + isDataChange : true, + entityType: true }; var dataChangeMethodRegEx = /remove|delete|create|update/i; diff --git a/dist/brite.min.js b/dist/brite.min.js index bda7981..a2e30d3 100644 --- a/dist/brite.min.js +++ b/dist/brite.min.js @@ -1 +1 @@ -var brite=brite||{};brite.version="0.9.0-snapshot";(function(b){var d=".";var f=".";var p=0;var k={};var h={};var s={};var g={};brite.registerView=function(A,z,x){var B={};B.name=A;B.componentFactory=(x)?x:z;var y=(x)?z:null;B.config=b.extend({},brite.viewDefaultConfig,y);k[A]=B;var w=s[A];if(w){w.resolve(B);delete s[A]}};brite.registerComponent=brite.registerView;brite.registerTransition=function(w,x){g[w]=x};brite.getTransition=function(w){return g[w]};brite.display=function(z,x,y,w){if(x){w=w||{};w.parent=x}return m(z,y,w)};brite.legacyDisplay=function(z,y,w){var x=(w)?w.parent:null;brite.display(z,x,y,w)};brite.attach=function(z,w,y,x){return m(z,y,x,w)};brite.config={componentsHTMLHolder:"body",tmplPath:"tmpl/",tmplExt:".tmpl"};brite.viewDefaultConfig={loadTmpl:false,loadCss:false,emptyParent:false,postDisplayDelay:0};brite.defaultComponentConfig=brite.viewDefaultConfig;function v(w){var y=b.Deferred();var x=j(w);x.done(function(H){var D,E;var z=H.config.loadTmpl;if(z&&!h[w]){var C=true;var J=H.config.checkTemplate;if(J){var G=(typeof J=="string")?J:("#tmpl-"+w);if(b(G).length>0){C=false}}if(C){D=b.Deferred();var I=(typeof z=="string")?I:(w+".html");b.ajax({url:brite.config.tmplPath+w+brite.config.tmplExt,async:true}).complete(function(K,L){b(brite.config.componentsHTMLHolder).append(K.responseText);h[w]=true;D.resolve()})}}var F=H.config.loadCss;if(F){E=b.Deferred();var A="css/"+w+".css";var B=e(A,"css");B.done(function(){E.resolve()}).fail(function(){console.log("Brite ERROR: cannot load "+A+". Ignoring issue");E.resolve()})}b.when(D,E).done(function(){y.resolve(H)})});x.fail(function(z){console.log("BRITE-ERROR: Brite cannot load component: "+w+"\n\t "+z);y.reject()});return y.promise()}function j(x){var w=b.Deferred();var A=k[x];if(A){w.resolve(A)}else{var y="js/"+x+".js";var z=e(y,"js");z.done(function(){A=k[x];if(A){w.resolve(A)}else{w.reject("Component js file ["+y+"] loaded, but it did not seem to have registered the view - it needs to call brite.registerView('"+x+"',...config...) - see documentation")}}).fail(function(){w.reject("Component resource file "+y+" not found")})}return w.promise()}function m(w,C,A,F){var y=v(w);var B=b.Deferred();var E=b.Deferred();var z=b.Deferred();var x=b.Deferred();var D=B.promise();D.whenCreate=E.promise();D.whenInit=z.promise();D.whenPostDisplay=x.promise();y.done(function(K){A=o(K,A);var I=t(K);if(A.unique){var G=b("[data-b-view='"+w+"']");if(G.length>0){I=G.bComponent();B.resolve(I);return B}}var J=b.Deferred();if(!F){var H=n(I,C,A);if(H&&b.isFunction(H.promise)&&!H.jquery){H.done(function(L){J.resolve(L)}).fail(function(){J.reject()})}else{if(H){F=b(H)}J.resolve(F)}}else{J.resolve(F)}J.promise().done(function(L){if(L){L=b(L);q(L,I,C,A);L.data("componentProcessPromise",D);E.resolve(I);b.when(l(I,C,A)).done(function(){r(I,C,A);z.resolve(I)})}else{E.resolve(I);z.resolve(I)}D.whenInit.done(function(){var N,M;if(L&&L.parent()){var O=L.parent().closest("[data-b-view]");if(O.length>0){N=O.data("componentProcessPromise");if(N){N.whenPostDisplay.done(function(){M=i(I,C,A);M.done(function(){x.resolve(I)})})}}}if(!N){M=i(I,C,A);M.done(function(){x.resolve(I)})}})});D.whenPostDisplay.done(function(){B.resolve(I)})});y.fail(function(){B.reject();E.reject();z.reject();x.reject()});return D}function r(x,y,w){var z;if(w.transition){var A=brite.getTransition(w.transition);if(A){A(x,y,w)}else{brite.log.error("Transition ["+w.transition+"] not found. Transitions need to be registered via brite.registerTranstion(..) before call.")}}else{if(w.replace){b(w.replace).bRemove()}if(w.parent){z=b(w.parent);if(w.emptyParent){z.bEmpty()}z.append(x.$el)}}}function o(x,w){var y=b.extend({},x.config,w);y.componentName=x.name;return y}function t(y){var w;var x=y.componentFactory;if(x){if(b.isFunction(x)){w=x()}else{if(b.isPlainObject(x)){w=b.extend({},x)}else{brite.log.error("Invalid ComponentFactory for component ["+y.componentName+"]. Only types Function or Object are supported as componentFactory. Empty component will be created.")}}}else{brite.log.error("No ComponentFactory for component ["+y.componentName+"]")}if(w){w.name=y.name;w.cid=w.id="bview_"+p++}return w}function n(x,y,w){var z=x.create||x.build;if(!z||!b.isFunction(z)){brite.log.error("Invalid 'create' function for component ["+x.name+"].");return}return z.call(x,y,w)}function l(x,y,w){var z=x.init;if(b.isFunction(z)){return z.call(x,y,w)}}function q(w,y,z,x){y.el=w[0];y.$el=y.$element=w;w.data("component",y);w.attr("data-b-view",x.componentName);w.attr("data-brite-cid",y.cid)}function i(x,A,w){var z=b.Deferred();if(x.events){a(x.events,x.$el,x)}if(x.docEvents){a(x.docEvents,b(document),x,d+x.id)}if(x.winEvents){a(x.winEvents,b(window),x,f+x.id)}u(x);if(x.postDisplay){if(w.postDisplayDelay>=0){setTimeout(function(){var B=x.postDisplay(A,w);if(B&&b.isFunction(B.promise)){B.done(function(){z.resolve()})}else{z.resolve()}},w.postDisplayDelay)}else{var y=x.postDisplay(A,w);if(y&&b.isFunction(y.promise)){y.done(function(){z.resolve()})}else{z.resolve()}}}else{z.resolve()}return z.promise()}function a(y,z,w,x){b.each(y,function(B,F){var A=B.split(";");var C=A[0]+((x)?x:"");var E=A[1];var D=c(w,F);if(D){z.on(C,E,function(){var G=b.makeArray(arguments);D.apply(w,G)})}else{throw"BRITE ERROR: '"+w.name+"' component event handler function '"+F+"' not found."}})}function u(x){var w=x.daoEvents;if(x.daoEvents){var y=x.id;b.each(w,function(A,E){var D=c(x,E);if(D){var z=A.split(";");var B=z[0];B=B.charAt(0).toUpperCase()+B.slice(1);var C=z[1];var F=z[2];brite.dao["on"+B](C,F,function(H){var G=b.makeArray(arguments);D.apply(x,G)},y)}else{throw"BRITE ERROR: '"+x.name+"' component daoEvent handler function '"+E+"' not found."}})}}function c(w,y){var x=y;if(!b.isFunction(x)){x=w[y]}return x}function e(B,x){var w=b.Deferred();if(x==="js"){var A=document.createElement("script");A.setAttribute("type","text/javascript");A.setAttribute("src",B)}else{if(x==="css"){var A=document.createElement("link");A.setAttribute("rel","stylesheet");A.setAttribute("type","text/css");A.setAttribute("href",B)}}if(x==="js"){A.onload=function(){w.resolve(B)};A.addEventListener("error",function(){w.reject()},true)}else{if(x==="css"){var z=document.getElementsByTagName("html")[0];var y=document.createElement("img");b(y).css("display","none");y.onerror=function(){z.removeChild(y);w.resolve(B)};z.appendChild(y);y.src=B}}if(typeof A!="undefined"){document.getElementsByTagName("head")[0].appendChild(A)}return w.promise()}})(jQuery);(function(d){var b=".";var c=".";d.fn.bEmpty=function(){return this.each(function(){var f=d(this);var e=f.bFindComponents();d.each(e,function(h,g){a(g)});f.empty()})};d.fn.bRemove=function(){return this.each(function(){var f=d(this);f.bEmpty();if(f.is("[data-b-view]")){var e=f.data("component");a(e);f.remove()}else{f.remove()}})};function a(e){if(e){d(document).off(b+e.id);d(window).off(c+e.id);if(brite.dao){brite.dao.offAny(e.id)}var f=e.destroy;if(d.isFunction(f)){f.call(e)}}}})(jQuery);(function(a){a.fn.bComponent=function(b){var c;if(b){c=a(this).closest("[data-b-view='"+b+"']")}else{c=a(this).closest("[data-b-view]")}return c.data("component")};a.fn.bFindComponents=function(b){var c=[];this.each(function(){var d=a(this);var e;if(b){e=a(this).find("[data-b-view='"+b+"']")}else{e=a(this).find("[data-b-view]")}e.each(function(){var f=a(this);c.push(f.data("component"))})});return c};a.fn.bFindFirstComponent=function(b){var c=[];this.each(function(){var d=a(this);var e;if(b){e=a(this).find("[data-b-view='"+b+"']:first")}else{e=a(this).find("[data-b-view]:first")}e.each(function(){var f=a(this);c.push(f.data("component"))})});return c}})(jQuery);(function(d){var b={failOnFirst:true};brite.whenEach=function(g,m,l){var f=d.Deferred();var k=[];var j=0;l=d.extend({},b,l);h();function h(){if(j-1){return g[f]}else{return null}},sortBy:function(f,g){return f.sort(h);function h(k,j){if(typeof k==="undefined"){return -1}if(typeof j==="undefined"){return 1}var i=k[g];var l=j[g];return((il)?1:0))}},toMap:function(g,k){var j,f=g.length;var n={},m,h;for(j=0;jflushUI");d("body").append(e)}a=a*-1;e.text("").text(a);e.css("width",a+"px")}}})(jQuery);brite.ua={};(function(f){var e={webkit:"-webkit-",chrome:"-webkit-",mozilla:"-moz-",msie:"-ms-",opera:"-o-"};var j={webkit:"Webkit",mozilla:"Moz",chrome:"Webkit",msie:"ms",opera:"o"};var a=null;var d=null;var m=null;var h=null;var i=null;var o=null;var c=null;var k=null;var b={};var g=null;function l(){f.each(e,function(p,q){if(f.browser[p]){g=p;d=e[p];a=j[p]}})}brite.ua.cssPrefix=function(){if(d===null){l()}return d};brite.ua.cssVarPrefix=function(){if(a===null){l()}return a};brite.ua.cssHas=function(){if(m===null){var p="has";m="";f.each(brite.ua,function(r){var q=brite.ua[r];var s;if(r.indexOf(p)===0&&f.isFunction(q)){if(q.call(brite.ua)){s="has-"+r.substring(p.length).toLowerCase();m+=s+" "}}})}return m};brite.ua.cssHasNo=function(){if(h===null){var p="has";h="";f.each(brite.ua,function(r){var q=brite.ua[r];var s;if(r.indexOf(p)===0&&f.isFunction(q)){if(!q.call(brite.ua)){s="has-no-"+r.substring(p.length).toLowerCase();h+=s+" "}}})}return h};brite.ua.supportsEvent=function(p){var q=b[p];if(typeof q==="undefined"){q=n(p);b[p]=q}return q};brite.ua.hasTouch=function(){return this.supportsEvent("touchstart")};brite.ua.hasCanvas=function(){if(c===null){var p=document.createElement("canvas");c=(p.getContext)?true:false;delete p}return c};brite.ua.hasTransition=function(){if(o===null){var q=document.createElement("div");var p=brite.ua.cssPrefix()+"transition";q.innerHTML='
';if(q.firstChild.style[brite.ua.cssVarPrefix()+"Transition"]){o=true}else{o=false}delete q}return o};var n=(function(){var q={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};function p(r){var t=document.createElement(q[r]||"div");r="on"+r;var s=(r in t);if(!s){t.setAttribute(r,"return;");s=typeof t[r]=="function"}t=null;return s}return p})()})(jQuery);(function(d){brite.gtx=function b(f){var g=f;if(f.jquery){f=f.get(0)}if(d.isFunction(f.getContext)){g=f.getContext("2d")}if(!(this instanceof b)){return new b(g)}this.context=this.ctx=g;if(!this.beginPath){a()}};brite.gtx.prototype.referenceScale=function(g,f){this._refWidth=g;this._refHeight=f;computeRatio.call(this);return this};brite.gtx.prototype.fitParent=function(){var f=this.canvas();if(f){var f=this.canvas();var g=d(f).parent();f.width=g.width();f.height=g.height()}return this};brite.gtx.prototype.clear=function(){if(this.canvas()){this.canvas().width=this.canvas().width}return this};brite.gtx.prototype.createLinearGradient=function(h,j,g,i){var k=this.ctx.createLinearGradient(h,j,g,i);var f=new e(k);return f};brite.gtx.prototype.createRadialGradient=function(j,l,i,h,k,g){var m=this.ctx.createRadialGradient(j,l,i,h,k,g);var f=new e(m);return f};brite.gtx.prototype.fillStyle=function(f){return c(this,"fillStyle",f)};brite.gtx.prototype.strokeStyle=function(f){return c(this,"strokeStyle",f)};function c(i,h,f){if(!f){return i.ctx[h]}if(f.ctxGradient){f=f.ctxGradient}i.ctx[h]=f;return i}function e(f){this.ctxGradient=f}e.prototype.addColorStop=function(){this.ctxGradient.addColorStop.apply(this.ctxGradient,arguments);return this};e.prototype.addColorStops=function(){for(var f=0;(f+1)-1;u--){z=t[u];if(h.isFunction(z)){x.func=z}else{if(!x.func){w=z}else{if(x.func&&u===1){x.actions=z}else{if(x.func&&u===0){x.objectTypes=z}}}}}if(typeof w==="undefined"){throw"BRITE DAO BINDING ERROR: any binding with brite.dao.on*** needs to have a namespace after the function. Remember to cleanup the event at component close with brite.dao.off(mynamespace)"}if(!x.actions){x.actions=g+"."+w}else{var v="."+w+" ";x.actions=x.actions.split(",").join(v)+v}if(x.objectTypes){var y=x.objectTypes.split(",");h.each(y,function(A,B){y[A]="."+h.trim(B)});x.objectTypes=y.join(",")}x.namespace=w;return x}function e(y,v,u,x){var t=h.extend(jQuery.Event(x.action),{daoEvent:x});var w=y[u];if(!w){y[u]=w=h("
");v.append(w)}w.trigger(t);t.type=g;w.trigger(t)}var c=h("
");var r={};brite.dao.onDao=function(x,w,v,t){var u=d(arguments);c.on(u.actions,u.objectTypes,u.func);return u.namespace};brite.dao.offDao=function(t){c.off("."+t)};function q(u,w,t){var v={entityType:u,action:w,resultPromise:t};e(r,c,u,v)}var l=h("
");var s={};brite.dao.onResult=function(x,w,v,t){var u=d(arguments);l.on(u.actions,u.objectTypes,u.func);return u.namespace};brite.dao.offResult=function(t){l.off("."+t)};function a(u,w,t){var v={entityType:u,action:w,result:t};e(s,l,u,v)}var i=h("
");var m={};brite.dao.onDataChange=function(x,w,u,t){var v=d(arguments);i.on(v.actions,v.objectTypes,v.func);return v.namespace};brite.dao.offDataChange=function(t){i.off("."+t)};brite.triggerDataChange=function(u,w,t){var v={entityType:u,action:w,result:t};e(m,i,u,v)};brite.dao.offAny=function(t){brite.dao.offResult(t);brite.dao.offDao(t);brite.dao.offDataChange(t)};function j(u){if(u&&h.isFunction(u.promise)){return u}else{var t=h.Deferred();t.resolve(u);return t}}})(jQuery);(function(a){a.fn.bEntity=function(d){var c,b=null;this.each(function(){if(b===null){var f=a(this);var e;if(d){e=f.closest("[data-entity='"+d+"']")}else{e=f.closest("[data-entity]")}if(e.length>0){b={type:e.attr("data-entity"),id:e.attr("data-entity-id"),name:e.attr("data-entity-name"),$el:e}}}});return b}})(jQuery);(function(a){a.fn.bObjRef=function(d){var b=[];var c=null;this.each(function(){var f=a(this);var e;if(d){e=f.closest("[data-obj_type='"+d+"']")}else{e=f.closest("[data-obj_type]")}if(e.length>0){var g={type:e.attr("data-obj_type"),id:e.attr("data-obj_id"),$element:e};b.push(g)}});if(b.length===0){return null}else{if(b.length===1){return b[0]}else{return b}}}})(jQuery);(function(d){var b={idName:"id"};function c(h,f,g){e.call(this,h,f,g)}function e(h,f,g){this._entityType=h;this._opts=d.extend({},b,g);this._idName=this._opts.idName;a.call(this,f)}function a(f){var h=this._dataDic={};var g=this._idName;if(d.isArray(f)){d.each(f,function(i,j){var k=j[g];if(typeof k==="undefined"){k=brite.uuid();j[g]=k}h[k]=j})}}c.prototype.entityType=function(){return this._entityType};c.prototype.get=function(g){var f=this._dataDic[g];if(f){return d.extend({},f)}else{return f}};c.prototype.create=function(g){if(g){var f=brite.uuid();g[this._idName]=f;this._dataDic[f]=g}return d.extend({},g)};c.prototype.remove=function(g){var f=this._dataDic[g];if(f){delete this._dataDic[g]}return g};c.prototype.removeMany=function(f){var g=this;d.each(f,function(h,i){delete g._dataDic[i]});return f};c.prototype.update=function(g){var h=g[this._idName];if(typeof h==="undefined"){throw"BRITE ERROR: InMemoryDaoHandler.update: data does not have an id property. Cannot update."}var f=this._dataDic[h];if(f){delete g[this._idName];d.extend(f,g);return d.extend({},f)}else{return null}};c.prototype.list=function(h){h=h||{};var f=[];d.each(this._dataDic,function(l,j){var i,n=true;if(h.match){var m=h.match;for(i in m){if(j[i]!==m[i]){n=false;break}}}if(n){f.push(j)}});if(h.orderBy){f.sort(function(j,i){var k=true;if(h.orderType&&h.orderType.toLowerCase()=="desc"){k=false}var l=j[h.orderBy]>=i[h.orderBy]?1:-1;if(!k){l=l*-1}return l})}if(h.pageIndex||h.pageIndex==0){if(h.pageSize){newResults=f.slice(h.pageIndex*h.pageSize,(h.pageIndex+1)*h.pageSize)}else{if(h.pageSize!=0){newResults=f.slice(h.pageIndex*h.pageSize)}}}var g=d.map(f,function(i){return d.extend({},i)});return g};brite.InMemoryDaoHandler=c})(jQuery);var brite=brite||{};brite.event=brite.event||{};(function(b){var a=brite.ua.hasTouch();brite.event.fixTouchEvent=function(c){if(a){var d=c.originalEvent;if(d.touches.length>0){c.pageX=d.touches[0].pageX;c.pageY=d.touches[0].pageY}}return c};brite.event.eventPagePosition=function(f){var d,c;if(f.originalEvent&&f.originalEvent.touches){d=f.originalEvent.touches[0].pageX;c=f.originalEvent.touches[0].pageY}else{d=f.pageX;c=f.pageY}return{pageX:d,pageY:c}}})(jQuery);(function(b){b.fn.bTransition=function(c){return this.each(function(){var e=b(this);var d=-1;if(typeof c.onTimeout==="boolean"){d=(c.onTimeout)?0:-1}else{if(typeof c.onTimeout==="number"){d=c.onTimeout}}if(d>-1){setTimeout(function(){a(e,c)},d)}else{a(e,c)}})};function a(d,c){d.css("transition",c.transition);d.css("transform",c.transform)}})(jQuery);(function(f){var o=false;var p={start:"mousedown",move:"mousemove",end:"mouseup"};var i={start:"touchstart",move:"touchmove",end:"touchend"};function b(){if(brite.ua.hasTouch()){return i}else{return p}}f.event.special.btap={setup:function(s,r){var q=b();f(this).on(q.start,function(y){var x=this;var u=f(x);var w=y.target,t=y,A;function z(B){v();if(B.target===w&&!o){brite.event.fixTouchEvent(t);h(x,B,{type:"btap",pageX:t.pageX,pageY:t.pageY})}}function v(){clearTimeout(A);u.off(q.end,z)}u.on(q.end,z);A=setTimeout(function(){if(!o){brite.event.fixTouchEvent(t);h(x,t,{type:"btaphold"})}},750)})}};k(["btaphold"],"btap");var l="bdragstart",m="bdragmove",n="bdragend";var c="bdragenter",a="bdragover",g="bdragleave",d="bdrop";var j=5;f(function(){});f.event.special[m]={setup:function(s,r){var q=b();f(this).on(q.start,function(t){var w=this;var u=f(this);var v=false;var A=t;var z=brite.event.eventPagePosition(A);var C=t.target;var x=f(C);var y=f(document);var B="_"+brite.uuid(7);y.on(q.move+"."+B,function(F){var D=brite.event.eventPagePosition(F);f("body").css("-webkit-user-select","none");if(!v){if(Math.abs(z.pageX-D.pageX)>j||Math.abs(z.pageY-D.pageY)>j){v=true;o=true;x.data("bDragCtx",{});var E=e(F,x,l);h(C,F,{type:l,target:C,bextra:E});F.stopPropagation();F.preventDefault()}}if(v){var E=e(F,x,m);h(C,F,{type:m,target:C,bextra:E});F.stopPropagation();F.preventDefault()}});y.on(q.end+"."+B,function(E){f("body").css("-webkit-user-select","");if(v){var D=e(E,x,n);h(C,E,{type:n,target:C,bextra:D});E.stopPropagation();E.preventDefault()}y.off("."+B);o=false})})}};k([l,n],m);function e(u,r,t){brite.event.fixTouchEvent(u);var v=brite.ua.hasTouch();var q={eventSource:u,pageX:u.pageX,pageY:u.pageY};var w=u.originalEvent;if(v){q.touches=w.touches}var s=r.data("bDragCtx");if(t===l){s.startPageX=q.startPageX=q.pageX;s.startPageY=q.startPageY=q.pageY;s.lastPageX=s.startPageX=q.startPageX;s.lastPageY=s.startPageY=q.startPageY}else{if(t===n){q.pageX=s.lastPageX;q.pageY=s.lastPageY}}q.startPageX=s.startPageX;q.startPageY=s.startPageY;q.deltaX=q.pageX-s.lastPageX;q.deltaY=q.pageY-s.lastPageY;s.lastPageX=q.pageX;s.lastPageY=q.pageY;return q}f.event.special.btransitionend={setup:function(s,r){var q="transitionend";if(this.addEventListener){if(!f.browser.mozilla){q=brite.ua.cssVarPrefix().toLowerCase()+"TransitionEnd"}this.addEventListener(q,function(t){h(this,t,{type:"btransitionend"})})}else{h(this,jQuery.Event("btransitionend"),{type:"btransitionend"})}}};function k(r,q){f.each(r,function(s,t){f.event.special[t]={setup:function(){f(this).bind(q,f.noop)}}})}function h(s,q,r){var t=jQuery.extend(new jQuery.Event(),q,r);f(s).trigger(t)}})(jQuery); \ No newline at end of file +var brite=brite||{};brite.version="0.9.0-snapshot";(function(b){var d=".";var f=".";var p=0;var k={};var h={};var s={};var g={};brite.registerView=function(A,z,x){var B={};B.name=A;B.componentFactory=(x)?x:z;var y=(x)?z:null;B.config=b.extend({},brite.viewDefaultConfig,y);k[A]=B;var w=s[A];if(w){w.resolve(B);delete s[A]}};brite.registerComponent=brite.registerView;brite.registerTransition=function(w,x){g[w]=x};brite.getTransition=function(w){return g[w]};brite.display=function(z,x,y,w){if(x){w=w||{};w.parent=x}return m(z,y,w)};brite.legacyDisplay=function(z,y,w){var x=(w)?w.parent:null;brite.display(z,x,y,w)};brite.attach=function(z,w,y,x){return m(z,y,x,w)};brite.config={componentsHTMLHolder:"body",tmplPath:"tmpl/",tmplExt:".tmpl"};brite.viewDefaultConfig={loadTmpl:false,loadCss:false,emptyParent:false,postDisplayDelay:0};brite.defaultComponentConfig=brite.viewDefaultConfig;function v(w){var y=b.Deferred();var x=j(w);x.done(function(H){var D,E;var z=H.config.loadTmpl;if(z&&!h[w]){var C=true;var J=H.config.checkTemplate;if(J){var G=(typeof J=="string")?J:("#tmpl-"+w);if(b(G).length>0){C=false}}if(C){D=b.Deferred();var I=(typeof z=="string")?I:(w+".html");b.ajax({url:brite.config.tmplPath+w+brite.config.tmplExt,async:true}).complete(function(K,L){b(brite.config.componentsHTMLHolder).append(K.responseText);h[w]=true;D.resolve()})}}var F=H.config.loadCss;if(F){E=b.Deferred();var A="css/"+w+".css";var B=e(A,"css");B.done(function(){E.resolve()}).fail(function(){console.log("Brite ERROR: cannot load "+A+". Ignoring issue");E.resolve()})}b.when(D,E).done(function(){y.resolve(H)})});x.fail(function(z){console.log("BRITE-ERROR: Brite cannot load component: "+w+"\n\t "+z);y.reject()});return y.promise()}function j(x){var w=b.Deferred();var A=k[x];if(A){w.resolve(A)}else{var y="js/"+x+".js";var z=e(y,"js");z.done(function(){A=k[x];if(A){w.resolve(A)}else{w.reject("Component js file ["+y+"] loaded, but it did not seem to have registered the view - it needs to call brite.registerView('"+x+"',...config...) - see documentation")}}).fail(function(){w.reject("Component resource file "+y+" not found")})}return w.promise()}function m(w,C,A,F){var y=v(w);var B=b.Deferred();var E=b.Deferred();var z=b.Deferred();var x=b.Deferred();var D=B.promise();D.whenCreate=E.promise();D.whenInit=z.promise();D.whenPostDisplay=x.promise();y.done(function(K){A=o(K,A);var I=t(K);if(A.unique){var G=b("[data-b-view='"+w+"']");if(G.length>0){I=G.bComponent();B.resolve(I);return B}}var J=b.Deferred();if(!F){var H=n(I,C,A);if(H&&b.isFunction(H.promise)&&!H.jquery){H.done(function(L){J.resolve(L)}).fail(function(){J.reject()})}else{if(H){F=b(H)}J.resolve(F)}}else{J.resolve(F)}J.promise().done(function(L){if(L){L=b(L);q(L,I,C,A);L.data("componentProcessPromise",D);E.resolve(I);b.when(l(I,C,A)).done(function(){r(I,C,A);z.resolve(I)})}else{E.resolve(I);z.resolve(I)}D.whenInit.done(function(){var N,M;if(L&&L.parent()){var O=L.parent().closest("[data-b-view]");if(O.length>0){N=O.data("componentProcessPromise");if(N){N.whenPostDisplay.done(function(){M=i(I,C,A);M.done(function(){x.resolve(I)})})}}}if(!N){M=i(I,C,A);M.done(function(){x.resolve(I)})}})});D.whenPostDisplay.done(function(){B.resolve(I)})});y.fail(function(){B.reject();E.reject();z.reject();x.reject()});return D}function r(x,y,w){var z;if(w.transition){var A=brite.getTransition(w.transition);if(A){A(x,y,w)}else{brite.log.error("Transition ["+w.transition+"] not found. Transitions need to be registered via brite.registerTranstion(..) before call.")}}else{if(w.replace){b(w.replace).bRemove()}if(w.parent){z=b(w.parent);if(w.emptyParent){z.bEmpty()}z.append(x.$el)}}}function o(x,w){var y=b.extend({},x.config,w);y.componentName=x.name;return y}function t(y){var w;var x=y.componentFactory;if(x){if(b.isFunction(x)){w=x()}else{if(b.isPlainObject(x)){w=b.extend({},x)}else{brite.log.error("Invalid ComponentFactory for component ["+y.componentName+"]. Only types Function or Object are supported as componentFactory. Empty component will be created.")}}}else{brite.log.error("No ComponentFactory for component ["+y.componentName+"]")}if(w){w.name=y.name;w.cid=w.id="bview_"+p++}return w}function n(x,y,w){var z=x.create||x.build;if(!z||!b.isFunction(z)){brite.log.error("Invalid 'create' function for component ["+x.name+"].");return}return z.call(x,y,w)}function l(x,y,w){var z=x.init;if(b.isFunction(z)){return z.call(x,y,w)}}function q(w,y,z,x){y.el=w[0];y.$el=y.$element=w;w.data("component",y);w.attr("data-b-view",x.componentName);w.attr("data-brite-cid",y.cid)}function i(x,A,w){var z=b.Deferred();if(x.events){a(x.events,x.$el,x)}if(x.docEvents){a(x.docEvents,b(document),x,d+x.id)}if(x.winEvents){a(x.winEvents,b(window),x,f+x.id)}u(x);if(x.postDisplay){if(w.postDisplayDelay>=0){setTimeout(function(){var B=x.postDisplay(A,w);if(B&&b.isFunction(B.promise)){B.done(function(){z.resolve()})}else{z.resolve()}},w.postDisplayDelay)}else{var y=x.postDisplay(A,w);if(y&&b.isFunction(y.promise)){y.done(function(){z.resolve()})}else{z.resolve()}}}else{z.resolve()}return z.promise()}function a(y,z,w,x){b.each(y,function(B,F){var A=B.split(";");var C=A[0]+((x)?x:"");var E=A[1];var D=c(w,F);if(D){z.on(C,E,function(){var G=b.makeArray(arguments);D.apply(w,G)})}else{throw"BRITE ERROR: '"+w.name+"' component event handler function '"+F+"' not found."}})}function u(x){var w=x.daoEvents;if(x.daoEvents){var y=x.id;b.each(w,function(A,E){var D=c(x,E);if(D){var z=A.split(";");var B=z[0];B=B.charAt(0).toUpperCase()+B.slice(1);var C=z[1];var F=z[2];brite.dao["on"+B](C,F,function(H){var G=b.makeArray(arguments);D.apply(x,G)},y)}else{throw"BRITE ERROR: '"+x.name+"' component daoEvent handler function '"+E+"' not found."}})}}function c(w,y){var x=y;if(!b.isFunction(x)){x=w[y]}return x}function e(B,x){var w=b.Deferred();if(x==="js"){var A=document.createElement("script");A.setAttribute("type","text/javascript");A.setAttribute("src",B)}else{if(x==="css"){var A=document.createElement("link");A.setAttribute("rel","stylesheet");A.setAttribute("type","text/css");A.setAttribute("href",B)}}if(x==="js"){A.onload=function(){w.resolve(B)};A.addEventListener("error",function(){w.reject()},true)}else{if(x==="css"){var z=document.getElementsByTagName("html")[0];var y=document.createElement("img");b(y).css("display","none");y.onerror=function(){z.removeChild(y);w.resolve(B)};z.appendChild(y);y.src=B}}if(typeof A!="undefined"){document.getElementsByTagName("head")[0].appendChild(A)}return w.promise()}})(jQuery);(function(d){var b=".";var c=".";d.fn.bEmpty=function(){return this.each(function(){var f=d(this);var e=f.bFindComponents();d.each(e,function(h,g){a(g)});f.empty()})};d.fn.bRemove=function(){return this.each(function(){var f=d(this);f.bEmpty();if(f.is("[data-b-view]")){var e=f.data("component");a(e);f.remove()}else{f.remove()}})};function a(e){if(e){d(document).off(b+e.id);d(window).off(c+e.id);if(brite.dao){brite.dao.offAny(e.id)}var f=e.destroy;if(d.isFunction(f)){f.call(e)}}}})(jQuery);(function(a){a.fn.bComponent=function(b){var c;if(b){c=a(this).closest("[data-b-view='"+b+"']")}else{c=a(this).closest("[data-b-view]")}return c.data("component")};a.fn.bFindComponents=function(b){var c=[];this.each(function(){var d=a(this);var e;if(b){e=a(this).find("[data-b-view='"+b+"']")}else{e=a(this).find("[data-b-view]")}e.each(function(){var f=a(this);c.push(f.data("component"))})});return c};a.fn.bFindFirstComponent=function(b){var c=[];this.each(function(){var d=a(this);var e;if(b){e=a(this).find("[data-b-view='"+b+"']:first")}else{e=a(this).find("[data-b-view]:first")}e.each(function(){var f=a(this);c.push(f.data("component"))})});return c}})(jQuery);(function(d){var b={failOnFirst:true};brite.whenEach=function(g,m,l){var f=d.Deferred();var k=[];var j=0;l=d.extend({},b,l);h();function h(){if(j-1){return g[f]}else{return null}},sortBy:function(f,g){return f.sort(h);function h(k,j){if(typeof k==="undefined"){return -1}if(typeof j==="undefined"){return 1}var i=k[g];var l=j[g];return((il)?1:0))}},toMap:function(g,k){var j,f=g.length;var n={},m,h;for(j=0;jflushUI");d("body").append(e)}a=a*-1;e.text("").text(a);e.css("width",a+"px")}}})(jQuery);brite.ua={};(function(f){var e={webkit:"-webkit-",chrome:"-webkit-",mozilla:"-moz-",msie:"-ms-",opera:"-o-"};var j={webkit:"Webkit",mozilla:"Moz",chrome:"Webkit",msie:"ms",opera:"o"};var a=null;var d=null;var m=null;var h=null;var i=null;var o=null;var c=null;var k=null;var b={};var g=null;function l(){f.each(e,function(p,q){if(f.browser[p]){g=p;d=e[p];a=j[p]}})}brite.ua.cssPrefix=function(){if(d===null){l()}return d};brite.ua.cssVarPrefix=function(){if(a===null){l()}return a};brite.ua.cssHas=function(){if(m===null){var p="has";m="";f.each(brite.ua,function(r){var q=brite.ua[r];var s;if(r.indexOf(p)===0&&f.isFunction(q)){if(q.call(brite.ua)){s="has-"+r.substring(p.length).toLowerCase();m+=s+" "}}})}return m};brite.ua.cssHasNo=function(){if(h===null){var p="has";h="";f.each(brite.ua,function(r){var q=brite.ua[r];var s;if(r.indexOf(p)===0&&f.isFunction(q)){if(!q.call(brite.ua)){s="has-no-"+r.substring(p.length).toLowerCase();h+=s+" "}}})}return h};brite.ua.supportsEvent=function(p){var q=b[p];if(typeof q==="undefined"){q=n(p);b[p]=q}return q};brite.ua.hasTouch=function(){return this.supportsEvent("touchstart")};brite.ua.hasCanvas=function(){if(c===null){var p=document.createElement("canvas");c=(p.getContext)?true:false;delete p}return c};brite.ua.hasTransition=function(){if(o===null){var q=document.createElement("div");var p=brite.ua.cssPrefix()+"transition";q.innerHTML='
';if(q.firstChild.style[brite.ua.cssVarPrefix()+"Transition"]){o=true}else{o=false}delete q}return o};var n=(function(){var q={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};function p(r){var t=document.createElement(q[r]||"div");r="on"+r;var s=(r in t);if(!s){t.setAttribute(r,"return;");s=typeof t[r]=="function"}t=null;return s}return p})()})(jQuery);(function(d){brite.gtx=function b(f){var g=f;if(f.jquery){f=f.get(0)}if(d.isFunction(f.getContext)){g=f.getContext("2d")}if(!(this instanceof b)){return new b(g)}this.context=this.ctx=g;if(!this.beginPath){a()}};brite.gtx.prototype.referenceScale=function(g,f){this._refWidth=g;this._refHeight=f;computeRatio.call(this);return this};brite.gtx.prototype.fitParent=function(){var f=this.canvas();if(f){var f=this.canvas();var g=d(f).parent();f.width=g.width();f.height=g.height()}return this};brite.gtx.prototype.clear=function(){if(this.canvas()){this.canvas().width=this.canvas().width}return this};brite.gtx.prototype.createLinearGradient=function(h,j,g,i){var k=this.ctx.createLinearGradient(h,j,g,i);var f=new e(k);return f};brite.gtx.prototype.createRadialGradient=function(j,l,i,h,k,g){var m=this.ctx.createRadialGradient(j,l,i,h,k,g);var f=new e(m);return f};brite.gtx.prototype.fillStyle=function(f){return c(this,"fillStyle",f)};brite.gtx.prototype.strokeStyle=function(f){return c(this,"strokeStyle",f)};function c(i,h,f){if(!f){return i.ctx[h]}if(f.ctxGradient){f=f.ctxGradient}i.ctx[h]=f;return i}function e(f){this.ctxGradient=f}e.prototype.addColorStop=function(){this.ctxGradient.addColorStop.apply(this.ctxGradient,arguments);return this};e.prototype.addColorStops=function(){for(var f=0;(f+1)-1;u--){z=t[u];if(h.isFunction(z)){x.func=z}else{if(!x.func){w=z}else{if(x.func&&u===1){x.actions=z}else{if(x.func&&u===0){x.objectTypes=z}}}}}if(typeof w==="undefined"){throw"BRITE DAO BINDING ERROR: any binding with brite.dao.on*** needs to have a namespace after the function. Remember to cleanup the event at component close with brite.dao.off(mynamespace)"}if(!x.actions){x.actions=g+"."+w}else{var v="."+w+" ";x.actions=x.actions.split(",").join(v)+v}if(x.objectTypes){var y=x.objectTypes.split(",");h.each(y,function(A,B){y[A]="."+h.trim(B)});x.objectTypes=y.join(",")}x.namespace=w;return x}function e(y,v,u,x){var t=h.extend(jQuery.Event(x.action),{daoEvent:x});var w=y[u];if(!w){y[u]=w=h("
");v.append(w)}w.trigger(t);t.type=g;w.trigger(t)}var c=h("
");var r={};brite.dao.onDao=function(x,w,v,t){var u=d(arguments);c.on(u.actions,u.objectTypes,u.func);return u.namespace};brite.dao.offDao=function(t){c.off("."+t)};function q(u,w,t){var v={entityType:u,action:w,resultPromise:t};e(r,c,u,v)}var l=h("
");var s={};brite.dao.onResult=function(x,w,v,t){var u=d(arguments);l.on(u.actions,u.objectTypes,u.func);return u.namespace};brite.dao.offResult=function(t){l.off("."+t)};function a(u,w,t){var v={entityType:u,action:w,result:t};e(s,l,u,v)}var i=h("
");var m={};brite.dao.onDataChange=function(x,w,u,t){var v=d(arguments);i.on(v.actions,v.objectTypes,v.func);return v.namespace};brite.dao.offDataChange=function(t){i.off("."+t)};brite.triggerDataChange=function(u,w,t){var v={entityType:u,action:w,result:t};e(m,i,u,v)};brite.dao.offAny=function(t){brite.dao.offResult(t);brite.dao.offDao(t);brite.dao.offDataChange(t)};function j(u){if(u&&h.isFunction(u.promise)){return u}else{var t=h.Deferred();t.resolve(u);return t}}})(jQuery);(function(a){a.fn.bEntity=function(d){var c,b=null;this.each(function(){if(b===null){var f=a(this);var e;if(d){e=f.closest("[data-entity='"+d+"']")}else{e=f.closest("[data-entity]")}if(e.length>0){b={type:e.attr("data-entity"),id:e.attr("data-entity-id"),name:e.attr("data-entity-name"),$el:e}}}});return b}})(jQuery);(function(a){a.fn.bObjRef=function(d){var b=[];var c=null;this.each(function(){var f=a(this);var e;if(d){e=f.closest("[data-obj_type='"+d+"']")}else{e=f.closest("[data-obj_type]")}if(e.length>0){var g={type:e.attr("data-obj_type"),id:e.attr("data-obj_id"),$element:e};b.push(g)}});if(b.length===0){return null}else{if(b.length===1){return b[0]}else{return b}}}})(jQuery);(function(d){var b={idName:"id"};function c(h,f,g){e.call(this,h,f,g)}function e(h,f,g){this._entityType=h;this._opts=d.extend({},b,g);this._idName=this._opts.idName;a.call(this,f)}function a(f){var h=this._dataDic={};var g=this._idName;if(d.isArray(f)){d.each(f,function(i,j){var k=j[g];if(typeof k==="undefined"){k=brite.uuid();j[g]=k}h[k]=j})}}c.prototype.entityType=function(){return this._entityType};c.prototype.get=function(g){var f=this._dataDic[g];if(f){return d.extend({},f)}else{return f}};c.prototype.create=function(g){if(g){var f=brite.uuid();g[this._idName]=f;this._dataDic[f]=g}return d.extend({},g)};c.prototype.remove=function(g){var f=this._dataDic[g];if(f){delete this._dataDic[g]}return g};c.prototype.removeMany=function(f){var g=this;d.each(f,function(h,i){delete g._dataDic[i]});return f};c.prototype.update=function(g){var h=g[this._idName];if(typeof h==="undefined"){throw"BRITE ERROR: InMemoryDaoHandler.update: data does not have an id property. Cannot update."}var f=this._dataDic[h];if(f){delete g[this._idName];d.extend(f,g);return d.extend({},f)}else{return null}};c.prototype.list=function(h){h=h||{};var f=[];d.each(this._dataDic,function(l,j){var i,n=true;if(h.match){var m=h.match;for(i in m){if(j[i]!==m[i]){n=false;break}}}if(n){f.push(j)}});if(h.orderBy){f.sort(function(j,i){var k=true;if(h.orderType&&h.orderType.toLowerCase()=="desc"){k=false}var l=j[h.orderBy]>=i[h.orderBy]?1:-1;if(!k){l=l*-1}return l})}if(h.pageIndex||h.pageIndex==0){if(h.pageSize){newResults=f.slice(h.pageIndex*h.pageSize,(h.pageIndex+1)*h.pageSize)}else{if(h.pageSize!=0){newResults=f.slice(h.pageIndex*h.pageSize)}}}var g=d.map(f,function(i){return d.extend({},i)});return g};brite.InMemoryDaoHandler=c})(jQuery);var brite=brite||{};brite.event=brite.event||{};(function(b){var a=brite.ua.hasTouch();brite.event.fixTouchEvent=function(c){if(a){var d=c.originalEvent;if(d.touches.length>0){c.pageX=d.touches[0].pageX;c.pageY=d.touches[0].pageY}}return c};brite.event.eventPagePosition=function(f){var d,c;if(f.originalEvent&&f.originalEvent.touches){d=f.originalEvent.touches[0].pageX;c=f.originalEvent.touches[0].pageY}else{d=f.pageX;c=f.pageY}return{pageX:d,pageY:c}}})(jQuery);(function(b){b.fn.bTransition=function(c){return this.each(function(){var e=b(this);var d=-1;if(typeof c.onTimeout==="boolean"){d=(c.onTimeout)?0:-1}else{if(typeof c.onTimeout==="number"){d=c.onTimeout}}if(d>-1){setTimeout(function(){a(e,c)},d)}else{a(e,c)}})};function a(d,c){d.css("transition",c.transition);d.css("transform",c.transform)}})(jQuery);(function(f){var o=false;var p={start:"mousedown",move:"mousemove",end:"mouseup"};var i={start:"touchstart",move:"touchmove",end:"touchend"};function b(){if(brite.ua.hasTouch()){return i}else{return p}}f.event.special.btap={setup:function(s,r){var q=b();f(this).on(q.start,function(y){var x=this;var u=f(x);var w=y.target,t=y,A;function z(B){v();if(B.target===w&&!o){brite.event.fixTouchEvent(t);h(x,B,{type:"btap",pageX:t.pageX,pageY:t.pageY})}}function v(){clearTimeout(A);u.off(q.end,z)}u.on(q.end,z);A=setTimeout(function(){if(!o){brite.event.fixTouchEvent(t);h(x,t,{type:"btaphold"})}},750)})}};k(["btaphold"],"btap");var l="bdragstart",m="bdragmove",n="bdragend";var c="bdragenter",a="bdragover",g="bdragleave",d="bdrop";var j=5;f(function(){});f.event.special[m]={setup:function(s,r){var q=b();f(this).on(q.start,function(t){var w=this;var u=f(this);var v=false;var A=t;var z=brite.event.eventPagePosition(A);var C=t.target;var x=f(C);var y=f(document);var B="_"+brite.uuid(7);y.on(q.move+"."+B,function(F){var D=brite.event.eventPagePosition(F);f("body").css("-webkit-user-select","none");if(!v){if(Math.abs(z.pageX-D.pageX)>j||Math.abs(z.pageY-D.pageY)>j){v=true;o=true;x.data("bDragCtx",{});var E=e(F,x,l);h(C,F,{type:l,target:C,bextra:E});F.stopPropagation();F.preventDefault()}}if(v){var E=e(F,x,m);h(C,F,{type:m,target:C,bextra:E});F.stopPropagation();F.preventDefault()}});y.on(q.end+"."+B,function(E){f("body").css("-webkit-user-select","");if(v){var D=e(E,x,n);h(C,E,{type:n,target:C,bextra:D});E.stopPropagation();E.preventDefault()}y.off("."+B);o=false})})}};k([l,n],m);function e(u,r,t){brite.event.fixTouchEvent(u);var v=brite.ua.hasTouch();var q={eventSource:u,pageX:u.pageX,pageY:u.pageY};var w=u.originalEvent;if(v){q.touches=w.touches}var s=r.data("bDragCtx");if(t===l){s.startPageX=q.startPageX=q.pageX;s.startPageY=q.startPageY=q.pageY;s.lastPageX=s.startPageX=q.startPageX;s.lastPageY=s.startPageY=q.startPageY}else{if(t===n){q.pageX=s.lastPageX;q.pageY=s.lastPageY}}q.startPageX=s.startPageX;q.startPageY=s.startPageY;q.deltaX=q.pageX-s.lastPageX;q.deltaY=q.pageY-s.lastPageY;s.lastPageX=q.pageX;s.lastPageY=q.pageY;return q}f.event.special.btransitionend={setup:function(s,r){var q="transitionend";if(this.addEventListener){if(!f.browser.mozilla){q=brite.ua.cssVarPrefix().toLowerCase()+"TransitionEnd"}this.addEventListener(q,function(t){h(this,t,{type:"btransitionend"})})}else{h(this,jQuery.Event("btransitionend"),{type:"btransitionend"})}}};function k(r,q){f.each(r,function(s,t){f.event.special[t]={setup:function(){f(this).bind(q,f.noop)}}})}function h(s,q,r){var t=jQuery.extend(new jQuery.Event(),q,r);f(s).trigger(t)}})(jQuery); \ No newline at end of file diff --git a/src/js/brite.dao.js b/src/js/brite.dao.js index b34f9df..07ae9dd 100644 --- a/src/js/brite.dao.js +++ b/src/js/brite.dao.js @@ -40,8 +40,8 @@ var brite = brite || {}; } var internalMethods = { - idName : true, - isDataChange : true + isDataChange : true, + entityType: true }; var dataChangeMethodRegEx = /remove|delete|create|update/i;