Load needed libraries dynamically

This commit is contained in:
YNH Webdev
2013-09-28 00:30:29 +02:00
parent 8353f34c45
commit aa9f4c4ed8
9 changed files with 60 additions and 23 deletions

View File

@@ -103,14 +103,13 @@ feature -- Implementation
create Result.make_empty create Result.make_empty
if not ajax then if not ajax then
Result.append ("<html><head>") Result.append ("<html><head>")
Result.append ("<link href=%"/bootstrap.min.css%" rel=%"stylesheet%">") Result.append ("<link href=%"assets/bootstrap.min.css%" rel=%"stylesheet%">")
Result.append ("<link href=%"/widget.css%" rel=%"stylesheet%">") Result.append ("<link href=%"assets/widget.css%" rel=%"stylesheet%">")
Result.append ("</head><body data-name=%"" + control_name + "%" data-type=%"WSF_PAGE_CONTROL%">") Result.append ("</head><body data-name=%"" + control_name + "%" data-type=%"WSF_PAGE_CONTROL%">")
Result.append (control.render) Result.append (control.render)
Result.append ("<script src=%"/jquery.min.js%"></script>") Result.append ("<script src=%"assets/jquery.min.js%"></script>")
Result.append ("<script src=%"/typeahead.min.js%"></script>") Result.append ("<script src=%"assets/bootstrap.min.js%"></script>")
Result.append ("<script src=%"/bootstrap.min.js%"></script>") Result.append ("<script src=%"assets/widget.js%"></script>")
Result.append ("<script src=%"/widget.js%"></script>")
Result.append ("<script type=%"text/javascript%">$(function() {var page= new WSF_PAGE_CONTROL(") Result.append ("<script type=%"text/javascript%">$(function() {var page= new WSF_PAGE_CONTROL(")
Result.append (full_state.representation) Result.append (full_state.representation)
Result.append (");page.attach_events();});</script>") Result.append (");page.attach_events();});</script>")
@@ -120,7 +119,7 @@ feature -- Implementation
Result.append (control.render) Result.append (control.render)
Result.append ("<script type=%"text/javascript%">$(function() {var page= new WSF_PAGE_CONTROL(") Result.append ("<script type=%"text/javascript%">$(function() {var page= new WSF_PAGE_CONTROL(")
Result.append (full_state.representation) Result.append (full_state.representation)
Result.append (");page.attach_events();});</script>") Result.append (");page.initialize();});</script>")
Result.append ("</div>") Result.append ("</div>")
end end

View File

@@ -84,12 +84,7 @@ feature -- Router and Filter
-- NOTE: you could put all those files in a specific folder, and use WSF_FILE_SYSTEM_HANDLER with "/" -- NOTE: you could put all those files in a specific folder, and use WSF_FILE_SYSTEM_HANDLER with "/"
-- this way, it handles the caching and so on -- this way, it handles the caching and so on
map_agent_uri ("/widget.js", agent load_file("widget.js", ?, ?), Void) router.handle_with_request_methods ("/assets", create {WSF_FILE_SYSTEM_HANDLER}.make_hidden ("assets"), router.methods_GET)
map_agent_uri ("/jquery.min.js", agent load_file("jquery.min.js", ?, ?), Void)
map_agent_uri ("/bootstrap.min.js", agent load_file("bootstrap.min.js", ?, ?), Void)
map_agent_uri ("/typeahead.min.js", agent load_file("typeahead.min.js", ?, ?), Void)
map_agent_uri ("/widget.css", agent load_file("widget.css", ?, ?), Void)
map_agent_uri ("/bootstrap.min.css", agent load_file("bootstrap.min.css", ?, ?), Void)
end end
feature -- Helper: mapping feature -- Helper: mapping
@@ -141,12 +136,5 @@ feature -- Execution
page.execute page.execute
end end
load_file (name: STRING; request: WSF_REQUEST; response: WSF_RESPONSE)
local
f: WSF_FILE_RESPONSE
do
create f.make (name)
response.send (f)
end
end end

View File

@@ -1,5 +1,12 @@
#IMPORTANT PLEASE COMPILE WITH:: coffee -cbw widget.coffee #IMPORTANT PLEASE COMPILE WITH:: coffee -cbw widget.coffee
cache = {} cache = {}
jQuery.cachedScript = (url, options) ->
options = $.extend(options or {},
dataType: "script"
cache: true
url: url
)
jQuery.ajax options
jQuery.unparam = (value) -> jQuery.unparam = (value) ->
params = {} params = {}
pieces = value.split("&") pieces = value.split("&")
@@ -71,12 +78,24 @@ class WSF_MAX_VALIDATOR extends WSF_VALIDATOR
class WSF_CONTROL class WSF_CONTROL
requirements : []
constructor: (@parent_control, @$el, @control_name, @fullstate)-> constructor: (@parent_control, @$el, @control_name, @fullstate)->
@state = @fullstate.state @state = @fullstate.state
@load_subcontrols() @load_subcontrols()
@isolation = (""+@$el.data('isolation')=="1") @isolation = (""+@$el.data('isolation')=="1")
@$el.data('control',@) @$el.data('control',@)
return return
initialize:()->
counter = @requirements.length + 1
self = @
done = ()->
counter = counter - 1
if counter == 0
self.attach_events()
return
for r in @requirements
$.cachedScript(r).done(done)
done()
load_subcontrols: ()-> load_subcontrols: ()->
if @fullstate.controls? if @fullstate.controls?
@@ -84,12 +103,11 @@ class WSF_CONTROL
else else
@controls = [] @controls = []
attach_events: ()-> attach_events: ()->
console.log "Attached #{@control_name}" console.log "Attached #{@control_name}"
for control in @controls for control in @controls
if control? if control?
control.attach_events() control.initialize()
return return
update: (state)-> update: (state)->
@@ -235,6 +253,7 @@ class WSF_INPUT_CONTROL extends WSF_CONTROL
class WSF_TEXTAREA_CONTROL extends WSF_INPUT_CONTROL class WSF_TEXTAREA_CONTROL extends WSF_INPUT_CONTROL
class WSF_AUTOCOMPLETE_CONTROL extends WSF_INPUT_CONTROL class WSF_AUTOCOMPLETE_CONTROL extends WSF_INPUT_CONTROL
requirements: ['assets/typeahead.min.js']
attach_events: () -> attach_events: () ->
super super
self = @ self = @

View File

@@ -5,6 +5,15 @@ var Mini, WSF_AUTOCOMPLETE_CONTROL, WSF_BUTTON_CONTROL, WSF_CHECKBOX_CONTROL, WS
cache = {}; cache = {};
jQuery.cachedScript = function(url, options) {
options = $.extend(options || {}, {
dataType: "script",
cache: true,
url: url
});
return jQuery.ajax(options);
};
jQuery.unparam = function(value) { jQuery.unparam = function(value) {
var i, l, pair, params, pieces; var i, l, pair, params, pieces;
params = {}; params = {};
@@ -131,6 +140,8 @@ WSF_MAX_VALIDATOR = (function(_super) {
WSF_CONTROL = (function() { WSF_CONTROL = (function() {
WSF_CONTROL.prototype.requirements = [];
function WSF_CONTROL(parent_control, $el, control_name, fullstate) { function WSF_CONTROL(parent_control, $el, control_name, fullstate) {
this.parent_control = parent_control; this.parent_control = parent_control;
this.$el = $el; this.$el = $el;
@@ -143,6 +154,24 @@ WSF_CONTROL = (function() {
return; return;
} }
WSF_CONTROL.prototype.initialize = function() {
var counter, done, r, self, _i, _len, _ref;
counter = this.requirements.length + 1;
self = this;
done = function() {
counter = counter - 1;
if (counter === 0) {
self.attach_events();
}
};
_ref = this.requirements;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
r = _ref[_i];
$.cachedScript(r).done(done);
}
return done();
};
WSF_CONTROL.prototype.load_subcontrols = function() { WSF_CONTROL.prototype.load_subcontrols = function() {
var control_name, state; var control_name, state;
if (this.fullstate.controls != null) { if (this.fullstate.controls != null) {
@@ -168,7 +197,7 @@ WSF_CONTROL = (function() {
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
control = _ref[_i]; control = _ref[_i];
if (control != null) { if (control != null) {
control.attach_events(); control.initialize();
} }
} }
}; };
@@ -423,6 +452,8 @@ WSF_AUTOCOMPLETE_CONTROL = (function(_super) {
return WSF_AUTOCOMPLETE_CONTROL.__super__.constructor.apply(this, arguments); 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() { WSF_AUTOCOMPLETE_CONTROL.prototype.attach_events = function() {
var self; var self;
WSF_AUTOCOMPLETE_CONTROL.__super__.attach_events.apply(this, arguments); WSF_AUTOCOMPLETE_CONTROL.__super__.attach_events.apply(this, arguments);