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