Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Wed, Jun 25, 1:48 PM

in-portal

Index: branches/RC/core/admin_templates/js/drag.js
===================================================================
--- branches/RC/core/admin_templates/js/drag.js (revision 9298)
+++ branches/RC/core/admin_templates/js/drag.js (revision 9299)
@@ -1,90 +1,100 @@
function DragManager() {}
DragManager.DragObject = null;
DragManager.LastDragObject = null;
DragManager.MouseOffset = [0,0];
DragManager.ResizeHappening = false;
DragManager.ResizeTimer = null;
DragManager.InitialPos = null;
DragManager.mouseCoords = function(ev)
{
if(ev.pageX || ev.pageY){
var res = {x:ev.pageX, y:ev.pageY};
}
else {
var res = {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
return res;
}
-DragManager.MakeDragable = function(object_id, startCallback, moveCallback, endCallback)
+DragManager.MakeDragable = function(object_id, startCallback, moveCallback, endCallback, options)
{
- var Object = document.getElementById(object_id);
- Object.onmousedown = function(ev){
+ var drag_object = document.getElementById(object_id);
+ var cur_options = {'VerticalDrag': 1, 'HorizontalDrag': 1};
+ if (options) {
+ for(var i in options) {
+ cur_options[i] = options[i];
+ }
+ }
+ drag_object.onmousedown = function(ev){
ev = ev || window.event;
- DragManager.InitialPos = findPos(Object);
+ DragManager.InitialPos = findPos(drag_object);
var coords = DragManager.mouseCoords(ev);
var pos = findPos(this);
DragManager.MouseOffset = [coords.x - pos[0], coords.y - pos[1]];
DragManager.DragObject = this;
DragManager.LastDragObject = this;
DragManager.DragObject.style.position = 'absolute';
- startCallback(Object);
+ DragManager.Options = cur_options;
+ startCallback(drag_object);
}
document.onmousemove = function(ev){
ev = ev || window.event;
var coords = DragManager.mouseCoords(ev);
// window.status = 'mouse at: '+coords.x+','+coords.y;
if(DragManager.DragObject){
-// DragManager.DragObject.style.top = (coords.y - DragManager.MouseOffset[1] ) + 'px' // ;
- DragManager.DragObject.style.left = (coords.x - DragManager.MouseOffset[0] ) + 'px' // ;
-
- moveCallback(Object, coords)
+ if (DragManager.Options.VerticalDrag) {
+ DragManager.DragObject.style.top = (coords.y - DragManager.MouseOffset[1] ) + 'px' // ;
+ }
+ if (DragManager.Options.HorizontalDrag) {
+ DragManager.DragObject.style.left = (coords.x - DragManager.MouseOffset[0] ) + 'px' // ;
+ }
+ moveCallback(drag_object, coords)
return false;
}
}
document.onmouseup = function(ev){
var tmp = DragManager.DragObject;
DragManager.DragObject = null;
if(tmp){
endCallback(tmp);
}
}
}
function init_resizer()
{
DragManager.MakeDragable('resizer', resize_start,
function(drag_object, coords) {
if (DragManager.ResizeHappening && DragManager.ResizeTimer) {
window.clearTimeout(DragManager.ResizeTimer);
DragManager.ResizeTimer = false;
}
DragManager.ResizeHappening = true;
DragManager.ResizeTimer = window.setTimeout(function() {
var col = document.getElementById('col_a');
var dim = getDimensions(col);
// print_pre(dim);
w = dim.innerWidth + (is.ie ? 0 : Math.round((dim.borders[1] + dim.borders[2])/2)) + (coords.x - DragManager.MouseOffset[0] - DragManager.InitialPos[0]);
col.style.width = w+'px';
// alert(' started at '+DragManager.InitialPos[0]+' with offset '+DragManager.MouseOffset[0]+' now coord: '+coords.x+' after setting w to '+w+' is inner: '+col.clientWidth + ' offset: '+col.offsetWidth)
DragManager.ResizeHappening = false;
DragManager.InitialPos = [coords.x - DragManager.MouseOffset[0], coords.y - DragManager.MouseOffset[1]];
}, 100)
}, resize_end)
}
function resize_start(obj)
{
// alert('start at '+DragManager.InitialPos[0]);
}
function resize_end(obj)
{
// alert('end');
}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/js/drag.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.1
\ No newline at end of property
+1.1.2.2
\ No newline at end of property
Index: branches/RC/core/admin_templates/js/grid_scroller.js
===================================================================
--- branches/RC/core/admin_templates/js/grid_scroller.js (revision 9298)
+++ branches/RC/core/admin_templates/js/grid_scroller.js (revision 9299)
@@ -1,1054 +1,1062 @@
var sheetRules; // all rules in stylesheet Set by initStyleChange()
var currentRule; // which rule are we editing? Set by assignRule()
var defaultStyles = new Array();
function StyleManager() {}
StyleManager.InitStyles = function() {
if (!document.styleSheets) return;
var sheets = document.styleSheets;
this.Map = new Object();
// alert('total '+sheets.length+' sheets')
for (var i=0;i<sheets.length;i++) {
var currentSheet = sheets[i];
if (currentSheet.cssRules)
sheetRules = currentSheet.cssRules
else if (currentSheet.rules)
sheetRules = currentSheet.rules;
else {
// alert('bad sheet '+currentSheet.href);
continue;
}
// alert('sheet: '+currentSheet.href)
for (var ii=0;ii<sheetRules.length;ii++) {
var value = sheetRules[ii].selectorText;
if (value.match(',')) { // Mozilla does not break comma-separated selectors into separate rules...
var subselectors = value.split(',');
for (var sub in subselectors) {
var real_name = subselectors[sub].replace(/^[ \t]*(.*)[ \t]*/, '$1');
this.Map[real_name] = sheetRules[ii]
}
}
else {
this.Map[value.toLowerCase()] = sheetRules[ii];
}
}
}
this.Inited = true;
// preg_print_pre(this.Map, /last/);
}
StyleManager.ChangeStyle = function(selector, s, value)
{
if (!this.Inited) this.InitStyles()
rule = this.Map[selector.toLowerCase()];
if (!rule) {
if (this.AddStyle(selector, s, value)) {
return true;
}
alert('rule '+selector+' not found')
return;
}
alert('adjusting rule '+selector+' setting '+s+' to '+value+' from '+rule.style[s])
rule.style[s] = value;
alert('now it is '+rule.style[s])
}
StyleManager.AddStyle = function(selector, style, value)
{
var sheet = document.styleSheets[0];
var rule = false;
if (sheet.insertRule) {
sheet.insertRule(selector+'{'+style+':'+value+'}', sheet.cssRules.length);
rule = sheet.cssRules[sheet.cssRules.length-1];
}
else if(sheet.addRule) {
sheet.addRule(selector, style+':'+value);
rule = sheet.rules[sheet.rules.length-1];
}
if (rule) {
alert ('adding rule as '+selector);
this.Map[selector.toLowerCase()] = sheet.cssRules[sheet.cssRules.length-1];
return true;
}
return false;
}
StyleManager.GetStyle = function(selector)
{
if (!this.Inited) this.InitStyles()
rule = this.Map[selector.toLowerCase()];
if (!rule) return false;
return rule;
}
StyleManager.GetStyleValue = function(selector, style)
{
rule = this.GetStyle(selector);
if (!rule) return false;
return rule.selector;
}
function preg_print_pre(obj, reg)
{
if (!reg) reg = /.*/;
var p = ''
for (var prop in obj) {
if (prop.match(reg) ) {
p += prop + ': '+obj[prop] + '\n'
}
}
alert(p)
}
var startTime,endTime;
var profile = 0;
var profile_total = 0;
var startTime = new Date().getTime();
function Profile(message,force)
{
if (profile || force) {
endTime = new Date().getTime();
var tmp = (endTime-startTime);
profile_total += tmp;
alert(message+' took '+tmp+' ms of '+profile_total)
startTime = new Date().getTime();
}
}
function ResetStart()
{
startTime = new Date().getTime();
profile_total = 0;
}
function GridScroller(grid_id, w, h)
{
this.GridId = grid_id
this.Footer = false;
this.LeftCells = 0;
this.LeftWidth = 0;
this.BottomOffset = 0;
this.Width = w;
this.Height = h;
this.AutoWidth = true;
this.ScrollerW = 0;
this.ScrollerH = 0;
this.MinWidths = [];
this.IDs = [];
this.Rendered = false;
this.PickerCRC = '';
// this.FixedHeights = true;
this.FixedHeaderHeights = [50,30];
this.FixedRowHeight = 25;
}
GridScroller.prototype.Render = function(id)
{
ResetStart();
// var widths = this.PrepareWidths();
// this.MinWidths = [40,null,null,250]
this.MinWidths = this.PrepareWidths(); // [50,70,90,150,150,110,70,111];
document.body.style.height = '100%';
document.body.style.overflow = 'hidden';
document.body.scroll = 'no'
// html = this.AltHTML();
// Profile('Getting HTML',1);
if (id && id != '') {
document.getElementById(id).innerHTML = '<div id="main_div_'+this.GridId+'">'+html+'</div>';
execJS(document.getElementById(id))
}
else {
if (this.Rendered) {
this.Render('main_div_'+this.GridId);
return;
}
var dot = '<div id="my_measure_'+this.GridId+'" style="width: auto; height: 1px; z-index: -105;"></div>';
document.write(dot);
var dot = document.getElementById('my_measure_'+this.GridId);
var measure = document.getElementById('my_measure_'+this.GridId);
this.pos = findPos(dot);
// alert('dot: '+this.pos[0]+','+this.pos[1])
var collapse_correction = is.ie ? 0 : -1;
if (is.ie) this.pos[0] += 1;
// this.MainOuter.style.width = 'auto'
var w = measure.offsetWidth;
var h = document.body.clientHeight;
var dim = getDimensions(measure);
h -= this.pos[1] + dim.padding[0] + dim.padding[2] + dim.borders[0] + dim.borders[2] + this.BottomOffset;
html = this.AltHTML(this.pos[0],this.pos[1], w, h);
document.write('<div id="main_div_'+this.GridId+'" style="margin-left: '+collapse_correction+'px">'+html+'</div>');
}
this.Rendered = true;
// Profile('Main render & refs',1)
this.SetReferences();
// return;
if (getFrame('head').ScrollerW) {
this.ScrollerW = getFrame('head').ScrollerW;
this.ScrollerH = getFrame('head').ScrollerH;
}
else {
this.ScrollerW = 17;
this.ScrollerH = 17;
/*this.ScrollerW = this.MainInner.offsetWidth - this.MainInner.clientWidth
this.ScrollerH = this.MainInner.offsetHeight - this.MainInner.clientHeight
getFrame('head').ScrollerW = this.ScrollerW
getFrame('head').ScrollerH = this.ScrollerH*/
}
// Profile('Up to col widths',1);
if (!this.UpdateColWidths()) return;
if (this.Width == 'auto') {
this.Resize( this.GetAutoSize() );
}
else {
this.Resize();
}
this.TheGrid.style.visibility = 'visible'
this.MainScroller.style.visibility = 'visible'
// Profile('Finalizng', 1);
var the_grid = this;
if (document.all) {
$status = window.attachEvent('onresize', function(ev) { the_grid.AutoResize() });
} else {
$status = window.addEventListener('resize', function(ev) { the_grid.AutoResize() }, true);
}
if (document.all) {
this.DataScroller.onmousewheel = function(ev) {
var e = document.all ? window.event : ev;
this.TheGrid.MainInner.scrollTop += -e.wheelDelta/2
this.TheGrid.SyncScroll();
}
if (this.LeftCells > 0) {
this.LeftDataInner.onmousewheel = function(ev) {
var e = document.all ? window.event : ev;
this.TheGrid.MainInner.scrollTop += -e.wheelDelta/2
this.TheGrid.SyncScroll();
}
}
}
else {
this.DataScroller.addEventListener("DOMMouseScroll", function(ev) {
var e = document.all ? window.event : ev;
this.TheGrid.MainInner.scrollTop += e.detail*10
this.TheGrid.SyncScroll();
}, false);
if (this.LeftCells > 0) {
this.LeftDataInner.addEventListener("DOMMouseScroll", function(ev) {
var e = document.all ? window.event : ev;
this.TheGrid.MainInner.scrollTop += e.detail*10
this.TheGrid.SyncScroll();
}, false);
}
}
addLoadEvent( function() {the_grid.AutoResize(); the_grid.SetResizeHandles();} );
}
GridScroller.prototype.SetReferences = function() {
this.MainOuter = document.getElementById('outer_main_'+this.GridId );
this.MainInner = document.getElementById('inner_main_'+this.GridId)
this.MainScroller = document.getElementById('main_scroller_'+this.GridId)
this.TheGrid = document.getElementById(this.GridId );
this.HeadTable = document.getElementById('header_'+this.GridId);
this.HeadScroller = document.getElementById('inner_header_'+this.GridId);
this.HeadOuter = document.getElementById('outer_header_'+this.GridId);
this.DataTable = document.getElementById('data_'+this.GridId);
this.DataScroller = document.getElementById('inner_data_'+this.GridId);
this.DataOuter = document.getElementById('outer_data_'+this.GridId);
if (this.HasFooter) {
this.FooterTable = document.getElementById('footer_'+this.GridId);
this.FooterScroller = document.getElementById('inner_footer_'+this.GridId);
this.FooterOuter = document.getElementById('outer_footer_'+this.GridId);
}
if (this.LeftCells != 0) {
this.LeftHeaderTable = document.getElementById('left_header_'+this.GridId);
this.LeftHeaderScroller = document.getElementById('inner_left_header_'+this.GridId);
this.LeftHeaderOuter = document.getElementById('outer_left_header_'+this.GridId);
this.LeftHeaderInner = document.getElementById('inner_left_header_'+this.GridId);
this.LeftDataTable = document.getElementById('left_data_'+this.GridId);
this.LeftDataOuter = document.getElementById('outer_left_data_'+this.GridId);
this.LeftDataInner = document.getElementById('inner_left_data_'+this.GridId);
if (this.HasFooter) {
this.LeftFooterTable = document.getElementById('left_footer_'+this.GridId);
this.LeftFooterInner = document.getElementById('inner_left_footer_'+this.GridId);
this.LeftFooterOuter = document.getElementById('outer_left_footer_'+this.GridId);
}
}
this.DataScroller.TheGrid = this;
this.MainInner.TheGrid = this;
if (this.LeftCells > 0) this.LeftDataInner.TheGrid = this;
// this.Dot = document.getElementById('my_dot_'+this.GridId)
this.MainOuter.className = 'grid-scrollable'
if (!is.ie) {
// this.MainOuter.style.marginLeft = '-1px';
}
}
GridScroller.prototype.SetLeftHeights = function() {
if (this.LeftCells != 0) {
this.SetHeights('left_header_'+this.GridId, 'header_'+this.GridId);
this.SetHeights('left_data_'+this.GridId, 'data_'+this.GridId);
if (this.HasFooter()) {
this.SetHeights('left_footer_'+this.GridId, 'footer_'+this.GridId);
}
}
}
GridScroller.prototype.UpdateColWidths = function() {
// pos = findPos(this.Dot)
pos = this.pos;
this.TheGrid.style.left = (pos[0])+ 'px'
this.TheGrid.style.top = (pos[1]) + 'px'
this.SetLeftHeights();
if (this.HasFooter()) {
this.FooterHeight = this.FooterTable.offsetHeight;
this.FooterOuter.style.height = this.FooterHeight + 'px'
}
else {
this.FooterHeight = 0;
}
this.HeadHeight = this.HeadTable.offsetHeight;
// console.log('measured Head Height: '+this.HeadHeight);
this.DataHeight = this.DataTable.offsetHeight;
this.HeadOuter.style.height = (this.HeadHeight) + 'px'
if (this.LeftCells != 0) {
this.LeftWidth = Math.max(this.LeftHeaderTable.offsetWidth, this.LeftDataTable.offsetWidth)
this.LeftHeaderOuter.style.height = (this.HeadHeight) + 'px'
if (this.HasFooter()) {
this.LeftFooterOuter.style.height = (this.FooterHeight) + 'px'
this.LeftWidth = Math.max(this.LeftWidth, this.LeftFooterTable.offsetWidth);
}
// console.log('measured Left Width: '+this.LeftWidth);
}
this.MainInner.onscroll = function() {
this.TheGrid.SyncScroll()
}
this.MainOuter.style.width = 'auto'
this.UpdateTotalDimensions();
return true;
}
GridScroller.prototype.UpdateTotalDimensions = function()
{
this.HeadHeight = this.HeadTable.offsetHeight;
this.DataHeight = this.DataTable.offsetHeight;
this.HeaderWidth = this.HeadTable.offsetWidth + this.LeftWidth - this.HeadTable.rows[0].cells[(this.HeadTable.rows[0].cells.length-1)].offsetWidth;
this.DataTotalHeight = this.DataHeight + this.HeadHeight + this.FooterHeight;
}
GridScroller.prototype.ResetHeights = function(table1_id, table2_id)
{
var table1 = document.getElementById(table1_id);
var table2 = document.getElementById(table2_id);
var height1_div, height2_div;
for (var row=0; row<table1.rows.length; row++)
{
// reseting heights
table1.rows[row].cells[0].style.height = 'auto';
table2.rows[row].cells[0].style.height = 'auto';
var height1_div = document.getElementById(table1_id+'_left_height_'+row);
if (height1_div) {
height1_div.style.height = 'auto';
}
var height2_div = document.getElementById(table2_id+'_left_height_'+row);
if (height2_div) {
height2_div.style.height = 'auto';
}
}
}
GridScroller.prototype.SetHeights = function(table1_id, table2_id)
{
if (this.FixedHeights) return;
var table1 = document.getElementById(table1_id);
var table2 = document.getElementById(table2_id);
var height1_div, height2_div;
this.ResetHeights(table1_id, table2_id);
var heights1 = this.GetHeights(table1_id);
var heights2 = this.GetHeights(table2_id);
var table, the_height, num;
for (var row=0; row<table1.rows.length; row++)
{
if (heights1[row] > heights2[row])
{
the_height = heights1[row];
table = table2;
id = table2_id;
}
else {
the_height = heights2[row];
table = table1;
id = table1_id;
}
var height_div = document.getElementById(id+'_left_height_'+row);
if (height_div) { // the div only exists for FF
height_div.style.height = the_height+'px';
height_div.style.width = table.rows[row].cells[0].clientWidth+'px'
}
else {
if (!is.ie) { // firefox needs div, but it can display it as table-cell
var width = table.rows[row].cells[0].clientWidth;
table.rows[row].cells[0].innerHTML = '<div id="'+id+'_left_height_'+row+'" style="display: table-cell; background-color: inherit; width: '+width+'px; height: '+(the_height) +'px; overflow: hidden;">' + table.rows[row].cells[0].innerHTML + '</div>'
}
}
// IE can't display div as table-cell, but it respects the tr height
table.rows[row].cells[0].style.height = the_height+'px';
// table.rows[row].style.height = the_height+'px';
}
}
GridScroller.prototype.GetHeights = function(table_id)
{
var table = document.getElementById(table_id);
var heights = new Array();
var height
for (var row=0; row<table.rows.length; row++)
{
height = getDimensions( table.rows[row].cells[0] ).innerHeight
heights.push( height )
// alert('get ('+row+')'+table.rows[row].cells[0].innerHTML+' height (offset/client/computed (coorection)): '+table.rows[row].cells[0].offsetHeight + '/' + table.rows[row].cells[0].clientHeight + '/ ' +height + ' ('+correction+')')
}
return heights;
}
GridScroller.prototype.GetWidths = function(table_id)
{
var table = document.getElementById(table_id);
var widths = new Array();
if (!table.rows[0]) return [];
for (var col=0; col<table.rows[0].cells.length; col++)
{
var tmp = getDimensions(table.rows[0].cells[col]);
widths.push( tmp.innerWidth )
// widths.push( table.rows[0].cells[col].offsetWidth )
if (table_id.match(/^header_/)) {
// alert('get ('+col+')'+table.rows[0].cells[col].innerHTML+' width '+table.rows[0].cells[col].offsetWidth)
}
}
return widths;
}
GridScroller.prototype.SetResizeHandles = function()
{
var points = new Array();
if (this.LeftCells > 0) {
var table = this.LeftHeaderTable;
var points = new Array();
if (!table.rows[0]) return [];
for (var col=0; col<table.rows[0].cells.length; col++)
{
var tmp = findPos(table.rows[0].cells[col]);
points.push(tmp);
}
}
var table = this.HeadTable;
if (!table.rows[0]) return [];
for (var col=0; col<table.rows[0].cells.length; col++)
{
var tmp = findPos(table.rows[0].cells[col]);
points.push(tmp);
}
var scroller = this;
var resize_bar = addElement(document.body, 'div');
resize_bar.style.display = 'none';
resize_bar.style.width = '2px';
resize_bar.style.height = '200px';
resize_bar.style.backgroundColor = '#777';
resize_bar.style.zIndex = 40;
resize_bar.style.position = 'absolute';
resize_bar.id = 'resize_bar';
for (var i=1; i<points.length; i++) {
var handle = addElement(document.body, 'div');
handle.id = 'grid_resize_handle_'+i;
handle.style.width='6px';
handle.style.height=this.HeadTable.offsetHeight+'px';
handle.style.position='absolute';
// handle.style.backgroundColor='red';
handle.style.left = (points[i][0] - 3)+'px';
handle.style.top = points[i][1]+'px';
handle.style.zIndex = 50;
handle.style.cursor = 'col-resize';
handle.col_num = i-1;
DragManager.MakeDragable('grid_resize_handle_'+i,
function(a_handle) {
var resize_bar = document.getElementById('resize_bar');
var pos = findPos(a_handle);
resize_bar.style.left = (pos[0])+'px';
resize_bar.style.top = pos[1]+'px';
resize_bar.style.height = scroller.Height+'px';
resize_bar.style.display = 'block';
var col_num = a_handle.col_num;
DragManager.DragObject.min_col_width = scroller.GetColWidth(col_num);
},
function(drag_object, coords) {
var offset = coords.x - DragManager.MouseOffset[0] - DragManager.InitialPos[0];
if (parseInt(DragManager.DragObject.min_col_width) + offset > 15) {
var resize_bar = document.getElementById('resize_bar');
resize_bar.style.left = (coords.x - DragManager.MouseOffset[0] + 2) + 'px';
}
},
function(a_handle) {
var resize_bar = document.getElementById('resize_bar');
resize_bar.style.display = 'none';
coords = findPos(a_handle);
var offset = (coords[0] - DragManager.InitialPos[0]);
// alert('offset: '+offset+' ('+coords[0]+' - '+DragManager.MouseOffset[0]+' - '+DragManager.InitialPos[0]+')');
var col_num = a_handle.col_num;
var cur_w = scroller.GetColWidth(col_num);
if (cur_w + offset < 15) {
offset = 15-cur_w;
}
scroller.SetColWidth(col_num, cur_w+offset);
scroller.Resize( scroller.GetAutoSize() );
scroller.ScrollResizeHandles();
DragManager.InitialPos = [coords[0] - DragManager.MouseOffset[0], coords[1] - DragManager.MouseOffset[1]];
- }
+ },
+ {VerticalDrag: false}
)
}
}
GridScroller.prototype.GetColWidth = function(col)
{
return this.MinWidths[col];
}
GridScroller.prototype.SetColWidth = function(col, width)
{
if (col >= this.LeftCells) {
if (this.DataTable.rows.length) this.DataTable.rows[0].cells[col - this.LeftCells].style.width = width+'px';
for (var row=0; row < this.HeadTable.rows.length; row++)
{
this.HeadTable.rows[row].cells[col - this.LeftCells].style.width = width+'px';
var a = document.getElementById('cursor_work_around_A_'+col+'_'+row);
var b = document.getElementById('cursor_work_around_B_'+col+'_'+row);
if (a) a.style.width = width+'px';
if (b) b.style.width = width+'px';
}
if (this.HasFooter()) {
this.FooterTable.rows[0].cells[col - this.LeftCells].style.width = width+'px';
}
}
else {
if (this.LeftDataTable.rows.length) this.LeftDataTable.rows[0].cells[col].style.width = width+'px';
for (var row=0; row < this.LeftHeaderTable.rows.length; row++)
{
this.LeftHeaderTable.rows[row].cells[col].style.width = width+'px';
var a = document.getElementById('cursor_work_around_A_'+col+'_'+row);
var b = document.getElementById('cursor_work_around_B_'+col+'_'+row);
if (a) a.style.width = width+'px';
if (b) b.style.width = width+'px';
}
if (this.HasFooter()) {
this.LeftFooterTable.rows[0].cells[col].style.width = width+'px';
}
var cur_left_total_w = 0;
var new_left_total_w = 0;
for (var i=0; i < this.LeftCells; i++) {
cur_left_total_w += this.MinWidths[i];
new_left_total_w += i==col? width : this.MinWidths[i];
};
var left_diff = this.LeftWidth - cur_left_total_w;
this.SetLeftWidth(new_left_total_w+left_diff);
}
this.MinWidths[col] = width;
this.SetLeftHeights();
this.UpdateTotalDimensions();
this.SyncScroll();
}
GridScroller.prototype.ScrollResizeHandles = function()
{
for (var col=1; col<this.LeftHeaderTable.rows[0].cells.length; col++)
{
var handle = document.getElementById('grid_resize_handle_'+col);
if (!handle) return;
var pos = findPos(this.LeftHeaderTable.rows[0].cells[col]);
handle.style.left = (pos[0]-3)+'px';
}
if (this.HeadTable.rows[0].cells.length) {
var left_most_pos = findPos(this.HeadTable.rows[0].cells[0]);
var handle = document.getElementById('grid_resize_handle_'+(this.LeftCells));
if (handle) handle.style.left = (left_most_pos[0]-3)+'px';
}
for (var col=1; col<this.HeadTable.rows[0].cells.length; col++)
{
var handle = document.getElementById('grid_resize_handle_'+(col+this.LeftCells));
if (!handle) continue;
var pos = findPos(this.HeadTable.rows[0].cells[col]);
var n_left = pos[0]-this.MainInner.scrollLeft-3
if (n_left <= left_most_pos[0] || n_left > left_most_pos[0] + this.DataOuter.clientWidth) {
handle.style.display = 'none'; //resize handle is outside of visible range
}
else {
handle.style.display = 'block';
}
handle.style.left = n_left+'px';
}
}
GridScroller.prototype.GetAutoSize = function()
{
this.MainOuter.style.width = 'auto'
var w = this.MainInner.offsetWidth;
var h = document.body.clientHeight;
var pos = findPos(this.MainOuter);
var dim = getDimensions(this.MainOuter);
h -= pos[1] + dim.padding[0] + dim.padding[2] + dim.borders[0] + dim.borders[2] + this.BottomOffset;
return [w,h]
}
GridScroller.prototype.AutoResize = function()
{
var obj = this;
if (this.ResizeHappening && this.ResizeTimer) {
window.clearTimeout(this.ResizeTimer);
this.ResizeTimer = false;
}
this.ResizeHappening = true;
this.ResizeTimer = window.setTimeout(function() {
obj.Resize( obj.GetAutoSize() );
obj.ResizeHappening = false;
}, 300)
}
GridScroller.prototype.Resize = function(w,h)
{
// alert('-1');
if (typeof(w) == 'object') {
h = w[1];
w = w[0];
}
if (w) this.Width = w;
if (h) this.Height = h;
var x,y;
// pos = findPos(this.Dot)
pos = this.pos;
x = pos[0];
y = pos[1];
this.TheGrid.style.left = (x)+ 'px'
this.TheGrid.style.top = (y) + 'px'
// alert('moved');
// alert('0');
this.MainOuter.style.height = (this.Height)+'px'
this.MainOuter.style.width = (this.Width)+'px'
// alert('1');
var scroller_width;
// this.HeadTable.rows[0].cells[(this.HeadTable.rows[0].cells.length-1)].offsetWidth
scroller_height = this.HeaderWidth > this.Width ? this.ScrollerH : 0;
scroller_width = this.DataTotalHeight > this.Height - scroller_height ? this.ScrollerW : 0;
scroller_height = this.HeaderWidth > this.Width - scroller_width ? this.ScrollerH : 0;
// alert('min: '+this.MinDataWidth+' pos: '+pos[0]+','+pos[1]+' scroller W x H: '+scroller_width+' x '+scroller_height+' will resize to '+this.Width+' x '+this.Height+' data: '+this.HeaderWidth+' x '+this.DataHeight)
this.HeadOuter.style.width = (this.Width -scroller_width -this.LeftWidth)+ 'px';
this.DataOuter.style.width = (this.Width -scroller_width -this.LeftWidth)+ 'px';
// alert('1.2');
this.TheGrid.style.width = (this.Width - scroller_width) + 'px';
this.TheGrid.style.height = (this.Height - scroller_height) + 'px';
// alert('1.5');
this.SetLeftWidth();
// alert('2');
if (this.HasFooter()) {
this.FooterOuter.style.width = (this.Width -scroller_width -this.LeftWidth)+ 'px';
}
if (this.DataTotalHeight < this.Height - scroller_height) {
var adjusted_data_height = this.DataTotalHeight - this.HeadHeight - this.FooterHeight
}
else {
var adjusted_data_height = this.Height - this.HeadHeight - this.FooterHeight - scroller_height
}
this.DataOuter.style.height = adjusted_data_height + 'px'
if (this.LeftCells != 0) {
this.LeftDataOuter.style.height = adjusted_data_height + 'px'
}
// alert('3');
this.MainScroller.style.width = (this.HeadTable.offsetWidth + this.LeftWidth)+'px'
this.MainScroller.style.height = ( this.DataHeight + this.HeadHeight + this.FooterHeight)+'px'
// alert('4');
}
GridScroller.prototype.SetLeftWidth = function(left_width)
{
if (left_width) this.LeftWidth = left_width;
if (this.LeftCells != 0) {
// there was -1 for Mozilla, but somehow it's not needed anymore...
this.LeftHeaderOuter.parentNode.style.width = (this.LeftWidth + (is.ie ? 0 : 0) ) + 'px';
this.LeftHeaderOuter.style.width = (this.LeftWidth) + 'px';
this.LeftHeaderInner.style.width = (this.LeftWidth) + 'px';
this.LeftDataOuter.style.width = (this.LeftWidth) + 'px';
this.LeftDataInner.style.width = (this.LeftWidth) + 'px';
if (this.HasFooter()) {
this.LeftFooterOuter.style.width = (this.LeftWidth) + 'px';
this.LeftFooterInner.style.width = (this.LeftWidth) + 'px'
}
// this is IE workaround, we have to set inner div width to given px (above) and then back to 100%
// for IE to readjust the surrounding tables, otherwise it memorizes inner div pixel width and
// cannot make surrounding table cells smaller then that
this.LeftHeaderInner.style.width = '100%';
this.LeftDataInner.style.width = '100%';
if (this.HasFooter()) {
this.LeftFooterInner.style.width = '100%';
}
}
}
GridScroller.prototype.SyncScroll = function()
{
this.HeadScroller.scrollLeft = this.MainInner.scrollLeft;
this.DataScroller.scrollLeft = this.MainInner.scrollLeft;
if (this.HasFooter()) {
this.FooterScroller.scrollLeft = this.MainInner.scrollLeft;
}
this.DataScroller.scrollTop = this.MainInner.scrollTop;
if (this.LeftCells != 0) {
this.LeftDataInner.scrollTop = this.MainInner.scrollTop;
}
this.ScrollResizeHandles();
}
GridScroller.prototype.AltHTML = function(x,y,w,h)
{
var o = '';
o += this.CreateScroller( '<div id="main_scroller_'+this.GridId+'" style="background-color: inherit; position: relative; width: auto; z-index: 20; height: '+(h)+'px;"></div>', w, h, 'main_'+this.GridId, false, 1, 'grid-scrollable' );
// console.log(o)
// return o+'</div>'
o += '<div id="'+this.GridId+'" class="grid-container" style="background-color: inherit; position: absolute; left: '+(x)+'px; top: '+(y)+'px; visibility: visible; z-index: 10; width: auto; height: '+(h)+'px; overflow: hidden;">';
var header_rows = this.Header.length;
var cols = this.Header[0].length;
var data_rows = this.Data.length;
var footer_rows = this.Footer.length;
var header_h = 80;
if (this.FixedHeights) {
for (var i=0; i<this.FixedHeaderHeights.length; i++) {header_h += this.FixedHeaderHeights[i]};
header_h += this.FixedHeaderHeightCorrection;
}
data_h = h - header_h;
// console.log('header_h: %i, data_h: %i', header_h, data_h)
var header = 'b';
var data = 'd';
var footer = 'f';
var left_header = '1';
var left_data = 'c';
var left_footer = 'e';
var header = this.GetTableWithScroller(this.Header, [this.LeftCells, 0, cols, header_rows], 'header', null, null, null, header_h)
var data = this.GetTableWithScroller(this.Data, [this.LeftCells, 0, cols, data_rows], 'data', 'grid-data-row-even', '', null, data_h)
var footer = this.HasFooter() ? this.GetTableWithScroller(this.Footer, [this.LeftCells, 0, cols, footer_rows], 'footer') : '';
var left_header = this.GetTableWithScroller(this.Header, [0,0,this.LeftCells, header_rows], ['header','left_header'], null, null, null, header_h)
var left_data = this.GetTableWithScroller(this.Data, [0,0,this.LeftCells, data_rows], ['data','left_data'], 'grid-data-row-even', 'left_', null, data_h)
var left_footer = this.GetTableWithScroller(this.Footer, [0,0,this.LeftCells, footer_rows], ['footer','left_footer'])
/*var css = '';
for (var i=0;i<this.Header[0].length; i++) {
css += '.width-adj-grid-col-'+i+' {} ';
}
o += '<style type="text/css">'+css+'</style>';*/
if (this.LeftCells != 0) {
o += '<table style="width: 100%; table-layout: fixed; border-collapse: collapse;">\n'
o += '<tr>\n<td style="vertical-align: top; margin: 0px; padding: 0px;">\n' + left_header + '\n</td>\n'
o += '<td style="vertical-align: top; margin: 0px; padding: 0px;">\n' + header + '\n</td>\n</tr>\n'
o += '<tr>\n<td style="vertical-align: top; margin: 0px; padding: 0px;">\n' + left_data + '\n</td>\n'
o += '<td style="vertical-align: top; margin: 0px; padding: 0px;">\n' + data + '\n</td>\n</tr>\n'
if (this.HasFooter()) {
o += '<tr><td style="vertical-align: top; margin: 0px; padding: 0px">' + left_footer + '</td>'
o += '<td style="vertical-align: top; margin: 0px; padding: 0px">' + footer + '</td></tr>'
}
o += '</table>\n'
}
else {
o += header + data + footer;
}
o += '</div>';
return o;
}
GridScroller.prototype.PrepareWidths = function()
{
cache = getFrame('head').grid_widths_cache;
if (!isset(cache)) {
cache = new Object
}
if (this.MinWidths.length >= this.Header[0].length) {
var has_all_widths = true;
for (var i=0; i < this.MinWidths.length; i++) {
if (isNaN(parseInt(this.MinWidths[i]))) {
this.MinWidths[i] = 100;
// has_all_widths = false;
}
}
if (has_all_widths) {
widths = this.MinWidths
cache[this.GridId+'_'+this.PickerCRC] = widths;
return widths;
}
}
if (cache[this.GridId+'_'+this.PickerCRC]) {
// return cache[this.GridId+'_'+this.PickerCRC]
}
// print_pre(this.MinWidths)
var o = '';
data = this.Header.concat(this.Data).concat(this.Footer);
o += this.GetTableCells(this.Header, [0,0,this.Header[0].length,this.Header.length], 'header', null, null, false, true)[0];
if (this.Data.length) {
var data= this.GetTableCells(this.Data, [0,0,this.Data[0].length,this.Data.length], 'data', null, null, false, true)[0];
o += data;
}
var w = document.all ? window.document.body.offsetWidth : window.innerWidth
var table_width = w < 500 ? '1024px' : 'auto';
// console.log('tmp table width: %s (window width: %s)', table_width, w)
o = '<table style="visibility: visible; width: '+table_width+'; border-collapse: collapse" id="tmp_'+this.GridId+'">'+o+'</table>'
document.write(o)
widths = this.GetWidths('tmp_'+this.GridId);
// print_pre(widths)
tmp_el = document.getElementById('tmp_'+this.GridId);
var p = tmp_el.parentNode;
p.removeChild(tmp_el);
cache[this.GridId+'_'+this.PickerCRC] = widths;
return widths;
}
GridScroller.prototype.GetTableWithScroller = function(source, dim, class_mode, even_class, id_prefix, w, h)
{
// console.log(source, dim, class_mode, even_class, id_prefix, w, h)
var tmp = this.GetIdAndClassName(class_mode);
var id = tmp[1];
if (!h) h = 100;
var cells = this.GetTableCells(source, dim, class_mode, even_class, id_prefix);
// var cells = this.GetTableCells(source, dim, class_mode, even_class, id_prefix, false, true);
// console.log('createing scroller %s w,h: %i,%i', id, cells[1],h)
return this.CreateScroller('<table style="table-layout: fixed; width: 100%;" id="'+id+'_'+this.GridId+'">\n'+cells[0]+'\n</table>\n\n', cells[1], h, id+'_'+this.GridId, true, 5);
}
GridScroller.prototype.GetIdAndClassName = function(class_mode)
{
if (typeof(class_mode)=='object') {
var class_name = class_mode[0];
var id = class_mode[1]
}
else {
var class_name = class_mode;
var id = class_mode;
}
return [class_name, id]
}
GridScroller.prototype.GetTableCells = function(source, dim, class_mode, even_class, id_prefix, needs_last, no_inner_div)
{
if (!source.length) return ['', 0];
var o = '';
var start_col = dim[0];
var start_row = dim[1];
var end_col = dim[2];
var end_row = dim[3];
var even = false;
if (!even_class) even_class = '';
var tmp = this.GetIdAndClassName(class_mode);
var class_name = tmp[0];
var id = tmp[1];
if (id_prefix==null) id_prefix = id;
var needs_last = needs_last == null ? (end_col == source[0].length) : needs_last;
var total_width = 0;
var width_printed = false;
for (var row=start_row; row<end_row; row++) {
var rh = '';
var row_id = this.IDs[row] ? 'id="'+id_prefix+this.IDs[row]+'"' : '';
rh +='<tr '+row_id+' class="grid-'+class_name+'-row '+(even ? even_class : '')+' grid-'+class_name+'-row-'+row+'" sequence="'+(row+1)+'">'+"\n"
even = !even;
total_width = 0;
if (this.FixedHeights) {
var height_style = id.match(/^(left_)?header/) ? 'height: '+this.FixedHeaderHeights[row]+'px;' : 'height: '+this.FixedRowHeight+'px;';
}
else {
var height_style = '';
}
for (var col=start_col; col<end_col; col++) {
total_width += this.MinWidths[col]+12;
var cursor_workaround = ['',''];
if (id.match(/^(left_)?header/)) {
if (is.gecko) {
var cursor_workaround = ['<div id="cursor_work_around_A_'+col+'_'+row+'" style="'+height_style+' width: '+(this.MinWidths[col])+'px; overflow: auto;"><div id="cursor_work_around_B_'+col+'_'+row+'" style="width: '+(this.MinWidths[col])+'px; overflow: hidden;">', '</div></div>'];
}
/*else {
var cursor_workaround = ['<div id="grid_'+id+'_'+this.GridId+'_cell_'+row+'_'+(col >= this.LeftCells ? col-this.LeftCells : col)+'" style="'+height_style+' width: 100%; overflow: hidden; background-color: yellow">','</div>']
}*/
}
var width_style = width_printed ? '' : 'style="width: '+this.MinWidths[col]+'px;"'
rh += "\t"+'<td '+width_style+' class="grid-'+class_name+'-col-'+col+'">'+cursor_workaround[0]+source[row][col]+cursor_workaround[1]+'</td>'+"\n"
}
width_printed = true; // print widths in first row only
if (needs_last) {
rh += "\t"+'<td class="grid-'+class_name+'-last-cell"><img src="'+this.Spacer+'" width="1" height="1" alt=""/></td>'+"\n"
}
rh += '</tr>'+"\n"
o += rh;
}
return [o, total_width];
}
GridScroller.prototype.HasFooter = function()
{
return (this.Footer != false)
}
var colors = ['red', 'blue', 'green', 'pink', 'orange', 'brown', 'yellow', 'magenta', '#999', '#AAA', '#BBB', '#CCC', '#DDD', '#EEE', '#FFF'];
var next_color = 0;
GridScroller.prototype.CreateScroller = function(content, w, h, id, hidden, z, outer_class)
{
// console.log('creating scroller: ',w,h,id,hidden,z)
if (hidden) {
overflow = 'hidden'
}
else {
overflow = 'auto'
}
if (!z) {
z = 0;
}
if (id && id != '') {
outer_id = 'id="outer_'+id+'"';
inner_id = 'id="inner_'+id+'"';
}
else {
outer_id = '';
inner_id = '';
}
var o = '';
if (!outer_class) outer_class='scoller-outer';
o += '<div '+outer_id+' class="'+outer_class+'" style="z-index: '+z+'; width: '+w+'px; height: '+h+'px;">'
o += '<div '+inner_id+' class="scroller-inner" style="z-index: '+z+'; width: 100%; height: 100%; overflow: '+overflow+'; position: relative;">'
o += content
o += '</div></div>'
return o
}
GridScroller.prototype.SetData = function(a_data)
{
this.Data = a_data;
}
GridScroller.prototype.SetHeader = function(a_header)
{
this.Header = a_header;
this.FixedHeaderHeightCorrection = (6*this.Header.length)+1;
}
GridScroller.prototype.SetFooter = function(a_footer)
{
this.Footer = a_footer;
+}
+
+GridScroller.prototype.SaveWidths = function(prefix, url)
+{
+ var w = this.MinWidths.join(':');
+ Request.makeRequest(url.replace('#WIDTHS#', w), this.BusyRequest, '', this.successCallback, this.errorCallback, '', this);
+
}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/js/grid_scroller.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.4.2.1
\ No newline at end of property
+1.4.2.2
\ No newline at end of property
Index: branches/RC/core/admin_templates/js/ajax_dropdown.js
===================================================================
--- branches/RC/core/admin_templates/js/ajax_dropdown.js (revision 9298)
+++ branches/RC/core/admin_templates/js/ajax_dropdown.js (revision 9299)
@@ -1,274 +1,274 @@
/*
(c) Intechnic Europe 2007 http://www.intechnic.lv
Author: Konstantin Tjuterev
The class adds a dynamic drop-down to the edit-box
Usage:
<input type="text" id="combo_input" style="width: 200px"><br/>
<input type="text" id="combo_input1" style="width: 200px"><br/>
<script type="text/javascript">
new AJAXDropDown('combo_input', function(cur_value) {return 'items.xml?'}, function(item) {
var val = item.getAttribute('a');
return val ? val : item.innerHTML;
});
new AJAXDropDown('combo_input1', function(cur_value) {return 'items1.xml?cur='+escape(cur_value)});
new AJAXDropDown('curr_search_keyword', function(cur_value) {
var $url = '<inp2:m_Link template="dummy" pass="m,curr" curr_event="OnSuggestValues" field="Name" cur_value="#CUR_VALUE#" no_amp="1"/>';
return $url.replace('#CUR_VALUE#', escape(cur_value));
}
);
</script>
The AJAXDropDown constructor takes the following arguments:
input_id - id of textbox to attach to
suggest_url_callback - function which should return URL which returns XML of suggested values,
function takes one argument - it is current value of the text_box
[get_value_callback] - optional argument - function which returns the value to be set in the textbox,
based on currently selected item (out of suggested). If the argument is skipped - the node value of
<item> element will be used as the value
<item> element in the suggestions XML may have unlimited number of attribuets, all the attributes will be set
to the corresponding DIV element and this DIV element will be passed as argument to the get_value_callback,
so one may use the argument to alter the value set into textbox as in the example above
Response XML structure:
The script will look for ALL elements with tagname = 'item', so basically the structure should look like this:
<suggestions>
<item>Suggestion 1</item>
<item>Suggestion 2</item>
<item>Suggestion 3</item>
</suggestions>
Design & CSS
The script will automatically display a div which width will match the width of the text-box
You may control the div look by changing .suggest-box CSS selector
The items inside the box will have .suggest-item and .suggest-item-over
The default styles which may be used is:
<style type="text/css">
.suggest-box {
border: 1px solid #999;
background-color: #fff;
}
.suggest-item, .suggest-item-over {
padding: 1px 2px 0px 2px;
font-family: arial,verdana;
font-size: 12px;
}
.suggest-item-over {
background-color: #3366CC;
color: #fff;
}
</style>
*/
function AJAXDropDown(input_id, suggest_url_callback, get_value_callback)
{
this.Input = document.getElementById(input_id);
this.KeyUpWaiting = false;
this.KeyUpTimer = false;
this.Box = '';
this.SuggestURLCallback = suggest_url_callback;
if (!get_value_callback) get_value_callback = this.GetValue;
this.GetValueCallback = get_value_callback;
this.BoxOpen = false;
this.SelectedItem = false;
var obj = this;
addLoadEvent(function() {obj.Init()});
}
AJAXDropDown.prototype.Init = function()
{
// draw box
this.Box = document.createElement('DIV');
document.body.appendChild(this.Box);
// this.Box = addElement(this.Input.parentNode, 'div');
this.Box.style.display = 'none';
this.Box.style.zIndex = 99;
this.Box.style.position = 'absolute';
this.Box.style.overflow = 'auto';
this.Box.className = 'suggest-box'
// add onkeyup
var obj = this;
addEvent(this.Input, 'keyup', function(ev) {obj.KeyUp(ev)})
addEvent(this.Input, 'blur', function(ev) {obj.Blur(ev)})
addEvent(this.Box, 'scroll', function(ev) {if (obj.BlurWaiting) {window.clearTimeout(obj.BlurTimer);}});
addEvent(this.Box, 'mouseup', function(ev) {obj.BlurWaiting = false});
}
AJAXDropDown.prototype.Blur = function(ev)
{
if (this.BlurWaiting) return;
this.BlurWaiting = true;
var obj = this;
this.BlurTimer = window.setTimeout(function() {
obj.CloseBox();
this.BlurWaiting = false;
}, 300)
}
AJAXDropDown.prototype.KeyUp = function(ev)
{
var e = !is.ie ? ev : window.event;
switch (e.keyCode) {
case 38: //arrow up
if (!this.BoxOpen) break;
this.SelectPrev();
break;
case 40: //arrow down
if (!this.BoxOpen) break;
this.SelectNext();
break;
- case 27: //arrow down
+ case 27: //Enter
this.Input.value = this.OriginalValue;
this.CloseBox();
break;
- case 13: //arrow down
+ case 13: //Escape
this.CloseBox();
break;
default:
if (this.Input.value == '') return;
var obj = this;
if (this.KeyUpWaiting && this.KeyUpTimer) {
window.clearTimeout(this.KeyUpTimer);
this.KeyUpTimer = false;
}
this.KeyUpWaiting = true;
this.KeyUpTimer = window.setTimeout(function() {
obj.RequestSuggestions();
}, 300)
}
}
AJAXDropDown.prototype.RequestSuggestions = function()
{
Request.makeRequest(this.SuggestURLCallback(this.Input.value), false, '', this.successCallback, this.errorCallback, 'reload', this);
}
AJAXDropDown.prototype.successCallback = function (request, params, object) {
object.OriginalValue = object.Input.value;
object.OpenBox();
object.KeyUpWaiting = false;
var items = request.responseXML.getElementsByTagName('item');
object.ClearItems();
for (var i=0; i<items.length; i++)
{
object.AddItem(items[i].firstChild.nodeValue, items[i].attributes);
}
}
AJAXDropDown.prototype.errorCallback = function (request, params, object) {
this.KeyUpWaiting = false;
}
AJAXDropDown.prototype.ClearItems = function()
{
this.Box.scrollTop = 0;
this.UnselectItem();
for (var i=this.Box.childNodes.length-1; i>=0; i--)
{
this.Box.removeChild(this.Box.childNodes[i]);
}
}
AJAXDropDown.prototype.OpenBox = function()
{
var pos = findPos(this.Input);
var dim = getDimensions(this.Input);
this.Box.style.left = pos[0] + 'px';
this.Box.style.top = (pos[1] + dim.innerHeight + dim.borders[0] + dim.borders[2]) + 'px';
this.Box.style.width = (dim.innerWidth + dim.borders[1] + (is.ie ? dim.borders[3] : 0 ) ) + 'px';
this.Box.style.display = 'block';
// alert('box opened at '+this.Box.style.left+','+this.Box.style.top+' pos x:'+pos[0])
this.BoxOpen = true;
}
AJAXDropDown.prototype.CloseBox = function()
{
if (!this.BoxOpen) return;
this.Box.style.display = 'none';
this.BoxOpen = false;
}
AJAXDropDown.prototype.AddItem = function(value, attributes)
{
var item = addElement(this.Box, 'div');
for (var i=0; i<attributes.length; i++) {
item.setAttribute(attributes[i].nodeName, attributes[i].nodeValue)
}
item.className = 'suggest-item';
item.innerHTML = value;
var obj = this;
addEvent(item, 'mousemove', function() {obj.SelectItem(item)});
addEvent(item, 'mousedown', function() {obj.ClickItem(item)});
}
AJAXDropDown.prototype.ClickItem = function(item)
{
this.Input.value = item.innerHTML;
this.CloseBox();
}
AJAXDropDown.prototype.SelectNext = function()
{
if (!this.SelectedItem) {
this.SelectItem(this.Box.firstChild, true);
return;
}
if (isset(this.SelectedItem.nextSibling)) {
this.SelectItem(this.SelectedItem.nextSibling, true)
}
else { // down from last
this.UnselectItem();
this.Input.value = this.OriginalValue;
}
}
AJAXDropDown.prototype.SelectPrev = function()
{
if (!this.SelectedItem) {
this.SelectItem(this.Box.lastChild, true);
return;
}
if (isset(this.SelectedItem.previousSibling)) {
this.SelectItem(this.SelectedItem.previousSibling, true)
}
else { // up from first
this.UnselectItem();
this.Input.value = this.OriginalValue;
}
}
AJAXDropDown.prototype.UnselectItem = function(item)
{
if (!item) item = this.SelectedItem;
if (!item) return;
item.className = 'suggest-item';
this.SelectedItem = false;
}
AJAXDropDown.prototype.SelectItem = function(item, setvalue)
{
if (this.SelectedItem) {
this.UnselectItem(this.SelectedItem);
}
item.className = 'suggest-item-over';
this.SelectedItem = item;
item.scrollIntoView(false);
if (setvalue) this.Input.value = this.GetValueCallback(item);
}
AJAXDropDown.prototype.GetValue = function(item)
{
return item.innerHTML;
}
Property changes on: branches/RC/core/admin_templates/js/ajax_dropdown.js
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.1.2.2
\ No newline at end of property
+1.1.2.3
\ No newline at end of property

Event Timeline