appy.gen: bugfix with the master/slave mechanism while launching Zope in debug mode; added boolean attribute Date.reverseYears allowing to display years in reverse order in the widgets for choosing the year; bugfix in Javascript code for hiding slave widgets with Google Chrome.
This commit is contained in:
parent
a608a9b43f
commit
36237c3ee5
|
@ -467,6 +467,10 @@ class Type:
|
||||||
attributes that are based on the name of the Appy p_klass, and the
|
attributes that are based on the name of the Appy p_klass, and the
|
||||||
application name (p_appName).'''
|
application name (p_appName).'''
|
||||||
self.name = name
|
self.name = name
|
||||||
|
# Recompute the ID (and derived attributes) that may have changed if
|
||||||
|
# we are in debug mode (because we recreate new Type instances).
|
||||||
|
self.id = id(self)
|
||||||
|
if self.slaves: self.master_css = 'appyMaster master_%s' % self.id
|
||||||
# Determine ids of i18n labels for this field
|
# Determine ids of i18n labels for this field
|
||||||
if not klass: prefix = appName
|
if not klass: prefix = appName
|
||||||
else: prefix = getClassName(klass, appName)
|
else: prefix = getClassName(klass, appName)
|
||||||
|
@ -1381,9 +1385,9 @@ class Date(Type):
|
||||||
default=None, optional=False, editDefault=False,
|
default=None, optional=False, editDefault=False,
|
||||||
format=WITH_HOUR, calendar=True,
|
format=WITH_HOUR, calendar=True,
|
||||||
startYear=time.localtime()[0]-10,
|
startYear=time.localtime()[0]-10,
|
||||||
endYear=time.localtime()[0]+10, show=True, page='main',
|
endYear=time.localtime()[0]+10, reverseYears=False,
|
||||||
group=None, layouts=None, move=0, indexed=False,
|
show=True, page='main', group=None, layouts=None, move=0,
|
||||||
searchable=False, specificReadPermission=False,
|
indexed=False, searchable=False, specificReadPermission=False,
|
||||||
specificWritePermission=False, width=None, height=None,
|
specificWritePermission=False, width=None, height=None,
|
||||||
colspan=1, master=None, masterValue=None, focus=False,
|
colspan=1, master=None, masterValue=None, focus=False,
|
||||||
historized=False, mapping=None):
|
historized=False, mapping=None):
|
||||||
|
@ -1391,6 +1395,9 @@ class Date(Type):
|
||||||
self.calendar = calendar
|
self.calendar = calendar
|
||||||
self.startYear = startYear
|
self.startYear = startYear
|
||||||
self.endYear = endYear
|
self.endYear = endYear
|
||||||
|
# If reverseYears is True, in the selection box, available years, from
|
||||||
|
# self.startYear to self.endYear will be listed in reverse order.
|
||||||
|
self.reverseYears = reverseYears
|
||||||
Type.__init__(self, validator, multiplicity, index, default, optional,
|
Type.__init__(self, validator, multiplicity, index, default, optional,
|
||||||
editDefault, show, page, group, layouts, move, indexed,
|
editDefault, show, page, group, layouts, move, indexed,
|
||||||
searchable, specificReadPermission,
|
searchable, specificReadPermission,
|
||||||
|
@ -1406,6 +1413,12 @@ class Date(Type):
|
||||||
return ('jscalendar/calendar_stripped.js',
|
return ('jscalendar/calendar_stripped.js',
|
||||||
'jscalendar/calendar-en.js')
|
'jscalendar/calendar-en.js')
|
||||||
|
|
||||||
|
def getSelectableYears(self):
|
||||||
|
'''Gets the list of years one may select for this field.'''
|
||||||
|
res = range(self.startYear, self.endYear + 1)
|
||||||
|
if self.reverseYears: res.reverse()
|
||||||
|
return res
|
||||||
|
|
||||||
def validateValue(self, obj, value):
|
def validateValue(self, obj, value):
|
||||||
DateTime = obj.getProductConfig().DateTime
|
DateTime = obj.getProductConfig().DateTime
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1002,6 +1002,10 @@ class BaseMixin:
|
||||||
# Compare the value
|
# Compare the value
|
||||||
return compValue == dateValue
|
return compValue == dateValue
|
||||||
|
|
||||||
|
def getSelectableYears(self, name):
|
||||||
|
'''Gets the list of selectable years for Date field named p_name.'''
|
||||||
|
return self.getAppyType(name).getSelectableYears()
|
||||||
|
|
||||||
def getPossibleValues(self, name, withTranslations, withBlankValue,
|
def getPossibleValues(self, name, withTranslations, withBlankValue,
|
||||||
className=None):
|
className=None):
|
||||||
'''Gets the possible values for field named p_name. This field must be a
|
'''Gets the possible values for field named p_name. This field must be a
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 735 B After Width: | Height: | Size: 591 B |
|
@ -649,7 +649,7 @@
|
||||||
// There are multiple values, split it
|
// There are multiple values, split it
|
||||||
var subValues = idField.substring(1, idField.length-1).split(',');
|
var subValues = idField.substring(1, idField.length-1).split(',');
|
||||||
for (var k=0; k < subValues.length; k++){
|
for (var k=0; k < subValues.length; k++){
|
||||||
var subValue = subValues[k].strip();
|
var subValue = subValues[k].replace(' ','');
|
||||||
masterValue.push(subValue.substring(1, subValue.length-1));
|
masterValue.push(subValue.substring(1, subValue.length-1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<tal:comment replace="nothing">Edit macro for an Date.</tal:comment>
|
<tal:comment replace="nothing">Edit macro for an Date.</tal:comment>
|
||||||
<metal:edit define-macro="edit"
|
<metal:edit define-macro="edit"
|
||||||
tal:define="years python:range(widget['startYear'], widget['endYear']+1);
|
tal:define="years python: contextObj.getSelectableYears(widget['name']);
|
||||||
dummyName python: '_d_ummy_%s' % name">
|
dummyName python: '_d_ummy_%s' % name">
|
||||||
<tal:comment replace="nothing">This field is not used but required by the Javascript popup.</tal:comment>
|
<tal:comment replace="nothing">This field is not used but required by the Javascript popup.</tal:comment>
|
||||||
<input type="hidden" tal:attributes="name dummyName; id dummyName"/>
|
<input type="hidden" tal:attributes="name dummyName; id dummyName"/>
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
/* Appy-specific IE-fixes */
|
/* Appy-specific IE-fixes */
|
||||||
.portletSearch {
|
.portletSearch { font-size: 85%; border-left: 1px solid #8cacbb; border-right: 1px solid #8cacbb; }
|
||||||
font-size: 85%;
|
|
||||||
border-left: 1px solid #8cacbb;
|
|
||||||
border-right: 1px solid #8cacbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Stylesheet with Internet Explorer-specific workarounds. */
|
/* Stylesheet with Internet Explorer-specific workarounds. */
|
||||||
* html #portal-columns {
|
* html #portal-columns { width: 100%; }
|
||||||
width: 100%;
|
* html*#portal-columns { width: auto; }
|
||||||
}
|
|
||||||
* html*#portal-columns {
|
|
||||||
width: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* <dtml-with base_properties> */
|
/* <dtml-with base_properties> */
|
||||||
#topIcons { right: 238px; }
|
#topIcons { right: 238px; }
|
||||||
|
@ -25,7 +17,6 @@
|
||||||
#portlet-hp-news .portletHeader { margin-top: 1px; }
|
#portlet-hp-news .portletHeader { margin-top: 1px; }
|
||||||
.section-ncp-home .portletHeader { font-size:110%; }
|
.section-ncp-home .portletHeader { font-size:110%; }
|
||||||
input { margin-bottom: 1px; }
|
input { margin-bottom: 1px; }
|
||||||
|
|
||||||
table.listing td.top { position: relative; left: -1px; top: -1px; }
|
table.listing td.top { position: relative; left: -1px; top: -1px; }
|
||||||
div#portal-columns div.portlet { text-align: left; }
|
div#portal-columns div.portlet { text-align: left; }
|
||||||
div#portal-columns div#portal-column-one,
|
div#portal-columns div#portal-column-one,
|
||||||
|
@ -33,7 +24,6 @@ div#portal-columns div#portal-column-two { overflow: hidden; }
|
||||||
textarea { width: 97%; }
|
textarea { width: 97%; }
|
||||||
.visualOverflow { width: 88%; }
|
.visualOverflow { width: 88%; }
|
||||||
.visualGhosted { filter:alpha(opacity=20); }
|
.visualGhosted { filter:alpha(opacity=20); }
|
||||||
|
|
||||||
#portal-logo {
|
#portal-logo {
|
||||||
height /**/: <dtml-var "_[logoName].height">px;
|
height /**/: <dtml-var "_[logoName].height">px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -41,37 +31,26 @@ textarea { width: 97%; }
|
||||||
|
|
||||||
#clear-space-before-wrapper-table { display: none };
|
#clear-space-before-wrapper-table { display: none };
|
||||||
/* Fix bottom margin on tabs in IE */
|
/* Fix bottom margin on tabs in IE */
|
||||||
#portal-globalnav li.selected a {
|
#portal-globalnav li.selected a { position: relative; }
|
||||||
position: relative;
|
#portal-colophon .colophonIcon { height: 0px !important; height /**/: 15px; }
|
||||||
}
|
|
||||||
|
|
||||||
#portal-colophon .colophonIcon {
|
|
||||||
height: 0px !important;
|
|
||||||
height /**/: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.actionMenu .actionMenuHeader a { display: inline; }
|
.actionMenu .actionMenuHeader a { display: inline; }
|
||||||
.actionMenu .actionMenuContent { top: 1.4em; }
|
.actionMenu .actionMenuContent { top: 1.4em; }
|
||||||
|
|
||||||
/* Calendar fixes */
|
/* Calendar fixes */
|
||||||
.ploneCalendar {
|
.ploneCalendar { border-collapse:collapse; width:auto; height:1%; }
|
||||||
border-collapse:collapse;
|
|
||||||
width:auto;
|
|
||||||
height:1%;
|
|
||||||
}
|
|
||||||
.ploneCalendar td { width:1%; }
|
.ploneCalendar td { width:1%; }
|
||||||
.ploneCalendar .todaynoevent,
|
.ploneCalendar .todaynoevent,
|
||||||
.ploneCalendar .todayevent { position: relative; }
|
.ploneCalendar .todayevent { position: relative; }
|
||||||
.hiddenStructure { position: absolute; }
|
.hiddenStructure { position: absolute; }
|
||||||
|
|
||||||
body { /* These work in IE only, changes the look of the scrollbar + textareas */
|
body { /* These work in IE only, changes the look of the scrollbar + textareas */
|
||||||
scrollbar-base-color: &dtml-globalBackgroundColor;;
|
scrollbar-base-color: &dtml-globalBackgroundColor;;
|
||||||
scrollbar-highlight-color: &dtml-globalBackgroundColor;;
|
scrollbar-highlight-color: &dtml-globalBackgroundColor;;
|
||||||
scrollbar-track-color: &dtml-evenRowBackgroundColor;;
|
scrollbar-track-color: &dtml-evenRowBackgroundColor;;
|
||||||
scrollbar-darkshadow-color: &dtml-evenRowBackgroundColor;;
|
scrollbar-darkshadow-color: &dtml-evenRowBackgroundColor;;
|
||||||
scrollbar-3dlight-color: &dtml-globalBorderColor;;
|
scrollbar-3dlight-color: &dtml-globalBorderColor;;
|
||||||
scrollbar-shadow-color: &dtml-globalBorderColor;;
|
scrollbar-shadow-color: &dtml-globalBorderColor;;
|
||||||
scrollbar-arrow-color: &dtml-globalFontColor;;
|
scrollbar-arrow-color: &dtml-globalFontColor;;
|
||||||
}
|
}
|
||||||
|
|
||||||
#floatholder, #float { height: 1%; }
|
#floatholder, #float { height: 1%; }
|
||||||
|
@ -98,7 +77,6 @@ body { /* These work in IE only, changes the look of the scrollbar + textareas *
|
||||||
* html p { position: relative; }
|
* html p { position: relative; }
|
||||||
* html h1.documentFirstHeading { height: auto; }
|
* html h1.documentFirstHeading { height: auto; }
|
||||||
* html #objectMenu.actionMenu .actionMenuContent li { height: auto; }
|
* html #objectMenu.actionMenu .actionMenuContent li { height: auto; }
|
||||||
|
|
||||||
#portal-searchbox { overflow: hidden; }
|
#portal-searchbox { overflow: hidden; }
|
||||||
|
|
||||||
/* </dtml-with> */
|
/* </dtml-with> */
|
||||||
|
|
Loading…
Reference in a new issue