| 1 |  |   | 
  | 2 |  |   | 
  | 3 |  |   | 
  | 4 |  |   | 
  | 5 |  |   | 
  | 6 |  |   | 
  | 7 |  |   | 
  | 8 |  |   | 
  | 9 |  |   | 
  | 10 |  |   | 
  | 11 |  |   | 
  | 12 |  |   | 
  | 13 |  |   | 
  | 14 |  |   | 
  | 15 |  |   | 
  | 16 |  |  package org.kuali.student.common.ui.client.widgets.notification; | 
  | 17 |  |   | 
  | 18 |  |  import com.google.gwt.dom.client.Element; | 
  | 19 |  |  import com.google.gwt.event.dom.client.ClickEvent; | 
  | 20 |  |  import com.google.gwt.event.dom.client.ClickHandler; | 
  | 21 |  |  import com.google.gwt.event.dom.client.MouseOutEvent; | 
  | 22 |  |  import com.google.gwt.event.dom.client.MouseOutHandler; | 
  | 23 |  |  import com.google.gwt.event.dom.client.MouseOverEvent; | 
  | 24 |  |  import com.google.gwt.event.dom.client.MouseOverHandler; | 
  | 25 |  |  import com.google.gwt.event.logical.shared.CloseEvent; | 
  | 26 |  |  import com.google.gwt.event.logical.shared.CloseHandler; | 
  | 27 |  |  import com.google.gwt.event.logical.shared.HasCloseHandlers; | 
  | 28 |  |  import com.google.gwt.event.shared.HandlerRegistration; | 
  | 29 |  |  import com.google.gwt.user.client.DOM; | 
  | 30 |  |  import com.google.gwt.user.client.Event; | 
  | 31 |  |  import com.google.gwt.user.client.ui.Composite; | 
  | 32 |  |  import com.google.gwt.user.client.ui.HTML; | 
  | 33 |  |  import com.google.gwt.user.client.ui.HTMLPanel; | 
  | 34 |  |  import com.google.gwt.user.client.ui.Widget; | 
  | 35 |  |   | 
  | 36 | 0 |  public class KSNotification extends Composite implements HasCloseHandlers<KSNotification>{ | 
  | 37 |  |          private final int duration; | 
  | 38 |  |          public static final int DEFAULT_DURATION = 4000; | 
  | 39 | 0 |          private final String id = HTMLPanel.createUniqueId(); | 
  | 40 | 0 |          private final String contentId = HTMLPanel.createUniqueId(); | 
  | 41 | 0 |          private final String closeLinkId = HTMLPanel.createUniqueId(); | 
  | 42 | 0 |          private final HTMLPanel panel = new HTMLPanel("<p id='" + contentId + "'></p><a href='javascript:return false;' title='Close' class='ks-notification-close' style='visibility: hidden' id='" + closeLinkId + "'></a>"); | 
  | 43 |  |           | 
  | 44 | 0 |          public KSNotification(final String message, boolean isHtml, final int duration) { | 
  | 45 | 0 |                  this.duration = duration; | 
  | 46 | 0 |                  panel.setStyleName("ks-notification-message"); | 
  | 47 | 0 |                  panel.getElement().setId(id); | 
  | 48 |  |                   | 
  | 49 | 0 |                  if (isHtml) { | 
  | 50 | 0 |                          panel.add(new HTML(message), contentId); | 
  | 51 |  |                  } else { | 
  | 52 | 0 |                          panel.getElementById(contentId).setInnerText(message); | 
  | 53 |  |                  } | 
  | 54 |  |                   | 
  | 55 | 0 |                  initHandlers(); | 
  | 56 | 0 |                  super.initWidget(panel); | 
  | 57 | 0 |          } | 
  | 58 |  |           | 
  | 59 |  |          public KSNotification(final String message, boolean isHtml, boolean isError, final int duration) { | 
  | 60 | 0 |                  this(message, isHtml, duration); | 
  | 61 | 0 |                  if (isError){ | 
  | 62 | 0 |                          panel.setStyleName("ks-notification-error");                         | 
  | 63 |  |                  } | 
  | 64 | 0 |          } | 
  | 65 |  |   | 
  | 66 | 0 |          public KSNotification(final String message, boolean isHtml) { | 
  | 67 | 0 |                  this.duration = DEFAULT_DURATION; | 
  | 68 | 0 |                  panel.setStyleName("ks-notification-message"); | 
  | 69 | 0 |                  panel.getElement().setId(id); | 
  | 70 |  |                   | 
  | 71 | 0 |                  if (isHtml) { | 
  | 72 | 0 |                          panel.add(new HTML(message), contentId); | 
  | 73 |  |                  } else { | 
  | 74 | 0 |                          panel.getElementById(contentId).setInnerText(message); | 
  | 75 |  |                  } | 
  | 76 |  |                   | 
  | 77 | 0 |                  initHandlers(); | 
  | 78 | 0 |                  super.initWidget(panel); | 
  | 79 | 0 |          } | 
  | 80 |  |   | 
  | 81 | 0 |          public KSNotification(final Widget widget, final int duration) { | 
  | 82 | 0 |                  this.duration = duration; | 
  | 83 | 0 |                  panel.setStyleName("ks-notification-message"); | 
  | 84 | 0 |                  panel.getElement().setId(id); | 
  | 85 | 0 |                  panel.add(widget, contentId); | 
  | 86 |  |                   | 
  | 87 | 0 |                  initHandlers(); | 
  | 88 | 0 |                  super.initWidget(panel); | 
  | 89 | 0 |          } | 
  | 90 |  |   | 
  | 91 |  |          private void initHandlers() { | 
  | 92 | 0 |                  addDomHandler(new MouseOverHandler() { | 
  | 93 |  |                          @Override | 
  | 94 |  |                          public void onMouseOver(MouseOverEvent event) { | 
  | 95 | 0 |                                  DOM.getElementById(closeLinkId).getStyle().setProperty("visibility", "visible"); | 
  | 96 | 0 |                          } | 
  | 97 |  |                  }, MouseOverEvent.getType()); | 
  | 98 |  |   | 
  | 99 | 0 |                  addDomHandler(new MouseOutHandler() { | 
  | 100 |  |                          @Override | 
  | 101 |  |                          public void onMouseOut(MouseOutEvent event) { | 
  | 102 | 0 |                                  DOM.getElementById(closeLinkId).getStyle().setProperty("visibility", "hidden"); | 
  | 103 | 0 |                          } | 
  | 104 |  |                  }, MouseOutEvent.getType()); | 
  | 105 |  |                   | 
  | 106 | 0 |                  DOM.sinkEvents(panel.getElementById(closeLinkId), Event.ONCLICK); | 
  | 107 | 0 |                  addDomHandler(new ClickHandler() { | 
  | 108 |  |                          @Override | 
  | 109 |  |                          public void onClick(ClickEvent event) { | 
  | 110 | 0 |                                  Element e = Element.as(event.getNativeEvent().getEventTarget()); | 
  | 111 | 0 |                                  if (e.equals(panel.getElementById(closeLinkId))) { | 
  | 112 | 0 |                                          CloseEvent.fire(KSNotification.this, KSNotification.this); | 
  | 113 |  |                                  } | 
  | 114 | 0 |                          } | 
  | 115 |  |                  }, ClickEvent.getType()); | 
  | 116 | 0 |          } | 
  | 117 |  |           | 
  | 118 |  |           | 
  | 119 |  |   | 
  | 120 |  |   | 
  | 121 |  |          public int getDuration() { | 
  | 122 | 0 |                  return duration; | 
  | 123 |  |          } | 
  | 124 |  |   | 
  | 125 |  |          public String getId() { | 
  | 126 | 0 |                  return id; | 
  | 127 |  |          } | 
  | 128 |  |   | 
  | 129 |  |          public String getContentId() { | 
  | 130 | 0 |                  return contentId; | 
  | 131 |  |          } | 
  | 132 |  |   | 
  | 133 |  |          public String getCloseLinkId() { | 
  | 134 | 0 |                  return closeLinkId; | 
  | 135 |  |          } | 
  | 136 |  |   | 
  | 137 |  |           | 
  | 138 |  |          @Override | 
  | 139 |  |          public HandlerRegistration addCloseHandler( | 
  | 140 |  |                          CloseHandler<KSNotification> handler) { | 
  | 141 | 0 |                  return addHandler(handler, CloseEvent.getType()); | 
  | 142 |  |          } | 
  | 143 |  |  } |