From 04b853864b3a9e18697080a23c023dd42d14f809 Mon Sep 17 00:00:00 2001 From: Dan Chadwick Date: Mon, 8 Apr 2024 10:14:20 -0700 Subject: [PATCH] init --- lib/index.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 19 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 lib/index.js create mode 100644 package.json diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..258c474 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,50 @@ +let headers = new Headers({ + "user-agent": "DCJS Fetcher", +}); + +const dcTriggerMap = { + load: "load", + hover: "mouseover", +} + +async function renderContentToTarget(content, target) { + let elementToReplace = document.querySelector("#" + target); + elementToReplace.innerHTML = content; +} + +async function handleDcjs() { + // need to add a way to show that this is LOADING :-). + // Look for custom data attributes in DOM. + let elementsUsingGet = document.querySelectorAll('[dc-get]'); + if (elementsUsingGet.length > 0) { + const reqUrl = location.protocol + '//' + location.host; + for (let i = 0; i < elementsUsingGet.length; i++) { + let dcTrigger = "click"; + let dcjsElem = elementsUsingGet[i]; + + if (dcjsElem.hasAttribute('dc-trigger')) { + dcTrigger = elementsUsingGet[i].getAttribute('dc-trigger'); + dcTrigger = dcTriggerMap[dcTrigger]; + } + + // Dom is already loaded, so just insert content. + if (dcTrigger == "load") { + let getPath = dcjsElem.getAttribute('dc-get'); + let targetElement = dcjsElem.getAttribute('dc-target'); + + fetch(reqUrl + getPath) + .then(res => res.text()) + .then(async swap => await renderContentToTarget(swap, targetElement)) + } + else { + elementsUsingGet[i].addEventListener(dcTrigger, (e) => { + let getPath = e.target.getAttribute('dc-get'); + let targetElement = e.target.getAttribute('dc-target'); + fetch(reqUrl + getPath) + .then(res => res.text()) + .then(async swap => await renderContentToTarget(swap, targetElement)) + }) + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ae3e387 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "dcjs", + "version": "1.0.0", + "description": "HTMX type library", + "main": "./lib/index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/dan612/dcjs.git" + }, + "author": "Dan Chadwick", + "license": "ISC", + "bugs": { + "url": "https://github.com/dan612/dcjs/issues" + }, + "homepage": "https://github.com/dan612/dcjs#readme" +}