-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfluid-dom.commonjs.js
3 lines (2 loc) · 10.1 KB
/
fluid-dom.commonjs.js
1
2
// Fluid-DOM v 1.2.0
"use strict";function providesAll(t,e){var s="";for(var r of t){null!=e[r]||(s+=`Value for ${r} was not provided.\n`)}return!s||(console.error(`Expected ${t.length} parameters:\n${s}`),!1)}function providesOne(t,e){var s=t.filter(t=>void 0===e[t]).length===t.length-1;if(s){var r=t.reduce((t,e)=>`${t}, ${e}`);console.error(`One of these parameters were expected ${r} but none had a hasValue!`)}return s}function logWarning(t){console.warn("FluidDOM: "+t)}Object.defineProperty(exports,"__esModule",{value:!0});class Attributes{constructor(t){this.domElement=t}each(t){for(var e of this.domElement.attributes)t(e.name,e.value);return this}attributeNames(){var t=new Array;for(var e of this.domElement.attributes)t.push(e);return t}add(t,e){return this.set(t,e)}set(t,e){return this.domElement.setAttribute(t,e),this}with(t,e){return e(this.get(t)),this}get(t){return this.domElement.getAttribute(t)}has(t){return null!=this.domElement.getAttribute(t)}remove(t){return this.domElement.removeAttribute(t),this}}class Classes{constructor(t,e){this.element=e,this.domElement=t}each(t){for(var e of this.domElement.classList)t(e);return this}has(t){return this.domElement.classList.contains(t)}whenHas(t,e){return this.has(t)&&e(this.element),this}add(t){return t&&t.length>0?this.domElement.classList.add(t):console.error(`Class name given was "${t}" - it must not be empty!`),this}remove(t){return this.domElement.classList.remove(t),this}set(t){return this.has(t)||this.add(t),this}}var LocatedBy,Tag;!function(t){t.FailedToLocate="Failed to locate",t.Id="id",t.Selector="selector",t.Class="class",t.TagName="tagName",t.ConstructedWithElement="from given element",t.ConstructedWithChildren="from given list of children"}(LocatedBy||(LocatedBy={})),function(t){t.Button="BUTTON",t.Div="DIV",t.Input="INPUT",t.Paragraph="P"}(Tag||(Tag={}));class ElementList{convertToListOfElements(t){var e=[];if(t)for(var s of t){var r=new Element({domElement:s});e.push(r)}return e}constructor(t){var e=t.selector,s=t.tagName,r=t.children,i=t.class;this.elementListLocation=t,this.elementList=Array(),this.locatedBy=LocatedBy.FailedToLocate,null!=e?this.selectList(e):s?this.tagList(s):r?this.childList(r):i?this.classList(i):(providesOne(["selector","class","tagName"],t),this.elementList=[]),this.isSingle=!1,this.type="ElementList"}each(t){for(var e=0;e<this.elementList.length;e++)t(this.getElementAt(e));return this}getElementAt(t){return this.elementList[t]}map(t){return this.elementList.map(t)}filter(t){return this.elementList.filter(t)}reduce(t){return this.elementList.reduce(t)}length(){return this.elementList.length}selectList(t){this.elementList=this.convertToListOfElements(document.querySelectorAll(t)),this.locatedBy=LocatedBy.Selector}tagList(t){this.elementList=this.convertToListOfElements(document.getElementsByTagName(t)),this.locatedBy=LocatedBy.TagName}childList(t){this.elementList=this.convertToListOfElements(t),this.locatedBy=LocatedBy.ConstructedWithChildren}classList(t){this.elementList=this.convertToListOfElements(document.getElementsByClassName(t)),this.locatedBy=LocatedBy.Class}}class Element{constructor(t){this.type="Element",this.isSingle=!0;var e=t.id,s=t.selector,r=t.domElement;this.locatedBy=LocatedBy.FailedToLocate,this.isValid=!1,r?this.elementPassed(t):e?this.idPassed(e):s?this.selectorPassed(s):(providesOne(["id","selector"],t),this.nullElement(t),this.isValid=!1),this.isValid||logWarning(`Element to be matched by ${this.locatedBy} was not valid`),this.parent=this.isValid?this.domElement.parentElement:void 0,this.type="Element",this.elementLocation=t,this.isSingle=!0}elementPassed(t){this.domElement=t.domElement,this.locatedBy=LocatedBy.ConstructedWithElement,this.isValid=!!this.domElement}idPassed(t){this.locatedBy=LocatedBy.Id,this.domElement=document.getElementById(t),this.isValid=!!this.domElement}selectorPassed(t){this.domElement=document.querySelector(t),this.locatedBy=LocatedBy.Selector,this.isValid=!!this.domElement}nullElement(t){this.domElement={tagName:`NO MATCH by ${t}`,parentElement:void 0,innerHTML:void 0,innerText:void 0},this.locatedBy=LocatedBy.FailedToLocate}children(){return new ElementList({children:this.domElement.children})}eachChild(t){for(var e of this.domElement.children){t(new Element({domElement:e}))}return this}expect(t){return this.domElement.tagName!==t&&console.error(`Expected ${t} but Actual ${this.domElement.tagName}`),this}getId(){return this.attributes().get("id")}getParent(){return new Element({domElement:this.domElement.parentElement})}hasId(){return this.attributes().has("id")}exists(){return this.isValid}findAll(t){return new ElementList(t)}selectFirst(t){if(this.domElement.querySelector(t))return new Element({selector:t});var e=`${this.selectorPath()}>${t}`;return new Element({selector:e})}selectorPath(){for(var t=this.domElement,e=t=>!!t,s=[];e(t);){var r=t.getAttribute("id"),i=t.getAttribute("class");r?(s.push("#"+r),t=null):(i?s.push("."+i):s.push(t.tagName),t=t.parentElement)}return s.reverse(),s.reduce((t,e)=>`${t}>${e}`)}tagName(){return this.isValid?this.domElement.tagName:"UNKNOWN"}text(t){return t?(this.domElement.innerText=t,this):this.domElement.innerText}html(t){return t?(this.domElement.innerHTML=t,this):this.domElement.innerHTML}append(t){var e=`${this.html()}${t}`;return this.html(e),this}prepend(t){var e=`${t}${this.html()}`;return this.html(e),this}remove(){this.domElement.remove()}attributes(){return new Attributes(this.domElement)}classes(){return new Classes(this.domElement,this)}on(t){if(providesAll(["event","handler"],t)){var e=t.event,s=t.handler,r=t.keepDefault;this.domElement.addEventListener(e,function(t){r||t.preventDefault(),s(t)})}}value(){if(null!=this.domElement.value)return this.domElement.value}}!function(t){t.CONNECT="CONNECT",t.DELETE="DELETE",t.GET="GET",t.HEAD="HEAD",t.OPTIONS="OPTIONS",t.PATCH="PATCH",t.POST="POST",t.PUT="PUT",t.TRACE="TRACE"}(exports.HttpMethod||(exports.HttpMethod={})),function(t){t.TEXT="text",t.ARRAYBUFFER="arraybuffer",t.BLOB="blob",t.DOCUMENT="document",t.JSON="json"}(exports.HttpResponseType||(exports.HttpResponseType={})),function(t){t.HTTP="http",t.HTTPS="https",t.FILE="file"}(exports.HttpProtocol||(exports.HttpProtocol={}));class HttpPromise{constructor(t){this.httpObject=t,this.promise=void 0}createPromise(t){this.result=void 0,this.promise=new Promise((e,s)=>{let r=this;t(function(t){r.result=t,e(t)},s)})}isResolved(){return null!=this.result}http(){return this.httpObject}afterResult(t){return this.hasPromise(this.promise)&&this.promise.then(e=>{t(this.httpObject,e)}),this}then(t){return this.hasPromise(this.promise)?this.next(this.promise.then(t)):this}catch(t){return this.hasPromise(this.promise)?this.next(this.promise.catch(t)):this}hasPromise(t){return this.promise instanceof Promise}next(t){let e=new HttpPromise(this.httpObject);return e.promise=t,e}}class Http{constructor(){this.protocol=exports.HttpProtocol.HTTP,this.port=void 0,this.hostname="",this.requestHeaders=[],this.path="",this.method=exports.HttpMethod.GET,this.body=void 0,this.uploadData=void 0,this.responseType=exports.HttpResponseType.TEXT,this.timeoutMS=1e3}host(t,e,s){return this.hostname=e,this.port=s,this.protocol=t,this}header(t,e){return this.requestHeaders.push({name:t,value:e}),this}expectedData(t){return this.responseType=t,this}timeoutAt(t){return this.timeoutMS=t,this}context(t){let e=new Http;return e.protocol=this.protocol,e.port=this.port,e.hostname=this.hostname,e.requestHeaders=(new Array).concat(this.requestHeaders),e.path=this.path,e.method=this.method,e.body=this.body,e.uploadData=this.uploadData,e.responseType=this.responseType,t(e),this}call(t,e,s){this.method=t,this.path=e,this.body="string"==typeof s?s:JSON.stringify(s),this.syncPortAndProtocol();let r=this.port?`:${this.port}`:"",i=`${this.protocol}://${this.hostname}${r}${e}`,n=this.createRequestTo(i),o=this.setHandlers(n);return this.addAnyHeaders(n),n.send(this.body),o}syncPortAndProtocol(){(this.protocol==exports.HttpProtocol.HTTP&&80==this.port||this.protocol==exports.HttpProtocol.HTTPS&&443==this.port||this.protocol==exports.HttpProtocol.FILE)&&(this.port=void 0)}createRequestTo(t){let e=new XMLHttpRequest;return e.timeout=this.timeoutMS,e.open(this.method,t),e}setErrorHandlers(t,e){t.onabort=(()=>{e("Request Aborted")}),t.ontimeout=(()=>{e("Timed out")}),t.onerror=(()=>{e("Error occurred.")})}createResponseObject(t){let e=t.getAllResponseHeaders().split("\r\n").map(t=>{let e=t.split(":");return e&&2==e.length?{name:e[0],value:e[1]}:void 0}).filter(t=>null!=t),s={};for(var r in e){let t=e[r];t&&(s[t.name]=t.value)}return{status:t.status,type:t.responseType,body:t.response,headers:s}}setOnCompleteHandler(t,e,s){t.onreadystatechange=(()=>{4==t.readyState&&(200==t.status?e(this.createResponseObject(t)):s(`Returned HTTP ${t.status}`))})}addAnyHeaders(t){if(this.requestHeaders.length>0)for(var e of this.requestHeaders)t.setRequestHeader(e.name,e.value)}setHandlers(t){let e=new HttpPromise(this);return e.createPromise((e,s)=>{this.setErrorHandlers(t,s),this.setOnCompleteHandler(t,e,s)}),e}}const EVENT_LIST=["abort","afterscriptexecute","animationcancel","animationend","animationiteration","auxclick","beforescriptexecute","blur","change","click","close","contextmenu","dblclick","error","focus","fullscreenchange","fullscreenerror","gotpointercapture","input","keydown","keypress","keyup","load","loadend","loadstart","lostpointercapture","mousedown","mousemove","mouseout","mouseover","mouseup","offline","online","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup","reset","resize","scroll","select","selectionchange","selectionchange","selectstart","submit","touchcancel","touchmove","touchstart","transitioncancel","transitionend","visibilitychange","wheel"];function createEventHash(){var t={};for(var e of EVENT_LIST){t[e.toUpperCase()]=e}return t}class DOM{constructor(){this.events=createEventHash()}findElement(t){return new Element(t)}findAll(t){return new ElementList(t)}buttonOn(t){if(providesAll(["id","event","handler"],t)){var e=t.id;this.findElement({id:e}).expect(Tag.Button).on(t)}}}const Events={};for(var event of EVENT_LIST)Events[event.toUpperCase()]=event;exports.DOM=DOM,exports.Events=Events,exports.Http=Http;