~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to gears/sdk/samples/gearpad/labels.js

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2007, Google Inc.
 
2
//
 
3
// Redistribution and use in source and binary forms, with or without 
 
4
// modification, are permitted provided that the following conditions are met:
 
5
//
 
6
//  1. Redistributions of source code must retain the above copyright notice, 
 
7
//     this list of conditions and the following disclaimer.
 
8
//  2. Redistributions in binary form must reproduce the above copyright notice,
 
9
//     this list of conditions and the following disclaimer in the documentation
 
10
//     and/or other materials provided with the distribution.
 
11
//  3. Neither the name of Google Inc. nor the names of its contributors may be
 
12
//     used to endorse or promote products derived from this software without
 
13
//     specific prior written permission.
 
14
//
 
15
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 
16
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 
17
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 
18
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 
19
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 
20
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 
21
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 
22
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
 
23
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 
24
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
25
 
 
26
// Functions for putting the labels of input boxes in the boxes themselves.
 
27
 
 
28
function setupLabels(fields) {
 
29
  for (var i = 0, elm; elm = fields[i]; i++) {
 
30
    if (elm.type == "text" || elm.type == "password") {
 
31
      if (elm.value == "") {
 
32
        elm._type = elm.type;
 
33
        setDynamicLabel(elm);
 
34
      }
 
35
      
 
36
      if (!DOM.is_pocket_ie) {
 
37
        DOM.listen(elm, "focus", focusDynamicLabel);
 
38
        DOM.listen(elm, "blur", blurDynamicLabel);
 
39
      }
 
40
    }
 
41
  }
 
42
}
 
43
 
 
44
function resetLabels(fields) {
 
45
  for (var i = 0, elm; elm = fields[i]; i++) {
 
46
    if (elm.type == "text" || elm.type == "password") {
 
47
      if (elm.value == elm.getAttribute("label")) {
 
48
        elm.value = "";
 
49
      }
 
50
    }
 
51
  }
 
52
}
 
53
 
 
54
function focusDynamicLabel(event) {
 
55
  var elm = getEventSrc(event);
 
56
  if (elm.value == elm.getAttribute("label")) {
 
57
    if (elm._type == "password") {
 
58
      elm = setInputType(elm, "password", true);
 
59
    }
 
60
    elm.value = "";
 
61
  }
 
62
}
 
63
 
 
64
function blurDynamicLabel(event) {
 
65
  // wierd... sometimes, it seems like the blur gets fired after unload, so 
 
66
  // this function is gone.
 
67
  if (typeof window.getEventSrc == "undefined") {
 
68
    return;
 
69
  }
 
70
 
 
71
  var elm = getEventSrc(event);
 
72
  setDynamicLabel(elm);
 
73
}
 
74
 
 
75
function setDynamicLabel(elm) {
 
76
  if ("" == elm.value) {
 
77
    if (elm.type == "password") {
 
78
      elm = setInputType(elm, "text", false);
 
79
    }
 
80
 
 
81
    elm.value = elm.getAttribute("label");
 
82
  }
 
83
}
 
84
 
 
85
function getEventSrc(e) {
 
86
  if (!e) e = window.event;
 
87
 
 
88
  if (e.originalTarget)
 
89
    return e.originalTarget;
 
90
  else if (e.srcElement)
 
91
    return e.srcElement;
 
92
}
 
93
 
 
94
function setInputType(el, type, focus) {
 
95
  if (DOM.is_pocket_ie) {
 
96
    // I could not get Pocket IE to respond to focus/blur events,
 
97
    // so this manipulation is not necessary for that platform
 
98
    return el;
 
99
  }
 
100
  if (DOM.is_ie) {
 
101
    var span = document.createElement("SPAN");
 
102
    span.innerHTML = 
 
103
      '<input id="' + el.id + '" type="' + type + '" class="' + 
 
104
      el.className + '" label="' + el.getAttribute("label") + '">';
 
105
 
 
106
    var newEl = span.firstChild;
 
107
    el.parentNode.replaceChild(newEl, el);
 
108
 
 
109
    newEl._type = el._type;
 
110
 
 
111
    if (focus) {
 
112
      window.setTimeout(function() { newEl.focus(); }, 0);
 
113
    }
 
114
 
 
115
    DOM.listen(newEl, "focus", focusDynamicLabel);
 
116
    DOM.listen(newEl, "blur", blurDynamicLabel);
 
117
 
 
118
    return newEl;
 
119
  } else {
 
120
    el.type = type;
 
121
    return el;
 
122
  }
 
123
}