From b70450cfe9a70fdb284a08db03b7aa9a84a81879 Mon Sep 17 00:00:00 2001 From: severin Date: Sat, 2 Nov 2013 22:36:21 +0100 Subject: [PATCH] Added dropdown control --- .../kernel/dropdown/wsf_dropdown_control.e | 52 +- .../kernel/webcontrol/wsf_basic_control.e | 8 +- examples/widgetapp/assets/widget.js | 1817 +++++++++-------- examples/widgetapp/base_page.e | 6 + 4 files changed, 969 insertions(+), 914 deletions(-) diff --git a/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e b/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e index ed0b43cf..1b8a26e7 100644 --- a/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e +++ b/draft/library/wsf_js_widget/kernel/dropdown/wsf_dropdown_control.e @@ -11,17 +11,61 @@ inherit WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL] rename - make as make_multi_control + make as make_multi_control, + make_with_tag_name as make_multi_control_with_tag_name end create - make + make, make_with_tag_name feature {NONE} -- Initialization - make (n: STRING) + make (n, title: STRING) + -- Make a dropdown control with div tag name and specified menu title do - make_multi_control (n) + make_with_tag_name (n, title, "div") end + make_with_tag_name (n, title, t: STRING) + -- Make a dropdown control with specified tag name and menu title (such as li) + do + make_multi_control_with_tag_name (n, t) + add_class ("dropdown") + create {WSF_BASIC_CONTROL} dropdown_toggle.make_with_body_class ("a", "data-toggle=%"dropdown%" href=%"#%"", "dropdown-toggle", title + " ") + create dropdown_menu.make_with_tag_name (n + "_menu", "ul") + dropdown_menu.add_class ("dropdown-menu") + add_control (dropdown_toggle) + add_control (dropdown_menu) + end + +feature -- Change + + add_item (c: WSF_STATELESS_CONTROL) + local + li: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL] + do + create li.make_with_tag_name (control_name + "_item" + dropdown_menu.controls.count.out, "li") + li.add_control (c) + dropdown_menu.add_control (li) + end + + add_link_item (label, link: STRING) + local + c: WSF_BASIC_CONTROL + do + create c.make_with_body ("a", "href=%"" + link + "%"", label) + add_item (c) + end + + add_divider + do + dropdown_menu.add_control (create {WSF_BASIC_CONTROL}.make_with_body_class ("li", "", "divider", "")) + end + +feature -- Properties + + dropdown_toggle: WSF_STATELESS_CONTROL + + dropdown_menu: WSF_MULTI_CONTROL [WSF_STATELESS_CONTROL] + end diff --git a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_basic_control.e b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_basic_control.e index e168f145..6e58a638 100644 --- a/draft/library/wsf_js_widget/kernel/webcontrol/wsf_basic_control.e +++ b/draft/library/wsf_js_widget/kernel/webcontrol/wsf_basic_control.e @@ -10,16 +10,18 @@ class inherit WSF_STATELESS_CONTROL + rename + make as make_stateless_control redefine attributes end create - make_control, make_with_body, make_with_body_class + make, make_with_body, make_with_body_class feature {NONE} -- Initialization - make_control (t: STRING) + make (t: STRING) -- Initialize do make_with_body_class (t, "", "", "") @@ -28,7 +30,7 @@ feature {NONE} -- Initialization make_with_body (t, attr, b: STRING) -- Initialize with specific attributes and body do - make (t) + make_stateless_control (t) attributes := attr body := b end diff --git a/examples/widgetapp/assets/widget.js b/examples/widgetapp/assets/widget.js index c4aabc41..7e9a4e4e 100644 --- a/examples/widgetapp/assets/widget.js +++ b/examples/widgetapp/assets/widget.js @@ -1,944 +1,947 @@ // Generated by CoffeeScript 1.6.1 -var Mini, WSF_AUTOCOMPLETE_CONTROL, WSF_BUTTON_CONTROL, WSF_CHECKBOX_CONTROL, WSF_CHECKBOX_LIST_CONTROL, WSF_CODEVIEW_CONTROL, WSF_CONTROL, WSF_FORM_ELEMENT_CONTROL, WSF_GRID_CONTROL, WSF_HTML_CONTROL, WSF_INPUT_CONTROL, WSF_MAX_VALIDATOR, WSF_MIN_VALIDATOR, WSF_PAGE_CONTROL, WSF_PAGINATION_CONTROL, WSF_PROGRESS_CONTROL, WSF_REGEXP_VALIDATOR, WSF_REPEATER_CONTROL, WSF_SLIDER_CONTROL, WSF_TEXTAREA_CONTROL, WSF_VALIDATOR, build_control, cache, controls, lazy_load, loaded, show_alert, start_modal, start_modal_big, template, tmpl, - __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; }; +(function() { + var Mini, WSF_AUTOCOMPLETE_CONTROL, WSF_BUTTON_CONTROL, WSF_CHECKBOX_CONTROL, WSF_CHECKBOX_LIST_CONTROL, WSF_CODEVIEW_CONTROL, WSF_CONTROL, WSF_FORM_ELEMENT_CONTROL, WSF_GRID_CONTROL, WSF_HTML_CONTROL, WSF_INPUT_CONTROL, WSF_MAX_VALIDATOR, WSF_MIN_VALIDATOR, WSF_PAGE_CONTROL, WSF_PAGINATION_CONTROL, WSF_PROGRESS_CONTROL, WSF_REGEXP_VALIDATOR, WSF_REPEATER_CONTROL, WSF_SLIDER_CONTROL, WSF_TEXTAREA_CONTROL, WSF_VALIDATOR, build_control, cache, controls, lazy_load, loaded, show_alert, start_modal, start_modal_big, template, tmpl, + __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; }; -cache = {}; + cache = {}; -jQuery.cachedAsset = function(url, options) { - var head, onload, script, success, successful, timeoutHandle; - if (/\.css$/.test(url)) { - $("", { - rel: "stylesheet", - type: "text/css", - href: url - }).appendTo("head"); - return { - done: function(fn) { - return fn(); - } - }; - } else { - success = []; - head = document.head || document.getElementsByTagName('head')[0] || document.documentElement; - script = document.createElement('script'); - script.async = 'async'; - script.src = url; - successful = false; - onload = function(_, aborted) { - var s, _i, _len; - if (aborted == null) { - aborted = false; - } - if (!(aborted || !script.readyState || script.readyState === 'complete')) { - return; - } - clearTimeout(timeoutHandle); - script.onload = script.onreadystatechange = script.onerror = null; - if (head && script.parentNode) { - head.removeChild(script); - } - script = void 0; - if (success && !aborted) { - successful = true; - for (_i = 0, _len = success.length; _i < _len; _i++) { - s = success[_i]; - s(); + jQuery.cachedAsset = function(url, options) { + var head, onload, script, success, successful, timeoutHandle; + if (/\.css$/.test(url)) { + $("", { + rel: "stylesheet", + type: "text/css", + href: url + }).appendTo("head"); + return { + done: function(fn) { + return fn(); } - return success = []; - } - }; - script.onload = script.onreadystatechange = onload; - script.onerror = function() { - return onload(null, true); - }; - timeoutHandle = setTimeout(script.onerror, 7500); - head.insertBefore(script, head.firstChild); - return { - done: function(fn) { - if (!successful) { - success.push(fn); - } else { - fn(); + }; + } else { + success = []; + head = document.head || document.getElementsByTagName('head')[0] || document.documentElement; + script = document.createElement('script'); + script.async = 'async'; + script.src = url; + successful = false; + onload = function(_, aborted) { + var s, _i, _len; + if (aborted == null) { + aborted = false; } - } - }; - } -}; + if (!(aborted || !script.readyState || script.readyState === 'complete')) { + return; + } + clearTimeout(timeoutHandle); + script.onload = script.onreadystatechange = script.onerror = null; + if (head && script.parentNode) { + head.removeChild(script); + } + script = void 0; + if (success && !aborted) { + successful = true; + for (_i = 0, _len = success.length; _i < _len; _i++) { + s = success[_i]; + s(); + } + return success = []; + } + }; + script.onload = script.onreadystatechange = onload; + script.onerror = function() { + return onload(null, true); + }; + timeoutHandle = setTimeout(script.onerror, 7500); + head.insertBefore(script, head.firstChild); + return { + done: function(fn) { + if (!successful) { + success.push(fn); + } else { + fn(); + } + } + }; + } + }; -jQuery.unparam = function(value) { - var i, l, pair, params, pieces; - params = {}; - pieces = value.split("&"); - pair = void 0; - i = void 0; - l = void 0; - i = 0; - l = pieces.length; - while (i < l) { - pair = pieces[i].split("=", 2); - params[decodeURIComponent(pair[0])] = (pair.length === 2 ? decodeURIComponent(pair[1].replace(/\+/g, " ")) : true); - i++; - } - return params; -}; + jQuery.unparam = function(value) { + var i, l, pair, params, pieces; + params = {}; + pieces = value.split("&"); + pair = void 0; + i = void 0; + l = void 0; + i = 0; + l = pieces.length; + while (i < l) { + pair = pieces[i].split("=", 2); + params[decodeURIComponent(pair[0])] = (pair.length === 2 ? decodeURIComponent(pair[1].replace(/\+/g, " ")) : true); + i++; + } + return params; + }; -template = tmpl = function(str, data) { - var fn; - fn = (!/\W/.test(str) ? cache[str] = cache[str] || tmpl(str) : new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" + "with(obj){p.push('" + str.replace(/[\r\t\n]/g, " ").split("{{").join("\t").replace(/((^|}})[^\t]*)'/g, "$1\r").replace(/\t=(.*?)}}/g, "',$1,'").split("\t").join("');").split("}}").join("p.push('").split("\r").join("\\'") + "');}return p.join('');")); - if (data) { - return fn(data); - } else { - return fn; - } -}; + template = tmpl = function(str, data) { + var fn; + fn = (!/\W/.test(str) ? cache[str] = cache[str] || tmpl(str) : new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" + "with(obj){p.push('" + str.replace(/[\r\t\n]/g, " ").split("{{").join("\t").replace(/((^|}})[^\t]*)'/g, "$1\r").replace(/\t=(.*?)}}/g, "',$1,'").split("\t").join("');").split("}}").join("p.push('").split("\r").join("\\'") + "');}return p.join('');")); + if (data) { + return fn(data); + } else { + return fn; + } + }; -Mini = { - compile: function(t) { - return { - render: template(t) - }; - } -}; + Mini = { + compile: function(t) { + return { + render: template(t) + }; + } + }; -loaded = {}; + loaded = {}; -lazy_load = function(requirements, fn, that) { - if (requirements.length === 0) { + lazy_load = function(requirements, fn, that) { + if (requirements.length === 0) { + return function() { + var a; + a = arguments; + return fn.apply(that, a); + }; + } + if (that == null) { + that = window; + } return function() { - var a; + var a, args, counter, done, r, self, _i, _len; a = arguments; - return fn.apply(that, a); - }; - } - if (that == null) { - that = window; - } - return function() { - var a, args, counter, done, r, self, _i, _len; - a = arguments; - if (typeof args === "undefined" || args === null) { - args = []; - } - counter = requirements.length + 1; - self = this; - done = function() { - counter = counter - 1; - if (counter === 0) { - fn.apply(that, a); + if (typeof args === "undefined" || args === null) { + args = []; } - }; - for (_i = 0, _len = requirements.length; _i < _len; _i++) { - r = requirements[_i]; - if (loaded[r] == null) { - loaded[r] = $.cachedAsset(r); - } - loaded[r].done(done); - } - return done(); - }; -}; - -build_control = function(control_name, state, control) { - var $el, type, typeclass; - $el = control.$el.find('[data-name=' + control_name + ']'); - type = $el.data('type'); - typeclass = null; - try { - typeclass = eval(type); - } catch (e) { - typeclass = WSF_CONTROL; - } - if ((type != null) && (typeclass != null)) { - return new typeclass(control, $el, control_name, state); - } - return null; -}; - -WSF_VALIDATOR = (function() { - - function WSF_VALIDATOR(parent_control, settings) { - this.parent_control = parent_control; - this.settings = settings; - this.error = this.settings.error; - return; - } - - WSF_VALIDATOR.prototype.validate = function() { - return true; - }; - - return WSF_VALIDATOR; - -})(); - -WSF_REGEXP_VALIDATOR = (function(_super) { - - __extends(WSF_REGEXP_VALIDATOR, _super); - - function WSF_REGEXP_VALIDATOR() { - WSF_REGEXP_VALIDATOR.__super__.constructor.apply(this, arguments); - this.pattern = new RegExp(this.settings.expression, 'g'); - } - - WSF_REGEXP_VALIDATOR.prototype.validate = function() { - var res, val; - val = this.parent_control.value(); - res = val.match(this.pattern); - return res !== null; - }; - - return WSF_REGEXP_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); - -WSF_CONTROL = (function() { - - WSF_CONTROL.prototype.requirements = []; - - function WSF_CONTROL(parent_control, $el, control_name, fullstate) { - this.parent_control = parent_control; - this.$el = $el; - this.control_name = control_name; - this.fullstate = fullstate; - this.state = this.fullstate.state; - this.load_subcontrols(); - this.isolation = "" + this.$el.data('isolation') === "1"; - this.$el.data('control', this); - this.initialize = lazy_load(this.requirements, this.attach_events, this); - return; - } - - WSF_CONTROL.prototype.load_subcontrols = function() { - var control_name, state; - if (this.fullstate.controls != null) { - return this.controls = (function() { - var _ref, _results; - _ref = this.fullstate.controls; - _results = []; - for (control_name in _ref) { - state = _ref[control_name]; - _results.push(build_control(control_name, state, this)); + counter = requirements.length + 1; + self = this; + done = function() { + counter = counter - 1; + if (counter === 0) { + fn.apply(that, a); } - return _results; - }).call(this); - } else { - return this.controls = []; - } - }; - - WSF_CONTROL.prototype.attach_events = function() { - var control, _i, _len, _ref; - console.log("Attached " + this.control_name); - _ref = this.controls; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - control = _ref[_i]; - if (control != null) { - control.initialize(); + }; + for (_i = 0, _len = requirements.length; _i < _len; _i++) { + r = requirements[_i]; + if (loaded[r] == null) { + loaded[r] = $.cachedAsset(r); + } + loaded[r].done(done); } - } + return done(); + }; }; - WSF_CONTROL.prototype.update = function(state) {}; - - WSF_CONTROL.prototype.process_actions = function(actions) { - var action, fn, _i, _len, _results; - _results = []; - for (_i = 0, _len = actions.length; _i < _len; _i++) { - action = actions[_i]; - try { - fn = eval(action.type); - _results.push(fn(action)); - } catch (e) { - _results.push(console.log("Failed preforming action " + action.type)); - } + build_control = function(control_name, state, control) { + var $el, type, typeclass; + $el = control.$el.find('[data-name=' + control_name + ']'); + type = $el.data('type'); + typeclass = null; + try { + typeclass = eval(type); + } catch (e) { + typeclass = WSF_CONTROL; } - return _results; + if ((type != null) && (typeclass != null)) { + return new typeclass(control, $el, control_name, state); + } + return null; }; - WSF_CONTROL.prototype.process_update = function(new_states) { - var control, _i, _len, _ref, _results; - if (new_states[this.control_name] != null) { - this.update(new_states[this.control_name]); + WSF_VALIDATOR = (function() { + + function WSF_VALIDATOR(parent_control, settings) { + this.parent_control = parent_control; + this.settings = settings; + this.error = this.settings.error; + return; } - _ref = this.controls; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - control = _ref[_i]; - if (control != null) { - _results.push(control.process_update(new_states)); + + WSF_VALIDATOR.prototype.validate = function() { + return true; + }; + + return WSF_VALIDATOR; + + })(); + + WSF_REGEXP_VALIDATOR = (function(_super) { + + __extends(WSF_REGEXP_VALIDATOR, _super); + + function WSF_REGEXP_VALIDATOR() { + WSF_REGEXP_VALIDATOR.__super__.constructor.apply(this, arguments); + this.pattern = new RegExp(this.settings.expression, 'g'); + } + + WSF_REGEXP_VALIDATOR.prototype.validate = function() { + var res, val; + val = this.parent_control.value(); + res = val.match(this.pattern); + return res !== null; + }; + + return WSF_REGEXP_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); + + WSF_CONTROL = (function() { + + WSF_CONTROL.prototype.requirements = []; + + function WSF_CONTROL(parent_control, $el, control_name, fullstate) { + this.parent_control = parent_control; + this.$el = $el; + this.control_name = control_name; + this.fullstate = fullstate; + this.state = this.fullstate.state; + this.load_subcontrols(); + this.isolation = "" + this.$el.data('isolation') === "1"; + this.$el.data('control', this); + this.initialize = lazy_load(this.requirements, this.attach_events, this); + return; + } + + WSF_CONTROL.prototype.load_subcontrols = function() { + var control_name, state; + if (this.fullstate.controls != null) { + return this.controls = (function() { + var _ref, _results; + _ref = this.fullstate.controls; + _results = []; + for (control_name in _ref) { + state = _ref[control_name]; + _results.push(build_control(control_name, state, this)); + } + return _results; + }).call(this); } else { - _results.push(void 0); + return this.controls = []; } - } - return _results; - }; - - WSF_CONTROL.prototype.get_context_state = function() { - if ((this.parent_control != null) && !this.isolation) { - return this.parent_control.get_context_state(); - } - return this.wrap(this.control_name, this.fullstate); - }; - - WSF_CONTROL.prototype.wrap = function(cname, state) { - var ctrs; - ctrs = {}; - ctrs[cname] = state; - state = { - "controls": ctrs }; - if (this.parent_control != null) { - return this.parent_control.wrap(this.parent_control.control_name, state); - } - return state; - }; - WSF_CONTROL.prototype.callback_url = function(params) { - if (this.parent_control != null) { - return this.parent_control.callback_url(params); - } - $.extend(params, this.url_params); - return this.url + '?' + $.param(params); - }; - - WSF_CONTROL.prototype.trigger_callback = function(control_name, event, event_parameter) { - var self; - if ((this.parent_control != null) && !this.isolation) { - return this.parent_control.trigger_callback(control_name, event, event_parameter); - } - self = this; - return $.ajax({ - type: 'POST', - url: this.callback_url({ - control_name: control_name, - event: event, - event_parameter: event_parameter - }), - data: JSON.stringify(this.get_context_state()), - processData: false, - contentType: 'application/json', - cache: false - }).done(function(new_states) { - if (new_states.actions != null) { - self.process_actions(new_states.actions); - } - return self.process_update(new_states); - }); - }; - - WSF_CONTROL.prototype.on = function(name, callback, context) { - if (this._events == null) { - this._events = {}; - } - if (this._events[name] == null) { - this._events[name] = []; - } - this._events[name].push({ - callback: callback, - context: context - }); - return this; - }; - - WSF_CONTROL.prototype.trigger = function(name) { - var ev, _i, _len, _ref, _ref1; - if (((_ref = this._events) != null ? _ref[name] : void 0) == null) { - return this; - } - _ref1 = this._events[name]; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - ev = _ref1[_i]; - ev.callback.call(ev.context); - } - return this; - }; - - WSF_CONTROL.prototype.remove = function() { - console.log("Removed " + this.control_name); - return this.$el.remove(); - }; - - return WSF_CONTROL; - -})(); - -WSF_PAGE_CONTROL = (function(_super) { - - __extends(WSF_PAGE_CONTROL, _super); - - function WSF_PAGE_CONTROL(fullstate) { - this.fullstate = fullstate; - this.state = this.fullstate.state; - this.parent_control = null; - this.$el = $('[data-name=' + this.state.id + ']'); - this.control_name = this.state.id; - this.url = this.state['url']; - this.url_params = jQuery.unparam(this.state['url_params']); - this.$el.data('control', this); - this.initialize = lazy_load(this.requirements, this.attach_events, this); - this.load_subcontrols(); - } - - WSF_PAGE_CONTROL.prototype.wrap = function(cname, state) { - return state; - }; - - WSF_PAGE_CONTROL.prototype.remove = function() { - console.log("Removed " + this.control_name); - return this.$el.remove(); - }; - - return WSF_PAGE_CONTROL; - -})(WSF_CONTROL); - -WSF_SLIDER_CONTROL = (function(_super) { - - __extends(WSF_SLIDER_CONTROL, _super); - - function WSF_SLIDER_CONTROL() { - return WSF_SLIDER_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_SLIDER_CONTROL.prototype.requirements = ['assets/bootstrap.min.js']; - - return WSF_SLIDER_CONTROL; - -})(WSF_CONTROL); - -controls = {}; - -WSF_BUTTON_CONTROL = (function(_super) { - - __extends(WSF_BUTTON_CONTROL, _super); - - function WSF_BUTTON_CONTROL() { - return WSF_BUTTON_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_BUTTON_CONTROL.prototype.attach_events = function() { - var self; - WSF_BUTTON_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - return this.$el.click(function(e) { - e.preventDefault(); - return self.click(); - }); - }; - - WSF_BUTTON_CONTROL.prototype.click = function() { - if (this.state['callback_click']) { - return this.trigger_callback(this.control_name, 'click'); - } - }; - - WSF_BUTTON_CONTROL.prototype.update = function(state) { - if (state.text != null) { - this.state['text'] = state.text; - return this.$el.text(state.text); - } - }; - - return WSF_BUTTON_CONTROL; - -})(WSF_CONTROL); - -WSF_INPUT_CONTROL = (function(_super) { - - __extends(WSF_INPUT_CONTROL, _super); - - function WSF_INPUT_CONTROL() { - return WSF_INPUT_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_INPUT_CONTROL.prototype.attach_events = function() { - var self; - WSF_INPUT_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - return this.$el.change(function() { - return self.change(); - }); - }; - - WSF_INPUT_CONTROL.prototype.change = function() { - this.state['text'] = this.$el.val(); - if (this.state['callback_change']) { - this.trigger_callback(this.control_name, 'change'); - } - return this.trigger('change'); - }; - - WSF_INPUT_CONTROL.prototype.value = function() { - return this.$el.val(); - }; - - WSF_INPUT_CONTROL.prototype.update = function(state) { - if (state.text != null) { - this.state['text'] = state.text; - return this.$el.val(state.text); - } - }; - - return WSF_INPUT_CONTROL; - -})(WSF_CONTROL); - -WSF_TEXTAREA_CONTROL = (function(_super) { - - __extends(WSF_TEXTAREA_CONTROL, _super); - - function WSF_TEXTAREA_CONTROL() { - return WSF_TEXTAREA_CONTROL.__super__.constructor.apply(this, arguments); - } - - return WSF_TEXTAREA_CONTROL; - -})(WSF_INPUT_CONTROL); - -WSF_CODEVIEW_CONTROL = (function(_super) { - - __extends(WSF_CODEVIEW_CONTROL, _super); - - function WSF_CODEVIEW_CONTROL() { - WSF_CODEVIEW_CONTROL.__super__.constructor.apply(this, arguments); - this.initialize = lazy_load(['assets/codemirror/codemirror.js', 'assets/codemirror/codemirror.css', 'assets/codemirror/estudio.css'], lazy_load(['assets/codemirror/eiffel.js'], this.attach_events, this), this); - } - - WSF_CODEVIEW_CONTROL.prototype.attach_events = function() { - WSF_CODEVIEW_CONTROL.__super__.attach_events.apply(this, arguments); - this.editor = CodeMirror.fromTextArea(this.$el[0], { - mode: "eiffel", - tabMode: "indent", - indentUnit: 4, - lineNumbers: true, - theme: 'estudio' - }); - return this.editor.setSize("100%", 700); - }; - - WSF_CODEVIEW_CONTROL.prototype.remove = function() { - this.editor.toTextArea(); - return WSF_CODEVIEW_CONTROL.__super__.remove.apply(this, arguments); - }; - - return WSF_CODEVIEW_CONTROL; - -})(WSF_INPUT_CONTROL); - -WSF_AUTOCOMPLETE_CONTROL = (function(_super) { - - __extends(WSF_AUTOCOMPLETE_CONTROL, _super); - - function WSF_AUTOCOMPLETE_CONTROL() { - return WSF_AUTOCOMPLETE_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_AUTOCOMPLETE_CONTROL.prototype.requirements = ['assets/typeahead.min.js']; - - WSF_AUTOCOMPLETE_CONTROL.prototype.attach_events = function() { - var self; - WSF_AUTOCOMPLETE_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - this.$el.typeahead({ - name: this.control_name, - template: this.state['template'], - engine: Mini, - remote: { - url: "", - replace: function(url, uriEncodedQuery) { - self.state['text'] = self.$el.val(); - return '?' + $.param({ - control_name: self.control_name, - event: 'autocomplete', - states: JSON.stringify(self.get_context_state()) - }); - }, - filter: function(parsedResponse) { - return parsedResponse[self.control_name]['suggestions']; - }, - fn: function() { - return self.trigger_callback(self.control_name, 'autocomplete'); + WSF_CONTROL.prototype.attach_events = function() { + var control, _i, _len, _ref; + console.log("Attached " + this.control_name); + _ref = this.controls; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + control = _ref[_i]; + if (control != null) { + control.initialize(); } } - }); - this.$el.on('typeahead:closed', function() { - return self.change(); - }); - return this.$el.on('typeahead:blured', function() { - return self.change(); - }); - }; - - return WSF_AUTOCOMPLETE_CONTROL; - -})(WSF_INPUT_CONTROL); - -WSF_CHECKBOX_CONTROL = (function(_super) { - - __extends(WSF_CHECKBOX_CONTROL, _super); - - function WSF_CHECKBOX_CONTROL() { - return WSF_CHECKBOX_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_CHECKBOX_CONTROL.prototype.attach_events = function() { - var self; - WSF_CHECKBOX_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - this.checked_value = this.state['checked_value']; - return this.$el.change(function() { - return self.change(); - }); - }; - - WSF_CHECKBOX_CONTROL.prototype.change = function() { - this.state['checked'] = this.$el.is(':checked'); - if (this.state['callback_change']) { - this.trigger_callback(this.control_name, 'change'); - } - return this.trigger('change'); - }; - - WSF_CHECKBOX_CONTROL.prototype.value = function() { - return this.$el.is(':checked'); - }; - - WSF_CHECKBOX_CONTROL.prototype.update = function(state) { - if (state.text != null) { - this.state['checked'] = state.checked; - return this.$el.prop('checked', state.checked); - } - }; - - return WSF_CHECKBOX_CONTROL; - -})(WSF_CONTROL); - -WSF_FORM_ELEMENT_CONTROL = (function(_super) { - - __extends(WSF_FORM_ELEMENT_CONTROL, _super); - - function WSF_FORM_ELEMENT_CONTROL() { - return WSF_FORM_ELEMENT_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_FORM_ELEMENT_CONTROL.prototype.attach_events = function() { - var self, validator, validatorclass, _i, _len, _ref; - WSF_FORM_ELEMENT_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - this.value_control = this.controls[0]; - if (this.value_control != null) { - this.value_control.on('change', this.change, this); - } - this.serverside_validator = false; - this.validators = []; - _ref = this.state['validators']; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - validator = _ref[_i]; - try { - validatorclass = eval(validator.name); - this.validators.push(new validatorclass(this, validator)); - } catch (e) { - this.serverside_validator = true; - } - } - }; - - WSF_FORM_ELEMENT_CONTROL.prototype.change = function() { - var validator, _i, _len, _ref; - _ref = this.validators; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - validator = _ref[_i]; - if (!validator.validate()) { - this.showerror(validator.error); - return; - } - } - this.showerror(""); - if (this.serverside_validator) { - this.trigger_callback(this.control_name, 'validate'); - } - }; - - WSF_FORM_ELEMENT_CONTROL.prototype.showerror = function(message) { - var errordiv; - this.$el.removeClass("has-error"); - this.$el.find(".validation").remove(); - if (message.length > 0) { - this.$el.addClass("has-error"); - errordiv = $("
").addClass('help-block').addClass('validation').text(message); - return this.$el.find(".col-lg-10").append(errordiv); - } - }; - - WSF_FORM_ELEMENT_CONTROL.prototype.update = function(state) { - if (state.error != null) { - return this.showerror(state.error); - } - }; - - WSF_FORM_ELEMENT_CONTROL.prototype.value = function() { - return this.value_control.value(); - }; - - return WSF_FORM_ELEMENT_CONTROL; - -})(WSF_CONTROL); - -WSF_HTML_CONTROL = (function(_super) { - - __extends(WSF_HTML_CONTROL, _super); - - function WSF_HTML_CONTROL() { - return WSF_HTML_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_HTML_CONTROL.prototype.value = function() { - return this.$el.html(); - }; - - WSF_HTML_CONTROL.prototype.update = function(state) { - if (state.html != null) { - this.state['html'] = state.html; - return this.$el.html(state.html); - } - }; - - return WSF_HTML_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, _i, _len, _ref; - WSF_CHECKBOX_LIST_CONTROL.__super__.attach_events.apply(this, arguments); - _ref = this.controls; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - control = _ref[_i]; - 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.controls; - 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); - -WSF_PROGRESS_CONTROL = (function(_super) { - - __extends(WSF_PROGRESS_CONTROL, _super); - - function WSF_PROGRESS_CONTROL() { - return WSF_PROGRESS_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_PROGRESS_CONTROL.prototype.attach_events = function() { - var runfetch, self; - WSF_PROGRESS_CONTROL.__super__.attach_events.apply(this, arguments); - self = this; - runfetch = function() { - return self.fetch(); }; - return this.int = setInterval(runfetch, 5000); - }; - WSF_PROGRESS_CONTROL.prototype.fetch = function() { - return this.trigger_callback(this.control_name, 'progress_fetch'); - }; + WSF_CONTROL.prototype.update = function(state) {}; - WSF_PROGRESS_CONTROL.prototype.update = function(state) { - if (state.progress != null) { - this.state['progress'] = state.progress; - return this.$el.children('.progress-bar').attr('aria-valuenow', state.progress).width(state.progress + '%'); + WSF_CONTROL.prototype.process_actions = function(actions) { + var action, fn, _i, _len, _results; + _results = []; + for (_i = 0, _len = actions.length; _i < _len; _i++) { + action = actions[_i]; + try { + fn = eval(action.type); + _results.push(fn(action)); + } catch (e) { + _results.push(console.log("Failed preforming action " + action.type)); + } + } + return _results; + }; + + WSF_CONTROL.prototype.process_update = function(new_states) { + var control, _i, _len, _ref, _results; + if (new_states[this.control_name] != null) { + this.update(new_states[this.control_name]); + } + _ref = this.controls; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + control = _ref[_i]; + if (control != null) { + _results.push(control.process_update(new_states)); + } else { + _results.push(void 0); + } + } + return _results; + }; + + WSF_CONTROL.prototype.get_context_state = function() { + if ((this.parent_control != null) && !this.isolation) { + return this.parent_control.get_context_state(); + } + return this.wrap(this.control_name, this.fullstate); + }; + + WSF_CONTROL.prototype.wrap = function(cname, state) { + var ctrs; + ctrs = {}; + ctrs[cname] = state; + state = { + "controls": ctrs + }; + if (this.parent_control != null) { + return this.parent_control.wrap(this.parent_control.control_name, state); + } + return state; + }; + + WSF_CONTROL.prototype.callback_url = function(params) { + if (this.parent_control != null) { + return this.parent_control.callback_url(params); + } + $.extend(params, this.url_params); + return this.url + '?' + $.param(params); + }; + + WSF_CONTROL.prototype.trigger_callback = function(control_name, event, event_parameter) { + var self; + if ((this.parent_control != null) && !this.isolation) { + return this.parent_control.trigger_callback(control_name, event, event_parameter); + } + self = this; + return $.ajax({ + type: 'POST', + url: this.callback_url({ + control_name: control_name, + event: event, + event_parameter: event_parameter + }), + data: JSON.stringify(this.get_context_state()), + processData: false, + contentType: 'application/json', + cache: false + }).done(function(new_states) { + if (new_states.actions != null) { + self.process_actions(new_states.actions); + } + return self.process_update(new_states); + }); + }; + + WSF_CONTROL.prototype.on = function(name, callback, context) { + if (this._events == null) { + this._events = {}; + } + if (this._events[name] == null) { + this._events[name] = []; + } + this._events[name].push({ + callback: callback, + context: context + }); + return this; + }; + + WSF_CONTROL.prototype.trigger = function(name) { + var ev, _i, _len, _ref, _ref1; + if (((_ref = this._events) != null ? _ref[name] : void 0) == null) { + return this; + } + _ref1 = this._events[name]; + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + ev = _ref1[_i]; + ev.callback.call(ev.context); + } + return this; + }; + + WSF_CONTROL.prototype.remove = function() { + console.log("Removed " + this.control_name); + return this.$el.remove(); + }; + + return WSF_CONTROL; + + })(); + + WSF_PAGE_CONTROL = (function(_super) { + + __extends(WSF_PAGE_CONTROL, _super); + + function WSF_PAGE_CONTROL(fullstate) { + this.fullstate = fullstate; + this.state = this.fullstate.state; + this.parent_control = null; + this.$el = $('[data-name=' + this.state.id + ']'); + this.control_name = this.state.id; + this.url = this.state['url']; + this.url_params = jQuery.unparam(this.state['url_params']); + this.$el.data('control', this); + this.initialize = lazy_load(this.requirements, this.attach_events, this); + this.load_subcontrols(); } + + WSF_PAGE_CONTROL.prototype.wrap = function(cname, state) { + return state; + }; + + WSF_PAGE_CONTROL.prototype.remove = function() { + console.log("Removed " + this.control_name); + return this.$el.remove(); + }; + + return WSF_PAGE_CONTROL; + + })(WSF_CONTROL); + + WSF_SLIDER_CONTROL = (function(_super) { + + __extends(WSF_SLIDER_CONTROL, _super); + + function WSF_SLIDER_CONTROL() { + return WSF_SLIDER_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_SLIDER_CONTROL.prototype.requirements = ['assets/bootstrap.min.js']; + + return WSF_SLIDER_CONTROL; + + })(WSF_CONTROL); + + controls = {}; + + WSF_BUTTON_CONTROL = (function(_super) { + + __extends(WSF_BUTTON_CONTROL, _super); + + function WSF_BUTTON_CONTROL() { + return WSF_BUTTON_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_BUTTON_CONTROL.prototype.attach_events = function() { + var self; + WSF_BUTTON_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + return this.$el.click(function(e) { + e.preventDefault(); + return self.click(); + }); + }; + + WSF_BUTTON_CONTROL.prototype.click = function() { + if (this.state['callback_click']) { + return this.trigger_callback(this.control_name, 'click'); + } + }; + + WSF_BUTTON_CONTROL.prototype.update = function(state) { + if (state.text != null) { + this.state['text'] = state.text; + return this.$el.text(state.text); + } + }; + + return WSF_BUTTON_CONTROL; + + })(WSF_CONTROL); + + WSF_INPUT_CONTROL = (function(_super) { + + __extends(WSF_INPUT_CONTROL, _super); + + function WSF_INPUT_CONTROL() { + return WSF_INPUT_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_INPUT_CONTROL.prototype.attach_events = function() { + var self; + WSF_INPUT_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + return this.$el.change(function() { + return self.change(); + }); + }; + + WSF_INPUT_CONTROL.prototype.change = function() { + this.state['text'] = this.$el.val(); + if (this.state['callback_change']) { + this.trigger_callback(this.control_name, 'change'); + } + return this.trigger('change'); + }; + + WSF_INPUT_CONTROL.prototype.value = function() { + return this.$el.val(); + }; + + WSF_INPUT_CONTROL.prototype.update = function(state) { + if (state.text != null) { + this.state['text'] = state.text; + return this.$el.val(state.text); + } + }; + + return WSF_INPUT_CONTROL; + + })(WSF_CONTROL); + + WSF_TEXTAREA_CONTROL = (function(_super) { + + __extends(WSF_TEXTAREA_CONTROL, _super); + + function WSF_TEXTAREA_CONTROL() { + return WSF_TEXTAREA_CONTROL.__super__.constructor.apply(this, arguments); + } + + return WSF_TEXTAREA_CONTROL; + + })(WSF_INPUT_CONTROL); + + WSF_CODEVIEW_CONTROL = (function(_super) { + + __extends(WSF_CODEVIEW_CONTROL, _super); + + function WSF_CODEVIEW_CONTROL() { + WSF_CODEVIEW_CONTROL.__super__.constructor.apply(this, arguments); + this.initialize = lazy_load(['assets/codemirror/codemirror.js', 'assets/codemirror/codemirror.css', 'assets/codemirror/estudio.css'], lazy_load(['assets/codemirror/eiffel.js'], this.attach_events, this), this); + } + + WSF_CODEVIEW_CONTROL.prototype.attach_events = function() { + WSF_CODEVIEW_CONTROL.__super__.attach_events.apply(this, arguments); + this.editor = CodeMirror.fromTextArea(this.$el[0], { + mode: "eiffel", + tabMode: "indent", + indentUnit: 4, + lineNumbers: true, + theme: 'estudio' + }); + return this.editor.setSize("100%", 700); + }; + + WSF_CODEVIEW_CONTROL.prototype.remove = function() { + this.editor.toTextArea(); + return WSF_CODEVIEW_CONTROL.__super__.remove.apply(this, arguments); + }; + + return WSF_CODEVIEW_CONTROL; + + })(WSF_INPUT_CONTROL); + + WSF_AUTOCOMPLETE_CONTROL = (function(_super) { + + __extends(WSF_AUTOCOMPLETE_CONTROL, _super); + + function WSF_AUTOCOMPLETE_CONTROL() { + return WSF_AUTOCOMPLETE_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_AUTOCOMPLETE_CONTROL.prototype.requirements = ['assets/typeahead.min.js']; + + WSF_AUTOCOMPLETE_CONTROL.prototype.attach_events = function() { + var self; + WSF_AUTOCOMPLETE_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + this.$el.typeahead({ + name: this.control_name, + template: this.state['template'], + engine: Mini, + remote: { + url: "", + replace: function(url, uriEncodedQuery) { + self.state['text'] = self.$el.val(); + return '?' + $.param({ + control_name: self.control_name, + event: 'autocomplete', + states: JSON.stringify(self.get_context_state()) + }); + }, + filter: function(parsedResponse) { + return parsedResponse[self.control_name]['suggestions']; + }, + fn: function() { + return self.trigger_callback(self.control_name, 'autocomplete'); + } + } + }); + this.$el.on('typeahead:closed', function() { + return self.change(); + }); + return this.$el.on('typeahead:blured', function() { + return self.change(); + }); + }; + + return WSF_AUTOCOMPLETE_CONTROL; + + })(WSF_INPUT_CONTROL); + + WSF_CHECKBOX_CONTROL = (function(_super) { + + __extends(WSF_CHECKBOX_CONTROL, _super); + + function WSF_CHECKBOX_CONTROL() { + return WSF_CHECKBOX_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_CHECKBOX_CONTROL.prototype.attach_events = function() { + var self; + WSF_CHECKBOX_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + this.checked_value = this.state['checked_value']; + return this.$el.change(function() { + return self.change(); + }); + }; + + WSF_CHECKBOX_CONTROL.prototype.change = function() { + this.state['checked'] = this.$el.is(':checked'); + if (this.state['callback_change']) { + this.trigger_callback(this.control_name, 'change'); + } + return this.trigger('change'); + }; + + WSF_CHECKBOX_CONTROL.prototype.value = function() { + return this.$el.is(':checked'); + }; + + WSF_CHECKBOX_CONTROL.prototype.update = function(state) { + if (state.text != null) { + this.state['checked'] = state.checked; + return this.$el.prop('checked', state.checked); + } + }; + + return WSF_CHECKBOX_CONTROL; + + })(WSF_CONTROL); + + WSF_FORM_ELEMENT_CONTROL = (function(_super) { + + __extends(WSF_FORM_ELEMENT_CONTROL, _super); + + function WSF_FORM_ELEMENT_CONTROL() { + return WSF_FORM_ELEMENT_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_FORM_ELEMENT_CONTROL.prototype.attach_events = function() { + var self, validator, validatorclass, _i, _len, _ref; + WSF_FORM_ELEMENT_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + this.value_control = this.controls[0]; + if (this.value_control != null) { + this.value_control.on('change', this.change, this); + } + this.serverside_validator = false; + this.validators = []; + _ref = this.state['validators']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + validator = _ref[_i]; + try { + validatorclass = eval(validator.name); + this.validators.push(new validatorclass(this, validator)); + } catch (e) { + this.serverside_validator = true; + } + } + }; + + WSF_FORM_ELEMENT_CONTROL.prototype.change = function() { + var validator, _i, _len, _ref; + _ref = this.validators; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + validator = _ref[_i]; + if (!validator.validate()) { + this.showerror(validator.error); + return; + } + } + this.showerror(""); + if (this.serverside_validator) { + this.trigger_callback(this.control_name, 'validate'); + } + }; + + WSF_FORM_ELEMENT_CONTROL.prototype.showerror = function(message) { + var errordiv; + this.$el.removeClass("has-error"); + this.$el.find(".validation").remove(); + if (message.length > 0) { + this.$el.addClass("has-error"); + errordiv = $("
").addClass('help-block').addClass('validation').text(message); + return this.$el.find(".col-lg-10").append(errordiv); + } + }; + + WSF_FORM_ELEMENT_CONTROL.prototype.update = function(state) { + if (state.error != null) { + return this.showerror(state.error); + } + }; + + WSF_FORM_ELEMENT_CONTROL.prototype.value = function() { + return this.value_control.value(); + }; + + return WSF_FORM_ELEMENT_CONTROL; + + })(WSF_CONTROL); + + WSF_HTML_CONTROL = (function(_super) { + + __extends(WSF_HTML_CONTROL, _super); + + function WSF_HTML_CONTROL() { + return WSF_HTML_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_HTML_CONTROL.prototype.value = function() { + return this.$el.html(); + }; + + WSF_HTML_CONTROL.prototype.update = function(state) { + if (state.html != null) { + this.state['html'] = state.html; + return this.$el.html(state.html); + } + }; + + return WSF_HTML_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, _i, _len, _ref; + WSF_CHECKBOX_LIST_CONTROL.__super__.attach_events.apply(this, arguments); + _ref = this.controls; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + control = _ref[_i]; + 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.controls; + 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); + + WSF_PROGRESS_CONTROL = (function(_super) { + + __extends(WSF_PROGRESS_CONTROL, _super); + + function WSF_PROGRESS_CONTROL() { + return WSF_PROGRESS_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_PROGRESS_CONTROL.prototype.attach_events = function() { + var runfetch, self; + WSF_PROGRESS_CONTROL.__super__.attach_events.apply(this, arguments); + self = this; + runfetch = function() { + return self.fetch(); + }; + return this.int = setInterval(runfetch, 5000); + }; + + WSF_PROGRESS_CONTROL.prototype.fetch = function() { + return this.trigger_callback(this.control_name, 'progress_fetch'); + }; + + WSF_PROGRESS_CONTROL.prototype.update = function(state) { + if (state.progress != null) { + this.state['progress'] = state.progress; + return this.$el.children('.progress-bar').attr('aria-valuenow', state.progress).width(state.progress + '%'); + } + }; + + WSF_PROGRESS_CONTROL.prototype.remove = function() { + clearInterval(this.int); + return WSF_PROGRESS_CONTROL.__super__.remove.apply(this, arguments); + }; + + return WSF_PROGRESS_CONTROL; + + })(WSF_CONTROL); + + WSF_PAGINATION_CONTROL = (function(_super) { + + __extends(WSF_PAGINATION_CONTROL, _super); + + function WSF_PAGINATION_CONTROL() { + return WSF_PAGINATION_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_PAGINATION_CONTROL.prototype.attach_events = function() { + var self; + self = this; + return this.$el.on('click', 'a', function(e) { + e.preventDefault(); + return self.click(e); + }); + }; + + WSF_PAGINATION_CONTROL.prototype.click = function(e) { + var nr; + nr = $(e.target).data('nr'); + if (nr === "next") { + return this.trigger_callback(this.control_name, "next"); + } else if (nr === "prev") { + return this.trigger_callback(this.control_name, "prev"); + } else { + return this.trigger_callback(this.control_name, "goto", nr); + } + }; + + WSF_PAGINATION_CONTROL.prototype.update = function(state) { + if (state._html != null) { + return this.$el.html($(state._html).html()); + } + }; + + return WSF_PAGINATION_CONTROL; + + })(WSF_CONTROL); + + WSF_GRID_CONTROL = (function(_super) { + + __extends(WSF_GRID_CONTROL, _super); + + function WSF_GRID_CONTROL() { + return WSF_GRID_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_GRID_CONTROL.prototype.attach_events = function() { + var self; + WSF_GRID_CONTROL.__super__.attach_events.apply(this, arguments); + return self = this; + }; + + WSF_GRID_CONTROL.prototype.update = function(state) { + if (state.datasource != null) { + this.state['datasource'] = state.datasource; + } + if (state._body != null) { + return this.$el.find('tbody').html(state._body); + } + }; + + return WSF_GRID_CONTROL; + + })(WSF_CONTROL); + + WSF_REPEATER_CONTROL = (function(_super) { + + __extends(WSF_REPEATER_CONTROL, _super); + + function WSF_REPEATER_CONTROL() { + return WSF_REPEATER_CONTROL.__super__.constructor.apply(this, arguments); + } + + WSF_REPEATER_CONTROL.prototype.attach_events = function() { + var self; + WSF_REPEATER_CONTROL.__super__.attach_events.apply(this, arguments); + return self = this; + }; + + WSF_REPEATER_CONTROL.prototype.update = function(state) { + if (state.datasource != null) { + this.state['datasource'] = state.datasource; + } + if (state._body != null) { + this.$el.find('.repeater_content').html(state._body); + return console.log(state._body); + } + }; + + return WSF_REPEATER_CONTROL; + + })(WSF_CONTROL); + + show_alert = function(action) { + return alert(action.message); }; - WSF_PROGRESS_CONTROL.prototype.remove = function() { - clearInterval(this.int); - return WSF_PROGRESS_CONTROL.__super__.remove.apply(this, arguments); - }; - - return WSF_PROGRESS_CONTROL; - -})(WSF_CONTROL); - -WSF_PAGINATION_CONTROL = (function(_super) { - - __extends(WSF_PAGINATION_CONTROL, _super); - - function WSF_PAGINATION_CONTROL() { - return WSF_PAGINATION_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_PAGINATION_CONTROL.prototype.attach_events = function() { - var self; - self = this; - return this.$el.on('click', 'a', function(e) { - e.preventDefault(); - return self.click(e); + start_modal = lazy_load(['assets/bootstrap.min.js'], function(action) { + var cssclass, modal; + cssclass = ""; + if (action.type === "start_modal_big") { + cssclass = " big"; + } + modal = $("
\n
\n
\n
\n \n

" + action.title + "

\n
\n
\n \n
\n
\n
\n
"); + modal.appendTo('body'); + modal.modal('show'); + modal.on('hidden.bs.modal', function() { + $(modal.find('[data-name]').get().reverse()).each(function(i, value) { + $(value).data('control').remove(); + }); }); - }; - - WSF_PAGINATION_CONTROL.prototype.click = function(e) { - var nr; - nr = $(e.target).data('nr'); - if (nr === "next") { - return this.trigger_callback(this.control_name, "next"); - } else if (nr === "prev") { - return this.trigger_callback(this.control_name, "prev"); - } else { - return this.trigger_callback(this.control_name, "goto", nr); - } - }; - - WSF_PAGINATION_CONTROL.prototype.update = function(state) { - if (state._html != null) { - return this.$el.html($(state._html).html()); - } - }; - - return WSF_PAGINATION_CONTROL; - -})(WSF_CONTROL); - -WSF_GRID_CONTROL = (function(_super) { - - __extends(WSF_GRID_CONTROL, _super); - - function WSF_GRID_CONTROL() { - return WSF_GRID_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_GRID_CONTROL.prototype.attach_events = function() { - var self; - WSF_GRID_CONTROL.__super__.attach_events.apply(this, arguments); - return self = this; - }; - - WSF_GRID_CONTROL.prototype.update = function(state) { - if (state.datasource != null) { - this.state['datasource'] = state.datasource; - } - if (state._body != null) { - return this.$el.find('tbody').html(state._body); - } - }; - - return WSF_GRID_CONTROL; - -})(WSF_CONTROL); - -WSF_REPEATER_CONTROL = (function(_super) { - - __extends(WSF_REPEATER_CONTROL, _super); - - function WSF_REPEATER_CONTROL() { - return WSF_REPEATER_CONTROL.__super__.constructor.apply(this, arguments); - } - - WSF_REPEATER_CONTROL.prototype.attach_events = function() { - var self; - WSF_REPEATER_CONTROL.__super__.attach_events.apply(this, arguments); - return self = this; - }; - - WSF_REPEATER_CONTROL.prototype.update = function(state) { - if (state.datasource != null) { - this.state['datasource'] = state.datasource; - } - if (state._body != null) { - this.$el.find('.repeater_content').html(state._body); - return console.log(state._body); - } - }; - - return WSF_REPEATER_CONTROL; - -})(WSF_CONTROL); - -show_alert = function(action) { - return alert(action.message); -}; - -start_modal = lazy_load(['assets/bootstrap.min.js'], function(action) { - var cssclass, modal; - cssclass = ""; - if (action.type === "start_modal_big") { - cssclass = " big"; - } - modal = $("
\n
\n
\n
\n \n

" + action.title + "

\n
\n
\n \n
\n
\n
\n
"); - modal.appendTo('body'); - modal.modal('show'); - modal.on('hidden.bs.modal', function() { - $(modal.find('[data-name]').get().reverse()).each(function(i, value) { - $(value).data('control').remove(); + return $.get(action.url, { + ajax: 1 + }).done(function(data) { + return modal.find('.modal-body').append(data); }); }); - return $.get(action.url, { - ajax: 1 - }).done(function(data) { - return modal.find('.modal-body').append(data); - }); -}); -start_modal_big = start_modal; + start_modal_big = start_modal; + +}).call(this); diff --git a/examples/widgetapp/base_page.e b/examples/widgetapp/base_page.e index d9c29114..9dd713d4 100644 --- a/examples/widgetapp/base_page.e +++ b/examples/widgetapp/base_page.e @@ -19,14 +19,20 @@ feature initialize_controls local btn: WSF_BUTTON_CONTROL + dropdown:WSF_DROPDOWN_CONTROL do create control.make ("container") control.add_class ("container") + create dropdown.make_with_tag_name ("mydropdown", "Dropdown", "li") + dropdown.add_link_item ("Example link 1", "#") + dropdown.add_divider + dropdown.add_link_item ("Example link 2", "#") create navbar.make_with_brand ("navbar1", "Example") navbar.add_list_element (create {WSF_BASIC_CONTROL}.make_with_body ("a", "href=%"/%"", "Home")) navbar.add_list_element (create {WSF_BASIC_CONTROL}.make_with_body ("a", "href=%"/grid%"", "Grid")) navbar.add_list_element (create {WSF_BASIC_CONTROL}.make_with_body ("a", "href=%"/repeater%"", "Repeater")) navbar.add_list_element (create {WSF_BASIC_CONTROL}.make_with_body ("a", "href=%"/slider%"", "Slider")) + navbar.add_element (dropdown) navbar.add_list_element_right (create {WSF_BASIC_CONTROL}.make_with_body ("a", "href=%"/about%"", "About")) create btn.make ("scode", "Show Code") btn.set_click_event (agent show_code)