Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
officejs
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
officejs
Commits
a4f9ad46
Commit
a4f9ad46
authored
Jul 03, 2014
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use declarative gadget instanciation.
Do manually build the HTML as string.
parent
62a826ce
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
398 additions
and
250 deletions
+398
-250
src/erp5/erp5.less
src/erp5/erp5.less
+5
-1
src/erp5/gadget_index_url.js
src/erp5/gadget_index_url.js
+100
-106
src/erp5/index.html
src/erp5/index.html
+10
-2
src/erp5_form/erp5form.js
src/erp5_form/erp5form.js
+167
-58
src/erp5_form/index.html
src/erp5_form/index.html
+6
-1
src/erp5_list_field/index.html
src/erp5_list_field/index.html
+9
-0
src/erp5_list_field/listfield.js
src/erp5_list_field/listfield.js
+27
-14
src/erp5_listbox/index.html
src/erp5_listbox/index.html
+0
-3
src/erp5_listbox/listbox.js
src/erp5_listbox/listbox.js
+66
-57
src/erp5_string_field/stringfield.js
src/erp5_string_field/stringfield.js
+8
-8
No files found.
src/erp5/erp5.less
View file @
a4f9ad46
...
@@ -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: 4
8
%;
width: 4
6
%;
}
}
iframe {
iframe {
...
...
src/erp5/gadget_index_url.js
View file @
a4f9ad46
...
@@ -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
));
src/erp5/index.html
View file @
a4f9ad46
...
@@ -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>
src/erp5_form/erp5form.js
View file @
a4f9ad46
/*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:
8
0, nomen: true */
/*jslint maxlen:
20
0, 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
.
pr
ivate_gadget_list
=
[]
;
g
.
pr
ops
=
{}
;
})
})
// 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
));
src/erp5_form/index.html
View file @
a4f9ad46
...
@@ -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>
src/erp5_list_field/index.html
View file @
a4f9ad46
...
@@ -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
/>
...
...
src/erp5_list_field/listfield.js
View file @
a4f9ad46
/*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
));
src/erp5_listbox/index.html
View file @
a4f9ad46
...
@@ -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>
src/erp5_listbox/listbox.js
View file @
a4f9ad46
...
@@ -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
,
t
able
=
gadget
.
element
.
getElementsByTagName
(
'
table
'
)[
0
]
,
t
head
=
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
);
}
}
t
mp_element_2
.
innerHTML
=
tmp
;
t
body
.
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
));
src/erp5_string_field/stringfield.js
View file @
a4f9ad46
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment