| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| Elements | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$1 | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$1$1 | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$2 | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$2$1 | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$EmptyFadeCallback | 
 | 
 | 1.1333333333333333;1.133 | ||||
| Elements$FadeCallback | 
 | 
 | 1.1333333333333333;1.133 | 
| 1 |  /** | |
| 2 |   * Copyright 2010 The Kuali Foundation Licensed under the | |
| 3 |   * Educational Community License, Version 2.0 (the "License"); you may | |
| 4 |   * not use this file except in compliance with the License. You may | |
| 5 |   * obtain a copy of the License at | |
| 6 |   * | |
| 7 |   * http://www.osedu.org/licenses/ECL-2.0 | |
| 8 |   * | |
| 9 |   * Unless required by applicable law or agreed to in writing, | |
| 10 |   * software distributed under the License is distributed on an "AS IS" | |
| 11 |   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express | |
| 12 |   * or implied. See the License for the specific language governing | |
| 13 |   * permissions and limitations under the License. | |
| 14 |   */ | |
| 15 | ||
| 16 |  package org.kuali.student.common.ui.client.util; | |
| 17 | ||
| 18 |  import com.google.gwt.dom.client.Element; | |
| 19 |  import com.google.gwt.dom.client.Style; | |
| 20 |  import com.google.gwt.user.client.Command; | |
| 21 |  import com.google.gwt.user.client.DeferredCommand; | |
| 22 |  import com.google.gwt.user.client.Timer; | |
| 23 |  import com.google.gwt.user.client.ui.UIObject; | |
| 24 | ||
| 25 |  /** | |
| 26 |   * Utility class for DOM element manipulations, UIObject effects, etc. | |
| 27 |   *  | |
| 28 |   */ | |
| 29 | 0 |  public class Elements { | 
| 30 | ||
| 31 | public interface FadeCallback { | |
| 32 | public void onFadeComplete(); | |
| 33 | ||
| 34 | public void onFadeStart(); | |
| 35 | } | |
| 36 | ||
| 37 | 0 |          public static class EmptyFadeCallback implements FadeCallback { | 
| 38 | 0 |          public void onFadeComplete() {} | 
| 39 | 0 |          public void onFadeStart() {} | 
| 40 | } | |
| 41 |          /** | |
| 42 |           * Causes an element to "fade in" via opacity. Make sure that element to | |
| 43 |           * fade is not visible before calling this method. When the callback is | |
| 44 |           * invoked with onFadeStart, the element can be set to visible as it is | |
| 45 |           * entirely transparent. When onFadeComplete is called, the element will be | |
| 46 |           * entirely opaque. | |
| 47 |           *  | |
| 48 |           * @param target | |
| 49 |           *            the UIObject to be faded in | |
| 50 |           * @param milliseconds | |
| 51 |           *            how long the fade effect should take to process | |
| 52 |           * @param maxOpacity | |
| 53 |           *                           final opacity | |
| 54 |           * @param callback | |
| 55 |           *            the callback to be invoked on fade progress | |
| 56 |           */ | |
| 57 | public static void fadeIn(final UIObject target, final int milliseconds, final int maxOpacity, | |
| 58 |                          final FadeCallback callback) { | |
| 59 | 0 |              fadeIn(target.getElement(), milliseconds, maxOpacity, callback); | 
| 60 | 0 |          } | 
| 61 | public static void fadeIn(final Element e, final int milliseconds, final int maxOpacity, | |
| 62 |              final FadeCallback callback) { | |
| 63 | ||
| 64 | 0 |              final int interval = milliseconds / 50; | 
| 65 | 0 |                  setOpacity(e, 0); | 
| 66 | 0 |                  DeferredCommand.addCommand(new Command() { | 
| 67 | ||
| 68 | @Override | |
| 69 | public void execute() { | |
| 70 | 0 |                                  callback.onFadeStart(); | 
| 71 | ||
| 72 | 0 |                                  final Timer t = new Timer() { | 
| 73 | 0 |                                          int pct = 0; | 
| 74 | ||
| 75 | @Override | |
| 76 | public void run() { | |
| 77 | 0 |                                                  pct += 2; | 
| 78 | 0 |                                                  pct = Math.min(pct, maxOpacity); | 
| 79 | 0 |                                                  setOpacity(e, pct); | 
| 80 | 0 |                                                  if (pct == maxOpacity) { | 
| 81 | 0 |                                                          this.cancel(); | 
| 82 | 0 |                                                          callback.onFadeComplete(); | 
| 83 | } | |
| 84 | 0 |                                          } | 
| 85 | }; | |
| 86 | 0 |                                  t.scheduleRepeating(interval); | 
| 87 | ||
| 88 | 0 |                          } | 
| 89 | }); | |
| 90 | 0 |          } | 
| 91 | ||
| 92 |          /** | |
| 93 |           * Causes an element to "fade out" via opacity. When onFadeComplete is | |
| 94 |           * called, the element will be entirely transparent. | |
| 95 |           *  | |
| 96 |           * @param target | |
| 97 |           *            the UIObject to be faded out | |
| 98 |           * @param milliseconds | |
| 99 |           *            how long the fade effect should take to process | |
| 100 |           * @param minOpacity | |
| 101 |           *                           final opacity | |
| 102 |           * @param callback | |
| 103 |           *            the callback to be invoked on fade progress | |
| 104 |           */ | |
| 105 | public static void fadeOut(final UIObject target, final int milliseconds, final int minOpacity, | |
| 106 |                          final FadeCallback callback) { | |
| 107 | 0 |              fadeOut(target.getElement(), milliseconds, minOpacity, callback); | 
| 108 | 0 |          } | 
| 109 | public static void fadeOut(final Element e, final int milliseconds, final int minOpacity, | |
| 110 |                 final FadeCallback callback) { | |
| 111 | ||
| 112 | 0 |                  final int interval = milliseconds / 50; | 
| 113 | 0 |                  DeferredCommand.addCommand(new Command() { | 
| 114 | ||
| 115 | @Override | |
| 116 | public void execute() { | |
| 117 | 0 |                                  callback.onFadeStart(); | 
| 118 | ||
| 119 | 0 |                                  final Timer t = new Timer() { | 
| 120 | 0 |                                          int pct = 100; | 
| 121 | ||
| 122 | @Override | |
| 123 | public void run() { | |
| 124 | 0 |                                                  pct -= 2; | 
| 125 | 0 |                                                  pct = Math.max(pct, minOpacity); | 
| 126 | 0 |                                                  setOpacity(e, pct); | 
| 127 | 0 |                                                  if (pct == minOpacity) { | 
| 128 | 0 |                                                          this.cancel(); | 
| 129 | 0 |                                                          callback.onFadeComplete(); | 
| 130 | } | |
| 131 | 0 |                                          } | 
| 132 | }; | |
| 133 | 0 |                                  t.scheduleRepeating(interval); | 
| 134 | ||
| 135 | 0 |                          } | 
| 136 | }); | |
| 137 | 0 |          } | 
| 138 | ||
| 139 |          /** | |
| 140 |       * Sets a UIObject's opacity | |
| 141 |       *  | |
| 142 |       * @param u | |
| 143 |       * @param percent | |
| 144 |       */ | |
| 145 | public static void setOpacity(final UIObject u, final int percent) { | |
| 146 | 0 |          setOpacity(u.getElement(), percent); | 
| 147 | 0 |      } | 
| 148 | ||
| 149 |          /** | |
| 150 |           * Sets a DOM element's opacity | |
| 151 |           *  | |
| 152 |           * @param e | |
| 153 |           * @param percent | |
| 154 |           */ | |
| 155 | public static void setOpacity(final Element e, final int percent) { | |
| 156 | 0 |                  final Style s = e.getStyle(); | 
| 157 | 0 |                  final double d = ((double) percent / (double) 100); | 
| 158 | 0 |                  s.setProperty("opacity", String.valueOf(d)); | 
| 159 | 0 |                  s.setProperty("MozOpacity", String.valueOf(d)); | 
| 160 | 0 |                  s.setProperty("KhtmlOpacity", String.valueOf(d)); | 
| 161 | 0 |                  s.setProperty("filter", "alpha(opacity=" + percent + ")"); | 
| 162 | 0 |          } | 
| 163 | ||
| 164 |          /** | |
| 165 |           * Enables/disables text selection for the specified element. | |
| 166 |           *  | |
| 167 |           * @param e | |
| 168 |           * @param selectable | |
| 169 |           */ | |
| 170 | public static native void setTextSelectable(Element e, boolean selectable)/*-{ | |
| 171 |                                                                                                                                                                  if (selectable) { | |
| 172 |                                                                                                                                                                  e.ondrag = null; | |
| 173 |                                                                                                                                                                  e.onselectstart = null; | |
| 174 |                                                                                                                                                                  e.style.MozUserSelect="text"; | |
| 175 |                                                                                                                                                                  } else { | |
| 176 |                                                                                                                                                                  e.ondrag = function () { return false; }; | |
| 177 |                                                                                                                                                                  e.onselectstart = function () { return false; }; | |
| 178 |                                                                                                                                                                  e.style.MozUserSelect="none"; | |
| 179 |                                                                                                                                                                  } | |
| 180 |                                                                                                                                                                  }-*/; | |
| 181 | } |