1
0
Fork 0
forked from 0x2620/oxjs

implement 'view annotations at position / in selection / all'

This commit is contained in:
j 2012-01-03 00:36:36 +05:30
commit 39f9e9bb4d
6 changed files with 152 additions and 80 deletions

View file

@ -118,7 +118,9 @@ Ox.Menu = function(options, self) {
function clickItem(position) {
var item = that.items[position],
group = item.options('group'),
menu = self.options.mainmenu || self.options.parent || that,
offset,
toggled;
that.hideMenu();
if (!item.options('items').length) {
@ -126,19 +128,20 @@ Ox.Menu = function(options, self) {
self.options.parent.hideMenu(true).triggerEvent('click');
}
if (item.options('checked') !== null) {
if (item.options('group')) {
toggled = self.optionGroups[item.options('group')].toggle(position);
if (group) {
offset = self.optionGroupOffset[group];
toggled = self.optionGroup[group].toggle(position - offset);
if (toggled.length) {
toggled.forEach(function(pos) {
that.items[pos].toggleChecked();
that.items[pos + offset].toggleChecked();
});
menu.triggerEvent('change', {
id: item.options('group'),
checked: self.optionGroups[item.options('group')].checked().map(function(v) {
checked: self.optionGroup[group].checked().map(function(pos) {
return {
id: that.items[v].options('id'),
title: Ox.isString(that.items[v].options('title')[0])
? Ox.stripTags(that.items[v].options('title')[0]) : ''
id: that.items[pos + offset].options('id'),
title: Ox.isString(that.items[pos + offset].options('title')[0])
? Ox.stripTags(that.items[pos + offset].options('title')[0]) : ''
};
})
});
@ -263,10 +266,13 @@ Ox.Menu = function(options, self) {
function renderItems(items) {
var offset = 0;
that.$content.empty();
scrollMenuUp();
self.optionGroups = {};
self.optionGroup = {};
self.optionGroupOffset = {};
items.forEach(function(item, i) {
if (item.group) {
items[i] = item.items.map(function(v) {
@ -274,13 +280,15 @@ Ox.Menu = function(options, self) {
group: item.group
});
});
self.optionGroups[item.group] = new Ox.OptionGroup(
self.optionGroup[item.group] = new Ox.OptionGroup(
items[i].filter(function(v) {
return 'id' in v;
}),
'min' in item ? item.min : 1,
'max' in item ? item.max : 1
);
self.optionGroupOffset[item.group] = i + offset;
offset += items[i].length - 1;
}
});
items = Ox.flatten(items);
@ -581,17 +589,23 @@ Ox.Menu = function(options, self) {
@*/
that.checkItem = function(id) {
Ox.Log('Menu', 'checkItem id', id)
var ids = id.split('_'),
item;
var group,
ids = id.split('_'),
item,
offset,
position,
toggled;
if (ids.length == 1) {
item = that.getItem(id);
group = item.options('group');
Ox.Log('Menu', 'checkItem', id, item, that.submenus)
if (item.options('group')) {
var position = getItemPositionById(id),
toggled = self.optionGroups[item.options('group')].toggle(position);
if (group) {
offset = self.optionGroupOffset[group];
position = getItemPositionById(id);
toggled = self.optionGroup[item.options('group')].toggle(position - offset);
if (toggled.length) {
toggled.forEach(function(pos) {
that.items[pos].toggleChecked();
that.items[pos + offset].toggleChecked();
});
}
} else {