Merge branch 'develop' of http://git.trustie.net/jasder/forgeplus-react into develop

# Conflicts:
#	src/forge/New/Index.js
This commit is contained in:
caicai8 2020-03-30 19:29:09 +08:00
commit 0ec824d0cb
12 changed files with 323 additions and 255 deletions

View File

@ -1,10 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" afterDir="false" />
</list>
<list default="true" id="9830c5da-176a-4c72-a301-9f6ce98c82fe" name="Default Changelist" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -14,10 +11,10 @@
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.js">
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="381">
<caret line="296" selection-start-line="296" selection-end-line="296" />
<state relative-caret-position="144">
<caret line="145" column="58" selection-start-line="145" selection-start-column="58" selection-end-line="145" selection-end-column="58" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
@ -26,10 +23,10 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="268">
<caret line="114" column="13" selection-start-line="114" selection-start-column="13" selection-end-line="114" selection-end-column="13" />
<state relative-caret-position="-513">
<caret line="97" selection-start-line="97" selection-end-line="97" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
@ -38,27 +35,45 @@
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="228">
<caret line="249" column="13" selection-start-line="249" selection-start-column="13" selection-end-line="253" selection-end-column="15" />
<state relative-caret-position="253">
<caret line="17" column="37" lean-forward="true" selection-start-line="17" selection-start-column="37" selection-end-line="17" selection-end-column="37" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="63">
<caret line="538" column="27" selection-start-line="538" selection-start-column="27" selection-end-line="538" selection-end-column="27" />
<state relative-caret-position="177">
<caret line="65" column="28" lean-forward="true" selection-start-line="65" selection-start-column="28" selection-end-line="65" selection-end-column="28" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#16273#18539#0" />
<element signature="e#17250#18162#0" />
<element signature="e#18177#18487#0" />
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="98">
<caret line="110" column="77" selection-start-line="110" selection-start-column="67" selection-end-line="110" selection-end-column="77" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="199">
<caret line="245" column="59" lean-forward="true" selection-start-line="245" selection-start-column="59" selection-end-line="245" selection-end-column="59" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
@ -67,13 +82,10 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="112">
<caret line="94" column="34" selection-start-line="94" selection-start-column="34" selection-end-line="94" selection-end-column="34" />
<state relative-caret-position="61">
<caret line="91" column="34" selection-start-line="91" selection-start-column="34" selection-end-line="91" selection-end-column="34" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#2843#3359#0" />
<element signature="e#3376#4117#0" />
<element signature="e#4134#4538#0" />
</folding>
</state>
</provider>
@ -82,8 +94,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="110">
<caret line="344" column="8" selection-start-line="344" selection-start-column="8" selection-end-line="352" selection-end-column="14" />
<state relative-caret-position="2193">
<caret line="352" column="14" selection-start-line="352" selection-start-column="14" selection-end-line="352" selection-end-column="14" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
@ -94,8 +106,8 @@
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-33">
<caret line="19" column="25" selection-start-line="19" selection-start-column="25" selection-end-line="19" selection-end-column="25" />
<state relative-caret-position="461">
<caret line="41" column="22" selection-start-line="41" selection-start-column="22" selection-end-line="41" selection-end-column="22" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
@ -103,17 +115,22 @@
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="246">
<caret line="504" column="20" selection-start-line="504" selection-start-column="20" selection-end-line="504" selection-end-column="20" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>nHeader</find>
<find>点赞</find>
<find>fork</find>
<find>.push(</find>
<find>QuillForEditor</find>
<find>setContents</find>
<find>isedit</find>
<find>Educoder</find>
<find>title</find>
<find>textcount</find>
@ -131,18 +148,25 @@
<find>请输入合并</find>
<find>journal-list-item</find>
<find>issue-tag-show</find>
<find>创建工单</find>
<find>创建</find>
<find>.map((item,key)=&gt;{</find>
<find>.map((item,key)</find>
<find>评论成</find>
<find>该合并请求可以进行自动合并操作</find>
<find>没有</find>
<find>创建工单</find>
<find>可读权限</find>
<find>sub_entries</find>
<find>可读</find>
<find>icon-bianji</find>
<find>readOnly</find>
<find>isRe</find>
</findStrings>
<dirStrings>
<dir>$PROJECT_DIR$</dir>
<dir>$PROJECT_DIR$/src</dir>
<dir>$PROJECT_DIR$/src/forge</dir>
<dir>$PROJECT_DIR$/src/forge/Merge</dir>
<dir>$PROJECT_DIR$/src/forge</dir>
</dirStrings>
</component>
<component name="Git.Settings">
@ -169,15 +193,16 @@
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/forge/Newfile/UserSubmitComponent.js" />
<option value="$PROJECT_DIR$/src/forge/Settings/Collaborator.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.js" />
<option value="$PROJECT_DIR$/src/forge/Activity/Activity.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/merge.css" />
<option value="$PROJECT_DIR$/src/forge/Order/order.css" />
<option value="$PROJECT_DIR$/src/forge/Merge/MergeDetail.js" />
<option value="$PROJECT_DIR$/src/forge/Version/version.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/Merge/MessageCount.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Milepost.js" />
<option value="$PROJECT_DIR$/src/forge/Order/Detail.js" />
<option value="$PROJECT_DIR$/src/forge/New/Index.js" />
</list>
</option>
</component>
@ -214,14 +239,14 @@
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="forge" type="462c0819:PsiDirectoryNode" />
<item name="Merge" type="462c0819:PsiDirectoryNode" />
<item name="New" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="forgeplus-react" type="b2602c69:ProjectViewProjectNode" />
<item name="forgeplus-react" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="forge" type="462c0819:PsiDirectoryNode" />
<item name="Version" type="462c0819:PsiDirectoryNode" />
<item name="Settings" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
@ -275,17 +300,18 @@
<workItem from="1585217705353" duration="104000" />
<workItem from="1585217834609" duration="4000" />
<workItem from="1585217980103" duration="3406000" />
<workItem from="1585288258489" duration="7670000" />
<workItem from="1585288258489" duration="15174000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="42711000" />
<option name="totallyTimeSpent" value="50215000" />
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
<editor active="true" />
<layout>
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.16881259" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.16881259" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
@ -297,8 +323,8 @@
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Database Changes" order="8" />
<window_info anchor="bottom" id="Version Control" order="9" weight="0.24096386" />
<window_info active="true" anchor="bottom" id="Terminal" order="10" visible="true" weight="0.713253" />
<window_info anchor="bottom" id="Version Control" order="9" weight="0.4566265" />
<window_info anchor="bottom" id="Terminal" order="10" visible="true" weight="0.38795182" />
<window_info anchor="bottom" id="Event Log" order="11" side_tool="true" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
@ -319,6 +345,32 @@
</list>
</option>
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
<option name="COLUMN_ORDER">
<list>
<option value="0" />
<option value="1" />
<option value="2" />
<option value="3" />
</list>
</option>
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/forge/Version/UpdateVersion.js">
<provider selected="true" editor-type-id="text-editor">
@ -453,15 +505,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/modules/tpm/NewHeader.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="334">
@ -524,13 +567,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1049">
<caret line="64" column="45" selection-start-line="64" selection-start-column="45" selection-end-line="64" selection-end-column="45" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4777">
@ -541,31 +577,11 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="326">
<caret line="305" column="20" selection-start-line="305" selection-start-column="20" selection-end-line="305" selection-end-column="20" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.idea/workspace.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-9766" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1360">
<caret line="80" column="27" selection-start-line="80" selection-start-column="27" selection-end-line="80" selection-end-column="27" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Newfile/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="884">
@ -586,16 +602,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="237">
<caret line="137" column="24" lean-forward="true" selection-start-line="137" selection-start-column="24" selection-end-line="137" selection-end-column="24" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="444">
@ -612,16 +618,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2822">
<caret line="171" column="10" selection-start-line="171" selection-start-column="10" selection-end-line="171" selection-end-column="10" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Activity/Activity.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="354">
@ -677,63 +673,10 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-33">
<caret line="19" column="25" selection-start-line="19" selection-start-column="25" selection-end-line="19" selection-end-column="25" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="110">
<caret line="344" column="8" selection-start-line="344" selection-start-column="8" selection-end-line="352" selection-end-column="14" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="112">
<caret line="94" column="34" selection-start-line="94" selection-start-column="34" selection-end-line="94" selection-end-column="34" />
<folding>
<element signature="e#0#42#0" expanded="true" />
<element signature="e#2843#3359#0" />
<element signature="e#3376#4117#0" />
<element signature="e#4134#4538#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="268">
<caret line="114" column="13" selection-start-line="114" selection-start-column="13" selection-end-line="114" selection-end-column="13" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="381">
<caret line="296" selection-start-line="296" selection-end-line="296" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MergeDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="228">
<caret line="249" column="13" selection-start-line="249" selection-start-column="13" selection-end-line="253" selection-end-column="15" />
<state relative-caret-position="143">
<caret line="244" column="11" selection-start-line="244" selection-start-column="11" selection-end-line="244" selection-end-column="11" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
@ -743,7 +686,7 @@
<entry file="file://$PROJECT_DIR$/src/forge/Merge/MessageCount.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="63">
<caret line="538" column="27" selection-start-line="538" selection-start-column="27" selection-end-line="538" selection-end-column="27" />
<caret line="580" column="22" selection-start-line="580" selection-start-column="22" selection-end-line="580" selection-end-column="22" />
<folding>
<element signature="e#0#40#0" expanded="true" />
<element signature="e#16273#18539#0" />
@ -753,5 +696,118 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Merge/merge.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="432">
<caret line="299" column="61" selection-start-line="299" selection-start-column="61" selection-end-line="299" selection-end-column="61" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/MilepostDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-3903">
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Milepost.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-513">
<caret line="97" selection-start-line="97" selection-end-line="97" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/order.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2193">
<caret line="352" column="14" selection-start-line="352" selection-start-column="14" selection-end-line="352" selection-end-column="14" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/OrderItem.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="461">
<caret line="41" column="22" selection-start-line="41" selection-start-column="22" selection-end-line="41" selection-end-column="22" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Order/Detail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="246">
<caret line="504" column="20" selection-start-line="504" selection-start-column="20" selection-end-line="504" selection-end-column="20" />
<folding>
<element signature="e#0#40#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Version/version.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="61">
<caret line="91" column="34" selection-start-line="91" selection-start-column="34" selection-end-line="91" selection-end-column="34" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Setting.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="145" column="58" selection-start-line="145" selection-start-column="58" selection-end-line="145" selection-end-column="58" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Settings/Collaborator.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="253">
<caret line="17" column="37" lean-forward="true" selection-start-line="17" selection-start-column="37" selection-end-line="17" selection-end-column="37" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootFileDetail.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="98">
<caret line="110" column="77" selection-start-line="110" selection-start-column="67" selection-end-line="110" selection-end-column="77" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/New/Index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="199">
<caret line="245" column="59" lean-forward="true" selection-start-line="245" selection-start-column="59" selection-end-line="245" selection-end-column="59" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/forge/Main/CoderRootDirectory.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="177">
<caret line="65" column="28" lean-forward="true" selection-start-line="65" selection-start-column="28" selection-end-line="65" selection-end-column="28" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
</project>

View File

@ -1,6 +1,7 @@
import React , { Component } from 'react';
import { Link } from "react-router-dom";
import { Dropdown , Menu , Icon , Tooltip } from 'antd';
import { truncateCommitId } from '../common/util';
import './list.css'
import { branch } from 'recompose';
@ -21,7 +22,7 @@ class CoderRootBranch extends Component {
if(branchList && branchList.length>0){
return(
<React.Fragment>
<ul className="branchUl">
{
@ -32,7 +33,7 @@ class CoderRootBranch extends Component {
<Link to={`/projects/${projectsId}/coders?branch=${item.name}`} className="color-blue font-15" style={{"maxWidth":"100px"}}>{item.name}</Link>
{/*<span className="color-blue font-15">{item.name}</span>*/}
<p className="f-wrap-alignCenter">
<span className="mr5 color-blue">{item.last_commit && item.last_commit.id}</span>
<span className="mr5 color-blue">{item.last_commit && truncateCommitId(item.last_commit.id)}</span>
{/*<Link to="javascript:void(0)" className="mr5 color-blue" >{item.last_commit && item.last_commit.id}</Link>*/}
<span className="color-grey-9 hide-1 messages leftPoint">{item.last_commit && item.last_commit.message}</span>
<span className="color-grey-6 leftPoint">最后更新于{item.last_commit && item.last_commit.time_from_now}</span>
@ -40,7 +41,7 @@ class CoderRootBranch extends Component {
</div>
<span>
<Link to={`/projects/${projectsId}/merge/new`} className="mr20 operationBtn">创建合并请求</Link>
<Dropdown overlay={menu(item.zip_url,item.tar_url)} trigger={['click']} placement="bottomRight" className="operationBtn">
<a className="ant-dropdown-link">
<Tooltip title={`下载分支${item.name}`}><Icon type="cloud-download" className="font-18"/></Tooltip>
@ -75,4 +76,4 @@ class CoderRootBranch extends Component {
}
export default CoderRootBranch;
export default CoderRootBranch;

View File

@ -1,6 +1,7 @@
import React , { Component } from 'react';
import { Table , Spin } from 'antd';
import { getImageUrl } from 'educoder';
import { truncateCommitId } from '../common/util'
import SelectBranch from '../Branch/SelectBranch';
import Top from './DetailTop';
@ -92,7 +93,7 @@ class CoderRootCommit extends Component{
title:"SHA",
dataIndex: 'sha',
render: (text) => (
<span className="commitKey">{text}</span>
<span className="commitKey">{truncateCommitId(text)}</span>
)
},{
title:"备注",
@ -124,7 +125,7 @@ class CoderRootCommit extends Component{
const Pagination =()=> {
if(dataCount > limit){
return(
return(
<div className="edu-txt-center pt30 mb30">
<Pagination simple defaultCurrent={page} total={dataCount} pageSize={limit} onChange={this.ChangePage}></Pagination>
</div>
@ -153,4 +154,4 @@ class CoderRootCommit extends Component{
)
}
}
export default CoderRootCommit;
export default CoderRootCommit;

View File

@ -11,6 +11,7 @@ import CloneAddress from '../Branch/CloneAddress';
import RootTable from './RootTable';
import CoderRootFileDetail from './CoderRootFileDetail';
import NullData from './NullData';
import { truncateCommitId } from '../common/util';
import axios from 'axios';
/**
@ -233,7 +234,7 @@ class CoderRootDirectory extends Component{
</React.Fragment>
:""
}
<Link to={``} className="commitKey">{branchLastCommit.last_commit.id}</Link>
<Link to={``} className="commitKey">{truncateCommitId(branchLastCommit.last_commit.id)}</Link>
<span className="color-blue flex-1 hide-1">{branchLastCommit.last_commit.message}</span>
<span>{branchLastCommit.last_commit.time_from_now}</span>
</div>

View File

@ -4,7 +4,7 @@ import { Popconfirm, Result } from 'antd';
import './list.css';
import axios from 'axios';
import CodeMirror from 'react-codeMirror';
import CodeMirror from 'react-codemirror';
require('codemirror/lib/codemirror.css');
require('codemirror/mode/javascript/javascript');
require('codemirror/mode/xml/xml');
@ -46,7 +46,7 @@ class CoderRootFileDetail extends Component{
}
// 编辑文件
changeMmirror=(e,e1,value)=>{
this.setState({
value
@ -108,7 +108,7 @@ class CoderRootFileDetail extends Component{
render(){
const { detail , current_user , isManager , isReporter , isDeveloper } = this.props;
const { readOnly ,value } = this.state;
let flag = current_user && current_user.login && (isManager || isReporter);
let flag = current_user && current_user.login && (isManager || isDeveloper);
var options = {
lineNumbers: true,
mode: 'javascript',
@ -166,4 +166,4 @@ class CoderRootFileDetail extends Component{
}
}
export default CoderRootFileDetail;
export default CoderRootFileDetail;

View File

@ -242,14 +242,16 @@ class Detail extends Component{
const { project_id } = this.state;
const url = `/projects/${project_id}/forks.json`;
axios.post(url).then(result=>{
if(result && result.data.status === 0){
this.props.history.push(`/projects/${result.data.id}/coders`);
this.props.showNotification(result.data.message);
this.setState({
if (result) {
if (result.data.status === 0) {
this.props.history.push(`/projects/${result.data.id}/coders`);
}
this.setState({
isSpin:false
})
}else{
this.props.showNotification(result.data.message);
this.props.showNotification(result.data.message);
} else {
this.props.showNotification(`服务器开小差了`);
}
}).catch(error=>{
console.log(error);

View File

@ -290,10 +290,11 @@ class Index extends Component{
required: true, message: '请填写仓库名称'
}],
})(
<Input placeholder="请输入仓库名称"/>
<Input placeholder="仓库名称请使用简单、深刻和独特的关键字"/>
)}
</Form.Item>
<p className="formTip">好的存储库名称使用简单深刻和独特的关键字</p>
{/*<p className="formTip">好的存储库名称使用简单、深刻和独特的关键字</p>*/}
{/* <div className="newContent_inline"> */}
<Form.Item
label="项目类别"
>

View File

@ -504,7 +504,7 @@ class Detail extends Component{
value={ data && data.description}
/> */}
{data&&data.description===""?<span className="color-grey-9 ml3 mr3">没有描述</span>:this.commentCtx(data && data.description)}
{data&&data.description&&(data.description.length > 0)?this.commentCtx(data.description): <span className="color-grey-9 ml3 mr3">没有描述</span>}
</div>
{
data && data.attachments && data.attachments.length > 0 ?

View File

@ -75,7 +75,7 @@ class Milepost extends Component{
updatestatusemile=(status,arr)=>{
const { projectsId } = this.props.match.params;
const url = `/projects/${projectsId}/versions/${arr.id}/update_status`;
const url = `/projects/${projectsId}/versions/${arr.id}/update_status.json`;
const { current_user } = this.props;
axios.post(url,{
project_id:projectsId,
@ -98,7 +98,7 @@ class Milepost extends Component{
closemile=(arr)=>{
const { projectsId } = this.props.match.params;
const url = `/projects/${projectsId}/versions/${arr.id}`;
const url = `/projects/${projectsId}/versions/${arr.id}.json`;
axios.delete(url,{ data: {
project_id: projectsId,
id: arr.id

6
src/forge/common/util.js Normal file
View File

@ -0,0 +1,6 @@
export function truncateCommitId(str) {
if (str.length > 11) {
return str.substring(0, 10)
}
}

View File

@ -11,7 +11,7 @@ import Tree, { TreeNode } from 'rc-tree';
import 'rc-tree/assets/index.css';
import classNames from 'classnames'
// import CodeMirror from 'react-codeMirror'
// import CodeMirror from 'react-codemirror'
import axios from 'axios'
import _ from 'lodash'
@ -52,12 +52,12 @@ class CodeRepositoryView extends Component {
}
componentDidUpdate(prevProps, prevState, snapshot) {
const { game, challenge, hide_code, tabIndex, } = this.props
if ( // 初始化 或者 game切换
!this.treeExpanded && challenge.path && challenge.path.length && this.state.expandedKeys.length === 0 ||
game && (!prevProps.game
!this.treeExpanded && challenge.path && challenge.path.length && this.state.expandedKeys.length === 0 ||
game && (!prevProps.game
|| prevProps.game.identifier !== this.props.game.identifier) ) {
if (!this.treeExpanded) {
this.treeExpanded = true
const _path = challenge.multiPath ? challenge.path[0] : challenge.path;
@ -77,8 +77,8 @@ class CodeRepositoryView extends Component {
})
}
if (game && (!prevProps.game
|| prevProps.game.identifier !== this.props.game.identifier)) {
if (game && (!prevProps.game
|| prevProps.game.identifier !== this.props.game.identifier)) {
// 切换关卡时切换到第一个tab
// 如果隐藏code tab就只有一个ssh tab了
if (hide_code == true) {
@ -90,12 +90,12 @@ class CodeRepositoryView extends Component {
}
}
componentDidMount() {
componentDidMount() {
// 隐藏code tab则显示ssh tab81
if (this.props.hide_code === true) {
this.tabIndexChange(81)
}
//显示所有代码文件
$(".code-file-tab").hover(function(){
// var ulwidth=$("#blacktab_nav").width();
@ -119,22 +119,22 @@ class CodeRepositoryView extends Component {
const expandedKeys = this.state.expandedKeys.slice(0)
const _index = expandedKeys.indexOf(selectedKeys[0]);
if (_index == -1) {
expandedKeys.push(selectedKeys[0])
expandedKeys.push(selectedKeys[0])
} else {
expandedKeys.splice( _index, 1)
}
this.setState({ expandedKeys })
}
this.props.onTreeSelect(selectedKeys, info)
}
}
buildTree() {
// TODO http://localhost:3007/tasks/xgffnuomytpj 这个实训没有文件树
const { fileTreeData, onLoadData, fileTreeSelectedKeys } = this.props;
if (!fileTreeData || fileTreeData.length === 0) {
return ""
}
const loop = (data) => {
return data.map((item) => {
@ -147,8 +147,8 @@ class CodeRepositoryView extends Component {
});
};
const treeNodes = loop(fileTreeData);
// selectable={false}
return (
<Tree
@ -190,15 +190,15 @@ class CodeRepositoryView extends Component {
var domArray = [];
const pathArray = path.forEach ? path : [path]
pathArray.forEach( (item, index) => {
domArray.push(
domArray.push(
<p key={index} className={classNames({'blue-line': pathIndex == index})} onClick={ () => this.onPathChange(index, true) } >
{item}
{item}
</p> )
})
return (
<div className="codefile-all pl10">
{domArray}
{domArray}
</div>
)
}
@ -209,11 +209,11 @@ class CodeRepositoryView extends Component {
axios.get(url,
{
// withCredentials: true
}
).then((response) => {
}
).then((response) => {
tabIndex && $(`#codetab_con_${tabIndex}`).html('') // 清空 ‘正在连接命令行服务...
if (response.data.game_id) {
if (response.data.game_id) {
// 重置ssh状态
this.setSSHClosed(false);
@ -227,7 +227,7 @@ class CodeRepositoryView extends Component {
var line_h = (navigator.userAgent.indexOf('Chrome') >= 0 ? 18 : 19);
var rows = Math.round(h / line_h);
var cols = parseInt(w / 9.9);
response.data.width = w;
response.data.height = h;
response.data.line_h = line_h;
@ -237,7 +237,7 @@ class CodeRepositoryView extends Component {
// this.loadSshInIframe( response.data, tabIndex )
this.loadSshNormal(response.data, tabIndex, isReInit)
}
// console.log(response)
}).catch((error) => {
@ -257,7 +257,7 @@ class CodeRepositoryView extends Component {
// $(".game_webssh").css({"min-height":h, "max-height":h});
const container = $(`#codetab_con_${tabIndex}`);
// ReactDOM.unmountComponentAtNode(container)
// ReactDOM.render(<Webssh {...data}
// ReactDOM.render(<Webssh {...data}
// ></Webssh>, container);
// this.setState({
// sshData: data
@ -273,7 +273,7 @@ class CodeRepositoryView extends Component {
, height, width, line_h, rows, cols, } = data
let _domain = webssh_url || 'https://webssh.educoder.net';
// window.location.host === "www.educoder.net" ?
// window.location.host === "www.educoder.net" ?
// 'https://webssh.educoder.net'
// : 'https://testwebssh.educoder.net'
const html = `<iframe src="${_domain}/?Host=${host}&amp;Port=${port}&amp;Username=${username}&amp;Password=${password}&amp;Gameid=${game_id}&amp;Rows=${rows}&amp;Tab=81&amp;Columns=${cols}&amp;Width=${width}&amp;Height=${height}" style="width: 100%; border: 0px; min-height: 454px; max-height: 454px; " scrolling="no" id="game_webssh" class="game_webssh"></iframe>`
@ -286,9 +286,9 @@ class CodeRepositoryView extends Component {
if ($(`#codetab_con_${index} .terminal.xterm`).length === 1) { // 已经初始化过了
return;
}
this.initSsh($, index);
}
/** multi ssh */
setSSHClosed = (isClose) => {
@ -318,7 +318,7 @@ class CodeRepositoryView extends Component {
close_ssh_cocket_iframe = (id) => {
/*
关闭连接清空tab content
*/
*/
let _w = $(`.game_webssh_${id}`)[0].contentWindow
_w && _w.postMessage({tp: 'close_ssh_cocket'}, "*");
$(`#codetab_con_${id}`).html('')
@ -326,7 +326,7 @@ class CodeRepositoryView extends Component {
close_ssh_cocket_normal = (id) => {
/*
关闭连接清空tab content
*/
*/
// let _w = $(`.game_webssh_${id}`)[0].contentWindow
// _w && _w.postMessage({tp: 'close_ssh_cocket'}, "*");
// $(`#codetab_con_${id}`).html('')
@ -338,7 +338,7 @@ class CodeRepositoryView extends Component {
this.tabIndexChange(STABLE_SSH_TAB_ID)
this.setState({ addtionalSSHArray })
// game_webssh_${tabIndex} TODO
this.close_ssh_cocket_normal(id)
e.stopPropagation();
}
@ -379,7 +379,7 @@ class CodeRepositoryView extends Component {
width={300}
open={drawerOpen}
onClose={() => showFilesDrawer( false )}
>
{ loadingFirstRepoFiles ? (
@ -390,7 +390,7 @@ class CodeRepositoryView extends Component {
</Drawer>
<ul id="blacktab_nav" className="">
{ hide_code === false && <li id="codetab_nav_1" className={classNames('code-file-tab', 'eud-pointer', 'pr', 'blacktab_nomal', {'blacktab_hover':tabIndex===0 })} onClick={() => tabIndexChange(0)}>
<a href="javascript:void(0);" className={classNames('tab_type', 'tab_color', {'fl': challenge.pathIndex === -1 || challenge.multiPath === true } )}>代码文件</a>
@ -402,23 +402,23 @@ class CodeRepositoryView extends Component {
</div>
</React.Fragment>
: "" }
</li> }
{shixun.webssh !== 0 &&
<li id="codetab_nav_2" data-tab="2" className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===STABLE_SSH_TAB_ID })}
{shixun.webssh !== 0 &&
<li id="codetab_nav_2" data-tab="2" className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===STABLE_SSH_TAB_ID })}
onClick={() => this.tabIndexChange(STABLE_SSH_TAB_ID)}>
<a href="javascript:void(0);" className="tab_type tab_color">命令行</a>
</li> }
{
{
addtionalSSHArray.map( (item, index) => {
return (<li id={`codetab_nav_${item}`} data-tab={item}
className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===item })}
return (<li id={`codetab_nav_${item}`} data-tab={item}
className={classNames('add-webssh', 'blacktab_nomal', {'blacktab_hover':tabIndex===item })}
onClick={() => this.tabIndexChange(item)}>
<a href="javascript:void(0);" className="tab_type tab_color">命令行{index + 1}</a>
<Tooltip title={ "关闭该命令行窗口"} disableFocusListener={true}>
<i class="anticon anticon-close ant-tabs-close-x" onClick={(e) => this.onSSHTabClose(item, e)}>
<svg viewBox="64 64 896 896" class="" data-icon="close" width="1em" height="1em"
<svg viewBox="64 64 896 896" class="" data-icon="close" width="1em" height="1em"
fill="currentColor" aria-hidden="true">
<path d="M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 0 0 203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z"></path>
</svg>
@ -429,7 +429,7 @@ class CodeRepositoryView extends Component {
}
{/* */}
{ shixun.webssh !== 0 && shixun.multi_webssh == true && addtionalSSHArray.length < totalAddtionalTabCount
{ shixun.webssh !== 0 && shixun.multi_webssh == true && addtionalSSHArray.length < totalAddtionalTabCount
&& sshIsClosed === false && <li id="codetab_nav_add" className="c_white" style={{paddingLeft:'10px'}}>
<Tooltip title={ "新开命令行窗口"} disableFocusListener={true}>
<a href="javascript:void(0);" className="tab_type tab_color"
@ -437,32 +437,32 @@ class CodeRepositoryView extends Component {
></a>
</Tooltip>
</li> }
{ tabIndex === 0 && <h3 id="save_status" className="ml15 mt7 fl color-grey font-14" style={{fontWeight: 'normal'}}>
{codeStatus === 0 ? '已修改' : (codeStatus === 1 ? '保存中...' : '已保存' ) }
</h3> }
<div className="fr -horizontal">
{ /**/ }
{
<WebSSHTimer game={game} showTimerProp={this.isSSHTabIndex()}
{
<WebSSHTimer game={game} showTimerProp={this.isSSHTabIndex()}
reInitSsh={this.initSsh} setSSHClosed={this.setSSHClosed}></WebSSHTimer>
}
{ showUpdateButton &&
<React.Fragment>
<a className="iconButton" onClick={()=>{ onShowUpdateDialog() }}>
<Tooltip title={ "更新通知"} disableFocusListener={true}>
<i className="iconfont icon-gonggao font-20 "></i>
</Tooltip>
</a>
<span className="dot"></span>
</React.Fragment>
}
{ !shixun.code_hidden && tabIndex === 0 &&
{ !shixun.code_hidden && tabIndex === 0 &&
<a className="iconButton" onClick={showFilesDrawer.bind(this, true)} >
<Tooltip title={ "文件目录"} disableFocusListener={true}>
<i className="iconfont icon-wenjian font-18 "></i>
@ -471,10 +471,10 @@ class CodeRepositoryView extends Component {
}
<span id="return_last_code">
</span>
</span>
{ challenge.pathIndex !== -1 && game.status === 2 && tabIndex === 0 &&
this.props.readRepoTimeout !== true &&
{ challenge.pathIndex !== -1 && game.status === 2 && tabIndex === 0 &&
this.props.readRepoTimeout !== true &&
<a href="javascript:void(0);" className="iconButton" id="reset_success_game_code" onClick={showResetPassedCodeDialog}>
<Tooltip title={ "加载上次通过的代码"} disableFocusListener={true}>
<i className="iconfont icon-fanhuishangcidaima font-20 "></i>
@ -483,7 +483,7 @@ class CodeRepositoryView extends Component {
}
{
challenge.pathIndex !== -1 && tabIndex === 0 && this.props.readRepoTimeout !== true &&
challenge.pathIndex !== -1 && tabIndex === 0 && this.props.readRepoTimeout !== true &&
<a href="javascript:void(0);" className="iconButton" id="reset_game_code" onClick={showResetCodeDialog}>
<Tooltip title={ "恢复初始代码"} disableFocusListener={true}>
<i className="iconfont icon-zhongzhi font-20 "></i>
@ -492,41 +492,41 @@ class CodeRepositoryView extends Component {
}
{
tabIndex === 0 && this.props.readRepoTimeout !== true &&
tabIndex === 0 && this.props.readRepoTimeout !== true &&
<a href="javascript:void(0);" className="iconButton" id="setting" onClick={() => showSettingDrawer(true)}>
<Tooltip title={ "设置"} disableFocusListener={true}>
<i className="iconfont icon-shezhi " style={{fontSize: '19px'}}></i>
</Tooltip>
</a>
}
<a href="javascript:void(0);" className="mr15 iconButton" onClick={onRepositoryViewExpand} id="extend_and_zoom">
<Tooltip id="tooltip-icon-expand" title={ evaluateViewExpanded ? "收起" : "展开"}>
{/*<i className="fa font-16 fa-expand"></i>*/}
<i className={ evaluateViewExpanded ? "font-18 iconfont icon-shousuo" : "iconfont icon-zhankai font-18" }></i>
</Tooltip>
</a>
</div>
<div className="cl"></div>
</ul>
<div className="cl"></div>
<div id="codetab_con_1" style={{display: 'block', flex: 'auto'}} style={ tabIndex === 0 ? {display: 'block'} : {display: 'none'} }>
{/* 没必要显示这个,注释掉了 */}
{/* { !isEditablePath &&
{/* { !isEditablePath &&
<Tooltip title={ "当前文件路径(只读)"}>
<div className="codePath">
{currentPath}
</div>
</div>
</Tooltip>
} */}
{this.props.readRepoTimeout === true ? <div className="readRepoFailed">
代码加载失败<a className="retry"
代码加载失败<a className="retry"
onClick={() => this.props.fetchRepositoryCode(this.props, null, null, true, true)}>重试</a>
</div> :
<React.Fragment>
<div className="codemirrorBackground"
<div className="codemirrorBackground"
style={{ backgroundImage: `url('${notEditablePathImg}')`
, display: (isEditablePath || this.props.shixun && this.props.shixun.code_edit_permission ? 'none' : 'block') }}></div>
{/*<textarea className = "" id="extend-challenge-file-edit" name="content">{repositoryCode}</textarea>*/}
@ -536,17 +536,17 @@ class CodeRepositoryView extends Component {
</React.Fragment>
}
</div>
<div id="codetab_con_81" className="undis -relative"
<div id="codetab_con_81" className="undis -relative"
style={ { color: '#fff', display: tabIndex === STABLE_SSH_TAB_ID ? 'block' : 'none', 'marginLeft': '2px'} }>
{/* { tabIndex === STABLE_SSH_TAB_ID && this.state.sshData && <Webssh {...this.state.sshData} ></Webssh> } */}
</div>
<div id="codetab_con_82" className="undis -relative"
<div id="codetab_con_82" className="undis -relative"
style={ { color: '#fff', display: tabIndex === 82 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px' } }>
</div>
<div id="codetab_con_83" className="undis -relative"
<div id="codetab_con_83" className="undis -relative"
style={ { color: '#fff', display: tabIndex === 83 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px'} }>
</div>
<div id="codetab_con_84" className="undis -relative"
<div id="codetab_con_84" className="undis -relative"
style={ { color: '#fff', display: tabIndex === 84 ? 'block' : 'none', 'marginLeft': '2px', 'paddingBottom': '30px'} }>
</div>
<div id="codetab_con_3" className="undis -relative" style={{display: 'none'}}></div>
@ -554,13 +554,13 @@ class CodeRepositoryView extends Component {
);
}
}
/*
/*
<%= Redmine::CodesetUtil.replace_invalid_utf8(@content) %>
, overflow: 'scroll' ref="editor"
, overflow: 'scroll' ref="editor"
<CodeMirror style={{height: '100%'}} value={repositoryCode} onChange={onRepositoryCodeUpdate} options={cmOptions} />
<iframe src="https://testwebssh.educoder.net/?Host=10.9.81.28&amp;Port=44940&amp;Username=root&amp;Password=123123&amp;Gameid=2618&amp;Rows=24&amp;Tab=2"
<iframe src="https://testwebssh.educoder.net/?Host=10.9.81.28&amp;Port=44940&amp;Username=root&amp;Password=123123&amp;Gameid=2618&amp;Rows=24&amp;Tab=2"
style={{width: '100%', border: '0px', minHeight: '440px', maxHeight: '440px'}} scrolling="no" id="game_webssh" className="game_webssh"></iframe>
*/
export default CodeRepositoryView;
export default CodeRepositoryView;

View File

@ -1,6 +1,6 @@
import React, { Component } from 'react';
import CodeMirror from 'react-codeMirror'
import CodeMirror from 'react-codemirror'
require('codemirror/lib/codemirror.css');
require('codemirror/mode/javascript/javascript');
@ -28,13 +28,13 @@ class TestCodeMirror extends Component {
componentDidMount() {
var readOnlyLines = [0,1,2,3,8];
this.refs.editor.getCodeMirror().on('beforeChange',function(cm,change) {
console.log('change.from.line', change.from.line)
if ( readOnlyLines.indexOf(change.from.line) !== -1
if ( readOnlyLines.indexOf(change.from.line) !== -1
// 有问题:如果用回车将有内容的行挤到不可编辑的行,那么无法删除掉不可编辑行里的内容了
// 解决办法:将所需的行数固定写好,禁用掉回车键。
// || change.from.line > ( readOnlyLines[readOnlyLines.length -1] + 1 )
// || change.from.line > ( readOnlyLines[readOnlyLines.length -1] + 1 )
) {
change.cancel();
}
@ -60,4 +60,4 @@ class TestCodeMirror extends Component {
}
}
export default TestCodeMirror;
export default TestCodeMirror;