Fix rename of calendars, improve tasks count badge

pull/47/head
Francis Lachapelle 2014-07-08 17:19:55 -04:00
parent 1cf4841477
commit 45553be122
10 changed files with 87 additions and 49 deletions

11
NEWS
View File

@ -1,3 +1,12 @@
2.x.y (YYYY-MM-DD)
------------------
Enhancements
- improved badges of active tasks count
Bug fixes
- fixed rename of calendars
2.2.6 (2014-07-02)
------------------
@ -9,7 +18,7 @@ Enhancements
- implemented the GetAttachment ActiveSync command (#2808)
- implemented the Ping ActiveSync command
- added "soft deletes" support for ActiveSync (#2734)
- now display the active tasks next to calendar names (#2760)
- now display the active tasks count next to calendar names (#2760)
Bug fixes
- better handling of empty "Flag" messages over ActiveSync (#2806)

View File

@ -121,7 +121,8 @@ _intValueFromHex (NSString *hexString)
[calendar setObject: [folder ownerInContext: context]
forKey: @"owner"];
fActiveTasks = [folder activeTasks];
[calendar setObject:fActiveTasks forKey:@"activeTasks" ];
if (fActiveTasks > 0)
[calendar setObject: fActiveTasks forKey:@"activeTasks" ];
[calendars addObject: calendar];
}
}

View File

@ -110,7 +110,7 @@
var:class="currentContactFolderClass"
var:acl-editing="currentContactFolderAclEditing"
var:list-editing="currentContactFolderListEditing"
><var:string value="currentContactFolderName"/></li
><span><var:string value="currentContactFolderName"/></span></li
></var:foreach
>
</ul>

View File

@ -39,8 +39,9 @@ div.colorBox.calendarFolder<var:string value="currentCalendar.folder" />
><li class="denied" var:id="currentCalendar.id" var:owner="currentCalendar.owner" >
<input type="checkbox" class="checkBox" const:disabled="disabled" var:checked="currentCalendar.active" />
<div var:class="currentCalendarClass"><entity name="nbsp"/></div>
<var:string value="currentCalendar.displayName" />
<span id="activeTasks"><var:string value="currentCalendar.activeTasks"/></span>
<span><var:string value="currentCalendar.displayName"/></span><var:if
condition="currentCalendar.activeTasks"><span class="badge"><var:string value="currentCalendar.activeTasks"/></span
></var:if>
</li>
</var:foreach>
</ul>

View File

@ -630,6 +630,9 @@ function onFolderSelectionChange(event) {
var node = getTarget(event);
if (node.tagName == 'UL')
return;
if (node.tagName == "SPAN")
node = node.parentNode;
// Update rows selection
onRowClick(event, node);
}
@ -754,9 +757,13 @@ function appendAddressBook(name, folder) {
li.setAttribute("list-editing", "available");
li.setAttribute("acl-editing", "available");
li.addClassName("local");
li.appendChild(document.createTextNode(name
.replace("&lt;", "<", "g")
.replace("&gt;", ">", "g")));
var displayName = document.createElement("span");
displayName.appendChild(document.createTextNode(name
.replace("&lt;", "<", "g")
.replace("&gt;", ">", "g")));
li.appendChild(displayName);
updateAddressBooksMenus();
configureDroppables();
}

View File

@ -48,6 +48,9 @@ UL#calendarList LI
line-height: 2em;
padding-left: 10px; }
#calendarList .badge
{ margin-left: 4px; }
#tasksList .duelater,
#tasksList .duetoday,
#tasksList .overdue

View File

@ -1104,27 +1104,33 @@ function eventsListCallback(http) {
}
function activeTasksCallback(http) {
if (http.readyState == 4 && http.status == 200) {
if (http.responseText.length > 0) {
document.activeTasksAjaxRequest = null;
var data = http.responseText.evalJSON(true);
var list = $("calendarList");
var items = list.childNodesWithTag("li");
for (var i = 0; i < items.length; i++) {
var id = items[i].getAttribute("id").substr(1);
var number = data[id];
var input = items[i].childNodesWithTag("input")[0];
var activeTasks = items[i].childNodesWithTag("span")[0];
if (number == "0") {
activeTasks.innerHTML = "";
if (http.readyState == 4 && http.status == 200) {
if (http.responseText.length > 0) {
document.activeTasksAjaxRequest = null;
var data = http.responseText.evalJSON(true);
var list = $("calendarList");
var items = list.childNodesWithTag("li");
for (var i = 0; i < items.length; i++) {
var id = items[i].getAttribute("id").substr(1);
var number = parseInt(data[id]);
var input = items[i].childNodesWithTag("input")[0];
var activeTasks = items[i].childNodesWithTag("span")[1];
if (typeof activeTasks == "undefined") {
if (number > 0) {
activeTasks = createElement("span", null, "badge");
items[i].appendChild(activeTasks);
}
}
else if (number == 0) {
items[i].removeChild(activeTasks);
}
if (number > 0) {
activeTasks.innerHTML = number;
}
}
}
else {
activeTasks.innerHTML = "(" + number + ")";
}
}
}
}
}
function tasksListCallback(http) {
@ -3088,15 +3094,8 @@ function initCalendarSelector() {
var items = list.childNodesWithTag("li");
for (var i = 0; i < items.length; i++) {
var input = items[i].childNodesWithTag("input")[0];
var activeTasks = items[i].childNodesWithTag("span")[0];
var activeTasks = items[i].childNodesWithTag("span")[1];
$(input).observe("click", clickEventWrapper(updateCalendarStatus));
if (activeTasks.textContent == "0") {
activeTasks.innerHTML = "";
}
else {
activeTasks.innerHTML = "(" + activeTasks.innerText + ")";
}
}
var links = $("calendarSelectorButtons").childNodesWithTag("a");
@ -3108,7 +3107,7 @@ function initCalendarSelector() {
function onCalendarSelectionChange(event) {
var target = Event.element(event);
if (target.tagName == 'DIV') {
if (target.tagName == 'DIV' || target.tagName == 'SPAN') {
target = target.parentNode;
}
@ -3163,12 +3162,8 @@ function updateCalendarProperties(calendarID, calendarName, calendarColor) {
nodeID = "/" + folderName;
// log("nodeID: " + nodeID);
var calendarNode = $(nodeID);
var childNodes = calendarNode.childNodes;
var textNode = childNodes[childNodes.length-1];
if (textNode.tagName == 'DIV')
calendarNode.appendChild(document.createTextNode(calendarName));
else
childNodes[childNodes.length-1].nodeValue = calendarName;
var displayNameNode = calendarNode.childNodesWithTag("span")[0];
displayNameNode.innerHTML = calendarName;
appendStyleElement(nodeID, calendarColor);
}
@ -3348,9 +3343,12 @@ function appendCalendar(folderName, folderPath) {
li.appendChild(document.createTextNode(" "));
var colorBox = document.createElement("div");
li.appendChild(colorBox);
li.appendChild(document.createTextNode(folderName));
colorBox.appendChild(document.createTextNode("\u00a0"));
li.appendChild(colorBox);
var displayName = document.createElement("span");
displayName.appendChild(document.createTextNode(folderName));
li.appendChild(displayName);
$(colorBox).addClassName("colorBox");
$(colorBox).addClassName('calendarFolder' + folderPath.substr(1));
@ -3439,8 +3437,9 @@ function onCalendarRemove(event) {
}
function deletePersonalCalendar(folderElement) {
var displayName = folderElement.childNodesWithTag("span")[0].innerHTML.strip();
showConfirmDialog(_("Confirmation"),
_("Are you sure you want to delete the calendar \"%{0}\"?").formatted(folderElement.lastChild.nodeValue.strip()),
_("Are you sure you want to delete the calendar \"%{0}\"?").formatted(displayName),
deletePersonalCalendarConfirm.bind(folderElement));
}

View File

@ -44,7 +44,7 @@ function folderRenameCallback(http) {
if (http.readyState == 4) {
if (isHttpStatus204(http.status)) {
var dict = http.callbackData;
dict["node"].innerHTML = dict["name"];
dict["node"].childNodesWithTag("span")[0].innerHTML = dict["name"];
window.close();
}
}

View File

@ -29,7 +29,7 @@ TABLE, DIV, IMG
border: 0px;
margin: 0px;
padding: 0px;
word-break:break-all; }
word-break: break-all; }
FIELDSET
{ border: 1px solid #aaa;
@ -686,7 +686,8 @@ DIV.dialog H3
DIV.dialog.none P
{ margin: 0px;
padding: 5px 0px; }
padding: 5px 0px;
word-break: normal; }
DIV.dialog P.prompt
{ text-align: right; }
@ -849,6 +850,23 @@ INPUT[name="search"]
{ background-position: top left;
padding: 5px 2px 5px 5px; }
.badge
{ display: inline-block;
min-width: 10px;
padding: 2px 3px;
font-size: 9px;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
background-color: #777;
border-radius: 10px; }
.badge:empty
{ display: none; }
dt, dd {
line-height: 20px;
}

View File

@ -1356,7 +1356,7 @@ function getListIndexForFolder(items, owner, folderName) {
for (i = 0; i < items.length; i++) {
if (items[i].id == '/personal') continue;
var currentFolderName = items[i].lastChild.nodeValue.strip();
var currentFolderName = items[i].childNodesWithTag("span")[0].innerHTML.strip();
var currentOwner = items[i].readAttribute('owner');
if (currentOwner == owner) {
previousOwner = currentOwner;