Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1985)

Unified Diff: sky/framework/sky-drawer.sky

Issue 942413002: Port sky-drawer to Dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/framework/animation/timer.sky ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/framework/sky-drawer.sky
diff --git a/sky/framework/sky-drawer.sky b/sky/framework/sky-drawer.sky
index 13e0ef9e2ade22bad8c14eb58fa74eca4d5671ca..c4fc9aba83c44175dbe7474cb21263f37cdc2399 100644
--- a/sky/framework/sky-drawer.sky
+++ b/sky/framework/sky-drawer.sky
@@ -3,17 +3,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-->
-<import src="animation/controller.sky" as="AnimationController" />
-<import src="animation/curves.sky" as="Curves" />
-<import src="sky-element/sky-element.sky" as="SkyElement" />
+<import src="sky-element.sky" />
<import src="sky-scrollable.sky" />
-<sky-element
- name="sky-drawer"
- on-pointerdown="handlePointerDown"
- on-pointermove="handlePointerMove"
- on-pointerup="handlePointerUp"
- on-pointercancel="handlePointerCancel">
+<sky-element>
<template>
<style>
#mask {
@@ -35,128 +28,136 @@
bottom: 0;
}
</style>
- <div id="mask" on-click="handleMaskClick" />
- <div id="content" on-gestureflingstart="handleFlingStart">
+ <div id="mask" />
+ <div id="content">
<content/>
</div>
</template>
<script>
-const kWidth = 256;
-const kMinFlingVelocity = 0.4;
-const kMinAnimationDurationMS = 246;
-const kMaxAnimationDurationMS = 600;
-const kAnimationCurve = Curves.easeInOut;
-
-module.exports = class extends SkyElement {
- created() {
- this.position_ = 0;
- this.mask_ = null;
- this.content_ = null;
- this.animation_ = new AnimationController(this);
- }
-
- shadowRootReady() {
- this.mask_ = this.shadowRoot.getElementById('mask');
- this.content_ = this.shadowRoot.getElementById('content');
- this.position = -kWidth;
- }
-
- toggle() {
- if (this.isMostlyClosed)
- this.open();
+import "animation/controller.dart";
+import "animation/curves.dart";
+import "animation/timer.dart";
+import "dart:math" as math;
+import "dart:sky";
+
+const double _kWidth = 256.0;
+const double _kMinFlingVelocity = 0.4;
+const double _kMinAnimationDurationMS = 246.0;
+const double _kMaxAnimationDurationMS = 600.0;
+const Cubic _kAnimationCurve = easeOut;
+
+@Tagname('sky-drawer')
+class SkyDrawer extends SkyElement implements AnimationDelegate {
+ Element _mask;
+ Element _content;
+ double _position = 0.0;
+ AnimationController _animation;
+
+ SkyDrawer() {
+ _animation = new AnimationController(this);
+
+ addEventListener('pointerdown', _handlePointerDown);
+ addEventListener('pointermove', _handlePointerMove);
+ addEventListener('pointerup', _handlePointerUp);
+ addEventListener('pointercancel', _handlePointerCancel);
+ }
+
+ void shadowRootReady() {
+ _mask = shadowRoot.getElementById('mask');
+ _mask.addEventListener('click', _handleMaskClick);
+ _content = shadowRoot.getElementById('content');
+ _content.addEventListener('gestureflingstart', _handleFlingStart);
+ position = -_kWidth;
+ }
+
+ void toggle() {
+ if (isMostlyClosed)
+ open();
else
- this.close();
- }
-
- open() {
- this.animateToPosition_(0);
+ close();
}
- close() {
- this.animateToPosition_(-kWidth);
+ void open() {
+ _animateToPosition(0.0);
}
- get isClosed() {
- return this.position_ <= -kWidth;
+ void close() {
+ _animateToPosition(-_kWidth);
}
- get isMostlyClosed() {
- return this.position_ <= -kWidth / 2;
- }
+ bool get isClosed => _position <= -_kWidth;
+ bool get isMostlyClosed => _position <= -_kWidth / 2;
+ double get position => _position;
- get position() {
- return this.position_;
+ set position(double value) {
+ double newPosition = math.min(0.0, math.max(value, -_kWidth));
+ _position = newPosition;
+ _content.style['transform'] = 'translateX(${newPosition}px)';
+ _mask.style['opacity'] = '${(newPosition / _kWidth + 1) * 0.25}';
+ style['display'] = isClosed ? 'none' : '';
}
- set position(value) {
- var newPosition = Math.min(0, Math.max(value, -kWidth));
- this.position_ = newPosition;
- this.content_.style.transform = 'translateX(' + newPosition + 'px)';
- this.mask_.style.opacity = (newPosition / kWidth + 1) * 0.25;
- this.style.display = this.isClosed ? 'none' : '';
- }
-
- settle_() {
- if (this.isMostlyClosed)
- this.close();
+ void _settle() {
+ if (isMostlyClosed)
+ close();
else
- this.open();
+ open();
}
- animateToPosition_(targetPosition) {
- var currentPosition = this.position_;
- var distance = Math.abs(targetPosition - currentPosition);
- var duration = kMaxAnimationDurationMS * distance / kWidth;
- this.animation_.start({
+ void _animateToPosition(double targetPosition) {
+ double currentPosition = _position;
+ double distance = (targetPosition - currentPosition).abs();
+ double duration = _kMaxAnimationDurationMS * distance / _kWidth;
+ _animation.start(
begin: currentPosition,
end: targetPosition,
- duration: Math.max(kMinAnimationDurationMS, duration),
- curve: kAnimationCurve,
- });
+ duration: math.max(_kMinAnimationDurationMS, duration),
+ curve: _kAnimationCurve);
}
- updateAnimation(position) {
- this.position = position;
+ void updateAnimation(double p) {
+ position = p;
}
- handleMaskClick() {
- this.close();
+ void _handleMaskClick(_) {
+ close();
}
- handlePointerDown(event) {
- this.animation_.stop();
+ void _handlePointerDown(_) {
+ _animation.stop();
}
- handlePointerMove(event) {
- this.position += event.dx;
+ void _handlePointerMove(PointerEvent event) {
+ position += event.dx;
}
- handlePointerUp(event) {
- if (!this.animation_.isAnimating)
- this.settle_();
+ void _handlePointerUp(_) {
+ if (!_animation.isAnimating)
+ _settle();
}
- handlePointerCancel(event) {
- if (!this.animation_.isAnimating)
- this.settle_();
+ void _handlePointerCancel(_) {
+ if (!_animation.isAnimating)
+ _settle();
}
- handleFlingStart(event) {
- var direction = Math.sign(event.velocityX);
- var velocityX = Math.abs(event.velocityX) / 1000;
- if (velocityX < kMinFlingVelocity)
+ void _handleFlingStart(event) {
+ double direction = event.velocityX.sign();
+ double velocityX = event.velocityX.abs() / 1000;
+ if (velocityX < _kMinFlingVelocity)
return;
- var targetPosition = direction < 0 ? -kWidth : 0;
- var currentPosition = this.position_;
- var distance = Math.abs(targetPosition - currentPosition);
- var duration = distance / velocityX;
- this.animation_.start({
+ double targetPosition = direction < 0.0 ? -kWidth : 0.0;
+ double currentPosition = _position;
+ double distance = (targetPosition - currentPosition).abs();
+ double duration = distance / velocityX;
+ _animation.start(
begin: currentPosition,
end: targetPosition,
duration: duration,
- curve: Curves.linear,
- });
+ curve: linear);
}
-}.register();
+}
+
+_init(script) => register(script, SkyDrawer);
</script>
</sky-element>
« no previous file with comments | « sky/framework/animation/timer.sky ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698