From 2b599398e289a7d02c7646a0dd0806c5bcaccb62 Mon Sep 17 00:00:00 2001 From: yangjian Date: Sat, 11 Apr 2020 22:14:27 +0800 Subject: [PATCH] =?UTF-8?q?v0.4.1=20=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E7=89=88=E6=9C=AC=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B7=E5=BC=8F=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BA=A4=E4=BA=92=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGES.md | 7 + MrDoc/settings.py | 2 +- README.md | 43 +- app_doc/migrations/0018_dochistory.py | 27 + .../migrations/0019_dochistory_create_user.py | 21 + app_doc/models.py | 14 + app_doc/urls.py | 2 + app_doc/views.py | 85 +- captrue/mrdoc-zan.png | Bin 0 -> 42622 bytes static/docdiff/codemirror.css | 349 + static/docdiff/codemirror.js | 9833 +++++++++++++++++ static/docdiff/diff_match_patch.js | 49 + static/docdiff/markdown.js | 883 ++ static/docdiff/merge.css | 119 + static/docdiff/merge.js | 1006 ++ .../lib/codemirror/diff_match_patch.js | 49 + static/editor.md/plugins/help-dialog/help.md | 9 + static/mrdoc.css | 2 +- template/app_doc/create_base_2.html | 53 +- template/app_doc/create_doc.html | 8 +- template/app_doc/create_doctemp.html | 3 + template/app_doc/diff_doc.html | 229 + template/app_doc/doc.html | 2 +- template/app_doc/docs_base.html | 9 +- template/app_doc/head_base.html | 10 - template/app_doc/manage_base.html | 4 + template/app_doc/manage_doc.html | 3 + template/app_doc/manage_doc_history.html | 103 + .../app_doc/manage_project_collaborator.html | 12 +- template/app_doc/modify_doc.html | 75 +- template/app_doc/modify_doctemp.html | 3 + template/app_doc/pro_list.html | 4 +- template/app_doc/project.html | 5 + 33 files changed, 12959 insertions(+), 64 deletions(-) create mode 100644 app_doc/migrations/0018_dochistory.py create mode 100644 app_doc/migrations/0019_dochistory_create_user.py create mode 100644 captrue/mrdoc-zan.png create mode 100644 static/docdiff/codemirror.css create mode 100644 static/docdiff/codemirror.js create mode 100644 static/docdiff/diff_match_patch.js create mode 100644 static/docdiff/markdown.js create mode 100644 static/docdiff/merge.css create mode 100644 static/docdiff/merge.js create mode 100644 static/editor.md/lib/codemirror/diff_match_patch.js create mode 100644 template/app_doc/diff_doc.html create mode 100644 template/app_doc/manage_doc_history.html diff --git a/CHANGES.md b/CHANGES.md index 380dca6..a88c3e9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,12 @@ ## 版本更新记录 +### v0.4.1 + +- 添加文档历史版本功能,可在修改文档时对比查看和选择恢复文档的历史版本; +- 优化文档阅读页面样式,调整悬浮的目录样式; +- 优化编辑器交互,增加所有网络请求的加载框显示; +- 优化文集阅读页面样式,新增文集创建的管理链接; + ### v0.4 2020-04-06 - 新增附件功能,可在个人中心管理附件,在文档编辑器中上传和添加附件; diff --git a/MrDoc/settings.py b/MrDoc/settings.py index 442a201..12f4840 100644 --- a/MrDoc/settings.py +++ b/MrDoc/settings.py @@ -25,7 +25,7 @@ SECRET_KEY = '5&71mt9@^58zdg*_!t(x6g14q*@84d%ptr%%s6e0l50zs0we3d' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False -VERSIONS = '0.4' +VERSIONS = '0.4.1' ALLOWED_HOSTS = ['*'] diff --git a/README.md b/README.md index aff9c33..d834dbe 100644 --- a/README.md +++ b/README.md @@ -6,28 +6,30 @@ `MrDoc`是基于`Python`开发的在线文档系统,适合作为个人和小型团队的文档、知识和笔记管理工具。 -### 特性: +## 开源地址 + +**Gitee:** [https://gitee.com/zmister/MrDoc](https://gitee.com/zmister/MrDoc) + +**GitHub:** [https://github.com/zmister2016/MrDoc](https://github.com/zmister2016/MrDoc) + +## 特性: - 简洁的站点与用户系统 - 支持用户注册、用户登录、用户管理、管理员等控制等功能; - - 支持全站关闭注册; - - 支持注册邀请码配置; - - 支持广告位自定义配置; - - 支持统计代码自定义配置; + - 支持注册邀请码配置,支持全站关闭注册; + - 支持广告代码、统计代码自定义配置; - 结构清晰地文档系统 - - 基于文集的文档撰写和阅读; + - 基于文集进行文档撰写和阅读,拥有文集、文档、文档模板、图片和附件5大模块; - 使用基于`Editormd`的`Markdown`编辑器并扩展,以`Markdown`语法进行文档写作; - - 提供文档模板功能,支持文档模板的创建、修改; - - 两栏式文档阅读页面,支持文档阅读页面的字体缩放,字体类型修改,页面社交分享,良好的移动端阅读体验; - - 支持三级目录层级显示; - - 支持文集后台导出为`markdown`文本格式`.md`文件、前台导出为`EPUB`等格式文件; - - 基于文集进行权限控制,提供公开、私密、指定用户可见、访问码可见4种权限模式; + - 两栏式文档阅读页面、三级目录层级显示,文档阅读字体缩放,字体类型切换,页面社交分享,移动端阅读优化; + - 支持文集后台导出打包`markdown`文本格式`.md`文件、前台导出为`EPUB`等格式文件; + - 基于文集进行文档权限控制,提供公开、私密、指定用户可见、访问码可见4种权限模式; - 支持基于账户的`API`接口,可以借助账户`token`通过`API`获取文集、上传图片和创建文档; - 支持文集协作功能,一个文集可以拥有一个创建者和多个协作者,可灵活选择协作权限; - - 支持附件上传和管理、图片上传和管理; + - 支持文档历史版本功能; -当前版本为:**v0.4**,版本发布时间为**2020-04-06** +当前版本为:**v0.4.1**,版本发布时间为**2020-04-11** 完整更新记录详见:[CHANGES.md](./CHANGES.md) @@ -37,9 +39,9 @@ MrDoc基于Python语言的Django Web框架配合前端的LayUI、JQuery等库进行开发。 -后端环境推荐使用Python3.4+、Django2.1+的版本。 +在Django2.1、2.2和Python3.5、3.6、3.7上测试运行良好。 -## 安装简明教程 +## 简明安装教程 ### 1、安装依赖库 ``` @@ -114,6 +116,16 @@ python manage.py runserver 加入MrDoc交流QQ群,群号为**735507293**,入群密码:**mrdoc** +### 3、联系作者 + +微信(WeChat):**taoist_ling** + +## 赞赏项目 + +如果MrDoc对你有所帮助,欢迎给予开发者赞赏,助力项目更好发展。 + +![](./captrue/mrdoc-zan.png) + ## 更多应用截图 @@ -137,3 +149,4 @@ python manage.py runserver ### 注册页面 ![MrDoc注册页](./captrue/mrdoc-register.png) + diff --git a/app_doc/migrations/0018_dochistory.py b/app_doc/migrations/0018_dochistory.py new file mode 100644 index 0000000..432e023 --- /dev/null +++ b/app_doc/migrations/0018_dochistory.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.11 on 2020-04-09 20:59 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('app_doc', '0017_auto_20200404_0934'), + ] + + operations = [ + migrations.CreateModel( + name='DocHistory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('pre_content', models.TextField(blank=True, null=True, verbose_name='文档历史编辑内容')), + ('create_time', models.DateTimeField(auto_now=True)), + ('doc', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app_doc.Doc')), + ], + options={ + 'verbose_name': '文档历史', + 'verbose_name_plural': '文档历史', + }, + ), + ] diff --git a/app_doc/migrations/0019_dochistory_create_user.py b/app_doc/migrations/0019_dochistory_create_user.py new file mode 100644 index 0000000..190077e --- /dev/null +++ b/app_doc/migrations/0019_dochistory_create_user.py @@ -0,0 +1,21 @@ +# Generated by Django 2.2.11 on 2020-04-09 21:05 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('app_doc', '0018_dochistory'), + ] + + operations = [ + migrations.AddField( + model_name='dochistory', + name='create_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/app_doc/models.py b/app_doc/models.py index 0b1eb29..9c05ec2 100644 --- a/app_doc/models.py +++ b/app_doc/models.py @@ -72,6 +72,20 @@ class Doc(models.Model): "doc_id":self.pk} ) +# 文档历史模型 +class DocHistory(models.Model): + doc = models.ForeignKey(Doc,on_delete=models.CASCADE) + pre_content = models.TextField(verbose_name='文档历史编辑内容',null=True,blank=True) + create_user = models.ForeignKey(User,on_delete=models.SET_NULL,null=True) + create_time = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.doc + + class Meta: + verbose_name = '文档历史' + verbose_name_plural = verbose_name + # 文档模板模型 class DocTemp(models.Model): name = models.CharField(verbose_name="模板名称",max_length=50) diff --git a/app_doc/urls.py b/app_doc/urls.py index d951cc0..adc283c 100644 --- a/app_doc/urls.py +++ b/app_doc/urls.py @@ -24,6 +24,8 @@ urlpatterns = [ path('modify_doc//', views.modify_doc, name="modify_doc"), # 修改文档 path('del_doc/',views.del_doc,name="del_doc"), # 删除文档 path('manage_doc/',views.manage_doc,name="manage_doc"), # 管理文档 + path('diff_doc/-/',views.diff_doc,name='diff_doc'), # 对比文档历史版本 + path('manage_doc_history//',views.manage_doc_history,name='manage_doc_history'), # 管理文档历史版本 #################文档模板相关 path('manage_doctemp/',views.manage_doctemp,name='manage_doctemp'), # 文档模板列表 path('create_doctemp/',views.create_doctemp,name="create_doctemp"), # 创建文档模板 diff --git a/app_doc/views.py b/app_doc/views.py index 18c015c..9e82809 100644 --- a/app_doc/views.py +++ b/app_doc/views.py @@ -279,8 +279,8 @@ def manage_project(request): try: search_kw = request.GET.get('kw', None) if search_kw: - pro_list = Project.objects.filter(create_user=request.user,intro__icontains=search_kw) - paginator = Paginator(pro_list, 10) + pro_list = Project.objects.filter(create_user=request.user,intro__icontains=search_kw).order_by('-create_time') + paginator = Paginator(pro_list, 15) page = request.GET.get('page', 1) try: pros = paginator.page(page) @@ -290,8 +290,8 @@ def manage_project(request): pros = paginator.page(paginator.num_pages) pros.kw = search_kw else: - pro_list = Project.objects.filter(create_user=request.user) - paginator = Paginator(pro_list, 10) + pro_list = Project.objects.filter(create_user=request.user).order_by('-create_time') + paginator = Paginator(pro_list, 15) page = request.GET.get('page', 1) try: pros = paginator.page(page) @@ -532,6 +532,7 @@ def modify_doc(request,doc_id): if (request.user == doc.create_user) or (pro_colla[0].role == 1): doc_list = Doc.objects.filter(top_doc=project.id) doctemp_list = DocTemp.objects.filter(create_user=request.user) + history_list = DocHistory.objects.filter(doc=doc).order_by('-create_time') return render(request,'app_doc/modify_doc.html',locals()) else: return render(request,'403.html') @@ -555,6 +556,12 @@ def modify_doc(request,doc_id): pro_colla = ProjectCollaborator.objects.filter(project=project, user=request.user) # 验证用户有权限修改文档 - 文档的创建者或文集的高级协作者 if (request.user == doc.create_user) or (pro_colla[0].role == 1): + # 将现有文档内容写入到文档历史中 + DocHistory.objects.create( + doc = doc, + pre_content = doc.pre_content, + create_user = request.user + ) # 更新文档内容 Doc.objects.filter(id=int(doc_id)).update( name=doc_name, @@ -698,6 +705,76 @@ def manage_doc(request): else: return HttpResponse('方法不允许') +# 查看对比文档历史版本 +@login_required() +def diff_doc(request,doc_id,his_id): + if request.method == 'GET': + try: + doc = Doc.objects.get(id=doc_id) # 查询文档信息 + project = Project.objects.get(id=doc.top_doc) # 查询文档所属的文集信息 + pro_colla = ProjectCollaborator.objects.filter(project=project, user=request.user) # 查询用户的协作文集信息 + if (request.user == doc.create_user) or (pro_colla[0].role == 1): + history = DocHistory.objects.get(id=his_id) + history_list = DocHistory.objects.filter(doc=doc).order_by('-create_time') + if history.doc == doc: + return render(request, 'app_doc/diff_doc.html', locals()) + else: + return render(request, '403.html') + else: + return render(request, '403.html') + except Exception as e: + if settings.DEBUG: + print(traceback.print_exc()) + return render(request, '404.html') + + elif request.method == 'POST': + try: + doc = Doc.objects.get(id=doc_id) # 查询文档信息 + project = Project.objects.get(id=doc.top_doc) # 查询文档所属的文集信息 + pro_colla = ProjectCollaborator.objects.filter(project=project, user=request.user) # 查询用户的协作文集信息 + if (request.user == doc.create_user) or (pro_colla[0].role == 1): + history = DocHistory.objects.get(id=his_id) + if history.doc == doc: + return JsonResponse({'status':True,'data':history.pre_content}) + else: + return JsonResponse({'status': False, 'data': '非法请求'}) + else: + return JsonResponse({'status':False,'data':'非法请求'}) + except Exception as e: + if settings.DEBUG: + print(traceback.print_exc()) + return JsonResponse({'status':False,'data':'获取异常'}) + +# 管理文档历史版本 +@login_required() +def manage_doc_history(request,doc_id): + if request.method == 'GET': + try: + doc = Doc.objects.get(id=doc_id,create_user=request.user) + history_list = DocHistory.objects.filter(create_user=request.user,doc=doc_id).order_by('-create_time') + paginator = Paginator(history_list, 15) + page = request.GET.get('page', 1) + try: + historys = paginator.page(page) + except PageNotAnInteger: + historys = paginator.page(1) + except EmptyPage: + historys = paginator.page(paginator.num_pages) + return render(request, 'app_doc/manage_doc_history.html', locals()) + except Exception as e: + if settings.DEBUG: + print(traceback.print_exc()) + return render(request, '404.html') + elif request.method == 'POST': + try: + history_id = request.POST.get('history_id','') + DocHistory.objects.filter(id=history_id,doc=doc_id,create_user=request.user).delete() + return JsonResponse({'status':True,'data':'删除成功'}) + except: + if settings.DEBUG: + print(traceback.print_exc()) + return JsonResponse({'status':False,'data':'出现异常'}) + # 创建文档模板 @login_required() diff --git a/captrue/mrdoc-zan.png b/captrue/mrdoc-zan.png new file mode 100644 index 0000000000000000000000000000000000000000..1d75517862a843991298f1f54c446a051b8b6796 GIT binary patch literal 42622 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 lcB}h;AOFAU)Gw!;)2U;|F~XS_lrB&&JuM^6Dh