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