Dead simple, fast UI-composer in JavaScript
Check out a currently under construction Demo
Installation
npm
npm i pragmajs
Yarn
yarn add pragmajs
How To
Quick HTML Element manipulation
If you want to create an element from an HTMLElement that already exists in the DOM:
<div id='jeff'></div>
import { _e } from 'pragmajs'
let element = _e("#jeff")
If you want to create a new element programatically and append it to the DOM yourself, you can do:
let element = _e("div#jeff.center-div-2.woo", "text").appendTo('body')
will result in this:
<body>
<div id='jeff' class='center-div-2 woo'>text</div>
</body>
_e API (v1)
let element = _e("#jeff")
let selector = "#jeff"
_e("div#vid")
.appendTo(element || selector)
.prependTo(element || selector)
.destroy()
.append(element)
.css(`
position absolute
background red
text-align center
`)
.html(`innerHTML`)
.setId(`id`)
.addClass('class1', 'class2', 'class3', ...)
.listenTo({ 'click': () => {}, 'hover': () => {} ... })
.attr(attrName, value)
.find(selector)
.findAll(selector)
.rect()
.offset()
element.top
element.left
element.width
element.height
element.text
Pragmas
A Pragma
is an object that provides an interface for creating complex interactions with minimal code. A Pragma
can be associated with an HTMLElement
, which can be extremely useful for translating these complex interactions to the front end.
Creating a new Pragma
import { _e, _p } from 'pragmajs'
let pragma1 = _p('name')
let element = _e('#jeff')
let pragma2 = _p()
.as(element)
let pragma3 = _p()
.as(_e("div#gme.hold"))
.html("if he is still in, im still in")
.css(`
background red
font-size 420
font-family 'Comic Sans'
`)
import { tpl } from 'pragmajs'
let pragma4 = p().from(tpl.monitor)
Pragma API:
Create new Pragma
let p = _p('pragma name')
p.define(
function test() {
console.log('yeet')
}
).run(function() {
this.test()
})
p.test()
New:
let p = _p()
p.createEvent("yoing")
p.on("yoing", function(...args) {
console.log(...args)
})
p.triggerEvent("yoing", "yoingArgument1", "yoingArgument2")
p.on("yoing", function(...args) {
console.log('im also gonna get triggered from now on')
})
p.triggerEvent("yoing", "yoingArgument1", "yoingArgument2")
let p = p()
p.createEvent('yoing2')
p.onNext('yoing2', () => {
console.log('im only going to get triggered on the next yoing event')
})
p.triggerEvent("yoing2")
p.triggerEvent("yoing2")
p.triggerEvent("yoing2")
let p = p()
p
.createWire('index')
.setIndex(0)
p.on('indexChange', (newValue, lastValue) => {
console.log(newValue, lastValue)
})
p.onNext('indexChange', () => {
p.index = 1
p.index = 2
p.setIndex(3)
p.setIndexSilently(10)
Legacy:
let p = _p()
p.element = "<HTMLElement>" || _e('#dash')
console.log(p.element, p._e)
p.do(function(plip, plop, plap){
console.log(`Value changed to ${this.value}`, plip, plop, plap)
})
p.value = 420
console.log(p.value)
p.exec(1,2,3)
let another_pragma = _p().do(function(){
console.log('wooooo', this.value)
})
p.wireTo(another_pragma)
p.value += 1
p.key = 'secks'
p.setKey('john lennon')
console.log(p.id)
p
.on('click').do(function() { console.log('ive been clicked')})
.on('hover').do(function() { console.log('ive been hovered')})
.addListeners({'click': function(){}, 'hover': function(){}})
.run(function(){}, function(){} ....)
.pragmatize()
.pragmatizeAt(element || selector)
.contain(another_pragma)
You can also call some of _e
's methods from the pragma directly, will modify its associated html element (if any) accordingly.
pragma.html('wo')
.css('color crystalblue')
.addClass('lucy', 'in', 'the', 'sky', 'center-div-flexbox', 'zindexxxxx')
.setId('paul')
console.log(p.offset, p.text, p.top, p.left, p.width, p.height)