Monotone-Parent: 64979613a77fc7ce9232d0bc7e3f8ba911f6cd92

Monotone-Revision: f0e213596b61da3ea457a1a0a14230911c3b4fe6

Monotone-Author: flachapelle@inverse.ca
Monotone-Date: 2008-08-21T15:30:51
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Francis Lachapelle
2008-08-21 15:30:51 +00:00
parent 7f15874669
commit 6665b3c583
2 changed files with 157 additions and 80 deletions
-3
View File
@@ -485,9 +485,6 @@ function initMailEditor() {
if (listContent.length > 0)
$("attachmentsArea").setStyle({ display: "block" });
var list = $("addressList");
TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true});
var textarea = $("text");
var textContent = textarea.getValue();
var sigLimit = textContent.lastIndexOf("--");
+157 -77
View File
@@ -2,8 +2,8 @@
*
* Copyright (c) 2007 Andrew Tetlaw & Millstream Web Software
* http://www.millstream.com.au/view/code/tablekit/
* Version: 1.2.1 2007-03-11
*
* Version: 1.3b 2008-03-23
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
@@ -63,19 +63,18 @@ Object.extend(TableKit, {
getBodyRows : function(table) {
table = $(table);
var id = table.id;
if(!TableKit.rows[id]) {
TableKit.rows[id] = (table.tHead && table.tHead.rows.length > 0) ? $A(table.tBodies[0].rows) : $A(table.rows).without(table.rows[0]);
if(!TableKit.tables[id].dom.rows) {
TableKit.tables[id].dom.rows = (table.tHead && table.tHead.rows.length > 0) ? $A(table.tBodies[0].rows) : $A(table.rows).without(table.rows[0]);
}
return TableKit.rows[id];
return TableKit.tables[id].dom.rows;
},
getHeaderCells : function(table, cell) {
if(!table) { table = $(cell).up('table'); }
var id = table.id;
if(!TableKit.heads[id]) {
//TableKit.heads[id] = $A((table.tHead && table.tHead.rows.length > 0) ? table.tHead.rows[table.tHead.rows.length-1].cells : table.rows[0].cells);
TableKit.heads[id] = $A((table.tHead && table.tHead.rows.length > 0) ? table.tHead.rows[0].cells : table.rows[0].cells);
if(!TableKit.tables[id].dom.head) {
TableKit.tables[id].dom.head = $A((table.tHead && table.tHead.rows.length > 0) ? table.tHead.rows[table.tHead.rows.length-1].cells : table.rows[0].cells);
}
return TableKit.heads[id];
return TableKit.tables[id].dom.head;
},
getCellIndex : function(cell) {
return $A(cell.parentNode.cells).indexOf(cell);
@@ -85,30 +84,42 @@ Object.extend(TableKit, {
},
getCellText : function(cell, refresh) {
if(!cell) { return ""; }
TableKit.registerCell(cell);
var data = TableKit.cells[cell.id];
var data = TableKit.getCellData(cell);
if(refresh || data.refresh || !data.textContent) {
data.textContent = cell.textContent ? cell.textContent : cell.innerText;
data.refresh = false;
}
return data.textContent;
},
getCellData : function(cell) {
var t = null;
if(!cell.id) {
t = $(cell).up('table');
cell.id = t.id + "-cell-" + TableKit._getc();
}
var tblid = t ? t.id : cell.id.match(/(.*)-cell.*/)[1];
if(!TableKit.tables[tblid].dom.cells[cell.id]) {
TableKit.tables[tblid].dom.cells[cell.id] = {textContent : '', htmlContent : '', active : false};
}
return TableKit.tables[tblid].dom.cells[cell.id];
},
register : function(table, options) {
if(!table.id) {
TableKit._tblcount += 1;
table.id = "tablekit-table-" + TableKit._tblcount;
table.id = "tablekit-table-" + TableKit._getc();
}
var id = table.id;
TableKit.tables[id] = TableKit.tables[id] ? Object.extend(TableKit.tables[id], options || {}) : Object.extend({sortable:false,resizable:false,editable:false}, options || {});
TableKit.tables[id] = TableKit.tables[id] ?
Object.extend(TableKit.tables[id], options || {}) :
Object.extend(
{dom : {head:null,rows:null,cells:{}},sortable:false,resizable:false,editable:false},
options || {}
);
},
registerCell : function(cell) {
if(!cell.id) {
TableKit._cellcount += 1;
cell.id = "tablekit-cell-" + TableKit._cellcount;
}
if(!TableKit.cells[cell.id]) {
TableKit.cells[cell.id] = {textContent : '', htmlContent : '', active : false};
notify : function(eventName, table, event) {
if(TableKit.tables[table.id] && TableKit.tables[table.id].observers && TableKit.tables[table.id].observers[eventName]) {
TableKit.tables[table.id].observers[eventName](table, event);
}
TableKit.options.observers[eventName](table, event)();
},
isSortable : function(table) {
return TableKit.tables[table.id] ? TableKit.tables[table.id].sortable : false;
@@ -139,9 +150,6 @@ Object.extend(TableKit, {
},
tables : {},
_opcache : {},
cells : {},
rows : {},
heads : {},
options : {
autoLoad : true,
stripe : true,
@@ -154,6 +162,7 @@ Object.extend(TableKit, {
columnClass : 'sortcol',
descendingClass : 'sortdesc',
ascendingClass : 'sortasc',
defaultSortDirection : 1,
noSortClass : 'nosort',
sortFirstAscendingClass : 'sortfirstasc',
sortFirstDecendingClass : 'sortfirstdesc',
@@ -165,10 +174,77 @@ Object.extend(TableKit, {
formClassName : 'editable-cell-form',
noEditClass : 'noedit',
editAjaxURI : '/',
editAjaxOptions : {}
editAjaxOptions : {},
observers : {
'onSortStart' : function(){},
'onSort' : function(){},
'onSortEnd' : function(){},
'onResizeStart' : function(){},
'onResize' : function(){},
'onResizeEnd' : function(){},
'onEditStart' : function(){},
'onEdit' : function(){},
'onEditEnd' : function(){}
}
},
_c : 0,
_getc : function() {return TableKit._c += 1;},
unloadTable : function(table){
table = $(table);
if(!TableKit.tables[table.id]) {return;} //if not an existing registered table return
var cells = TableKit.getHeaderCells(table);
var op = TableKit.option('sortable resizable editable noSortClass descendingClass ascendingClass columnClass sortFirstAscendingClass sortFirstDecendingClass', table.id);
//unregister all the sorting and resizing events
cells.each(function(c){
c = $(c);
if(op.sortable) {
if(!c.hasClassName(op.noSortClass)) {
Event.stopObserving(c, 'mousedown', TableKit.Sortable._sort);
c.removeClassName(op.columnClass);
c.removeClassName(op.sortFirstAscendingClass);
c.removeClassName(op.sortFirstDecendingClass);
//ensure that if table reloaded current sort is remembered via sort first class name
if(c.hasClassName(op.ascendingClass)) {
c.removeClassName(op.ascendingClass);
c.addClassName(op.sortFirstAscendingClass)
} else if (c.hasClassName(op.descendingClass)) {
c.removeClassName(op.descendingClass);
c.addClassName(op.sortFirstDecendingClass)
}
}
}
if(op.resizable) {
Event.stopObserving(c, 'mouseover', TableKit.Resizable.initDetect);
Event.stopObserving(c, 'mouseout', TableKit.Resizable.killDetect);
}
});
//unregister the editing events and cancel any open editors
if(op.editable) {
Event.stopObserving(table.tBodies[0], 'click', TableKit.Editable._editCell);
for(var c in TableKit.tables[table.id].dom.cells) {
if(TableKit.tables[table.id].dom.cells[c].active) {
var cell = $(c);
var editor = TableKit.Editable.getCellEditor(cell);
editor.cancel(cell);
}
}
}
//delete the cache
TableKit.tables[table.id].dom = {head:null,rows:null,cells:{}}; // TODO: watch this for mem leaks
},
reloadTable : function(table){
table = $(table);
TableKit.unloadTable(table);
var op = TableKit.option('sortable resizable editable', table.id);
if(op.sortable) {TableKit.Sortable.init(table);}
if(op.resizable) {TableKit.Resizable.init(table);}
if(op.editable) {TableKit.Editable.init(table);}
},
reload : function() {
for(var k in TableKit.tables) {
TableKit.reloadTable(k);
}
},
_tblcount : 0,
_cellcount : 0,
load : function() {
if(TableKit.options.autoLoad) {
if(TableKit.options.sortable) {
@@ -288,15 +364,16 @@ TableKit.Sortable = {
table = table ? $(table) : cell.up('table');
index = TableKit.getCellIndex(cell);
}
var op = TableKit.option('noSortClass descendingClass ascendingClass', table.id);
var op = TableKit.option('noSortClass descendingClass ascendingClass defaultSortDirection', table.id);
if(cell.hasClassName(op.noSortClass)) {return;}
order = order ? order : (cell.hasClassName(op.descendingClass) ? 1 : -1);
//TableKit.notify('onSortStart', table);
order = order ? order : op.defaultSortDirection;
var rows = TableKit.getBodyRows(table);
if(cell.hasClassName(op.ascendingClass) || cell.hasClassName(op.descendingClass)) {
rows.reverse(); // if it was already sorted we just need to reverse it.
order = cell.hasClassName(op.descendingClass) ? 1 : -1;
} else {
var datatype = TableKit.Sortable.getDataType(cell,index,table);
var tkst = TableKit.Sortable.types;
@@ -317,10 +394,8 @@ TableKit.Sortable = {
c.removeClassName(op.descendingClass);
if(index === i) {
if(order === 1) {
c.removeClassName(op.descendingClass);
c.addClassName(op.ascendingClass);
} else {
c.removeClassName(op.ascendingClass);
c.addClassName(op.descendingClass);
}
}
@@ -341,14 +416,16 @@ TableKit.Sortable = {
var cache = colcache[table.id] ? colcache[table.id] : (colcache[table.id] = {});
if(!cache[index]) {
var t = '';
var t = false;
// first look for a data type id on the heading row cell
if(cell.id && TableKit.Sortable.types[cell.id]) {
t = cell.id;
t = cell.id
}
if(!t) {
t = $w(cell.className).detect(function(n){ // then look for a data type classname on the heading row cell
return (TableKit.Sortable.types[n]) ? true : false;
});
}
t = cell.classNames().detect(function(n){ // then look for a data type classname on the heading row cell
return (TableKit.Sortable.types[n]) ? true : false;
});
if(!t) {
var rows = TableKit.getBodyRows(table);
cell = rows[0].cells[index]; // grab same index cell from body row to try and match data type
@@ -442,9 +519,14 @@ TableKit.Sortable.addSortType(
var mo_num = parseInt(r[2],10)-1;
var day_num = r[1];
var hr_num = r[4] ? r[4] : 0;
if(r[7] && r[7].toLowerCase().indexOf('p') !== -1) {
hr_num = parseInt(r[4],10) + 12;
}
if(r[7]) {
var chr = parseInt(r[4],10);
if(r[7].toLowerCase().indexOf('p') !== -1) {
hr_num = chr < 12 ? chr + 12 : chr;
} else if(r[7].toLowerCase().indexOf('a') !== -1) {
hr_num = chr < 12 ? chr : 0;
}
}
var min_num = r[5] ? r[5] : 0;
var sec_num = r[6] ? r[6] : 0;
return new Date(yr_num, mo_num, day_num, hr_num, min_num, sec_num, 0).valueOf();
@@ -458,9 +540,14 @@ TableKit.Sortable.addSortType(
var mo_num = parseInt(r[1],10)-1;
var day_num = r[2];
var hr_num = r[4] ? r[4] : 0;
if(r[7] && r[7].toLowerCase().indexOf('p') !== -1) {
hr_num = parseInt(r[4],10) + 12;
}
if(r[7]) {
var chr = parseInt(r[4],10);
if(r[7].toLowerCase().indexOf('p') !== -1) {
hr_num = chr < 12 ? chr + 12 : chr;
} else if(r[7].toLowerCase().indexOf('a') !== -1) {
hr_num = chr < 12 ? chr : 0;
}
}
var min_num = r[5] ? r[5] : 0;
var sec_num = r[6] ? r[6] : 0;
return new Date(yr_num, mo_num, day_num, hr_num, min_num, sec_num, 0).valueOf();
@@ -516,7 +603,7 @@ TableKit.Sortable.addSortType(
return TableKit.Sortable.Type.compare(new Date(ds + a),new Date(ds + b));
}}),
new TableKit.Sortable.Type('currency',{
pattern : /^[$£¥€¤]/, // dollar,pound,yen,euro,generic currency symbol
pattern : /^[$]/, // dollar,pound,yen,euro,generic currency symbol
normal : function(v) {
return v ? parseFloat(v.replace(/[^-\d\.]/g,'')) : 0;
}})
@@ -530,21 +617,10 @@ TableKit.Resizable = {
var cells = TableKit.getHeaderCells(table);
cells.each(function(c){
c = $(c);
//log ("init on " + c.firstChild.nodeValue);
Event.observe(c, 'mouseover', TableKit.Resizable.initDetect);
Event.observe(c, 'mouseout', TableKit.Resizable.killDetect);
});
},
reload : function(table) {
table = $(table);
var cells = TableKit.getHeaderCells(table);
cells.each(function(c){
c = $(c);
Event.stopObserving(c, 'mouseover', TableKit.Resizable.initDetect);
Event.stopObserving(c, 'mouseout', TableKit.Resizable.killDetect);
});
TableKit.Resizable.init(table);
},
resize : function(table, index, w) {
var cell;
if(typeof index === 'number') {
@@ -561,6 +637,7 @@ TableKit.Resizable = {
}
var pad = parseInt(cell.getStyle('paddingLeft'),10) + parseInt(cell.getStyle('paddingRight'),10);
w = Math.max(w-pad, TableKit.option('minWidth', table.id)[0]);
cell.setStyle({'width' : w + 'px'});
},
initDetect : function(e) {
@@ -584,14 +661,13 @@ TableKit.Resizable = {
e = TableKit.e(e);
TableKit.Resizable._onHandle = false;
var cell = Event.element(e);
if (!cell.tagName || cell.tagName != 'TD') return;
Event.stopObserving(cell, 'mousemove', TableKit.Resizable.detectHandle);
Event.stopObserving(cell, 'mousedown', TableKit.Resizable.startResize);
cell.removeClassName(TableKit.option('resizeOnHandleClass', cell.up('table').id)[0]);
},
startResize : function(e) {
e = TableKit.e(e);
if(!TableKit.Resizable._onHandle) { return;}
if(!TableKit.Resizable._onHandle) {return;}
var cell = Event.element(e);
Event.stopObserving(cell, 'mousemove', TableKit.Resizable.detectHandle);
Event.stopObserving(cell, 'mousedown', TableKit.Resizable.startResize);
@@ -601,7 +677,7 @@ TableKit.Resizable = {
TableKit.Resizable._tbl = table;
if(TableKit.option('showHandle', table.id)[0]) {
TableKit.Resizable._handle = $(document.createElement('div')).addClassName('resize-handle').setStyle({
'top' : Position.cumulativeOffset(cell)[1] + 'px',
'top' : cell.cumulativeOffset()[1] + 'px',
'left' : Event.pointerX(e) + 'px',
'height' : table.getDimensions().height + 'px'
});
@@ -614,7 +690,7 @@ TableKit.Resizable = {
endResize : function(e) {
e = TableKit.e(e);
var cell = TableKit.Resizable._cell;
TableKit.Resizable.resize(null, cell, (Event.pointerX(e) - Position.cumulativeOffset(cell)[0]));
TableKit.Resizable.resize(null, cell, (Event.pointerX(e) - cell.cumulativeOffset()[0]));
Event.stopObserving(document, 'mousemove', TableKit.Resizable.drag);
Event.stopObserving(document, 'mouseup', TableKit.Resizable.endResize);
if(TableKit.option('showHandle', TableKit.Resizable._tbl.id)[0]) {
@@ -630,7 +706,7 @@ TableKit.Resizable = {
e = TableKit.e(e);
if(TableKit.Resizable._handle === null) {
try {
TableKit.Resizable.resize(TableKit.Resizable._tbl, TableKit.Resizable._cell, (Event.pointerX(e) - Position.cumulativeOffset(TableKit.Resizable._cell)[0]));
TableKit.Resizable.resize(TableKit.Resizable._tbl, TableKit.Resizable._cell, (Event.pointerX(e) - TableKit.Resizable._cell.cumulativeOffset()[0]));
} catch(e) {}
} else {
TableKit.Resizable._handle.setStyle({'left' : Event.pointerX(e) + 'px'});
@@ -638,7 +714,7 @@ TableKit.Resizable = {
return false;
},
pointerPos : function(element, x, y) {
var offset = Position.cumulativeOffset(element);
var offset = $(element).cumulativeOffset();
return (y >= offset[1] &&
y < offset[1] + element.offsetHeight &&
x >= offset[0] + element.offsetWidth - 5 &&
@@ -661,9 +737,13 @@ TableKit.Editable = {
_editCell : function(e) {
e = TableKit.e(e);
var cell = Event.findElement(e,'td');
TableKit.Editable.editCell(null, cell);
if(cell) {
TableKit.Editable.editCell(null, cell, null, e);
} else {
return false;
}
},
editCell : function(table, index, cindex) {
editCell : function(table, index, cindex, event) {
var cell, row;
if(typeof index === 'number') {
if(!table || (table.tagName && table.tagName !== "TABLE")) {return;}
@@ -677,7 +757,7 @@ TableKit.Editable = {
row = $(table.tBodies[0].rows[index]);
cell = $(row.cells[cindex]);
} else {
cell = $(index);
cell = $(event ? Event.findElement(event, 'td') : index);
table = (table && table.tagName && table.tagName !== "TABLE") ? $(table) : cell.up('table');
row = cell.up('tr');
}
@@ -687,21 +767,25 @@ TableKit.Editable = {
var head = $(TableKit.getHeaderCells(table, cell)[TableKit.getCellIndex(cell)]);
if(head.hasClassName(op.noEditClass)) {return;}
TableKit.registerCell(cell);
var data = TableKit.cells[cell.id];
var data = TableKit.getCellData(cell);
if(data.active) {return;}
data.htmlContent = cell.innerHTML;
var ftype = TableKit.Editable.types['text-input'];
var ftype = TableKit.Editable.getCellEditor(null,null,head);
ftype.edit(cell, event);
data.active = true;
},
getCellEditor : function(cell, table, head) {
var head = head ? head : $(TableKit.getHeaderCells(table, cell)[TableKit.getCellIndex(cell)]);
var ftype = TableKit.Editable.types['text-input'];
if(head.id && TableKit.Editable.types[head.id]) {
ftype = TableKit.Editable.types[head.id];
} else {
var n = head.classNames().detect(function(n){
var n = $w(head.className).detect(function(n){
return (TableKit.Editable.types[n]) ? true : false;
});
ftype = n ? TableKit.Editable.types[n] : ftype;
}
ftype.edit(cell);
data.active = true;
return ftype;
},
types : {},
addCellEditor : function(o) {
@@ -793,7 +877,7 @@ TableKit.Editable.CellEditor.prototype = {
this.ajax = new Ajax.Updater(cell, op.ajaxURI || TableKit.option('editAjaxURI', table.id)[0], Object.extend(op.ajaxOptions || TableKit.option('editAjaxOptions', table.id)[0], {
postBody : s,
onComplete : function() {
var data = TableKit.cells[cell.id];
var data = TableKit.getCellData(cell);
data.active = false;
data.refresh = true; // mark cell cache for refreshing, in case cell contents has changed and sorting is applied
}
@@ -806,7 +890,7 @@ TableKit.Editable.CellEditor.prototype = {
},
cancel : function(cell) {
this.ajax = null;
var data = TableKit.cells[cell.id];
var data = TableKit.getCellData(cell);
cell.innerHTML = data.htmlContent;
data.htmlContent = '';
data.active = false;
@@ -851,8 +935,4 @@ TableKit.Bench = {
}
} */
if(window.FastInit) {
FastInit.addOnLoad(TableKit.load);
} else {
Event.observe(window, 'load', TableKit.load);
}
document.observe("dom:loaded", TableKit.load);