diff --git a/examples/widget_design_patterns/js/example.js b/examples/widget_design_patterns/js/example.js
index 821cf73e..18671d4a 100644
--- a/examples/widget_design_patterns/js/example.js
+++ b/examples/widget_design_patterns/js/example.js
@@ -145,10 +145,26 @@ Ox.load('UI', function() {
*/
+ /*
+ Now we create a new widget that subclasses `Ox.My.Box`.
+ */
Ox.My.RoundedBox = function(options, self) {
self = self || {};
+ /*
+ This time `that` is an instance of `Ox.My.Box`
+ */
var that = Ox.My.Box({}, self);
+ /*
+ `Ox.RoundedBox` has additional default properties,
+ we define this by overwriting the defaults.
+ Sice we do not want to overwrite the existing defaults,
+ we first get the defaults and extend them with our new values.
+
+ Here we also show an alternative way of getting updates.
+ Instead of passing an object `{key: function}`,
+ we can also pass one function that gets called with key, value.
+ */
that.defaults(Ox.extend(that.defaults(), {
radius: 16
}))
@@ -170,136 +186,24 @@ Ox.load('UI', function() {
return that;
};
+ /*
+
+ Ox.My.RoundedBox({
+ color: [255, 0, 0],
+ radius: 32
+ })
+ .appendTo(Ox.$body)
+ .options({size: 256})
+ .showOptions();
+
+ */
-
- window.myBox = Ox.My.Box().appendTo(Ox.$body);
- window.myRoundedBox = Ox.My.RoundedBox().appendTo(Ox.$body);
- return;
-
- Ox.My.Box = function(options, self) {
-
- self = self || {};
- var that = Ox.Element('', self)
- .defaults({
- color: [128, 128, 128],
- size: 128
- })
- .options(options || {})
- .addClass('OxMyBox OxMonospace')
- .css({
- color: 'white',
- padding: '16px',
- textShadow: '1px 1px 1px black'
- })
- .bindEvent({
- anyclick: focus,
- key_0: reset,
- key_equal: function() {
- Ox.print('+', self.options.size)
- setSize(self.options.size + 16, true);
- },
- key_minus: function() {
- setSize(self.options.size - 16, true);
- }
- });
-
- self.initialSize = self.options.size;
- self.minSize = 128;
- self.maxSize = 384;
-
- setColor();
- setSize(self.options.size);
- showOptions();
-
- function focus(e) {
- Ox.print(e.target);
- if (e.target == that.$element[0]) {
- that.gainFocus();
- }
- }
-
- function setColor() {
- that.css({
- backgroundColor: 'rgb(' + self.options.color.join(', ') + ')',
- });
- }
-
- function setSize(size, animate) {
- var css;
- self.options.size = Ox.limit(size, self.minSize, self.maxSize);
- css = {
- height: self.options.size + 'px',
- width: self.options.size + 'px',
- };
- Ox.print('SET SIZE', size, animate, self.minSize, self.maxSize, css)
- if (animate) {
- that.stop().animate(css, 100, showOptions);
- } else {
- that.css(css);
- }
- }
-
- function showOptions() {
- try {
- that.html(JSON.stringify(self.options).replace(/([,:])/g, '$1 '));
- } catch(e) {}
- }
-
- function reset() {
- self.options = self.initialOptions;
- showOptions();
- }
-
- self.setOption = function(key, value) {
- if (key == 'color') {
- setColor();
- } else if (key == 'size') {
- setSize(value);
- }
- showOptions();
- };
-
- return that;
-
- };
-
- Ox.My.RoundedBox = function(options, self) {
-
- self = self || {};
- var that = Ox.My.Box({}, self);
- that.defaults(Ox.extend(that.defaults(), {
- radius: 16
- }))
- .options(options || {});
-
- setRadius();
-
- function setRadius() {
- that.css({
- MozBorderRadius: self.options.radius + 'px',
- OBorderRadius: self.options.radius + 'px',
- WebkitBorderRadius: self.options.radius + 'px'
- });
- }
-
- self.setSuperOption = self.setOption;
-
- self.setOption = function(key, value) {
- if (key == 'radius') {
- setRadius();
- } else {
- self.setSuperOption(key, value);
- }
- }
-
- return that;
-
- };
-
+ /*
+ Its also possible to pass objects or other elements as options
+ */
Ox.My.MetaBox = function(options, self) {
self = self || {};
- Ox.print('MB', options)
var that = Ox.My.Box({}, self);
that.defaults(Ox.extend(that.defaults(), {
boxes: []
@@ -314,7 +218,10 @@ Ox.load('UI', function() {
};
- Ox.My.MetaBox({
+ /*
+ Now its time to create some boxes for this demo:
+ */
+ window.boxes = Ox.My.MetaBox({
boxes: [
Ox.My.Box({
color: [64, 128, 255]
@@ -326,5 +233,4 @@ Ox.load('UI', function() {
size: 384
})
.appendTo(Ox.$body);
-
-});
\ No newline at end of file
+});