+
+ ns.detect_duplicate_ids_in_dom = function() {
+ var ids = {},
+ found = false;
+
+ $('[id]').each(function() {
+ if (this.id && ids[this.id]) {
+ found = true;
+ console.warn('Duplicate ID #' + this.id);
+ }
+ ids[this.id] = 1;
+ });
+
+ if (!found)
+ console.log('No duplicate IDs found :)');
+ };
+
+ // Verifies that at least one checkbox matching the
+ // "checkbox_selector" is actually checked. If not, an error message
+ // is shown, and false is returned. Otherwise (at least one of them
+ // is checked) nothing is shown and true returned.
+ //
+ // Can be used in checks when clicking buttons.
+ ns.check_if_entries_selected = function(checkbox_selector) {
+ if ($(checkbox_selector + ':checked').length > 0)
+ return true;
+
+ alert(kivi.t8('No entries have been selected.'));
+
+ return false;
+ };
+
+ // Performs various validation steps on the descendants of
+ // 'selector'. Elements that should be validated must have an
+ // attribute named "data-validate" which is set to a space-separated
+ // list of tests to perform. Additionally, the attribute
+ // "data-title" must be set to a human-readable name of the field
+ // that can be shown as part of an error message.
+ //
+ // Supported validation tests are:
+ // - "required": the field must be set (its .val() must not be empty)
+ //
+ // The validation will abort and return "false" as soon as
+ // validation routine fails.
+ //
+ // The function returns "true" if all validations succeed for all
+ // elements.
+ ns.validate_form = function(selector) {
+ var validate_field = function(elt) {
+ var $elt = $(elt);
+ var tests = $elt.data('validate').split(/ +/);
+ var info = {
+ title: $elt.data('title'),
+ value: $elt.val(),
+ };
+
+ for (var test_idx in tests) {
+ var test = tests[test_idx];
+
+ if (test === "required") {
+ if ($elt.val() === '') {
+ alert(kivi.t8("The field '#{title}' must be set.", info));
+ return false;
+ }
+
+ } else {
+ var error = "kivi.validate_form: unknown test '" + test + "' for element ID '" + $elt.prop('id') + "'";
+ console.error(error);
+ alert(error);
+
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ selector = selector || '#form';
+ var ok = true;
+ var to_check = $(selector + ' [data-validate]').toArray();
+
+ for (var to_check_idx in to_check)
+ if (!validate_field(to_check[to_check_idx]))
+ return false;
+
+ return true;
+ };