jeefo_component
Advanced tools
Comparing version 0.0.5 to 0.0.6
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
* File Name : constructor.js | ||
* Created at : 2017-08-11 | ||
* Updated at : 2017-08-15 | ||
* Updated at : 2017-09-06 | ||
* Author : jeefo | ||
@@ -10,5 +10,4 @@ * Purpose : | ||
var parser = require("./parser"), | ||
Observer = require("./observer"), | ||
object_keys = Object.keys, | ||
var parser = require("./parser"), | ||
binder = require("./binder"), | ||
@@ -19,33 +18,2 @@ parser_wrapper = function (component) { | ||
}; | ||
}, | ||
binder = function (component, context_property, controller, controller_property) { | ||
var $parser = parser(component, context_property); | ||
return { | ||
value : controller[controller_property] = $parser.getter(), | ||
$parser : $parser, | ||
is_changed : function () { | ||
var value = controller[controller_property] = this.$parser.getter(); | ||
if (this.value !== value) { | ||
this.value = value; | ||
return true; | ||
} | ||
} | ||
}; | ||
}, | ||
two_way_bind = function (component, context_property, controller, controller_property) { | ||
var change_detector = binder(component, context_property, controller, controller_property); | ||
change_detector.observer = new Observer(controller); | ||
change_detector.observer.$on(controller_property, function (value) { | ||
var is_succeed = change_detector.$parser.setter(value); | ||
if (! is_succeed) { | ||
is_succeed = true; | ||
//controller[controller_property] = void 0; | ||
} | ||
}); | ||
return change_detector; | ||
}; | ||
@@ -61,33 +29,5 @@ | ||
// Bindings {{{1 | ||
if (definition.bindings) { | ||
var attrs = component.attrs; | ||
object_keys(definition.bindings).forEach(function (prop) { | ||
var key = definition.bindings[prop], | ||
operator = key.charAt(0); | ||
key = key.substring(1); | ||
if (! key) { | ||
key = prop; | ||
} | ||
var value = attrs.get(key) || prop; | ||
switch (operator) { | ||
case '=' : | ||
component.change_detectors.push(two_way_bind(component, value, controller, prop)); | ||
break; | ||
case '<' : | ||
component.change_detectors.push(binder(component, value, controller, prop)); | ||
break; | ||
case '@' : | ||
controller[prop] = value; | ||
break; | ||
default: | ||
throw new Error("Invalid binding"); | ||
} | ||
}); | ||
binder(component, controller, definition.bindings); | ||
} | ||
// }}}1 | ||
@@ -94,0 +34,0 @@ if (controller.on_init) { |
@@ -63,3 +63,3 @@ /* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
var i = 0, | ||
values = this.$parser.getter(), | ||
values = this.$parser.get(), | ||
children = this.$component.children, | ||
@@ -66,0 +66,0 @@ stagger_index = 0, |
{ | ||
"name": "jeefo_component", | ||
"version": "0.0.5", | ||
"version": "0.0.6", | ||
"description": "Part of jeefo framework", | ||
@@ -5,0 +5,0 @@ "author": { |
104
parser.js
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. | ||
* File Name : parser.js | ||
* Created at : 2017-07-25 | ||
* Updated at : 2017-08-24 | ||
* Updated at : 2017-09-06 | ||
* Author : jeefo | ||
@@ -10,65 +10,69 @@ * Purpose : | ||
var is_digit = require("jeefo_utils/is/digit"); | ||
var is_digit = require("jeefo_utils/is/digit"), | ||
module.exports = function (component, code) { | ||
null_parser = { value : null, is_primitive : true }, | ||
primitive = function (code) { | ||
switch (code) { | ||
case "true" : | ||
case "false" : | ||
return code === "true"; | ||
case "null" : | ||
return null; | ||
return { value : code === "true", is_primitive : true }; | ||
case "null" : | ||
return null_parser; | ||
} | ||
if (is_digit(code)) { | ||
return +code; | ||
return { value : +code, is_primitive : true }; | ||
} | ||
}, | ||
// jshint latedef : false | ||
return generate_getter_setter(component, code); | ||
function generate_getter_setter (component, code) { | ||
var index = code.length, i; | ||
i = code.indexOf('.'); | ||
if (i !== -1) { | ||
index = i; | ||
find_controller = function (component, property_name) { | ||
if (component.controller) { | ||
if (component.controller_as === property_name || property_name in component.controller) { | ||
return component.controller; | ||
} | ||
i = code.indexOf('('); | ||
if (i !== -1 && i < index) { | ||
index = i; | ||
} | ||
i = code.indexOf('['); | ||
if (i !== -1 && i < index) { | ||
index = i; | ||
} | ||
} | ||
if (component.parent) { | ||
return find_controller(component.parent, property_name); | ||
} | ||
}; | ||
// jshint evil : true | ||
var property_name = code.substring(0, index), | ||
context = find_controller(component, property_name), | ||
module.exports = function parser (component, code) { | ||
var $parser = primitive(code); | ||
getter = new Function("context", | ||
"try { return context." + code + "; } catch (e) {}"), | ||
setter = new Function("context", "value", | ||
"try { context." + code + " = value; return true; } catch (e) {}"); | ||
// jshint evil : false | ||
if ($parser) { | ||
return $parser; | ||
} | ||
return { | ||
getter : function () { | ||
return getter(context); | ||
}, | ||
setter : function (value) { | ||
return setter(context, value); | ||
} | ||
}; | ||
var index = code.length, i; | ||
i = code.indexOf('.'); | ||
if (i !== -1) { | ||
index = i; | ||
} | ||
i = code.indexOf('('); | ||
if (i !== -1 && i < index) { | ||
index = i; | ||
} | ||
i = code.indexOf('['); | ||
if (i !== -1 && i < index) { | ||
index = i; | ||
} | ||
function find_controller (component, property_name) { | ||
if (component.controller) { | ||
if (component.controller_as === property_name || property_name in component.controller) { | ||
return component.controller; | ||
} | ||
} | ||
if (component.parent) { | ||
return find_controller(component.parent, property_name); | ||
} | ||
// jshint evil : true | ||
var property_name = code.substring(0, index), | ||
context = find_controller(component, property_name), | ||
getter = new Function("context", | ||
"try { return context." + code + "; } catch (e) {}"), | ||
setter = new Function("context", "value", | ||
"try { context." + code + " = value; return true; } catch (e) {}"); | ||
// jshint evil : false | ||
return { | ||
get : function () { | ||
return getter(context); | ||
}, | ||
set : function (value) { | ||
return setter(context, value); | ||
} | ||
} | ||
// jshint latedef : true | ||
}; | ||
}; |
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
34360
22
1116