@elice/material-exercise 1.230328.0 โ 1.230418.0
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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { slicedToArray as _slicedToArray, defineProperty as _defineProperty, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
1
2
|
import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
|
|
2
3
|
import { useDeepCompareEffect } from 'react-use';
|
|
3
4
|
import { config, getOrgUserGet, postOrgMaterialExerciseUsercodeEdit } from '@elice/api-client';
|
|
@@ -11,86 +12,101 @@ import { uniCount, uniToStrPos } from 'unicount';
|
|
|
11
12
|
|
|
12
13
|
//
|
|
13
14
|
//
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
//
|
|
16
|
+
var MAX_WRITE_FAIL_COUNT = 5;
|
|
16
17
|
/**
|
|
17
18
|
*
|
|
18
19
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
20
|
+
var useUsercodeEditWebSocket = function useUsercodeEditWebSocket(_ref) {
|
|
21
|
+
var exerciseRoomId = _ref.exerciseRoomId,
|
|
22
|
+
filename = _ref.filename,
|
|
23
|
+
onInit = _ref.onInit,
|
|
24
|
+
onWriteNoti = _ref.onWriteNoti;
|
|
25
|
+
var _return = useRef({});
|
|
26
|
+
var _useMaterialConfig = useMaterialConfig(),
|
|
27
|
+
apiWsOriginUrl = _useMaterialConfig.apiWsOriginUrl;
|
|
28
|
+
var isReady = useMaterialConfigApiClientUpdate(config.init);
|
|
29
|
+
var websocket = useRef(null);
|
|
30
|
+
var _useState = useState(EliceWebSocket.CLOSED),
|
|
31
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
32
|
+
websocketReadyState = _useState2[0],
|
|
33
|
+
setWebSocketReadyState = _useState2[1];
|
|
34
|
+
var _useState3 = useState(''),
|
|
35
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
36
|
+
doc = _useState4[0],
|
|
37
|
+
setDoc = _useState4[1];
|
|
38
|
+
var _useState5 = useState(true),
|
|
39
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
40
|
+
docEditable = _useState6[0],
|
|
41
|
+
setDocEditable = _useState6[1];
|
|
42
|
+
var _doc = useRef('');
|
|
43
|
+
var _useState7 = useState({}),
|
|
44
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
45
|
+
clients = _useState8[0],
|
|
46
|
+
setClients = _useState8[1];
|
|
47
|
+
var _useState9 = useState({}),
|
|
48
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
49
|
+
cursors = _useState10[0],
|
|
50
|
+
setCursors = _useState10[1];
|
|
51
|
+
var myself = useRef(null);
|
|
52
|
+
var version = useRef(-1);
|
|
53
|
+
var otsBuffer = useRef([]);
|
|
54
|
+
var writeIndex = useRef(0);
|
|
55
|
+
var writeFailCount = useRef(0);
|
|
56
|
+
var _useState11 = useState(0),
|
|
57
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
58
|
+
_monkeyAgent = _useState12[0],
|
|
59
|
+
_setMonkeyAgent = _useState12[1];
|
|
60
|
+
var _useState13 = useState(0),
|
|
61
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
62
|
+
_numMonkeyJumped = _useState14[0],
|
|
63
|
+
setNumMonkeyJumped = _useState14[1];
|
|
64
|
+
//
|
|
48
65
|
// =============== clients and markers ===============
|
|
49
66
|
//
|
|
50
|
-
|
|
51
67
|
/**
|
|
52
68
|
* Markers.
|
|
53
69
|
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
var markers = useMemo(function () {
|
|
71
|
+
return Object.entries(cursors).filter(function (_ref2) {
|
|
72
|
+
var _ref3 = _slicedToArray(_ref2, 1),
|
|
73
|
+
userAccesskey = _ref3[0];
|
|
74
|
+
return Boolean(clients[userAccesskey]);
|
|
75
|
+
}).map(function (_ref4) {
|
|
76
|
+
var _ref5 = _slicedToArray(_ref4, 2),
|
|
77
|
+
userAccesskey = _ref5[0],
|
|
78
|
+
cursor = _ref5[1];
|
|
79
|
+
var client = clients[userAccesskey];
|
|
80
|
+
return Object.assign(Object.assign(Object.assign({}, client), cursor), {
|
|
81
|
+
fullname: client.fullname || "User ".concat(client.id),
|
|
82
|
+
email: client.email || 'none'
|
|
83
|
+
});
|
|
60
84
|
});
|
|
61
|
-
}
|
|
85
|
+
}, [clients, cursors]);
|
|
62
86
|
/**
|
|
63
87
|
* Update client to list.
|
|
64
88
|
*/
|
|
65
|
-
|
|
66
|
-
const updateClient = (userAccesskey, userId) => {
|
|
89
|
+
var updateClient = function updateClient(userAccesskey, userId) {
|
|
67
90
|
var _a;
|
|
68
|
-
|
|
69
91
|
if (userAccesskey === ((_a = myself.current) === null || _a === void 0 ? void 0 : _a.accesskey)) {
|
|
70
92
|
return;
|
|
71
93
|
}
|
|
72
|
-
|
|
73
|
-
setClients(prev => {
|
|
94
|
+
setClients(function (prev) {
|
|
74
95
|
if (prev[userAccesskey]) {
|
|
75
96
|
return prev;
|
|
76
97
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
accesskey: userAccesskey
|
|
82
|
-
}
|
|
83
|
-
});
|
|
98
|
+
return Object.assign(Object.assign({}, prev), _defineProperty({}, userAccesskey, {
|
|
99
|
+
id: userId,
|
|
100
|
+
accesskey: userAccesskey
|
|
101
|
+
}));
|
|
84
102
|
});
|
|
85
103
|
};
|
|
86
104
|
/**
|
|
87
105
|
* Remove client from list.
|
|
88
106
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
setClients(prev => {
|
|
93
|
-
const next = Object.assign({}, prev);
|
|
107
|
+
var removeClient = function removeClient(userAccesskey) {
|
|
108
|
+
setClients(function (prev) {
|
|
109
|
+
var next = Object.assign({}, prev);
|
|
94
110
|
delete next[userAccesskey];
|
|
95
111
|
return next;
|
|
96
112
|
});
|
|
@@ -98,75 +114,87 @@ const useUsercodeEditWebSocket = ({
|
|
|
98
114
|
/**
|
|
99
115
|
*
|
|
100
116
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const updateCursor = (userAccesskey, cursor) => {
|
|
117
|
+
var updateCursor = function updateCursor(userAccesskey, cursor) {
|
|
104
118
|
var _a;
|
|
105
|
-
|
|
106
119
|
if (userAccesskey === ((_a = myself.current) === null || _a === void 0 ? void 0 : _a.accesskey)) {
|
|
107
120
|
return;
|
|
108
121
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}));
|
|
122
|
+
setCursors(function (prev) {
|
|
123
|
+
return Object.assign(Object.assign({}, prev), _defineProperty({}, userAccesskey, cursor));
|
|
124
|
+
});
|
|
113
125
|
};
|
|
114
126
|
/**
|
|
115
127
|
*
|
|
116
128
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
129
|
+
var updateCursorFromOts = function updateCursorFromOts(ots) {
|
|
130
|
+
setCursors(Object.entries(cursors).map(function (_ref6) {
|
|
131
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
132
|
+
userAccesskey = _ref7[0],
|
|
133
|
+
cursor = _ref7[1];
|
|
134
|
+
return _defineProperty({}, userAccesskey, {
|
|
122
135
|
from: type.transformSelection(cursor.from, ots),
|
|
123
136
|
to: type.transformSelection(cursor.to, ots)
|
|
124
|
-
}
|
|
125
|
-
})
|
|
137
|
+
});
|
|
138
|
+
}).reduce(function (prev, next) {
|
|
139
|
+
return Object.assign(Object.assign({}, prev), next);
|
|
140
|
+
}, {}));
|
|
126
141
|
};
|
|
127
142
|
/**
|
|
128
143
|
*
|
|
129
144
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
setCursors(prev => {
|
|
134
|
-
const next = Object.assign({}, prev);
|
|
145
|
+
var removeCursor = function removeCursor(userAccesskey) {
|
|
146
|
+
setCursors(function (prev) {
|
|
147
|
+
var next = Object.assign({}, prev);
|
|
135
148
|
delete next[userAccesskey];
|
|
136
149
|
return next;
|
|
137
150
|
});
|
|
138
|
-
};
|
|
151
|
+
};
|
|
152
|
+
//
|
|
139
153
|
// Fetch client user info, whenever client list changed.
|
|
140
154
|
//
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
useDeepCompareEffect(function () {
|
|
156
|
+
void Promise.all(Object.entries(Object.assign({}, clients))
|
|
157
|
+
// only user info not fetched...
|
|
158
|
+
.filter(function (_ref9) {
|
|
159
|
+
var _ref10 = _slicedToArray(_ref9, 2),
|
|
160
|
+
client = _ref10[1];
|
|
161
|
+
return !client.fullname;
|
|
162
|
+
}).map(function (_ref11) {
|
|
163
|
+
var _ref12 = _slicedToArray(_ref11, 2),
|
|
164
|
+
userAccesskey = _ref12[0],
|
|
165
|
+
client = _ref12[1];
|
|
166
|
+
return getOrgUserGet({
|
|
167
|
+
userId: client.id
|
|
168
|
+
}).then(function (res) {
|
|
169
|
+
return res.user;
|
|
170
|
+
}).then(function (user) {
|
|
171
|
+
return _defineProperty({}, userAccesskey, Object.assign(Object.assign({}, client), {
|
|
172
|
+
fullname: user.fullname,
|
|
173
|
+
email: user.displayEmail
|
|
174
|
+
}));
|
|
175
|
+
}).catch(function () {
|
|
176
|
+
return _defineProperty({}, userAccesskey, Object.assign(Object.assign({}, client), {
|
|
177
|
+
fullname: "User ".concat(client.id)
|
|
178
|
+
}));
|
|
179
|
+
});
|
|
180
|
+
})).then(function (nextClientArr) {
|
|
181
|
+
return nextClientArr.reduce(function (nextClients, client) {
|
|
182
|
+
return Object.assign(Object.assign({}, nextClients), client);
|
|
183
|
+
}, {});
|
|
184
|
+
}).then(function (nextClients) {
|
|
185
|
+
setClients(function (prev) {
|
|
186
|
+
return Object.assign(Object.assign({}, prev), nextClients);
|
|
187
|
+
});
|
|
158
188
|
});
|
|
159
|
-
}, [clients]);
|
|
189
|
+
}, [clients]);
|
|
190
|
+
//
|
|
160
191
|
// =============== send message ===============
|
|
161
192
|
//
|
|
162
|
-
|
|
163
193
|
/**
|
|
164
194
|
* Send `RESET`.
|
|
165
195
|
*/
|
|
166
|
-
|
|
167
|
-
const sendReset = () => {
|
|
196
|
+
var sendReset = function sendReset() {
|
|
168
197
|
var _a;
|
|
169
|
-
|
|
170
198
|
(_a = websocket.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
171
199
|
type: 'RESET'
|
|
172
200
|
});
|
|
@@ -174,11 +202,8 @@ const useUsercodeEditWebSocket = ({
|
|
|
174
202
|
/**
|
|
175
203
|
* Send `FETCH`.
|
|
176
204
|
*/
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const sendFetch = useCallback(debounce(() => {
|
|
205
|
+
var sendFetch = useCallback(debounce(function () {
|
|
180
206
|
var _a;
|
|
181
|
-
|
|
182
207
|
(_a = websocket.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
183
208
|
type: 'FETCH',
|
|
184
209
|
from: version.current
|
|
@@ -187,21 +212,16 @@ const useUsercodeEditWebSocket = ({
|
|
|
187
212
|
/**
|
|
188
213
|
* Send `WRITE`.
|
|
189
214
|
*/
|
|
190
|
-
|
|
191
|
-
const sendWrite = useCallback(debounce(() => {
|
|
215
|
+
var sendWrite = useCallback(debounce(function () {
|
|
192
216
|
var _a;
|
|
193
|
-
|
|
194
217
|
if (otsBuffer.current.length === 0 || writeIndex.current !== 0) {
|
|
195
218
|
return;
|
|
196
219
|
}
|
|
197
|
-
|
|
198
220
|
writeIndex.current = otsBuffer.current.length;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
for (let i = 1; i < writeIndex.current; i++) {
|
|
221
|
+
var ots = otsBuffer.current[0];
|
|
222
|
+
for (var i = 1; i < writeIndex.current; i++) {
|
|
202
223
|
ots = type.compose(ots, otsBuffer.current[i]);
|
|
203
224
|
}
|
|
204
|
-
|
|
205
225
|
(_a = websocket.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
206
226
|
type: 'WRITE',
|
|
207
227
|
to: version.current + 1,
|
|
@@ -211,13 +231,10 @@ const useUsercodeEditWebSocket = ({
|
|
|
211
231
|
/**
|
|
212
232
|
* Send `CURSOR`.
|
|
213
233
|
*/
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
to
|
|
218
|
-
}) => {
|
|
234
|
+
var sendCursor = useCallback(debounce(function (_ref15) {
|
|
235
|
+
var from = _ref15.from,
|
|
236
|
+
to = _ref15.to;
|
|
219
237
|
var _a;
|
|
220
|
-
|
|
221
238
|
(_a = websocket.current) === null || _a === void 0 ? void 0 : _a.sendJson({
|
|
222
239
|
type: 'CURSOR',
|
|
223
240
|
cursor_start: from,
|
|
@@ -227,55 +244,46 @@ const useUsercodeEditWebSocket = ({
|
|
|
227
244
|
/**
|
|
228
245
|
* Send OTs.
|
|
229
246
|
*/
|
|
230
|
-
|
|
231
|
-
const sendOTs = useCallback(ots => {
|
|
247
|
+
var sendOTs = useCallback(function (ots) {
|
|
232
248
|
setDoc(type.apply(_doc.current, ots));
|
|
233
249
|
_doc.current = type.apply(_doc.current, ots);
|
|
234
250
|
otsBuffer.current.push(ots);
|
|
235
251
|
sendWrite();
|
|
236
|
-
}, [sendWrite]);
|
|
252
|
+
}, [sendWrite]);
|
|
253
|
+
//
|
|
237
254
|
// =============== usercode ===============
|
|
238
255
|
//
|
|
239
|
-
|
|
240
256
|
/**
|
|
241
257
|
*
|
|
242
258
|
*/
|
|
243
|
-
|
|
244
|
-
const usercodeApply = (newVersion, ots) => {
|
|
259
|
+
var usercodeApply = function usercodeApply(newVersion, ots) {
|
|
245
260
|
version.current = newVersion;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
for (let i = 0; i < otsBuffer.current.length; i++) {
|
|
261
|
+
var conflictOts = [];
|
|
262
|
+
for (var i = 0; i < otsBuffer.current.length; i++) {
|
|
249
263
|
conflictOts = type.compose(conflictOts, otsBuffer.current[i]);
|
|
250
264
|
}
|
|
251
|
-
|
|
252
|
-
const localOts = conflictOts.length > 0 ? type.transform(ots, conflictOts, 'left') : ots;
|
|
265
|
+
var localOts = conflictOts.length > 0 ? type.transform(ots, conflictOts, 'left') : ots;
|
|
253
266
|
onWriteNoti(localOts, false);
|
|
254
267
|
setDoc(type.apply(_doc.current, localOts));
|
|
255
268
|
_doc.current = type.apply(_doc.current, localOts);
|
|
256
|
-
|
|
257
269
|
if (conflictOts.length > 0) {
|
|
258
270
|
// update ots buffer
|
|
259
|
-
for (
|
|
260
|
-
otsBuffer.current[
|
|
271
|
+
for (var _i = 0; _i < otsBuffer.current.length - 1; _i++) {
|
|
272
|
+
otsBuffer.current[_i] = [];
|
|
261
273
|
}
|
|
262
|
-
|
|
263
274
|
otsBuffer.current[otsBuffer.current.length - 1] = type.transform(conflictOts, ots, 'right');
|
|
264
275
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
276
|
+
sendWrite();
|
|
277
|
+
// update display cursors
|
|
268
278
|
updateCursorFromOts(ots);
|
|
269
|
-
};
|
|
279
|
+
};
|
|
280
|
+
//
|
|
270
281
|
// =============== websocket ===============
|
|
271
282
|
//
|
|
272
|
-
|
|
273
283
|
/**
|
|
274
284
|
* Websocket on open.
|
|
275
285
|
*/
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
const wsOpen = () => {
|
|
286
|
+
var wsOpen = function wsOpen() {
|
|
279
287
|
if (websocket.current) {
|
|
280
288
|
setWebSocketReadyState(websocket.current.readyState);
|
|
281
289
|
}
|
|
@@ -283,11 +291,8 @@ const useUsercodeEditWebSocket = ({
|
|
|
283
291
|
/**
|
|
284
292
|
* Websocket on close.
|
|
285
293
|
*/
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
const wsClose = () => {
|
|
294
|
+
var wsClose = function wsClose() {
|
|
289
295
|
_stopMonkey();
|
|
290
|
-
|
|
291
296
|
if (websocket.current) {
|
|
292
297
|
setWebSocketReadyState(websocket.current.readyState);
|
|
293
298
|
}
|
|
@@ -295,9 +300,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
295
300
|
/**
|
|
296
301
|
* Websocket on error.
|
|
297
302
|
*/
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
const wsError = () => {
|
|
303
|
+
var wsError = function wsError() {
|
|
301
304
|
if (websocket.current) {
|
|
302
305
|
setWebSocketReadyState(websocket.current.readyState);
|
|
303
306
|
}
|
|
@@ -305,40 +308,30 @@ const useUsercodeEditWebSocket = ({
|
|
|
305
308
|
/**
|
|
306
309
|
* Websocket on message.
|
|
307
310
|
*/
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const wsMessage = e => {
|
|
311
|
-
const msg = camelizeKeys(e.data);
|
|
312
|
-
|
|
311
|
+
var wsMessage = function wsMessage(e) {
|
|
312
|
+
var msg = camelizeKeys(e.data);
|
|
313
313
|
switch (msg.type) {
|
|
314
314
|
case 'INIT':
|
|
315
315
|
wsMessageInit(msg);
|
|
316
316
|
break;
|
|
317
|
-
|
|
318
317
|
case 'ENTER':
|
|
319
318
|
wsMessageEnter(msg);
|
|
320
319
|
break;
|
|
321
|
-
|
|
322
320
|
case 'LEAVE':
|
|
323
321
|
wsMessageLeave(msg);
|
|
324
322
|
break;
|
|
325
|
-
|
|
326
323
|
case 'UPDATE':
|
|
327
324
|
wsMessageUpdate(msg);
|
|
328
325
|
break;
|
|
329
|
-
|
|
330
326
|
case 'WRITE_FAILED':
|
|
331
327
|
wsMessageWriteFailed();
|
|
332
328
|
break;
|
|
333
|
-
|
|
334
329
|
case 'WRITE_SUCCEED':
|
|
335
330
|
wsMessageWriteSucceed(msg);
|
|
336
331
|
break;
|
|
337
|
-
|
|
338
332
|
case 'WRITE_NOTI':
|
|
339
333
|
wsMessageWriteNoti(msg);
|
|
340
334
|
break;
|
|
341
|
-
|
|
342
335
|
case 'CURSOR_NOTI':
|
|
343
336
|
wsMessageCursorNoti(msg);
|
|
344
337
|
break;
|
|
@@ -347,9 +340,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
347
340
|
/**
|
|
348
341
|
* Websocket on `INIT` message.
|
|
349
342
|
*/
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const wsMessageInit = msg => {
|
|
343
|
+
var wsMessageInit = function wsMessageInit(msg) {
|
|
353
344
|
setDocEditable(true);
|
|
354
345
|
myself.current = {
|
|
355
346
|
userId: msg.userId,
|
|
@@ -358,14 +349,13 @@ const useUsercodeEditWebSocket = ({
|
|
|
358
349
|
version.current = msg.version;
|
|
359
350
|
otsBuffer.current = [];
|
|
360
351
|
writeIndex.current = 0;
|
|
361
|
-
writeFailCount.current = 0;
|
|
352
|
+
writeFailCount.current = 0;
|
|
353
|
+
// TODO: set unix mode on both editors.
|
|
362
354
|
// editor.getSession().getDocument().setNewLineMode('unix');
|
|
363
|
-
|
|
364
|
-
const convertedContent = msg.content.replace(/\r\n/g, '\n');
|
|
355
|
+
var convertedContent = msg.content.replace(/\r\n/g, '\n');
|
|
365
356
|
setDoc(convertedContent);
|
|
366
357
|
_doc.current = convertedContent;
|
|
367
358
|
onInit(convertedContent);
|
|
368
|
-
|
|
369
359
|
if (msg.content !== convertedContent) {
|
|
370
360
|
otsBuffer.current.push([{
|
|
371
361
|
d: msg.content
|
|
@@ -377,28 +367,25 @@ const useUsercodeEditWebSocket = ({
|
|
|
377
367
|
/**
|
|
378
368
|
* Websocket on `ENTER` message.
|
|
379
369
|
*/
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
370
|
+
var wsMessageEnter = function wsMessageEnter(msg) {
|
|
371
|
+
var _msg$client = _slicedToArray(msg.client, 2),
|
|
372
|
+
userId = _msg$client[0],
|
|
373
|
+
userAccesskey = _msg$client[1];
|
|
384
374
|
updateClient(userAccesskey, userId);
|
|
385
375
|
};
|
|
386
376
|
/**
|
|
387
377
|
* Websocket on `LEAVE` message.
|
|
388
378
|
*/
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
const [, userAccesskey] = msg.client;
|
|
379
|
+
var wsMessageLeave = function wsMessageLeave(msg) {
|
|
380
|
+
var _msg$client2 = _slicedToArray(msg.client, 2),
|
|
381
|
+
userAccesskey = _msg$client2[1];
|
|
393
382
|
removeClient(userAccesskey);
|
|
394
383
|
removeCursor(userAccesskey);
|
|
395
384
|
};
|
|
396
385
|
/**
|
|
397
386
|
* Websocket on `UPDATE` message.
|
|
398
387
|
*/
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
const wsMessageUpdate = msg => {
|
|
388
|
+
var wsMessageUpdate = function wsMessageUpdate(msg) {
|
|
402
389
|
if (msg.from === version.current) {
|
|
403
390
|
usercodeApply(msg.version, msg.ots);
|
|
404
391
|
} else if (msg.from < version.current) {
|
|
@@ -408,12 +395,9 @@ const useUsercodeEditWebSocket = ({
|
|
|
408
395
|
/**
|
|
409
396
|
* Websocket on `WRITE_FAILED` message.
|
|
410
397
|
*/
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
const wsMessageWriteFailed = msg => {
|
|
398
|
+
var wsMessageWriteFailed = function wsMessageWriteFailed(msg) {
|
|
414
399
|
writeIndex.current = 0;
|
|
415
400
|
writeFailCount.current += 1;
|
|
416
|
-
|
|
417
401
|
if (MAX_WRITE_FAIL_COUNT < writeFailCount.current) {
|
|
418
402
|
sendReset();
|
|
419
403
|
} else {
|
|
@@ -423,9 +407,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
423
407
|
/**
|
|
424
408
|
* Websocket on `WRITE_SUCCEED` message.
|
|
425
409
|
*/
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
const wsMessageWriteSucceed = msg => {
|
|
410
|
+
var wsMessageWriteSucceed = function wsMessageWriteSucceed(msg) {
|
|
429
411
|
version.current = msg.version;
|
|
430
412
|
otsBuffer.current.splice(0, writeIndex.current);
|
|
431
413
|
writeIndex.current = 0;
|
|
@@ -435,9 +417,7 @@ const useUsercodeEditWebSocket = ({
|
|
|
435
417
|
/**
|
|
436
418
|
* Websocket on `WRITE_NOTI` message.
|
|
437
419
|
*/
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
const wsMessageWriteNoti = msg => {
|
|
420
|
+
var wsMessageWriteNoti = function wsMessageWriteNoti(msg) {
|
|
441
421
|
if (version.current + 1 === msg.version) {
|
|
442
422
|
usercodeApply(msg.version, msg.ots);
|
|
443
423
|
} else if (version.current < msg.version) {
|
|
@@ -447,10 +427,10 @@ const useUsercodeEditWebSocket = ({
|
|
|
447
427
|
/**
|
|
448
428
|
* Websocket on `CURSOR_NOTI` message.
|
|
449
429
|
*/
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
430
|
+
var wsMessageCursorNoti = function wsMessageCursorNoti(msg) {
|
|
431
|
+
var _msg$client3 = _slicedToArray(msg.client, 2),
|
|
432
|
+
userId = _msg$client3[0],
|
|
433
|
+
userAccesskey = _msg$client3[1];
|
|
454
434
|
updateClient(userAccesskey, userId);
|
|
455
435
|
updateCursor(userAccesskey, {
|
|
456
436
|
from: msg.cursorStart,
|
|
@@ -460,73 +440,77 @@ const useUsercodeEditWebSocket = ({
|
|
|
460
440
|
/**
|
|
461
441
|
* Create usercode websocket url.
|
|
462
442
|
*/
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
443
|
+
var createUsercodeUrl = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
444
|
+
var url;
|
|
445
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
446
|
+
while (1) switch (_context.prev = _context.next) {
|
|
447
|
+
case 0:
|
|
448
|
+
if (filename) {
|
|
449
|
+
_context.next = 2;
|
|
450
|
+
break;
|
|
451
|
+
}
|
|
452
|
+
throw new Error('filename is not defined');
|
|
453
|
+
case 2:
|
|
454
|
+
url = "".concat(apiWsOriginUrl, "/usercode_edit");
|
|
455
|
+
return _context.abrupt("return", postOrgMaterialExerciseUsercodeEdit({
|
|
456
|
+
exerciseRoomId: exerciseRoomId,
|
|
457
|
+
filename: filename
|
|
458
|
+
}).then(function (data) {
|
|
459
|
+
return "".concat(url, "/").concat(data.accesskey);
|
|
460
|
+
}).catch(function (err) {
|
|
461
|
+
var _a, _b;
|
|
462
|
+
if (((_a = err.detail) === null || _a === void 0 ? void 0 : _a.failCode) === 'non_editable_file') {
|
|
463
|
+
setDocEditable(false);
|
|
464
|
+
}
|
|
465
|
+
throw new Error(((_b = err.detail) === null || _b === void 0 ? void 0 : _b.failMessage) || err.message);
|
|
466
|
+
}));
|
|
467
|
+
case 4:
|
|
468
|
+
case "end":
|
|
469
|
+
return _context.stop();
|
|
479
470
|
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
}, [apiWsOriginUrl, exerciseRoomId, filename]); //
|
|
471
|
+
}, _callee);
|
|
472
|
+
})), [apiWsOriginUrl, exerciseRoomId, filename]);
|
|
473
|
+
//
|
|
484
474
|
// Initialize websocket.
|
|
485
475
|
//
|
|
486
|
-
|
|
487
|
-
useEffect(() => {
|
|
476
|
+
useEffect(function () {
|
|
488
477
|
if (!isReady) {
|
|
489
478
|
return;
|
|
490
479
|
}
|
|
491
|
-
|
|
492
480
|
websocket.current = new EliceWebSocket(createUsercodeUrl);
|
|
493
481
|
websocket.current.onopen = wsOpen;
|
|
494
482
|
websocket.current.onclose = wsClose;
|
|
495
483
|
websocket.current.onmessage = wsMessage;
|
|
496
484
|
websocket.current.onerror = wsError;
|
|
497
|
-
return ()
|
|
485
|
+
return function () {
|
|
498
486
|
if (websocket.current) {
|
|
499
487
|
websocket.current.close();
|
|
500
488
|
}
|
|
501
489
|
};
|
|
502
|
-
},
|
|
503
|
-
|
|
490
|
+
},
|
|
491
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
492
|
+
[isReady, createUsercodeUrl]);
|
|
493
|
+
//
|
|
504
494
|
// =============== monkey ===============
|
|
505
495
|
//
|
|
506
|
-
|
|
507
496
|
/**
|
|
508
497
|
* Make monkey jump.
|
|
509
498
|
* @note only for testing
|
|
510
499
|
*/
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
const getRandomInt = function (max) {
|
|
500
|
+
var _monkeyAgentDoJump = useCallback(function () {
|
|
501
|
+
var getRandomInt = function getRandomInt(max) {
|
|
514
502
|
return Math.floor(Math.random() * max);
|
|
515
503
|
};
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
const getRandomEmoji = () => {
|
|
504
|
+
var emojis = ['๐ฆ', '๐', '๐', '๐', '๐ต', '๐', '๐ฆน๐ผ', '๐ง๐พ', '๐จโ๐งโ๐ฆ'];
|
|
505
|
+
var getRandomEmoji = function getRandomEmoji() {
|
|
520
506
|
return emojis[getRandomInt(emojis.length)];
|
|
521
507
|
};
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
508
|
+
var uniTextLength = uniCount(_doc.current);
|
|
509
|
+
var uniPos = Math.floor(Math.random() * uniTextLength);
|
|
510
|
+
// add text
|
|
526
511
|
if (Math.random() < 0.5) {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
512
|
+
var randomNumber = Math.random();
|
|
513
|
+
var text = '';
|
|
530
514
|
if (randomNumber < 1 / 3) {
|
|
531
515
|
text = getRandomEmoji();
|
|
532
516
|
} else if (randomNumber < 2 / 3) {
|
|
@@ -534,53 +518,47 @@ const useUsercodeEditWebSocket = ({
|
|
|
534
518
|
} else {
|
|
535
519
|
text = '\n';
|
|
536
520
|
}
|
|
537
|
-
|
|
538
521
|
onWriteNoti([uniPos, text], true);
|
|
539
|
-
}
|
|
522
|
+
}
|
|
523
|
+
// delete text
|
|
540
524
|
else {
|
|
541
|
-
|
|
542
|
-
|
|
525
|
+
var uniTextTo = uniPos + getRandomInt(10);
|
|
543
526
|
if (uniTextTo >= uniTextLength) {
|
|
544
527
|
uniTextTo = uniTextLength - 1;
|
|
545
528
|
}
|
|
546
|
-
|
|
547
529
|
if (uniPos) onWriteNoti([uniPos, {
|
|
548
530
|
d: _doc.current.slice(uniToStrPos(_doc.current, uniPos), uniToStrPos(_doc.current, uniTextTo))
|
|
549
531
|
}], true);
|
|
550
532
|
}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
533
|
+
setNumMonkeyJumped(function (mj) {
|
|
534
|
+
return mj + 1;
|
|
535
|
+
});
|
|
536
|
+
},
|
|
537
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
554
538
|
[]);
|
|
555
539
|
/**
|
|
556
540
|
* Make monkey jump.
|
|
557
541
|
* @note only for testing
|
|
558
542
|
*/
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
const _startMonkey = useCallback(() => {
|
|
543
|
+
var _startMonkey = useCallback(function () {
|
|
562
544
|
setNumMonkeyJumped(0);
|
|
563
|
-
|
|
564
545
|
_setMonkeyAgent(window.setInterval(_monkeyAgentDoJump, 500));
|
|
565
|
-
},
|
|
546
|
+
},
|
|
547
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
566
548
|
[]);
|
|
567
549
|
/**
|
|
568
550
|
* Stop monkey jump.
|
|
569
551
|
* @note only for testing
|
|
570
552
|
*/
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
const _stopMonkey = useCallback(() => {
|
|
553
|
+
var _stopMonkey = useCallback(function () {
|
|
574
554
|
if (_monkeyAgent) {
|
|
575
555
|
window.clearInterval(_monkeyAgent);
|
|
576
|
-
|
|
577
556
|
_setMonkeyAgent(0);
|
|
578
557
|
}
|
|
579
|
-
}, [_monkeyAgent]);
|
|
558
|
+
}, [_monkeyAgent]);
|
|
559
|
+
//
|
|
580
560
|
//
|
|
581
561
|
//
|
|
582
|
-
|
|
583
|
-
|
|
584
562
|
_return.current.doc = doc;
|
|
585
563
|
_return.current.docEditable = docEditable;
|
|
586
564
|
_return.current.readyState = websocketReadyState;
|