commit sharing note

This commit is contained in:
binnchx
2015-01-11 17:59:07 +08:00
parent a393bb8723
commit a851aaa399
5 changed files with 179 additions and 88 deletions

View File

@@ -9,6 +9,7 @@ import (
// "github.com/leanote/leanote/app/types"
// "io/ioutil"
// "fmt"
// "time"
)
type Share struct {
@@ -204,16 +205,25 @@ func (c Share) QuerySharePass(noteId string) revel.Result {
//展示分享笔记
func (c Share) ShowShareNote(noteId string) revel.Result {
// note := noteService.GetNote(noteId, c.GetUserId())
note := noteService.GetNote(noteId, c.GetUserId())
//
// c.RenderArgs["title"] = note.UserId
// c.RenderArgs["title"] = note.UserId
c.RenderArgs["noteId"] = noteId
username := userService.GetUsernameById(note.UserId)
c.RenderArgs["userName"] = username
c.RenderArgs["isMarkDown"] = note.IsMarkdown
// c.RenderArgs["timestamp"] = time.Now().Unix()
c.SetLocale()
return c.RenderTemplate("share/show_share_note.html")
}
//验证分享密码
//func (c Share) Verify4ShareNote(noteId string, sharePass int) revel.Result {
// ok = shareService.Verify4ShareNote(noteId, sharePass);
// re := info.Re{Ok : true, Item : pass}
//
//}
func (c Share) Verify4ShareNote(noteId string, sharePass int) revel.Result {
ok, note := shareService.Verify4ShareNote(noteId, sharePass);
attaches := []info.Attach{}
if (ok == true && note.AttachNum > 0) {
attaches = attachService.ListAttachs(noteId, c.GetUserId())
}
re := info.Re{Ok : ok, Item: note, List: attaches}
return c.RenderJson(re)
}

View File

@@ -783,11 +783,8 @@ func (this *ShareService) DeleteShareNotebookGroup(userId, notebookId, groupId s
func (this *ShareService) GenSharePass(noteId string) (int, bool) {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
pass := 1000 + r.Intn(10000)
pass := 1000 + r.Intn(9000)
if pass >= 10000 {
pass -= 1000
}
ok := db.Update(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId)}, bson.M{"$set": bson.M{"SharePass": pass}})
return pass, ok
}
@@ -798,3 +795,14 @@ func (this *ShareService) QuerySharePass(noteId string) int {
return note.SharePass
}
func (this *ShareService) Verify4ShareNote(noteId string, sharePass int) (bool, *info.Note) {
note := &info.Note{}
db.Get(db.Notes, noteId, note)
if note.SharePass == sharePass {
return true, note
} else {
note := &info.Note{}
return false, note
}
}

View File

@@ -48,6 +48,13 @@ func (this *UserService) GetUsername(userId string) string {
return user.Username
}
// 得到用户名
func (this *UserService) GetUsernameById(userId bson.ObjectId) string {
user := info.User{}
db.GetByQWithFields(db.Users, bson.M{"_id": userId}, []string{"Username"}, &user)
return user.Username
}
// 是否存在该用户 email
func (this *UserService) IsExistsUser(email string) bool {
if this.GetUserId(email) == "" {

View File

@@ -125,18 +125,33 @@
Share.dialogIsNote = {{.isNote}};
Share.dialogNoteOrNotebookId = '{{.noteOrNotebookId}}';
var getHost = function(url) {
var host = "null";
if(typeof url == "undefined"
|| null == url)
url = window.location.href;
var regex = /.*\:\/\/([^\/]*).*/;
var match = url.match(regex);
if(typeof match != "undefined"
&& null != match)
host = match[1];
return host;
}
$(function() {
setTimeout(function() {
$("#tr1 #friendsEmail").focus();
}, 500);
var host = getHost();
if (Share.dialogIsNote) {
var url = "/share/querySharePass";
var data = {noteId: Share.dialogNoteOrNotebookId};
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {
if (re.Item >= 1000 && re.Item < 10000) {
var shareLink = "https://leanote.com/share/" + '{{.noteOrNotebookId}}';
var shareLink = host + '/share/note/{{.noteOrNotebookId}}';
$("#shareLink").val(shareLink);
$("#sharePass").val(re.Item);
}
@@ -204,13 +219,13 @@ $("#groupInfo").on("click", ".btn-share-or-not", function() {
//生成分享链接和密码
$("#genShareLink").on("click", function() {
var sharePass = $("#sharePass").val();
if (sharePass != '' && sharePass > 1000 ) {
if (sharePass != '' && sharePass > 1000 && sharePass < 10000) {
$("#showMsg").html("<font color='red'>不能重复生成分享链接和密码</font>");
return;
}
var url = "/share/genShareLinkPass";
var shareLink = "https://leanote.com/share/note/" + '{{.noteOrNotebookId}}';
var shareLink = host + '/share/note/{{.noteOrNotebookId}}';
var data = {noteId: Share.dialogNoteOrNotebookId};
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {

View File

@@ -1,83 +1,134 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="apple-touch-fullscreen" content="yes">
<meta name=”apple-mobile-web-app-capable” content=”yes” />
<meta name="keywords" content="leanote,leanote.com">
<meta name="description" content="leanote, Not Just A Notebook">
<title>leanote, Not Just A Notebook</title>
{{template "home/header.html" .}}
<link href="/css/bootstrap.css" rel="stylesheet" />
<!-- 先加载, 没有样式, 宽度不定 -->
<link rel="stylesheet" href="tinymce/skins/custom/skin.min.css" rel="stylesheet"/>
<section>
</section>
{{$isMarkDown := .isMarkDown}}
<!-- leanote css -->
<link href="css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet" />
<link href="css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<div id="queryNote" style="height:300px;padding-top:80px" align="center">
{{ .userName }}分享了笔记<br/><br>
您需要输入分享密码才能查看:<br><br>
<input type="password" id="sharePass" />
<button id="showShareNote">点击查看</button><br/><br/>
<span id="showMsg"></span>
</div>
<div id="noteContainer"></div>
{{template "home/footer.html"}}
<script src="/js/jquery-1.9.0.min.js"></script>
<script src="/js/bootstrap.js"></script>
<script src="/js/common-min.js"></script>
<script>
var hash = location.hash;
if(hash == "#writing") {
var files = '<link rel="stylesheet" href="css/theme/writting-overwrite.css" type="text/css" id="themeLink" />';
} else {
var files ='<link rel="stylesheet" href="css/theme/{{if .userInfo.Theme}}{{.userInfo.Theme}}{{else}}default{{end}}.css" type="text/css" id="themeLink" />';
}
document.write(files);
</script>
<!-- For Develop writting mod -->
<script>
function log(o) {
}
</script>
查看分享笔记{{.noteId}}
您需要输入分享密码才能查看:<br/>
<input type="password" id="sharePass" /><br/>
<button id="showShareNote">点击查看</button>
<script>
var noteId = {{ .noteId }};
var sharePass = $("#sharePass").val();
var isMarkDown = {{ .isMarkDown}}
String.prototype.format = function() {
var s = this,
i = arguments.length;
while (i--) {
s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
}
return s;
};
var getHost = function(url) {
var host = "null";
if(typeof url == "undefined"
|| null == url)
url = window.location.href;
var regex = /.*\:\/\/([^\/]*).*/;
var match = url.match(regex);
if(typeof match != "undefined"
&& null != match)
host = match[1];
return host;
}
$(function() {
$("#showShareNote").on("click", function() {
$("#showMsg").html("");
var url = "/share/verify4ShareNote";
var data = {noteId: noteId};
data.sharePass = $("#sharePass").val();
var sharePass = $("#sharePass").val();
var data = {noteId: noteId, sharePass: sharePass};
ajaxPost(url, data, function(re) {
if(reIsOk(re)) {
$("#shareLink").val(shareLink);
$("#sharePass").val(re.Item);
$("#queryNote").css("display", "none");
var title = re.Item.Title;
var desc = re.Item.Desc;
var imgSrc = re.Item.ImgSrc;
var htmlContent = "<div><h1 height='50px'>{0}</h1></div><hr/><div style='vertical-align:center'><p height='auto'>{1}<br>{2}</p>";
if (re.Item.ImgSrc != "") {
htmlContent += "<img src=" + imgSrc + "></img>";
}
var attaches = re.List;
var attachesHtml = "";
if (attaches.length > 0) {
for (var i=0; i<attaches.length; i++) {
var linkUrl = getHost() + "/attach/download?attachId=" + attaches[i].AttachId;
attachesHtml += "<a href='{0}' target='_blank' data-mce-href='{1}' >附件{2}</a><br/>".format(linkUrl, linkUrl, i+1);
}
}
htmlContent = htmlContent.format(title, desc, attachesHtml) + "</div>";
/* if (isMarkDown) {
var converter = Markdown.getSanitizingConverter();
Markdown.Extra.init(converter, {extensions: ["tables", "fenced_code_gfm", "def_list"]});
var mdDesc = converter.makeHtml(desc);
$("pre").addClass("prettyprint linenums");
prettyPrint();
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"wmd-preview"]);
htmlContent = "<div><h1 height='50px'>"+title+"</h1></div><hr/><div style='vertical-align:center'><p height='auto'>"
+mdDesc+"</p></div>";
} else {
htmlContent = "<div><h1 height='50px'>"+title+"</h1></div><hr/><div style='vertical-align:center'><p height='auto'>"
+desc+"</p></div>";
} */
$("#noteContainer").css("display", "block").css("height", "auto")
.css("padding-top", "20px").css("text-align", "center")
.css("margin-left", "auto").css("margin-right", "auto");
$("#noteContainer").html(htmlContent);
} else {
$("#showMsg").html("<font color='red'>密码错误</font>");
}
});
});
})
// 平滑滚动
$(".smooth-scroll").click(function(e) {
e.preventDefault();
var t = $(this).attr("target");
var targetOffset = $(t).offset().top - 80;
$('html,body').animate({scrollTop: targetOffset}, 300);
});
});
</script>
<script src="js/jquery-1.9.0.min.js"></script>
<script src="js/jquery.ztree.all-3.5.js"></script>
<script src="js/i18n/msg.{{.locale}}.js"></script>
<script src="js/common-min.js"></script>
<script src="tinymce/tinymce.js"></script>
<script src="js/app/page-min.js"></script>
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll.js"></script>
<script src="/js/contextmenu/jquery.contextmenu-min.js"></script>
<script src="js/jquery-cookie.js"></script>
<script src="js/bootstrap-min.js"></script>
<script src="js/app/note-min.js"></script>
<script src="js/app/tag-min.js"></script>
<script src="js/app/notebook-min.js"></script>
<script src="js/app/share-min.js"></script>
<script src="js/object_id-min.js"></script>
<script src="js/ZeroClipboard/ZeroClipboard-min.js"></script>
{{if $isMarkDown}}
<script src="/public/mdeditor/editor/pagedown/Markdown.Converter.js"></script>
<script src="/public/mdeditor/editor/pagedown/Markdown.Sanitizer.js"></script>
<script src="/public/mdeditor/editor/pagedown/Markdown.Editor.js"></script>
<script src="/public/mdeditor/editor/pagedown/local/Markdown.local.zh.js"></script>
<script src="/public/mdeditor/editor/Markdown.Extra.js"></script>
<script src="/public/mdeditor/editor/editor.js"></script>
<script src="/public/js/google-code-prettify/prettify.js"></script>
<!--mathjax-->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]], processEscapes: true }, messageStyle: "none"});
</script>
<script src="/public/mdeditor/editor/mathJax.js"></script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{end}}