!7 sclass ServerModuleSearch extends DynCalculatedList { transient S query; transient S dbID; void start { calculateWhenHidden = true; dbID = dm_requireModule("#1016872/SnippetsDB"); } JComponent visualize() { JComponent c = super.visualize(); onDoubleClickOrEnter(list, r { dm_hideModule() }); ret c; } void update { S s = unnullTrim(dm_getInterestingString()); if (neq(s, query)) { query = s; super.update(); if (nempty(query) && print("have results: ", nempty(results))) dm_placeModuleUnderAIBar(this); else dm_hideModule(); } } L calc() { if (empty(query)) ret emptyList(); // L L snippets = cast callOpt(dm_getModule(dbID), 'snippetsOfType, snippetType_dynModule()); ret scoredSearch(dm_getInterestingString(), map(snippets, func(fO snippet) -> S { fsI(getLong(snippet, 'id)) + " - " + get(snippet, 'title) }); } }