Commit a4f9ad46 authored by Romain Courteaud's avatar Romain Courteaud

Use declarative gadget instanciation.

Do manually build the HTML as string.
parent 62a826ce
...@@ -59,9 +59,13 @@ table { ...@@ -59,9 +59,13 @@ table {
form .left, form .right, .center, .bottom { form .left, form .right, .center, .bottom {
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
margin: 1em;
}
.center, .bottom {
display: block;
} }
.left, .right { .left, .right {
width: 48%; width: 46%;
} }
iframe { iframe {
......
...@@ -3,20 +3,6 @@ ...@@ -3,20 +3,6 @@
(function (rJS, $, RSVP, URI) { (function (rJS, $, RSVP, URI) {
"use strict"; "use strict";
/////////////////////////////////////////////////////////////////
// Custom Stop Error
/////////////////////////////////////////////////////////////////
function StopRenderingError(message) {
this.name = "StopRenderingError";
if ((message !== undefined) && (typeof message !== "string")) {
throw new TypeError('You must pass a string.');
}
this.message = message || "StopRendering failed";
}
StopRenderingError.prototype = new Error();
StopRenderingError.prototype.constructor =
StopRenderingError;
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// Desactivate jQuery Mobile URL management // Desactivate jQuery Mobile URL management
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
...@@ -29,88 +15,96 @@ ...@@ -29,88 +15,96 @@
// Gadget behaviour // Gadget behaviour
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
function getCachedGadgetOrLoad(gadget, url, scope, element) { rJS(window)
return gadget.getDeclaredGadget(scope) /////////////////////////////////////////////////////////////////
.fail(function () { // ready
return gadget.declareGadget(url, { /////////////////////////////////////////////////////////////////
scope: scope, // Configure jIO to use localstorage
element: element // And load configuration from server
.ready(function (g) {
return g.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.createJio({
type: "erp5",
url: "http://192.168.242.62:12002/erp5/web_site_module/hateoas"
}); });
}); });
} })
var JIO_GADGET = "../jio_bridge/index.html", /////////////////////////////////////////////////////////////////
FORM_GADGET = "../erp5_form/index.html"; // handle acquisition
/////////////////////////////////////////////////////////////////
.declareAcquiredMethod("pleaseRedirectMyHash", "pleaseRedirectMyHash")
// Bridge to jio gadget
.allowPublicAcquisition("jio_allDocs", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.allDocs.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_ajax", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.ajax.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_post", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.post.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_remove", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.remove.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_get", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.get.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_putAttachment", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.putAttachment.apply(jio_gadget, param_list);
});
})
.allowPublicAcquisition("jio_getAttachment", function (param_list) {
return this.getDeclaredGadget("jio_gadget")
.push(function (jio_gadget) {
return jio_gadget.getAttachment.apply(jio_gadget, param_list);
});
})
rJS(window) .allowPublicAcquisition("whoWantToDisplayThis", function (param_list) {
.ready(function (g) { // Hey, I want to display some URL
g.render(); return this.aq_pleasePublishMyState({jio_key: param_list[0]});
}) })
.declareAcquiredMethod("pleaseRedirectMyHash", "pleaseRedirectMyHash")
/////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
// Render the page
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var gadget = this; var gadget = this;
gadget.state_parameter_dict = options;
return RSVP.Queue()
.push(function () {
return RSVP.all([
getCachedGadgetOrLoad(gadget, JIO_GADGET, "jio_gadget"),
getCachedGadgetOrLoad(gadget, FORM_GADGET, "form_gadget",
document.getElementById('mainarticle'))
]);
})
.push(function (gadget_list) {
gadget.sub_gadget_dict = {
jio_gadget: gadget_list[0],
form_gadget: gadget_list[1]
};
if (options.jio_key === undefined) {
//
// ///////////////////////////////////////////////
// // Default view
// ///////////////////////////////////////////////
// return gadget.sub_gadget_dict.jio_gadget.allDocs(
// {"query": '__root__'}
// );
// })
// .push(function (result) {
// console.log("tructruc");
// // return the default jio_key
// // return result.data.rows[0].id;
// // return "person_module";
// return "computer_module/20130611-5BFC";
// })
// .push(function (jio_key) {
//
// jio_key_hash = "jio_key=" +
// // encodeURIComponent("computer_module/20130611-5BFC");
// encodeURIComponent("person_module");
// XXX TODO try no to wrap into anonymous function // $.mobile.loading('show');
return new RSVP.Queue() if (options.jio_key === undefined) {
.push(function () { // Redirect to the default view
return gadget.aq_pleasePublishMyState( return gadget.aq_pleasePublishMyState({jio_key: "person_module"})
{jio_key: "person_module"} .push(gadget.pleaseRedirectMyHash.bind(gadget));
);
})
.push(function (lala) {
return gadget.pleaseRedirectMyHash(lala);
})
.push(function () {
throw new StopRenderingError("No need to do more");
});
} }
}) return gadget.getDeclaredGadget("jio_gadget")
.push(function () { .push(function (jio_gadget) {
var jio_key = options.jio_key, var jio_key = options.jio_key,
view = options.view || "view"; view = options.view || "view";
/////////////////////////////////////////////// ///////////////////////////////////////////////
// Display erp5 document view // Display erp5 document view
/////////////////////////////////////////////// ///////////////////////////////////////////////
return gadget.sub_gadget_dict.jio_gadget.get( return jio_gadget.get({"_id": jio_key}, {"_view": view});
{"_id": jio_key},
{"_view": view}
);
}) })
.push(function (result) { .push(function (result) {
var uri = new URI( var uri = new URI(
...@@ -122,11 +116,13 @@ ...@@ -122,11 +116,13 @@
// } // }
return RSVP.all([ return RSVP.all([
result, result,
// XXX gadget.getDeclaredGadget("jio_gadget")
gadget.sub_gadget_dict.jio_gadget.get( .push(function (jio_gadget) {
return jio_gadget.get(
{"_id": uri.segment(2)}, {"_id": uri.segment(2)},
{"_view": "view"} {"_view": "view"}
) );
})
]); ]);
}) })
.push(function (result) { .push(function (result) {
...@@ -134,30 +130,28 @@ ...@@ -134,30 +130,28 @@
sub_options.erp5_document = result[0].data; sub_options.erp5_document = result[0].data;
sub_options.form_definition = result[1].data; sub_options.form_definition = result[1].data;
return gadget.sub_gadget_dict.form_gadget.render(sub_options); return gadget.getDeclaredGadget("form_gadget")
.push(function (form_gadget) {
return form_gadget.render(sub_options);
});
}) })
.push(function () { .push(function () {
// XXX JQuery mobile return gadget.getDeclaredGadget("form_gadget");
$(gadget.sub_gadget_dict.form_gadget.element).trigger('create'); })
.push(function (form_gadget) {
return form_gadget.getElement();
}) })
// .push(function (element) {
// // XXX JQuery mobile
// // $.mobile.loading('hide');
// // return $(element).trigger("create");
// })
.push(undefined, function (error) { .push(undefined, function (error) {
if (error instanceof StopRenderingError) { console.error(error);
return; console.error(error.stack);
} $.mobile.loading('hide');
throw error; throw error;
}); });
})
.allowPublicAcquisition("pleaseAllDocsXXX", function (param_list) {
return this.sub_gadget_dict.jio_gadget.allDocs.apply(
this.sub_gadget_dict.jio_gadget,
param_list
);
})
.allowPublicAcquisition("whoWantToDisplayThis", function (param_list) {
// Hey, I want to display some URL
return this.aq_pleasePublishMyState({jio_key: param_list[0]});
}); });
}(rJS, jQuery, RSVP, URI)); }(rJS, jQuery, RSVP, URI));
...@@ -36,8 +36,16 @@ ...@@ -36,8 +36,16 @@
<!--a href="#rightpanel">Open panel</a--> <!--a href="#rightpanel">Open panel</a-->
</header> </header>
<article id="mainarticle"> <article id="mainarticle"
</article> data-gadget-url="../erp5_form/index.html"
data-gadget-scope="form_gadget"
data-gadget-sandbox="public"></article>
<aside>
<section data-gadget-url="../jio_bridge/index.html"
data-gadget-scope="jio_gadget"
data-gadget-sandbox="public"></section>
</aside>
</body> </body>
</html> </html>
/*global rJS, RSVP, jQuery, Handlebars,
promiseEventListener, console */
/*jslint nomen: true */
/*global window, rJS, RSVP, StatelessJS, alert, FormData, document, console */ /*global window, rJS, RSVP, StatelessJS, alert, FormData, document, console */
/*jslint maxlen:80, nomen: true */ /*jslint maxlen:200, nomen: true */
(function (rJS) { (function (window, rJS, RSVP, $, promiseEventListener) {
"use strict"; "use strict";
// function loopEventListener(target, type, useCapture, callback) { // // function loopEventListener(target, type, useCapture, callback) {
// ////////////////////////// // // //////////////////////////
// // Infinite event listener (promise is never resolved) // // // Infinite event listener (promise is never resolved)
// // eventListener is removed when promise is cancelled/rejected // // // eventListener is removed when promise is cancelled/rejected
// ////////////////////////// // // //////////////////////////
// var handle_event_callback, // // var handle_event_callback,
// callback_promise; // // callback_promise;
// // //
// function cancelResolver() { // // function cancelResolver() {
// if ((callback_promise !== undefined) && // // if ((callback_promise !== undefined) &&
// (typeof callback_promise.cancel === "function")) { // // (typeof callback_promise.cancel === "function")) {
// callback_promise.cancel(); // // callback_promise.cancel();
// } // // }
// } // // }
// // //
// function canceller() { // // function canceller() {
// if (handle_event_callback !== undefined) { // // if (handle_event_callback !== undefined) {
// target.removeEventListener(type, handle_event_callback, useCapture); // // target.removeEventListener(type, handle_event_callback, useCapture);
// } // // }
// cancelResolver(); // // cancelResolver();
// } // // }
// function itsANonResolvableTrap(resolve, reject) { // // function itsANonResolvableTrap(resolve, reject) {
// //
// // handle_event_callback = function (evt) {
// // evt.stopPropagation();
// // evt.preventDefault();
// // cancelResolver();
// // callback_promise = new RSVP.Queue()
// // .push(function () {
// // return callback(evt);
// // })
// // .push(undefined, function (error) {
// // if (!(error instanceof RSVP.CancellationError)) {
// // canceller();
// // reject(error);
// // }
// // });
// // };
// //
// // target.addEventListener(type, handle_event_callback, useCapture);
// // }
// // return new RSVP.Promise(itsANonResolvableTrap, canceller);
// // }
// //
// handle_event_callback = function (evt) { // function clearPreviousGadgetList(form_gadget, element) {
// evt.stopPropagation(); // // Drop the previous gadget fields
// evt.preventDefault(); // form_gadget.private_gadget_list = [];
// cancelResolver();
// callback_promise = new RSVP.Queue()
// .push(function () {
// return callback(evt);
// })
// .push(undefined, function (error) {
// if (!(error instanceof RSVP.CancellationError)) {
// canceller();
// reject(error);
// } // }
// });
// };
// //
// target.addEventListener(type, handle_event_callback, useCapture); // rJS(window)
// }
// return new RSVP.Promise(itsANonResolvableTrap, canceller);
// }
function clearPreviousGadgetList(form_gadget, element) { /////////////////////////////////////////////////////////////////
// Drop the previous gadget fields // Handlebars
form_gadget.private_gadget_list = []; /////////////////////////////////////////////////////////////////
} // Precompile the templates while loading the first gadget instance
var gadget_klass = rJS(window);
rJS(window) gadget_klass
/////////////////////////////////////////////////////////////////
// ready
/////////////////////////////////////////////////////////////////
// Init local properties
.ready(function (g) { .ready(function (g) {
g.private_gadget_list = []; g.props = {};
}) })
// Assign the element to a variable
.ready(function (g) { .ready(function (g) {
return new RSVP.Queue() return g.getElement()
.push(function () {
return g.getElement();
})
.push(function (element) { .push(function (element) {
g.element = element; g.props.element = element;
}); });
}) })
.declareMethod('render', function (options) { /////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
.declareMethod('render2', function (options) {
console.log(options.form_definition); console.log(options.form_definition);
var i, var i,
erp5_document = options.erp5_document, erp5_document = options.erp5_document,
...@@ -89,8 +105,6 @@ ...@@ -89,8 +105,6 @@
options = options.form_gadget || {}; options = options.form_gadget || {};
form_gadget.state_parameter_dict = options; form_gadget.state_parameter_dict = options;
clearPreviousGadgetList(form_gadget,
form_gadget.element.getElementsByTagName('form')[0]);
for (i = 0; i < group_list.length; i += 1) { for (i = 0; i < group_list.length; i += 1) {
group = group_list[i][1]; group = group_list[i][1];
...@@ -301,7 +315,102 @@ ...@@ -301,7 +315,102 @@
// formSubmit // formSubmit
// ); // );
})
.declareMethod('render', function (options) {
var i,
erp5_document = options.erp5_document,
form_definition = options.form_definition,
rendered_form = erp5_document._embedded._view,
group_list = form_definition.group_list,
queue = new RSVP.Queue(),
form_gadget = this,
parent_element = document.createElement("div");
delete options.erp5_document;
delete options.form_definition;
options = options.form_gadget || {};
form_gadget.state_parameter_dict = options;
form_gadget.props.gadget_list = [];
function addGroup(group) {
queue
.push(function () {
var j,
fieldset_element = document.createElement("fieldset"),
group_queue = new RSVP.Queue();
function addField(field, scope) {
group_queue.push(function () {
if (rendered_form.hasOwnProperty(field[0])) {
// Field is enabled in this context
var field_queue = new RSVP.Queue(),
field_url = '../erp5_string_field/index.html',
field_element = document.createElement("div"),
gadget_element = document.createElement("div"),
label_element = document.createElement("label"),
renderered_field = rendered_form[field[0]];
// field_element.setAttribute('data-role', 'fieldcontain');
label_element.setAttribute('for', renderered_field.key);
label_element.textContent = renderered_field.title;
field_element.appendChild(label_element);
field_element.appendChild(gadget_element);
fieldset_element.appendChild(field_element);
if ((renderered_field.type === 'ListField') ||
(renderered_field.type === 'ParallelListField') ||
(renderered_field.type === 'MultiListField')) {
field_url = '../erp5_list_field/index.html';
} else if (renderered_field.type === 'ListBox') {
field_url = '../erp5_listbox/index.html';
}
return field_queue
.push(function () {
return form_gadget.declareGadget(field_url, {
scope: renderered_field.key,
element: gadget_element
});
})
.push(function (field_gadget) {
form_gadget.props.gadget_list.push(field_gadget);
var suboptions = options[renderered_field.key] || {};
suboptions.field_json = renderered_field;
return field_gadget.render(suboptions);
});
}
});
}
fieldset_element.setAttribute("class", group[0]);
for (j = 0; j < group[1].length; j += 1) {
addField(group[1][j]);
}
return group_queue.push(function () {
parent_element.appendChild(fieldset_element);
});
});
}
for (i = 0; i < group_list.length; i += 1) {
addGroup(group_list[i]);
}
return queue
.push(function () {
var dom_element = form_gadget.props.element
.querySelector(".field_container");
while (dom_element.firstChild) {
dom_element.removeChild(dom_element.firstChild);
}
dom_element.appendChild(parent_element);
return $(parent_element).trigger("create");
});
}); });
}(rJS)); }(window, rJS, RSVP, jQuery, promiseEventListener));
...@@ -14,6 +14,11 @@ ...@@ -14,6 +14,11 @@
</head> </head>
<body> <body>
<!-- XXX action, method, fieldset --> <!-- XXX action, method, fieldset -->
<form></form> <form class="save_form">
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-edit ui-btn-icon-right">Save</button>
<div class="field_container">
</div>
</form>
</body> </body>
</html> </html>
...@@ -8,9 +8,18 @@ ...@@ -8,9 +8,18 @@
<!-- renderjs --> <!-- renderjs -->
<script src="../<%= copy.rsvp.relative_dest %>" type="text/javascript"></script> <script src="../<%= copy.rsvp.relative_dest %>" type="text/javascript"></script>
<script src="../<%= copy.renderjs.relative_dest %>" type="text/javascript"></script> <script src="../<%= copy.renderjs.relative_dest %>" type="text/javascript"></script>
<script src="../<%= copy.handlebars.relative_dest %>" type="text/javascript"></script>
<!-- custom script --> <!-- custom script -->
<script src="listfield.js" type="text/javascript"></script> <script src="listfield.js" type="text/javascript"></script>
<script id="option-template" type="text/x-handlebars-template">
<option value="{{value}}">{{text}}</option>
</script>
<script id="selected-option-template" type="text/x-handlebars-template">
<option selected="selected" value="{{value}}">{{text}}</option>
</script>
</head> </head>
<body> <body>
<select /> <select />
......
/*global window, rJS, console, RSVP */ /*global window, rJS, Handlebars */
(function (rJS, window) { /*jslint nomen: true */
(function (window, rJS, Handlebars) {
"use strict"; "use strict";
rJS(window) /////////////////////////////////////////////////////////////////
// Handlebars
/////////////////////////////////////////////////////////////////
// Precompile the templates while loading the first gadget instance
var gadget_klass = rJS(window),
option_source = gadget_klass.__template_element
.getElementById("option-template")
.innerHTML,
option_template = Handlebars.compile(option_source),
selected_option_source = gadget_klass.__template_element
.getElementById("option-template")
.innerHTML,
selected_option_template = Handlebars.compile(selected_option_source);
gadget_klass
.ready(function (g) { .ready(function (g) {
return new RSVP.Queue() return g.getElement()
.push(function () {
return g.getElement();
})
.push(function (element) { .push(function (element) {
g.element = element; g.element = element;
}); });
...@@ -15,22 +27,23 @@ ...@@ -15,22 +27,23 @@
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var select = this.element.getElementsByTagName('select')[0], var select = this.element.getElementsByTagName('select')[0],
i, i,
template,
field_json = options.field_json, field_json = options.field_json,
tmp = ''; tmp = '';
select.setAttribute('name', field_json.key); select.setAttribute('name', field_json.key);
// XXX Escape the properties
for (i = 0; i < field_json.items.length; i += 1) { for (i = 0; i < field_json.items.length; i += 1) {
if (field_json.items[i][1] === field_json.default[0]) { if (field_json.items[i][1] === field_json.default[0]) {
tmp += "<option selected='selected' value='" + template = selected_option_template;
field_json.items[i][1] + "'>"
+ field_json.items[i][0] + "</option>";
} else { } else {
tmp += "<option value='" + field_json.items[i][1] + "'>" template = option_template;
+ field_json.items[i][0] + "</option>";
} }
tmp += template({
value: field_json.items[i][1],
text: field_json.items[i][0]
});
} }
select.innerHTML += tmp; select.innerHTML += tmp;
}); });
}(rJS, window)); }(window, rJS, Handlebars));
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
<head> <head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" /> <meta name="viewport" content="width=device-width, user-scalable=no" />
<!-- XXX hardcoded -->
<title>Listbox</title> <title>Listbox</title>
<script src="../<%= copy.uri.relative_dest %>" type="text/javascript"></script> <script src="../<%= copy.uri.relative_dest %>" type="text/javascript"></script>
...@@ -19,8 +18,6 @@ ...@@ -19,8 +18,6 @@
<table> <table>
<thead> <thead>
</thead> </thead>
<tbody>
</tbody>
</table> </table>
</body> </body>
</html> </html>
...@@ -4,61 +4,70 @@ ...@@ -4,61 +4,70 @@
"use strict"; "use strict";
rJS(window) rJS(window)
/////////////////////////////////////////////////////////////////
// ready
/////////////////////////////////////////////////////////////////
// Init local properties
.ready(function (g) { .ready(function (g) {
return new RSVP.Queue() g.props = {};
.push(function () {
return g.getElement();
}) })
// Assign the element to a variable
.ready(function (g) {
return g.getElement()
.push(function (element) { .push(function (element) {
g.element = element; g.props.element = element;
}); });
}) })
.declareAcquiredMethod("pleaseAllDocsXXX", "pleaseAllDocsXXX")
//////////////////////////////////////////////
// acquired method
//////////////////////////////////////////////
.declareAcquiredMethod("jio_allDocs", "jio_allDocs")
.declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis") .declareAcquiredMethod("whoWantToDisplayThis", "whoWantToDisplayThis")
////////////////////////////////////////////// //////////////////////////////////////////////
// initialize the gadget content // initialize the gadget content
////////////////////////////////////////////// //////////////////////////////////////////////
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var gadget = this, var gadget = this,
table = gadget.element.getElementsByTagName('table')[0], thead = gadget.props.element.querySelector('thead'),
field_json = options.field_json, field_json = options.field_json,
i, tr = document.createElement("tr"),
url_param = {}, th,
begin_from = parseInt(options.begin_from, 10) || 0, i;
tmp_element_1,
tmp_element_2,
tmp_element_3,
select_list = [];
console.log("LISTBOX");
console.log(options);
for (i = 0; i < field_json.column_list.length; i += 1) {
select_list.push(field_json.column_list[i][0]);
}
gadget.field_json = field_json; gadget.props.field_json = field_json;
gadget.props.begin_from = parseInt(options.begin_from, 10) || 0;
// Drop the table content for (i = 0; i < field_json.column_list.length; i += 1) {
while (table.firstChild) { th = document.createElement("th");
table.removeChild(table.firstChild); th.textContent = field_json.column_list[i][1];
tr.appendChild(th);
} }
tmp_element_1 = document.createElement("thead"); thead.appendChild(tr);
table.appendChild(tmp_element_1); })
tmp_element_2 = document.createElement("tr");
tmp_element_1.appendChild(tmp_element_2); //////////////////////////////////////////////
// render the listbox in an asynchronous way
//////////////////////////////////////////////
.declareService(function () {
var gadget = this,
field_json = gadget.props.field_json,
begin_from = gadget.props.begin_from,
table = gadget.props.element.querySelector('table'),
tbody = document.createElement("tbody"),
select_list = [],
i;
for (i = 0; i < field_json.column_list.length; i += 1) { for (i = 0; i < field_json.column_list.length; i += 1) {
tmp_element_3 = document.createElement("th"); select_list.push(field_json.column_list[i][0]);
tmp_element_3.textContent = field_json.column_list[i][1];
tmp_element_2.appendChild(tmp_element_3);
} }
tmp_element_1 = document.createElement("tbody"); return gadget.jio_allDocs({
table.appendChild(tmp_element_1);
return gadget.pleaseAllDocsXXX({
"query": new URI(field_json.query).query(true).query, "query": new URI(field_json.query).query(true).query,
"limit": [begin_from, begin_from + field_json.lines + 1], "limit": [begin_from, begin_from + field_json.lines + 1],
"select_list": select_list "select_list": select_list
}).then(function (result) { }).push(function (result) {
var promise_list = [result]; var promise_list = [result];
for (i = 0; i < (result.data.rows.length - 1); i += 1) { for (i = 0; i < (result.data.rows.length - 1); i += 1) {
...@@ -68,49 +77,50 @@ ...@@ -68,49 +77,50 @@
} }
return RSVP.all(promise_list); return RSVP.all(promise_list);
}).then(function (result_list) { }).push(function (result_list) {
// console.log(result);
var j, var j,
tmp, tr,
th,
a,
result = result_list[0], result = result_list[0],
url_param = {},
tmp_url; tmp_url;
tmp_element_1 = gadget.element.getElementsByTagName("tbody")[0];
for (i = 0; i < (result.data.rows.length - 1); i += 1) { for (i = 0; i < (result.data.rows.length - 1); i += 1) {
tmp_element_2 = document.createElement("tr"); tr = document.createElement("tr");
tmp_element_1.appendChild(tmp_element_2);
// tmp_url = "#/f/" + encodeURIComponent(result.data.rows[i].id) + "/view"; // tmp_url = "#/f/" + encodeURIComponent(result.data.rows[i].id) + "/view";
tmp_url = result_list[i + 1]; tmp_url = result_list[i + 1];
tmp = ""; for (j = 0; j < field_json.column_list.length; j += 1) {
for (j = 0; j < gadget.field_json.column_list.length; j += 1) { th = document.createElement("th");
tmp += "<th><a href='" + tmp_url + "'>" + a = document.createElement("a");
(result.data.rows[i].value[gadget.field_json.column_list[j][0]] || "") + a.href = tmp_url;
"</a></th> "; a.textContent = (result.data.rows[i]
.value[field_json.column_list[j][0]] || "");
th.appendChild(a);
tr.appendChild(th);
} }
tmp_element_2.innerHTML = tmp; tbody.appendChild(tr);
} }
if (result.data.rows.length > field_json.lines) { if (result.data.rows.length > field_json.lines) {
url_param.begin_from = begin_from + field_json.lines; url_param.begin_from = begin_from + field_json.lines;
} }
// return gadget.acquire("generateMyUrlXXX", url_param); // return gadget.acquire("generateMyUrlXXX", url_param);
console.log(url_param);
return RSVP.all([ return RSVP.all([
gadget.aq_pleasePublishMyState({}), gadget.aq_pleasePublishMyState({}),
gadget.aq_pleasePublishMyState(url_param) gadget.aq_pleasePublishMyState(url_param)
]); ]);
// return gadget.acquire("generateMyUrlXXX", url_param); // return gadget.acquire("generateMyUrlXXX", url_param);
// [{jio_key: param_list[0]}]); // [{jio_key: param_list[0]}]);
}).then(function (lala) { }).push(function () {
console.log(lala); // if (begin_from !== 0) {
if (begin_from !== 0) { // tmp_element_1.innerHTML += "<a href='" + lala[0] +
tmp_element_1.innerHTML += "<a href='" + lala[0] + // "'>Start</a> ";
"'>Start</a> "; // }
} // tmp_element_1.innerHTML += "<a href='" + lala[1] +
tmp_element_1.innerHTML += "<a href='" + lala[1] + // "'>Next page!</a>";
"'>Next page!</a>"; table.appendChild(tbody);
// if (result.data.rows.length > field_json.lines) { // if (result.data.rows.length > field_json.lines) {
// tmp_element_1.innerHTML += "<a href='#begin_from=56'>Next page!</a>"; // tmp_element_1.innerHTML += "<a href='#begin_from=56'>Next page!</a>";
// window.location = "http://www.free.fr"; // window.location = "http://www.free.fr";
...@@ -118,5 +128,4 @@ ...@@ -118,5 +128,4 @@
}); });
}); });
}(rJS, document, RSVP, window, URI)); }(rJS, document, RSVP, window, URI));
...@@ -4,24 +4,24 @@ ...@@ -4,24 +4,24 @@
rJS(window) rJS(window)
.ready(function (gadget) { .ready(function (gadget) {
return new RSVP.Queue() return gadget.getElement()
.push(function () {
return gadget.getElement();
})
.push(function (element) { .push(function (element) {
gadget.element = element; gadget.element = element;
}); });
}) })
.declareMethod('render', function (options) { .declareMethod('render', function (options) {
var input = this.element.getElementsByTagName('input')[0], var input = this.element.querySelector('input'),
field_json = options.field_json || {}; field_json = options.field_json || {};
input.value = field_json.default || ""; input.setAttribute(
'value',
field_json.value || field_json.default || ""
);
input.setAttribute('name', field_json.key); input.setAttribute('name', field_json.key);
// input.setAttribute('id', field_json.key); input.setAttribute('title', field_json.title);
}) })
.declareMethod('getContent', function () { .declareMethod('getContent', function () {
var input = this.element.getElementsByTagName('input')[0], var input = this.element.querySelector('input'),
result = {}; result = {};
result[input.getAttribute('name')] = input.value; result[input.getAttribute('name')] = input.value;
return result; return result;
......
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