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