+
+ 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 :)');
+ };
+
+ ns.validate_form = function(selector) {
+ if (!kivi.Validator) {
+ console.log('kivi.Validator is not loaded');
+ } else {
+ return kivi.Validator.validate_all(selector);
+ }
+ };
+
+ // 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;
+ };
+
+ ns.switch_areainput_to_textarea = function(id) {
+ var $input = $('#' + id);
+ if (!$input.length)
+ return;
+
+ var $area = $('<textarea></textarea>');
+
+ $area.prop('rows', 3);
+ $area.prop('cols', $input.prop('size') || 40);
+ $area.prop('name', $input.prop('name'));
+ $area.prop('id', $input.prop('id'));
+ $area.val($input.val());
+
+ $input.parent().replaceWith($area);
+ $area.focus();
+ };