diff --git a/package-lock.json b/package-lock.json
index f0a4ed0fc..be7f27fb4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -172,7 +172,7 @@
"dependencies": {
"jsesc": {
"version": "2.5.2",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/jsesc/-/jsesc-2.5.2.tgz",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
}
}
@@ -245,7 +245,7 @@
"dependencies": {
"chalk": {
"version": "2.4.2",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/chalk/-/chalk-2.4.2.tgz",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
@@ -341,12 +341,12 @@
},
"globals": {
"version": "11.12.0",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/globals/-/globals-11.12.0.tgz",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
},
"ms": {
"version": "2.1.2",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/ms/-/ms-2.1.2.tgz",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
@@ -7248,7 +7248,7 @@
},
"promise": {
"version": "7.3.1",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/promise/-/promise-7.3.1.tgz",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
@@ -9677,7 +9677,7 @@
},
"chalk": {
"version": "2.4.2",
- "resolved": "http://173.15.15.82:8081/repository/npm-all/chalk/-/chalk-2.4.2.tgz",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
diff --git a/src/forge/About/Index.jsx b/src/forge/About/Index.jsx
index 7f1222de1..7d544f78d 100644
--- a/src/forge/About/Index.jsx
+++ b/src/forge/About/Index.jsx
@@ -14,9 +14,10 @@ function Index(props){
const [ content , setContent ] = useState(undefined);
const [ edit , setEdit ] = useState(false);
const [ fileList , setFileList ] = useState(undefined);
- const [ editOpration , setEditOpration ] = useState(false);
+ // const [ editOpration , setEditOpration ] = useState(false);
const { owner , projectsId } = props.match.params;
const { isManager , isDeveloper , current_user, projectDetail } = props;
+ const editOpration = current_user && current_user.login && isManager
useEffect(()=>{
if(owner && projectsId && projectDetail){
@@ -25,11 +26,11 @@ function Index(props){
}
},[owner,projectsId, projectDetail])
- useEffect(()=>{
- if( (current_user && current_user.login) && (isManager === true || isDeveloper === true)){
- setEditOpration(true);
- }
- },[isManager , isDeveloper])
+ // useEffect(()=>{
+ // if( (current_user && current_user.login) && (isManager === true || isDeveloper === true)){
+ // setEditOpration(true);
+ // }
+ // },[isManager , isDeveloper])
function Init(){
const url = `/${owner}/${projectsId}/about.json`;
axios.get(url).then(result=>{
diff --git a/src/forge/Information/Component/mobile/accessory.jsx b/src/forge/Information/Component/mobile/accessory.jsx
index a505727f6..28d04bd37 100644
--- a/src/forge/Information/Component/mobile/accessory.jsx
+++ b/src/forge/Information/Component/mobile/accessory.jsx
@@ -1,5 +1,7 @@
import React from 'react';
import './index.scss';
+import publicImg from '../../img/gitlink-gz.png';
+import qqImg from '../../img/gitlink-qq.png';
function acce({type}){
return(
@@ -14,11 +16,11 @@ function acce({type}){
欢迎加入GitLink!
-
-
+
开源发展委员会
公众号
-
-
+
GitLink官方
QQ群
diff --git a/src/forge/Information/Component/mobile/index.scss b/src/forge/Information/Component/mobile/index.scss
index 24dd816f5..da7ae84e2 100644
--- a/src/forge/Information/Component/mobile/index.scss
+++ b/src/forge/Information/Component/mobile/index.scss
@@ -50,6 +50,7 @@
width: 7em;
height: 7em;
margin-bottom: 0.8em;
+ border-radius: 3px;
}
span{
display: block;
diff --git a/src/forge/Information/img/gitlink-gz-old.png b/src/forge/Information/img/gitlink-gz-old.png
new file mode 100644
index 000000000..4553490ac
Binary files /dev/null and b/src/forge/Information/img/gitlink-gz-old.png differ
diff --git a/src/forge/Information/img/gitlink-gz.png b/src/forge/Information/img/gitlink-gz.png
index 4553490ac..56ab54589 100644
Binary files a/src/forge/Information/img/gitlink-gz.png and b/src/forge/Information/img/gitlink-gz.png differ
diff --git a/src/forge/Information/img/gitlink-qq-old.png b/src/forge/Information/img/gitlink-qq-old.png
new file mode 100644
index 000000000..bc243e433
Binary files /dev/null and b/src/forge/Information/img/gitlink-qq-old.png differ
diff --git a/src/forge/Information/img/gitlink-qq.png b/src/forge/Information/img/gitlink-qq.png
index bc243e433..d3c3bd579 100644
Binary files a/src/forge/Information/img/gitlink-qq.png and b/src/forge/Information/img/gitlink-qq.png differ
diff --git a/src/forge/Issues/Component/newPanel.jsx b/src/forge/Issues/Component/newPanel.jsx
index 67a02943f..babab11dc 100644
--- a/src/forge/Issues/Component/newPanel.jsx
+++ b/src/forge/Issues/Component/newPanel.jsx
@@ -16,8 +16,8 @@ function NewPanel(props,ref){
const { form: { getFieldDecorator, validateFields , setFieldsValue } } = props;
useState(()=>{
- title && setTimeout(()=>{
- setFieldsValue({subject:title});
+ setTimeout(()=>{
+ title && setFieldsValue({subject:title});
desc && onContentChange(desc);
},100)
files && setAttachments(files);
diff --git a/src/forge/Main/tree/Index.jsx b/src/forge/Main/tree/Index.jsx
index 0faf9fd36..8b6a1b473 100644
--- a/src/forge/Main/tree/Index.jsx
+++ b/src/forge/Main/tree/Index.jsx
@@ -3,7 +3,7 @@ import CopyTool from '../../Component/CopyTool';
import { truncateCommitId } from '../../common/util';
import { Link } from 'react-router-dom';
import { getImageUrl , turnbar } from 'educoder';
-import { Button, Dropdown , Input, Menu , message, Modal, Select, Spin, Table, Tooltip , Radio } from 'antd';
+import { Button, Dropdown , Input, Menu , message, Modal, Select, Spin, Table, Tooltip , Radio , Popover } from 'antd';
import Modals from '../../Component/PublicModal/Index';
import './Index.scss';
@@ -34,7 +34,7 @@ function Index(props) {
const { projectsId , owner } = props.match.params;
const { isManager , isDeveloper , projectDetail , defaultBranch, getDetail } = props;
useEffect(()=>{
- getList(chooseStatus);
+ getList();
},[name, reload, pageSize, current,chooseStatus])
useEffect(()=>{
@@ -131,9 +131,13 @@ function Index(props) {
width: "300px",
className: "branchActionColumn",
render: (txt, item,key) => {
- console.log("-----:",item.is_deleted);
return (
- item.is_deleted ? :
+ item.is_deleted ?
+
+
将基于 Commits{truncateCommitId(item.commit_id)}创建分支}>
+
+
+
:
{
(isManager || isDeveloper) && (projectDetail && projectDetail.type!==2) &&
@@ -166,7 +170,7 @@ function Index(props) {
})
}
- function getList(state) {
+ function getList() {
const url = `/v1/${owner}/${projectsId}/branches.json`;
Axios.get(url,{
params:{
@@ -303,7 +307,13 @@ function Index(props) {
className='branchListTable'
dataSource={list}
columns={columns}
- pagination={{current: current, pageSize: pageSize, total: total, showSizeChanger: true, onShowSizeChange:onShowSizeChange, showQuickJumper: true, onChange: changePage}}
+ pagination={{current: current,
+ pageSize: pageSize,
+ total: total,
+ showSizeChanger: true,
+ onShowSizeChange:onShowSizeChange,
+ showQuickJumper: true, onChange: changePage,hideOnSinglePage:true
+ }}
>
{/* {
@@ -386,7 +396,7 @@ function Index(props) {
>
-
确定删除{visible.name}分支?
+
删除分支,本操作将会关闭已开启的Pull Request
{
if (!err) {
- let regEn = /[\\/:*?"<>|[\]-]/g;
- if (regEn.test(values.title)) {
- message.error('文件名不能有特殊字符: \\ / : * ? \" < > | [ \] -');
- setOperateFlag(false);
- return;
- }
const {md_content, title} = values;
if (wikiName && search!== "?copy") {
updateWiki({
@@ -130,7 +124,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail,
projectId: project.id,
pageName: wikiName,
title,
- commit_message: '',
+ message: '',
content_base64: Base64.encode(md_content)
}).then(res => dealRes(res, title));
} else {
@@ -223,7 +217,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail,
projectId: project.id,
pageName: '_Sidebar',
title: '_Sidebar',
- commit_message: '',
+ message: '',
content_base64: Base64.encode(content)
}).then(res => {
if (res && res.message === "200") {
@@ -333,7 +327,7 @@ export default Form.create()(({ form, history, showNotification, projectDetail,
"title",
[
{ required: true, message: "请输入标题" },
- // { pattern: /[^`\[\]\/:*?''<>|%-+_]/g, message: '不允许部分特殊字符' }
+ { pattern: /^(?!-).*$/, message: '不能以-开头' }
],
{
project && checkItem.name && getWiki({
owner: owner,
repo: projectsId,
- pageName: checkItem.name,
+ pageName: checkItem.sub_url,
projectId: project.id
}).then(res => {
if (res && res.message === "200") {
@@ -190,11 +190,6 @@ export default (props) => {
setAddMenuError("不能仅输入空格");
return;
}
- const regEn = /[\\/:*?"<>|[\]-]/g;
- if (regEn.test(menuName)) {
- setAddMenuError("不能有特殊字符: \\ / : * ? \" < > | [ \] -");
- return;
- }
// 校验一级目录中是否有相同名称
const oneMenuList = fileList.filter(item=>!item.title.trim().startsWith('[[')).map(i=>i.title.trim())
if(oneMenuList.includes(`- ${menuName}`)){
@@ -215,7 +210,7 @@ export default (props) => {
projectId: project.id,
pageName: '_Sidebar',
title: '_Sidebar',
- commit_message: '',
+ message: '',
content_base64: Base64.encode(treeToMd(sidebarList))
}).then(res => {
if (res && res.message === "200") {
@@ -233,7 +228,7 @@ export default (props) => {
}
function goEdit(params) {
- history.push(`/${owner}/${projectsId}/wiki/${encodeURI(checkItem.name)}/${checkItem.key}/edit${params}`);
+ history.push(`/${owner}/${projectsId}/wiki/${encodeURI(checkItem.sub_url)}/${checkItem.key}/edit${params}`);
}
function preview() {
diff --git a/src/forge/Wiki/Preview.jsx b/src/forge/Wiki/Preview.jsx
index b36b1946f..2b700f60c 100644
--- a/src/forge/Wiki/Preview.jsx
+++ b/src/forge/Wiki/Preview.jsx
@@ -63,7 +63,7 @@ export default (props) => {
projectsId && checkItem.name && getWiki({
owner: owner,
repo: projectsId,
- pageName: checkItem.name,
+ pageName: checkItem.sub_url,
projectId: projectId,
}).then(res => {
if (res && res.message === "200") {
diff --git a/src/forge/Wiki/api.js b/src/forge/Wiki/api.js
index 66425e0fb..2250ec5f4 100644
--- a/src/forge/Wiki/api.js
+++ b/src/forge/Wiki/api.js
@@ -116,13 +116,16 @@ export function markdownToTree(markdownText){
lines.map((item, index) =>{
const title = item.trim();
const isFile = title.startsWith('[[') && title.endsWith(']]');
+ const titleStr = isFile ? title.substring(2, title.length - 2) : title.substring(2, title.length)
const node = {
// 带空格+[[]]或者- 标识
title: item,
children: [],
key: undefined,
// 纯内容
- titleStr: isFile ? title.substring(2, title.length - 2) : title.substring(2, title.length),
+ titleStr,
+ // 编码后的title,获取wiki内容用title_sub
+ title_sub: encodeURIComponent(titleStr),
// 是否是wiki文件
isFile: isFile
}
diff --git a/src/forge/Wiki/components/sidebar/index.jsx b/src/forge/Wiki/components/sidebar/index.jsx
index 794ecbabc..d7046edb0 100644
--- a/src/forge/Wiki/components/sidebar/index.jsx
+++ b/src/forge/Wiki/components/sidebar/index.jsx
@@ -163,7 +163,7 @@ export default function Sidebar(props) {
const {node, children, key} = item;
if(isFile){
// 删除页面
- deleteWiki({owner: owner, repo: projectsId, projectId: project.id, pageName: title}).then(res => {
+ deleteWiki({owner: owner, repo: projectsId, projectId: project.id, pageName: item.title_sub}).then(res => {
if(res && res.message === "204"){
// 递归过滤相同key值的节点,执行删除操作
const menuListByDel = findSameKeyByDel(menuList, key);
@@ -267,7 +267,7 @@ export default function Sidebar(props) {
projectId: project.id,
pageName: '_Sidebar',
title: '_Sidebar',
- commit_message: '',
+ message: '',
content_base64: Base64.encode(content)
}).then(res => {
if (res && res.message === "200") {
@@ -303,20 +303,18 @@ export default function Sidebar(props) {
e.stopPropagation();
setVisible(item);
setIsEditName(type);
- let title = item.title.trim();
- const isFile = title.startsWith('[[') && title.endsWith(']]');
- title = isFile ? title.substring(2,title.length-2) : title.substring(2, title.length);
+ const {titleStr, title_sub} = item;
type === 2 && getWiki({
owner: owner,
repo: projectsId,
- pageName: title,
+ pageName: title_sub,
projectId: project.id
}).then(res => {
if (res && res.message === "200") {
setWikiContent(res.data.md_content);
}
})
- setMenuName(title);
+ setMenuName(titleStr);
}
// 新增子目录 或者 重命名目录
@@ -329,9 +327,8 @@ export default function Sidebar(props) {
setAddMenuError("不能仅输入空格");
return;
}
- const regEn = /[\\/:*?"<>|[\]-]/g;
- if (regEn.test(menuName)) {
- setAddMenuError('不能有特殊字符: \\ / : * ? \" < > | [ \] -');
+ if (isEditName === 2 && /^-/.test(menuName)) {
+ setAddMenuError('不能以-开头');
return;
}
if(!isEditName){
@@ -356,14 +353,15 @@ export default function Sidebar(props) {
}else{
// isEditName 1 编辑目录名称 2编辑页面名称
const titleToJudge = isEditName === 2 ? `[[${menuName}]]` : `- ${menuName}`;
- const {title, key} = visible;
- if(title.trim() === titleToJudge){
+ const {key, titleStr, title_sub} = visible;
+ // 判断是否有修改名称
+ if(titleStr === menuName){
setAddMenuError("请修改名称");
return
}
// 找兄弟节点
const list = findBrotherNodesByKey(menuList, key) || [];
- if(list.map(item=>item.title.trim()).includes(titleToJudge)){
+ if(list.map(item=>item.titleStr).includes(menuName)){
setAddMenuError("不能与同级目录名称相同");
return
}
@@ -381,17 +379,16 @@ export default function Sidebar(props) {
})
if(isEditName === 2){
// 编辑页面名称-> 修改wiki
- const oldTitle = title.substring(title.indexOf('[[')+2, title.indexOf(']]'))
updateWiki({
owner,
repo: projectsId,
projectId: project.id,
// 原名称
- pageName: oldTitle,
+ pageName: title_sub,
// 现名称
title: menuName,
content_base64: wikiContent,
- commit_message: '',
+ message: '',
}).then(res=>{
if(res && res.message === '200'){
// 修改wiki名称接口请求成功,更新sidebar
diff --git a/src/forge/Wiki/components/uploadWiki/index.jsx b/src/forge/Wiki/components/uploadWiki/index.jsx
index 4113752dd..30cfe492c 100644
--- a/src/forge/Wiki/components/uploadWiki/index.jsx
+++ b/src/forge/Wiki/components/uploadWiki/index.jsx
@@ -59,10 +59,8 @@ export default function UploadWiki(props) {
message.error('只能上传md、txt文件');
return false;
}
-
- let regEn = /[\\/:*?"<>|[\]-]/g;
- if (regEn.test(file.name)) {
- message.error('文件名不能有特殊字符: \\ / : * ? \" < > | [ \] -');
+ if (/^-/.test(file.name)) {
+ message.error('文件名不能以-开头');
return false;
}
@@ -86,7 +84,7 @@ export default function UploadWiki(props) {
projectId: project.id,
pageName: '_Sidebar',
title: '_Sidebar',
- commit_message: '',
+ message: '',
content_base64: Base64.encode(treeToMd(sidebarList))
}).then(res => {
if (res && res.message === "200") {
diff --git a/src/modules/courses/css/Courses.css b/src/modules/courses/css/Courses.css
index d46ec88e9..002ec1313 100644
--- a/src/modules/courses/css/Courses.css
+++ b/src/modules/courses/css/Courses.css
@@ -2139,7 +2139,8 @@ input.ant-input-number-input:focus {
}
/* md代码类样式渲染 */
-.new_li .markdown-body ul>li ,.markdown-body ul>li {
+/* issues/3984: ,.markdown-body ul>li */
+.new_li .markdown-body ul>li {
list-style-type: disc !important;
margin-bottom: 0 !important;
white-space: pre-wrap;