in lib/parameter_popup.dart [133:189]
void _showParameterPopup(String string, int methodOffset) {
final editorDiv = querySelector('#editpanel .CodeMirror') as DivElement;
final lineHeightStr =
editorDiv.getComputedStyle().getPropertyValue('line-height');
final lineHeight =
int.parse(lineHeightStr.substring(0, lineHeightStr.indexOf('px')));
// var charWidth = editorDiv.getComputedStyle().getPropertyValue('letter-spacing');
final charWidth = 8;
final methodPosition = editor.document.posFromIndex(methodOffset);
final cursorCoords = editor.getCursorCoords();
final methodCoords = editor.getCursorCoords(position: methodPosition);
final heightOfMethod = (methodCoords.y - lineHeight - 5).round();
DivElement parameterPopup;
if (parPopupActive) {
final parameterHint = querySelector('.parameter-hint')!;
parameterHint.innerHtml = string;
//update popup position
final newLeft = math
.max(
cursorCoords.x - (parameterHint.text!.length * charWidth / 2), 22)
.round();
parameterPopup = querySelector('.parameter-hints') as DivElement
..style.top = '${heightOfMethod}px';
final oldLeftString = parameterPopup.style.left;
final oldLeft =
int.parse(oldLeftString.substring(0, oldLeftString.indexOf('px')));
if ((newLeft - oldLeft).abs() > 50) {
parameterPopup.style.left = '${newLeft}px';
}
} else {
final parameterHint = SpanElement()
..innerHtml = string
..classes.add('parameter-hint');
final left = math
.max(
cursorCoords.x - (parameterHint.text!.length * charWidth / 2), 22)
.round();
parameterPopup = DivElement()
..classes.add('parameter-hints')
..style.left = '${left}px'
..style.top = '${heightOfMethod}px'
..style.maxWidth =
"${querySelector("#editpanel")!.getBoundingClientRect().width}px";
parameterPopup.append(parameterHint);
document.body!.append(parameterPopup);
}
final activeParameter = querySelector('.parameter-hints em');
if (activeParameter != null &&
activeParameter.previousElementSibling != null) {
parameterPopup.scrollLeft =
activeParameter.previousElementSibling!.offsetLeft;
}
}