root / ui / static / invitations.js @ 5f448ec5
History | View | Annotate | Download (4 kB)
1 | 19e01943 | Kostas Papadimitriou | /*
|
---|---|---|---|
2 | 19e01943 | Kostas Papadimitriou | * jQuery dynamicField plugin
|
3 | 19e01943 | Kostas Papadimitriou | * Copyright 2009, Matt Quackenbush (http://www.quackfuzed.com/)
|
4 | 19e01943 | Kostas Papadimitriou | *
|
5 | 19e01943 | Kostas Papadimitriou | * Find usage demos at http://www.quackfuzed.com/demos/jQuery/dynamicField/index.cfm)
|
6 | 19e01943 | Kostas Papadimitriou | *
|
7 | 19e01943 | Kostas Papadimitriou | * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
8 | 19e01943 | Kostas Papadimitriou | * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
|
9 | 19e01943 | Kostas Papadimitriou | *
|
10 | 19e01943 | Kostas Papadimitriou | * Version: 1.0
|
11 | 19e01943 | Kostas Papadimitriou | * Date: 8/13/2009
|
12 | 19e01943 | Kostas Papadimitriou | */
|
13 | 19e01943 | Kostas Papadimitriou | ;(function($) { |
14 | 19e01943 | Kostas Papadimitriou | $.fn.dynamicField = function(options) { |
15 | 19e01943 | Kostas Papadimitriou | if ( $(this).attr("id") == undefined ) { |
16 | 19e01943 | Kostas Papadimitriou | alert("The dynamicField plugin could not be initialized.\n\nPlease check the selector.");
|
17 | 19e01943 | Kostas Papadimitriou | return $; |
18 | 19e01943 | Kostas Papadimitriou | } |
19 | 19e01943 | Kostas Papadimitriou | |
20 | 19e01943 | Kostas Papadimitriou | var f = $(this); |
21 | 19e01943 | Kostas Papadimitriou | |
22 | 19e01943 | Kostas Papadimitriou | var settings = $.extend({ |
23 | 19e01943 | Kostas Papadimitriou | maxFields: 5, |
24 | 19e01943 | Kostas Papadimitriou | removeImgSrc: "/static/cross.png", |
25 | 19e01943 | Kostas Papadimitriou | spacerImgSrc: "/static/spacer.gif", |
26 | 19e01943 | Kostas Papadimitriou | addTriggerClass: "add-field-trigger", |
27 | 19e01943 | Kostas Papadimitriou | removeImgClass: "remove-field-trigger", |
28 | 19e01943 | Kostas Papadimitriou | hideClass: "hide", |
29 | 19e01943 | Kostas Papadimitriou | cloneContainerId: f.attr("id").replace(/^(.+)([_-][0-9]+)$/,"$1"), |
30 | 19e01943 | Kostas Papadimitriou | rowContainerClass: f.attr("class"), |
31 | 19e01943 | Kostas Papadimitriou | labelText: f.children("label") |
32 | 19e01943 | Kostas Papadimitriou | .html(), |
33 | 19e01943 | Kostas Papadimitriou | baseName: f.children("input") |
34 | 19e01943 | Kostas Papadimitriou | .attr("name")
|
35 | 19e01943 | Kostas Papadimitriou | .replace(/^(.+[_-])([0-9]+)$/,"$1"), |
36 | 19e01943 | Kostas Papadimitriou | baseNames: baseNames(),
|
37 | 19e01943 | Kostas Papadimitriou | addContainerId: "add-" + f.children("input") |
38 | 19e01943 | Kostas Papadimitriou | .attr("name")
|
39 | 19e01943 | Kostas Papadimitriou | .replace(/^(.+)([_-][0-9]+)$/,"$1") |
40 | 19e01943 | Kostas Papadimitriou | .replace(/_/g,"-") + "-container" |
41 | 19e01943 | Kostas Papadimitriou | },options); |
42 | 19e01943 | Kostas Papadimitriou | |
43 | 19e01943 | Kostas Papadimitriou | var getFields = function() { |
44 | 19e01943 | Kostas Papadimitriou | return $("div." + settings.rowContainerClass); |
45 | 19e01943 | Kostas Papadimitriou | }; |
46 | 19e01943 | Kostas Papadimitriou | |
47 | 19e01943 | Kostas Papadimitriou | function baseNames() { |
48 | 19e01943 | Kostas Papadimitriou | var names = new Array(); |
49 | 19e01943 | Kostas Papadimitriou | $.each(f.children("input"), function(index, child){ |
50 | 19e01943 | Kostas Papadimitriou | var name = child.name.replace(/^(.+[_-])([0-9]+)$/,"$1") |
51 | 19e01943 | Kostas Papadimitriou | names.push(name); |
52 | 19e01943 | Kostas Papadimitriou | }); |
53 | 19e01943 | Kostas Papadimitriou | return names;
|
54 | 19e01943 | Kostas Papadimitriou | } |
55 | 19e01943 | Kostas Papadimitriou | |
56 | 19e01943 | Kostas Papadimitriou | // handle hide/show, etc
|
57 | 19e01943 | Kostas Papadimitriou | var addRemoveBtnCk = function() { |
58 | 19e01943 | Kostas Papadimitriou | var fields = getFields();
|
59 | 19e01943 | Kostas Papadimitriou | var len = fields.length;
|
60 | 19e01943 | Kostas Papadimitriou | |
61 | 19e01943 | Kostas Papadimitriou | fields.each(function(i,elem) {
|
62 | 19e01943 | Kostas Papadimitriou | $(elem)
|
63 | 19e01943 | Kostas Papadimitriou | .children("img")
|
64 | 19e01943 | Kostas Papadimitriou | .attr({ |
65 | 19e01943 | Kostas Papadimitriou | "src":(len == 1) ? settings.spacerImgSrc : settings.removeImgSrc, |
66 | 19e01943 | Kostas Papadimitriou | "class":(len == 1) ? "" : settings.removeImgClass |
67 | 19e01943 | Kostas Papadimitriou | }); |
68 | 19e01943 | Kostas Papadimitriou | }); |
69 | 19e01943 | Kostas Papadimitriou | |
70 | 19e01943 | Kostas Papadimitriou | if ( len > (settings.maxFields-1) ) { |
71 | 19e01943 | Kostas Papadimitriou | $("div#" + settings.addContainerId).addClass(settings.hideClass); |
72 | 19e01943 | Kostas Papadimitriou | } else {
|
73 | 19e01943 | Kostas Papadimitriou | $("div#" + settings.addContainerId).removeClass(settings.hideClass); |
74 | 19e01943 | Kostas Papadimitriou | } |
75 | 19e01943 | Kostas Papadimitriou | }; |
76 | 19e01943 | Kostas Papadimitriou | |
77 | 19e01943 | Kostas Papadimitriou | // handle field removal
|
78 | 19e01943 | Kostas Papadimitriou | $("img." + settings.removeImgClass).live("click",function() { |
79 | 19e01943 | Kostas Papadimitriou | // remove the selected row
|
80 | 19e01943 | Kostas Papadimitriou | $(this).parent("div." + settings.rowContainerClass).remove(); |
81 | 19e01943 | Kostas Papadimitriou | |
82 | 19e01943 | Kostas Papadimitriou | // rebrand the remaining fields sequentially
|
83 | 19e01943 | Kostas Papadimitriou | getFields().each(function(i,elem) {
|
84 | 19e01943 | Kostas Papadimitriou | var pos = new Number(i+1); |
85 | 19e01943 | Kostas Papadimitriou | var d = $(elem) |
86 | 19e01943 | Kostas Papadimitriou | .attr("id",settings.cloneContainerId + "-" + pos); |
87 | f2141829 | Kostas Papadimitriou | |
88 | 19e01943 | Kostas Papadimitriou | d.children("label")
|
89 | 19e01943 | Kostas Papadimitriou | .attr("for",settings.baseName + pos)
|
90 | 19e01943 | Kostas Papadimitriou | .html((pos > 1) ? "" : settings.labelText); |
91 | 19e01943 | Kostas Papadimitriou | |
92 | f2141829 | Kostas Papadimitriou | names = settings.baseNames; |
93 | f2141829 | Kostas Papadimitriou | d.children("input").each(function(i){ |
94 | f2141829 | Kostas Papadimitriou | $(this).attr({ |
95 | f2141829 | Kostas Papadimitriou | "id": names[i] + pos,
|
96 | f2141829 | Kostas Papadimitriou | "name": names[i] + pos
|
97 | f2141829 | Kostas Papadimitriou | }); |
98 | f2141829 | Kostas Papadimitriou | }); |
99 | 19e01943 | Kostas Papadimitriou | }); |
100 | 19e01943 | Kostas Papadimitriou | |
101 | 19e01943 | Kostas Papadimitriou | addRemoveBtnCk(); |
102 | 19e01943 | Kostas Papadimitriou | }); |
103 | 19e01943 | Kostas Papadimitriou | |
104 | 19e01943 | Kostas Papadimitriou | // handle field add
|
105 | 19e01943 | Kostas Papadimitriou | $("div#" + settings.addContainerId + " span." + settings.addTriggerClass).click(function() { |
106 | 19e01943 | Kostas Papadimitriou | var len = getFields().length;
|
107 | 19e01943 | Kostas Papadimitriou | var pos = new Number(len+1); |
108 | 19e01943 | Kostas Papadimitriou | var newDiv = $("<div/>") |
109 | 19e01943 | Kostas Papadimitriou | .attr("id",settings.cloneContainerId + "-" + pos) |
110 | 19e01943 | Kostas Papadimitriou | .addClass(settings.rowContainerClass); |
111 | 19e01943 | Kostas Papadimitriou | |
112 | 19e01943 | Kostas Papadimitriou | $.each(settings.baseNames, function(index, name) { |
113 | 19e01943 | Kostas Papadimitriou | |
114 | 19e01943 | Kostas Papadimitriou | var input = $("<input/>").attr({ |
115 | 19e01943 | Kostas Papadimitriou | "id":name + pos,
|
116 | 19e01943 | Kostas Papadimitriou | "name":name + pos,
|
117 | 19e01943 | Kostas Papadimitriou | "value":"" |
118 | 19e01943 | Kostas Papadimitriou | }); |
119 | 19e01943 | Kostas Papadimitriou | newDiv.append(input); |
120 | 19e01943 | Kostas Papadimitriou | }); |
121 | 19e01943 | Kostas Papadimitriou | newDiv.append($("<img>").attr("src",settings.removeImgSrc)); |
122 | 19e01943 | Kostas Papadimitriou | |
123 | 19e01943 | Kostas Papadimitriou | if ( len > 0 ) { |
124 | 19e01943 | Kostas Papadimitriou | $("div#" + settings.cloneContainerId + "-" + len).after(newDiv); |
125 | 19e01943 | Kostas Papadimitriou | } else {
|
126 | 19e01943 | Kostas Papadimitriou | $("div#" + settings.addContainerId).before(newDiv); |
127 | 19e01943 | Kostas Papadimitriou | } |
128 | 19e01943 | Kostas Papadimitriou | |
129 | 19e01943 | Kostas Papadimitriou | addRemoveBtnCk(); |
130 | 19e01943 | Kostas Papadimitriou | }); |
131 | 19e01943 | Kostas Papadimitriou | }; |
132 | 19e01943 | Kostas Papadimitriou | })(jQuery); |