define(["jquery", "converse-templates"], function ($, templates) { "use strict"; var XFORM_TYPE_MAP = { 'text-private': 'password', 'text-single': 'textline', 'fixed': 'label', 'boolean': 'checkbox', 'hidden': 'hidden', 'jid-multi': 'textarea', 'list-single': 'dropdown', 'list-multi': 'dropdown' }; $.fn.hasScrollBar = function() { if (!$.contains(document, this.get(0))) { return false; } if(this.parent().height() < this.get(0).scrollHeight) { return true; } return false; }; $.fn.addHyperlinks = function () { if (this.length > 0) { this.each(function (i, obj) { var x = $(obj).html(); var list = x.match(/\b(https?:\/\/|www\.|https?:\/\/www\.)[^\s<]{2,200}\b/g ); if (list) { for (i=0; i"+ list[i] + "" ); } } $(obj).html(x); }); } return this; }; var utils = { // Translation machinery // --------------------- __: function (str) { // Translation factory if (this.i18n === undefined) { this.i18n = locales.en; } var t = this.i18n.translate(str); if (arguments.length>1) { return t.fetch.apply(t, [].slice.call(arguments,1)); } else { return t.fetch(); } }, ___: function (str) { /* XXX: This is part of a hack to get gettext to scan strings to be * translated. Strings we cannot send to the function above because * they require variable interpolation and we don't yet have the * variables at scan time. * * See actionInfoMessages */ return str; }, xForm2webForm: function (field) { /* Takes a field in XMPP XForm (XEP-004: Data Forms) format * and turns it into a HTML DOM field. * * Parameters: * (XMLElement) field - the field to convert */ var $field = $(field), options = [], j, $options, $values, value, values; if ($field.attr('type') == 'list-single' || $field.attr('type') == 'list-multi') { values = []; $values = $field.children('value'); for (j=0; j<$values.length; j++) { values.push($($values[j]).text()); } $options = $field.children('option'); for (j=0; j<$options.length; j++) { value = $($options[j]).find('value').text(); options.push(templates.select_option({ value: value, label: $($options[j]).attr('label'), selected: (values.indexOf(value) >= 0) })); } return templates.form_select({ name: $field.attr('var'), label: $field.attr('label'), options: options.join(''), multiple: ($field.attr('type') == 'list-multi') }); } else if ($field.attr('type') == 'fixed') { return $('

').text($field.find('value').text()); } else if ($field.attr('type') == 'jid-multi') { return templates.form_textarea({ name: $field.attr('var'), label: $field.attr('label') || '', value: $field.find('value').text() }); } else if ($field.attr('type') == 'boolean') { return templates.form_checkbox({ name: $field.attr('var'), type: XFORM_TYPE_MAP[$field.attr('type')], label: $field.attr('label') || '', checked: $field.find('value').text() === "1" && 'checked="1"' || '' }); } else { return templates.form_input({ name: $field.attr('var'), type: XFORM_TYPE_MAP[$field.attr('type')], label: $field.attr('label') || '', value: $field.find('value').text() }); } } }; return utils; });