1.0.4 • Published 8 months ago

baeunjs v1.0.4

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

BaeunJS

A lightweight JavaScript library for DOM manipulation, state management, and hash-based SPA routing. BaeunJS provides a simple way to build small to medium-sized Single Page Applications (SPAs).


Features

  • elem: Create DOM elements with attributes, event listeners, and children.
  • stateManager: Manage application state with localStorage and reactive callbacks.
  • hashRouter: Build hash-based routing for SPAs without server-side configurations.

Installation

Install BaeunJS using NPM:

npm install baeunjs

Or include it via a script tag:

<script src="https://unpkg.com/baeunjs"></script>

Usage

1. DOM Manipulation with elem

The elem function simplifies the creation of DOM elements.

import { elem } from "baeunjs";

// Create a div with attributes and children
const myDiv = elem("div", { class: "container", id: "my-div" }, [
  elem("h1", {}, "Hello, World!"),
  elem("button", { onclick: () => alert("Clicked!") }, "Click Me"),
]);

document.body.appendChild(myDiv);

2. State Management with stateManager

The stateManager provides an easy way to manage application state and listen for changes.

import { stateManager } from "baeunjs";

// Set a value
stateManager.set("user", { name: "Alice", age: 25 });

// Get a value
const user = stateManager.get("user");
console.log(user.name); // Alice

// Update a value
stateManager.update("user", (current) => ({
  ...current,
  age: current.age + 1,
}));

// Listen for changes
stateManager.onChange("user", (newUser) => {
  console.log("User updated:", newUser);
});

3. SPA Routing with hashRouter

The hashRouter enables hash-based SPA routing with no server-side configuration.

import { hashRouter, elem } from "baeunjs";

// Define routes
const routes = {
  "/": () => elem("div", {}, "Home Page"),
  "/about": () => elem("div", {}, "About Page"),
  "*": () => elem("div", {}, "404 Page Not Found"),
};

// Initialize the router
hashRouter(routes);

// Add navigation links
document.body.appendChild(
  elem("nav", {}, [
    elem("a", { href: "#/" }, "Home"),
    elem("a", { href: "#/about" }, "About"),
  ])
);

API Reference

elem(tagName, options, children)

Create a DOM element.

ParameterTypeDescription
tagNamestringThe name of the element tag.
optionsRecord<string, any> (optional)Attributes and event listeners.
childrenstring | number | HTMLElement[]Children elements or text content.
ReturnsHTMLElementThe created DOM element.

stateManager

A utility for managing application state.

Methods

MethodDescription
set(key, value)Save a value to localStorage.
get(key)Retrieve a value from localStorage.
update(key, fn)Update a value based on the current state.
remove(key)Remove a specific key from localStorage.
clear()Clear all stored state values.
onChange(key, callback)Listen for changes to a specific key.

hashRouter(routes, appId)

Create a hash-based SPA router.

ParameterTypeDescription
routesRecord<string, () => HTMLElement>A map of routes to components.
appIdstring (optional, default: "app")The ID of the container where components render.

| Returns | () => void | A function to manually trigger the router. |


Example Project

Create a simple SPA using BaeunJS:

import { elem, hashRouter, stateManager } from "baeunjs";

const routes = {
  "/": () => elem("div", {}, "Welcome to Home Page!"),
  "/counter": () => {
    const count = stateManager.get("count") || 0;

    const incrementButton = elem("button", {
      onclick: () => {
        const updatedCount = stateManager.update("count", (c) => (c || 0) + 1);
        countText.textContent = `Count: ${updatedCount}`;
      },
    }, "Increment");

    const countText = elem("p", {}, `Count: ${count}`);

    return elem("div", {}, [countText, incrementButton]);
  },
  "*": () => elem("div", {}, "404 Not Found"),
};

// Initialize the router
hashRouter(routes);

License

MIT License. See LICENSE for more information.

1.0.4

8 months ago

1.0.3

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago