Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / static / snf / js / invitations.js @ 986bcfe4

History | View | Annotate | Download (5.5 kB)

1 00469232 Kostas Papadimitriou
// Copyright 2011 GRNET S.A. All rights reserved.
2 00469232 Kostas Papadimitriou
// 
3 00469232 Kostas Papadimitriou
// Redistribution and use in source and binary forms, with or
4 00469232 Kostas Papadimitriou
// without modification, are permitted provided that the following
5 00469232 Kostas Papadimitriou
// conditions are met:
6 00469232 Kostas Papadimitriou
// 
7 00469232 Kostas Papadimitriou
//   1. Redistributions of source code must retain the above
8 00469232 Kostas Papadimitriou
//      copyright notice, this list of conditions and the following
9 00469232 Kostas Papadimitriou
//      disclaimer.
10 00469232 Kostas Papadimitriou
// 
11 00469232 Kostas Papadimitriou
//   2. Redistributions in binary form must reproduce the above
12 00469232 Kostas Papadimitriou
//      copyright notice, this list of conditions and the following
13 00469232 Kostas Papadimitriou
//      disclaimer in the documentation and/or other materials
14 00469232 Kostas Papadimitriou
//      provided with the distribution.
15 00469232 Kostas Papadimitriou
// 
16 00469232 Kostas Papadimitriou
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 00469232 Kostas Papadimitriou
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 00469232 Kostas Papadimitriou
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 00469232 Kostas Papadimitriou
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 00469232 Kostas Papadimitriou
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 00469232 Kostas Papadimitriou
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 00469232 Kostas Papadimitriou
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 00469232 Kostas Papadimitriou
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 00469232 Kostas Papadimitriou
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 00469232 Kostas Papadimitriou
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 00469232 Kostas Papadimitriou
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 00469232 Kostas Papadimitriou
// POSSIBILITY OF SUCH DAMAGE.
28 00469232 Kostas Papadimitriou
// 
29 00469232 Kostas Papadimitriou
// The views and conclusions contained in the software and
30 00469232 Kostas Papadimitriou
// documentation are those of the authors and should not be
31 00469232 Kostas Papadimitriou
// interpreted as representing official policies, either expressed
32 00469232 Kostas Papadimitriou
// or implied, of GRNET S.A.
33 00469232 Kostas Papadimitriou
// 
34 00469232 Kostas Papadimitriou
35 19e01943 Kostas Papadimitriou
/*
36 19e01943 Kostas Papadimitriou
*        jQuery dynamicField plugin
37 19e01943 Kostas Papadimitriou
*        Copyright 2009, Matt Quackenbush (http://www.quackfuzed.com/)
38 19e01943 Kostas Papadimitriou
*
39 19e01943 Kostas Papadimitriou
*        Find usage demos at http://www.quackfuzed.com/demos/jQuery/dynamicField/index.cfm)
40 19e01943 Kostas Papadimitriou
*
41 19e01943 Kostas Papadimitriou
*        Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
42 19e01943 Kostas Papadimitriou
*        and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
43 19e01943 Kostas Papadimitriou
*
44 19e01943 Kostas Papadimitriou
*        Version: 1.0
45 19e01943 Kostas Papadimitriou
*        Date:         8/13/2009
46 19e01943 Kostas Papadimitriou
*/
47 19e01943 Kostas Papadimitriou
;(function($) {
48 19e01943 Kostas Papadimitriou
        $.fn.dynamicField = function(options) {
49 19e01943 Kostas Papadimitriou
                if ( $(this).attr("id") == undefined ) {
50 848e6d10 Kostas Papadimitriou
                        throw "The dynamicField plugin could not be initialized.\n\nPlease check the selector.";
51 19e01943 Kostas Papadimitriou
                        return $;
52 19e01943 Kostas Papadimitriou
                }
53 19e01943 Kostas Papadimitriou
54 19e01943 Kostas Papadimitriou
                var f = $(this);
55 19e01943 Kostas Papadimitriou
56 19e01943 Kostas Papadimitriou
                var settings = $.extend({
57 19e01943 Kostas Papadimitriou
                        maxFields: 5,
58 45f5ab9c Kostas Papadimitriou
                        removeImgSrc: "/static/invitations/cross.png",
59 45f5ab9c Kostas Papadimitriou
                        spacerImgSrc: "/static/invitations/spacer.gif",
60 19e01943 Kostas Papadimitriou
                        addTriggerClass: "add-field-trigger",
61 19e01943 Kostas Papadimitriou
                        removeImgClass: "remove-field-trigger",
62 19e01943 Kostas Papadimitriou
                        hideClass: "hide",
63 19e01943 Kostas Papadimitriou
                        cloneContainerId: f.attr("id").replace(/^(.+)([_-][0-9]+)$/,"$1"),
64 19e01943 Kostas Papadimitriou
                        rowContainerClass: f.attr("class"),
65 19e01943 Kostas Papadimitriou
                        labelText: f.children("label")
66 19e01943 Kostas Papadimitriou
                                                        .html(),
67 19e01943 Kostas Papadimitriou
                        baseName: f.children("input")
68 19e01943 Kostas Papadimitriou
                                                                .attr("name")
69 19e01943 Kostas Papadimitriou
                                                                .replace(/^(.+[_-])([0-9]+)$/,"$1"),
70 19e01943 Kostas Papadimitriou
            baseNames: baseNames(),
71 19e01943 Kostas Papadimitriou
                        addContainerId: "add-" + f.children("input")
72 19e01943 Kostas Papadimitriou
                                                                .attr("name")
73 19e01943 Kostas Papadimitriou
                                                                .replace(/^(.+)([_-][0-9]+)$/,"$1")
74 19e01943 Kostas Papadimitriou
                                                                .replace(/_/g,"-") + "-container"
75 19e01943 Kostas Papadimitriou
                },options);
76 19e01943 Kostas Papadimitriou
                
77 19e01943 Kostas Papadimitriou
                var getFields = function() {
78 19e01943 Kostas Papadimitriou
                        return $("div." + settings.rowContainerClass);
79 19e01943 Kostas Papadimitriou
                };
80 19e01943 Kostas Papadimitriou
81 19e01943 Kostas Papadimitriou
        function baseNames() {
82 19e01943 Kostas Papadimitriou
            var names = new Array();
83 19e01943 Kostas Papadimitriou
            $.each(f.children("input"), function(index, child){
84 19e01943 Kostas Papadimitriou
                var name = child.name.replace(/^(.+[_-])([0-9]+)$/,"$1")
85 19e01943 Kostas Papadimitriou
                names.push(name);
86 19e01943 Kostas Papadimitriou
            });
87 19e01943 Kostas Papadimitriou
            return names;
88 19e01943 Kostas Papadimitriou
        }
89 19e01943 Kostas Papadimitriou
                
90 19e01943 Kostas Papadimitriou
                // handle hide/show, etc
91 19e01943 Kostas Papadimitriou
                var addRemoveBtnCk = function() {
92 19e01943 Kostas Papadimitriou
                        var fields = getFields();
93 19e01943 Kostas Papadimitriou
                        var len = fields.length;
94 19e01943 Kostas Papadimitriou
                        
95 19e01943 Kostas Papadimitriou
                        fields.each(function(i,elem) {
96 19e01943 Kostas Papadimitriou
                                $(elem)
97 19e01943 Kostas Papadimitriou
                                        .children("img")
98 19e01943 Kostas Papadimitriou
                                        .attr({
99 19e01943 Kostas Papadimitriou
                                                "src":(len == 1) ? settings.spacerImgSrc : settings.removeImgSrc,
100 19e01943 Kostas Papadimitriou
                                                "class":(len == 1) ? "" : settings.removeImgClass
101 19e01943 Kostas Papadimitriou
                                        });
102 19e01943 Kostas Papadimitriou
                        });
103 19e01943 Kostas Papadimitriou
                        
104 19e01943 Kostas Papadimitriou
                        if ( len > (settings.maxFields-1) ) {
105 19e01943 Kostas Papadimitriou
                                $("div#" + settings.addContainerId).addClass(settings.hideClass);
106 19e01943 Kostas Papadimitriou
                        } else {
107 19e01943 Kostas Papadimitriou
                                $("div#" + settings.addContainerId).removeClass(settings.hideClass);
108 19e01943 Kostas Papadimitriou
                        }
109 19e01943 Kostas Papadimitriou
                };
110 19e01943 Kostas Papadimitriou
                
111 19e01943 Kostas Papadimitriou
                // handle field removal
112 19e01943 Kostas Papadimitriou
                $("img." + settings.removeImgClass).live("click",function() {
113 19e01943 Kostas Papadimitriou
                        // remove the selected row
114 19e01943 Kostas Papadimitriou
                        $(this).parent("div." + settings.rowContainerClass).remove();
115 19e01943 Kostas Papadimitriou
                        
116 19e01943 Kostas Papadimitriou
                        // rebrand the remaining fields sequentially
117 19e01943 Kostas Papadimitriou
                        getFields().each(function(i,elem) {
118 19e01943 Kostas Papadimitriou
                                var pos = new Number(i+1);
119 19e01943 Kostas Papadimitriou
                                var d = $(elem)
120 19e01943 Kostas Papadimitriou
                                                        .attr("id",settings.cloneContainerId + "-" + pos);
121 f2141829 Kostas Papadimitriou
122 19e01943 Kostas Papadimitriou
                                d.children("label")
123 19e01943 Kostas Papadimitriou
                                                        .attr("for",settings.baseName + pos)
124 19e01943 Kostas Papadimitriou
                                                        .html((pos > 1) ? "" : settings.labelText);
125 19e01943 Kostas Papadimitriou
                                
126 f2141829 Kostas Papadimitriou
                names = settings.baseNames;
127 f2141829 Kostas Papadimitriou
                                d.children("input").each(function(i){
128 f2141829 Kostas Papadimitriou
                    $(this).attr({
129 f2141829 Kostas Papadimitriou
                        "id": names[i] + pos,
130 f2141829 Kostas Papadimitriou
                        "name": names[i] + pos
131 f2141829 Kostas Papadimitriou
                    });
132 f2141829 Kostas Papadimitriou
                });
133 19e01943 Kostas Papadimitriou
                        });
134 19e01943 Kostas Papadimitriou
                        
135 19e01943 Kostas Papadimitriou
                        addRemoveBtnCk();
136 19e01943 Kostas Papadimitriou
                });
137 19e01943 Kostas Papadimitriou
138 19e01943 Kostas Papadimitriou
                // handle field add
139 19e01943 Kostas Papadimitriou
                $("div#" + settings.addContainerId + " span." + settings.addTriggerClass).click(function() {
140 19e01943 Kostas Papadimitriou
                        var len = getFields().length;
141 19e01943 Kostas Papadimitriou
                        var pos = new Number(len+1);
142 19e01943 Kostas Papadimitriou
                        var newDiv = $("<div/>")
143 19e01943 Kostas Papadimitriou
                                                        .attr("id",settings.cloneContainerId + "-" + pos)
144 19e01943 Kostas Papadimitriou
                                                        .addClass(settings.rowContainerClass);
145 19e01943 Kostas Papadimitriou
            
146 19e01943 Kostas Papadimitriou
            $.each(settings.baseNames, function(index, name) {
147 19e01943 Kostas Papadimitriou
148 19e01943 Kostas Papadimitriou
                var input = $("<input/>").attr({
149 19e01943 Kostas Papadimitriou
                                                                "id":name + pos,
150 19e01943 Kostas Papadimitriou
                                                                "name":name + pos,
151 19e01943 Kostas Papadimitriou
                                                                "value":""
152 19e01943 Kostas Papadimitriou
                                                        });
153 19e01943 Kostas Papadimitriou
                newDiv.append(input);
154 19e01943 Kostas Papadimitriou
            });
155 19e01943 Kostas Papadimitriou
            newDiv.append($("<img>").attr("src",settings.removeImgSrc));
156 19e01943 Kostas Papadimitriou
            
157 19e01943 Kostas Papadimitriou
                        if ( len > 0 ) {
158 19e01943 Kostas Papadimitriou
                                $("div#" + settings.cloneContainerId + "-" + len).after(newDiv);
159 19e01943 Kostas Papadimitriou
                        } else {
160 19e01943 Kostas Papadimitriou
                                $("div#" + settings.addContainerId).before(newDiv);
161 19e01943 Kostas Papadimitriou
                        }
162 19e01943 Kostas Papadimitriou
                        
163 19e01943 Kostas Papadimitriou
                        addRemoveBtnCk();
164 19e01943 Kostas Papadimitriou
                });
165 19e01943 Kostas Papadimitriou
        };
166 19e01943 Kostas Papadimitriou
})(jQuery);