Commit dc9702f4 authored by Tristan Cavelier's avatar Tristan Cavelier

RenderJs source code re-indented correctly

parent 42731279
......@@ -2,7 +2,8 @@
// still it's possible to override this and use explicit gadget rendering
var RENDERJS_ENABLE_IMPLICIT_GADGET_RENDERING = true;
// Add required by RenderJs jstorage library only if used HTML application uses requirejs
// Add required by RenderJs jstorage library only if used HTML application
// uses requirejs
if (typeof require !== 'undefined') {
require(["../../../../lib/jstorage/jstorage.js"], function(util) {
});
......@@ -14,19 +15,15 @@ if (typeof console === "undefined" || typeof console.log === "undefined") {
console.log = function() {};
}
/*
* Generic Gadget library renderer
*/
var RenderJs = (function () {
// a variable indicating if current gadget loading is over or not
var is_ready = false;
return {
bootstrap: function (root){
bootstrap: function (root) {
/* initial load application gadget */
RenderJs.loadGadgetFromUrl(root);
RenderJs.load(root);
......@@ -42,7 +39,7 @@ var RenderJs = (function () {
});
},
updateAndRecurse: function(gadget, data){
updateAndRecurse: function(gadget, data) {
/* Update current gadget and recurse down */
gadget.append(data);
// a gadget may contain sub gadgets
......@@ -51,7 +48,8 @@ var RenderJs = (function () {
loadGadgetFromUrl: function(gadget) {
/* Load gadget's SPECs from URL */
var url, gadget_id, gadget_property, cacheable, cache_id, app_cache, data, gadget_js;
var url, gadget_id, gadget_property, cacheable, cache_id,
app_cache, data, gadget_js;
url = gadget.attr("data-gadget");
gadget_id = gadget.attr("id");
......@@ -61,50 +59,56 @@ var RenderJs = (function () {
// XXX: update Gadget's instance with contents of "data-gadget-property"
if (url!==undefined && url!==""){
if (url !== undefined && url !== ""){
cacheable = gadget.attr("data-gadget-cacheable");
cache_id = gadget.attr("data-gadget-cache-id");
if (cacheable!==undefined && cache_id!==undefined){
if (cacheable !== undefined && cache_id !== undefined){
cacheable = Boolean(parseInt(cacheable));
}
//cacheable = false ; // to develop faster
if (cacheable) {
// get from cache if possible, use last part from URL as cache_key
// get from cache if possible, use last part from URL as
// cache_key
app_cache = RenderJs.Cache.get(cache_id, undefined);
if(app_cache===undefined || app_cache===null){
if(app_cache === undefined || app_cache === null){
// not in cache so we pull from network and cache
$.ajax({url:url,
yourCustomData: {"gadget_id": gadget_id, "cache_id": cache_id},
$.ajax({
url:url,
yourCustomData: {
"gadget_id": gadget_id, "cache_id": cache_id
},
success: function (data) {
cache_id = this.yourCustomData.cache_id;
gadget_id = this.yourCustomData.gadget_id;
RenderJs.Cache.set(cache_id, data);
RenderJs.GadgetIndex.getGadgetById(gadget_id).setReady();
RenderJs.GadgetIndex.getGadgetById(gadget_id).
setReady();
RenderJs.updateAndRecurse(gadget, data);
RenderJs.checkAndTriggerReady();
}});
}
else {
});
} else {
// get from cache
data = app_cache;
gadget_js.setReady();
this.updateAndRecurse(gadget, data);
this.checkAndTriggerReady();
}
}
else {
} else {
// not to be cached
$.ajax({url:url,
$.ajax({
url:url,
yourCustomData: {"gadget_id": gadget_id},
success: function (data) {
gadget_id = this.yourCustomData.gadget_id;
RenderJs.GadgetIndex.getGadgetById(gadget_id).setReady();
RenderJs.GadgetIndex.getGadgetById(gadget_id).
setReady();
RenderJs.updateAndRecurse(gadget, data);
RenderJs.checkAndTriggerReady();
}});
}
});
}
else {
} else {
// gadget is an inline one so no need to load it from network
gadget_js.setReady();
RenderJs.checkAndTriggerReady();
......@@ -125,15 +129,16 @@ var RenderJs = (function () {
is_ready = value;
},
checkAndTriggerReady: function() {
checkAndTriggerReady: function () {
/*
* Trigger "ready" event only if all gadgets were marked as "ready"
*/
var is_gadget_list_loaded;
is_gadget_list_loaded = RenderJs.GadgetIndex.isGadgetListLoaded();
if (is_gadget_list_loaded){
if (is_gadget_list_loaded) {
if (!RenderJs.isReady()) {
RenderJs.GadgetIndex.getRootGadget().getDom().trigger("ready");
RenderJs.GadgetIndex.getRootGadget().getDom().
trigger("ready");
RenderJs.setReady(true);
}
//is_ready = true;
......@@ -143,41 +148,49 @@ var RenderJs = (function () {
update: function (root) {
/* update gadget with data from remote source */
root.find("[gadget]").each(function(i,v){RenderJs.updateGadgetData($(this));});
root.find("[gadget]").each(function (i,v) {
RenderJs.updateGadgetData($(this));
});
},
updateGadgetWithDataHandler: function (result) {
var data_handler;
data_handler = this.yourCustomData.data_handler;
if (data_handler!==undefined){
if (data_handler !== undefined){
eval(data_handler+ "(result)");
}
},
updateGadgetData: function(gadget) {
updateGadgetData: function (gadget) {
/* Do real gagdet update here */
var data_source, data_handler;
data_source = gadget.attr("data-gadget-source");
data_handler = gadget.attr("data-gadget-handler");
// acquire data and pass it to method handler
if (data_source!==undefined && data_source!==""){
$.ajax({url:data_source,
if (data_source !== undefined && data_source !== ""){
$.ajax({
url:data_source,
dataType: "json",
yourCustomData: {"data_handler": data_handler},
success: RenderJs.updateGadgetWithDataHandler});}
success: RenderJs.updateGadgetWithDataHandler
});
}
},
addGadget: function(dom_id, gadget, gadget_data_handler, gadget_data_source) {
addGadget: function(dom_id, gadget, gadget_data_handler,
gadget_data_source) {
/*
* add new gadget and render it
*/
var html_string;
tab_container=$('#'+dom_id);
tab_container = $('#'+dom_id);
tab_container.empty();
html_string =['<div class="gadget" ',
html_string = [
'<div class="gadget" ',
'data-gadget="' + gadget + '"',
'data-gadget-handler="' + gadget_data_handler + '" ',
'data-gadget-source="' + gadget_data_source +'"></div>'].join('\n');
'data-gadget-source="' + gadget_data_source +'"></div>'
].join('\n');
tab_container.append(html_string);
tab_gadget = tab_container.find(".gadget");
......@@ -185,28 +198,30 @@ var RenderJs = (function () {
RenderJs.setReady(false);
RenderJs.loadGadgetFromUrl(tab_gadget);
// clear previous events
RenderJs.GadgetIndex.getRootGadget().getDom().bind("ready", function (){
RenderJs.GadgetIndex.getRootGadget().getDom().bind(
"ready", function (){
if (!is_ready){
RenderJs.updateGadgetData(tab_gadget);
is_ready = true;
}
});
}
);
return tab_gadget;
},
Cache : (function() {
Cache: (function() {
/*
* Generic cache implementation that can fall back to local namespace storage
* if no "modern" storage like localStorage is available
* Generic cache implementation that can fall back to local
* namespace storage if no "modern" storage like localStorage
* is available
*/
return {
ROOT_CACHE_ID: 'APP_CACHE',
getCacheId: function (cache_id) {
/* We should have a way to 'purge' localStorage by setting a ROOT_CACHE_ID in all browser
* instances
/*
* We should have a way to 'purge' localStorage by setting a
* ROOT_CACHE_ID in all browser instances
*/
return this.ROOT_CACHE_ID + cache_id;
},
......@@ -221,8 +236,7 @@ var RenderJs = (function () {
localStorage.setItem(mod, mod);
localStorage.removeItem(mod);
return true;
}
catch (e) {
} catch (e) {
return false;
}
},
......@@ -231,22 +245,25 @@ var RenderJs = (function () {
/* Get cache key value */
cache_id = this.getCacheId(cache_id);
if (this.hasLocalStorage()) {
return this.LocalStorageCachePlugin.get(cache_id, default_value);
return this.LocalStorageCachePlugin.
get(cache_id, default_value);
}
//fallback to javscript namespace cache
return this.NameSpaceStorageCachePlugin.get(cache_id, default_value);
return this.NameSpaceStorageCachePlugin.
get(cache_id, default_value);
},
set: function (cache_id, data) {
/* Set cache key value */
cache_id = this.getCacheId(cache_id);
if (this.hasLocalStorage()){
this.LocalStorageCachePlugin.set(cache_id, data);}
else{
this.NameSpaceStorageCachePlugin.set(cache_id, data);}
if (this.hasLocalStorage()) {
this.LocalStorageCachePlugin.set(cache_id, data);
} else {
this.NameSpaceStorageCachePlugin.set(cache_id, data);
}
},
LocalStorageCachePlugin : (function() {
LocalStorageCachePlugin: (function() {
/*
* This plugin saves using HTML5 localStorage.
*/
......@@ -260,13 +277,13 @@ var RenderJs = (function () {
/* Set cache key value */
$.jStorage.set(cache_id, data);
}
}}()),
}
}()),
NameSpaceStorageCachePlugin: (function() {
/*
* This plugin saves within current page namespace.
*/
var namespace = {};
return {
......@@ -284,7 +301,7 @@ var RenderJs = (function () {
}}()),
Gadget: ( function (id, dom) {
Gadget: (function (id, dom) {
/*
* Javascript Gadget representation
*/
......@@ -315,41 +332,41 @@ var RenderJs = (function () {
};
}),
TabbularGadget : (function () {
TabbularGadget: (function () {
/*
* Generic tabular gadget
*/
return {
toggleVisibility: function(visible_dom) {
/*
* Set tab as active visually and mark as not active rest.
*/
$(".selected").addClass("not_selected"); $(".selected").removeClass("selected");
$(".selected").addClass("not_selected");
$(".selected").removeClass("selected");
visible_dom.addClass("selected");
visible_dom.removeClass("not_selected");
},
addNewTabGadget: function(dom_id, gadget, gadget_data_handler, gadget_data_source) {
addNewTabGadget: function(dom_id, gadget, gadget_data_handler,
gadget_data_source) {
/*
* add new gadget and render it
*/
tab_gadget = RenderJs.addGadget(dom_id, gadget, gadget_data_handler, gadget_data_source)
tab_gadget = RenderJs.addGadget(
dom_id, gadget, gadget_data_handler, gadget_data_source
);
// XXX: we should unregister all gadgets (if any we replace now in DOM)
}
}
}()),
}}()),
GadgetIndex : (function () {
GadgetIndex: (function () {
/*
* Generic gadget index placeholder
*/
var gadget_list = [];
return {
getGadgetList: function() {
/*
* Return list of registered gadgets
......@@ -369,7 +386,7 @@ var RenderJs = (function () {
* Unregister gadget
*/
var index = $.inArray(gadget, gadget_list);
if (index!==-1) {
if (index !== -1) {
gadget_list.splice(index, 1);
}
},
......@@ -382,9 +399,11 @@ var RenderJs = (function () {
gadget = undefined;
$(RenderJs.GadgetIndex.getGadgetList()).each(
function (index, value) {
if (value.getId()===gadget_id) {
if (value.getId() === gadget_id) {
gadget = value;
}});
}
}
);
return gadget;
},
......@@ -397,16 +416,18 @@ var RenderJs = (function () {
isGadgetListLoaded: function () {
/*
* Return True if all gadgets were loaded from network or cache
* Return True if all gadgets were loaded from network or
* cache
*/
var result;
result = true;
$(this.getGadgetList()).each(
function (index, value) {
if (value.isReady()===false) {
if (value.isReady() === false) {
result = false;
}
});
}
);
return result;
},
......@@ -416,66 +437,90 @@ var RenderJs = (function () {
*/
// XXX:
}
}}()),
}
}()),
InteractionGadget : (function () {
/*
* Basic gadget interaction gadget implementation.
*/
return {
bind: function (gadget_dom){
/*
* Bind event between gadgets.
*/
gadget_id = gadget_dom.attr("id");
var createMethodInteraction = function (original_source_method_id, source_gadget_id, source_method_id,
destination_gadget_id, destination_method_id) {
var createMethodInteraction = function (
original_source_method_id, source_gadget_id,
source_method_id, destination_gadget_id,
destination_method_id) {
var interaction = function() {
RenderJs.GadgetIndex.getGadgetById(source_gadget_id)[original_source_method_id].apply(null, arguments);
RenderJs.GadgetIndex.getGadgetById(destination_gadget_id)[destination_method_id]();
RenderJs.GadgetIndex.getGadgetById(
source_gadget_id)[original_source_method_id].
apply(null, arguments);
RenderJs.GadgetIndex.getGadgetById(
destination_gadget_id)[destination_method_id]();
};
return interaction;
};
var createTriggerInteraction = function (destination_gadget_id, destination_method_id) {
var interaction = function() {
RenderJs.GadgetIndex.getGadgetById(destination_gadget_id)[destination_method_id].apply(null, arguments);
},
createTriggerInteraction = function (
destination_gadget_id, destination_method_id) {
var interaction = function () {
RenderJs.GadgetIndex.getGadgetById(
destination_gadget_id)[destination_method_id].
apply(null, arguments);
};
return interaction;
};
gadget_dom.find("connect").each(function (key, value){
var source, source_gadget_id, source_method_id, source_gadget, destination, destination_gadget_id,
destination_method_id, destination_gadget, func_body, func;
gadget_id = gadget_dom.attr("id");
gadget_dom.find("connect").each(function (key, value) {
var source, source_gadget_id, source_method_id,
source_gadget, destination, destination_gadget_id,
destination_method_id, destination_gadget,
original_source_method_id,
func_body, func;
source = $(value).attr("source").split(".");
source_gadget_id = source[0];
source_method_id = source[1];
source_gadget = RenderJs.GadgetIndex.getGadgetById(source_gadget_id);
source_gadget = RenderJs.GadgetIndex.
getGadgetById(source_gadget_id);
destination = $(value).attr("destination").split(".");
destination_gadget_id = destination[0];
destination_method_id = destination[1];
destination_gadget = RenderJs.GadgetIndex.getGadgetById(destination_gadget_id);
destination_gadget = RenderJs.GadgetIndex.
getGadgetById(destination_gadget_id);
if (source_gadget.hasOwnProperty(source_method_id)){
// direct javascript use case
var original_source_method_id = "original_" + source_method_id;
source_gadget[original_source_method_id] = source_gadget[source_method_id];
source_gadget[source_method_id] = createMethodInteraction(original_source_method_id, source_gadget_id, source_method_id,
destination_gadget_id, destination_method_id);
original_source_method_id = "original_" +
source_method_id;
source_gadget[original_source_method_id] =
source_gadget[source_method_id];
source_gadget[source_method_id] =
createMethodInteraction(
original_source_method_id,
source_gadget_id,
source_method_id,
destination_gadget_id,
destination_method_id
);
}
else{
// this is a custom event attached to HTML gadget representation
var interaction = createTriggerInteraction(destination_gadget_id, destination_method_id);
source_gadget.dom.bind(source_method_id, interaction);
// this is a custom event attached to HTML gadget
// representation
source_gadget.dom.bind(
source_method_id,
createTriggerInteraction(
destination_gadget_id, destination_method_id
)
);
}
});
}
);
}
}}())
}}());
}())
}
}());
// impliticly call RenderJs bootstrap
$(document).ready(function() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment