Browse Source

增加文章内容外链新窗口打开

lifei6671 7 years ago
parent
commit
4f0f432c34
4 changed files with 88 additions and 46 deletions
  1. 28 0
      models/Blog.go
  2. 3 1
      static/css/markdown.preview.css
  3. 56 45
      static/js/editor.js
  4. 1 0
      views/blog/index.tpl

+ 28 - 0
models/Blog.go

@@ -7,6 +7,9 @@ import (
 	"github.com/astaxie/beego"
 	"github.com/lifei6671/mindoc/cache"
 	"fmt"
+	"github.com/PuerkitoBio/goquery"
+	"strings"
+	"github.com/qiniu/x/bytes.v7"
 )
 
 //博文表
@@ -224,6 +227,31 @@ func (b *Blog) Save(cols ...string) error {
 		b.Created = time.Now()
 		_,err = o.Insert(b)
 	}
+	//如果保存成功,则在后台处理文章中存在的外链问题
+	if err == nil {
+		go func(blog *Blog) {
+			bufio := bytes.NewReader([]byte(b.BlogRelease))
+			//解析文档中非本站的链接,并设置为新窗口打开
+			if content, err := goquery.NewDocumentFromReader(bufio); err == nil {
+
+				content.Find("a").Each(func(i int, contentSelection *goquery.Selection) {
+					if src, ok := contentSelection.Attr("href"); ok {
+						if strings.HasPrefix(src, "http://") || strings.HasPrefix(src, "https://") {
+							//beego.Info(src,conf.BaseUrl,strings.HasPrefix(src,conf.BaseUrl))
+							if conf.BaseUrl != "" && !strings.HasPrefix(src, conf.BaseUrl) {
+								contentSelection.SetAttr("target", "_blank")
+								if html, err := content.Html(); err == nil {
+									b.BlogRelease = html
+								}
+							}
+						}
+
+					}
+				})
+			}
+			o.Update(blog)
+		}(b)
+	}
 	return err
 }
 

+ 3 - 1
static/css/markdown.preview.css

@@ -1,6 +1,8 @@
 /*************表格样式****************/
 .markdown-body{
-    font-family: "Montserrat", sans-serif !important;
+    -webkit-backface-visibility: hidden;
+    font-family: Helvetica, -apple-system, BlinkMacSystemFont, "Montserrat","Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Microsoft Yahei","Helvetica Neue",Helvetica;
+
 }
 .editormd-preview-container table {
     margin-top: 0;

+ 56 - 45
static/js/editor.js

@@ -248,53 +248,64 @@ function formatBytes($size) {
 function uploadImage($id,$callback) {
     /** 粘贴上传图片 **/
     document.getElementById($id).addEventListener('paste', function(e) {
+        if(e.clipboardData && e.clipboardData.items) {
+            var clipboard = e.clipboardData;
+            for (var i = 0, len = clipboard.items.length; i < len; i++) {
+                if (clipboard.items[i].kind === 'file' || clipboard.items[i].type.indexOf('image') > -1) {
+
+                    var imageFile = clipboard.items[i].getAsFile();
+
+                    var fileName = String((new Date()).valueOf());
+
+                    switch (imageFile.type) {
+                        case "image/png" :
+                            fileName += ".png";
+                            break;
+                        case "image/jpg" :
+                            fileName += ".jpg";
+                            break;
+                        case "image/jpeg" :
+                            fileName += ".jpeg";
+                            break;
+                        case "image/gif" :
+                            fileName += ".gif";
+                            break;
+                        default :
+                            layer.msg("不支持的图片格式");
+                            return;
+                    }
+                    var form = new FormData();
+
+                    form.append('editormd-image-file', imageFile, fileName);
+
+                    var layerIndex = 0;
+
+                    $.ajax({
+                        url: window.imageUploadURL,
+                        type: "POST",
+                        dataType: "json",
+                        data: form,
+                        processData: false,
+                        contentType: false,
+                        beforeSend: function () {
+                            layerIndex = $callback('before');
+                        },
+                        error: function () {
+                            layer.close(layerIndex);
+                            $callback('error');
+                            layer.msg("图片上传失败");
+                        },
+                        success: function (data) {
+                            layer.close(layerIndex);
+                            $callback('success', data);
+                            if (data.errcode !== 0) {
+                                layer.msg(data.message);
+                            }
 
-        var clipboard = e.clipboardData;
-        for (var i = 0, len = clipboard.items.length; i < len; i++) {
-            if (clipboard.items[i].kind === 'file' || clipboard.items[i].type.indexOf('image') > -1) {
-
-                var imageFile = clipboard.items[i].getAsFile();
-
-                var fileName = Date.parse(new Date());
-
-                switch (imageFile.type){
-                    case "image/png" : fileName += ".png";break;
-                    case "image/jpg" : fileName += ".jpg";break
-                    case "image/jpeg" : fileName += ".jpeg";break;
-                    case "image/gif" : fileName += ".gif";break;
-                    default : layer.msg("不支持的图片格式");return;
-                }
-                var form = new FormData();
-
-                form.append('editormd-image-file', imageFile, fileName);
-
-                var layerIndex = 0;
-
-                $.ajax({
-                    url: window.imageUploadURL,
-                    type: "POST",
-                    dataType: "json",
-                    data: form,
-                    processData: false,
-                    contentType: false,
-                    beforeSend: function() {
-                        layerIndex = $callback('before');
-                    },
-                    error: function() {
-                        layer.close(layerIndex);
-                        $callback('error');
-                        layer.msg("图片上传失败");
-                    },
-                    success: function(data) {
-                        layer.close(layerIndex);
-                        $callback('success', data);
-                        if(data.errcode !== 0){
-                            layer.msg(data.message);
                         }
-
-                    }
-                });
-                e.preventDefault();
+                    });
+                    e.preventDefault();
+                }
             }
         }
     });

+ 1 - 0
views/blog/index.tpl

@@ -49,6 +49,7 @@
             color: #666666;
             vertical-align: middle;
         }
+
         .blog-footer{
             margin: 25px auto;
             /*border-top: 1px solid #E5E5E5;*/