[gen] Calendar: display weekend days in a special way.
This commit is contained in:
parent
614ce576af
commit
ba148c51aa
|
@ -141,6 +141,7 @@ class Calendar(Type):
|
||||||
|
|
||||||
def getEventsAt(self, obj, date, asDict=True):
|
def getEventsAt(self, obj, date, asDict=True):
|
||||||
'''Returns the list of events that exist at some p_date (=day).'''
|
'''Returns the list of events that exist at some p_date (=day).'''
|
||||||
|
obj = obj.o # Ensure p_obj is not a wrapper.
|
||||||
if not hasattr(obj, self.name): return
|
if not hasattr(obj, self.name): return
|
||||||
years = getattr(obj, self.name)
|
years = getattr(obj, self.name)
|
||||||
year = date.year()
|
year = date.year()
|
||||||
|
@ -267,4 +268,18 @@ class Calendar(Type):
|
||||||
return self.createEvent(obj, DateTime(rq['day']))
|
return self.createEvent(obj, DateTime(rq['day']))
|
||||||
elif action == 'deleteEvent':
|
elif action == 'deleteEvent':
|
||||||
return self.deleteEvent(obj, DateTime(rq['day']))
|
return self.deleteEvent(obj, DateTime(rq['day']))
|
||||||
|
|
||||||
|
def getCellStyle(self, obj, date, today):
|
||||||
|
'''What CSS classes must apply to the table cell representing p_date
|
||||||
|
in the calendar?'''
|
||||||
|
res = []
|
||||||
|
# We must distinguish between past and future dates.
|
||||||
|
if date < today:
|
||||||
|
res.append('even')
|
||||||
|
else:
|
||||||
|
res.append('odd')
|
||||||
|
# Week-end days must have a specific style.
|
||||||
|
if date.aDay() in ('Sat', 'Sun'):
|
||||||
|
res.append('cellDashed')
|
||||||
|
return ' '.join(res)
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
|
@ -570,11 +570,8 @@ class ToolClassDescriptor(ClassDescriptor):
|
||||||
groupName = classDescr.klass.__name__
|
groupName = classDescr.klass.__name__
|
||||||
# Adds a field allowing to show/hide completely any workflow-related
|
# Adds a field allowing to show/hide completely any workflow-related
|
||||||
# information for a given class.
|
# information for a given class.
|
||||||
defaultValue = False
|
|
||||||
if classDescr.isRoot() or issubclass(classDescr.klass, ModelClass):
|
|
||||||
defaultValue = True
|
|
||||||
fieldName = 'showWorkflowFor%s' % className
|
fieldName = 'showWorkflowFor%s' % className
|
||||||
fieldType = gen.Boolean(default=defaultValue, page='userInterface',
|
fieldType = gen.Boolean(default=True, page='userInterface',
|
||||||
group=groupName)
|
group=groupName)
|
||||||
self.addField(fieldName, fieldType)
|
self.addField(fieldName, fieldType)
|
||||||
# Adds the boolean field for showing all states in current state or not.
|
# Adds the boolean field for showing all states in current state or not.
|
||||||
|
|
|
@ -9,7 +9,7 @@ import appy.gen as gen
|
||||||
from appy.gen.utils import *
|
from appy.gen.utils import *
|
||||||
from appy.gen.layout import Table, defaultPageLayouts
|
from appy.gen.layout import Table, defaultPageLayouts
|
||||||
from appy.gen.descriptors import WorkflowDescriptor, ClassDescriptor
|
from appy.gen.descriptors import WorkflowDescriptor, ClassDescriptor
|
||||||
from appy.shared.utils import sequenceTypes
|
from appy.shared.utils import sequenceTypes, normalizeText
|
||||||
from appy.shared.data import rtlLanguages
|
from appy.shared.data import rtlLanguages
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
@ -1215,7 +1215,7 @@ class BaseMixin:
|
||||||
|
|
||||||
def SortableTitle(self):
|
def SortableTitle(self):
|
||||||
'''Returns the title as must be stored in index "SortableTitle".'''
|
'''Returns the title as must be stored in index "SortableTitle".'''
|
||||||
return self.Title()
|
return normalizeText(self.Title())
|
||||||
|
|
||||||
def SearchableText(self):
|
def SearchableText(self):
|
||||||
'''This method concatenates the content of every field with
|
'''This method concatenates the content of every field with
|
||||||
|
|
|
@ -97,6 +97,7 @@ img { border: 0; vertical-align: middle}
|
||||||
border-bottom: 2px solid grey; padding: 2px 2px;}
|
border-bottom: 2px solid grey; padding: 2px 2px;}
|
||||||
.grid td { padding-right: 5px; }
|
.grid td { padding-right: 5px; }
|
||||||
.cellGap { padding-right: 0.4em; }
|
.cellGap { padding-right: 0.4em; }
|
||||||
|
.cellDashed { border: 1px dashed grey !important }
|
||||||
.noStyle { border: 0 !important; padding: 0 !important; margin: 0 !important; }
|
.noStyle { border: 0 !important; padding: 0 !important; margin: 0 !important; }
|
||||||
.noStyle td { border:0 !important; padding:0 !important; margin:0 !important; }
|
.noStyle td { border:0 !important; padding:0 !important; margin:0 !important; }
|
||||||
.translationLabel { background-color: #EAEAEA; border-bottom: 1px dashed grey;
|
.translationLabel { background-color: #EAEAEA; border-bottom: 1px dashed grey;
|
||||||
|
|
|
@ -61,10 +61,10 @@
|
||||||
<tal:cell repeat="date row">
|
<tal:cell repeat="date row">
|
||||||
<tal:cel define="tooEarly python: startDate and (date < startDate);
|
<tal:cel define="tooEarly python: startDate and (date < startDate);
|
||||||
tooLate python: endDate and not tooEarly and (date > endDate);
|
tooLate python: endDate and not tooEarly and (date > endDate);
|
||||||
inRange python: not tooEarly and not tooLate">
|
inRange python: not tooEarly and not tooLate;
|
||||||
|
cssClasses python: contextObj.callField(fieldName, 'getCellStyle', contextObj, date, today)">
|
||||||
<tal:comment replace="nothing">Dump an empty cell if we are out of the supported date range</tal:comment>
|
<tal:comment replace="nothing">Dump an empty cell if we are out of the supported date range</tal:comment>
|
||||||
<td tal:condition="not: inRange"
|
<td tal:condition="not: inRange" tal:attributes="class cssClasses">
|
||||||
tal:attributes="class python: test(date < today, 'even', 'odd');">
|
|
||||||
</td>
|
</td>
|
||||||
<tal:comment replace="nothing">Dump a normal cell if we are in range</tal:comment>
|
<tal:comment replace="nothing">Dump a normal cell if we are in range</tal:comment>
|
||||||
<tal:td condition="inRange">
|
<tal:td condition="inRange">
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
mayCreate python: mayEdit and not events;
|
mayCreate python: mayEdit and not events;
|
||||||
mayDelete python: mayEdit and events;"
|
mayDelete python: mayEdit and events;"
|
||||||
tal:attributes="style python: test(date.isCurrentDay(), 'font-weight:bold', 'font-weight:normal');
|
tal:attributes="style python: test(date.isCurrentDay(), 'font-weight:bold', 'font-weight:normal');
|
||||||
class python: test(date < today, 'even', 'odd');
|
class cssClasses;
|
||||||
onmouseover python: test(mayEdit, 'this.getElementsByTagName(\'img\')[0].style.visibility=\'visible\'', '');
|
onmouseover python: test(mayEdit, 'this.getElementsByTagName(\'img\')[0].style.visibility=\'visible\'', '');
|
||||||
onmouseout python: test(mayEdit, 'this.getElementsByTagName(\'img\')[0].style.visibility=\'hidden\'', '')">
|
onmouseout python: test(mayEdit, 'this.getElementsByTagName(\'img\')[0].style.visibility=\'hidden\'', '')">
|
||||||
<tal:day define="day date/day;
|
<tal:day define="day date/day;
|
||||||
|
|
|
@ -94,7 +94,9 @@ class AbstractWrapper(object):
|
||||||
'''Gets the attribute named p_name. Lot of cheating here.'''
|
'''Gets the attribute named p_name. Lot of cheating here.'''
|
||||||
if name == 'o': return object.__getattribute__(self, name)
|
if name == 'o': return object.__getattribute__(self, name)
|
||||||
elif name == 'tool': return self.o.getTool().appy()
|
elif name == 'tool': return self.o.getTool().appy()
|
||||||
elif name == 'request': return self.o.REQUEST
|
elif name == 'request':
|
||||||
|
# The request may not be present, ie if we are at Zope startup.
|
||||||
|
return getattr(self.o, 'REQUEST', None)
|
||||||
elif name == 'session': return self.o.REQUEST.SESSION
|
elif name == 'session': return self.o.REQUEST.SESSION
|
||||||
elif name == 'typeName': return self.__class__.__bases__[-1].__name__
|
elif name == 'typeName': return self.__class__.__bases__[-1].__name__
|
||||||
elif name == 'id': return self.o.id
|
elif name == 'id': return self.o.id
|
||||||
|
|
Loading…
Reference in a new issue