Skip to content

Commit

Permalink
added utils.split, changed regex to DOMParser
Browse files Browse the repository at this point in the history
  • Loading branch information
ortexx committed Mar 15, 2018
1 parent 8d6574e commit ed71c2e
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 123 deletions.
134 changes: 76 additions & 58 deletions dist/akili.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/akili.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "akili",
"version": "0.5.3",
"version": "0.5.4",
"description": "Akili - javascript framework",
"main": "./src/akili.js",
"author": {
Expand Down
33 changes: 14 additions & 19 deletions src/akili.js
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,8 @@ Akili.initialize = function(el, options = {}) {
break CHECK_ALIASES;
}

for (let selector in this.__aliases) {
if (!this.__aliases.hasOwnProperty(selector)) {
continue;
}
for (let i = 0, l = selectors.length; i < l; i++) {
let selector = selectors[i];

if (el.matches(selector)) {
_Component = this.__components[this.__aliases[selector]];
Expand Down Expand Up @@ -340,7 +338,6 @@ Akili.compile = function(root, options = { recompile: false }) {
};

nestedInitializing(root);

let p = [];

for (let i = 0, l = elements.length; i < l; i++) {
Expand Down Expand Up @@ -630,29 +627,27 @@ Akili.init = function(root) {
}

if(window.AKILI_SERVER) {
let html = window.AKILI_SERVER.html;

if(this.__root === document.body) {
for (var i = this.__root.attributes.length - 1; i >= 0; i--){
this.__root.removeAttribute(this.__root.attributes[i].name);
}

let html = window.AKILI_SERVER.html;
let line = html.match(/^<[^<]+>/);
let attrLines = (line? line[0]: '').match(/\s+[^"]+"[^"]+"/g) || [];

for(let i = 0, l = attrLines.length; i < l; i++) {
let line = attrLines[i];
let attr = line.split('=', 2);
let key = attr[0].trim();
let val = attr[1].slice(1, -1);
this.__root.setAttribute(key, val);
}

this.__root.innerHTML = window.AKILI_SERVER.html;
let parser = new DOMParser();
let doc = parser.parseFromString(html, "text/html");
let body = doc.querySelector('body');
this.__root.innerHTML = html;

for (var i = body.attributes.length - 1; i >= 0; i--) {
let attr = body.attributes[i];
this.__root.setAttribute(attr.name, attr.value);
}
}
else {
let parent = this.__root.parentNode;
let index = [].slice.call(parent.children).indexOf(this.__root);
this.__root.outerHTML = window.AKILI_SERVER.html;
this.__root.outerHTML = html;
this.__root = parent.children[index];
}
}
Expand Down
25 changes: 1 addition & 24 deletions src/component.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,30 +38,7 @@ export default class Component {
globals = { utils, ...Akili.options.globals, ...globals};
const keys = [];
const vars = [];
const exps = [];
const symbols = ['"', "'", '`'];
const arr = expression.split('');
let open = '';
let last = '';

for(let i = 0, l = arr.length; i < l; i++) {
let val = arr[i];
let index = symbols.indexOf(val);

if(index > -1 && (!open || open == val)) {
!open? open = symbols[index]: open = '';
}

if(val == ';' && !open) {
last.trim() && exps.push(last);
last = '';
continue;
}

last += val;
}

last.trim() && exps.push(last);
const exps = utils.split(expression.trim(), ';', ['"', "'", '`']);
exps[exps.length - 1] = `return ${exps[exps.length - 1]}`;

for(let key in globals) {
Expand Down
84 changes: 65 additions & 19 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,10 @@ utils.class = function (obj) {
}

let classes = [];
let keys = Object.keys(obj);

for (let k in obj) {
if (!obj.hasOwnProperty(k)) {
continue;
}

for (let i = 0, l = keys.length; i < l; i++) {
let k = keys[i];
let val = obj[k];
val && classes.push(k);
}
Expand All @@ -47,19 +45,71 @@ utils.style = function(obj) {
}

let styles = [];
let keys = Object.keys(obj);

for (let k in obj) {
if (!obj.hasOwnProperty(k)) {
continue;
}

for (let i = 0, l = keys.length; i < l; i++) {
let k = keys[i];
let val = obj[k];
val && styles.push(`${this.toDashCase(k)}:${val}`);
}

return styles.join(';');
};

/**
* Split the string
*
* @example
* // returns ["Hello", "World"]
* utils.split("Hello World", " ");
*
* @example
* // returns ['x = 5', ' y = "1;2;3"']
* utils.split('x = 5; y = "1;2;3"', ";", ['"']);
*
* @param {string} str
* @param {string} [del]
* @param {string[]} [exclude]
*/
utils.split = function(str, del = '', exclude = []) {
const exps = [];
let last = '';

if(!del) {
return str.split('');
}
else if(del instanceof RegExp) {
return str.split(del);
}
else if(str.indexOf(del) == -1) {
last = str;
}
else {
const arr = str.split('');
let open = '';

for(let i = 0, l = arr.length; i < l; i++) {
let val = arr[i];
let index = exclude.indexOf(val);

if(index > -1 && (!open || open == val)) {
!open? open = exclude[index]: open = '';
}

if(val == del && !open) {
exps.push(last);
last = '';
continue;
}

last += val;
}
}

last && exps.push(last);
return exps;
}

/**
* Filter an array
*
Expand Down Expand Up @@ -501,7 +551,7 @@ utils.getPropertyByKeys = function(keys, object) {
let length = keys.length;
let i = 0;

keys.reduce(function(o, k) {
keys.reduce((o, k) => {
i++;

if (typeof o != 'object') {
Expand Down Expand Up @@ -535,7 +585,7 @@ utils.hasPropertyByKeys = function(keys, object) {
let length = keys.length;
let i = 0;

keys.reduce(function(o, k) {
keys.reduce((o, k) => {
i++;

if (typeof o != 'object') {
Expand Down Expand Up @@ -571,7 +621,7 @@ utils.setPropertyByKeys = function(keys, object, fn) {
let length = keys.length;
let i = 0;

keys.reduce(function(o, k) {
keys.reduce((o, k) => {
i++;

if (typeof o != 'object') {
Expand Down Expand Up @@ -614,7 +664,7 @@ utils.deletePropertyByKeys = function(keys, object, fn) {
let value;
let i = 0;

keys.reduce(function(o, k) {
keys.reduce((o, k) => {
i++;

if (typeof o != 'object') {
Expand All @@ -627,11 +677,7 @@ utils.deletePropertyByKeys = function(keys, object, fn) {

if (i == length) {
value = o[k];

if (!fn || fn(value)) {
delete o[k];
}

(!fn || fn(value)) && (delete o[k]);
return value;
}

Expand Down
17 changes: 17 additions & 0 deletions test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,23 @@ describe('utils.js', () => {
});
});

describe('.split()', () => {
let opts = [
{ val: 'string', res: ["s", "t", "r", "i", "n", "g"] },
{ val: 'Hello World', res: ["Hello", "World"], del: ' ' },
{
val: `x = 5; y = "1;2;3"; z = '4;5;6'`,
res: [`x = 5`, ` y = "1;2;3"`, ` z = '4;5;6'`],
del: ';',
exclude: ["'", '"']
}
];

opts.forEach(opt => {
assert.equal(JSON.stringify(utils.split(opt.val, opt.del, opt.exclude)), JSON.stringify(opt.res))
});
});

describe('.copy()', () => {
it('should be equal but difference', () => {
let obj = { key: 1, obj: utils.Component };
Expand Down

0 comments on commit ed71c2e

Please sign in to comment.