-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdominator.min.js
47 lines (47 loc) · 5.5 KB
/
dominator.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
if("undefined"==typeof Techknow)var Techknow={}
Techknow.Helpers=function(){var t={}
return t.getTopParent=function(t){for(;"function"==typeof t.hasParent&&"function"==typeof t.getParent&&t.hasParent();)t=t.getParent()
return t},t.emptyfn=function(){},t.safeCopy=function(e){if("object"==typeof e){if(e instanceof Array)return e.slice()
var r={}
for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.safeCopy(e[i]))}return e},t.flatMerge=function(){for(var e=t.safeCopy(Array.prototype.slice.call(arguments)),r=t.safeCopy(e.pop())||{};e.length>=1;){var i=t.safeCopy(e.pop())
for(var n in i)r[n]=t.safeCopy(i[n])}return r},t.getWhatBy=function(e,r,i,n){n=n||this
var s=t.getIndexOfWhatBy(e,r,i,n)
return n[e][s]||!1},t.getIndexOfWhatBy=function(t,e,r,i){switch(i=i||this,typeof e){case"number":return e
case"object":var n=i[t].indexOf(e)
return n
case"string":for(var n=0;n<i[t].length;n++)if(i[t][n][e]===r)return n
return null}},t.uid=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()},RegExp.escape=function(t){return t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},t}(),$.fn.parseNode=function(){if("undefined"==typeof this[0].attributes)return console.error("This does not appear to be a DOM element"),null
var t=this[0].attributes,e={tag:this[0].tagName.toLowerCase(),attr:{},listeners:{},children:[],text:null}
for(var r in t)t.hasOwnProperty(r)&&(e.attr[t[r].name]=t[r].value)
return e.text=this.text().trim(),this.children().each(function(){e.children.push($(this).parseNode())}),e},$.fn.getAllStyles=function(){for(var t={},e=this.css("cssText").split(";"),r=0;r<e.length;r++){var i=e[r].split(":")
i[0]&&i[1]&&(t[i[0].trim()]=i[1].trim())}return t},Techknow.Dominator=function(){var Dominator=function(t){t=t||{},this.init(t)}
return Dominator.prototype.init=function(t){t=t||{}
var e="undefined"==typeof arguments[1]?!0:arguments[1]
if(console.log("this.defaultConfig.structure:",this.defaultConfig.structure),this.structure=Techknow.Helpers.flatMerge(t.structure||t.children,this.defaultConfig.structure||[]),this.styles=Techknow.Helpers.flatMerge(t.styles,this.defaultConfig.styles||{}),this.insert=Techknow.Helpers.flatMerge(t.insert,this.defaultConfig.insert||{}),this.attr=Techknow.Helpers.flatMerge(t.attr,this.defaultConfig.attr||{}),this.onOpen=this.onOpen||Techknow.Helpers.emptyfn,this.onClose=this.onClose||Techknow.Helpers.emptyfn,this.uid=e?Techknow.Helpers.uid():0,this.my=t.my||this.defaultConfig.my,this.at=t.at||this.defaultConfig.at,this.moveLeft=t.moveLeft||this.defaultConfig.moveLeft,this.moveTop=t.moveTop||this.defaultConfig.moveTop,this.target=t.target||t.refid||this.defaultConfig.target,e)for(var r in this.structure)this.structure[r].attr=Techknow.Helpers.flatMerge({"data-techknow-id":this.uid},this.structure[r].attr||{})},Dominator.prototype.buildNode=function(multi,self){for(var self=self||this,selfClosers=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],isSelfClosing=!1,structure=this.structure||this.children||[],elems=[],i=0;i<structure.length;i++){for(var j=0;j<selfClosers.length;j++)isSelfClosing=structure[i].tag==selfClosers[j]?!0:isSelfClosing
if(isSelfClosing)var $elem=jQuery("<"+structure[i].tag+" />")
else var $elem=jQuery("<"+structure[i].tag+"></"+structure[i].tag+">")
if($elem.css(structure[i].styles||{}).attr(structure[i].attr||{}),"string"==typeof structure[i].text&&structure[i].text.trim().length>0&&$elem.text(structure[i].text),"object"==typeof structure[i].listeners)for(var j in structure[i].listeners){var listener=structure[i].listeners[j],data="string"!=typeof listener.data&&listener.data?listener.data:eval(listener.data||"self")
$elem.listen((listener.event||"click")+" "+this.uid+" ",listener.target||null,data||self,listener.action||function(){})}if(structure[i].children instanceof Array)for(var subNode=Dominator.prototype.buildNode.call({structure:structure[i].children},!0,self),j=0;j<=subNode.length;j++)$(subNode[j]).appendTo($elem)
elems.push($elem)}return 1==elems.length?elems[0]:elems},Dominator.prototype.position=function(t){if(this.my&&this.at){t=t||{},this.my=t.my||this.my,this.at=t.at||this.at,this.moveLeft=t.moveLeft||this.moveLeft,this.moveTop=t.moveTop||this.moveTop,this.target=t.target||this.target
var e=this.my,r=this.at,i=this.moveLeft,n=this.moveTop,s=this.target,o=this.getDomInstance()
o.style.left=0,o.style.top=0
var a=o.offsetLeft,f=o.offsetTop,l=jQuery(s)[0],u=l.offsetLeft,h=l.offsetTop
o.style.left=u+l.clientWidth*(r[0]/100)-o.clientWidth*(e[0]/100)-a+i
o.hidden
o.style.top=h+l.clientHeight*(r[1]/100)-o.clientHeight*(e[1]/100)-f+n}},Dominator.prototype.render=function(){this.destroy()
var t=this.buildNode()
$.fn.emptyfn=Techknow.Helpers.emptyfn
var e="emptyfn",r=""
for(var i in this.insert){switch(i){case"into":e="appendTo"
break
case"after":e="insertAfter"
break
case"before":e="insertBefore"
break
case"atTheStartOf":e="prependTo"
break
case"atTheEndOf":e="appendTo"}r=this.insert[i]
break}for(var i=0;i<t.length;i++)jQuery.fn[e].call($(t[i]),r)
this.onOpen()
var n=this.getDomInstance()
return"undefined"!=typeof n&&(n.hidden=!1),this},Dominator.prototype.destroy=function(){jQuery("html").findByListener(this.uid).neglect(),jQuery(this.getDomInstance()).remove()},Dominator.prototype.getSelector=function(){return'[data-techknow-id="'+this.uid+'"]'},Dominator.prototype.getDomInstance=function(){return jQuery(this.getSelector())[0]},Dominator.prototype.defaultConfig={insert:{into:"body"},structure:[{tag:"div",attr:{"class":"dominator"}}],styles:{},attr:{},my:null,at:null},Dominator}()