Statistics
| Branch: | Tag: | Revision:

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 );