From 31149d7ecc766fab2b758b89edf22dfd1d5a0538 Mon Sep 17 00:00:00 2001
From: rlx <0x0073@0x2620.org>
Date: Wed, 17 Aug 2011 11:39:33 +0000
Subject: [PATCH] add icon to application error dialog
---
source/Ox.UI/css/Ox.UI.css | 4 +-
source/Ox.UI/js/Core/Ox.Request.js | 20 +++++--
source/Ox.UI/js/List/Ox.List.js | 2 +-
source/Ox.UI/js/Window/Ox.Dialog.js | 85 +++++++++++++++++++++-------
source/Ox.UI/png/icon128.png | Bin 0 -> 9537 bytes
5 files changed, 82 insertions(+), 29 deletions(-)
create mode 100644 source/Ox.UI/png/icon128.png
diff --git a/source/Ox.UI/css/Ox.UI.css b/source/Ox.UI/css/Ox.UI.css
index dbafe550..245c21ba 100644
--- a/source/Ox.UI/css/Ox.UI.css
+++ b/source/Ox.UI/css/Ox.UI.css
@@ -240,8 +240,8 @@ Dialog
}
.OxDialog > .OxTitlebar > .OxTitle {
- margin-top: 3px;
- font-size: 13px;
+ margin-top: 4px;
+ font-size: 11px;
font-weight: bold;
text-overflow: ellipsis;
overflow: hidden;
diff --git a/source/Ox.UI/js/Core/Ox.Request.js b/source/Ox.UI/js/Core/Ox.Request.js
index cff8bf60..76ccf9eb 100644
--- a/source/Ox.UI/js/Core/Ox.Request.js
+++ b/source/Ox.UI/js/Core/Ox.Request.js
@@ -152,8 +152,8 @@ Ox.Request = function(options) {
})
],
content: $iframe,
- width: 800,
- height: 400
+ width: 768,
+ height: 384
})
.open(),
iframe = $iframe[0].contentDocument || $iframe[0].contentWindow.document;
@@ -214,10 +214,20 @@ Ox.Request = function(options) {
}
})
],
- content: 'Sorry, we have encountered an application error while handling your request. To help us find out what went wrong, you may want to report this error to an administrator. Otherwise, please try again later.',
+ content: Ox.Element()
+ .append(
+ $('
')
+ .attr({src: Ox.UI.PATH + 'png/icon128.png'})
+ .css({position: 'absolute', left: '16px', top: '16px', width: '64px', height: '64px'})
+ )
+ .append(
+ Ox.Element()
+ .css({position: 'absolute', left: '96px', top: '16px', width: '256px'})
+ .html('Sorry, we have encountered an application error while handling your request. To help us find out what went wrong, you may want to report this error to an administrator. Otherwise, please try again later.')
+ ),
+ height: 192,
keys: {enter: 'close', escape: 'close'},
- width: 400,
- height: 200
+ width: 368
})
.open();
// fixme: change this to Send / Don't Send
diff --git a/source/Ox.UI/js/List/Ox.List.js b/source/Ox.UI/js/List/Ox.List.js
index f420c8e0..5c7eb90c 100644
--- a/source/Ox.UI/js/List/Ox.List.js
+++ b/source/Ox.UI/js/List/Ox.List.js
@@ -992,7 +992,7 @@ Ox.List = function(options, self) {
if (self.options.centered) {
that.animate({
scrollLeft: (self.listMargin / 2 + (pos + 0.5) * itemWidth - that.width() / 2) + 'px'
- }, 0);
+ }, 250);
} else {
positions[0] = pos * itemWidth + self.listMargin / 2;
positions[1] = positions[0] + itemWidth + self.itemMargin / 2;
diff --git a/source/Ox.UI/js/Window/Ox.Dialog.js b/source/Ox.UI/js/Window/Ox.Dialog.js
index be582a31..fcd09642 100644
--- a/source/Ox.UI/js/Window/Ox.Dialog.js
+++ b/source/Ox.UI/js/Window/Ox.Dialog.js
@@ -31,6 +31,7 @@ Ox.Dialog = function(options, self) {
fixedRatio: false,
focus: true,
height: 200,
+ keys: {},
maxHeight: Infinity,
maximizeButton: false,
maxWidth: Infinity,
@@ -41,6 +42,14 @@ Ox.Dialog = function(options, self) {
})
.options(options || {})
.addClass('OxDialog')
+ .bindEvent({
+ key_enter: function() {
+ keypress('enter');
+ },
+ key_escape: function() {
+ keypress('escape');
+ }
+ })
.hide()
.appendTo(Ox.UI.$body);
@@ -128,24 +137,7 @@ Ox.Dialog = function(options, self) {
self.$buttonsRight = $('
')
.addClass('OxButtonsRight')
.appendTo(self.$buttonsbar.$element);
- var buttonsLeft,
- buttonsRight,
- index = Ox.map(self.options.buttons, function(v, i) {
- return Ox.isEmpty(v) ? i : null;
- })[0];
- if (index) {
- buttonsLeft = Ox.sub(self.options.buttons, 0, index);
- buttonsRight = Ox.sub(self.options.buttons, index + 1);
- } else {
- buttonsLeft = [];
- buttonsRight = self.options.buttons;
- }
- buttonsLeft.forEach(function($button) {
- $button.addClass('OxLeft').appendTo(self.$buttonsLeft);
- });
- buttonsRight.forEach(function($button) {
- $button.addClass('OxRight').appendTo(self.$buttonsRight);
- });
+ setButtons();
}
if (!self.options.fixedCenter) {
@@ -263,6 +255,22 @@ Ox.Dialog = function(options, self) {
that.unwrap();
}
+ function getButtonById(id) {
+ var ret = null;
+ Ox.forEach(self.options.buttons, function(button) {
+ if (button.options && button.options('id') == id) {
+ ret = button;
+ return false;
+ }
+ });
+ return ret;
+ }
+
+ function keypress(key) {
+ var id = self.options.keys[key];
+ id && getButtonById(id).$element.trigger('click');
+ }
+
function maximize() {
var offset = that.offset();
decenter();
@@ -501,13 +509,36 @@ Ox.Dialog = function(options, self) {
that.unwrap();
}
+ function setButtons() {
+ var buttonsLeft,
+ buttonsRight,
+ index = Ox.map(self.options.buttons, function(v, i) {
+ return Ox.isEmpty(v) ? i : null;
+ })[0];
+ if (index) {
+ buttonsLeft = Ox.sub(self.options.buttons, 0, index);
+ buttonsRight = Ox.sub(self.options.buttons, index + 1);
+ } else {
+ buttonsLeft = [];
+ buttonsRight = self.options.buttons;
+ }
+ self.$buttonsLeft.empty();
+ buttonsLeft.forEach(function($button) {
+ $button.addClass('OxLeft').appendTo(self.$buttonsLeft);
+ });
+ self.$buttonsRight.empty();
+ buttonsRight.forEach(function($button) {
+ $button.addClass('OxRight').appendTo(self.$buttonsRight);
+ });
+ }
+
function setContent() {
var animate = !!self.$content
isImage = !self.options.content.ox && self.options.content.is('img');
if (animate) {
self.$content.animate({
opacity: 0
- }, 100, function() {
+ }, 250, function() {
$(this).remove() // fixme: removeElement?
});
self.options.content.css({
@@ -532,7 +563,7 @@ Ox.Dialog = function(options, self) {
);
animate && self.options.content.animate({
opacity: 1
- }, 100);
+ }, 250);
}
function setCSS(css, animate) {
@@ -591,7 +622,9 @@ Ox.Dialog = function(options, self) {
}
self.setOption = function(key, value) {
- if (key == 'content') {
+ if (key == 'buttons') {
+ setButtons();
+ } else if (key == 'content') {
setContent();
} else if (key == 'height') {
setMinAndMax();
@@ -631,6 +664,16 @@ Ox.Dialog = function(options, self) {
return that;
};
+ that.disableButton = function(id) {
+ getButtonById(id).options({disabled: true});
+ return that;
+ };
+
+ that.enableButton = function(id) {
+ getButtonById(id).options({disabled: false});
+ return that;
+ };
+
that.open = function() {
self.initialHeight = self.options.height;
self.initialWidth = self.options.width;
diff --git a/source/Ox.UI/png/icon128.png b/source/Ox.UI/png/icon128.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4f8c3072fa47235d800c34d0ebf9adbbb612b26
GIT binary patch
literal 9537
zcmW+*2RIyE7oH_bbfT;hED|NF_s;4>Cwhxclqk_ziB3c(dWqhGSkZ~zJBi)}(Fsxi
z`Tl*L*|~dXcjn%6&ikJCoQ>2_Q^3ce!T|sPUrA9`3p^wLJFqdq_bv&GA@KCrRnfp5
z0C1oDcR+yjOeg^0sN2iPXlU5Ec(}ORxwz6R$;i;Vy1Cfczp(}Y@A)ikTOI9Pa`DUM
zbA(C+GD*cniwv7y3lWVZjepJtdrYJp0n7VErrAj>C-;cDKQ{tBHWnE}rU}Q3!ug4{
z3CoZDP!JI{c(dkL;5gfIxjk}UKPRzMah6p#hSh
1BZK6|1N2X<
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