Merge branch 'widget' of github.com:ynh/EWF into widget
This commit is contained in:
@@ -21,6 +21,7 @@ feature
|
|||||||
form: WSF_FORM_CONTROL
|
form: WSF_FORM_CONTROL
|
||||||
n1_container: WSF_FORM_ELEMENT_CONTROL [STRING]
|
n1_container: WSF_FORM_ELEMENT_CONTROL [STRING]
|
||||||
n2_container: WSF_FORM_ELEMENT_CONTROL [STRING]
|
n2_container: WSF_FORM_ELEMENT_CONTROL [STRING]
|
||||||
|
cats_container: WSF_FORM_ELEMENT_CONTROL [LIST [STRING]]
|
||||||
do
|
do
|
||||||
create textbox1.make_input ("txtBox1", "1")
|
create textbox1.make_input ("txtBox1", "1")
|
||||||
create textbox2.make_input ("txtBox2", "2")
|
create textbox2.make_input ("txtBox2", "2")
|
||||||
@@ -40,8 +41,13 @@ feature
|
|||||||
n2_container.add_validator (create {WSF_DECIMAL_VALIDATOR}.make_decimal_validator ("Invalid Number"))
|
n2_container.add_validator (create {WSF_DECIMAL_VALIDATOR}.make_decimal_validator ("Invalid Number"))
|
||||||
form.add_control (n1_container)
|
form.add_control (n1_container)
|
||||||
form.add_control (n2_container)
|
form.add_control (n2_container)
|
||||||
form.add_control (create {WSF_FORM_ELEMENT_CONTROL [LIST [STRING]]}.make_form_element ("Categories", cklist))
|
create cats_container.make_form_element ("Categories", cklist)
|
||||||
|
cats_container.add_validator (create {WSF_MIN_VALIDATOR[STRING]}.make_min_validator (1,"Choose at least one category"))
|
||||||
|
cats_container.add_validator (create {WSF_MAX_VALIDATOR[STRING]}.make_max_validator (1,"Choose at most one category"))
|
||||||
|
|
||||||
|
form.add_control (cats_container)
|
||||||
form.add_control (button1)
|
form.add_control (button1)
|
||||||
|
|
||||||
form.add_control (create {WSF_FORM_ELEMENT_CONTROL [STRING]}.make_form_element ("Result", textbox_result))
|
form.add_control (create {WSF_FORM_ELEMENT_CONTROL [STRING]}.make_form_element ("Result", textbox_result))
|
||||||
control := form
|
control := form
|
||||||
end
|
end
|
||||||
@@ -54,11 +60,13 @@ feature
|
|||||||
form.validate
|
form.validate
|
||||||
if form.is_valid then
|
if form.is_valid then
|
||||||
text := textbox1.text + " + " + textbox2.text + " = " + (textbox1.text.to_integer_64 + textbox2.text.to_integer_64).out
|
text := textbox1.text + " + " + textbox2.text + " = " + (textbox1.text.to_integer_64 + textbox2.text.to_integer_64).out
|
||||||
|
text.append ("<ul>")
|
||||||
across
|
across
|
||||||
cklist.value as s
|
cklist.value as s
|
||||||
loop
|
loop
|
||||||
text.append ("<br />-" + s.item)
|
text.append ("<li>" + s.item + "</li>")
|
||||||
end
|
end
|
||||||
|
text.append ("</ul>")
|
||||||
textbox_result.set_html (text)
|
textbox_result.set_html (text)
|
||||||
else
|
else
|
||||||
textbox_result.set_html ("VALIDATION ERROR")
|
textbox_result.set_html ("VALIDATION ERROR")
|
||||||
|
|||||||
@@ -28,8 +28,22 @@ class WSF_REGEXP_VALIDATOR extends WSF_VALIDATOR
|
|||||||
res = val.match(@pattern)
|
res = val.match(@pattern)
|
||||||
return (res!=null)
|
return (res!=null)
|
||||||
|
|
||||||
|
class WSF_MIN_VALIDATOR extends WSF_VALIDATOR
|
||||||
|
|
||||||
|
validate: ()->
|
||||||
|
val = @parent_control.value()
|
||||||
|
return (val.length>=@settings.min)
|
||||||
|
|
||||||
|
class WSF_MAX_VALIDATOR extends WSF_VALIDATOR
|
||||||
|
|
||||||
|
validate: ()->
|
||||||
|
val = @parent_control.value()
|
||||||
|
return (val.length<=@settings.max)
|
||||||
|
|
||||||
validatormap =
|
validatormap =
|
||||||
"WSF_REGEXP_VALIDATOR":WSF_REGEXP_VALIDATOR
|
"WSF_REGEXP_VALIDATOR":WSF_REGEXP_VALIDATOR
|
||||||
|
"WSF_MIN_VALIDATOR":WSF_MIN_VALIDATOR
|
||||||
|
"WSF_MAX_VALIDATOR":WSF_MAX_VALIDATOR
|
||||||
|
|
||||||
class WSF_CONTROL
|
class WSF_CONTROL
|
||||||
constructor: (@control_name, @$el)->
|
constructor: (@control_name, @$el)->
|
||||||
@@ -142,6 +156,7 @@ class WSF_TEXTAREA_CONTROL extends WSF_CONTROL
|
|||||||
class WSF_CHECKBOX_CONTROL extends WSF_CONTROL
|
class WSF_CHECKBOX_CONTROL extends WSF_CONTROL
|
||||||
attach_events: ()->
|
attach_events: ()->
|
||||||
self = @
|
self = @
|
||||||
|
@checked_value = window.states[@control_name]['checked_value']
|
||||||
@$el.change ()->
|
@$el.change ()->
|
||||||
self.change()
|
self.change()
|
||||||
|
|
||||||
@@ -215,6 +230,28 @@ class WSF_HTML_CONTROL extends WSF_CONTROL
|
|||||||
window.states[@control_name]['html'] = state.html
|
window.states[@control_name]['html'] = state.html
|
||||||
@$el.html(state.html)
|
@$el.html(state.html)
|
||||||
|
|
||||||
|
class WSF_CHECKBOX_LIST_CONTROL extends WSF_CONTROL
|
||||||
|
|
||||||
|
attach_events: ()->
|
||||||
|
self = @
|
||||||
|
@subcontrols = []
|
||||||
|
#Listen to events of subelements and forward them
|
||||||
|
for name,control of controls
|
||||||
|
if @$el.has(control.$el).length > 0
|
||||||
|
@subcontrols.push(control)
|
||||||
|
control.on('change',@change,@)
|
||||||
|
return
|
||||||
|
|
||||||
|
change:()->
|
||||||
|
@trigger("change")
|
||||||
|
|
||||||
|
value:()->
|
||||||
|
result = []
|
||||||
|
for subc in @subcontrols
|
||||||
|
if subc.value()
|
||||||
|
result.push(subc.checked_value)
|
||||||
|
return result
|
||||||
|
|
||||||
#map class name to effective class
|
#map class name to effective class
|
||||||
typemap =
|
typemap =
|
||||||
"WSF_BUTTON_CONTROL":WSF_BUTTON_CONTROL
|
"WSF_BUTTON_CONTROL":WSF_BUTTON_CONTROL
|
||||||
@@ -223,6 +260,7 @@ typemap =
|
|||||||
"WSF_CHECKBOX_CONTROL":WSF_CHECKBOX_CONTROL
|
"WSF_CHECKBOX_CONTROL":WSF_CHECKBOX_CONTROL
|
||||||
"WSF_FORM_ELEMENT_CONTROL": WSF_FORM_ELEMENT_CONTROL
|
"WSF_FORM_ELEMENT_CONTROL": WSF_FORM_ELEMENT_CONTROL
|
||||||
"WSF_HTML_CONTROL": WSF_HTML_CONTROL
|
"WSF_HTML_CONTROL": WSF_HTML_CONTROL
|
||||||
|
"WSF_CHECKBOX_LIST_CONTROL": WSF_CHECKBOX_LIST_CONTROL
|
||||||
|
|
||||||
#create a js class for each control
|
#create a js class for each control
|
||||||
for name,state of window.states
|
for name,state of window.states
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// Generated by CoffeeScript 1.6.1
|
// Generated by CoffeeScript 1.6.1
|
||||||
(function() {
|
(function() {
|
||||||
var $el, WSF_BUTTON_CONTROL, WSF_CHECKBOX_CONTROL, WSF_CONTROL, WSF_FORM_ELEMENT_CONTROL, WSF_HTML_CONTROL, WSF_INPUT_CONTROL, WSF_REGEXP_VALIDATOR, WSF_TEXTAREA_CONTROL, WSF_VALIDATOR, controls, name, state, trigger_callback, type, typemap, validatormap, _ref, _ref1, _ref2,
|
var $el, WSF_BUTTON_CONTROL, WSF_CHECKBOX_CONTROL, WSF_CHECKBOX_LIST_CONTROL, WSF_CONTROL, WSF_FORM_ELEMENT_CONTROL, WSF_HTML_CONTROL, WSF_INPUT_CONTROL, WSF_MAX_VALIDATOR, WSF_MIN_VALIDATOR, WSF_REGEXP_VALIDATOR, WSF_TEXTAREA_CONTROL, WSF_VALIDATOR, controls, name, state, trigger_callback, type, typemap, validatormap, _ref, _ref1, _ref2,
|
||||||
__hasProp = {}.hasOwnProperty,
|
__hasProp = {}.hasOwnProperty,
|
||||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
@@ -60,8 +60,46 @@
|
|||||||
|
|
||||||
})(WSF_VALIDATOR);
|
})(WSF_VALIDATOR);
|
||||||
|
|
||||||
|
WSF_MIN_VALIDATOR = (function(_super) {
|
||||||
|
|
||||||
|
__extends(WSF_MIN_VALIDATOR, _super);
|
||||||
|
|
||||||
|
function WSF_MIN_VALIDATOR() {
|
||||||
|
return WSF_MIN_VALIDATOR.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
WSF_MIN_VALIDATOR.prototype.validate = function() {
|
||||||
|
var val;
|
||||||
|
val = this.parent_control.value();
|
||||||
|
return val.length >= this.settings.min;
|
||||||
|
};
|
||||||
|
|
||||||
|
return WSF_MIN_VALIDATOR;
|
||||||
|
|
||||||
|
})(WSF_VALIDATOR);
|
||||||
|
|
||||||
|
WSF_MAX_VALIDATOR = (function(_super) {
|
||||||
|
|
||||||
|
__extends(WSF_MAX_VALIDATOR, _super);
|
||||||
|
|
||||||
|
function WSF_MAX_VALIDATOR() {
|
||||||
|
return WSF_MAX_VALIDATOR.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
WSF_MAX_VALIDATOR.prototype.validate = function() {
|
||||||
|
var val;
|
||||||
|
val = this.parent_control.value();
|
||||||
|
return val.length <= this.settings.max;
|
||||||
|
};
|
||||||
|
|
||||||
|
return WSF_MAX_VALIDATOR;
|
||||||
|
|
||||||
|
})(WSF_VALIDATOR);
|
||||||
|
|
||||||
validatormap = {
|
validatormap = {
|
||||||
"WSF_REGEXP_VALIDATOR": WSF_REGEXP_VALIDATOR
|
"WSF_REGEXP_VALIDATOR": WSF_REGEXP_VALIDATOR,
|
||||||
|
"WSF_MIN_VALIDATOR": WSF_MIN_VALIDATOR,
|
||||||
|
"WSF_MAX_VALIDATOR": WSF_MAX_VALIDATOR
|
||||||
};
|
};
|
||||||
|
|
||||||
WSF_CONTROL = (function() {
|
WSF_CONTROL = (function() {
|
||||||
@@ -271,6 +309,7 @@
|
|||||||
WSF_CHECKBOX_CONTROL.prototype.attach_events = function() {
|
WSF_CHECKBOX_CONTROL.prototype.attach_events = function() {
|
||||||
var self;
|
var self;
|
||||||
self = this;
|
self = this;
|
||||||
|
this.checked_value = window.states[this.control_name]['checked_value'];
|
||||||
return this.$el.change(function() {
|
return this.$el.change(function() {
|
||||||
return self.change();
|
return self.change();
|
||||||
});
|
});
|
||||||
@@ -391,13 +430,56 @@
|
|||||||
|
|
||||||
})(WSF_CONTROL);
|
})(WSF_CONTROL);
|
||||||
|
|
||||||
|
WSF_CHECKBOX_LIST_CONTROL = (function(_super) {
|
||||||
|
|
||||||
|
__extends(WSF_CHECKBOX_LIST_CONTROL, _super);
|
||||||
|
|
||||||
|
function WSF_CHECKBOX_LIST_CONTROL() {
|
||||||
|
return WSF_CHECKBOX_LIST_CONTROL.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
WSF_CHECKBOX_LIST_CONTROL.prototype.attach_events = function() {
|
||||||
|
var control, name, self;
|
||||||
|
self = this;
|
||||||
|
this.subcontrols = [];
|
||||||
|
for (name in controls) {
|
||||||
|
control = controls[name];
|
||||||
|
if (this.$el.has(control.$el).length > 0) {
|
||||||
|
this.subcontrols.push(control);
|
||||||
|
control.on('change', this.change, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
WSF_CHECKBOX_LIST_CONTROL.prototype.change = function() {
|
||||||
|
return this.trigger("change");
|
||||||
|
};
|
||||||
|
|
||||||
|
WSF_CHECKBOX_LIST_CONTROL.prototype.value = function() {
|
||||||
|
var result, subc, _i, _len, _ref;
|
||||||
|
result = [];
|
||||||
|
_ref = this.subcontrols;
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
subc = _ref[_i];
|
||||||
|
if (subc.value()) {
|
||||||
|
result.push(subc.checked_value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
return WSF_CHECKBOX_LIST_CONTROL;
|
||||||
|
|
||||||
|
})(WSF_CONTROL);
|
||||||
|
|
||||||
typemap = {
|
typemap = {
|
||||||
"WSF_BUTTON_CONTROL": WSF_BUTTON_CONTROL,
|
"WSF_BUTTON_CONTROL": WSF_BUTTON_CONTROL,
|
||||||
"WSF_INPUT_CONTROL": WSF_INPUT_CONTROL,
|
"WSF_INPUT_CONTROL": WSF_INPUT_CONTROL,
|
||||||
"WSF_TEXTAREA_CONTROL": WSF_TEXTAREA_CONTROL,
|
"WSF_TEXTAREA_CONTROL": WSF_TEXTAREA_CONTROL,
|
||||||
"WSF_CHECKBOX_CONTROL": WSF_CHECKBOX_CONTROL,
|
"WSF_CHECKBOX_CONTROL": WSF_CHECKBOX_CONTROL,
|
||||||
"WSF_FORM_ELEMENT_CONTROL": WSF_FORM_ELEMENT_CONTROL,
|
"WSF_FORM_ELEMENT_CONTROL": WSF_FORM_ELEMENT_CONTROL,
|
||||||
"WSF_HTML_CONTROL": WSF_HTML_CONTROL
|
"WSF_HTML_CONTROL": WSF_HTML_CONTROL,
|
||||||
|
"WSF_CHECKBOX_LIST_CONTROL": WSF_CHECKBOX_LIST_CONTROL
|
||||||
};
|
};
|
||||||
|
|
||||||
_ref = window.states;
|
_ref = window.states;
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
note
|
||||||
|
description: "Summary description for {WSF_MAX_VALIDATOR}."
|
||||||
|
author: ""
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
|
class
|
||||||
|
WSF_max_VALIDATOR[G]
|
||||||
|
|
||||||
|
inherit
|
||||||
|
WSF_VALIDATOR [LIST[G]]
|
||||||
|
redefine
|
||||||
|
state
|
||||||
|
end
|
||||||
|
|
||||||
|
create
|
||||||
|
make_max_validator
|
||||||
|
|
||||||
|
feature {NONE}
|
||||||
|
|
||||||
|
make_max_validator (m:INTEGER; e: STRING)
|
||||||
|
do
|
||||||
|
make (e)
|
||||||
|
max := m
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Implementation
|
||||||
|
|
||||||
|
is_valid (input:LIST[G]): BOOLEAN
|
||||||
|
do
|
||||||
|
Result:= input.count < max or input.count = max
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
feature
|
||||||
|
|
||||||
|
state: JSON_OBJECT
|
||||||
|
do
|
||||||
|
Result := Precursor
|
||||||
|
Result.put (create {JSON_NUMBER}.make_integer (max), create {JSON_STRING}.make_json ("max"))
|
||||||
|
end
|
||||||
|
|
||||||
|
max: INTEGER
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
note
|
||||||
|
description: "Summary description for {WSF_MIN_VALIDATOR}."
|
||||||
|
author: ""
|
||||||
|
date: "$Date$"
|
||||||
|
revision: "$Revision$"
|
||||||
|
|
||||||
|
class
|
||||||
|
WSF_MIN_VALIDATOR[G]
|
||||||
|
|
||||||
|
inherit
|
||||||
|
WSF_VALIDATOR [LIST[G]]
|
||||||
|
redefine
|
||||||
|
state
|
||||||
|
end
|
||||||
|
|
||||||
|
create
|
||||||
|
make_min_validator
|
||||||
|
|
||||||
|
feature {NONE}
|
||||||
|
|
||||||
|
make_min_validator (m:INTEGER; e: STRING)
|
||||||
|
do
|
||||||
|
make (e)
|
||||||
|
min := m
|
||||||
|
end
|
||||||
|
|
||||||
|
feature -- Implementation
|
||||||
|
|
||||||
|
is_valid (input:LIST[G]): BOOLEAN
|
||||||
|
do
|
||||||
|
Result:= input.count > min or input.count = min
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
feature
|
||||||
|
|
||||||
|
state: JSON_OBJECT
|
||||||
|
do
|
||||||
|
Result := Precursor
|
||||||
|
Result.put (create {JSON_NUMBER}.make_integer (min), create {JSON_STRING}.make_json ("min"))
|
||||||
|
end
|
||||||
|
|
||||||
|
min: INTEGER
|
||||||
|
|
||||||
|
end
|
||||||
@@ -38,6 +38,7 @@ feature {WSF_PAGE_CONTROL, WSF_CONTROL} -- STATE MANAGEMENT
|
|||||||
do
|
do
|
||||||
create Result.make
|
create Result.make
|
||||||
Result.put (create {JSON_BOOLEAN}.make_boolean (checked), create {JSON_STRING}.make_json ("checked"))
|
Result.put (create {JSON_BOOLEAN}.make_boolean (checked), create {JSON_STRING}.make_json ("checked"))
|
||||||
|
Result.put (create {JSON_STRING}.make_json (checked_value), create {JSON_STRING}.make_json ("checked_value"))
|
||||||
Result.put (create {JSON_BOOLEAN}.make_boolean (attached change_event), create {JSON_STRING}.make_json ("callback_change"))
|
Result.put (create {JSON_BOOLEAN}.make_boolean (attached change_event), create {JSON_STRING}.make_json ("callback_change"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user