[gen] Ref field: allow to insert many selected items at once (Ref fields with link='list').
This commit is contained in:
parent
084f1f9a23
commit
e7c20f8d2b
16 changed files with 353 additions and 123 deletions
|
@ -179,29 +179,13 @@ class BaseMixin:
|
|||
(appy.user.login, appy.klass.__name__, appy.uid))
|
||||
self.goto(self.getUrl(rq['HTTP_REFERER']))
|
||||
|
||||
def onUnlink(self):
|
||||
'''Called when an object unlinking is triggered from the ui.'''
|
||||
rq = self.REQUEST
|
||||
tool = self.getTool()
|
||||
sourceObject = tool.getObject(rq['sourceUid'])
|
||||
targetObject = tool.getObject(rq['targetUid'])
|
||||
field = sourceObject.getAppyType(rq['fieldName'])
|
||||
field.unlinkObject(sourceObject, targetObject)
|
||||
urlBack = self.getUrl(rq['HTTP_REFERER'])
|
||||
self.say(self.translate('action_done'))
|
||||
self.goto(urlBack)
|
||||
|
||||
def onLink(self):
|
||||
'''Called when an object linking is triggered from the ui.'''
|
||||
'''Called when object (un)linking is triggered from the ui.'''
|
||||
rq = self.REQUEST
|
||||
tool = self.getTool()
|
||||
sourceObject = tool.getObject(rq['sourceUid'])
|
||||
targetObject = tool.getObject(rq['targetUid'])
|
||||
field = sourceObject.getAppyType(rq['fieldName'])
|
||||
field.linkObject(sourceObject, targetObject)
|
||||
urlBack = self.getUrl(rq['HTTP_REFERER'])
|
||||
self.say(self.translate('action_done'))
|
||||
self.goto(urlBack)
|
||||
return field.onUiRequest(sourceObject, rq)
|
||||
|
||||
def onCreate(self):
|
||||
'''This method is called when a user wants to create a root object in
|
||||
|
|
|
@ -83,11 +83,11 @@ msgstr ""
|
|||
msgid "add_ref"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr ""
|
|||
msgid "object_delete"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
14
gen/tr/ar.po
14
gen/tr/ar.po
|
@ -83,11 +83,11 @@ msgstr ""
|
|||
msgid "add_ref"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr "تعديل"
|
|||
msgid "object_delete"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
14
gen/tr/de.po
14
gen/tr/de.po
|
@ -83,11 +83,11 @@ msgstr "Kein Element"
|
|||
msgid "add_ref"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr "Bearbeiten"
|
|||
msgid "object_delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
16
gen/tr/en.po
16
gen/tr/en.po
|
@ -84,13 +84,13 @@ msgstr "No object."
|
|||
msgid "add_ref"
|
||||
msgstr "Add a new one"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr "Selectable elements"
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr "Selected elements"
|
||||
msgstr "Inserted elements"
|
||||
|
||||
#. Default: "The action has been successfully executed."
|
||||
msgid "action_ok"
|
||||
|
@ -192,7 +192,7 @@ msgstr "Edit"
|
|||
msgid "object_delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr "Unlink"
|
||||
|
||||
|
@ -200,6 +200,14 @@ msgstr "Unlink"
|
|||
msgid "object_link"
|
||||
msgstr "Insert"
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr "Insert selected elements"
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr "(Un)check everything"
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr "Unlock"
|
||||
|
|
14
gen/tr/es.po
14
gen/tr/es.po
|
@ -83,11 +83,11 @@ msgstr "Ningún elemento."
|
|||
msgid "add_ref"
|
||||
msgstr "Añadir"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr "Editar"
|
|||
msgid "object_delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
18
gen/tr/fr.po
18
gen/tr/fr.po
|
@ -84,13 +84,13 @@ msgstr "Aucun élément."
|
|||
msgid "add_ref"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr "Éléments sélectionnables"
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr "Éléments sélectionnés"
|
||||
msgstr "Éléments insérés"
|
||||
|
||||
#. Default: "The action has been successfully executed."
|
||||
msgid "action_ok"
|
||||
|
@ -192,14 +192,22 @@ msgstr "Modifier"
|
|||
msgid "object_delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr "Dissocier"
|
||||
msgstr "Retirer"
|
||||
|
||||
#. Default: "Insert"
|
||||
msgid "object_link"
|
||||
msgstr "Insérer"
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr "Insérer la sélection"
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr "Tout (dé)sélectionner"
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr "Déverrouiller"
|
||||
|
|
14
gen/tr/it.po
14
gen/tr/it.po
|
@ -83,11 +83,11 @@ msgstr "Nessun elemento"
|
|||
msgid "add_ref"
|
||||
msgstr "Aggiungi un nuovo"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr "Modifica"
|
|||
msgid "object_delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
14
gen/tr/nl.po
14
gen/tr/nl.po
|
@ -83,11 +83,11 @@ msgstr "Geen element."
|
|||
msgid "add_ref"
|
||||
msgstr "Toevoegen"
|
||||
|
||||
#. Default: "Selectable elements"
|
||||
#. Default: "Available elements"
|
||||
msgid "selectable_objects"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Selected elements"
|
||||
#. Default: "Inserted elements"
|
||||
msgid "selected_objects"
|
||||
msgstr ""
|
||||
|
||||
|
@ -191,7 +191,7 @@ msgstr "Bewerken"
|
|||
msgid "object_delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#. Default: "Unlink"
|
||||
#. Default: "Remove"
|
||||
msgid "object_unlink"
|
||||
msgstr ""
|
||||
|
||||
|
@ -199,6 +199,14 @@ msgstr ""
|
|||
msgid "object_link"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Insert selected elements"
|
||||
msgid "object_link_many"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "(Un)check everything"
|
||||
msgid "check_uncheck"
|
||||
msgstr ""
|
||||
|
||||
#. Default: "Unlock"
|
||||
msgid "page_unlock"
|
||||
msgstr ""
|
||||
|
|
|
@ -66,7 +66,7 @@ img { border: 0; vertical-align: middle }
|
|||
background-color: #dbdde1; font-weight: bold }
|
||||
.navigate td { padding: 4px 9px }
|
||||
.login { margin: 3px; color: black }
|
||||
input.button { border-width: 0 !important; color: #666666; height: 23px;
|
||||
input.button { border-width: 0 !important; color: #666666; height: 24px;
|
||||
width: 150px; cursor:pointer; font-size: 90%; padding: 1px 0 0 10px;
|
||||
background-color: transparent !important }
|
||||
.buttons { margin-left: 4px }
|
||||
|
@ -157,3 +157,4 @@ td.search { padding-top: 8px }
|
|||
.error { margin: 5px }
|
||||
.podName { font-size: 90% }
|
||||
.podTable { margin-left: 15px }
|
||||
.cbCell { width: 10px; text-align: center}
|
||||
|
|
|
@ -229,13 +229,16 @@ function askRefField(hookId, objectUrl, fieldName, innerRef, startNumber,
|
|||
action, actionParams){
|
||||
// Sends an Ajax request for getting the content of a reference field.
|
||||
var startKey = hookId + '_startNumber';
|
||||
var params = {'innerRef': innerRef };
|
||||
var scope = hookId.split('_').pop();
|
||||
var params = {'innerRef': innerRef, 'scope': scope};
|
||||
params[startKey] = startNumber;
|
||||
if (action) params['action'] = action;
|
||||
if (actionParams) {
|
||||
for (key in actionParams) { params[key] = actionParams[key]; };
|
||||
}
|
||||
askAjaxChunk(hookId, 'GET', objectUrl, fieldName+':pxView', params);
|
||||
var px = (scope == 'objs')? ':pxView': ':pxViewPickList';
|
||||
askAjaxChunk(hookId, 'GET', objectUrl, fieldName + px, params, null,
|
||||
evalInnerScripts);
|
||||
}
|
||||
|
||||
function askField(hookId, objectUrl, layoutType, showChanges, masterValues,
|
||||
|
@ -251,7 +254,7 @@ function askField(hookId, objectUrl, layoutType, showChanges, masterValues,
|
|||
askAjaxChunk(hookId, 'GET', objectUrl, px, params, null, evalInnerScripts);
|
||||
}
|
||||
|
||||
// Function used by checkbox widgets for having radio-button-like behaviour
|
||||
// Used by checkbox widgets for having radio-button-like behaviour.
|
||||
function toggleCheckbox(visibleCheckbox, hiddenBoolean) {
|
||||
vis = document.getElementById(visibleCheckbox);
|
||||
hidden = document.getElementById(hiddenBoolean);
|
||||
|
@ -259,6 +262,61 @@ function toggleCheckbox(visibleCheckbox, hiddenBoolean) {
|
|||
else hidden.value = 'False';
|
||||
}
|
||||
|
||||
// (Un)checks a checkbox corresponding to a linked object.
|
||||
function toggleRefCb(checkbox) {
|
||||
var name = checkbox.getAttribute('name');
|
||||
var elems = name.split('_');
|
||||
// Get the DOM node corresponding to the Ref field.
|
||||
var node = document.getElementById(elems[0] + '_' + elems[1]);
|
||||
// Get the array that stores checkbox statuses.
|
||||
var statuses = node['_appy_' + elems[2] + '_cbs'];
|
||||
// Get the array semantics
|
||||
var semantics = node['_appy_' + elems[2] + '_sem'];
|
||||
var uid = checkbox.value;
|
||||
if (semantics == 'unchecked') {
|
||||
if (!checkbox.checked) statuses[uid] = null;
|
||||
else {if (uid in statuses) delete statuses[uid]};
|
||||
}
|
||||
else { // semantics is 'checked'
|
||||
if (checkbox.checked) statuses[uid] = null;
|
||||
else {if (uid in statuses) delete statuses[uid]};
|
||||
}
|
||||
}
|
||||
|
||||
// Initialise checkboxes of a Ref field.
|
||||
function initRefCbs(id) {
|
||||
var elems = id.split('_');
|
||||
// Get the DOM node corresponding to the Ref field.
|
||||
var node = document.getElementById(elems[0] + '_' + elems[1]);
|
||||
// Get the array that stores checkbox statuses.
|
||||
var statuses = node['_appy_' + elems[2] + '_cbs'];
|
||||
// Get the array semantics
|
||||
var semantics = node['_appy_' + elems[2] + '_sem'];
|
||||
var value = (semantics == 'unchecked')? false: true;
|
||||
// Update visible checkboxes.
|
||||
var checkboxes = getElementsHavingName('input', id);
|
||||
for (var i=0; i < checkboxes.length; i++) {
|
||||
if (checkboxes[i].value in statuses) checkboxes[i].checked = value;
|
||||
else checkboxes[i].checked = !value;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle all checkboxes of a Ref field.
|
||||
function toggleAllRefCbs(id) {
|
||||
var elems = id.split('_');
|
||||
// Get the DOM node corresponding to the Ref field.
|
||||
var node = document.getElementById(elems[0] + '_' + elems[1]);
|
||||
// Empty the array that stores checkbox statuses.
|
||||
var statuses = node['_appy_' + elems[2] + '_cbs'];
|
||||
for (var key in statuses) delete statuses[key];
|
||||
// Switch the array semantics.
|
||||
var semAttr = '_appy_' + elems[2] + '_sem';
|
||||
if (node[semAttr] == 'unchecked') node[semAttr] = 'checked';
|
||||
else node[semAttr] = 'unchecked';
|
||||
// Update the visible checkboxes
|
||||
initRefCbs(id);
|
||||
}
|
||||
|
||||
// Shows/hides a dropdown menu
|
||||
function toggleDropdown(dropdownId, forcedValue){
|
||||
var dropdown = document.getElementById(dropdownId);
|
||||
|
@ -456,22 +514,35 @@ function onDeleteEvent(objectUid, eventTime) {
|
|||
askConfirm('form', 'deleteEventForm', action_confirm);
|
||||
}
|
||||
|
||||
function onUnlinkObject(sourceUid, fieldName, targetUid) {
|
||||
f = document.getElementById('unlinkForm');
|
||||
f.sourceUid.value = sourceUid;
|
||||
f.fieldName.value = fieldName;
|
||||
f.targetUid.value = targetUid;
|
||||
askConfirm('form', 'unlinkForm', action_confirm);
|
||||
}
|
||||
|
||||
function onLinkObject(sourceUid, fieldName, targetUid) {
|
||||
function onLink(action, sourceUid, fieldName, targetUid) {
|
||||
f = document.getElementById('linkForm');
|
||||
f.linkAction.value = action;
|
||||
f.sourceUid.value = sourceUid;
|
||||
f.fieldName.value = fieldName;
|
||||
f.targetUid.value = targetUid;
|
||||
f.submit();
|
||||
}
|
||||
|
||||
function onLinkMany(id) {
|
||||
var elems = id.split('_');
|
||||
// Get the DOM node corresponding to the Ref field.
|
||||
var node = document.getElementById(elems[0] + '_' + elems[1]);
|
||||
// Get the uids of (un-)checked objects.
|
||||
var statuses = node['_appy_' + elems[2] + '_cbs'];
|
||||
var uids = '';
|
||||
for (var uid in statuses) uids += uid + ',';
|
||||
// Get the array semantics
|
||||
var semantics = node['_appy_' + elems[2] + '_sem'];
|
||||
// Fill the form and ask for a confirmation
|
||||
f = document.getElementById('linkForm');
|
||||
f.linkAction.value = 'link_many';
|
||||
f.sourceUid.value = elems[0];
|
||||
f.fieldName.value = elems[1];
|
||||
f.targetUid.value = uids;
|
||||
f.semantics.value = semantics;
|
||||
askConfirm('form', 'linkForm', action_confirm);
|
||||
}
|
||||
|
||||
function onUnlockPage(objectUid, pageName) {
|
||||
f = document.getElementById('unlockForm');
|
||||
f.objectUid.value = objectUid;
|
||||
|
|
BIN
gen/ui/checkall.png
Normal file
BIN
gen/ui/checkall.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 235 B |
BIN
gen/ui/linkMany.png
Normal file
BIN
gen/ui/linkMany.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 322 B |
BIN
gen/ui/unlinkUp.png
Normal file
BIN
gen/ui/unlinkUp.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 234 B |
|
@ -115,19 +115,14 @@ class ToolWrapper(AbstractWrapper):
|
|||
<input type="hidden" name="objectUid"/>
|
||||
<input type="hidden" name="eventTime"/>
|
||||
</form>
|
||||
<!-- Global form for unlinking an object -->
|
||||
<form id="unlinkForm" method="post" action="do">
|
||||
<input type="hidden" name="action" value="Unlink"/>
|
||||
<input type="hidden" name="sourceUid"/>
|
||||
<input type="hidden" name="fieldName"/>
|
||||
<input type="hidden" name="targetUid"/>
|
||||
</form>
|
||||
<!-- Global form for linking an object -->
|
||||
<!-- Global form for (un)linking (an) object(s) -->
|
||||
<form id="linkForm" method="post" action="do">
|
||||
<input type="hidden" name="action" value="Link"/>
|
||||
<input type="hidden" name="linkAction"/>
|
||||
<input type="hidden" name="sourceUid"/>
|
||||
<input type="hidden" name="fieldName"/>
|
||||
<input type="hidden" name="targetUid"/>
|
||||
<input type="hidden" name="semantics"/>
|
||||
</form>
|
||||
<!-- Global form for unlocking a page -->
|
||||
<form id="unlockForm" method="post" action="do">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue