/*
* decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from * DS102: Remove unnecessary code created because of implicit returns * Full docs: https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md */
//= require websocket.coffee $.extend(WSClient.prototype.actions, {
button(data) { const target = this.__parent.check_target(data); const class_name = data.inline ? 'inline-button' : 'full-button'; let left_icon = ""; if (!data.right_icon) { data.right_icon = data.icon; } if (data.left_icon) { if (`:${data.left_icon}:` in emojione.emojioneList) { left_icon = "<i class='label-icon-left'>" + this.__parent.parse_emoji(`:${data.left_icon}:`) + "</i>"; } else { left_icon = `<i class='fa fa-${data.left_icon} label-icon-left'></i>`; } } let right_icon = ""; if (data.right_icon) { if (`:${data.right_icon}:` in emojione.emojioneList) { left_icon = "<i class='label-icon-right'>" + this.__parent.parse_emoji(`:${data.right_icon}:`) + "</i>"; } else { right_icon = `<i class='fa fa-${data.right_icon} label-icon-right'></i>`; } } const element = $(`<a href='#' class='${class_name}'>${left_icon}${this.__parent.escape(data.label, data)}${right_icon}</a>`); element.click(() => { return this.__parent.send({ id:data.id, action:'callback', source:'button', original_msg:data }); }); return target.append(element); }, buttonbox(data) { const target = this.__parent.check_target(data); const element = target.find(`#console-${data.name}`); if (element.size() === 0) { return target.prepend(`<pre class='button-box' id='console-${data.name}'></pre>`); } else { return element.addClass('button-box'); } }, input(data) { let element; const target = this.__parent.check_target(data); if (data.multiline) { element = $(`<textarea placeholder='${data.label}' class='inline-text-input'></textarea>`); } else { const input_type = data.password ? 'password' : 'text'; element = $(`<input type='${input_type}' placeholder='${data.label}' class='inline-text-input'>`); } if (data.value) { element[0].value = data.value; } const accept = data => { this.__parent.send({ id:data.id, action:'callback', source:'input', text: element[0].value, original_msg:data }); if (data.once) { let replaceText = this.__parent.escape(`${element[0].value}\n`); if (data.keep_label) { replaceText = `${data.label}${replaceText}`; } element.replaceWith(replaceText); } if (data.history) { const history = element.data('history') || []; history.push(element[0].value); element.data('history', history); element.data('history-index', history.length); } if (data.autoclear) { return element[0].value = ""; } }; element.change(() => { if (!element.hasClass("unclicked") && !data.enter_only) { return accept(data); } }); const offset_history = (e, amt) => { const history = element.data('history') || []; const i = element.data('history-index') + amt; e.preventDefault(); if ((i >= 0) && (i < history.length)) { element[0].value = history[i]; return element.data('history-index', i); } }; element.keydown(e => { if ((e.which === 38) && data.history) { offset_history(e, -1); } if ((e.which === 40) && data.history) { offset_history(e, +1); } if ((e.which === 13) && data.enter_only) { return accept(data); } }); target.append(element); if (data.focus) { return element.focus(); } }, checkbox(data) { const target = this.__parent.check_target(data); const element = $(`<label class='inline-checkbox'><input type='checkbox'><span>${this.__parent.escape(data.label,data)}</span></label>'`); if (data.value) { element.find('input').attr("checked", true); element.addClass("checked"); } element.change(e => { element.toggleClass("checked", element.find('input').prop('checked')); return this.__parent.send({ id:data.id, action:'callback', source:'input', checked: element.find('input').prop('checked'), original_msg:data }); }); element.click(e => { if (e.shiftKey && this.__lastChecked) { const all_boxes = $('.inline-checkbox'); const start = all_boxes.index(this.__lastChecked); const stop = all_boxes.index(element); all_boxes.slice(Math.min(start, stop), Math.max(start, stop) + 1).find('input').prop("checked", this.__lastChecked.find('input').prop("checked")); return all_boxes.change(); } else { return this.__lastChecked = element; } }); return target.append(element); }, dropdown(data) { const target = this.__parent.check_target(data); const element = $(`<select class='inline-dropdown' name='${data.id}'></select>`); if (data.options instanceof Array) { for (var item of Array.from(data.options)) { element.append($(`<option>${item}</option>`)); } } else { for (var k in data.options) { var v = data.options[k]; var option = $(`<option>${k}</option>`); option.val(JSON.stringify(v)); element.append(option); } } if (data.value) { element.val(data.value); } element.change(e => { let val = element.find('option:selected').text(); if (element.find('option:selected')[0].value) { try { val = $.parseJSON(element.find('option:selected')[0].value); } catch (error) { val = element.find('option:selected')[0].value; } } return this.__parent.send({ id:data.id, action:'callback', source:'dropdown', value: val, text: element.find('option:selected').text() }); }); return this.__parent.add(element, target, data); }
} );