UNPKG

12.2 kBPlain TextView Raw
1{"code":"function defineName$__(cls,name){\n\tObject.defineProperty(cls,\"name\",{value:name,configurable:true});\n};;\nfunction inheritClass$__(cls){\n\tObject.getPrototypeOf(cls.prototype).constructor?.inherited?.(cls);\n};;\nfunction iter$__(a){ let v; return a ? ((v=a.toIterable) ? v.call(a) : a) : a; };;\nfunction extend$__(target,ext){\n\t// @ts-ignore\n\tconst descriptors = Object.getOwnPropertyDescriptors(ext);\n\tdelete descriptors.constructor;\n\tif(target.extend__ instanceof Function){\n\t\ttarget.extend__(descriptors,ext);\n\t} else {\n\t\t// @ts-ignore\n\t\tObject.defineProperties(target,descriptors);\n\t}\n\treturn target;\n};\nconst $context$ = Symbol.for('#context'), $extendType$ = Symbol.for('#extendType');\n\n/*body*/\n// imba$imbaPath=global\n\nimport {Event,CustomEvent,Element,Document} from '../dom/core';\nimport * as helpers from './helpers';\n\nexport function use_events_intersect(){\n\t\n\tglobalThis.imba.uses_events_intersect = true;\n\treturn true;\n};\n\nconst observers = new (globalThis.WeakMap || Map);\nexport const IntersectionEventDefaults = {threshold: [0]};\nconst viewport = {};\nconst defaults = IntersectionEventDefaults;\n\nEvent.intersect$handle = function (){\n\t\n\tlet obs = this.event.detail.observer;\n\treturn this.modifiers._observer == obs;\n};\n\nclass IntersectionEvent extends CustomEvent {\n\t\n\t\n\tαin(){\n\t\t\n\t\treturn this.delta >= 0 && this.entry.isIntersecting;\n\t}\n\t\n\tαout(){\n\t\t\n\t\treturn this.delta < 0;// and entry.isIntersecting\n\t}\n\t\n\tαcss(name = 'ratio'){\n\t\t\n\t\tthis.target.style.setProperty(\"--ratio\",this.ratio);\n\t\treturn true;\n\t}\n\t\n\tαflag(name,sel){\n\t\t\n\t\tlet {state: state,step: step} = this[$context$];\n\t\tlet el = helpers.toElement(sel || '',this.target);\n\t\t\n\t\tif (this.isIntersecting && !(state[step])) {\n\t\t\t\n\t\t\tel.flags.incr(name);\n\t\t\tstate[step] = true;\n\t\t} else if (state[step] && !(this.isIntersecting)) {\n\t\t\t\n\t\t\tel.flags.decr(name);\n\t\t\tstate[step] = false;\n\t\t};\n\t\treturn true;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'IntersectionEvent');inheritClass$__(this);}\n};\n\nfunction callback(name,key){\n\t\n\treturn function(entries,observer) {\n\t\t\n\t\tlet map = observer.prevRatios ||= new WeakMap;\n\t\t\n\t\tfor (let $1 = 0, $2 = iter$__(entries), $3 = $2.length; $1 < $3; $1++) {\n\t\t\tlet entry = $2[$1];\n\t\t\tlet prev = map.get(entry.target) || 0;\n\t\t\tlet ratio = entry.intersectionRatio;\n\t\t\tlet detail = {entry: entry,ratio: ratio,from: prev,delta: (ratio - prev),observer: observer};\n\t\t\tlet e = new CustomEvent(name,{bubbles: false,detail: detail});\n\t\t\te[$extendType$](IntersectionEvent);\n\t\t\te.entry = entry;\n\t\t\te.isIntersecting = entry.isIntersecting;\n\t\t\te.delta = detail.delta;\n\t\t\te.ratio = detail.ratio;\n\t\t\t\n\t\t\tmap.set(entry.target,ratio);\n\t\t\tentry.target.dispatchEvent(e);\n\t\t};\n\t\treturn;\n\t};\n};\n\nfunction getIntersectionObserver(opts = IntersectionEventDefaults){\n\t\n\tlet key = opts.threshold.join('-') + opts.rootMargin;\n\tif (!(opts.root) && IntersectionEventDefaults.root) {\n\t\t\n\t\topts.root ||= IntersectionEventDefaults.root;\n\t};\n\tlet target = opts.root || viewport;\n\tlet map = observers.get(target);\n\tmap || observers.set(target,map = {});\n\treturn map[key] ||= new IntersectionObserver(callback('intersect',key),opts);\n};\n\nclass ΩElement {\n\t\n\ton$intersect(mods,context,handler,o){\n\t\t\n\t\tif (!(false)) { return };\n\t\tlet obs;\n\t\tif (mods.options) {\n\t\t\t\n\t\t\tlet th = [];\n\t\t\tlet opts = {threshold: th};\n\t\t\t\n\t\t\tfor (let $4 = 0, $5 = iter$__(mods.options), $6 = $5.length; $4 < $6; $4++) {\n\t\t\t\tlet arg = $5[$4];\n\t\t\t\tif ((arg instanceof Element) || (arg instanceof Document)) {\n\t\t\t\t\t\n\t\t\t\t\topts.root = arg;\n\t\t\t\t} else if (typeof arg == 'number') {\n\t\t\t\t\t\n\t\t\t\t\tth.push(arg);\n\t\t\t\t} else if (typeof arg == 'string') {\n\t\t\t\t\t\n\t\t\t\t\topts.rootMargin = arg;\n\t\t\t\t} else if (typeof arg == 'object') {\n\t\t\t\t\t\n\t\t\t\t\tObject.assign(opts,arg);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (th.length == 1) {\n\t\t\t\t\n\t\t\t\tlet num = th[0];\n\t\t\t\tif (num > 1) {\n\t\t\t\t\t\n\t\t\t\t\tth[0] = 0;\n\t\t\t\t\twhile (th.length < num){\n\t\t\t\t\t\t\n\t\t\t\t\t\tth.push(th.length / (num - 1));\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (th.length == 0) { th.push(0) };\n\t\t\tobs = getIntersectionObserver(opts);\n\t\t} else {\n\t\t\t\n\t\t\tobs = getIntersectionObserver();\n\t\t};\n\t\t\n\t\tmods._observer = obs;\n\t\tobs.observe(this);\n\t\tthis.addEventListener('intersect',handler,o);\n\t\treturn handler;\n\t}\n\tstatic {\n\t\tdefineName$__(this,'Element');}\n};\nextend$__(Element.prototype,ΩElement.prototype);\n;\n","map":{"version":3,"file":"intersect.js","sourceRoot":"","sources":["/Users/abdellah/workspace/scrimba/imba/packages/imba/src/imba/events/intersect.imba"],"sourcesContent":["# imba$imbaPath=global\n\nimport {Event,CustomEvent,Element,Document} from '../dom/core'\nimport * as helpers from './helpers'\n\nexport def use_events_intersect\n\tglobal.imba.uses_events_intersect = yes\n\tyes\n\nconst observers = new (global.WeakMap || Map)\nexport const IntersectionEventDefaults = {threshold: [0]}\nconst viewport = {}\nconst defaults = IntersectionEventDefaults\n\ndef Event.intersect$handle\n\tlet obs = event.detail.observer\n\treturn modifiers._observer == obs\n\nclass IntersectionEvent < CustomEvent\n\n\tdef @in\n\t\treturn delta >= 0 and entry.isIntersecting\n\n\tdef @out\n\t\treturn delta < 0 # and entry.isIntersecting\n\n\tdef @css name = 'ratio'\n\t\ttarget.style.setProperty(\"--ratio\",ratio)\n\t\treturn yes\n\n\tdef @flag name, sel\n\t\tlet {state,step} = #context\n\t\tlet el = helpers.toElement(sel or '',target)\n\n\t\tif self.isIntersecting and !state[step]\n\t\t\tel.flags.incr(name)\n\t\t\tstate[step] = yes\n\t\telif state[step] and !self.isIntersecting\n\t\t\tel.flags.decr(name)\n\t\t\tstate[step] = no\n\t\treturn yes\n\ndef callback name, key\n\treturn do(entries,observer)\n\t\tlet map = observer.prevRatios ||= new WeakMap\n\n\t\tfor entry in entries\n\t\t\tlet prev = map.get(entry.target) or 0\n\t\t\tlet ratio = entry.intersectionRatio\n\t\t\tlet detail = {entry: entry, ratio: ratio, from: prev, delta: (ratio - prev), observer: observer }\n\t\t\tlet e = new CustomEvent(name, bubbles: false, detail: detail)\n\t\t\te.#extendType(IntersectionEvent)\n\t\t\te.entry = entry\n\t\t\te.isIntersecting = entry.isIntersecting\n\t\t\te.delta = detail.delta\n\t\t\te.ratio = detail.ratio\n\n\t\t\tmap.set(entry.target,ratio)\n\t\t\tentry.target.dispatchEvent(e)\n\t\treturn\n\ndef getIntersectionObserver opts = IntersectionEventDefaults\n\tlet key = opts.threshold.join('-') + opts.rootMargin\n\tif !opts.root and IntersectionEventDefaults.root\n\t\topts.root ||= IntersectionEventDefaults.root\n\tlet target = opts.root or viewport\n\tlet map = observers.get(target)\n\tmap || observers.set(target,map = {})\n\tmap[key] ||= new IntersectionObserver(callback('intersect',key),opts)\n\nextend class Element\n\tdef on$intersect mods,context,handler,o\n\t\treturn unless $web$\n\t\tlet obs\n\t\tif mods.options\n\t\t\tlet th = []\n\t\t\tlet opts = {threshold:th}\n\n\t\t\tfor arg in mods.options\n\t\t\t\tif arg isa Element or arg isa Document\n\t\t\t\t\topts.root = arg\n\t\t\t\telif typeof arg == 'number'\n\t\t\t\t\tth.push(arg)\n\t\t\t\telif typeof arg == 'string'\n\t\t\t\t\topts.rootMargin = arg\n\t\t\t\telif typeof arg == 'object'\n\t\t\t\t\tObject.assign(opts,arg)\n\n\t\t\tif th.length == 1\n\t\t\t\tlet num = th[0]\n\t\t\t\tif num > 1\n\t\t\t\t\tth[0] = 0\n\t\t\t\t\twhile th.length < num\n\t\t\t\t\t\tth.push(th.length / (num - 1))\n\n\t\t\tth.push(0) if th.length == 0\n\t\t\tobs = getIntersectionObserver(opts)\n\t\telse\n\t\t\tobs = getIntersectionObserver()\n\n\t\tmods._observer = obs\n\t\tobs.observe(this)\n\t\tself.addEventListener('intersect',handler,o)\n\t\treturn handler"],"names":[],"mappings":"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"},"dependencies":[],"meta":{"vite":{"lang":"js"}}}
\No newline at end of file