BasicSign.js
2.2 KB
(function(){pv.Mark.prototype.getSign=function(){return this.sign||createBasic(this)};pv.Mark.prototype.getScene=function(){return this.getSign().scene};function createBasic(pvMark){var as=getAncestorSign(pvMark)||def.assert("There must exist an ancestor sign");var bs=new pvc.visual.BasicSign(as.panel,pvMark);var i;var s=pvMark.scene;if(s&&(i=pvMark.index)!=null&&i>=0){bs._buildInstance(pvMark,s[i],true)}return bs}function getAncestorSign(pvMark){var sign;do{pvMark=pvMark.parent}while(pvMark&&!(sign=pvMark.sign)&&(!pvMark.proto||!(sign=pvMark.proto.sign)));return sign}def.type('pvc.visual.BasicSign').init(function(panel,pvMark){this.chart=panel.chart;this.panel=panel;this.pvMark=pvMark;!pvMark.sign||def.assert("Mark already has an attached Sign.");pvMark.sign=this;pvMark.__buildInstance=pvMark.buildInstance;pvMark.buildInstance=this._dispatchBuildInstance}).add({localProperty:function(name,type){this.pvMark.localProperty(name,type);return this},lock:function(name,value){return this.lockMark(name,this._bindWhenFun(value))},optional:function(name,value,tag){return this.optionalMark(name,this._bindWhenFun(value),tag)},lockMark:function(name,value){this.pvMark.lock(name,value);return this},optionalMark:function(name,value,tag){this.pvMark[name](value,tag);return this},delegate:function(dv,tag){return this.pvMark.delegate(dv,tag)},delegateExtension:function(dv){return this.pvMark.delegate(dv,pvc.extensionTag)},hasDelegate:function(tag){return this.pvMark.hasDelegate(tag)},_bindWhenFun:function(value){if(typeof value==='function'){return function(){var sign=this.getSign();return value.apply(sign,arguments)}}return value},_lockDynamic:function(name,method){var me=this;return this.lockMark(name,function(){var sign=this.getSign();var m=sign[method]||me[method]||def.assert("No method with name '"+method+"' is defined");return m.apply(sign,arguments)})},_dispatchBuildInstance:function(instance){this.sign._buildInstance(this,instance)},_buildInstance:function(mark,instance,lateCall){var scene=instance.data;var index=scene?scene.childIndex():0;this.pvInstance=instance;this.scene=scene;this.index=index<0?0:index;scene_renderId.call(scene,mark.renderId());this.state={};if(!lateCall){mark.__buildInstance.call(mark,instance)}}})}());