X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/0cae17bec6d31806615fae59a5b3945016285fbe..2f1c330e555c24deb17b7d6018b59c52dab7aafd:/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 index 000000000..13196b289 --- /dev/null +++ b/wolnelektury/media/js/jquery.labelify.js @@ -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