web/rsln/res/metadataplayer/test/interface 1.2/source/iexpander.js
author Samuel Huron <samuel.huron@centrepompidou.fr>
Fri, 18 Feb 2011 19:37:15 +0100
changeset 50 a1636b31eb98
permissions -rw-r--r--
polemical timeline
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     1
/**
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     2
 * Interface Elements for jQuery
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     3
 * Expander
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     4
 * 
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     5
 * http://interface.eyecon.ro
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     6
 * 
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     7
 * Copyright (c) 2006 Stefan Petre
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     8
 * Dual licensed under the MIT (MIT-LICENSE.txt) 
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
     9
 * and GPL (GPL-LICENSE.txt) licenses.
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    10
 *   
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    11
 *
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    12
 */
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    13
 
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    14
/**
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    15
 * Expands text and textarea elements while new characters are typed to the a miximum width
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    16
 *
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    17
 * @name Expander
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    18
 * @description Expands text and textarea elements while new characters are typed to the a miximum width
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    19
 * @param Mixed limit integer if only expands in width, array if expands in width and height
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    20
 * @type jQuery
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    21
 * @cat Plugins/Interface
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    22
 * @author Stefan Petre
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    23
 */
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    24
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    25
jQuery.iExpander =
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    26
{
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    27
	helper : null,
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    28
	expand : function()
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    29
	{
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    30
		
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    31
		text = this.value;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    32
		if (!text)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    33
			return;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    34
		style = {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    35
			fontFamily: jQuery(this).css('fontFamily')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    36
			fontSize: jQuery(this).css('fontSize')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    37
			fontWeight: jQuery(this).css('fontWeight')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    38
			fontStyle: jQuery(this).css('fontStyle')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    39
			fontStretch: jQuery(this).css('fontStretch')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    40
			fontVariant: jQuery(this).css('fontVariant')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    41
			letterSpacing: jQuery(this).css('letterSpacing')||'',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    42
			wordSpacing: jQuery(this).css('wordSpacing')||''
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    43
		};
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    44
		jQuery.iExpander.helper.css(style);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    45
		html = jQuery.iExpander.htmlEntities(text);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    46
		html = html.replace(new RegExp( "\\n", "g" ), "<br />");
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    47
		jQuery.iExpander.helper.html('pW');
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    48
		spacer = jQuery.iExpander.helper.get(0).offsetWidth;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    49
		jQuery.iExpander.helper.html(html);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    50
		width = jQuery.iExpander.helper.get(0).offsetWidth + spacer;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    51
		if (this.Expander.limit && width > this.Expander.limit[0]) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    52
			width = this.Expander.limit[0];
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    53
		}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    54
		this.style.width = width + 'px';
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    55
		if (this.tagName == 'TEXTAREA') {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    56
			height = jQuery.iExpander.helper.get(0).offsetHeight + spacer;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    57
			if (this.Expander.limit && height > this.Expander.limit[1]) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    58
				height = this.Expander.limit[1];
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    59
			}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    60
			this.style.height = height + 'px';
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    61
		}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    62
	},
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    63
	htmlEntities : function(text)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    64
	{ 
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    65
		entities = {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    66
			'&':'&amp;',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    67
			'<':'&lt;',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    68
			'>':'&gt;',
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    69
			'"':'&quot;'
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    70
		};
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    71
		for(i in entities) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    72
			text = text.replace(new RegExp(i,'g'),entities[i]);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    73
		}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    74
		return text;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    75
	},
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    76
	build : function(limit)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    77
	{
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    78
		if (jQuery.iExpander.helper == null) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    79
			jQuery('body', document).append('<div id="expanderHelper" style="position: absolute; top: 0; left: 0; visibility: hidden;"></div>');
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    80
			jQuery.iExpander.helper = jQuery('#expanderHelper');
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    81
		}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    82
		return this.each(
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    83
			function()
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    84
			{
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    85
				if (/TEXTAREA|INPUT/.test(this.tagName)) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    86
					if (this.tagName == 'INPUT') {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    87
						elType = this.getAttribute('type');
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    88
						if (!/text|password/.test(elType)) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    89
							return;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    90
						}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    91
					}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    92
					if (limit && (limit.constructor == Number || (limit.constructor == Array && limit.length == 2))) {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    93
						if (limit.constructor == Number)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    94
							limit = [limit, limit];
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    95
						else {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    96
							limit[0] = parseInt(limit[0])||400;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    97
							limit[1] = parseInt(limit[1])||400;
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    98
						}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
    99
						this.Expander = {
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   100
							limit : limit
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   101
						};
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   102
					}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   103
					jQuery(this)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   104
						.blur(jQuery.iExpander.expand)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   105
						.keyup(jQuery.iExpander.expand)
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   106
						.keypress(jQuery.iExpander.expand);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   107
					jQuery.iExpander.expand.apply(this);
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   108
				}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   109
			}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   110
		);			
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   111
	}
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   112
};
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   113
a1636b31eb98 polemical timeline
Samuel Huron <samuel.huron@centrepompidou.fr>
parents:
diff changeset
   114
jQuery.fn.Autoexpand = jQuery.iExpander.build;