_class.prototype = prototype;
_class.prototype.constructor = _class;
- _class.extend = arguments.callee;
+ _class.extend = Class.extend;
return _class;
};
h += keys[i] + ':' + data[keys[i]];
}
- if (h)
+ if (h.length)
location.hash = '#' + h;
+ else
+ location.hash = '';
};
this.getHash = function(key)
return data;
};
+ this.toArray = function(x)
+ {
+ switch (typeof(x))
+ {
+ case 'number':
+ case 'boolean':
+ return [ x ];
+
+ case 'string':
+ var r = [ ];
+ var l = x.split(/\s+/);
+ for (var i = 0; i < l.length; i++)
+ if (l[i].length > 0)
+ r.push(l[i]);
+ return r;
+
+ case 'object':
+ if ($.isArray(x))
+ {
+ var r = [ ];
+ for (var i = 0; i < x.length; i++)
+ r.push(x[i]);
+ return r;
+ }
+ else if ($.isPlainObject(x))
+ {
+ var r = [ ];
+ for (var k in x)
+ if (x.hasOwnProperty(k))
+ r.push(k);
+ return r.sort();
+ }
+ }
+
+ return [ ];
+ };
+
+ this.toObject = function(x)
+ {
+ switch (typeof(x))
+ {
+ case 'number':
+ case 'boolean':
+ return { x: true };
+
+ case 'string':
+ var r = { };
+ var l = x.split(/\x+/);
+ for (var i = 0; i < l.length; i++)
+ if (l[i].length > 0)
+ r[l[i]] = true;
+ return r;
+
+ case 'object':
+ if ($.isArray(x))
+ {
+ var r = { };
+ for (var i = 0; i < x.length; i++)
+ r[x[i]] = true;
+ return r;
+ }
+ else if ($.isPlainObject(x))
+ {
+ return x;
+ }
+ }
+
+ return { };
+ };
+
+ this.filterArray = function(array, item)
+ {
+ if (!$.isArray(array))
+ return [ ];
+
+ for (var i = 0; i < array.length; i++)
+ if (array[i] === item)
+ array.splice(i--, 1);
+
+ return array;
+ };
+
+ this.toClassName = function(str, suffix)
+ {
+ var n = '';
+ var l = str.split(/[\/.]/);
+
+ for (var i = 0; i < l.length; i++)
+ if (l[i].length > 0)
+ n += l[i].charAt(0).toUpperCase() + l[i].substr(1).toLowerCase();
+
+ if (typeof(suffix) == 'string')
+ n += suffix;
+
+ return n;
+ };
+
this.globals = {
timeout: 15000,
resource: '/luci2',
if (typeof(ret) != 'undefined' && key != '')
ret = ret[key];
- if (type.call(ret) != type.call(req.expect[key]))
+ if (typeof(ret) == 'undefined' || type.call(ret) != type.call(req.expect[key]))
ret = req.expect[key];
break;
else if (typeof types[label] == 'function')
{
stack.push(types[label]);
- stack.push(null);
+ stack.push([ ]);
}
else
{
throw "Syntax error, argument list follows non-function";
stack[stack.length-1] =
- arguments.callee(code.substring(pos, i));
+ _luci2.cbi.validation.compile(code.substring(pos, i));
pos = i+1;
}
}
i.error = $('<div />')
+ .hide()
.addClass('label label-danger');
i.widget = $('<div />')
d.elem.parents('div.form-group, td').first().addClass('luci2-form-error');
d.elem.parents('div.input-group, div.form-group, td').first().addClass('has-error');
- d.inst.error.text(_luci2.tr('Field must not be empty'));
+ d.inst.error.text(_luci2.tr('Field must not be empty')).show();
rv = false;
}
else if (val.length > 0 && !vstack[0].apply(val, vstack[1]))
d.elem.parents('div.form-group, td').first().addClass('luci2-form-error');
d.elem.parents('div.input-group, div.form-group, td').first().addClass('has-error');
- d.inst.error.text(validation.message.format.apply(validation.message, vstack[1]));
+ d.inst.error.text(validation.message.format.apply(validation.message, vstack[1])).show();
rv = false;
}
else
if (d.multi && d.inst.widget && d.inst.widget.find('input.error, select.error').length > 0)
rv = false;
else
- d.inst.error.text('');
+ d.inst.error.text('').hide();
}
}
if (typeof(o.disabled) == 'undefined') o.disabled = '0';
var i = $('<input />')
- .addClass('form-control')
.attr('id', this.id(sid))
.attr('type', 'checkbox')
.prop('checked', this.ucivalue(sid));
$('<li />')
.append($('<label />')
- .addClass('radio inline')
+ .addClass(itype + ' inline')
.append($('<input />')
.attr('name', itype + id)
.attr('type', itype)
.attr('value', iface['interface'])
- .prop('checked', !!check[iface['interface']])
- .addClass('form-control'))
+ .prop('checked', !!check[iface['interface']]))
.append(badge))
.appendTo(ul);
}
{
$('<li />')
.append($('<label />')
- .addClass('radio inline text-muted')
+ .addClass(itype + ' inline text-muted')
.append($('<input />')
.attr('name', itype + id)
.attr('type', itype)
.attr('value', '')
- .prop('checked', !value)
- .addClass('form-control'))
+ .prop('checked', !value))
.append(_luci2.tr('unspecified')))
.appendTo(ul);
}
inval++;
if (inval > 0)
- stbadge.text(inval)
+ stbadge.show()
+ .text(inval)
.attr('title', _luci2.trp('1 Error', '%d Errors', inval).format(inval));
else
- stbadge.text('');
+ stbadge.hide();
invals += inval;
}
if (invals > 0)
- badge.text(invals)
+ badge.show()
+ .text(invals)
.attr('title', _luci2.trp('1 Error', '%d Errors', invals).format(invals));
else
- badge.text('');
+ badge.hide();
return invals;
},
var badge = $('#' + this.id('sectiontab')).children('span:first');
if (this.error_count > 0)
- badge.text(this.error_count)
+ badge.show()
+ .text(this.error_count)
.attr('title', _luci2.trp('1 Error', '%d Errors', this.error_count).format(this.error_count));
else
- badge.text('');
+ badge.hide();
return (this.error_count == 0);
}