forked from 0x2620/oxjs
implement 'view annotations at position / in selection / all'
This commit is contained in:
parent
0c6541363d
commit
39f9e9bb4d
6 changed files with 152 additions and 80 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue