mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-22 03:45:25 +00:00
See ChangeLog.
Monotone-Parent: 86a177d4a05deda193edc7d9e0fedca89758cadd Monotone-Revision: 858a9ca804ecabd66c735a54fe09bd4e5b7ec5b2 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2010-07-30T20:10:00 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
2010-07-30 Francis Lachapelle <flachapelle@inverse.ca>
|
||||
|
||||
* UI/WebServerResources/SchedulerUI.js (deleteEvent): improved
|
||||
the function to delete all selected events cells.
|
||||
(onSelectAll): improved the function to select all events cells.
|
||||
(onDocumentKeydown): select all elements upon ctrl-A.
|
||||
(onCalendarSelectEvent): allow multiple selections.
|
||||
|
||||
* UI/WebServerResources/HTMLElement.js (selectAll): new method to
|
||||
select all entries of a list or a table.
|
||||
|
||||
* UI/WebServerResources/scriptaculous/dragdrop.js (initDrag):
|
||||
avoid stopping the event propagation so the blur event is properly
|
||||
fired on the search input field when it isfocused.
|
||||
|
||||
2010-07-28 Francis Lachapelle <flachapelle@inverse.ca>
|
||||
|
||||
* UI/WebServerResources/MailerUI.js (deleteCachedMailboxByType,
|
||||
|
||||
@@ -1146,7 +1146,7 @@ function onDocumentKeydown(event) {
|
||||
nextRow = row.previous("tr");
|
||||
if (nextRow) {
|
||||
row.up().deselectAll();
|
||||
|
||||
|
||||
// Adjust the scollbar
|
||||
var viewPort = $("contactsListContent");
|
||||
var divDimensions = viewPort.getDimensions();
|
||||
@@ -1167,6 +1167,10 @@ function onDocumentKeydown(event) {
|
||||
Event.stop(event);
|
||||
}
|
||||
}
|
||||
else if (event.ctrlKey == 1 && event.keyCode == 65) { // Ctrl-A
|
||||
$("contactsList").selectAll();
|
||||
Event.stop(event);
|
||||
}
|
||||
}
|
||||
|
||||
/*function fixSearchFieldPosition () {
|
||||
@@ -1193,10 +1197,7 @@ function initContacts(event) {
|
||||
$("uploadOK").observe("click", hideImportResults);
|
||||
}
|
||||
|
||||
if (Prototype.Browser.Gecko)
|
||||
Event.observe(document, "keypress", onDocumentKeydown); // for FF2
|
||||
else
|
||||
Event.observe(document, "keydown", onDocumentKeydown);
|
||||
Event.observe(document, "keydown", onDocumentKeydown);
|
||||
|
||||
configureAddressBooks();
|
||||
updateAddressBooksMenus();
|
||||
|
||||
@@ -202,6 +202,17 @@ Element.addMethods({
|
||||
}
|
||||
},
|
||||
|
||||
selectAll: function(element) {
|
||||
element = $(element);
|
||||
if (element.tagName == 'UL')
|
||||
rows = element.getElementsByTagName('LI');
|
||||
else
|
||||
rows = element.select('TBODY TR');
|
||||
for (var i = 0; i < rows.length; i++)
|
||||
if (rows[i].nodeType == 1)
|
||||
$(rows[i]).selectElement();
|
||||
},
|
||||
|
||||
deselect: function(element) {
|
||||
element = $(element);
|
||||
element.removeClassName('_selected');
|
||||
|
||||
@@ -198,7 +198,7 @@ function deleteEvent() {
|
||||
var nodes = listOfSelection.getSelectedRows();
|
||||
if (nodes.length > 0) {
|
||||
var label = "";
|
||||
if (!nodes[0].erasable) {
|
||||
if (!nodes[0].erasable && !IsSuperUser) {
|
||||
window.alert(_("You don't have the required privileges to perform the operation."));
|
||||
return false;
|
||||
}
|
||||
@@ -239,24 +239,35 @@ function deleteEvent() {
|
||||
}
|
||||
}
|
||||
else if (selectedCalendarCell) {
|
||||
if (!selectedCalendarCell[0].erasable) {
|
||||
window.alert(_("You don't have the required privileges to perform the operation."));
|
||||
return false;
|
||||
}
|
||||
if (selectedCalendarCell[0].recurrenceTime) {
|
||||
if (selectedCalendarCell.length == 1
|
||||
&& selectedCalendarCell[0].recurrenceTime) {
|
||||
_editRecurrenceDialog(selectedCalendarCell[0], "confirmDeletion");
|
||||
}
|
||||
else {
|
||||
var label = _("eventDeleteConfirmation");
|
||||
if (confirm(label)) {
|
||||
if (document.deleteEventAjaxRequest) {
|
||||
document.deleteEventAjaxRequest.aborted = true;
|
||||
document.deleteEventAjaxRequest.abort();
|
||||
}
|
||||
eventsToDelete.push([selectedCalendarCell[0].cname]);
|
||||
calendarsOfEventsToDelete.push(selectedCalendarCell[0].calendar);
|
||||
_batchDeleteEvents();
|
||||
else if (confirm(_("eventDeleteConfirmation"))) {
|
||||
if (document.deleteEventAjaxRequest) {
|
||||
document.deleteEventAjaxRequest.aborted = true;
|
||||
document.deleteEventAjaxRequest.abort();
|
||||
}
|
||||
var canDelete = true;
|
||||
var sortedNodes = [];
|
||||
var calendars = [];
|
||||
for (var i = 0; i < selectedCalendarCell.length; i++) {
|
||||
canDelete = canDelete && (selectedCalendarCell[i].erasable || IsSuperUser);
|
||||
if (canDelete) {
|
||||
var calendar = selectedCalendarCell[i].calendar;
|
||||
if (!sortedNodes[calendar]) {
|
||||
sortedNodes[calendar] = [];
|
||||
calendars.push(calendar);
|
||||
}
|
||||
sortedNodes[calendar].push(selectedCalendarCell[i].cname);
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 0; i < calendars.length; i++) {
|
||||
calendarsOfEventsToDelete.push(calendars[i]);
|
||||
eventsToDelete.push(sortedNodes[calendars[i]]);
|
||||
}
|
||||
_batchDeleteEvents();
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -668,13 +679,6 @@ function performDeleteEventCallback(http) {
|
||||
}
|
||||
}
|
||||
|
||||
function onSelectAll() {
|
||||
var list = $("eventsList");
|
||||
list.selectRowsMatchingClass("eventRow");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* in dateselector */
|
||||
function onDaySelect(node) {
|
||||
var day = node.getAttribute('day');
|
||||
@@ -1854,30 +1858,89 @@ function _eventBlocksMatching(calendar, cname, recurrenceTime) {
|
||||
|
||||
function selectCalendarEvent(calendar, cname, recurrenceTime) {
|
||||
// Select event in calendar view
|
||||
if (selectedCalendarCell)
|
||||
for (var i = 0; i < selectedCalendarCell.length; i++)
|
||||
selectedCalendarCell[i].deselect();
|
||||
|
||||
var selection = _eventBlocksMatching(calendar, cname, recurrenceTime);
|
||||
if (selection) {
|
||||
for (var i = 0; i < selection.length; i++)
|
||||
selection[i].selectElement();
|
||||
selectedCalendarCell = selection;
|
||||
if (selectedCalendarCell)
|
||||
selectedCalendarCell = selectedCalendarCell.concat(selection);
|
||||
else
|
||||
selectedCalendarCell = selection;
|
||||
}
|
||||
|
||||
return selection;
|
||||
}
|
||||
|
||||
function onCalendarSelectEvent(event) {
|
||||
selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime);
|
||||
function onSelectAll(event) {
|
||||
if (listOfSelection)
|
||||
listOfSelection.selectAll();
|
||||
else {
|
||||
// Select events cells
|
||||
var selectedBlocks = [];
|
||||
for (var c in calendarEvents) {
|
||||
var events = calendarEvents[c];
|
||||
for (var e in events) {
|
||||
var occurrences = events[e];
|
||||
for (var i = 0; i < occurrences.length; i++)
|
||||
selectedBlocks = selectedBlocks.concat(occurrences[i].blocks);
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < selectedBlocks.length; i++)
|
||||
selectedBlocks[i].selectElement();
|
||||
|
||||
selectedCalendarCell = selectedBlocks;
|
||||
}
|
||||
|
||||
// Select event in events list
|
||||
var list = $("eventsList");
|
||||
$(list.tBodies[0]).deselectAll();
|
||||
return false;
|
||||
}
|
||||
|
||||
function onCalendarSelectEvent(event) {
|
||||
var list = $("eventsList").down("TBODY");
|
||||
var alreadySelected = false;
|
||||
|
||||
// Look for event in events list
|
||||
// TODO: event will likely not be found if an Ajax query is refreshing
|
||||
// the events list.
|
||||
var rowID = this.calendar + "-" + this.cname;
|
||||
if (this.recurrenceTime)
|
||||
rowID += "-" + this.recurrenceTime;
|
||||
var row = $(rowID);
|
||||
|
||||
// Check if event is already selected
|
||||
if (selectedCalendarCell)
|
||||
for (var i = 0; i < selectedCalendarCell.length; i++)
|
||||
if (selectedCalendarCell[i] == this) {
|
||||
alreadySelected = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((isMac() && event.metaKey == 1) || (!isMac() && event.ctrlKey == 1)) {
|
||||
// If meta or ctrl key is pressed, inverse the selection
|
||||
if (alreadySelected) {
|
||||
this.deselect();
|
||||
selectedCalendarCell.splice(i, 1);
|
||||
if (row)
|
||||
row.deselect();
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (event.shiftKey == 0) {
|
||||
// Unselect entries in events list and calendar view
|
||||
list.deselectAll();
|
||||
if (selectedCalendarCell) {
|
||||
for (var i = 0; i < selectedCalendarCell.length; i++)
|
||||
if (selectedCalendarCell[i] != this)
|
||||
selectedCalendarCell[i].deselect();
|
||||
}
|
||||
selectedCalendarCell = [this];
|
||||
}
|
||||
|
||||
if (!alreadySelected) {
|
||||
// Select event in calendar view
|
||||
selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime);
|
||||
}
|
||||
// Select event in events list
|
||||
if (row) {
|
||||
var div = row.parentNode.parentNode.parentNode;
|
||||
div.scrollTop = row.offsetTop - (div.offsetHeight / 2);
|
||||
@@ -2649,6 +2712,10 @@ function onDocumentKeydown(event) {
|
||||
deleteEvent();
|
||||
event.stop();
|
||||
}
|
||||
else if (event.ctrlKey == 1 && event.keyCode == 65) { // Ctrl-A
|
||||
onSelectAll(event);
|
||||
Event.stop(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2675,10 +2742,7 @@ function initCalendars() {
|
||||
$("uploadCancel").observe("click", hideCalendarImport);
|
||||
$("uploadOK").observe("click", hideImportResults);
|
||||
|
||||
if (Prototype.Browser.Gecko)
|
||||
Event.observe(document, "keypress", onDocumentKeydown); // for FF2
|
||||
else
|
||||
Event.observe(document, "keydown", onDocumentKeydown);
|
||||
Event.observe(document, "keydown", onDocumentKeydown);
|
||||
}
|
||||
|
||||
onWindowResize.defer();
|
||||
|
||||
@@ -326,7 +326,6 @@ var Draggable = Class.create({
|
||||
this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
|
||||
|
||||
Draggables.activate(this);
|
||||
Event.stop(event);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user