@elice/material-exercise 1.230328.0 โ 1.230418.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/_virtual/_rollupPluginBabelHelpers.js +526 -0
- package/cjs/components/material-exercise/MaterialExercise.js +44 -63
- package/cjs/components/material-exercise/MaterialExercise.styled.js +20 -23
- package/cjs/components/material-exercise/MaterialExerciseMobile.js +19 -15
- package/cjs/components/material-exercise/context/ExerciseIntlProvider.js +9 -13
- package/cjs/components/material-exercise/context/ExerciseProvider.js +83 -81
- package/cjs/components/material-exercise/context/ExerciseProviderNoImage.js +16 -16
- package/cjs/components/material-exercise/context/context.js +1 -1
- package/cjs/components/material-exercise/context/locales/noImage.en.json.js +3 -1
- package/cjs/components/material-exercise/context/locales/noImage.ko.json.js +3 -1
- package/cjs/components/material-exercise/context/recoil.js +559 -371
- package/cjs/components/material-exercise/context/recoilTypes.js +0 -5
- package/cjs/components/material-exercise/context/subjects.js +3 -6
- package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.d.ts +2 -2
- package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +78 -65
- package/cjs/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -8
- package/cjs/components/material-exercise/exercise-code-history/locales/en.json.js +7 -0
- package/cjs/components/material-exercise/exercise-code-history/locales/ko.json.js +7 -0
- package/cjs/components/material-exercise/exercise-file/ExerciseFile.js +20 -21
- package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +225 -198
- package/cjs/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +8 -10
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +35 -32
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +57 -48
- package/cjs/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +6 -4
- package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-file-tabs/locales/fileTreeButton.ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +327 -231
- package/cjs/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +6 -4
- package/cjs/components/material-exercise/exercise-file-tree/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-file-tree/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +17 -17
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenu.js +13 -14
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +6 -6
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +47 -38
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +60 -42
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuReset.js +29 -22
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +45 -56
- package/cjs/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -12
- package/cjs/components/material-exercise/exercise-menu/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-menu/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +28 -20
- package/cjs/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +5 -3
- package/cjs/components/material-exercise/exercise-preview/ExercisePreview.js +30 -41
- package/cjs/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +17 -12
- package/cjs/components/material-exercise/exercise-preview/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-preview/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +24 -33
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +13 -8
- package/cjs/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +84 -83
- package/cjs/components/material-exercise/exercise-rightpane/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-rightpane/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-room/ExerciseRoom.js +20 -12
- package/cjs/components/material-exercise/exercise-room/ExerciseRoom.styled.js +14 -12
- package/cjs/components/material-exercise/exercise-room/ExerciseRoomDetail.js +239 -147
- package/cjs/components/material-exercise/exercise-room/ExerciseRoomList.js +92 -63
- package/cjs/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -8
- package/cjs/components/material-exercise/exercise-room/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-room/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunner.js +219 -220
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -1
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerController.js +13 -13
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +30 -26
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +26 -26
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +70 -95
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +27 -27
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +54 -60
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +5 -5
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +10 -13
- package/cjs/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +29 -26
- package/cjs/components/material-exercise/exercise-runner/locales/en.json.js +3 -1
- package/cjs/components/material-exercise/exercise-runner/locales/ko.json.js +3 -1
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.d.ts +2 -2
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +290 -180
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -8
- package/cjs/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +41 -45
- package/cjs/components/material-exercise/exercise-submit-history/locales/en.json.js +7 -0
- package/cjs/components/material-exercise/exercise-submit-history/locales/ko.json.js +7 -0
- package/cjs/components/shared/exercise-menu-button/ExerciseMenuButton.js +19 -17
- package/cjs/components/shared/exercise-shimmer/ExerciseFileShimmer.js +5 -4
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +15 -14
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +7 -6
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +17 -16
- package/cjs/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +18 -11
- package/cjs/components/shared/exercise-version-list/ExerciseVersionList.js +5 -4
- package/cjs/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -1
- package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.js +8 -7
- package/cjs/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +9 -5
- package/cjs/components/shared/file-icon/FileIcon.js +23 -23
- package/cjs/components/shared/file-tabs/FileTab.js +32 -43
- package/cjs/components/shared/file-tabs/FileTab.styled.js +26 -22
- package/cjs/components/shared/file-tabs/FileTabs.js +55 -49
- package/cjs/components/shared/file-tabs/FileTabs.styled.js +2 -2
- package/cjs/components/shared/file-tabs/util.js +29 -18
- package/cjs/components/shared/file-tree/FileTree.js +11 -11
- package/cjs/components/shared/file-tree/FileTreeConfig.js +24 -23
- package/cjs/components/shared/file-tree/FileTreeList.js +35 -41
- package/cjs/components/shared/file-tree/FileTreeListItemContent.js +75 -91
- package/cjs/components/shared/file-tree/FileTreeListItemContent.styled.js +29 -40
- package/cjs/components/shared/file-tree/FileTreeListItemContentInput.js +77 -101
- package/cjs/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -6
- package/cjs/components/shared/file-tree/FileTreeListItemContentMenu.js +51 -86
- package/cjs/components/shared/file-tree/FileTreeListItems.js +150 -153
- package/cjs/components/shared/file-tree/FileTreeListItems.styled.js +2 -2
- package/cjs/components/shared/file-tree/FileTreeToolbar.js +30 -41
- package/cjs/components/shared/file-tree/FileTreeToolbar.styled.js +1 -1
- package/cjs/components/shared/file-tree/context/FileTreeContext.js +91 -97
- package/cjs/components/shared/file-tree/locales/en.json.js +3 -1
- package/cjs/components/shared/file-tree/locales/ko.json.js +3 -1
- package/cjs/components/shared/file-tree/utils/fileTreeFiles.js +20 -22
- package/cjs/components/shared/file-tree/utils/fileTreeGenerator.js +193 -173
- package/cjs/components/shared/file-tree/utils/fileTreeInput.js +0 -1
- package/cjs/components/shared/file-tree/utils/fileTreeItem.js +1 -1
- package/cjs/components/shared/file-tree/utils/fileTreePath.js +5 -7
- package/cjs/components/shared/file-viewer/FileViewer.js +59 -60
- package/cjs/components/shared/file-viewer/FileViewerCsv.js +145 -101
- package/cjs/components/shared/file-viewer/FileViewerImage.js +7 -8
- package/cjs/components/shared/file-viewer/FileViewerIpynb.js +20 -14
- package/cjs/components/shared/file-viewer/FileViewerNonViewable.js +28 -34
- package/cjs/components/shared/file-viewer/FileViewerText.js +23 -16
- package/cjs/components/shared/file-viewer/locales/en.json.js +3 -1
- package/cjs/components/shared/file-viewer/locales/ko.json.js +3 -1
- package/cjs/components/shared/file-viewer/locales/nonViewable.en.json.js +3 -1
- package/cjs/components/shared/file-viewer/locales/nonViewable.ko.json.js +3 -1
- package/cjs/components/shared/material-modal/MaterialModal.js +10 -12
- package/cjs/components/shared/material-modal/MaterialModal.styled.js +5 -5
- package/cjs/components/shared/monaco-editor/MonacoEditor.js +123 -149
- package/cjs/components/shared/monaco-editor/MonacoEditorLazy.js +10 -8
- package/cjs/components/shared/monaco-editor/MonacoEditorMobile.js +49 -58
- package/cjs/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +78 -85
- package/cjs/components/shared/monaco-editor/constants/grammars/index.js +131 -52
- package/cjs/components/shared/monaco-editor/constants/monaco/preferences.js +5 -9
- package/cjs/components/shared/monaco-editor/constants/themes/index.js +80 -32
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -13
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -18
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -9
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +54 -72
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +14 -15
- package/cjs/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +8 -9
- package/cjs/components/shared/monaco-editor/editor-languages/css/formatter.js +36 -12
- package/cjs/components/shared/monaco-editor/editor-languages/css/index.js +5 -8
- package/cjs/components/shared/monaco-editor/editor-languages/html/formatter.js +36 -12
- package/cjs/components/shared/monaco-editor/editor-languages/html/index.js +3 -6
- package/cjs/components/shared/monaco-editor/editor-languages/index.js +3 -1
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -1
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/express.js +3 -2
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/propTypes.js +3 -2
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/dts/react.js +3 -2
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/formatter.js +36 -12
- package/cjs/components/shared/monaco-editor/editor-languages/typescript/index.js +18 -24
- package/cjs/components/shared/monaco-editor/hooks/useEditorOptions.js +12 -9
- package/cjs/components/shared/monaco-editor/locales/en.json.js +3 -1
- package/cjs/components/shared/monaco-editor/locales/ko.json.js +3 -1
- package/cjs/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +18 -28
- package/cjs/components/shared/monaco-editor/utils/emmet/emmet.js +0 -3
- package/cjs/components/shared/monaco-editor/utils/emmet/registerProvider.js +12 -8
- package/cjs/components/shared/monaco-editor/utils/grammar/index.js +70 -32
- package/cjs/components/shared/monaco-editor/utils/grammar/onigasm.js +25 -7
- package/cjs/components/shared/monaco-editor/utils/grammar/textmate.js +67 -43
- package/cjs/components/shared/monaco-editor/utils/monacoLanguage.js +9 -19
- package/cjs/components/shared/monaco-editor/utils/monacoPreference.js +6 -5
- package/cjs/components/shared/monaco-editor/utils/prettier/config.js +2 -3
- package/cjs/components/shared/monaco-editor/utils/prettier/index.js +30 -9
- package/cjs/components/shared/monaco-editor/utils/theme/convert.js +20 -26
- package/cjs/components/shared/monaco-editor/utils/theme/index.js +22 -5
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +77 -75
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +82 -93
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +125 -135
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +148 -160
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +104 -118
- package/cjs/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -2
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +1 -3
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -3
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +218 -329
- package/cjs/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -6
- package/cjs/components/shared/no-vnc/NoVnc.js +93 -90
- package/cjs/components/shared/no-vnc/NoVncLazy.js +7 -5
- package/cjs/components/shared/preview-container/PreviewContainer.js +7 -10
- package/cjs/components/shared/web-browser/WebBrowser.js +54 -59
- package/cjs/components/shared/xterm/Xterm.js +112 -105
- package/cjs/components/shared/xterm/XtermLazy.js +7 -5
- package/cjs/components/shared/xterm/locales/en.json.js +3 -1
- package/cjs/components/shared/xterm/locales/ko.json.js +3 -1
- package/cjs/constants/arduino.js +10 -10
- package/cjs/constants/shortcutKeyMap.js +5 -5
- package/cjs/constants/stylesheets.js +7 -10
- package/cjs/hooks/useArduino.js +327 -255
- package/cjs/hooks/useExerciseFile.js +24 -24
- package/cjs/hooks/useExericseShortcut.js +6 -5
- package/cjs/hooks/useMaterialExerciseFileUrl.js +54 -37
- package/cjs/hooks/useRunnerRoomWebSocket.js +58 -56
- package/cjs/hooks/useStdioTextConcator.js +18 -12
- package/cjs/hooks/useStdioWebSocket.js +41 -67
- package/cjs/hooks/useUsercodeEditWebSocket.js +230 -252
- package/cjs/hooks/useUsercodeHistory.js +121 -82
- package/cjs/index.js +4 -4
- package/cjs/utils/arduino.js +23 -25
- package/cjs/utils/exerciseFile.js +8 -16
- package/cjs/utils/runner.js +29 -25
- package/es/_virtual/_rollupPluginBabelHelpers.js +504 -0
- package/es/components/material-exercise/MaterialExercise.js +33 -54
- package/es/components/material-exercise/MaterialExercise.styled.js +20 -23
- package/es/components/material-exercise/MaterialExerciseMobile.js +15 -13
- package/es/components/material-exercise/context/ExerciseIntlProvider.js +9 -13
- package/es/components/material-exercise/context/ExerciseProvider.js +79 -79
- package/es/components/material-exercise/context/ExerciseProviderNoImage.js +11 -13
- package/es/components/material-exercise/context/context.js +1 -1
- package/es/components/material-exercise/context/recoil.js +560 -372
- package/es/components/material-exercise/context/recoilTypes.js +0 -5
- package/es/components/material-exercise/context/subjects.js +3 -6
- package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.d.ts +2 -2
- package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.js +73 -62
- package/es/components/material-exercise/exercise-code-history/ExerciseCodeHistory.styled.js +8 -8
- package/es/components/material-exercise/exercise-code-history/locales/en.json.js +3 -0
- package/es/components/material-exercise/exercise-code-history/locales/ko.json.js +3 -0
- package/es/components/material-exercise/exercise-file/ExerciseFile.js +15 -18
- package/es/components/material-exercise/exercise-file-editor/ExerciseFileEditor.js +218 -193
- package/es/components/material-exercise/exercise-file-editor/ExerciseFileReadOnlyBanner.js +5 -9
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabs.js +31 -28
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsFileTreeButton.js +52 -45
- package/es/components/material-exercise/exercise-file-tabs/ExerciseFileTabsLazy.js +1 -1
- package/es/components/material-exercise/exercise-file-tree/ExerciseFileTree.js +321 -225
- package/es/components/material-exercise/exercise-file-tree/ExerciseFileTreeLazy.js +1 -1
- package/es/components/material-exercise/exercise-file-viewer/ExerciseFileViewer.js +12 -14
- package/es/components/material-exercise/exercise-menu/ExerciseMenu.js +7 -10
- package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoAgentModalButton.js +3 -5
- package/es/components/material-exercise/exercise-menu/ExerciseMenuArduinoSettings.js +43 -36
- package/es/components/material-exercise/exercise-menu/ExerciseMenuDropdown.js +53 -37
- package/es/components/material-exercise/exercise-menu/ExerciseMenuReset.js +25 -20
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.js +41 -54
- package/es/components/material-exercise/exercise-menu/ExerciseMenuStdioFileBrowser.styled.js +12 -12
- package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdown.js +25 -19
- package/es/components/material-exercise/exercise-multilang-dropdown/ExerciseMultilangDropdownLazy.js +1 -1
- package/es/components/material-exercise/exercise-preview/ExercisePreview.js +21 -34
- package/es/components/material-exercise/exercise-preview/ExercisePreviewDisplayModeButton.js +13 -10
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpane.js +17 -28
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEditorPerference.js +9 -6
- package/es/components/material-exercise/exercise-rightpane/ExerciseRightpaneEnvironment.js +81 -82
- package/es/components/material-exercise/exercise-room/ExerciseRoom.js +13 -7
- package/es/components/material-exercise/exercise-room/ExerciseRoom.styled.js +14 -12
- package/es/components/material-exercise/exercise-room/ExerciseRoomDetail.js +236 -146
- package/es/components/material-exercise/exercise-room/ExerciseRoomList.js +90 -63
- package/es/components/material-exercise/exercise-room/helpers/exerciseRoomPermissionStringConvertor.js +2 -8
- package/es/components/material-exercise/exercise-runner/ExerciseRunner.js +212 -215
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerContext.js +1 -1
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerController.js +7 -9
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoAgentModal.js +27 -25
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerArduinoStatusMessage.js +22 -24
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerButtonGroup.js +66 -93
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerCodeHelpRequestButton.js +24 -26
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerRunningInfo.js +51 -59
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusIndicator.js +2 -4
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerStatusMessage.js +6 -11
- package/es/components/material-exercise/exercise-runner/ExerciseRunnerControllerTimer.js +26 -25
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.d.ts +2 -2
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.js +284 -174
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistory.styled.js +8 -8
- package/es/components/material-exercise/exercise-submit-history/ExerciseSubmitHistoryOutput.js +38 -44
- package/es/components/material-exercise/exercise-submit-history/locales/en.json.js +3 -0
- package/es/components/material-exercise/exercise-submit-history/locales/ko.json.js +3 -0
- package/es/components/shared/exercise-menu-button/ExerciseMenuButton.js +16 -16
- package/es/components/shared/exercise-shimmer/ExerciseFileShimmer.js +2 -3
- package/es/components/shared/exercise-shimmer/ExerciseFileTabShimmer.js +12 -13
- package/es/components/shared/exercise-shimmer/ExerciseFileTabsShimmer.js +2 -3
- package/es/components/shared/exercise-shimmer/ExerciseFileTreeListItemShimmer.js +14 -15
- package/es/components/shared/exercise-shimmer/ExerciseFileTreeListShimmer.js +15 -10
- package/es/components/shared/exercise-version-list/ExerciseVersionList.js +2 -3
- package/es/components/shared/exercise-version-list/ExerciseVersionList.styled.js +1 -1
- package/es/components/shared/exercise-version-list/ExerciseVersionListItem.js +5 -6
- package/es/components/shared/exercise-version-list/ExerciseVersionListItem.styled.js +9 -5
- package/es/components/shared/file-icon/FileIcon.js +20 -22
- package/es/components/shared/file-tabs/FileTab.js +28 -41
- package/es/components/shared/file-tabs/FileTab.styled.js +26 -22
- package/es/components/shared/file-tabs/FileTabs.js +52 -48
- package/es/components/shared/file-tabs/FileTabs.styled.js +2 -2
- package/es/components/shared/file-tabs/util.js +29 -18
- package/es/components/shared/file-tree/FileTree.js +3 -5
- package/es/components/shared/file-tree/FileTreeConfig.js +21 -22
- package/es/components/shared/file-tree/FileTreeList.js +31 -39
- package/es/components/shared/file-tree/FileTreeListItemContent.js +67 -85
- package/es/components/shared/file-tree/FileTreeListItemContent.styled.js +29 -40
- package/es/components/shared/file-tree/FileTreeListItemContentInput.js +74 -100
- package/es/components/shared/file-tree/FileTreeListItemContentInput.styled.js +6 -6
- package/es/components/shared/file-tree/FileTreeListItemContentMenu.js +48 -85
- package/es/components/shared/file-tree/FileTreeListItems.js +147 -152
- package/es/components/shared/file-tree/FileTreeListItems.styled.js +2 -2
- package/es/components/shared/file-tree/FileTreeToolbar.js +24 -37
- package/es/components/shared/file-tree/FileTreeToolbar.styled.js +1 -1
- package/es/components/shared/file-tree/context/FileTreeContext.js +91 -97
- package/es/components/shared/file-tree/utils/fileTreeFiles.js +20 -22
- package/es/components/shared/file-tree/utils/fileTreeGenerator.js +193 -173
- package/es/components/shared/file-tree/utils/fileTreeInput.js +0 -1
- package/es/components/shared/file-tree/utils/fileTreeItem.js +1 -1
- package/es/components/shared/file-tree/utils/fileTreePath.js +5 -7
- package/es/components/shared/file-viewer/FileViewer.js +52 -53
- package/es/components/shared/file-viewer/FileViewerCsv.js +141 -99
- package/es/components/shared/file-viewer/FileViewerImage.js +3 -6
- package/es/components/shared/file-viewer/FileViewerIpynb.js +16 -12
- package/es/components/shared/file-viewer/FileViewerNonViewable.js +22 -30
- package/es/components/shared/file-viewer/FileViewerText.js +18 -13
- package/es/components/shared/material-modal/MaterialModal.js +7 -11
- package/es/components/shared/material-modal/MaterialModal.styled.js +5 -5
- package/es/components/shared/monaco-editor/MonacoEditor.js +119 -147
- package/es/components/shared/monaco-editor/MonacoEditorLazy.js +6 -4
- package/es/components/shared/monaco-editor/MonacoEditorMobile.js +45 -56
- package/es/components/shared/monaco-editor/MonacoEditorPerferenceForm.js +73 -82
- package/es/components/shared/monaco-editor/constants/grammars/index.js +131 -52
- package/es/components/shared/monaco-editor/constants/monaco/preferences.js +5 -9
- package/es/components/shared/monaco-editor/constants/themes/index.js +80 -32
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventChange.js +10 -13
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventCursor.js +14 -18
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoEventScroll.js +8 -9
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoMarkers.js +54 -72
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoOptions.js +14 -15
- package/es/components/shared/monaco-editor/editor-hooks/useMonacoTheme.js +8 -9
- package/es/components/shared/monaco-editor/editor-languages/css/formatter.js +33 -11
- package/es/components/shared/monaco-editor/editor-languages/css/index.js +2 -5
- package/es/components/shared/monaco-editor/editor-languages/html/formatter.js +33 -11
- package/es/components/shared/monaco-editor/editor-languages/html/index.js +2 -5
- package/es/components/shared/monaco-editor/editor-languages/typescript/dts/_helper.js +1 -1
- package/es/components/shared/monaco-editor/editor-languages/typescript/dts/express.js +0 -1
- package/es/components/shared/monaco-editor/editor-languages/typescript/dts/propTypes.js +0 -1
- package/es/components/shared/monaco-editor/editor-languages/typescript/dts/react.js +0 -1
- package/es/components/shared/monaco-editor/editor-languages/typescript/formatter.js +33 -11
- package/es/components/shared/monaco-editor/editor-languages/typescript/index.js +10 -16
- package/es/components/shared/monaco-editor/hooks/useEditorOptions.js +12 -9
- package/es/components/shared/monaco-editor/utils/emmet/abbreviationActions.js +18 -28
- package/es/components/shared/monaco-editor/utils/emmet/emmet.js +0 -3
- package/es/components/shared/monaco-editor/utils/emmet/registerProvider.js +12 -8
- package/es/components/shared/monaco-editor/utils/grammar/index.js +67 -31
- package/es/components/shared/monaco-editor/utils/grammar/onigasm.js +25 -7
- package/es/components/shared/monaco-editor/utils/grammar/textmate.js +67 -43
- package/es/components/shared/monaco-editor/utils/monacoLanguage.js +9 -19
- package/es/components/shared/monaco-editor/utils/monacoPreference.js +6 -5
- package/es/components/shared/monaco-editor/utils/prettier/config.js +2 -3
- package/es/components/shared/monaco-editor/utils/prettier/index.js +27 -8
- package/es/components/shared/monaco-editor/utils/theme/convert.js +20 -26
- package/es/components/shared/monaco-editor/utils/theme/index.js +22 -5
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursor.js +77 -75
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorManager.js +82 -93
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteCursorWidget.js +125 -135
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelection.js +148 -160
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/RemoteSelectionManager.js +104 -118
- package/es/components/shared/monaco-editor/vendors/monaco-collab-ext/styles.js +2 -2
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/configCompat.js +1 -3
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/data.js +2 -3
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/emmetHelper.js +219 -330
- package/es/components/shared/monaco-editor/vendors/vscode-emmet-helper/utils.js +3 -6
- package/es/components/shared/no-vnc/NoVnc.js +89 -88
- package/es/components/shared/no-vnc/NoVncLazy.js +4 -2
- package/es/components/shared/preview-container/PreviewContainer.js +7 -10
- package/es/components/shared/web-browser/WebBrowser.js +49 -56
- package/es/components/shared/xterm/Xterm.js +107 -102
- package/es/components/shared/xterm/XtermLazy.js +4 -2
- package/es/constants/arduino.js +10 -10
- package/es/constants/shortcutKeyMap.js +3 -5
- package/es/constants/stylesheets.js +7 -10
- package/es/hooks/useArduino.js +327 -255
- package/es/hooks/useExerciseFile.js +24 -24
- package/es/hooks/useExericseShortcut.js +6 -5
- package/es/hooks/useMaterialExerciseFileUrl.js +55 -38
- package/es/hooks/useRunnerRoomWebSocket.js +58 -56
- package/es/hooks/useStdioTextConcator.js +18 -12
- package/es/hooks/useStdioWebSocket.js +41 -67
- package/es/hooks/useUsercodeEditWebSocket.js +230 -252
- package/es/hooks/useUsercodeHistory.js +122 -83
- package/es/utils/arduino.js +23 -25
- package/es/utils/exerciseFile.js +8 -16
- package/es/utils/runner.js +29 -25
- package/package.json +8 -8
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
|
|
5
6
|
var React = require('react');
|
|
6
7
|
var reactUse = require('react-use');
|
|
7
8
|
var apiClient = require('@elice/api-client');
|
|
@@ -20,86 +21,101 @@ var randomWords__default = /*#__PURE__*/_interopDefaultLegacy(randomWords);
|
|
|
20
21
|
|
|
21
22
|
//
|
|
22
23
|
//
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
//
|
|
25
|
+
var MAX_WRITE_FAIL_COUNT = 5;
|
|
25
26
|
/**
|
|
26
27
|
*
|
|
27
28
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
29
|
+
var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
|
|
30
|
+
var exerciseRoomId = _ref.exerciseRoomId,
|
|
31
|
+
filename = _ref.filename,
|
|
32
|
+
onInit = _ref.onInit,
|
|
33
|
+
onWriteNoti = _ref.onWriteNoti;
|
|
34
|
+
var _return = React.useRef({});
|
|
35
|
+
var _useMaterialConfig = materialSharedUtils.useMaterialConfig(),
|
|
36
|
+
apiWsOriginUrl = _useMaterialConfig.apiWsOriginUrl;
|
|
37
|
+
var isReady = materialSharedUtils.useMaterialConfigApiClientUpdate(apiClient.config.init);
|
|
38
|
+
var websocket$1 = React.useRef(null);
|
|
39
|
+
var _useState = React.useState(websocket.EliceWebSocket.CLOSED),
|
|
40
|
+
_useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
|
|
41
|
+
websocketReadyState = _useState2[0],
|
|
42
|
+
setWebSocketReadyState = _useState2[1];
|
|
43
|
+
var _useState3 = React.useState(''),
|
|
44
|
+
_useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
|
|
45
|
+
doc = _useState4[0],
|
|
46
|
+
setDoc = _useState4[1];
|
|
47
|
+
var _useState5 = React.useState(true),
|
|
48
|
+
_useState6 = _rollupPluginBabelHelpers.slicedToArray(_useState5, 2),
|
|
49
|
+
docEditable = _useState6[0],
|
|
50
|
+
setDocEditable = _useState6[1];
|
|
51
|
+
var _doc = React.useRef('');
|
|
52
|
+
var _useState7 = React.useState({}),
|
|
53
|
+
_useState8 = _rollupPluginBabelHelpers.slicedToArray(_useState7, 2),
|
|
54
|
+
clients = _useState8[0],
|
|
55
|
+
setClients = _useState8[1];
|
|
56
|
+
var _useState9 = React.useState({}),
|
|
57
|
+
_useState10 = _rollupPluginBabelHelpers.slicedToArray(_useState9, 2),
|
|
58
|
+
cursors = _useState10[0],
|
|
59
|
+
setCursors = _useState10[1];
|
|
60
|
+
var myself = React.useRef(null);
|
|
61
|
+
var version = React.useRef(-1);
|
|
62
|
+
var otsBuffer = React.useRef([]);
|
|
63
|
+
var writeIndex = React.useRef(0);
|
|
64
|
+
var writeFailCount = React.useRef(0);
|
|
65
|
+
var _useState11 = React.useState(0),
|
|
66
|
+
_useState12 = _rollupPluginBabelHelpers.slicedToArray(_useState11, 2),
|
|
67
|
+
_monkeyAgent = _useState12[0],
|
|
68
|
+
_setMonkeyAgent = _useState12[1];
|
|
69
|
+
var _useState13 = React.useState(0),
|
|
70
|
+
_useState14 = _rollupPluginBabelHelpers.slicedToArray(_useState13, 2),
|
|
71
|
+
_numMonkeyJumped = _useState14[0],
|
|
72
|
+
setNumMonkeyJumped = _useState14[1];
|
|
73
|
+
//
|
|
57
74
|
// =============== clients and markers ===============
|
|
58
75
|
//
|
|
59
|
-
|
|
60
76
|
/**
|
|
61
77
|
* Markers.
|
|
62
78
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
var markers = React.useMemo(function () {
|
|
80
|
+
return Object.entries(cursors).filter(function (_ref2) {
|
|
81
|
+
var _ref3 = _rollupPluginBabelHelpers.slicedToArray(_ref2, 1),
|
|
82
|
+
userAccesskey = _ref3[0];
|
|
83
|
+
return Boolean(clients[userAccesskey]);
|
|
84
|
+
}).map(function (_ref4) {
|
|
85
|
+
var _ref5 = _rollupPluginBabelHelpers.slicedToArray(_ref4, 2),
|
|
86
|
+
userAccesskey = _ref5[0],
|
|
87
|
+
cursor = _ref5[1];
|
|
88
|
+
var client = clients[userAccesskey];
|
|
89
|
+
return Object.assign(Object.assign(Object.assign({}, client), cursor), {
|
|
90
|
+
fullname: client.fullname || "User ".concat(client.id),
|
|
91
|
+
email: client.email || 'none'
|
|
92
|
+
});
|
|
69
93
|
});
|
|
70
|
-
}
|
|
94
|
+
}, [clients, cursors]);
|
|
71
95
|
/**
|
|
72
96
|
* Update client to list.
|
|
73
97
|
*/
|
|
74
|
-
|
|
75
|
-
const updateClient = (userAccesskey, userId) => {
|
|
98
|
+
var updateClient = function updateClient(userAccesskey, userId) {
|
|
76
99
|
var _a;
|
|
77
|
-
|
|
78
100
|
if (userAccesskey === ((_a = myself.current) === null || _a === void 0 ? void 0 : _a.accesskey)) {
|
|
79
101
|
return;
|
|
80
102
|
}
|
|
81
|
-
|
|
82
|
-
setClients(prev => {
|
|
103
|
+
setClients(function (prev) {
|
|
83
104
|
if (prev[userAccesskey]) {
|
|
84
105
|
return prev;
|
|
85
106
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
accesskey: userAccesskey
|
|
91
|
-
}
|
|
92
|
-
});
|
|
107
|
+
return Object.assign(Object.assign({}, prev), _rollupPluginBabelHelpers.defineProperty({}, userAccesskey, {
|
|
108
|
+
id: userId,
|
|
109
|
+
accesskey: userAccesskey
|
|
110
|
+
}));
|
|
93
111
|
});
|
|
94
112
|
};
|
|
95
113
|
/**
|
|
96
114
|
* Remove client from list.
|
|
97
115
|
*/
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
setClients(prev => {
|
|
102
|
-
const next = Object.assign({}, prev);
|
|
116
|
+
var removeClient = function removeClient(userAccesskey) {
|
|
117
|
+
setClients(function (prev) {
|
|
118
|
+
var next = Object.assign({}, prev);
|
|
103
119
|
delete next[userAccesskey];
|
|
104
120
|
return next;
|
|
105
121
|
});
|
|
@@ -107,75 +123,87 @@ const useUsercodeEditWebSocket = ({
|
|
|
107
123
|
/**
|
|
108
124
|
*
|
|
109
125
|
*/
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const updateCursor = (userAccesskey, cursor) => {
|
|
126
|
+
var updateCursor = function updateCursor(userAccesskey, cursor) {
|
|
113
127
|
var _a;
|
|
114
|
-
|
|
115
128
|
if (userAccesskey === ((_a = myself.current) === null || _a === void 0 ? void 0 : _a.accesskey)) {
|
|
116
129
|
return;
|
|
117
130
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}));
|
|
131
|
+
setCursors(function (prev) {
|
|
132
|
+
return Object.assign(Object.assign({}, prev), _rollupPluginBabelHelpers.defineProperty({}, userAccesskey, cursor));
|
|
133
|
+
});
|
|
122
134
|
};
|
|
123
135
|
/**
|
|
124
136
|
*
|
|
125
137
|
*/
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
var updateCursorFromOts = function updateCursorFromOts(ots) {
|
|
139
|
+
setCursors(Object.entries(cursors).map(function (_ref6) {
|
|
140
|
+
var _ref7 = _rollupPluginBabelHelpers.slicedToArray(_ref6, 2),
|
|
141
|
+
userAccesskey = _ref7[0],
|
|
142
|
+
cursor = _ref7[1];
|
|
143
|
+
return _rollupPluginBabelHelpers.defineProperty({}, userAccesskey, {
|
|
131
144
|
from: otTextUnicode.type.transformSelection(cursor.from, ots),
|
|
132
145
|
to: otTextUnicode.type.transformSelection(cursor.to, ots)
|
|
133
|
-
}
|
|
134
|
-
})
|
|
146
|
+
});
|
|
147
|
+
}).reduce(function (prev, next) {
|
|
148
|
+
return Object.assign(Object.assign({}, prev), next);
|
|
149
|
+
}, {}));
|
|
135
150
|
};
|
|
136
151
|
/**
|
|
137
152
|
*
|
|
138
153
|
*/
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
setCursors(prev => {
|
|
143
|
-
const next = Object.assign({}, prev);
|
|
154
|
+
var removeCursor = function removeCursor(userAccesskey) {
|
|
155
|
+
setCursors(function (prev) {
|
|
156
|
+
var next = Object.assign({}, prev);
|
|
144
157
|
delete next[userAccesskey];
|
|
145
158
|
return next;
|
|
146
159
|
});
|
|
147
|
-
};
|
|
160
|
+
};
|
|
161
|
+
//
|
|
148
162
|
// Fetch client user info, whenever client list changed.
|
|
149
163
|
//
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
reactUse.useDeepCompareEffect(function () {
|
|
165
|
+
void Promise.all(Object.entries(Object.assign({}, clients))
|
|
166
|
+
// only user info not fetched...
|
|
167
|
+
.filter(function (_ref9) {
|
|
168
|
+
var _ref10 = _rollupPluginBabelHelpers.slicedToArray(_ref9, 2),
|
|
169
|
+
client = _ref10[1];
|
|
170
|
+
return !client.fullname;
|
|
171
|
+
}).map(function (_ref11) {
|
|
172
|
+
var _ref12 = _rollupPluginBabelHelpers.slicedToArray(_ref11, 2),
|
|
173
|
+
userAccesskey = _ref12[0],
|
|
174
|
+
client = _ref12[1];
|
|
175
|
+
return apiClient.getOrgUserGet({
|
|
176
|
+
userId: client.id
|
|
177
|
+
}).then(function (res) {
|
|
178
|
+
return res.user;
|
|
179
|
+
}).then(function (user) {
|
|
180
|
+
return _rollupPluginBabelHelpers.defineProperty({}, userAccesskey, Object.assign(Object.assign({}, client), {
|
|
181
|
+
fullname: user.fullname,
|
|
182
|
+
email: user.displayEmail
|
|
183
|
+
}));
|
|
184
|
+
}).catch(function () {
|
|
185
|
+
return _rollupPluginBabelHelpers.defineProperty({}, userAccesskey, Object.assign(Object.assign({}, client), {
|
|
186
|
+
fullname: "User ".concat(client.id)
|
|
187
|
+
}));
|
|
188
|
+
});
|
|
189
|
+
})).then(function (nextClientArr) {
|
|
190
|
+
return nextClientArr.reduce(function (nextClients, client) {
|
|
191
|
+
return Object.assign(Object.assign({}, nextClients), client);
|
|
192
|
+
}, {});
|
|
193
|
+
}).then(function (nextClients) {
|
|
194
|
+
setClients(function (prev) {
|
|
195
|
+
return Object.assign(Object.assign({}, prev), nextClients);
|
|
196
|
+
});
|
|
167
197
|
});
|
|
168
|
-
}, [clients]);
|
|
198
|
+
}, [clients]);
|
|
199
|
+
//
|
|
169
200
|
// =============== send message ===============
|
|
170
201
|
//
|
|
171
|
-
|
|
172
202
|
/**
|
|
173
203
|
* Send `RESET`.
|
|
174
204
|
*/
|
|
175
|
-
|
|
176
|
-
const sendReset = () => {
|
|
205
|
+
var sendReset = function sendReset() {
|
|
177
206
|
var _a;
|
|
178
|
-
|
|
179
207
|
(_a = websocket$1.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
180
208
|
type: 'RESET'
|
|
181
209
|
});
|
|
@@ -183,11 +211,8 @@ const useUsercodeEditWebSocket = ({
|
|
|
183
211
|
/**
|
|
184
212
|
* Send `FETCH`.
|
|
185
213
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const sendFetch = React.useCallback(debounce__default["default"](() => {
|
|
214
|
+
var sendFetch = React.useCallback(debounce__default["default"](function () {
|
|
189
215
|
var _a;
|
|
190
|
-
|
|
191
216
|
(_a = websocket$1.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
192
217
|
type: 'FETCH',
|
|
193
218
|
from: version.current
|
|
@@ -196,21 +221,16 @@ const useUsercodeEditWebSocket = ({
|
|
|
196
221
|
/**
|
|
197
222
|
* Send `WRITE`.
|
|
198
223
|
*/
|
|
199
|
-
|
|
200
|
-
const sendWrite = React.useCallback(debounce__default["default"](() => {
|
|
224
|
+
var sendWrite = React.useCallback(debounce__default["default"](function () {
|
|
201
225
|
var _a;
|
|
202
|
-
|
|
203
226
|
if (otsBuffer.current.length === 0 || writeIndex.current !== 0) {
|
|
204
227
|
return;
|
|
205
228
|
}
|
|
206
|
-
|
|
207
229
|
writeIndex.current = otsBuffer.current.length;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
for (let i = 1; i < writeIndex.current; i++) {
|
|
230
|
+
var ots = otsBuffer.current[0];
|
|
231
|
+
for (var i = 1; i < writeIndex.current; i++) {
|
|
211
232
|
ots = otTextUnicode.type.compose(ots, otsBuffer.current[i]);
|
|
212
233
|
}
|
|
213
|
-
|
|
214
234
|
(_a = websocket$1.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
215
235
|
type: 'WRITE',
|
|
216
236
|
to: version.current + 1,
|
|
@@ -220,13 +240,10 @@ const useUsercodeEditWebSocket = ({
|
|
|
220
240
|
/**
|
|
221
241
|
* Send `CURSOR`.
|
|
222
242
|
*/
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
to
|
|
227
|
-
}) => {
|
|
243
|
+
var sendCursor = React.useCallback(debounce__default["default"](function (_ref15) {
|
|
244
|
+
var from = _ref15.from,
|
|
245
|
+
to = _ref15.to;
|
|
228
246
|
var _a;
|
|
229
|
-
|
|
230
247
|
(_a = websocket$1.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
231
248
|
type: 'CURSOR',
|
|
232
249
|
cursor_start: from,
|
|
@@ -236,55 +253,46 @@ const useUsercodeEditWebSocket = ({
|
|
|
236
253
|
/**
|
|
237
254
|
* Send OTs.
|
|
238
255
|
*/
|
|
239
|
-
|
|
240
|
-
const sendOTs = React.useCallback(ots => {
|
|
256
|
+
var sendOTs = React.useCallback(function (ots) {
|
|
241
257
|
setDoc(otTextUnicode.type.apply(_doc.current, ots));
|
|
242
258
|
_doc.current = otTextUnicode.type.apply(_doc.current, ots);
|
|
243
259
|
otsBuffer.current.push(ots);
|
|
244
260
|
sendWrite();
|
|
245
|
-
}, [sendWrite]);
|
|
261
|
+
}, [sendWrite]);
|
|
262
|
+
//
|
|
246
263
|
// =============== usercode ===============
|
|
247
264
|
//
|
|
248
|
-
|
|
249
265
|
/**
|
|
250
266
|
*
|
|
251
267
|
*/
|
|
252
|
-
|
|
253
|
-
const usercodeApply = (newVersion, ots) => {
|
|
268
|
+
var usercodeApply = function usercodeApply(newVersion, ots) {
|
|
254
269
|
version.current = newVersion;
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
for (let i = 0; i < otsBuffer.current.length; i++) {
|
|
270
|
+
var conflictOts = [];
|
|
271
|
+
for (var i = 0; i < otsBuffer.current.length; i++) {
|
|
258
272
|
conflictOts = otTextUnicode.type.compose(conflictOts, otsBuffer.current[i]);
|
|
259
273
|
}
|
|
260
|
-
|
|
261
|
-
const localOts = conflictOts.length > 0 ? otTextUnicode.type.transform(ots, conflictOts, 'left') : ots;
|
|
274
|
+
var localOts = conflictOts.length > 0 ? otTextUnicode.type.transform(ots, conflictOts, 'left') : ots;
|
|
262
275
|
onWriteNoti(localOts, false);
|
|
263
276
|
setDoc(otTextUnicode.type.apply(_doc.current, localOts));
|
|
264
277
|
_doc.current = otTextUnicode.type.apply(_doc.current, localOts);
|
|
265
|
-
|
|
266
278
|
if (conflictOts.length > 0) {
|
|
267
279
|
// update ots buffer
|
|
268
|
-
for (
|
|
269
|
-
otsBuffer.current[
|
|
280
|
+
for (var _i = 0; _i < otsBuffer.current.length - 1; _i++) {
|
|
281
|
+
otsBuffer.current[_i] = [];
|
|
270
282
|
}
|
|
271
|
-
|
|
272
283
|
otsBuffer.current[otsBuffer.current.length - 1] = otTextUnicode.type.transform(conflictOts, ots, 'right');
|
|
273
284
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
285
|
+
sendWrite();
|
|
286
|
+
// update display cursors
|
|
277
287
|
updateCursorFromOts(ots);
|
|
278
|
-
};
|
|
288
|
+
};
|
|
289
|
+
//
|
|
279
290
|
// =============== websocket ===============
|
|
280
291
|
//
|
|
281
|
-
|
|
282
292
|
/**
|
|
283
293
|
* Websocket on open.
|
|
284
294
|
*/
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
const wsOpen = () => {
|
|
295
|
+
var wsOpen = function wsOpen() {
|
|
288
296
|
if (websocket$1.current) {
|
|
289
297
|
setWebSocketReadyState(websocket$1.current.readyState);
|
|
290
298
|
}
|
|
@@ -292,11 +300,8 @@ const useUsercodeEditWebSocket = ({
|
|
|
292
300
|
/**
|
|
293
301
|
* Websocket on close.
|
|
294
302
|
*/
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
const wsClose = () => {
|
|
303
|
+
var wsClose = function wsClose() {
|
|
298
304
|
_stopMonkey();
|
|
299
|
-
|
|
300
305
|
if (websocket$1.current) {
|
|
301
306
|
setWebSocketReadyState(websocket$1.current.readyState);
|
|
302
307
|
}
|
|
@@ -304,9 +309,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
304
309
|
/**
|
|
305
310
|
* Websocket on error.
|
|
306
311
|
*/
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
const wsError = () => {
|
|
312
|
+
var wsError = function wsError() {
|
|
310
313
|
if (websocket$1.current) {
|
|
311
314
|
setWebSocketReadyState(websocket$1.current.readyState);
|
|
312
315
|
}
|
|
@@ -314,40 +317,30 @@ const useUsercodeEditWebSocket = ({
|
|
|
314
317
|
/**
|
|
315
318
|
* Websocket on message.
|
|
316
319
|
*/
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
const wsMessage = e => {
|
|
320
|
-
const msg = humps.camelizeKeys(e.data);
|
|
321
|
-
|
|
320
|
+
var wsMessage = function wsMessage(e) {
|
|
321
|
+
var msg = humps.camelizeKeys(e.data);
|
|
322
322
|
switch (msg.type) {
|
|
323
323
|
case 'INIT':
|
|
324
324
|
wsMessageInit(msg);
|
|
325
325
|
break;
|
|
326
|
-
|
|
327
326
|
case 'ENTER':
|
|
328
327
|
wsMessageEnter(msg);
|
|
329
328
|
break;
|
|
330
|
-
|
|
331
329
|
case 'LEAVE':
|
|
332
330
|
wsMessageLeave(msg);
|
|
333
331
|
break;
|
|
334
|
-
|
|
335
332
|
case 'UPDATE':
|
|
336
333
|
wsMessageUpdate(msg);
|
|
337
334
|
break;
|
|
338
|
-
|
|
339
335
|
case 'WRITE_FAILED':
|
|
340
336
|
wsMessageWriteFailed();
|
|
341
337
|
break;
|
|
342
|
-
|
|
343
338
|
case 'WRITE_SUCCEED':
|
|
344
339
|
wsMessageWriteSucceed(msg);
|
|
345
340
|
break;
|
|
346
|
-
|
|
347
341
|
case 'WRITE_NOTI':
|
|
348
342
|
wsMessageWriteNoti(msg);
|
|
349
343
|
break;
|
|
350
|
-
|
|
351
344
|
case 'CURSOR_NOTI':
|
|
352
345
|
wsMessageCursorNoti(msg);
|
|
353
346
|
break;
|
|
@@ -356,9 +349,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
356
349
|
/**
|
|
357
350
|
* Websocket on `INIT` message.
|
|
358
351
|
*/
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
const wsMessageInit = msg => {
|
|
352
|
+
var wsMessageInit = function wsMessageInit(msg) {
|
|
362
353
|
setDocEditable(true);
|
|
363
354
|
myself.current = {
|
|
364
355
|
userId: msg.userId,
|
|
@@ -367,14 +358,13 @@ const useUsercodeEditWebSocket = ({
|
|
|
367
358
|
version.current = msg.version;
|
|
368
359
|
otsBuffer.current = [];
|
|
369
360
|
writeIndex.current = 0;
|
|
370
|
-
writeFailCount.current = 0;
|
|
361
|
+
writeFailCount.current = 0;
|
|
362
|
+
// TODO: set unix mode on both editors.
|
|
371
363
|
// editor.getSession().getDocument().setNewLineMode('unix');
|
|
372
|
-
|
|
373
|
-
const convertedContent = msg.content.replace(/\r\n/g, '\n');
|
|
364
|
+
var convertedContent = msg.content.replace(/\r\n/g, '\n');
|
|
374
365
|
setDoc(convertedContent);
|
|
375
366
|
_doc.current = convertedContent;
|
|
376
367
|
onInit(convertedContent);
|
|
377
|
-
|
|
378
368
|
if (msg.content !== convertedContent) {
|
|
379
369
|
otsBuffer.current.push([{
|
|
380
370
|
d: msg.content
|
|
@@ -386,28 +376,25 @@ const useUsercodeEditWebSocket = ({
|
|
|
386
376
|
/**
|
|
387
377
|
* Websocket on `ENTER` message.
|
|
388
378
|
*/
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
379
|
+
var wsMessageEnter = function wsMessageEnter(msg) {
|
|
380
|
+
var _msg$client = _rollupPluginBabelHelpers.slicedToArray(msg.client, 2),
|
|
381
|
+
userId = _msg$client[0],
|
|
382
|
+
userAccesskey = _msg$client[1];
|
|
393
383
|
updateClient(userAccesskey, userId);
|
|
394
384
|
};
|
|
395
385
|
/**
|
|
396
386
|
* Websocket on `LEAVE` message.
|
|
397
387
|
*/
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
const [, userAccesskey] = msg.client;
|
|
388
|
+
var wsMessageLeave = function wsMessageLeave(msg) {
|
|
389
|
+
var _msg$client2 = _rollupPluginBabelHelpers.slicedToArray(msg.client, 2),
|
|
390
|
+
userAccesskey = _msg$client2[1];
|
|
402
391
|
removeClient(userAccesskey);
|
|
403
392
|
removeCursor(userAccesskey);
|
|
404
393
|
};
|
|
405
394
|
/**
|
|
406
395
|
* Websocket on `UPDATE` message.
|
|
407
396
|
*/
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
const wsMessageUpdate = msg => {
|
|
397
|
+
var wsMessageUpdate = function wsMessageUpdate(msg) {
|
|
411
398
|
if (msg.from === version.current) {
|
|
412
399
|
usercodeApply(msg.version, msg.ots);
|
|
413
400
|
} else if (msg.from < version.current) {
|
|
@@ -417,12 +404,9 @@ const useUsercodeEditWebSocket = ({
|
|
|
417
404
|
/**
|
|
418
405
|
* Websocket on `WRITE_FAILED` message.
|
|
419
406
|
*/
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
const wsMessageWriteFailed = msg => {
|
|
407
|
+
var wsMessageWriteFailed = function wsMessageWriteFailed(msg) {
|
|
423
408
|
writeIndex.current = 0;
|
|
424
409
|
writeFailCount.current += 1;
|
|
425
|
-
|
|
426
410
|
if (MAX_WRITE_FAIL_COUNT < writeFailCount.current) {
|
|
427
411
|
sendReset();
|
|
428
412
|
} else {
|
|
@@ -432,9 +416,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
432
416
|
/**
|
|
433
417
|
* Websocket on `WRITE_SUCCEED` message.
|
|
434
418
|
*/
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
const wsMessageWriteSucceed = msg => {
|
|
419
|
+
var wsMessageWriteSucceed = function wsMessageWriteSucceed(msg) {
|
|
438
420
|
version.current = msg.version;
|
|
439
421
|
otsBuffer.current.splice(0, writeIndex.current);
|
|
440
422
|
writeIndex.current = 0;
|
|
@@ -444,9 +426,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
444
426
|
/**
|
|
445
427
|
* Websocket on `WRITE_NOTI` message.
|
|
446
428
|
*/
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
const wsMessageWriteNoti = msg => {
|
|
429
|
+
var wsMessageWriteNoti = function wsMessageWriteNoti(msg) {
|
|
450
430
|
if (version.current + 1 === msg.version) {
|
|
451
431
|
usercodeApply(msg.version, msg.ots);
|
|
452
432
|
} else if (version.current < msg.version) {
|
|
@@ -456,10 +436,10 @@ const useUsercodeEditWebSocket = ({
|
|
|
456
436
|
/**
|
|
457
437
|
* Websocket on `CURSOR_NOTI` message.
|
|
458
438
|
*/
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
439
|
+
var wsMessageCursorNoti = function wsMessageCursorNoti(msg) {
|
|
440
|
+
var _msg$client3 = _rollupPluginBabelHelpers.slicedToArray(msg.client, 2),
|
|
441
|
+
userId = _msg$client3[0],
|
|
442
|
+
userAccesskey = _msg$client3[1];
|
|
463
443
|
updateClient(userAccesskey, userId);
|
|
464
444
|
updateCursor(userAccesskey, {
|
|
465
445
|
from: msg.cursorStart,
|
|
@@ -469,73 +449,77 @@ const useUsercodeEditWebSocket = ({
|
|
|
469
449
|
/**
|
|
470
450
|
* Create usercode websocket url.
|
|
471
451
|
*/
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
452
|
+
var createUsercodeUrl = React.useCallback( /*#__PURE__*/_rollupPluginBabelHelpers.asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers.regeneratorRuntime().mark(function _callee() {
|
|
453
|
+
var url;
|
|
454
|
+
return _rollupPluginBabelHelpers.regeneratorRuntime().wrap(function _callee$(_context) {
|
|
455
|
+
while (1) switch (_context.prev = _context.next) {
|
|
456
|
+
case 0:
|
|
457
|
+
if (filename) {
|
|
458
|
+
_context.next = 2;
|
|
459
|
+
break;
|
|
460
|
+
}
|
|
461
|
+
throw new Error('filename is not defined');
|
|
462
|
+
case 2:
|
|
463
|
+
url = "".concat(apiWsOriginUrl, "/usercode_edit");
|
|
464
|
+
return _context.abrupt("return", apiClient.postOrgMaterialExerciseUsercodeEdit({
|
|
465
|
+
exerciseRoomId: exerciseRoomId,
|
|
466
|
+
filename: filename
|
|
467
|
+
}).then(function (data) {
|
|
468
|
+
return "".concat(url, "/").concat(data.accesskey);
|
|
469
|
+
}).catch(function (err) {
|
|
470
|
+
var _a, _b;
|
|
471
|
+
if (((_a = err.detail) === null || _a === void 0 ? void 0 : _a.failCode) === 'non_editable_file') {
|
|
472
|
+
setDocEditable(false);
|
|
473
|
+
}
|
|
474
|
+
throw new Error(((_b = err.detail) === null || _b === void 0 ? void 0 : _b.failMessage) || err.message);
|
|
475
|
+
}));
|
|
476
|
+
case 4:
|
|
477
|
+
case "end":
|
|
478
|
+
return _context.stop();
|
|
488
479
|
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}, [apiWsOriginUrl, exerciseRoomId, filename]); //
|
|
480
|
+
}, _callee);
|
|
481
|
+
})), [apiWsOriginUrl, exerciseRoomId, filename]);
|
|
482
|
+
//
|
|
493
483
|
// Initialize websocket.
|
|
494
484
|
//
|
|
495
|
-
|
|
496
|
-
React.useEffect(() => {
|
|
485
|
+
React.useEffect(function () {
|
|
497
486
|
if (!isReady) {
|
|
498
487
|
return;
|
|
499
488
|
}
|
|
500
|
-
|
|
501
489
|
websocket$1.current = new websocket.EliceWebSocket(createUsercodeUrl);
|
|
502
490
|
websocket$1.current.onopen = wsOpen;
|
|
503
491
|
websocket$1.current.onclose = wsClose;
|
|
504
492
|
websocket$1.current.onmessage = wsMessage;
|
|
505
493
|
websocket$1.current.onerror = wsError;
|
|
506
|
-
return ()
|
|
494
|
+
return function () {
|
|
507
495
|
if (websocket$1.current) {
|
|
508
496
|
websocket$1.current.close();
|
|
509
497
|
}
|
|
510
498
|
};
|
|
511
|
-
},
|
|
512
|
-
|
|
499
|
+
},
|
|
500
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
501
|
+
[isReady, createUsercodeUrl]);
|
|
502
|
+
//
|
|
513
503
|
// =============== monkey ===============
|
|
514
504
|
//
|
|
515
|
-
|
|
516
505
|
/**
|
|
517
506
|
* Make monkey jump.
|
|
518
507
|
* @note only for testing
|
|
519
508
|
*/
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
const getRandomInt = function (max) {
|
|
509
|
+
var _monkeyAgentDoJump = React.useCallback(function () {
|
|
510
|
+
var getRandomInt = function getRandomInt(max) {
|
|
523
511
|
return Math.floor(Math.random() * max);
|
|
524
512
|
};
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
const getRandomEmoji = () => {
|
|
513
|
+
var emojis = ['๐ฆ', '๐', '๐', '๐', '๐ต', '๐', '๐ฆน๐ผ', '๐ง๐พ', '๐จโ๐งโ๐ฆ'];
|
|
514
|
+
var getRandomEmoji = function getRandomEmoji() {
|
|
529
515
|
return emojis[getRandomInt(emojis.length)];
|
|
530
516
|
};
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
517
|
+
var uniTextLength = unicount.uniCount(_doc.current);
|
|
518
|
+
var uniPos = Math.floor(Math.random() * uniTextLength);
|
|
519
|
+
// add text
|
|
535
520
|
if (Math.random() < 0.5) {
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
521
|
+
var randomNumber = Math.random();
|
|
522
|
+
var text = '';
|
|
539
523
|
if (randomNumber < 1 / 3) {
|
|
540
524
|
text = getRandomEmoji();
|
|
541
525
|
} else if (randomNumber < 2 / 3) {
|
|
@@ -543,53 +527,47 @@ const useUsercodeEditWebSocket = ({
|
|
|
543
527
|
} else {
|
|
544
528
|
text = '\n';
|
|
545
529
|
}
|
|
546
|
-
|
|
547
530
|
onWriteNoti([uniPos, text], true);
|
|
548
|
-
}
|
|
531
|
+
}
|
|
532
|
+
// delete text
|
|
549
533
|
else {
|
|
550
|
-
|
|
551
|
-
|
|
534
|
+
var uniTextTo = uniPos + getRandomInt(10);
|
|
552
535
|
if (uniTextTo >= uniTextLength) {
|
|
553
536
|
uniTextTo = uniTextLength - 1;
|
|
554
537
|
}
|
|
555
|
-
|
|
556
538
|
if (uniPos) onWriteNoti([uniPos, {
|
|
557
539
|
d: _doc.current.slice(unicount.uniToStrPos(_doc.current, uniPos), unicount.uniToStrPos(_doc.current, uniTextTo))
|
|
558
540
|
}], true);
|
|
559
541
|
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
542
|
+
setNumMonkeyJumped(function (mj) {
|
|
543
|
+
return mj + 1;
|
|
544
|
+
});
|
|
545
|
+
},
|
|
546
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
563
547
|
[]);
|
|
564
548
|
/**
|
|
565
549
|
* Make monkey jump.
|
|
566
550
|
* @note only for testing
|
|
567
551
|
*/
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
const _startMonkey = React.useCallback(() => {
|
|
552
|
+
var _startMonkey = React.useCallback(function () {
|
|
571
553
|
setNumMonkeyJumped(0);
|
|
572
|
-
|
|
573
554
|
_setMonkeyAgent(window.setInterval(_monkeyAgentDoJump, 500));
|
|
574
|
-
},
|
|
555
|
+
},
|
|
556
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
575
557
|
[]);
|
|
576
558
|
/**
|
|
577
559
|
* Stop monkey jump.
|
|
578
560
|
* @note only for testing
|
|
579
561
|
*/
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
const _stopMonkey = React.useCallback(() => {
|
|
562
|
+
var _stopMonkey = React.useCallback(function () {
|
|
583
563
|
if (_monkeyAgent) {
|
|
584
564
|
window.clearInterval(_monkeyAgent);
|
|
585
|
-
|
|
586
565
|
_setMonkeyAgent(0);
|
|
587
566
|
}
|
|
588
|
-
}, [_monkeyAgent]);
|
|
567
|
+
}, [_monkeyAgent]);
|
|
568
|
+
//
|
|
589
569
|
//
|
|
590
570
|
//
|
|
591
|
-
|
|
592
|
-
|
|
593
571
|
_return.current.doc = doc;
|
|
594
572
|
_return.current.docEditable = docEditable;
|
|
595
573
|
_return.current.readyState = websocketReadyState;
|