From 7789f2810ffc0725d07e745a5f77f4c7b19d0b87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Mon, 16 Mar 2020 12:05:45 +0800
Subject: [PATCH 01/11] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/react/src/AppConfig.js | 2 +-
.../courses/exercise/question/fillEmpty.js | 32 ++++++++++++-------
2 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js
index fee6eb724..043c0f78d 100644
--- a/public/react/src/AppConfig.js
+++ b/public/react/src/AppConfig.js
@@ -46,7 +46,7 @@ debugType="admin";
// 老师
// debugType="teacher";
// 学生
-// debugType="student";
+//debugType="student";
diff --git a/public/react/src/modules/courses/exercise/question/fillEmpty.js b/public/react/src/modules/courses/exercise/question/fillEmpty.js
index 737fef682..10b906fad 100644
--- a/public/react/src/modules/courses/exercise/question/fillEmpty.js
+++ b/public/react/src/modules/courses/exercise/question/fillEmpty.js
@@ -44,13 +44,13 @@ class fillEmpty extends Component{
}
onOptionContentChange = (value, index) => {
- let array = this.state.array.slice(0);
+ let array = this.state.array.slice(0);
array[index].value = value;
this.setState({ array })
}
onBlurEmpty=(index,number)=>{
- let array = this.state.array.slice(0);
+ let array = this.state.array.slice(0);
let v=array[index].value;
let question_id=this.props.questionType.question_id;
let url=`/exercise_questions/${question_id}/exercise_answers.json`
@@ -73,8 +73,8 @@ class fillEmpty extends Component{
}
render(){
- let {
- questionType ,
+ let {
+ questionType ,
exercise ,
user_exercise_status,
}=this.props
@@ -89,11 +89,11 @@ class fillEmpty extends Component{
.emptyPanel div#content_editorMd_show{
width: 100%;
border-radius: 4px;
- height: 35px;
+ // height: 35px;
margin-top:0px;
background-color:#fafafa;
color:#999;
- line-height:25px;
+ // line-height:25px;
}
.answerStyle{
background:#f5f5f5;
@@ -111,10 +111,18 @@ class fillEmpty extends Component{
答案(填空{key+1}):
{
- user_exercise_status == 1 ?
-
+ user_exercise_status == 1 ?
+ //
+
+
+
:
-
参考答案:
{ questionType.standard_answer && questionType.standard_answer.map((item,k)=>{
@@ -141,7 +149,7 @@ class fillEmpty extends Component{
item.answer_text && item.answer_text.map((i,index)=>{
return(
//
)
@@ -154,7 +162,7 @@ class fillEmpty extends Component{
}
}
-
+
)
}
From e4c8607566e30d21acf674c19da7fb076dd5b61c Mon Sep 17 00:00:00 2001
From: harry
Date: Mon, 16 Mar 2020 12:49:09 +0800
Subject: [PATCH 02/11] add mini-pagination
---
public/react/src/app-test.jsx | 9 +
.../src/components/mini-pagination/index.jsx | 32 ++
.../src/components/mini-pagination/index.less | 60 +++
.../monaco-editor/TPIMonacoConfig.js | 117 +++++
.../src/components/monaco-editor/index.css | 438 ++++++++++++++++++
.../src/components/monaco-editor/index.jsx | 190 ++++++++
6 files changed, 846 insertions(+)
create mode 100644 public/react/src/app-test.jsx
create mode 100644 public/react/src/components/mini-pagination/index.jsx
create mode 100644 public/react/src/components/mini-pagination/index.less
create mode 100644 public/react/src/components/monaco-editor/TPIMonacoConfig.js
create mode 100644 public/react/src/components/monaco-editor/index.css
create mode 100644 public/react/src/components/monaco-editor/index.jsx
diff --git a/public/react/src/app-test.jsx b/public/react/src/app-test.jsx
new file mode 100644
index 000000000..1bdba5f30
--- /dev/null
+++ b/public/react/src/app-test.jsx
@@ -0,0 +1,9 @@
+import React from 'react'
+import MiniPagination from './components/mini-pagination'
+
+export default () => {
+ function onPageChange(page) {
+ console.log(page, '-----------')
+ }
+ return
+}
\ No newline at end of file
diff --git a/public/react/src/components/mini-pagination/index.jsx b/public/react/src/components/mini-pagination/index.jsx
new file mode 100644
index 000000000..5a940ad68
--- /dev/null
+++ b/public/react/src/components/mini-pagination/index.jsx
@@ -0,0 +1,32 @@
+import React, { useState } from 'react'
+import './index.less'
+function noop() { }
+
+export default ({ current, defaultCurrent, total, pageSize, onChange = noop }) => {
+ const maxPage = Math.ceil(total / pageSize)
+ const [page, setPage] = useState(current || defaultCurrent)
+
+ function next() {
+ if (page < maxPage) {
+ let value = page + 1
+ setPage(value)
+ onChange(value)
+ }
+ }
+
+ function prev() {
+ if (page > 1) {
+ let value = page - 1
+ setPage(value)
+ onChange(value)
+ }
+ }
+
+ return (
+
+ )
+
+}
\ No newline at end of file
diff --git a/public/react/src/components/mini-pagination/index.less b/public/react/src/components/mini-pagination/index.less
new file mode 100644
index 000000000..a1e9f053d
--- /dev/null
+++ b/public/react/src/components/mini-pagination/index.less
@@ -0,0 +1,60 @@
+.mini-pagination {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: center;
+ align-items: center;
+
+ a {
+ display: block;
+ padding: 0 10px 0 22px;
+ border-width: 1px;
+ border-radius: 3px;
+ margin-right: 4px;
+ font-size: 12px;
+ line-height: 30px;
+ cursor: pointer;
+ border-style: solid;
+ outline: none;
+ border-color: #c4c6cf;
+ background: #fff;
+ color: #333;
+
+ position: relative;
+
+ &:hover {
+ background-color: #f2f3f7;
+ border-color: #a0a2ad;
+ text-decoration: none;
+ }
+
+ &:before {
+ position: absolute;
+ content: ' ';
+ width: 8px;
+ top: 10px;
+ left: 10px;
+ height: 8px;
+ transform: rotate(-45deg);
+ border-top: 1px solid #333;
+ border-left: 1px solid #333;
+ }
+
+ &:last-child {
+ padding: 0 22px 0 10px;
+ margin: 0 0 0 4px;
+
+ &:before {
+ left: auto;
+ right: 10px;
+ transform: rotate(135deg);
+ }
+ }
+
+ &.disabled {
+ cursor: not-allowed;
+ background-color: #f7f8fa;
+ border-color: #e6e7eb;
+ color: #e0e0e0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/public/react/src/components/monaco-editor/TPIMonacoConfig.js b/public/react/src/components/monaco-editor/TPIMonacoConfig.js
new file mode 100644
index 000000000..2c5452fc5
--- /dev/null
+++ b/public/react/src/components/monaco-editor/TPIMonacoConfig.js
@@ -0,0 +1,117 @@
+import * as monaco from 'monaco-editor'
+import { union } from 'lodash'
+const ifelse = {
+ label: 'ifelse',
+ kind: monaco.languages.CompletionItemKind.Snippet,
+ insertText: [
+ 'if (${1:condition}) {',
+ '\t$0',
+ '} else {',
+ '\t',
+ '}'
+ ].join('\n'),
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+ documentation: 'If-Else Statement'
+}
+
+
+function getWordsInString(string) {
+ return string.match(/[A-z]+/g)
+}
+
+const cArray = ['auto', 'break', 'case', 'char', 'const', 'continue', 'default', 'do', 'double', 'else', 'enum', 'extern',
+ 'float', 'for', 'goto', 'if', 'int', 'long', 'register', 'return', 'short', 'signed', 'sizeof', 'static', 'struct',
+ 'switch', 'typedef', 'union', 'unsigned', 'void', 'volatile', 'while', 'inline', 'restrict', '_Bool', '_Complex',
+ '_Imaginary', '_Alignas', '_Alignof', '_Atomic', '_Static_assert', '_Noreturn', '_Thread_local', '_Generic']
+
+monaco.languages.registerCompletionItemProvider('cpp', {
+ provideCompletionItems: (model) => {
+ const currentFileWords = getWordsInString(model.getValue());
+ const all = union(cArray, currentFileWords)
+ var suggestions = all.map((item) => {
+ return {
+ label: item,
+ kind: monaco.languages.CompletionItemKind.Keyword,
+ insertText: item,
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
+ }
+ });
+ suggestions.push(ifelse)
+
+ return { suggestions: suggestions };
+ }
+});
+
+// https://www.programiz.com/python-programming/keyword-list
+const pythonArray = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif',
+ 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or',
+ 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
+
+monaco.languages.registerCompletionItemProvider('python', {
+ provideCompletionItems: (model) => {
+ const currentFileWords = getWordsInString(model.getValue());
+ const all = union(pythonArray, currentFileWords)
+ var suggestions = all.map((item) => {
+ return {
+ label: item,
+ kind: monaco.languages.CompletionItemKind.Keyword,
+ insertText: item,
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
+ }
+ });
+ suggestions.push({
+ label: 'print',
+ kind: monaco.languages.CompletionItemKind.Snippet,
+ insertText: [
+ 'print($0)',
+ ].join('\n'),
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+ documentation: 'print'
+ })
+ return { suggestions: suggestions };
+ }
+});
+
+const javaArray = ['abstract', 'assert', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'const',
+ 'continue', 'default', 'do', 'double', 'else', 'enum', 'extends', 'final', 'finally', 'float', 'for', 'goto', 'if',
+ 'implements', 'import', 'instance of', 'int', 'interface', 'long', 'native',
+ 'new', 'package', 'private', 'protected', 'public', 'return', 'strictfp', 'short', 'static', 'super', 'switch',
+ 'synchronized', 'this', 'throw', 'throws', 'transient', 'try', 'void', 'volatile', 'while']
+
+monaco.languages.registerCompletionItemProvider('java', {
+ provideCompletionItems: (model) => {
+ const currentFileWords = getWordsInString(model.getValue());
+ const all = _.union(javaArray, currentFileWords)
+
+ var suggestions = all.map((item) => {
+ return {
+ label: item,
+ kind: monaco.languages.CompletionItemKind.Keyword,
+ insertText: item,
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
+ }
+ });
+ suggestions.push(ifelse)
+ suggestions.push({
+ label: 'main',
+ kind: monaco.languages.CompletionItemKind.Snippet,
+ insertText: [
+ 'public static void main(String[] args) {',
+ '\t$0',
+ '}',
+ ].join('\n'),
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+ documentation: 'main function'
+ })
+ suggestions.push({
+ label: 'System.out.print',
+ kind: monaco.languages.CompletionItemKind.Snippet,
+ insertText: [
+ 'System.out.print($0)',
+ ].join('\n'),
+ insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+ documentation: 'system print'
+ })
+ return { suggestions: suggestions };
+ }
+});
\ No newline at end of file
diff --git a/public/react/src/components/monaco-editor/index.css b/public/react/src/components/monaco-editor/index.css
new file mode 100644
index 000000000..51522c42f
--- /dev/null
+++ b/public/react/src/components/monaco-editor/index.css
@@ -0,0 +1,438 @@
+.monaco-editor .minimap-slider,
+.monaco-editor .minimap-slider .minimap-slider-horizontal {
+ background: rgba(121, 121, 121, 0.2);
+}
+
+.monaco-editor .minimap-slider:hover,
+.monaco-editor .minimap-slider:hover .minimap-slider-horizontal {
+ background: rgba(100, 100, 100, 0.35);
+}
+
+.monaco-editor .minimap-slider.active,
+.monaco-editor .minimap-slider.active .minimap-slider-horizontal {
+ background: rgba(191, 191, 191, 0.2);
+}
+
+.monaco-editor .minimap-shadow-visible {
+ box-shadow: #000000 -6px 0 6px -6px inset;
+}
+
+.monaco-editor .scroll-decoration {
+ box-shadow: #000000 0 6px 6px -6px inset;
+}
+
+.monaco-editor .focused .selected-text {
+ background-color: #264f78;
+}
+
+.monaco-editor .selected-text {
+ background-color: #3a3d41;
+}
+
+.monaco-editor,
+.monaco-editor-background,
+.monaco-editor .inputarea.ime-input {
+ background-color: #1e1e1e;
+}
+
+.monaco-editor,
+.monaco-editor .inputarea.ime-input {
+ color: #d4d4d4;
+}
+
+.monaco-editor .margin {
+ background-color: #1e1e1e;
+}
+
+.monaco-editor .rangeHighlight {
+ background-color: rgba(255, 255, 255, 0.04);
+}
+
+.vs-whitespace {
+ color: rgba(227, 228, 226, 0.16) !important;
+}
+
+.monaco-editor .view-overlays .current-line {
+ border: 2px solid #282828;
+}
+
+.monaco-editor .margin-view-overlays .current-line-margin {
+ border: 2px solid #282828;
+}
+
+.monaco-editor .lines-content .cigr {
+ box-shadow: 1px 0 0 0 #404040 inset;
+}
+
+.monaco-editor .lines-content .cigra {
+ box-shadow: 1px 0 0 0 #707070 inset;
+}
+
+.monaco-editor .line-numbers {
+ color: #858585;
+}
+
+.monaco-editor .current-line~.line-numbers {
+ color: #c6c6c6;
+}
+
+.monaco-editor .view-ruler {
+ box-shadow: 1px 0 0 0 #5a5a5a inset;
+}
+
+.monaco-editor .cursor {
+ background-color: #aeafad;
+ border-color: #aeafad;
+ color: #515052;
+}
+
+.monaco-editor .squiggly-error {
+ background: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23ea4646'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") repeat-x bottom left;
+}
+
+.monaco-editor .squiggly-warning {
+ background: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%234d9e4d'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") repeat-x bottom left;
+}
+
+.monaco-editor .squiggly-info {
+ background: url("data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%206%203'%20enable-background%3D'new%200%200%206%203'%20height%3D'3'%20width%3D'6'%3E%3Cg%20fill%3D'%23008000'%3E%3Cpolygon%20points%3D'5.5%2C0%202.5%2C3%201.1%2C3%204.1%2C0'%2F%3E%3Cpolygon%20points%3D'4%2C0%206%2C2%206%2C0.6%205.4%2C0'%2F%3E%3Cpolygon%20points%3D'0%2C2%201%2C3%202.4%2C3%200%2C0.6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") repeat-x bottom left;
+}
+
+.monaco-editor .squiggly-hint {
+ background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%223%22%20width%3D%2212%22%3E%3Cg%20fill%3D%22rgba(238%2C%20238%2C%20238%2C%200.7)%22%3E%3Ccircle%20cx%3D%221%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%225%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3Ccircle%20cx%3D%229%22%20cy%3D%221%22%20r%3D%221%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat bottom left;
+}
+
+.showUnused .monaco-editor .squiggly-inline-unnecessary {
+ opacity: 0.667;
+}
+
+.monaco-diff-editor .diff-review-line-number {
+ color: #858585;
+}
+
+.monaco-diff-editor .diff-review-shadow {
+ box-shadow: #000000 0 -6px 6px -6px inset;
+}
+
+.monaco-editor .line-insert,
+.monaco-editor .char-insert {
+ background-color: rgba(155, 185, 85, 0.2);
+}
+
+.monaco-diff-editor .line-insert,
+.monaco-diff-editor .char-insert {
+ background-color: rgba(155, 185, 85, 0.2);
+}
+
+.monaco-editor .inline-added-margin-view-zone {
+ background-color: rgba(155, 185, 85, 0.2);
+}
+
+.monaco-editor .line-delete,
+.monaco-editor .char-delete {
+ background-color: rgba(255, 0, 0, 0.2);
+}
+
+.monaco-diff-editor .line-delete,
+.monaco-diff-editor .char-delete {
+ background-color: rgba(255, 0, 0, 0.2);
+}
+
+.monaco-editor .inline-deleted-margin-view-zone {
+ background-color: rgba(255, 0, 0, 0.2);
+}
+
+.monaco-diff-editor.side-by-side .editor.modified {
+ box-shadow: -6px 0 5px -5px #000000;
+}
+
+.monaco-editor .bracket-match {
+ background-color: rgba(0, 100, 0, 0.1);
+}
+
+.monaco-editor .bracket-match {
+ border: 1px solid #888888;
+}
+
+.monaco-editor .codelens-decoration {
+ color: #999999;
+}
+
+.monaco-editor .codelens-decoration>a:hover {
+ color: #4e94ce !important;
+}
+
+.monaco-editor .findOptionsWidget {
+ background-color: #252526;
+}
+
+.monaco-editor .findOptionsWidget {
+ box-shadow: 0 2px 8px #000000;
+}
+
+.monaco-editor .findMatch {
+ background-color: rgba(234, 92, 0, 0.33);
+}
+
+.monaco-editor .currentFindMatch {
+ background-color: #515c6a;
+}
+
+.monaco-editor .findScope {
+ background-color: rgba(58, 61, 65, 0.4);
+}
+
+.monaco-editor .find-widget {
+ background-color: #252526;
+}
+
+.monaco-editor .find-widget {
+ box-shadow: 0 2px 8px #000000;
+}
+
+.monaco-editor .find-widget.no-results .matchesCount {
+ color: #f48771;
+}
+
+.monaco-editor .find-widget .monaco-sash {
+ background-color: #454545;
+ width: 3px !important;
+ margin-left: -4px;
+}
+
+.monaco-editor .find-widget .monaco-checkbox .checkbox:checked+.label {
+ border: 1px solid #007acc;
+}
+
+.monaco-editor.vs .valueSetReplacement {
+ outline: solid 2px #888888;
+}
+
+.monaco-editor .detected-link-active {
+ color: #4e94ce !important;
+}
+
+.monaco-editor .monaco-editor-overlaymessage .anchor {
+ border-top-color: #007acc;
+}
+
+.monaco-editor .monaco-editor-overlaymessage .message {
+ border: 1px solid #007acc;
+}
+
+.monaco-editor .monaco-editor-overlaymessage .message {
+ background-color: #063b49;
+}
+
+.monaco-editor .parameter-hints-widget {
+ border: 1px solid #454545;
+}
+
+.monaco-editor .parameter-hints-widget.multiple .body {
+ border-left: 1px solid rgba(69, 69, 69, 0.5);
+}
+
+.monaco-editor .parameter-hints-widget .signature.has-docs {
+ border-bottom: 1px solid rgba(69, 69, 69, 0.5);
+}
+
+.monaco-editor .parameter-hints-widget {
+ background-color: #252526;
+}
+
+.monaco-editor .parameter-hints-widget a {
+ color: #3794ff;
+}
+
+.monaco-editor .parameter-hints-widget code {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.monaco-editor .snippet-placeholder {
+ background-color: rgba(124, 124, 124, 0.3);
+ outline-color: transparent;
+}
+
+.monaco-editor .finish-snippet-placeholder {
+ background-color: transparent;
+ outline-color: #525252;
+}
+
+.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-highlighted-label .highlight {
+ color: #0097fb;
+}
+
+.monaco-editor .suggest-widget {
+ color: #d4d4d4;
+}
+
+.monaco-editor .suggest-widget a {
+ color: #3794ff;
+}
+
+.monaco-editor .suggest-widget code {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.monaco-editor .focused .selectionHighlight {
+ background-color: rgba(173, 214, 255, 0.15);
+}
+
+.monaco-editor .selectionHighlight {
+ background-color: rgba(173, 214, 255, 0.07);
+}
+
+.monaco-editor .wordHighlight {
+ background-color: rgba(87, 87, 87, 0.72);
+}
+
+.monaco-editor .wordHighlightStrong {
+ background-color: rgba(0, 73, 114, 0.72);
+}
+
+.monaco-editor .accessibilityHelpWidget {
+ background-color: #252526;
+}
+
+.monaco-editor .accessibilityHelpWidget {
+ box-shadow: 0 2px 8px #000000;
+}
+
+.monaco-editor .tokens-inspect-widget {
+ border: 1px solid #454545;
+}
+
+.monaco-editor .tokens-inspect-widget .tokens-inspect-separator {
+ background-color: #454545;
+}
+
+.monaco-editor .tokens-inspect-widget {
+ background-color: #252526;
+}
+
+.monaco-editor .reference-zone-widget .ref-tree .referenceMatch {
+ background-color: rgba(234, 92, 0, 0.3);
+}
+
+.monaco-editor .reference-zone-widget .preview .reference-decoration {
+ background-color: rgba(255, 143, 0, 0.6);
+}
+
+.monaco-editor .reference-zone-widget .ref-tree {
+ background-color: #252526;
+}
+
+.monaco-editor .reference-zone-widget .ref-tree {
+ color: #bbbbbb;
+}
+
+.monaco-editor .reference-zone-widget .ref-tree .reference-file {
+ color: #ffffff;
+}
+
+.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted) {
+ background-color: rgba(51, 153, 255, 0.2);
+}
+
+.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted) {
+ color: #ffffff !important;
+}
+
+.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,
+.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input {
+ background-color: #001f33;
+}
+
+.monaco-editor .reference-zone-widget .preview .monaco-editor .margin {
+ background-color: #001f33;
+}
+
+.monaco-editor .marker-widget a {
+ color: #3794ff;
+}
+
+.monaco-editor .hoverHighlight {
+ background-color: rgba(38, 79, 120, 0.25);
+}
+
+.monaco-editor .monaco-editor-hover {
+ background-color: #252526;
+}
+
+.monaco-editor .monaco-editor-hover {
+ border: 1px solid #454545;
+}
+
+.monaco-editor .monaco-editor-hover .hover-row:not(:first-child):not(:empty) {
+ border-top: 1px solid rgba(69, 69, 69, 0.5);
+}
+
+.monaco-editor .monaco-editor-hover hr {
+ border-top: 1px solid rgba(69, 69, 69, 0.5);
+}
+
+.monaco-editor .monaco-editor-hover hr {
+ border-bottom: 0px solid rgba(69, 69, 69, 0.5);
+}
+
+.monaco-editor .monaco-editor-hover a {
+ color: #3794ff;
+}
+
+.monaco-editor .monaco-editor-hover .hover-row .actions {
+ background-color: #2c2c2d;
+}
+
+.monaco-editor .monaco-editor-hover code {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.monaco-editor .goto-definition-link {
+ color: #4e94ce !important;
+}
+
+.mtki {
+ font-style: italic;
+}
+
+.mtkb {
+ font-weight: bold;
+}
+
+.mtku {
+ text-decoration: underline;
+ text-underline-position: under;
+}
+
+
+
+
+#extend-challenge-file-edit {
+ height: 100%;
+}
+
+/* context menu会有样式问题,先给隐藏掉 */
+.context-view {
+ display: none !important;
+}
+
+/* 去掉灰色边框 */
+#extend-challenge-file-edit {
+ border: none !important;
+}
+
+/* 覆盖tpi样式 */
+.monaco-tree .monaco-tree-rows>.monaco-tree-row>.content {
+ min-width: auto;
+}
+
+/* 选中行边框 */
+.monaco-editor .view-overlays .current-line {
+ border-width: 1px !important;
+}
+
+#extend-challenge-file-edit {
+ width: '100%';
+ height: '100%';
+ border: '1px solid grey';
+}
\ No newline at end of file
diff --git a/public/react/src/components/monaco-editor/index.jsx b/public/react/src/components/monaco-editor/index.jsx
new file mode 100644
index 000000000..e2cb11db0
--- /dev/null
+++ b/public/react/src/components/monaco-editor/index.jsx
@@ -0,0 +1,190 @@
+import React, { useEffect, useRef, useState } from 'react'
+import * as monaco from 'monaco-editor'
+import './TPIMonacoConfig'
+import './index.css'
+
+function processSize(size) {
+ return !/^\d+$/.test(size) ? size : `${size}px`
+}
+function noop() { }
+let __prevent_trigger_change_event = false
+
+function debounce(func, wait, immediate) {
+ var timeout
+ return function () {
+ var context = this, args = arguments
+ var later = function () {
+ timeout = null
+ if (!immediate) func.apply(context, args)
+ };
+ var callNow = immediate && !timeout
+ clearTimeout(timeout)
+ timeout = setTimeout(later, wait)
+ if (callNow) func.apply(context, args)
+ }
+}
+
+
+
+const mirror2LanguageMap = {
+ 'JFinal': 'java',
+ 'Java': 'java',
+ 'JavaWeb': 'java',
+ 'Kotlin': 'java',
+
+ 'Html': 'html',
+ 'Css': 'css',
+ 'Javascript': 'javascript',
+ 'JavaScript': 'javascript',
+
+ 'C/C++': 'cpp',
+ 'MachineLearning': 'python',
+ 'Python2.7': 'python',
+ 'Python3.6': 'python',
+
+ 'C#': 'csharp',
+ 'R': 'r'
+
+}
+function getLanguageByMirrorName(mirror_name) {
+ let lang = 'javascript'
+ if (mirror_name && mirror_name.length) {
+ // 需要倒着遍历, html、css的实训,主评测语言环境是python,小类别是html或css
+ for (let i = mirror_name.length - 1; i >= 0; i--) {
+ let languageVal = mirror2LanguageMap[mirror_name[i]]
+ if (languageVal) {
+ lang = languageVal
+ break
+ }
+ }
+ }
+ return lang
+}
+
+
+export default ({
+ width = '100%',
+ height = '100%',
+ value,
+ language = 'javascript',
+ options = {},
+ overrideServices = {},
+ theme = 'vs-dark',
+ onChange = noop,
+ editorDidMount = noop
+}) => {
+ const editorEl = useRef()
+ const editor = useRef({})
+ const [init, setInit] = useState(false)
+
+ function onLayout() {
+ if (window.ResizeObserver) {
+ const ro = new window.ResizeObserver(entries => {
+ for (let entry of entries) {
+ if (entry.target.offsetHeight > 0) {
+ editor.current.instance.layout()
+ }
+ }
+ })
+ ro.observe(editorEl.current.parentElement)
+ } else {
+ setTimeout(() => {
+ editor.current.instance.layout()
+ }, 100);
+ }
+ }
+
+ useEffect(() => {
+ editor.current.instance = monaco.editor.create(
+ editorEl.current, {
+ value,
+ language: getLanguageByMirrorName(language),
+ theme,
+ ...options
+ },
+ overrideServices
+ )
+ editorDidMount(editor.current.instance, monaco)
+ editor.current.subscription = editor.current.instance.onDidChangeModelContent(event => {
+ if (!__prevent_trigger_change_event) {
+ onChange(editor.current.instance.getValue(), event);
+ }
+ })
+ setInit(true)
+
+ const resizeHandler = debounce(() => { editor.current.instance.layout() }, 100)
+ window.addEventListener('resize', resizeHandler)
+ onLayout()
+ return () => {
+ const el = editor.current.instance
+ el.dispose()
+ const model = el.getModel()
+ if (model) {
+ model.dispose()
+ }
+ if (editor.current.subscription) {
+ editor.current.subscription.dispose()
+ }
+ window.removeEventListener('resize', resizeHandler)
+ }
+ }, [editorEl.current])
+
+ useEffect(() => {
+ let instance = editor.current.instance
+ if (instance && init) {
+ __prevent_trigger_change_event = true
+ const model = instance.getModel()
+ instance.pushUndoStop()
+ model.pushEditOperations(
+ [],
+ [
+ {
+ range: model.getFullModelRange(),
+ text: value
+ }
+ ]
+ )
+ instance.pushUndoStop();
+ __prevent_trigger_change_event = false;
+ }
+ }, [value, init])
+
+ useEffect(() => {
+ let instance = editor.current.instance
+ if (instance && init) {
+ monaco.editor.setModelLanguage(instance.getModel(), getLanguageByMirrorName(language))
+ }
+ }, [language, init])
+
+ useEffect(() => {
+ let instance = editor.current.instance
+ if (instance && init) {
+ monaco.editor.setTheme(theme)
+ }
+ }, [theme, init])
+
+ useEffect(() => {
+ let instance = editor.current.instance
+ if (instance && init) {
+ instance.updateOptions(options)
+ }
+ }, [options, init])
+
+ useEffect(() => {
+ let instance = editor.current.instance
+ if (instance && init) {
+ instance.layout()
+ }
+ }, [width, height, init])
+
+ const fixedWidth = processSize(width)
+ const fixedHeight = processSize(height)
+ const style = {
+ width: fixedWidth,
+ height: fixedHeight
+ }
+
+ return (
+
+ )
+}
\ No newline at end of file
From 6ee8b893fd3241f006ea595acab6312a391f049c Mon Sep 17 00:00:00 2001
From: harry
Date: Mon, 16 Mar 2020 13:19:45 +0800
Subject: [PATCH 03/11] change to mini-pagination
---
public/react/src/components/mini-pagination/index.less | 5 +++++
public/react/src/modules/courses/coursesHome/CoursesHome.js | 2 +-
public/react/src/modules/paths/ShixunPathSearch.js | 1 +
public/react/src/modules/tpm/shixuns/shixun-card.js | 5 +++--
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/public/react/src/components/mini-pagination/index.less b/public/react/src/components/mini-pagination/index.less
index a1e9f053d..b6ce51ff8 100644
--- a/public/react/src/components/mini-pagination/index.less
+++ b/public/react/src/components/mini-pagination/index.less
@@ -55,6 +55,11 @@
background-color: #f7f8fa;
border-color: #e6e7eb;
color: #e0e0e0;
+
+ &:before {
+ border-top: 1px solid #e0e0e0;
+ border-left: 1px solid #e0e0e0;
+ }
}
}
}
\ No newline at end of file
diff --git a/public/react/src/modules/courses/coursesHome/CoursesHome.js b/public/react/src/modules/courses/coursesHome/CoursesHome.js
index 3ad4e805f..965159832 100644
--- a/public/react/src/modules/courses/coursesHome/CoursesHome.js
+++ b/public/react/src/modules/courses/coursesHome/CoursesHome.js
@@ -2,13 +2,13 @@ import React, { Component, Fragment } from 'react';
import { getImageUrl } from 'educoder';
import CoursesHomeCard from "./CoursesHomeCard.js"
import axios from 'axios';
-import { Pagination } from 'antd';
import LoadingSpin from '../../../common/LoadingSpin';
import UpgradeModals from '../../modals/UpgradeModals';
import './css/CoursesHome.css';
import '../../tpm/shixuns/shixun-keyword-list.scss';
import btnNew from './btn-new.png'
import btnJoin from './btn-join.png'
+import Pagination from '../../../components/mini-pagination'
class CoursesHome extends Component {
constructor(props) {
diff --git a/public/react/src/modules/paths/ShixunPathSearch.js b/public/react/src/modules/paths/ShixunPathSearch.js
index 3ae7c5cac..7fd2f6ae6 100644
--- a/public/react/src/modules/paths/ShixunPathSearch.js
+++ b/public/react/src/modules/paths/ShixunPathSearch.js
@@ -9,6 +9,7 @@ import '@icedesign/base/lib/pagination/style.js';
import './ShixunPaths.css';
import KeywordList from '../tpm/shixuns/shixun-keyword-list';
import btnUrl from './btn-new.png';
+import Pagination from '../../components/mini-pagination'
class ShixunPathSearch extends Component {
constructor(props) {
diff --git a/public/react/src/modules/tpm/shixuns/shixun-card.js b/public/react/src/modules/tpm/shixuns/shixun-card.js
index f33f4f157..c673ac4e2 100644
--- a/public/react/src/modules/tpm/shixuns/shixun-card.js
+++ b/public/react/src/modules/tpm/shixuns/shixun-card.js
@@ -1,7 +1,8 @@
import React from 'react';
import { getImageUrl, setImagesUrl, getUrl } from 'educoder';
-import { Spin, Tooltip, Rate, Pagination } from 'antd';
-import './shixunCss/shixunCard.scss';
+import { Spin, Tooltip, Rate } from 'antd';
+import './shixunCss/shixunCard.less';
+import Pagination from '../../../components/mini-pagination'
export default ({ middleshixundata, pagination, typepvisible, pages, totalcount, shixunsPage }) => {
function onPageChange(number) {
From f9c883aa74e0e25456072278fb6da7aff793d354 Mon Sep 17 00:00:00 2001
From: harry
Date: Mon, 16 Mar 2020 13:37:51 +0800
Subject: [PATCH 04/11] fix mini pagination
---
public/react/package-lock.json | 96 +++++++++++++++++++
.../src/components/mini-pagination/index.jsx | 2 +-
.../{index.less => index.scss} | 0
.../src/modules/paths/ShixunPathSearch.js | 2 -
.../src/modules/tpm/shixuns/shixun-card.js | 2 +-
5 files changed, 98 insertions(+), 4 deletions(-)
rename public/react/src/components/mini-pagination/{index.less => index.scss} (100%)
diff --git a/public/react/package-lock.json b/public/react/package-lock.json
index 4cb59a032..ce3ac05c7 100644
--- a/public/react/package-lock.json
+++ b/public/react/package-lock.json
@@ -3323,6 +3323,25 @@
"object-assign": "^4.1.1"
}
},
+ "create-react-context": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npm.taobao.org/create-react-context/download/create-react-context-0.3.0.tgz",
+ "integrity": "sha1-VG3t6dxCLe8NP8L+A6/gvA9PfYw=",
+ "requires": {
+ "gud": "^1.0.0",
+ "warning": "^4.0.3"
+ },
+ "dependencies": {
+ "warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz",
+ "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ }
+ }
+ },
"cropperjs": {
"version": "0.7.2",
"resolved": "https://registry.npm.taobao.org/cropperjs/download/cropperjs-0.7.2.tgz",
@@ -14559,6 +14578,73 @@
"object-assign": "^4.1.1"
}
},
+ "react-datepicker": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npm.taobao.org/react-datepicker/download/react-datepicker-2.14.0.tgz",
+ "integrity": "sha1-zbLyNvEgp+bpc7YX9xNYtchheqw=",
+ "requires": {
+ "classnames": "^2.2.6",
+ "date-fns": "^2.0.1",
+ "prop-types": "^15.7.2",
+ "react-onclickoutside": "^6.9.0",
+ "react-popper": "^1.3.4"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.8.7.tgz?cache=0&sync_timestamp=1583373718614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.8.7.tgz",
+ "integrity": "sha1-j+/OmALbVIgbpZ+Quyhxm0mWMk0=",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "date-fns": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.11.0.tgz?cache=0&sync_timestamp=1584132572779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.11.0.tgz",
+ "integrity": "sha1-7CtEl3RludyzcAIdXmwBmxnzbQY="
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz",
+ "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "react-popper": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npm.taobao.org/react-popper/download/react-popper-1.3.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-popper%2Fdownload%2Freact-popper-1.3.7.tgz",
+ "integrity": "sha1-9qNHE2LvHw0QpJY2c3id4brKIyQ=",
+ "requires": {
+ "@babel/runtime": "^7.1.2",
+ "create-react-context": "^0.3.0",
+ "deep-equal": "^1.1.1",
+ "popper.js": "^1.14.4",
+ "prop-types": "^15.6.1",
+ "typed-styles": "^0.0.7",
+ "warning": "^4.0.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052597708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz",
+ "integrity": "sha1-2Hih0JS0MG0QuQlkhLM+vVXiZpc="
+ },
+ "warning": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwarning%2Fdownload%2Fwarning-4.0.3.tgz",
+ "integrity": "sha1-Fungd+uKhtavfWSqHgX9hbRnjKM=",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ }
+ }
+ },
"react-dev-utils": {
"version": "5.0.3",
"resolved": "http://registry.npm.taobao.org/react-dev-utils/download/react-dev-utils-5.0.3.tgz",
@@ -14718,6 +14804,11 @@
}
}
},
+ "react-onclickoutside": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npm.taobao.org/react-onclickoutside/download/react-onclickoutside-6.9.0.tgz",
+ "integrity": "sha1-pUvDF66M9hMaXXis6lWhEGfzeh8="
+ },
"react-player": {
"version": "1.15.2",
"resolved": "https://registry.npm.taobao.org/react-player/download/react-player-1.15.2.tgz",
@@ -17482,6 +17573,11 @@
"mime-types": "~2.1.18"
}
},
+ "typed-styles": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npm.taobao.org/typed-styles/download/typed-styles-0.0.7.tgz",
+ "integrity": "sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k="
+ },
"typedarray": {
"version": "0.0.6",
"resolved": "http://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
diff --git a/public/react/src/components/mini-pagination/index.jsx b/public/react/src/components/mini-pagination/index.jsx
index 5a940ad68..0404e422d 100644
--- a/public/react/src/components/mini-pagination/index.jsx
+++ b/public/react/src/components/mini-pagination/index.jsx
@@ -1,5 +1,5 @@
import React, { useState } from 'react'
-import './index.less'
+import './index.scss'
function noop() { }
export default ({ current, defaultCurrent, total, pageSize, onChange = noop }) => {
diff --git a/public/react/src/components/mini-pagination/index.less b/public/react/src/components/mini-pagination/index.scss
similarity index 100%
rename from public/react/src/components/mini-pagination/index.less
rename to public/react/src/components/mini-pagination/index.scss
diff --git a/public/react/src/modules/paths/ShixunPathSearch.js b/public/react/src/modules/paths/ShixunPathSearch.js
index 7fd2f6ae6..db7802c0f 100644
--- a/public/react/src/modules/paths/ShixunPathSearch.js
+++ b/public/react/src/modules/paths/ShixunPathSearch.js
@@ -4,8 +4,6 @@ import { Dropdown, Menu } from 'antd';
import { getImageUrl } from 'educoder';
import PathCard from "./ShixunPathCard";
import UpgradeModals from '../modals/UpgradeModals';
-import Pagination from '@icedesign/base/lib/pagination';
-import '@icedesign/base/lib/pagination/style.js';
import './ShixunPaths.css';
import KeywordList from '../tpm/shixuns/shixun-keyword-list';
import btnUrl from './btn-new.png';
diff --git a/public/react/src/modules/tpm/shixuns/shixun-card.js b/public/react/src/modules/tpm/shixuns/shixun-card.js
index c673ac4e2..51618aef2 100644
--- a/public/react/src/modules/tpm/shixuns/shixun-card.js
+++ b/public/react/src/modules/tpm/shixuns/shixun-card.js
@@ -1,7 +1,7 @@
import React from 'react';
import { getImageUrl, setImagesUrl, getUrl } from 'educoder';
import { Spin, Tooltip, Rate } from 'antd';
-import './shixunCss/shixunCard.less';
+import './shixunCss/shixunCard.scss';
import Pagination from '../../../components/mini-pagination'
export default ({ middleshixundata, pagination, typepvisible, pages, totalcount, shixunsPage }) => {
From 989951cbfef8372a648709534e068932ad745272 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Mon, 16 Mar 2020 14:27:58 +0800
Subject: [PATCH 05/11] =?UTF-8?q?=E7=AD=BE=E5=88=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/images/qiandao/shipingshi.png | Bin 0 -> 83882 bytes
public/images/qiandao/spcishu.png | Bin 0 -> 85572 bytes
public/images/qiandao/sprenshu.png | Bin 0 -> 85178 bytes
public/react/public/css/demo_index.html | 46 ++++++
public/react/public/css/iconfont.css | 20 ++-
public/react/public/css/iconfont.eot | Bin 89364 -> 89884 bytes
public/react/public/css/iconfont.js | 2 +-
public/react/public/css/iconfont.json | 14 ++
public/react/public/css/iconfont.svg | 6 +
public/react/public/css/iconfont.ttf | Bin 89196 -> 89716 bytes
public/react/public/css/iconfont.woff | Bin 56200 -> 56544 bytes
public/react/public/css/iconfont.woff2 | Bin 46980 -> 47328 bytes
.../src/modules/courses/Video/VideoIndex.js | 140 ++++++++++--------
.../react/src/modules/courses/Video/video.css | 12 +-
.../modules/courses/signin/css/signincdi.css | 19 ++-
.../videostatistics/Videostatistics.js | 54 +++++++
.../component/Videostatisticscom.js | 76 ++++++++++
.../educoder/iconfont/demo_index.html | 46 ++++++
.../educoder/iconfont/iconfont.css | 20 ++-
.../educoder/iconfont/iconfont.eot | Bin 89364 -> 89884 bytes
.../stylesheets/educoder/iconfont/iconfont.js | 2 +-
.../educoder/iconfont/iconfont.json | 14 ++
.../educoder/iconfont/iconfont.svg | 6 +
.../educoder/iconfont/iconfont.ttf | Bin 89196 -> 89716 bytes
.../educoder/iconfont/iconfont.woff | Bin 56200 -> 56544 bytes
.../educoder/iconfont/iconfont.woff2 | Bin 46980 -> 47328 bytes
26 files changed, 401 insertions(+), 76 deletions(-)
create mode 100755 public/images/qiandao/shipingshi.png
create mode 100755 public/images/qiandao/spcishu.png
create mode 100755 public/images/qiandao/sprenshu.png
create mode 100644 public/react/src/modules/courses/videostatistics/Videostatistics.js
create mode 100644 public/react/src/modules/courses/videostatistics/component/Videostatisticscom.js
diff --git a/public/images/qiandao/shipingshi.png b/public/images/qiandao/shipingshi.png
new file mode 100755
index 0000000000000000000000000000000000000000..984f61862de22af14aaa70ed80d9e2aef00ed5e1
GIT binary patch
literal 83882
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