xref: /aosp_15_r20/external/ktfmt/website/index/index.js (revision 5be3f65c8cf0e6db0a7e312df5006e8e93cdf9ec)
1*5be3f65cSAndroid Build Coastguard Worker/**
2*5be3f65cSAndroid Build Coastguard Worker * Copyright (c) Meta Platforms, Inc. and affiliates.
3*5be3f65cSAndroid Build Coastguard Worker *
4*5be3f65cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*5be3f65cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*5be3f65cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*5be3f65cSAndroid Build Coastguard Worker *
8*5be3f65cSAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
9*5be3f65cSAndroid Build Coastguard Worker *
10*5be3f65cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*5be3f65cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*5be3f65cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5be3f65cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*5be3f65cSAndroid Build Coastguard Worker * limitations under the License.
15*5be3f65cSAndroid Build Coastguard Worker */
16*5be3f65cSAndroid Build Coastguard Worker
17*5be3f65cSAndroid Build Coastguard Worker/* Forked from https://microsoft.github.io/monaco-editor/ */
18*5be3f65cSAndroid Build Coastguard Worker
19*5be3f65cSAndroid Build Coastguard Worker"use strict";
20*5be3f65cSAndroid Build Coastguard Worker
21*5be3f65cSAndroid Build Coastguard Workervar editor = null;
22*5be3f65cSAndroid Build Coastguard Workervar style = "--kotlinlang-style";
23*5be3f65cSAndroid Build Coastguard Workervar columnLimit = 100;
24*5be3f65cSAndroid Build Coastguard Workervar options = null;
25*5be3f65cSAndroid Build Coastguard Worker
26*5be3f65cSAndroid Build Coastguard Workerrequire.config({ paths: { vs: "node_modules/monaco-editor/min/vs" } });
27*5be3f65cSAndroid Build Coastguard Worker
28*5be3f65cSAndroid Build Coastguard Worker$(document).ready(function () {
29*5be3f65cSAndroid Build Coastguard Worker  require(["vs/editor/editor.main"], function () {
30*5be3f65cSAndroid Build Coastguard Worker    editor = monaco.editor.create(document.getElementById("editor"), {
31*5be3f65cSAndroid Build Coastguard Worker      value: [
32*5be3f65cSAndroid Build Coastguard Worker        "/**",
33*5be3f65cSAndroid Build Coastguard Worker        " * Formats the given Javadoc comment, which must start with /** and end with */. The output will",
34*5be3f65cSAndroid Build Coastguard Worker        " * start and end with the same characters.",
35*5be3f65cSAndroid Build Coastguard Worker        " */",
36*5be3f65cSAndroid Build Coastguard Worker        "class Handler : RequestHandler<APIGatewayProxyRequestEvent, String> {",
37*5be3f65cSAndroid Build Coastguard Worker        "    override fun handleRequest(event: APIGatewayProxyRequestEvent, context: Context?): String {",
38*5be3f65cSAndroid Build Coastguard Worker        "        for ((i, item) in items.withIndex()) {",
39*5be3f65cSAndroid Build Coastguard Worker        "            if (needDot) {",
40*5be3f65cSAndroid Build Coastguard Worker        "                // fillMode is bla bla",
41*5be3f65cSAndroid Build Coastguard Worker        "                val fillMode =",
42*5be3f65cSAndroid Build Coastguard Worker        "                    if (unconsumedPrefixes.isNotEmpty() && i <= unconsumedPrefixes.peekFirst()) {",
43*5be3f65cSAndroid Build Coastguard Worker        "                        prefixFillMode /* bla bla */",
44*5be3f65cSAndroid Build Coastguard Worker        "                    } else {",
45*5be3f65cSAndroid Build Coastguard Worker        "                        Doc.FillMode.UNIFIED",
46*5be3f65cSAndroid Build Coastguard Worker        "                    }",
47*5be3f65cSAndroid Build Coastguard Worker        '                builder.breakOp(fillMode, "", ZERO, Optional.of(nameTag))',
48*5be3f65cSAndroid Build Coastguard Worker        "                builder.token((item as KtQualifiedExpression).operationSign.value)",
49*5be3f65cSAndroid Build Coastguard Worker        "            }",
50*5be3f65cSAndroid Build Coastguard Worker        "            emitSelectorUpToParenthesis(item)",
51*5be3f65cSAndroid Build Coastguard Worker        "            if (unconsumedPrefixes.isNotEmpty() && i == unconsumedPrefixes.peekFirst()) {",
52*5be3f65cSAndroid Build Coastguard Worker        "                builder.close()",
53*5be3f65cSAndroid Build Coastguard Worker        "                unconsumedPrefixes.removeFirst()",
54*5be3f65cSAndroid Build Coastguard Worker        "            }",
55*5be3f65cSAndroid Build Coastguard Worker        "            if (i == items.size - 1 && hasTrailingLambda) {",
56*5be3f65cSAndroid Build Coastguard Worker        "                builder.close()",
57*5be3f65cSAndroid Build Coastguard Worker        "            }",
58*5be3f65cSAndroid Build Coastguard Worker        "            val argsIndent =",
59*5be3f65cSAndroid Build Coastguard Worker        "                Indent.If.make(",
60*5be3f65cSAndroid Build Coastguard Worker        "                    nameTag,",
61*5be3f65cSAndroid Build Coastguard Worker        "                    expressionBreakIndent,",
62*5be3f65cSAndroid Build Coastguard Worker        "                    if (trailingDereferences) expressionBreakIndent else ZERO",
63*5be3f65cSAndroid Build Coastguard Worker        "                )",
64*5be3f65cSAndroid Build Coastguard Worker        "        }",
65*5be3f65cSAndroid Build Coastguard Worker        "    }",
66*5be3f65cSAndroid Build Coastguard Worker        "}",
67*5be3f65cSAndroid Build Coastguard Worker      ].join("\n"),
68*5be3f65cSAndroid Build Coastguard Worker      language: "kotlin",
69*5be3f65cSAndroid Build Coastguard Worker      rulers: [columnLimit],
70*5be3f65cSAndroid Build Coastguard Worker      scrollBeyondLastLine: false,
71*5be3f65cSAndroid Build Coastguard Worker    });
72*5be3f65cSAndroid Build Coastguard Worker  });
73*5be3f65cSAndroid Build Coastguard Worker  options = editor.getOptions();
74*5be3f65cSAndroid Build Coastguard Worker  window.onresize = function () {
75*5be3f65cSAndroid Build Coastguard Worker    editor.layout();
76*5be3f65cSAndroid Build Coastguard Worker  };
77*5be3f65cSAndroid Build Coastguard Worker
78*5be3f65cSAndroid Build Coastguard Worker  $(".style-picker").change(function () {
79*5be3f65cSAndroid Build Coastguard Worker    changeStyle(this.selectedIndex);
80*5be3f65cSAndroid Build Coastguard Worker  });
81*5be3f65cSAndroid Build Coastguard Worker
82*5be3f65cSAndroid Build Coastguard Worker  $(".column-limit-picker").change(function () {
83*5be3f65cSAndroid Build Coastguard Worker    columnLimit = parseInt(this.value);
84*5be3f65cSAndroid Build Coastguard Worker    editor.updateOptions({'rulers': [columnLimit]});
85*5be3f65cSAndroid Build Coastguard Worker    reformatEditor();
86*5be3f65cSAndroid Build Coastguard Worker  });
87*5be3f65cSAndroid Build Coastguard Worker
88*5be3f65cSAndroid Build Coastguard Worker  $("#editorForm").submit(function (event) {
89*5be3f65cSAndroid Build Coastguard Worker    event.preventDefault();
90*5be3f65cSAndroid Build Coastguard Worker    reformatEditor();
91*5be3f65cSAndroid Build Coastguard Worker  });
92*5be3f65cSAndroid Build Coastguard Worker});
93*5be3f65cSAndroid Build Coastguard Worker
94*5be3f65cSAndroid Build Coastguard Workerfunction changeStyle(newStyle) {
95*5be3f65cSAndroid Build Coastguard Worker  style = newStyle === 0 ? "--kotlinlang-style" : undefined;
96*5be3f65cSAndroid Build Coastguard Worker  reformatEditor();
97*5be3f65cSAndroid Build Coastguard Worker}
98*5be3f65cSAndroid Build Coastguard Worker
99*5be3f65cSAndroid Build Coastguard Workerfunction reformatEditor() {
100*5be3f65cSAndroid Build Coastguard Worker    disableDemoUi();
101*5be3f65cSAndroid Build Coastguard Worker  $.ajax({
102*5be3f65cSAndroid Build Coastguard Worker    type: "POST",
103*5be3f65cSAndroid Build Coastguard Worker    url: "https://8uj6xa47qa.execute-api.us-east-2.amazonaws.com/ktfmt",
104*5be3f65cSAndroid Build Coastguard Worker    contentType: "application/json",
105*5be3f65cSAndroid Build Coastguard Worker    data: JSON.stringify({
106*5be3f65cSAndroid Build Coastguard Worker      source: editor.getValue(),
107*5be3f65cSAndroid Build Coastguard Worker      maxWidth: columnLimit,
108*5be3f65cSAndroid Build Coastguard Worker      style: style,
109*5be3f65cSAndroid Build Coastguard Worker    }),
110*5be3f65cSAndroid Build Coastguard Worker    dataType: "json",
111*5be3f65cSAndroid Build Coastguard Worker    error: function (xhr, errorType, errorThrown) {
112*5be3f65cSAndroid Build Coastguard Worker      showError(errorThrown);
113*5be3f65cSAndroid Build Coastguard Worker    },
114*5be3f65cSAndroid Build Coastguard Worker  })
115*5be3f65cSAndroid Build Coastguard Worker    .done(function (data) {
116*5be3f65cSAndroid Build Coastguard Worker      if (data.err) {
117*5be3f65cSAndroid Build Coastguard Worker        showError(data.err);
118*5be3f65cSAndroid Build Coastguard Worker      } else {
119*5be3f65cSAndroid Build Coastguard Worker        $("#error-message").hide();
120*5be3f65cSAndroid Build Coastguard Worker        editor.setValue(data.source);
121*5be3f65cSAndroid Build Coastguard Worker      }
122*5be3f65cSAndroid Build Coastguard Worker    })
123*5be3f65cSAndroid Build Coastguard Worker    .always(function () {
124*5be3f65cSAndroid Build Coastguard Worker        enableDemoUi();
125*5be3f65cSAndroid Build Coastguard Worker    });
126*5be3f65cSAndroid Build Coastguard Worker}
127*5be3f65cSAndroid Build Coastguard Worker
128*5be3f65cSAndroid Build Coastguard Workerfunction disableDemoUi() {
129*5be3f65cSAndroid Build Coastguard Worker    $('.loading.editor').show();
130*5be3f65cSAndroid Build Coastguard Worker    $("#editorForm :input").prop("disabled", true);
131*5be3f65cSAndroid Build Coastguard Worker    editor.updateOptions({ readOnly: true, language: 'text' });
132*5be3f65cSAndroid Build Coastguard Worker}
133*5be3f65cSAndroid Build Coastguard Worker
134*5be3f65cSAndroid Build Coastguard Workerfunction enableDemoUi() {
135*5be3f65cSAndroid Build Coastguard Worker    $("#editorForm :input").prop("disabled", false);
136*5be3f65cSAndroid Build Coastguard Worker    editor.updateOptions({ readOnly: false });
137*5be3f65cSAndroid Build Coastguard Worker    $('.loading.editor').fadeOut({ duration: 300 });
138*5be3f65cSAndroid Build Coastguard Worker}
139*5be3f65cSAndroid Build Coastguard Worker
140*5be3f65cSAndroid Build Coastguard Workerfunction showError(error) {
141*5be3f65cSAndroid Build Coastguard Worker  var errorMessage = $("#error-message");
142*5be3f65cSAndroid Build Coastguard Worker  errorMessage.text("Error: " + error);
143*5be3f65cSAndroid Build Coastguard Worker  errorMessage.show();
144*5be3f65cSAndroid Build Coastguard Worker}
145