void _showParameterPopup()

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;
    }
  }