1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.animation;
35
36 import com.google.gwt.animation.client.Animation;
37 import com.google.gwt.dom.client.Element;
38 import com.vaadin.client.ApplicationConnection;
39 import info.magnolia.ui.vaadin.gwt.client.jquerywrapper.AnimationSettings;
40 import info.magnolia.ui.vaadin.gwt.client.jquerywrapper.JQueryCallback;
41 import info.magnolia.ui.vaadin.gwt.client.jquerywrapper.JQueryWrapper;
42
43
44
45
46 public class JQueryAnimation extends Animation {
47
48 private Object lock = new Object();
49
50 private AnimationSettings settings = new AnimationSettings();
51
52 private JQueryWrapper jQueryWrapper;
53
54 private Element currentElement;
55
56 private ApplicationConnection connection;
57
58 private boolean isBlocking = false;
59
60 private boolean isClearTopAfterThisAnimation = false;
61
62 public void setProperty(String property, Object value) {
63 settings.setProperty(property, value);
64 }
65
66 public void addCallback(JQueryCallback callback) {
67 settings.addCallback(callback);
68 }
69
70 public void clearTopAfterThisAnimation() {
71 isClearTopAfterThisAnimation = true;
72 }
73
74 public JQueryAnimation(ApplicationConnection connection) {
75 this.connection = connection;
76 if (connection != null) {
77 this.isBlocking = true;
78 }
79 addCallback(new JQueryCallback() {
80 @Override
81 public void execute(JQueryWrapper query) {
82 query.setCss("transition", "");
83 query.setCss("transform", "");
84
85 getJQueryWrapper().setCss("-webkit-transform", "");
86 getJQueryWrapper().setCss("-webkit-transition", "");
87
88 if (isClearTopAfterThisAnimation) {
89 currentElement.getStyle().clearTop();
90 }
91 isClearTopAfterThisAnimation = false;
92 onComplete();
93 }
94 });
95 }
96
97 public JQueryAnimation() {
98 this(null);
99 }
100
101 @Override
102 public void run(int duration, double startTime, Element element) {
103 this.currentElement = element;
104 this.jQueryWrapper = null;
105 cancel();
106 onStart();
107 getJQueryWrapper().animate(duration, settings);
108 }
109
110 protected JQueryWrapper getJQueryWrapper() {
111 if (jQueryWrapper == null) {
112 jQueryWrapper = JQueryWrapper.select((com.google.gwt.user.client.Element)currentElement);
113 }
114 return jQueryWrapper;
115 }
116
117 @Override
118 protected void onUpdate(double progress) {}
119
120 @Override
121 public void cancel() {
122 if (isRunning()) {
123 getJQueryWrapper().stop();
124 getJQueryWrapper().setCss("transition", "");
125 getJQueryWrapper().setCss("transform", "");
126 getJQueryWrapper().setCss("top", "");
127 getJQueryWrapper().setCss("-webkit-transform", "");
128 getJQueryWrapper().setCss("-webkit-transition", "");
129 getJQueryWrapper().setCss("-moz-transform", "");
130 getJQueryWrapper().setCss("-moz-transition", "");
131 getJQueryWrapper().setCss("-o-transform", "");
132 getJQueryWrapper().setCss("-o-transition", "");
133 }
134 onComplete();
135 }
136
137 @Override
138 protected void onStart() {
139 super.onStart();
140 if (isBlocking && connection != null) {
141 connection.suspendReponseHandling(lock);
142 }
143 }
144
145 @Override
146 protected void onComplete() {
147 if (isBlocking && connection != null) {
148 connection.resumeResponseHandling(lock);
149 }
150 }
151
152 @Override
153 public boolean isRunning() {
154 return getJQueryWrapper().isAnimationInProgress();
155 }
156
157 public Element getCurrentElement() {
158 return currentElement;
159 }
160 }