Moved project files to wolnelektury directory.
[wolnelektury.git] / wolnelektury / media / js / jquery.labelify.js
diff --git a/wolnelektury/media/js/jquery.labelify.js b/wolnelektury/media/js/jquery.labelify.js
new file mode 100644 (file)
index 0000000..13196b2
--- /dev/null
@@ -0,0 +1,89 @@
+/**
+ * jQuery.labelify - Display in-textbox hints
+ * Stuart Langridge, http://www.kryogenix.org/
+ * Released into the public domain
+ * Date: 25th June 2008
+ * @author Stuart Langridge
+ * @version 1.3
+ *
+ *
+ * Basic calling syntax: $("input").labelify();
+ * Defaults to taking the in-field label from the field's title attribute
+ *
+ * You can also pass an options object with the following keys:
+ *   text
+ *     "title" to get the in-field label from the field's title attribute 
+ *      (this is the default)
+ *     "label" to get the in-field label from the inner text of the field's label
+ *      (note that the label must be attached to the field with for="fieldid")
+ *     a function which takes one parameter, the input field, and returns
+ *      whatever text it likes
+ *
+ *   labelledClass
+ *     a class that will be applied to the input field when it contains the
+ *      label and removed when it contains user input. Defaults to blank.
+ *  
+ */
+jQuery.fn.labelify = function(settings) {
+  settings = jQuery.extend({
+    text: "title",
+    labelledClass: ""
+  }, settings);
+  var lookups = {
+    title: function(input) {
+      return $(input).attr("title");
+    },
+    label: function(input) {
+      return $("label[for=" + input.id +"]").text();
+    }
+  };
+  var lookup;
+  var jQuery_labellified_elements = $(this);
+  return $(this).each(function() {
+    if (typeof settings.text === "string") {
+      lookup = lookups[settings.text]; // what if not there?
+    } else {
+      lookup = settings.text; // what if not a fn?
+    };
+    // bail if lookup isn't a function or if it returns undefined
+    if (typeof lookup !== "function") { return; }
+    var lookupval = lookup(this);
+    if (!lookupval) { return; }
+
+    // need to strip newlines because the browser strips them
+    // if you set textbox.value to a string containing them    
+    $(this).data("label",lookup(this).replace(/\n/g,''));
+    $(this).focus(function() {
+      if (this.value === $(this).data("label")) {
+        this.value = this.defaultValue;
+        $(this).removeClass(settings.labelledClass);
+      }
+    }).blur(function(){
+      if (this.value === this.defaultValue) {
+        this.value = $(this).data("label");
+        $(this).addClass(settings.labelledClass);
+      }
+    });
+    
+    var removeValuesOnExit = function() {
+      jQuery_labellified_elements.each(function(){
+        if (this.value === $(this).data("label")) {
+          this.value = this.defaultValue;
+          $(this).removeClass(settings.labelledClass);
+        }
+      })
+    };
+    
+    $(this).parents("form").submit(removeValuesOnExit);
+    $(window).unload(removeValuesOnExit);
+    
+    if (this.value !== this.defaultValue) {
+      // user already started typing; don't overwrite their work!
+      return;
+    }
+    // actually set the value
+    this.value = $(this).data("label");
+    $(this).addClass(settings.labelledClass);
+
+  });
+};
\ No newline at end of file