diff --git a/build/css/ox.ui.css b/build/css/ox.ui.css
index f2966306..7f512bcf 100644
--- a/build/css/ox.ui.css
+++ b/build/css/ox.ui.css
@@ -58,14 +58,6 @@ Dialog
================================================================================
*/
-.OxLayer {
- position: absolute;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 10;
-}
-
.OxDialog {
position: absolute;
-moz-border-radius: 8px;
@@ -328,6 +320,27 @@ OxSelect
.OxSelect.OxMedium > .OxSymbol {
margin: -16px 8px 0 8px;
}
+
+/*
+================================================================================
+Layers
+================================================================================
+*/
+.OxLayer {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ z-index: 10;
+}
+.OxMainMenuLayer {
+ position: absolute;
+ width: 100%;
+ top: 24px;
+ bottom: 0px;
+ overflow: hidden;
+ z-index: 10;
+}
/*
================================================================================
Menus
@@ -335,7 +348,7 @@ Menus
*/
.OxMainMenu {
- z-index: 10;
+ z-index: 9;
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75);
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.75);
}
@@ -383,6 +396,8 @@ Menus
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, rgb(80, 80, 80)), color-stop(1, rgb(48, 48, 48)));
}
+
+
.OxMenu {
position: absolute;
display: none;
diff --git a/build/js/ox.ui.js b/build/js/ox.ui.js
index 47ba5fea..29c71356 100644
--- a/build/js/ox.ui.js
+++ b/build/js/ox.ui.js
@@ -842,12 +842,14 @@ requires
};
that.gainFocus = function() {
Ox.Focus.focus(that.id);
+ return that;
};
that.hasFocus = function() {
return Ox.Focus.focused() == that.id;
};
that.loseFocus = function() {
Ox.Focus.blur(that.id);
+ return that;
};
that.options = function() { // fixme: use Ox.getset
/*
@@ -1237,7 +1239,10 @@ requires
});
})
.appendTo(that);
- that.$title = new Ox.Element().addClass("OxTitle").html(options.title).appendTo(that.$titlebar);
+ that.$title = new Ox.Element()
+ .addClass("OxTitle")
+ .html(options.title)
+ .appendTo(that.$titlebar);
that.$content = new Ox.Container()
.addClass("OxContent")
.css({
@@ -1279,7 +1284,7 @@ requires
if (!that.$layer.length) {
that.$layer = new Ox.Element()
.addClass("OxLayer")
- .appendTo($("body"));
+ .appendTo($body);
}
that.css({
opacity: 0
@@ -1843,8 +1848,9 @@ requires
self.focused = false;
self.selected = -1;
- that.titles = [];
that.menus = [];
+ that.titles = [];
+ that.layer = $("
").addClass("OxLayer");
$.each(options.menus, function(position, menu) {
var event =
@@ -1858,65 +1864,56 @@ requires
mainmenu: that,
size: self.options.size
}));
- that.bindEvent("click_" + that.menus[position].options("id"), clickMenu);
+ that.bindEvent("hide_" + that.menus[position].options("id"), onHideMenu);
});
function click(event) {
var $target = $(event.target),
- position = $target.data("position");
- if ($target.is(".OxTitle")) {
- clickTitle(position);
- } else {
- self.focused = false;
+ position = typeof $target.data("position") != "undefined" ?
+ $target.data("position") : -1;
+ clickTitle(position);
+ }
+
+ function clickTitle(position) {
+ var selected = self.selected;
+ if (self.selected > -1) {
+ that.menus[self.selected].hideMenu();
+ }
+ if (position > -1) {
+ Ox.print("position", position, "self.selected", self.selected)
+ if (position != selected) {
+ self.focused = true;
+ self.selected = position;
+ Ox.print("position", position, "setting self.selected", self.selected)
+ that.titles[self.selected].addClass("OxSelected");
+ that.menus[self.selected].showMenu();
+ }
}
}
function mousemove(event) {
var $target = $(event.target),
- position = typeof $target.data("position") != "undefined" ? $target.data("position") : -1;
- if (self.focused) {
- if (self.focused && position != self.selected) {
- clickTitle(position);
- }
- }
- }
-
- function clickMenu() {
- Ox.print("self.selected", self.selected)
- that.titles[self.selected].removeClass("OxSelected");
- self.selected = -1;
- self.focused = false;
- }
-
- function clickTitle(position) {
- var menu, title;
- if (position == -1) {
- if (self.selected > -1) {
- that.menus[self.selected].hideMenu();
- that.titles[self.selected].removeClass("OxSelected");
- self.selected = -1;
- }
- } else {
- title = that.titles[position],
- menu = that.menus[position];
- if (self.selected > -1) {
- that.menus[self.selected].hideMenu();
- that.titles[self.selected].removeClass("OxSelected");
- }
- if (self.selected == position) {
- self.focused = false;
- self.selected = -1;
+ focused,
+ position = typeof $target.data("position") != "undefined" ?
+ $target.data("position") : -1;
+ if (self.focused && position != self.selected) {
+ if (position > -1) {
+ clickTitle(position);
} else {
- Ox.print("pos", position)
- self.focused = true;
- self.selected = position;
- Ox.print("s.s", self.selected)
- that.titles[self.selected].addClass("OxSelected");
- that.menus[self.selected].showMenu();
+ focused = self.focused;
+ that.menus[self.selected].hideMenu();
+ self.focused = focused;
}
}
}
+ function onHideMenu() {
+ Ox.print("hideMenu self.selected", self.selected)
+ that.titles[self.selected].removeClass("OxSelected");
+ self.focused = false;
+ self.selected = -1;
+ }
+
self.onChange = function(key, value) {
};
@@ -2029,24 +2026,21 @@ requires
that.$bottom = $("
")
.addClass("OxBottom")
.appendTo(that.$element);
+ that.$layer = $("
")
+ .addClass(self.options.mainmenu ? "OxMainMenuLayer" : "OxLayer");
function click(event) {
var item,
position,
$target = $(event.target);
- that.hideMenu();
if ($target.is(".OxCell")) {
position = $target.parent().data("position");
item = that.items[position];
- Ox.print("...", position, item)
if (!item.options("disabled")) {
clickItem(position);
- } else {
- that.triggerEvent("click");
}
- } else {
- that.triggerEvent("click");
}
+ that.hideMenu();
}
function clickItem(position) {
@@ -2068,10 +2062,10 @@ requires
item.toggleTitle();
}
}
- closeMenu();
}
function clickSelectedItem() {
+ // called on key.enter
if (self.options.selected > -1) {
clickItem(self.options.selected);
} else {
@@ -2079,11 +2073,6 @@ requires
}
}
- function closeMenu() {
- that.triggerEvent("click");
- that.hideMenu();
- }
-
function constructLine() {
return $("
").append(
$("", {
@@ -2371,19 +2360,21 @@ requires
});
selectItem(-1);
scrollMenuUp();
- that.hide();
if (self.options.parent) {
self.options.element.removeClass("OxSelected");
}
- that.loseFocus();
- that.unbindEvent({
- key_up: selectPreviousItem,
- key_down: selectNextItem,
- key_left: selectSupermenu,
- key_right: selectSubmenu,
- key_escape: that.hideMenu,
- key_enter: clickItem
- });
+ that.hide()
+ .loseFocus()
+ .unbindEvent({
+ key_up: selectPreviousItem,
+ key_down: selectNextItem,
+ key_left: selectSupermenu,
+ key_right: selectSubmenu,
+ key_escape: that.hideMenu,
+ key_enter: clickItem
+ })
+ .triggerEvent("hide");
+ that.$layer.hide();
$document.unbind("click", click);
return that;
//that.triggerEvent("hide");
@@ -2399,6 +2390,9 @@ requires
that.showMenu = function() {
Ox.print("showMenu")
+ if (!self.options.parent && !that.$layer.parent().length) {
+ that.$layer.appendTo($body);
+ }
that.parent().length || that.appendTo($body);
var offset = self.options.element.offset(),
width = self.options.element.outerWidth(),
@@ -2431,7 +2425,7 @@ requires
key_down: selectNextItem,
key_left: selectSupermenu,
key_right: selectSubmenu,
- key_escape: closeMenu,
+ key_escape: that.hideMenu,
key_enter: clickSelectedItem
});
setTimeout(function() {
diff --git a/demos/.DS_Store b/demos/.DS_Store
index 1ca89b4e..db1f06b1 100644
Binary files a/demos/.DS_Store and b/demos/.DS_Store differ
|