Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/html/lib/onyx/source/Drawer.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/lib/onyx/source/Drawer.js')
-rw-r--r--html/lib/onyx/source/Drawer.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/html/lib/onyx/source/Drawer.js b/html/lib/onyx/source/Drawer.js
new file mode 100644
index 0000000..3db5afd
--- /dev/null
+++ b/html/lib/onyx/source/Drawer.js
@@ -0,0 +1,75 @@
+/**
+ A control that appears or disappears based on its _open_ property.
+ It appears or disappears with a sliding animation whose direction is
+ determined by the _orient_ property.
+*/
+enyo.kind({
+ name: "onyx.Drawer",
+ published: {
+ //* The visibility state of the drawer's associated control
+ open: true,
+ //* "v" for vertical animation; "h" for horizontal animation
+ orient: "v"
+ },
+ style: "overflow: hidden; position: relative;",
+ tools: [
+ {kind: "Animator", onStep: "animatorStep", onEnd: "animatorEnd"},
+ {name: "client", style: "position: relative;", classes: "enyo-border-box"}
+ ],
+ create: function() {
+ this.inherited(arguments);
+ this.openChanged();
+ },
+ initComponents: function() {
+ this.createChrome(this.tools);
+ this.inherited(arguments);
+ },
+ openChanged: function() {
+ this.$.client.show();
+ if (this.hasNode()) {
+ if (this.$.animator.isAnimating()) {
+ this.$.animator.reverse();
+ } else {
+ var v = this.orient == "v";
+ var d = v ? "height" : "width";
+ var p = v ? "top" : "left";
+ // unfixing the height/width is needed to properly
+ // measure the scrollHeight/Width DOM property, but
+ // can cause a momentary flash of content on some browsers
+ this.applyStyle(d, null);
+ var s = this.hasNode()[v ? "scrollHeight" : "scrollWidth"];
+ this.$.animator.play({
+ startValue: this.open ? 0 : s,
+ endValue: this.open ? s : 0,
+ dimension: d,
+ position: p
+ });
+ }
+ } else {
+ this.$.client.setShowing(this.open);
+ }
+ },
+ animatorStep: function(inSender) {
+ if (this.hasNode()) {
+ var d = inSender.dimension;
+ this.node.style[d] = this.domStyles[d] = inSender.value + "px";
+ }
+ var cn = this.$.client.hasNode();
+ if (cn) {
+ var p = inSender.position;
+ var o = (this.open ? inSender.endValue : inSender.startValue);
+ cn.style[p] = this.$.client.domStyles[p] = (inSender.value - o) + "px";
+ }
+ if (this.container) {
+ this.container.resized();
+ }
+ },
+ animatorEnd: function() {
+ if (!this.open) {
+ this.$.client.hide();
+ }
+ if (this.container) {
+ this.container.resized();
+ }
+ }
+}); \ No newline at end of file