[gen] Allow to show transitions on 'view' and/or 'result' layout types.
This commit is contained in:
parent
e0cef5eed5
commit
da1f2699cd
|
@ -409,16 +409,16 @@ class Calendar(Type):
|
||||||
self.createEvent(obj, date, handleEventSpan=False)
|
self.createEvent(obj, date, handleEventSpan=False)
|
||||||
|
|
||||||
def deleteEvent(self, obj, date, handleEventSpan=True):
|
def deleteEvent(self, obj, date, handleEventSpan=True):
|
||||||
'''Deletes an event. It actually deletes all events at rq['day'].
|
'''Deletes an event. It actually deletes all events at p_date.
|
||||||
If p_handleEventSpan is True, we will use rq["deleteNext"] to
|
If p_handleEventSpan is True, we will use rq["deleteNext"] to
|
||||||
delete successive events, too.'''
|
delete successive events, too.'''
|
||||||
obj = obj.o # Ensure p_obj is not a wrapper.
|
obj = obj.o # Ensure p_obj is not a wrapper.
|
||||||
rq = obj.REQUEST
|
|
||||||
if not self.getEventsAt(obj, date): return
|
if not self.getEventsAt(obj, date): return
|
||||||
daysDict = getattr(obj, self.name)[date.year()][date.month()]
|
daysDict = getattr(obj, self.name)[date.year()][date.month()]
|
||||||
# Remember events, in case we must delete similar ones for next days.
|
# Remember events, in case we must delete similar ones for next days.
|
||||||
events = self.getEventsAt(obj, date)
|
events = self.getEventsAt(obj, date)
|
||||||
del daysDict[date.day()]
|
del daysDict[date.day()]
|
||||||
|
rq = obj.REQUEST
|
||||||
if handleEventSpan and rq.has_key('deleteNext') and \
|
if handleEventSpan and rq.has_key('deleteNext') and \
|
||||||
(rq['deleteNext'] == 'True'):
|
(rq['deleteNext'] == 'True'):
|
||||||
while True:
|
while True:
|
||||||
|
|
|
@ -1476,6 +1476,19 @@ class BaseMixin:
|
||||||
return stateShow(self.getWorkflow(), self.appy())
|
return stateShow(self.getWorkflow(), self.appy())
|
||||||
return stateShow
|
return stateShow
|
||||||
|
|
||||||
|
def showTransitions(self, layoutType):
|
||||||
|
'''Must we show the buttons/icons for triggering transitions on
|
||||||
|
p_layoutType?'''
|
||||||
|
# Never show transitions on edit pages.
|
||||||
|
if layoutType == 'edit': return
|
||||||
|
# Use the default value if self's class does not specify it.
|
||||||
|
klass = self.getClass()
|
||||||
|
if not hasattr(klass, 'showTransitions'): return (layoutType=='view')
|
||||||
|
showValue = klass.showTransitions
|
||||||
|
# This value can be a single value or a tuple/list of values.
|
||||||
|
if isinstance(showValue, basestring): return layoutType == showValue
|
||||||
|
return layoutType in showValue
|
||||||
|
|
||||||
def _appy_listStates(self):
|
def _appy_listStates(self):
|
||||||
'''Lists the possible states for this object.'''
|
'''Lists the possible states for this object.'''
|
||||||
res = []
|
res = []
|
||||||
|
|
|
@ -21,7 +21,7 @@ input[type=checkbox] { border: 0; background: none; cursor: pointer }
|
||||||
input[type=radio] { border: 0; background: none; cursor: pointer }
|
input[type=radio] { border: 0; background: none; cursor: pointer }
|
||||||
input[type=file] { border: 0px solid #d0d0d0;
|
input[type=file] { border: 0px solid #d0d0d0;
|
||||||
background-color: #f8f8f8; cursor: pointer }
|
background-color: #f8f8f8; cursor: pointer }
|
||||||
input[type=button] { border: 1px solid #d0d0d0;
|
input[type=button] { border: 1px solid #d0d0d0; margin: 0 3px;
|
||||||
background-color: #f8f8f8; cursor: pointer }
|
background-color: #f8f8f8; cursor: pointer }
|
||||||
input[type=submit] { border: 1px solid #d0d0d0; background-color: #f8f8f8;
|
input[type=submit] { border: 1px solid #d0d0d0; background-color: #f8f8f8;
|
||||||
cursor: pointer }
|
cursor: pointer }
|
||||||
|
|
|
@ -353,14 +353,14 @@ function submitAppyForm(button) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function used for triggering a workflow transition
|
// Function used for triggering a workflow transition
|
||||||
function triggerTransition(transitionId, msg) {
|
function triggerTransition(formId, transitionId, msg) {
|
||||||
var theForm = document.getElementById('triggerTransitionForm');
|
var theForm = document.getElementById(formId);
|
||||||
theForm.workflow_action.value = transitionId;
|
theForm.workflow_action.value = transitionId;
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
theForm.submit();
|
theForm.submit();
|
||||||
}
|
}
|
||||||
else { // Ask the user to confirm.
|
else { // Ask the user to confirm.
|
||||||
askConfirm('form', 'triggerTransitionForm', msg, true);
|
askConfirm('form', formId, msg, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,10 +146,10 @@
|
||||||
This macro displays an object's transitions(s). It is used by macro "header" below.
|
This macro displays an object's transitions(s). It is used by macro "header" below.
|
||||||
</tal:comment>
|
</tal:comment>
|
||||||
<metal:transitions define-macro="transitions"
|
<metal:transitions define-macro="transitions"
|
||||||
tal:define="transitions contextObj/getAppyTransitions"
|
tal:define="transitions targetObj/getAppyTransitions"
|
||||||
tal:condition="transitions">
|
tal:condition="transitions">
|
||||||
<form id="triggerTransitionForm" method="post"
|
<form tal:define="formId python: 'trigger_%s' % targetObj.UID()" method="post"
|
||||||
tal:attributes="action python: contextObj.absolute_url() + '/do'">
|
tal:attributes="id formId; action python: targetObj.absolute_url() + '/do'">
|
||||||
<input type="hidden" name="action" value="Trigger"/>
|
<input type="hidden" name="action" value="Trigger"/>
|
||||||
<input type="hidden" name="workflow_action"/>
|
<input type="hidden" name="workflow_action"/>
|
||||||
<table>
|
<table>
|
||||||
|
@ -161,7 +161,7 @@
|
||||||
<tal:comment replace="nothing">Real button</tal:comment>
|
<tal:comment replace="nothing">Real button</tal:comment>
|
||||||
<input type="button" tal:condition="transition/may_trigger"
|
<input type="button" tal:condition="transition/may_trigger"
|
||||||
tal:attributes="value transition/title;
|
tal:attributes="value transition/title;
|
||||||
onClick python: 'triggerTransition(\'%s\',\'%s\')' % (transition['name'],transition['confirm']);"/>
|
onClick python: 'triggerTransition(\'%s\',\'%s\',\'%s\')' % (formId,transition['name'],transition['confirm'])"/>
|
||||||
<tal:comment replace="nothing">Fake button, explaining why the transition can't be triggered</tal:comment>
|
<tal:comment replace="nothing">Fake button, explaining why the transition can't be triggered</tal:comment>
|
||||||
<div class="fakeButton" tal:condition="not: transition/may_trigger">
|
<div class="fakeButton" tal:condition="not: transition/may_trigger">
|
||||||
<acronym tal:content="transition/title"
|
<acronym tal:content="transition/title"
|
||||||
|
@ -323,7 +323,8 @@
|
||||||
</tal:link>
|
</tal:link>
|
||||||
</td>
|
</td>
|
||||||
<tal:comment replace="nothing">Workflow transitions</tal:comment>
|
<tal:comment replace="nothing">Workflow transitions</tal:comment>
|
||||||
<td tal:condition="not: isEdit">
|
<td tal:define="targetObj python: contextObj"
|
||||||
|
tal:condition="python: targetObj.showTransitions(layoutType)">
|
||||||
<metal:transitions use-macro="app/ui/page/macros/transitions"/>
|
<metal:transitions use-macro="app/ui/page/macros/transitions"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
<table class="noStyle"
|
<table class="noStyle"
|
||||||
tal:define="isBack appyType/isBack">
|
tal:define="isBack appyType/isBack">
|
||||||
<tr>
|
<tr>
|
||||||
|
<tal:comment replace="nothing">Workflow transitions</tal:comment>
|
||||||
|
<td tal:condition="python: obj.showTransitions('result')">
|
||||||
|
<tal:def define="targetObj python: obj">
|
||||||
|
<metal:transitions use-macro="app/ui/page/macros/transitions"/>
|
||||||
|
</tal:def>
|
||||||
|
</td>
|
||||||
<tal:comment replace="nothing">Edit</tal:comment>
|
<tal:comment replace="nothing">Edit</tal:comment>
|
||||||
<td tal:condition="python: not appyType['noForm'] and obj.mayEdit() and appyType['delete']">
|
<td tal:condition="python: not appyType['noForm'] and obj.mayEdit() and appyType['delete']">
|
||||||
<a tal:define="navInfo python:'ref.%s.%s:%s.%d.%d' % (contextObj.UID(), fieldName, appyType['pageName'], repeat['obj'].number()+startNumber, totalNumber);"
|
<a tal:define="navInfo python:'ref.%s.%s:%s.%d.%d' % (contextObj.UID(), fieldName, appyType['pageName'], repeat['obj'].number()+startNumber, totalNumber);"
|
||||||
|
|
|
@ -59,7 +59,8 @@ HTML_ENTITIES = {
|
||||||
'ouml':'ö', 'divide':'÷', 'oslash':'ø', 'ugrave':'ù', 'uacute':'ú',
|
'ouml':'ö', 'divide':'÷', 'oslash':'ø', 'ugrave':'ù', 'uacute':'ú',
|
||||||
'ucirc':'û', 'uuml':'ü', 'yacute':'ý', 'thorn':'þ', 'yuml':'ÿ',
|
'ucirc':'û', 'uuml':'ü', 'yacute':'ý', 'thorn':'þ', 'yuml':'ÿ',
|
||||||
'euro':'€', 'nbsp':' ', "rsquo":"'", "lsquo":"'", "ldquo":"'",
|
'euro':'€', 'nbsp':' ', "rsquo":"'", "lsquo":"'", "ldquo":"'",
|
||||||
"rdquo":"'", 'ndash': ' ', 'oelig':'oe', 'quot': "'", 'mu': 'µ'}
|
"rdquo":"'", 'ndash': '—', 'mdash': '—', 'oelig':'oe', 'quot': "'",
|
||||||
|
'mu': 'µ'}
|
||||||
import htmlentitydefs
|
import htmlentitydefs
|
||||||
for k, v in htmlentitydefs.entitydefs.iteritems():
|
for k, v in htmlentitydefs.entitydefs.iteritems():
|
||||||
if not HTML_ENTITIES.has_key(k) and not XML_ENTITIES.has_key(k):
|
if not HTML_ENTITIES.has_key(k) and not XML_ENTITIES.has_key(k):
|
||||||
|
|
Loading…
Reference in a new issue