merge of '7d3304b769784beb1122a7a8507098f0d966fc4d'

and 'cff25745ccc8bc7caca33ea99cd3b32e15d60a4e'

Monotone-Parent: 7d3304b769784beb1122a7a8507098f0d966fc4d
Monotone-Parent: cff25745ccc8bc7caca33ea99cd3b32e15d60a4e
Monotone-Revision: 25ef4774f63414bacd7d7a784ee1c61d318f7003

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2009-07-28T20:10:30
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle 2009-07-28 20:10:30 +00:00
commit dee097622a
5 changed files with 1457 additions and 1457 deletions

View file

@ -36,11 +36,10 @@
></var:month-label> ></var:month-label>
<var:month-title class="contentStyle" <var:month-title class="contentStyle"
><span var:class="extraStyle" ><span var:class="extraStyle"
><a href="#" var:day="currentDay.shortDateString"
onclick="return onDaySelect(this);" onclick="return onDaySelect(this);"
var:day="currentDay.shortDateString" ><var:string value="currentDay.dayOfMonth"/>
><var:string value="currentDay.dayOfMonth"/></a </
></span
></var:month-title ></var:month-title
></var:month-overview> ></var:month-overview>
</div> </div>

View file

@ -1,297 +1,296 @@
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* custom extensions to the DOM api */ /* custom extensions to the DOM api */
Element.addMethods( Element.addMethods({
{ addInterface: function(element, objectInterface) {
addInterface: function(element, objectInterface) { element = $(element);
element = $(element); Object.extend(element, objectInterface);
Object.extend(element, objectInterface); if (element.bind)
if (element.bind) element.bind();
element.bind(); },
},
childNodesWithTag: function(element, tagName) { childNodesWithTag: function(element, tagName) {
element = $(element); element = $(element);
var matchingNodes = new Array(); var matchingNodes = new Array();
var tagName = tagName.toUpperCase(); var tagName = tagName.toUpperCase();
for (var i = 0; i < element.childNodes.length; i++) { for (var i = 0; i < element.childNodes.length; i++) {
var childNode = $(element.childNodes[i]); var childNode = $(element.childNodes[i]);
if (Object.isElement(childNode) if (Object.isElement(childNode)
&& childNode.tagName && childNode.tagName
&& childNode.tagName.toUpperCase() == tagName) && childNode.tagName.toUpperCase() == tagName)
matchingNodes.push(childNode); matchingNodes.push(childNode);
} }
return matchingNodes; return matchingNodes;
}, },
getParentWithTagName: function(element, tagName) { getParentWithTagName: function(element, tagName) {
element = $(element); element = $(element);
var currentElement = element; var currentElement = element;
tagName = tagName.toUpperCase(); tagName = tagName.toUpperCase();
currentElement = currentElement.parentNode; currentElement = currentElement.parentNode;
while (currentElement while (currentElement
&& currentElement.tagName != tagName) { && currentElement.tagName != tagName) {
currentElement = currentElement.parentNode; currentElement = currentElement.parentNode;
} }
return currentElement; return currentElement;
}, },
cascadeLeftOffset: function(element) { cascadeLeftOffset: function(element) {
element = $(element); element = $(element);
var currentElement = element; var currentElement = element;
var offset = 0; var offset = 0;
while (currentElement) { while (currentElement) {
offset += currentElement.offsetLeft; offset += currentElement.offsetLeft;
currentElement = $(currentElement).getParentWithTagName("div"); currentElement = $(currentElement).getParentWithTagName("div");
} }
return offset; return offset;
}, },
cascadeTopOffset: function(element) { cascadeTopOffset: function(element) {
element = $(element); element = $(element);
var currentElement = element; var currentElement = element;
var offset = 0; var offset = 0;
var i = 0; var i = 0;
while (currentElement && currentElement.tagName) { while (currentElement && currentElement.tagName) {
offset += currentElement.offsetTop; offset += currentElement.offsetTop;
currentElement = currentElement.parentNode; currentElement = currentElement.parentNode;
i++; i++;
} }
return offset; return offset;
}, },
dump: function(element, additionalInfo, additionalKeys) { dump: function(element, additionalInfo, additionalKeys) {
element = $(element); element = $(element);
var id = element.getAttribute("id"); var id = element.getAttribute("id");
var nclass = element.getAttribute("class"); var nclass = element.getAttribute("class");
var str = element.tagName; var str = element.tagName;
if (id) if (id)
str += "; id = " + id; str += "; id = " + id;
if (nclass) if (nclass)
str += "; class = " + nclass; str += "; class = " + nclass;
if (additionalInfo) if (additionalInfo)
str += "; " + additionalInfo; str += "; " + additionalInfo;
if (additionalKeys) if (additionalKeys)
for (var i = 0; i < additionalKeys.length; i++) { for (var i = 0; i < additionalKeys.length; i++) {
var value = element.getAttribute(additionalKeys[i]); var value = element.getAttribute(additionalKeys[i]);
if (value) if (value)
str += "; " + additionalKeys[i] + " = " + value; str += "; " + additionalKeys[i] + " = " + value;
} }
log (str); log (str);
}, },
getSelectedNodes: function(element) { getSelectedNodes: function(element) {
element = $(element); element = $(element);
if (!element.selectedElements) if (!element.selectedElements)
element.selectedElements = new Array(); element.selectedElements = new Array();
return element.selectedElements; return element.selectedElements;
}, },
getSelectedNodesId: function(element) { getSelectedNodesId: function(element) {
element = $(element); element = $(element);
var selArray = new Array(); var selArray = new Array();
if (element.selectedElements) { if (element.selectedElements) {
for (var i = 0; i < element.selectedElements.length; i++) { for (var i = 0; i < element.selectedElements.length; i++) {
var node = element.selectedElements[i]; var node = element.selectedElements[i];
selArray.push(node.getAttribute("id")); selArray.push(node.getAttribute("id"));
} }
} }
else else
element.selectedElements = new Array(); element.selectedElements = new Array();
return selArray; return selArray;
}, },
onContextMenu: function(element, event) { onContextMenu: function(element, event) {
element = $(element); element = $(element);
Event.stop(event);
if (document.currentPopupMenu)
hideMenu(document.currentPopupMenu);
if (document.currentPopupMenu) var popup = element.sogoContextMenu;
hideMenu(document.currentPopupMenu); var menuTop = Event.pointerY(event);
var menuLeft = Event.pointerX(event);
var heightDiff = (window.height()
- (menuTop + popup.offsetHeight));
if (heightDiff < 0)
menuTop += heightDiff;
var popup = element.sogoContextMenu; var leftDiff = (window.width()
var menuTop = Event.pointerY(event); - (menuLeft + popup.offsetWidth));
var menuLeft = Event.pointerX(event); if (leftDiff < 0)
var heightDiff = (window.height() menuLeft -= popup.offsetWidth;
- (menuTop + popup.offsetHeight));
if (heightDiff < 0)
menuTop += heightDiff;
var leftDiff = (window.width() var isVisible = true;
- (menuLeft + popup.offsetWidth)); if (popup.prepareVisibility)
if (leftDiff < 0) isVisible = popup.prepareVisibility();
menuLeft -= popup.offsetWidth;
var isVisible = true; if (isVisible) {
if (popup.prepareVisibility) popup.setStyle( { top: menuTop + "px",
isVisible = popup.prepareVisibility(); left: menuLeft + "px",
visibility: "visible" } );
if (isVisible) { document.currentPopupMenu = popup;
popup.setStyle( { top: menuTop + "px", document.body.observe("click", onBodyClickMenuHandler);
left: menuLeft + "px", }
visibility: "visible" } ); else
log ("Warning: not showing the contextual menu " + element.id);
},
document.currentPopupMenu = popup; attachMenu: function(element, menuName) {
document.body.observe("click", onBodyClickMenuHandler); element = $(element);
} element.sogoContextMenu = $(menuName);
else element.observe("contextmenu",
log ("Warning: not showing the contextual menu " + element.id); element.onContextMenu.bindAsEventListener(element));
}, },
attachMenu: function(element, menuName) { selectElement: function(element) {
element = $(element); element = $(element);
element.sogoContextMenu = $(menuName); element.addClassName('_selected');
element.observe("contextmenu",
element.onContextMenu.bindAsEventListener(element));
},
selectElement: function(element) { var parent = element.up();
element = $(element); if (!parent.selectedElements)
element.addClassName('_selected'); // Selected nodes are kept in a array at the
// container level.
parent.selectedElements = new Array();
for (var i = 0; i < parent.selectedElements.length; i++)
if (parent.selectedElements[i] == element) return;
parent.selectedElements.push(element); // use index instead ?
},
var parent = element.up(); selectRange: function(element, startIndex, endIndex) {
if (!parent.selectedElements) element = $(element);
// Selected nodes are kept in a array at the var s;
// container level. var e;
parent.selectedElements = new Array(); var rows;
for (var i = 0; i < parent.selectedElements.length; i++)
if (parent.selectedElements[i] == element) return;
parent.selectedElements.push(element); // use index instead ?
},
selectRange: function(element, startIndex, endIndex) { if (startIndex > endIndex) {
element = $(element); s = endIndex;
var s; e = startIndex;
var e; }
var rows; else {
s = startIndex;
e = endIndex;
}
if (element.tagName == 'UL')
rows = element.getElementsByTagName('LI');
else
rows = element.getElementsByTagName('TR');
while (s <= e) {
if (rows[s].nodeType == 1)
$(rows[s]).selectElement();
s++;
}
},
if (startIndex > endIndex) { deselect: function(element) {
s = endIndex; element = $(element);
e = startIndex; element.removeClassName('_selected');
}
else {
s = startIndex;
e = endIndex;
}
if (element.tagName == 'UL')
rows = element.getElementsByTagName('LI');
else
rows = element.getElementsByTagName('TR');
while (s <= e) {
if (rows[s].nodeType == 1)
$(rows[s]).selectElement();
s++;
}
},
deselect: function(element) { var parent = element.up();
element = $(element); if (parent && parent.selectedElements)
element.removeClassName('_selected'); parent.selectedElements = parent.selectedElements.without(element);
},
var parent = element.up(); deselectAll: function(element) {
if (parent && parent.selectedElements) element = $(element);
parent.selectedElements = parent.selectedElements.without(element); if (element.selectedElements) {
}, for (var i = 0; i < element.selectedElements.length; i++)
element.selectedElements[i].removeClassName('_selected');
element.selectedElements = null;
}
},
deselectAll: function(element) { setCaretTo: function(element, pos) {
element = $(element); element = $(element);
if (element.selectedElements) { if (element.setSelectionRange) { // For Mozilla and Safari
for (var i = 0; i < element.selectedElements.length; i++) element.focus();
element.selectedElements[i].removeClassName('_selected'); element.setSelectionRange(pos, pos);
element.selectedElements = null; }
} else if (element.createTextRange) { // For IE
}, var range = element.createTextRange();
range.move("character", pos);
range.select();
}
},
setCaretTo: function(element, pos) { selectText: function(element, start, end) {
element = $(element); element = $(element);
if (element.setSelectionRange) { // For Mozilla and Safari if (element.setSelectionRange) { // For Mozilla and Safari
element.focus(); element.setSelectionRange(start, end);
element.setSelectionRange(pos, pos); }
} else if (element.createTextRange) { // For IE
else if (element.createTextRange) { // For IE var textRange = element.createTextRange();
var range = element.createTextRange(); textRange.moveStart("character", start);
range.move("character", pos); textRange.moveEnd("character", end-element.value.length);
range.select(); textRange.select();
} }
}, else {
element.select();
}
},
selectText: function(element, start, end) { getRadioValue: function(element, radioName) {
element = $(element); element = $(element);
if (element.setSelectionRange) { // For Mozilla and Safari var radioValue;
element.setSelectionRange(start, end); Form.getInputs(element, 'radio', radioName).each(function(input) {
} if (input.checked)
else if (element.createTextRange) { // For IE radioValue = input.value;
var textRange = element.createTextRange(); });
textRange.moveStart("character", start); return radioValue;
textRange.moveEnd("character", end-element.value.length); },
textRange.select();
}
else {
element.select();
}
},
getRadioValue: function(element, radioName) { setRadioValue: function(element, radioName, value) {
element = $(element); element = $(element);
var radioValue; var i = 0;
Form.getInputs(element, 'radio', radioName).each(function(input) {
if (input.checked)
radioValue = input.value;
});
return radioValue;
},
setRadioValue: function(element, radioName, value) { Form.getInputs(element, 'radio', radioName).each(function(input) {
element = $(element); if (i == value)
var i = 0; input.checked = 1;
i++;
});
},
Form.getInputs(element, 'radio', radioName).each(function(input) { getCheckBoxListValues: function(element, checkboxName) {
if (i == value) element = $(element);
input.checked = 1; var values = new Array();
i++; var i = 0;
});
},
getCheckBoxListValues: function(element, checkboxName) { Form.getInputs(element, 'checkbox', checkboxName).each(function(input) {
element = $(element); if (input.checked)
var values = new Array(); values.push(i+1);
var i = 0;
Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { i++;
if (input.checked) });
values.push(i+1); return values.join(",");
},
i++; setCheckBoxListValues: function(element, checkboxName, values) {
}); element = $(element);
return values.join(","); var v = values.split(',');
}, var i = 1;
setCheckBoxListValues: function(element, checkboxName, values) { Form.getInputs(element, 'checkbox', checkboxName).each(function(input) {
element = $(element);
var v = values.split(',');
var i = 1;
Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { if ($(v).indexOf(i+"") != -1)
input.checked = 1;
if ($(v).indexOf(i+"") != -1) i++;
input.checked = 1; });
i++; }
}); });
}
});

View file

@ -220,41 +220,40 @@ TABLE#dateSelectorTable
#dateSelector TABLE, #dateSelector TABLE,
#dateSelector TABLE TABLE #dateSelector TABLE TABLE
{ border-collapse: collapse; { border-collapse: collapse;
text-align: center;
margin: 0px auto; margin: 0px auto;
width: 100%; } width: 100%; }
#dateSelector TABLE#dateSelectorTable TD TABLE TD TABLE#dateSelectorTable TD TABLE TD
{ width: 0px; /* temp hack */ } { width: 5px; /* temp hack */ }
#dateSelector TABLE#dateSelectorTable TD TABLE TD.activeDay, TABLE#dateSelectorTable TD TABLE TD.activeDay,
#dateSelector TABLE#dateSelectorTable TD TABLE TD.inactiveDay, TABLE#dateSelectorTable TD TABLE TD.inactiveDay,
#dateSelector TABLE#dateSelectorTable TD TABLE TD.dayOfToday TABLE#dateSelectorTable TD TABLE TD.dayOfToday
{ width: 1em; } { width: 100%; }
#dateSelector TABLE TABLE TD #dateSelector TABLE TABLE TD.activeDay,
#dateSelector TABLE TABLE TD.inactiveDay,
#dateSelector TABLE TABLE TD.dayOfToday
{ cursor: pointer; { cursor: pointer;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
border: 1px solid #fff; border: 1px solid #fff; }
text-align: center; }
#dateSelector TABLE TABLE TD:hover #dateSelectorTable TABLE TD.activeDay:hover,
#dateSelectorTable TABLE TD.inactiveDay:hover
{ border: 1px solid #deebf7; } { border: 1px solid #deebf7; }
#dateSelector TD SPAN #dateSelectorTable TABLE TD.activeDay:active,
{ text-align: center; #dateSelectorTable TABLE TD.inactiveDay:active
display: block; } { background-color: #ddd; }
#dateSelector TD SPAN A #dateSelectorTable TD SPAN
{ color: #000; { display: block;
background: inherit; color: #000;
text-decoration: none; } background: inherit; }
#dateSelector TD:active #dateSelector TD.inactiveDay SPAN
{ background-color: #ddd;
border: 1px solid #deebf7; }
#dateSelector TD.inactiveDay A
{ color: #dedfde; } { color: #dedfde; }
#dateSelector TD.dayOfToday #dateSelector TD.dayOfToday
@ -264,7 +263,7 @@ TABLE#dateSelectorTable
#dateSelector TD.dayOfToday._selected #dateSelector TD.dayOfToday._selected
{ background-color: #4b6983; } { background-color: #4b6983; }
#dateSelector TD._selected A #dateSelectorTable TABLE TD._selected SPAN
{ color: #fff; } { color: #fff; }
TABLE#eventsList TABLE#eventsList

View file

@ -804,9 +804,9 @@ function changeCalendarDisplay(data, newView) {
document.selectedDate.deselect(); document.selectedDate.deselect();
// Select day in date selector // Select day in date selector
var selectedLink = $$('table#dateSelectorTable a[day='+day+']'); var selectedLink = $$('table#dateSelectorTable span[day='+day+']');
if (selectedLink.length > 0) { if (selectedLink.length > 0) {
selectedCell = selectedLink[0].up(1); selectedCell = selectedLink[0].getParentWithTagName("td");
selectedCell.selectElement(); selectedCell.selectElement();
document.selectedDate = selectedCell; document.selectedDate = selectedCell;
} }
@ -1178,8 +1178,7 @@ function calendarDisplayCallback(http) {
observer = $("monthDaysView"); observer = $("monthDaysView");
} }
initMenu($("currentViewMenu"), menu); initMenu($("currentViewMenu"), menu);
observer.observe("contextmenu", function(event) { observer.observe("contextmenu", onMenuCurrentView);
popupMenu(event, 'currentViewMenu', this); });
var contentView; var contentView;
if (currentView == "monthview") if (currentView == "monthview")
@ -1766,6 +1765,10 @@ function onMenuSharing(event) {
} }
} }
function onMenuCurrentView(event) {
popupMenu(event, 'currentViewMenu', this);
}
function configureDragHandles() { function configureDragHandles() {
var handle = $("verticalDragHandle"); var handle = $("verticalDragHandle");
if (handle) { if (handle) {
@ -1784,7 +1787,7 @@ function configureDragHandles() {
function initCalendarSelector() { function initCalendarSelector() {
var selector = $("calendarSelector"); var selector = $("calendarSelector");
updateCalendarStatus(); updateCalendarStatus(); // triggers the initial events refresh
selector.changeNotification = updateCalendarsList; selector.changeNotification = updateCalendarsList;
var list = $("calendarList"); var list = $("calendarList");

File diff suppressed because it is too large Load diff