pedf
/
spolky
Archived
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

105 lines
2.8 KiB
JavaScript

5 years ago
/*
* uilang v1.0.1
* http://uilang.com
*/
document.addEventListener("DOMContentLoaded", function() {
"use strict"
var codeElements = document.getElementsByTagName("code")
var i = codeElements.length
var delimiter = "clicking on"
var codeBlock
var codeBlockContent
while (i--) {
var code = codeElements[i]
var content = code.textContent.trim()
if (content.lastIndexOf(delimiter, 0) === 0) {
codeBlock = code
codeBlockContent = content
break
}
}
if (!codeBlock) return
codeBlock.parentNode.removeChild(codeBlock)
function InstructionParsing(instruction) {
var separator = instruction.charAt(0)
var instructionSplit = instruction.split(separator)
this.clickSelector = instructionSplit[1]
this.classBehavior = instructionSplit[2].trim().split(" ")[0]
this.classValue = instructionSplit[3]
this.targetSelector = instructionSplit[5]
if (instructionSplit.length >= 7 && instructionSplit[6] == "no-prevent")
this.prevent = false;
else this.prevent = true
}
function UIElement(clickSelector, classBehavior, classValue, targetSelector) {
this.clickSelector = clickSelector
this.classBehavior = classBehavior.charAt(classBehavior.length-1) == "s"
? classBehavior.substring(0, classBehavior.length-1)
: classBehavior
this.classValue = classValue.charAt(0) == "."
? classValue.substring(1, classValue.length)
: classValue
this.targetSelector = targetSelector
this.createEventListener()
}
UIElement.prototype.createEventListener = function() {
var self = this
var clicked = document.querySelectorAll(self.clickSelector)
var i = clicked.length
if (i < 1) {
throw new Error("There's no element matching your \"" + self.clickSelector + "\" CSS selector.")
}
while (i--) {
clicked.item(i).addEventListener("click", clickCallback)
}
function updateClass(el) {
el.classList[self.classBehavior](self.classValue)
}
function clickCallback(e) {
switch (self.targetSelector) {
case "target" :
case "this" :
case "it" :
case "itself" :
case undefined:
updateClass(e.target)
break
default:
var target = document.querySelectorAll(self.targetSelector)
var i = target.length
while (i--) {
updateClass(target.item(i))
}
}
if (e.target.nodeName.toLowerCase() == "a") {
if (self.prevent)
e.preventDefault()
}
}
}
codeBlockContent.split(delimiter).forEach(function(data) {
if (!data) return
var params = new InstructionParsing(data.trim())
new UIElement(
params.clickSelector,
params.classBehavior,
params.classValue,
params.targetSelector
)
})
})