root / snf-astakos-app / astakos / im / static / im / js / forms.js @ a70dacde
History | View | Annotate | Download (2.6 kB)
1 | 13858d75 | Kostas Papadimitriou | (function($){ |
---|---|---|---|
2 | 86243acc | Kostas Papadimitriou | |
3 | 86243acc | Kostas Papadimitriou | $.fn.formCheckBoxes = function(options) { |
4 | 86243acc | Kostas Papadimitriou | |
5 | 86243acc | Kostas Papadimitriou | return this.each(function() { |
6 | a70dacde | Kostas Papadimitriou | // process checkboxes
|
7 | 86243acc | Kostas Papadimitriou | var $this = $(this); |
8 | 86243acc | Kostas Papadimitriou | var el = $('<span class="checkbox-widget" />'); |
9 | a70dacde | Kostas Papadimitriou | var form = $this.closest(".form-row"); |
10 | a70dacde | Kostas Papadimitriou | |
11 | a70dacde | Kostas Papadimitriou | // add class to identify form rows which contain a checkbox
|
12 | a70dacde | Kostas Papadimitriou | form.addClass("with-checkbox");
|
13 | 255634e3 | Kostas Papadimitriou | |
14 | 255634e3 | Kostas Papadimitriou | if ($this.prev().length > 0) { |
15 | 255634e3 | Kostas Papadimitriou | var lbl = $this.prev()[0]; |
16 | 255634e3 | Kostas Papadimitriou | if (lbl.nodeName == "LABEL" || lbl.nodeName == "label") { |
17 | 255634e3 | Kostas Papadimitriou | $(lbl).addClass("checkbox-label"); |
18 | 255634e3 | Kostas Papadimitriou | |
19 | a70dacde | Kostas Papadimitriou | $(lbl).click(function(e){ |
20 | a70dacde | Kostas Papadimitriou | var src = e.srcElement.nodeName;
|
21 | a70dacde | Kostas Papadimitriou | if (src == "LABEL" || src == "label") { |
22 | a70dacde | Kostas Papadimitriou | el.toggleClass("checked");
|
23 | a70dacde | Kostas Papadimitriou | }; |
24 | 255634e3 | Kostas Papadimitriou | }) |
25 | 255634e3 | Kostas Papadimitriou | } |
26 | 255634e3 | Kostas Papadimitriou | } |
27 | 86243acc | Kostas Papadimitriou | $this.hide();
|
28 | 86243acc | Kostas Papadimitriou | |
29 | 86243acc | Kostas Papadimitriou | if ($this.is("checked")) { |
30 | 86243acc | Kostas Papadimitriou | el.addClass("checked");
|
31 | 86243acc | Kostas Papadimitriou | } |
32 | 86243acc | Kostas Papadimitriou | |
33 | 86243acc | Kostas Papadimitriou | el.click(function() {
|
34 | 86243acc | Kostas Papadimitriou | el.toggleClass("checked");
|
35 | 86243acc | Kostas Papadimitriou | $this.attr('checked', el.hasClass("checked")); |
36 | 86243acc | Kostas Papadimitriou | }) |
37 | 86243acc | Kostas Papadimitriou | |
38 | 86243acc | Kostas Papadimitriou | $this.after(el);
|
39 | 86243acc | Kostas Papadimitriou | }); |
40 | 86243acc | Kostas Papadimitriou | |
41 | 86243acc | Kostas Papadimitriou | |
42 | 86243acc | Kostas Papadimitriou | } |
43 | 13858d75 | Kostas Papadimitriou | |
44 | 13858d75 | Kostas Papadimitriou | $.fn.formErrors = function(options) { |
45 | 13858d75 | Kostas Papadimitriou | return this.each(function() { |
46 | 13858d75 | Kostas Papadimitriou | var $this = $(this); |
47 | 35a62b9d | Kostas Papadimitriou | |
48 | 35a62b9d | Kostas Papadimitriou | // does the field has any errors ?
|
49 | 13858d75 | Kostas Papadimitriou | var errors = $this.find(".errorlist"); |
50 | 13858d75 | Kostas Papadimitriou | if (errors.length == 0) { |
51 | 13858d75 | Kostas Papadimitriou | return;
|
52 | 13858d75 | Kostas Papadimitriou | } |
53 | 35a62b9d | Kostas Papadimitriou | |
54 | 35a62b9d | Kostas Papadimitriou | // create the custom error message block
|
55 | 35a62b9d | Kostas Papadimitriou | // and copy the contents of the original
|
56 | 35a62b9d | Kostas Papadimitriou | // error list
|
57 | 13858d75 | Kostas Papadimitriou | var el = $('<div class="form-error" />'); |
58 | 13858d75 | Kostas Papadimitriou | errors.find("li").each(function(){ |
59 | 13858d75 | Kostas Papadimitriou | el.html(el.html() + $(this).text() + "<br />"); |
60 | 13858d75 | Kostas Papadimitriou | }) |
61 | 35a62b9d | Kostas Papadimitriou | |
62 | 35a62b9d | Kostas Papadimitriou | var formel = $this.find("input, select"); |
63 | 35a62b9d | Kostas Papadimitriou | var lbl = $this.find("label"); |
64 | 35a62b9d | Kostas Papadimitriou | var form = $this.closest("form"); |
65 | 13858d75 | Kostas Papadimitriou | |
66 | 13858d75 | Kostas Papadimitriou | |
67 | 35a62b9d | Kostas Papadimitriou | // append element on form row
|
68 | 35a62b9d | Kostas Papadimitriou | // and apply the appropriate styles
|
69 | 35a62b9d | Kostas Papadimitriou | formel.closest(".form-row").append(el);
|
70 | 13858d75 | Kostas Papadimitriou | errors.remove(); |
71 | 35a62b9d | Kostas Papadimitriou | var left = formel.width();
|
72 | 35a62b9d | Kostas Papadimitriou | var top = formel.height();
|
73 | 35a62b9d | Kostas Papadimitriou | var marginleft = lbl.width();
|
74 | 35a62b9d | Kostas Papadimitriou | |
75 | 35a62b9d | Kostas Papadimitriou | // identify the position
|
76 | 35a62b9d | Kostas Papadimitriou | // forms with innerlbales class
|
77 | 35a62b9d | Kostas Papadimitriou | // display the label within the input fields
|
78 | 35a62b9d | Kostas Papadimitriou | if ($(form).hasClass("innerlabels")) { |
79 | 35a62b9d | Kostas Papadimitriou | marginleft = 0;
|
80 | 35a62b9d | Kostas Papadimitriou | } |
81 | 35a62b9d | Kostas Papadimitriou | |
82 | 35a62b9d | Kostas Papadimitriou | var styles = {
|
83 | 35a62b9d | Kostas Papadimitriou | left: left + "px", |
84 | 35a62b9d | Kostas Papadimitriou | top: top + "px", |
85 | 35a62b9d | Kostas Papadimitriou | width: formel.outerWidth() - 10, |
86 | 35a62b9d | Kostas Papadimitriou | marginLeft: marginleft,
|
87 | 35a62b9d | Kostas Papadimitriou | marginBottom: 5 |
88 | 35a62b9d | Kostas Papadimitriou | } |
89 | 255634e3 | Kostas Papadimitriou | |
90 | 255634e3 | Kostas Papadimitriou | if (formel.attr("type") != "checkbox") { |
91 | 255634e3 | Kostas Papadimitriou | el.css(styles); |
92 | 255634e3 | Kostas Papadimitriou | } else {
|
93 | 255634e3 | Kostas Papadimitriou | el.css("margin-top", "5px"); |
94 | 255634e3 | Kostas Papadimitriou | } |
95 | 13858d75 | Kostas Papadimitriou | }); |
96 | 13858d75 | Kostas Papadimitriou | |
97 | 13858d75 | Kostas Papadimitriou | }; |
98 | 13858d75 | Kostas Papadimitriou | })( jQuery ); |