');
wrapjQuery();
})();
@@ -1027,24 +1039,25 @@ requires
returns that
*/
var args,
- id = self.options && self.options.id,
length = arguments.length,
oldOptions,
ret;
if (length == 0) {
// options()
- ret = self.options || options; // this is silly. make sure self.options get populated with options
+ ret = self.options;
} else if (length == 1 && typeof arguments[0] == 'string') {
// options(str)
ret = self.options ? self.options[arguments[0]] : options[arguments[0]];
} else {
// options (str, val) or options({str: val, ...})
// translate (str, val) to ({str: val})
- args = Ox.makeObject.apply(that, arguments);
+ args = Ox.makeObject.apply(that, arguments || {});
oldOptions = $.extend({}, self.options);
// if options have not been set, extend defaults,
// otherwise, extend options
- self.options = $.extend(self.options || self.defaults, args);
+ //self.options = $.extend(self.options, self.options ? {} : self.defaults, args);
+ self.options = $.extend({}, self.defaults, self.options, args);
+ //self.options = $.extend(self.options || self.defaults, args);
$.each(args, function(key, value) {
// key == 'id' && id && Ox.Event.changeId(id, value);
/*!Ox.equals(value, oldOptions[key]) &&*/ self.onChange(key, value);
@@ -1057,7 +1070,7 @@ requires
that.remove = function() { // fixme: clashes with jquery, should be removeElement
//self.options && Ox.Event.unbind(self.options.id); // there are optionless elements, like the dialog layer
//that.loseFocus();
- delete self.$eventHandler;
+ //delete self.$eventHandler;
that.$element.remove();
delete $elements[that.ox];
return that;
@@ -1074,7 +1087,7 @@ requires
self.$eventHandler.trigger('ox_' + event, data);
});
} else {
- Ox.print(that.id, self.options ? self.options.id : '', 'trigger', arguments[0], arguments[1] || {});
+ Ox.print('??', that.id, self.options ? self.options.id : '', 'trigger', arguments[0], arguments[1] || {});
self.$eventHandler.trigger('ox_' + arguments[0], arguments[1] || {});
}
return that;
@@ -5762,8 +5775,11 @@ requires
id: '',
item: function() {},
keys: [],
+ max: -1,
+ min: 0,
orientation: 'both',
request: function() {},
+ selected: [],
size: 128,
sort: [],
})
@@ -5782,12 +5798,15 @@ requires
keys: self.options.keys,
orientation: self.options.orientation,
keys: self.options.keys,
+ max: self.options.max,
+ min: self.options.min,
request: self.options.request,
+ selected: self.options.selected,
size: self.options.size,
sort: self.options.sort,
type: 'icon',
unique: self.options.unique
- }/*, self*/)
+ }, $.extend({}, self)) // pass event handler
.addClass('OxIconList Ox' + Ox.toTitleCase(self.options.orientation))
.click(click)
.dblclick(dblclick)
@@ -5867,9 +5886,9 @@ requires
.options(options || {})
$.extend(self, {
- fontSize: self.options.size == 64 ? 7 : 9,
+ fontSize: self.options.size == 64 ? 6 : 9,
height: self.options.size * 1.5,
- lineLength: self.options.size == 64 ? 17 : 23,
+ lineLength: self.options.size == 64 ? 15 : 23,
lines: self.options.size == 64 ? 4 : 5,
url: oxui.path + '/png/ox.ui/transparent.png',
width: self.options.size
@@ -5884,7 +5903,7 @@ requires
that.$icon = $('
')
.addClass('OxIcon')
.css({
- top: self.options.size == 64 ? -72 : -124,
+ top: self.options.size == 64 ? -64 : -124,
width: (self.options.size + 4) + 'px',
height: (self.options.size + 4) + 'px'
});
@@ -5906,7 +5925,7 @@ requires
.css({
top: (self.options.size / 2) + 'px',
width: (self.options.size + 4) + 'px',
- height: (self.options.size == 64 ? 38 : 58) + 'px'
+ height: (self.options.size == 64 ? 30 : 58) + 'px'
})
that.$text = $('
')
.addClass('OxTarget')
@@ -6013,9 +6032,12 @@ requires
itemHeight: 16,
itemWidth: 16,
keys: [],
+ max: -1,
+ min: 0,
orientation: 'vertical',
pageLength: 100,
request: function() {}, // (data, callback), without data returns {items, size etc.}
+ selected: [],
sort: [],
type: 'text',
unique: ''
@@ -6032,9 +6054,6 @@ requires
ids: {},
itemMargin: self.options.type == 'text' ? 0 : 8, // 2 x 4 px margin ... fixme: the 2x should be computed later
keyboardEvents: {
- key_alt_control_a: invertSelection,
- key_control_a: selectAll,
- key_control_shift_a: selectNone,
key_end: scrollToFirst,
key_enter: open,
key_home: scrollToLast,
@@ -6050,23 +6069,41 @@ requires
scrollTimeout: 0,
selected: []
});
+ if (self.options.max == -1) {
+ $.extend(self.keyboardEvents, {
+ key_alt_control_a: invertSelection,
+ key_control_a: selectAll
+ });
+ }
+ if (self.options.min == 0) {
+ $.extend(self.keyboardEvents, {
+ key_control_shift_a: selectNone
+ });
+ }
self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'up' : 'left')] = selectPrevious;
self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'down' : 'right')] = selectNext;
- self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'shift_up' : 'shift_left')] = addPreviousToSelection;
- self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'shift_down' : 'shift_right')] = addNextToSelection;
+ if (self.options.max == -1) {
+ self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'shift_up' : 'shift_left')] = addPreviousToSelection;
+ self.keyboardEvents['key_' + (self.options.orientation == 'vertical' ? 'shift_down' : 'shift_right')] = addNextToSelection;
+ }
if (self.options.orientation == 'both') {
$.extend(self.keyboardEvents, {
key_down: selectBelow,
- key_up: selectAbove,
- key_shift_down: addBelowToSelection,
- key_shift_up: addAboveToSelection
+ key_up: selectAbove
});
+ if (self.options.max == -1) {
+ $.extend(self.keyboardEvents, {
+ key_shift_down: addBelowToSelection,
+ key_shift_up: addAboveToSelection
+ });
+ }
self.pageLengthByRowLength = [
0, 60, 60, 60, 60, 60, 60, 63, 64, 63, 60, 66, 60, 65, 70, 60, 64, 68, 72, 76, 60
];
}
updateQuery();
+ self.options.selected.length && getPositions(self.options.selected);
Ox.print('s.o', self.options)
that.bindEvent(self.keyboardEvents);
$window.resize(that.size);
@@ -6252,8 +6289,10 @@ requires
return that.height() - (that.$content.width() > that.width() ? oxui.scrollbarSize : 0);
}
- function getListHeight() {
- return Math.ceil(self.listLength * (self.options.itemHeight + self.itemMargin) / self.rowLength); // fixme: should be listSize
+ function getListSize() {
+ return Math.ceil(self.listLength *
+ (self.options[self.options.orientation == 'horizontal' ?
+ 'itemWidth' : 'itemHeight'] + self.itemMargin) / self.rowLength);
}
function getNext() {
@@ -6293,22 +6332,21 @@ requires
) * self.rowLength;
}
- function getPositions() {
- Ox.print('getPositions', $.map(self.selected, function(v, i) {
- return self.ids[v];
- }));
+ function getPositions(ids) {
+ ids = ids || getSelectedIds();
// fixme: optimize: send non-selected ids if more than half of the items are selected
- if (self.selected.length /*&& self.selected.length < self.listLength*/) {
- Ox.print('-- request', {
- ids: $.map(self.selected, function(v, i) {
- return self.ids[v];
- }),
+ if (ids.length /*&& ids.length < self.listLength*/) {
+ alert('getPositions ' + JSON.stringify(ids) )
+ Ox.print('-------- request', {
+ ids: ids,
sort: self.options.sort
});
+ alert(JSON.stringify({
+ ids: ids,
+ sort: self.options.sort
+ }))
self.requests.push(self.options.request({
- ids: $.map(self.selected, function(v, i) {
- return self.ids[v];
- }),
+ ids: ids,
sort: self.options.sort
}, getPositionsCallback));
} else {
@@ -6320,6 +6358,7 @@ requires
Ox.print('getPositionsCallback', result)
var pos = 0;
if (result) {
+ alert('getPositionsCallback ' + JSON.stringify(result))
$.extend(self, {
ids: {},
selected: []
@@ -6398,15 +6437,19 @@ requires
range: range,
sort: self.options.sort
}, function(result) {
- self.$pages[page] = new Ox.ListPage()
- .css({
- width: self.pageWidth + 'px'
- });
+ self.$pages[page] = new Ox.ListPage();
if (self.options.orientation == 'horizontal') {
-
+ self.$pages[page].css({
+ left: (page * self.pageWidth + self.listMargin / 2) + 'px',
+ top: (self.listMargin / 2) + 'px',
+ width: (page < self.pages - 1 ? self.pageWidth :
+ self.listLength % self.pageLength *
+ (self.options.itemWidth + self.itemMargin)) + 'px'
+ });
} else {
self.$pages[page].css({
- top: (page * self.pageHeight + self.listMargin / 2) + 'px'
+ top: (page * self.pageHeight + self.listMargin / 2) + 'px',
+ width: self.pageWidth + 'px'
});
}
$.each(result.data.items, function(i, v) {
@@ -6459,13 +6502,13 @@ requires
if (!self.clickTimeout) {
// click
pos = $item.data('position');
- if (e.metaKey) {
+ if (e.metaKey && self.options.max == -1) {
if (!isSelected(pos)) {
addToSelection(pos);
} else {
deselectTimeout = true;
}
- } else if (e.shiftKey) {
+ } else if (e.shiftKey && self.options.max == -1) {
addAllToSelection(pos);
} else if (!isSelected(pos)) {
select(pos);
@@ -6486,7 +6529,7 @@ requires
self.clickTimeout = 0;
open();
}
- } else {
+ } else if (self.options.min == 0) {
selectNone();
}
}
@@ -6549,12 +6592,22 @@ requires
}
function scrollTo(value) {
- that.animate({
- scrollTop: (self.listHeight * value) + 'px'
- }, 0)
+ that.animate(self.options.orientation == 'horizontal' ? {
+ scrollLeft: (self.listSize * value) + 'px'
+ } : {
+ scrollTop: (self.listSize * value) + 'px'
+ }, 0);
}
- function scrollToPosition(pos, topAlign) {
+ function scrollToFirst() {
+ that[self.options.orientation == 'horizontal' ? 'scrollLeft' : 'scrollTop'](0);
+ }
+
+ function scrollToLast() {
+ that[self.options.orientation == 'horizontal' ? 'scrollLeft' : 'scrollTop'](self.listSize);
+ }
+
+ function scrollToPosition(pos, leftOrTopAlign) {
var itemHeight = self.options.itemHeight + self.itemMargin,
itemWidth = self.options.itemWidth + self.itemMargin,
positions = [],
@@ -6562,15 +6615,24 @@ requires
size;
if (self.options.orientation == 'horizontal') {
positions[0] = pos * itemWidth;
- positions[1] = positions[0] + itemWidth;
+ positions[1] = positions[0] + itemWidth + self.itemMargin;
scroll = that.scrollLeft();
size = getWidth();
+ if (positions[0] < scroll || leftOrTopAlign) {
+ that.animate({
+ scrollLeft: positions[0] + 'px'
+ }, 0);
+ } else if (positions[1] > scroll + size) {
+ that.animate({
+ scrollLeft: (positions[1] - size) + 'px'
+ }, 0);
+ }
} else {
positions[0] = (self.options.orientation == 'vertical' ? pos : getRow(pos)) * itemHeight;
positions[1] = positions[0] + itemHeight + (self.options.orientation == 'vertical' ? 0 : self.itemMargin);
scroll = that.scrollTop();
size = getHeight();
- if (positions[0] < scroll || topAlign) {
+ if (positions[0] < scroll || leftOrTopAlign) {
that.animate({
scrollTop: positions[0] + 'px'
}, 0);
@@ -6582,14 +6644,6 @@ requires
}
}
- function scrollToFirst() {
- that.scrollTop(0);
- }
-
- function scrollToLast() {
- that.scrollTop(self.listHeight);
- }
-
function select(pos) {
if (!isSelected(pos) || self.selected.length > 1) {
selectNone();
@@ -6710,15 +6764,18 @@ requires
listLength: result.data.items,
pages: Math.ceil(result.data.items / self.pageLength),
pageWidth: self.options.orientation == 'vertical' ? 0 :
- (self.options.itemWidth + self.itemMargin) * self.rowLength,
+ (self.options.itemWidth + self.itemMargin) *
+ (self.options.orientation == 'horizontal' ?
+ self.pageLength : self.rowLength),
pageHeight: self.options.orientation == 'horizontal' ? 0 :
- Math.ceil(self.pageLength * (self.options.itemHeight + self.itemMargin) / self.rowLength)
- });
- self.listHeight = getListHeight();
- Ox.print('list self', self, self.listHeight);
- that.$content.css({
- height: self.listHeight + 'px'
+ Math.ceil(self.pageLength * (self.options.itemHeight +
+ self.itemMargin) / self.rowLength)
});
+ self.listSize = getListSize();
+ that.$content.css(
+ self.options.orientation == 'horizontal' ? 'width' : 'height',
+ self.listSize + 'px'
+ );
getPositions();
}));
}
@@ -6728,13 +6785,13 @@ requires
clear();
self.pageLength = self.pageLengthByRowLength[self.rowLength]
$.extend(self, {
- listHeight: getListHeight(), // fixme: should be listSize
+ listSize: getListSize(),
pages: Math.ceil(self.listLength / self.pageLength),
pageWidth: (self.options.itemWidth + self.itemMargin) * self.rowLength,
pageHeight: getPageHeight()
});
that.$content.css({
- height: self.listHeight + 'px'
+ height: self.listSize + 'px'
});
self.page = getPageByPosition(pos);
//that.scrollTop(0);
@@ -6782,7 +6839,7 @@ requires
var rowLength = getRowLength(),
pageLength = self.pageLengthByRowLength[rowLength],
pos = getPosition(),
- scroll = that.scrollTop() / self.listHeight;
+ scroll = that.scrollTop() / self.listSize;
if (pageLength != self.pageLength) {
self.pageLength = pageLength;
self.rowLength = rowLength;
@@ -6790,7 +6847,7 @@ requires
} else if (rowLength != self.rowLength) {
self.rowLength = rowLength;
self.pageWidth = (self.options.itemWidth + self.itemMargin) * self.rowLength; // fixme: make function
- self.listHeight = getListHeight();
+ self.listSize = getListSize();
self.pageHeight = getPageHeight();
$.each(self.$pages, function(i, $page) {
!Ox.isUndefined($page) && $page.css({
@@ -6799,7 +6856,7 @@ requires
});
});
that.$content.css({
- height: self.listHeight + 'px'
+ height: self.listSize + 'px'
});
Ox.print('scrolling to', scroll)
scrollTo(scroll);
@@ -6872,6 +6929,9 @@ requires
columnsResizable: false,
columnWidth: [40, 800],
id: '',
+ max: -1,
+ min: 0,
+ selected: [],
request: function() {}, // {sort, range, keys, callback}
sort: []
})
@@ -6948,12 +7008,15 @@ requires
keys: $.map(self.visibleColumns, function(v, i) {
return v.id;
}),
+ max: self.options.max,
+ min: self.options.min,
orientation: 'vertical',
request: self.options.request,
+ selected: self.options.selected,
sort: self.options.sort,
type: 'text',
unique: self.unique
- })
+ }, $.extend({}, self)) // pass event handler
.addClass('OxBody')
.scroll(function() {
var scrollLeft = $(this).scrollLeft();