PageSourceSearch

https://plenmagazin.ru/components/com_formcalc/assets/js/formcalc.js

js plenmagazin.ru collected 2026-10-05 00:32:16 UTC 4,197 bytes, 125 lines download raw bytes

1/**
2 * User: shprota
3 * Date: 15.03.11
4 * Time: 19:40
5 */
6
7Element.implement({
8    getValue: function(){
9        switch(this.get('tag')){
10            case 'select':
11                var values = [];
12                Array.each(this.options, function(option){
13                    if (option.selected) values.push([option.value, option.text].pick());
14                });
15                return (this.multiple) ? values : values[0];
16            case 'input': if (!(this.checked && ['checkbox', 'radio'].contains(this.type)) && !['hidden', 'text', 'password'].contains(this.type)) break;
17            case 'textarea': return this.value;
18        }
19        return false;
20    }
21});
22
23var SCalc = new Class({
24    initialize: function(frm, formula, nsigns) {
25        this.form = $(frm);
26        this.formula = formula;
27        this.nsigns = nsigns || 2;
28        var _this = this;
29        this.form.getElements('input, textarea, select').each(function(el){
30            if(this.isFormulaPart(el)) {
31                el.addEvent('change', _this.calcData.bind(_this));
32                if(el.get('tag') == 'input' && (el.getAttribute('type') == 'radio' || el.getAttribute('type') == 'checkbox'))
33                    el.addEvent('click', _this.calcData.bind(_this));
34
35                if(el.getAttribute('type') == 'text' || el.get('tag') == 'select')
36                    el.addEvent('keyup', _this.calcData.bind(_this));
37            }
38        }.bind(this));
39        this.calcData();
40    }
41    ,isFormulaPart: function(el) {
42        var isPart = false;
43        var regexp = new RegExp('\{'+el.name+'\}');
44        this.formula.each(function(formula){
45            if(el.name && formula.match(regexp) !== null) {
46                isPart = true;
47                return false;
48            }
49        });
50        return isPart;
51    }
52    ,calcData: function() {
53        var vals = [];
54        this.form.getElements('input, textarea, select').each(function(el) {
55            if(el.name) {
56                var v = el.getValue();
57                if(v!==false)vals[el.name] = v;
58            }
59        });
60        this.formula.each(function(formula){
61            var wformula = formula;
62            for(var fld in vals)
63                if(typeof vals[fld] !== 'function')
64                    wformula = wformula.replace(new RegExp('{'+fld+'}','gm'), vals[fld]?vals[fld].replace(',', '.'):0);
65            wformula = wformula.replace(/\{.*?\}/g, '0');
66            var result;
67            try { result = eval(wformula); }
68            catch(e) { result = NaN; }
69            var rfield = formula.split('=')[0];
70            if(rfield.trim())
71              this.setResult(rfield, result);
72        }.bind(this));
73    }
74    ,setResult: function(rfield, result) {
75        if(isFinite(result))
76        {
77            var divider = Math.pow(10, this.nsigns);
78            result = Math.round(result*divider)/divider;
79            $(rfield).value=result;
80            $(rfield+'_disp').set('text',result);
81        }
82        else
83        {
84            $(rfield+'_disp').set('text','');
85            $(rfield).value=result;
86        }
87    }
88});
89
90
91window.addEvent('domready', function(){
92    if(!__FC_FORMULA)return;
93    var formCheck = new FormCheck('calcForm', {
94        display: {
95            keepFocusOnError: 0,
96            showErrors: 1,
97            checkValueIfEmpty: 0
98        }
99        ,regexp: {
100            number : /^[-+]?\d*(\.|,)?\d+$/
101        }
102        ,submit: __FC_SUBMIT
103    });
104    new SCalc('calcForm', __FC_FORMULA);
105    if(!__FC_SUBMIT){
106        formCheck.addEvent('validateSuccess', function(){
107            new Request.JSON({
108                url: __FC_BASE_URL+'/index.php'
109                ,method: 'post'
110                ,data: {
111                    option: 'com_formcalc'
112                    ,task: 'checkCaptcha'
113                    ,format: 'raw'
114                    ,captcha: formCheck.form.captcha.value
115                }
116                ,onSuccess: function(r) {
117                    //var r = Json.evaluate(resp);
118                    if(r.success)$('calcForm').submit();
119                    else alert(__FC_CAPTCHA_TEXT);
120                }
121            }).send();
122            //$('calcForm').submit();
123        });
124    }
125});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.