(function (window, $) { var $command = $('#command'), $params = $('#paramsContainer'); App.prototype.init = function showConfig () { var app = this; $command = $('#command').val(''); $params = $('#paramsContainer'); $('#sendForm').submit(function (e) { var data = {}, params = $params.find('.param-input'); e.preventDefault(); e.stopPropagation(); data.q = $command.val(); if (!data.q) { $params.addClass('new-message'); return; } $params.removeClass('new-message'); params.each(function () { var param = $(this), val = param.val(), name = param.attr('name'); if (val !== '') { data.args = data.args || {}; data.args[name] = param.attr('type') === 'number' ? parseInt(val, 10) : val; } }); app.send('/cjdns', data, function (res) { //$command.val(''); //$param.val(''); }); }); this.getMethods(); }; App.prototype.getMethods = function getMethods () { var app = this, $methods = $('#methods'), paramTmpl = app.render([ '
'].join('')), paramTypes = { 'String': 'text', 'Int': 'number' }; app.send('/methods', function (resp) { var methods = resp.methods, methodsSelect = [], methodParams = {}; if (methods) { methodsSelect = methods.map(function (method, i) { var param, params = []; methodParams[method.name] = []; for (param in method.params) { if (method.params.hasOwnProperty(param)) { params.push('' + method.params[param].type + ' ' + param + (method.params[param].required == 1 ? ', required' : '')); methodParams[method.name].push({ name: param, type: method.params[param].type, required: method.params[param].required == 1 }); } } return { id: method.name, text: method.name, params: (params.join('
') || 'no params') }; }); } function format (item) { return [ '
', item.id, '
', '
', item.params, '
' ].join(''); } $command.select2({ data: methodsSelect, formatResult: format, formatSelection: format }).on('change', function (e) { var method = e.val, params = methodParams[method], paramsHtml = []; $params.removeClass('new-message'); $params.empty(); params.forEach(function (param) { paramsHtml.push(paramTmpl({ name: param.name, type: paramTypes[param.type] || 'text', paramtype: param.type, required: param.required ? '' : '', requiredClose: param.required ? '*' : '' })); }); paramsHtml = paramsHtml.length > 0 ? paramsHtml.join('') : 'No params accepted'; $params.html(paramsHtml); }).select2('enable', true); }); }; new App(); } (window, jQuery, App));