@domql/qsql 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # qsql
2
+ DOM manipulation using document queries. Uses [DOMQL](https://github.com/domql/domql) API.
3
+
4
+ ### Installation
5
+ ```
6
+ yarn add classql
7
+ ```
8
+
9
+ ### Examples
10
+
11
+ Initialization:
12
+
13
+ ```javascript
14
+ import DOM from 'qsql'
15
+
16
+ DOM.query({
17
+ logo: { query: '.logo' }
18
+ })
19
+ ```
20
+
21
+ Attributes:
22
+ ```javascript
23
+ DOM.query({
24
+ modal: {
25
+ query: '.modal',
26
+ style: { display: 'none' }
27
+ }
28
+ })
29
+ ```
30
+
31
+ Events and update:
32
+ ```javascript
33
+ DOM.query({
34
+ CTA: {
35
+ query: '.button',
36
+ on: {
37
+ click: (event, element, node) => {
38
+ DOM.find('modal').update({
39
+ style: { display: 'block' }
40
+ })
41
+ }
42
+ }
43
+ }
44
+ })
45
+ ```
package/package.json ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "@domql/qsql",
3
+ "version": "0.1.0",
4
+ "main": "src/index.js",
5
+ "author": "symbo.ls",
6
+ "license": "MIT",
7
+ "private": false,
8
+ "dependencies": {
9
+ "domql": "latest"
10
+ }
11
+ }
package/src/apply.js ADDED
@@ -0,0 +1,22 @@
1
+ 'use strict'
2
+
3
+ import { init } from '@rackai/domql/src/event/on'
4
+ import { exec, isObject } from '@rackai/domql/src/utils/object'
5
+
6
+ import params from './params'
7
+ import on from './on'
8
+
9
+ export default element => {
10
+ element.nodes.forEach(node => {
11
+ if (isObject(element.on)) on(element, node)
12
+
13
+ for (let key in element) {
14
+ var elemParam = element[key]
15
+ var param = params[key]
16
+ if (param) param(elemParam, element, node)
17
+ }
18
+
19
+ if (element.on && typeof element.on.init === 'function')
20
+ init(element.on.init, element, node)
21
+ })
22
+ }
package/src/define.js ADDED
@@ -0,0 +1,12 @@
1
+ 'use strict'
2
+
3
+ import params from './params'
4
+
5
+ export default (newParams, options = {}) => {
6
+ var { overwrite } = options
7
+ for (const param in newParams) {
8
+ if (params[param] && !overwrite) {
9
+ console.log(`Can't overwrite to default params. Use { overwrite: true } to force update`)
10
+ } else params[param] = newParams[param]
11
+ }
12
+ }
package/src/find.js ADDED
@@ -0,0 +1,5 @@
1
+ 'use strict'
2
+
3
+ import registry from './registry'
4
+
5
+ export default query => registry[query] || console.warn(`Can't find element "${query}"`)
package/src/index.js ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict'
2
+
3
+ import '@rackai/domql'
4
+
5
+ import query from './query'
6
+ import registry from './registry'
7
+ import define from './define'
8
+ import find from './find'
9
+ import { methods, setMethod } from './methods'
10
+
11
+ export default {
12
+ registry,
13
+ query,
14
+ define,
15
+ find,
16
+ methods,
17
+ setMethod
18
+ }
package/src/methods.js ADDED
@@ -0,0 +1,10 @@
1
+ 'use strict'
2
+
3
+ export const methods = {}
4
+
5
+ export const setMethod = newMethods => {
6
+ for (const param in newMethods) {
7
+ methods[param] = newMethods[param]
8
+ }
9
+ return methods
10
+ }
package/src/on.js ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict'
2
+
3
+ import * as events from '@rackai/domql/src/event/on'
4
+
5
+ events.init = (param, element, node) => {
6
+ param.call(element, element, node)
7
+ }
8
+
9
+ export default (element, node) => {
10
+ for (const param in element.on) {
11
+ if (param === 'init' || param === 'render') continue
12
+
13
+ var appliedFunction = element.on[param]
14
+ if (typeof appliedFunction === 'function') {
15
+ node.addEventListener(param, event => appliedFunction(event, element), true)
16
+ }
17
+ }
18
+ }
package/src/params.js ADDED
@@ -0,0 +1,20 @@
1
+ 'use strict'
2
+
3
+ import {
4
+ attr,
5
+ classList,
6
+ data,
7
+ style,
8
+ html
9
+ } from '@rackai/domql/src/element/params'
10
+
11
+ export default {
12
+ attr,
13
+ class: classList,
14
+ data,
15
+ style,
16
+ text: (param, element, node) => {
17
+ node.innerText = param
18
+ },
19
+ html
20
+ }
package/src/query.js ADDED
@@ -0,0 +1,37 @@
1
+ 'use strict'
2
+
3
+ import registry from './registry'
4
+ import apply from './apply'
5
+ import update from './update'
6
+ import { methods } from './methods'
7
+ import { is } from '@rackai/domql/src/event'
8
+
9
+ var query = params => {
10
+ for (let key in params) {
11
+ var element = params[key]
12
+ var { query, node } = element
13
+ var nodesArr = []
14
+
15
+ if (is.node(node)) nodesArr = [node]
16
+ else {
17
+ var nodes = document.querySelectorAll(query)
18
+ var { length } = nodes
19
+ if (length === 0) console.warn(`Could not find element "${key}"`)
20
+ nodes.forEach((node, key) => nodesArr[key] = node)
21
+ }
22
+
23
+ element.nodes = nodesArr
24
+ element.key = key
25
+ element.update = update
26
+
27
+ for (var one in methods) if (key !== one) element[one] = methods[one]
28
+
29
+ registry[key] = params[key]
30
+
31
+ apply(element)
32
+ }
33
+
34
+ return registry
35
+ }
36
+
37
+ export default query
@@ -0,0 +1,3 @@
1
+ 'use strict'
2
+
3
+ export default {}
package/src/update.js ADDED
@@ -0,0 +1,24 @@
1
+ 'use strict'
2
+
3
+ import params from './params'
4
+ import on from './on'
5
+ import { exec, isObject } from '@rackai/domql/src/utils/object'
6
+
7
+ const update = function (newParams) {
8
+ var element = this
9
+ element.nodes.forEach(node => {
10
+ if (isObject(newParams.on)) on(element, node)
11
+ for (let param in newParams) {
12
+ var newParam = newParams[param]
13
+ var hasParam = params[param]
14
+ if (hasParam) hasParam(newParam, element, node)
15
+ }
16
+ })
17
+
18
+ // run onUpdate
19
+ if (element.on && typeof element.on.update === 'function') {
20
+ on.update(element.on.update, element, node)
21
+ }
22
+ }
23
+
24
+ export default update