From 87cf188c642fb6c482b25a75700c6ce0b5439a16 Mon Sep 17 00:00:00 2001 From: Mute Date: Tue, 12 Jul 2022 03:53:07 +0000 Subject: [PATCH] Update 'mbchc-local.user.js' hint needs more work, won't show at all for now --- mbchc-local.user.js | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/mbchc-local.user.js b/mbchc-local.user.js index 05a74b0..5bf7368 100644 --- a/mbchc-local.user.js +++ b/mbchc-local.user.js @@ -43,6 +43,7 @@ var bcModSdk=function(){"use strict";const o="1.0.2";function e(o){alert("Mod ER RE_LAST_WORD: /(^|\s)([^\s]*)$/, RGB_MUTE: "#6c2132", RGB_POLLY: "#81b1e7", + COMP_DIV_ID: "MBCHC_AUTOCOMPLETE_HINT", UTC_OFFSET: new Date().getTimezoneOffset() * 60 * 1000, HAND_PENETRATORS: ["Flogger", "Whip", "TennisRacket", "Gavel", "SmallVibratingWand", "LargeDildo", "Vibrator", "Hairbrush", "SmallDildo", "Baguette", "Spatula", "Broom"], HIDE_SPECIAL: ["Activity","Emoticon"], @@ -411,23 +412,35 @@ var bcModSdk=function(){"use strict";const o="1.0.2";function e(o){alert("Mod ER let action = mbchc.ensure(`invalid action (${verb} ${zone} ${target})`, () => actions.find(name => available.find(a => a.Name === name))) mbchc.run_activity(char, ag, action) } catch (x) { mbchc.report(x) } }, - complete: function(options) { + complete: function(options, space = true) { const chat = document.getElementById("InputChat") if (options.length < 1) { - // TODO: maybe signal no valid options? - return + setTimeout(() => {chat.style.outline = ""}, 100) + return(chat.style.outline = "solid red") } if (options.length > 1) { - // TODO - // autocomplete to common prefix - // better hint: replace existing or hide previous on new hint - // better hint: hide on input? - // better hint: increase density - this.inform(options.sort().map(s => `
${s}
`).join(""), 10000) - } else { - window.ElementValue("InputChat", chat.value.replace(this.RE_LAST_WORD, `$1${options[0]} `)) - window.ElementFocus("InputChat") + let width = Math.max(...options.map(o => o.length)) + let pref = null + for (let i = width; i > 0; i -= 1) { let test = options[0].slice(0, i); if (options.every(o => o.startsWith(test))) {pref = test; break} } + if (pref) this.complete([pref], false) + this.complete_hint(options) + } else window.ElementValue("InputChat", chat.value.replace(this.RE_LAST_WORD, `$1${options[0]}${space ? " " : ""}`)) + }, + complete_hint: function(options) { + // TODO increase text density + // TODO show the hint + // TODO hide the hint + let log = document.getElementById("TextAreaChatLog") + if (!log) return + let div = document.getElementById(this.COMP_DIV_ID) + if (!div) { + div = document.createElement("div") + div.id = this.COMP_DIV_ID + div.setAttribute('style', `background-color:${this.bg_colour()}`) } + let hint = options.sort().map(s => `
${s}
`).join("") + div.innerHTML = `
Available completions:
${hint}` +// log.appendChild(div) }, complete_target: function(token, me2 = true) { let locase = token.toLocaleLowerCase() @@ -462,7 +475,7 @@ var bcModSdk=function(){"use strict";const o="1.0.2";function e(o){alert("Mod ER complete_do: function(args, locase, cmdline) { const [mbchc, input, tokens] = window.MBCHC.complete_common(); // `this` is command object if (tokens.length < 1) return if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`])) - // FIXME filter only available actions + // now, we *could* run a filter to exclude impossible activities, but it isn't very useful, and also seems like a lot of CPU to iterate over every action on every zone of every char in the room if (tokens.length < 3) return(mbchc.complete(Object.keys(mbchc.DO_DATA.verbs).filter(c => c.startsWith(tokens[1])))) // complete verb let verb = tokens[1].toLocaleLowerCase() let ags = mbchc.DO_DATA.verbs[verb]