Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c897fef7a1 |
No files matched your search
+2
-4
@@ -2,9 +2,9 @@
|
|||||||
pkg
|
pkg
|
||||||
bin2
|
bin2
|
||||||
bin/i18n
|
bin/i18n
|
||||||
bin/leanote*
|
bin/leanote-linux
|
||||||
|
bin/leanote-mac
|
||||||
bin/release
|
bin/release
|
||||||
bin/test.sh
|
|
||||||
bin/tmp
|
bin/tmp
|
||||||
bin/test
|
bin/test
|
||||||
bin/src
|
bin/src
|
||||||
@@ -16,5 +16,3 @@ app/tmp/main.go
|
|||||||
.project
|
.project
|
||||||
public/config.codekit
|
public/config.codekit
|
||||||
files
|
files
|
||||||
/gulpfile.js
|
|
||||||
/node_modules
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
## 1. Introduction
|
## 1. Introduction
|
||||||
|
|
||||||
Leanote, not just a notepad!
|
Leanote, not just a notebook!
|
||||||

|

|
||||||
|
|
||||||
**Some Features**
|
**Some Features**
|
||||||
@@ -26,40 +26,83 @@ More information about how to install leanote please see:
|
|||||||
* [leanote binary distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-binary-distribution-installation-tutorial)
|
* [leanote binary distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-binary-distribution-installation-tutorial)
|
||||||
* [leanote develop distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-develop-distribution-installation-tutorial)
|
* [leanote develop distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-develop-distribution-installation-tutorial)
|
||||||
|
|
||||||
|
### 3.1. Download leanote
|
||||||
|
|
||||||
|
Leanote V1.0.2-beta has been released. Binaries:
|
||||||
|
|
||||||
|
* Linux: [leanote-linux-x86_64.v1.0-beta.2.bin.tar.gz](https://github.com/leanote/leanote/releases/download/1.0-beta/leanote-linux-x86_64.v1.0-beta.2.bin.tar.gz)
|
||||||
|
* MacOS X: [leanote-mac-x86_64.v1.0-beta.2.bin.tar.gz](https://github.com/leanote/leanote/releases/download/1.0-beta/leanote-mac-x86_64.v1.0-beta.bin.2.tar.gz)
|
||||||
|
|
||||||
|
Or you can clone [Leanote bin repository](https://github.com/leanote/leanote-bin) (Recommend)
|
||||||
|
|
||||||
|
### 3.2. Install MongoDB
|
||||||
|
|
||||||
|
Leanote is written in go using [revel](https://revel.github.io/) and [MongoDB](https://www.mongodb.org). Thus, you need to first install MongoDB.
|
||||||
|
|
||||||
|
For more tips please have a look at [our wiki](https://github.com/leanote/leanote/wiki/Install-Mongodb)
|
||||||
|
|
||||||
|
### 3.3. Import initial MongoDB data
|
||||||
|
|
||||||
|
The mongodb data is in `[PATH_TO_LEANOTE]/mongodb_backup/leanote_install_data`
|
||||||
|
|
||||||
|
```
|
||||||
|
$> mongorestore -h localhost -d leanote --directoryperdb PATH_TO_LEANOTE/mongodb_backup/leanote_install_data
|
||||||
|
```
|
||||||
|
|
||||||
|
The initial database contains two users:
|
||||||
|
|
||||||
|
```
|
||||||
|
user2 username: admin, password: abc123 (administrator)
|
||||||
|
user3 username: demo, password: demo@leanote.com (this user is for demo)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.4. Configuration
|
||||||
|
|
||||||
|
Modify `[PATH_TO_LEANOTE]/conf/app.conf`. Available configuration options are:
|
||||||
|
|
||||||
|
``mongodb`` **required**
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
db.host=localhost
|
||||||
|
db.port=27017
|
||||||
|
db.dbname=leanote
|
||||||
|
db.username=
|
||||||
|
db.password=
|
||||||
|
```
|
||||||
|
|
||||||
|
``app.secret`` **required** **important**
|
||||||
|
The secret key used for cryptographic operations (revel.Sign).
|
||||||
|
|
||||||
|
FOR SECURITY, YOU MUST CHANGE IT!!
|
||||||
|
|
||||||
|
For more infomation please see `app/app.conf` and the [revel manuals](https://revel.github.io/)
|
||||||
|
|
||||||
|
### 3.5. Run leanote
|
||||||
|
|
||||||
|
```
|
||||||
|
$> cd PATH_TO_LEANOTE/bin
|
||||||
|
$> sudo sh run.sh
|
||||||
|
```
|
||||||
|
|
||||||
## 4. How to develop leanote
|
## 4. How to develop leanote
|
||||||
|
|
||||||
Please see [How-to-develop-leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-%E5%A6%82%E4%BD%95%E5%BC%80%E5%8F%91leanote)
|
Please see [How-to-develop-leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-%E5%A6%82%E4%BD%95%E5%BC%80%E5%8F%91leanote)
|
||||||
|
|
||||||
|
|
||||||
## 5. Docs
|
## 5. Contributors
|
||||||
|
Thank you to all the [contributors](https://github.com/leanote/leanote/graphs/contributors) on
|
||||||
|
this project. Your help is much appreciated.
|
||||||
|
|
||||||
|
## 6. Contributing
|
||||||
|
|
||||||
|
Please fork this repository and contribute back using [pull requests](https://github.com/leanote/leanote/pulls).
|
||||||
|
|
||||||
|
## Docs
|
||||||
* [leanote binary distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-binary-distribution-installation-tutorial)
|
* [leanote binary distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-binary-distribution-installation-tutorial)
|
||||||
* [leanote develop distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-develop-distribution-installation-tutorial)
|
* [leanote develop distribution installation tutorial](https://github.com/leanote/leanote/wiki/leanote-develop-distribution-installation-tutorial)
|
||||||
* [leanote blog theme api](https://github.com/leanote/leanote/wiki/leanote-blog-theme-api_en)
|
* [leanote blog theme api](https://github.com/leanote/leanote/wiki/leanote-blog-theme-api_en)
|
||||||
|
|
||||||
More docs please see [wiki](https://github.com/leanote/leanote/wiki).
|
## Discussion
|
||||||
|
|
||||||
## 6. Contributors
|
|
||||||
Thank you to all the [contributors](https://github.com/leanote/leanote/graphs/contributors) on
|
|
||||||
this project. Your help is much appreciated.
|
|
||||||
|
|
||||||
## 7.Join us
|
|
||||||
Please fork this repository and contribute back using [pull requests](https://github.com/leanote/leanote/pulls).
|
|
||||||
|
|
||||||
If you find some problems or has some good ideas, please submit [issues](https://github.com/leanote/leanote/issues).
|
|
||||||
|
|
||||||
You are always welcomed!
|
|
||||||
|
|
||||||
## 8. Donation
|
|
||||||
Support us, [donate us](http://leanote.org/#donate). And thanks [donators](http://leanote.leanote.com/post/leanote-donation-list).
|
|
||||||
|
|
||||||
## 9. Related projects
|
|
||||||
* [Leanote Desktop App](https://github.com/leanote/desktop-app), [Download](http://app.leanote.com)
|
|
||||||
* [Leanote IOS](https://github.com/leanote/leanote-ios), development phase
|
|
||||||
* [Leanote Android](https://github.com/Dminter/leanote-android-client), development phase
|
|
||||||
|
|
||||||
And also, you are welcome to join us.
|
|
||||||
|
|
||||||
## 9. Discussion
|
|
||||||
* [leanote bbs](http://bbs.leanote.com)
|
* [leanote bbs](http://bbs.leanote.com)
|
||||||
* [leanote google group](https://groups.google.com/forum/#!forum/leanote)
|
* [leanote google group](https://groups.google.com/forum/#!forum/leanote)
|
||||||
* QQ Group: 158716820
|
* QQ Group: 158716820
|
||||||
|
|||||||
+87
-44
@@ -1,69 +1,112 @@
|
|||||||
# Leanote产品
|
|
||||||
|
|
||||||
## 1. 介绍
|
# Leanote产品
|
||||||
|
|
||||||
Leanote, 不只是笔记!
|
## 1. 介绍
|
||||||
|
|
||||||
|
Leanote, 不只是笔记!
|
||||||

|

|
||||||
|
|
||||||
**特性**
|
**特性**
|
||||||
|
|
||||||
* 知识管理: 通过leanote来管理知识, leanote有易操作的界面, 包含两款编辑器tinymce和markdown. 在leanote, 你可以尽情享受写作.
|
* 知识管理: 通过leanote来管理知识, leanote有易操作的界面, 包含两款编辑器tinymce和markdown. 在leanote, 你可以尽情享受写作.
|
||||||
* 分享: 你也可以通过分享知识给好友, 让好友拥有你的知识.
|
* 分享: 你也可以通过分享知识给好友, 让好友拥有你的知识.
|
||||||
* 协作: 在分享的同时也可以与好友一起协作知识.
|
* 协作: 在分享的同时也可以与好友一起协作知识.
|
||||||
* 博客: leanote也可以作为你的博客, 将知识公开成博客, 让leanote把你的知识传播的更远!
|
* 博客: leanote也可以作为你的博客, 将知识公开成博客, 让leanote把你的知识传播的更远!
|
||||||
|
|
||||||
## 2. 为什么我们要创建leanote?
|
## 2. 为什么我们要创建leanote?
|
||||||
说实话, 我们曾是evernote的忠实粉丝, 但是我们也发现evernote的不足:
|
说实话, 我们曾是evernote的忠实粉丝, 但是我们也发现evernote的不足:
|
||||||
* evernote的编辑器不能满足我们的需求, 不能贴代码(格式会乱掉, 作为程序员, 代码是我们的基本需求啊), 图片不能缩放.
|
* evernote的编辑器不能满足我们的需求, 不能贴代码(格式会乱掉, 作为程序员, 代码是我们的基本需求啊), 图片不能缩放.
|
||||||
* 我们是markdown的爱好者, 可是evernote竟然没有.
|
* 我们是markdown的爱好者, 可是evernote竟然没有.
|
||||||
* 我们也想将知识公开, 所以我们有自己的博客, 如wordpress, 但为什么这两者不能合二为一呢?
|
* 我们也想将知识公开, 所以我们有自己的博客, 如wordpress, 但为什么这两者不能合二为一呢?
|
||||||
* 还有...
|
* 还有...
|
||||||
|
|
||||||
## 3.安装leanote
|
## 3.安装leanote
|
||||||
leanote是一款私有云笔记, 你可以下载它安装在自己的服务器上, 当然也可以在 http://leanote.com 上注册.
|
leanote是一款私有云笔记, 你可以下载它安装在自己的服务器上, 当然也可以在 http://leanote.com 上注册.
|
||||||
|
|
||||||
这里详细整理了leanote二进版和leanote开发版的安装教程, 请移步至:
|
这里详细整理了leanote二进版和leanote开发版的安装教程, 请移步至:
|
||||||
|
* [leanote二进制详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
||||||
|
* [leanote开发版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E5%BC%80%E5%8F%91%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
||||||
|
|
||||||
* [leanote二进制详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
### 3.1. 下载leanote
|
||||||
* [leanote开发版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E5%BC%80%E5%8F%91%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
|
||||||
|
|
||||||
## 4. 如何对leanote进行二次开发
|
Leanote V1.0-beta.2 已发布, 二进制文件(暂时没有windows版的):
|
||||||
|
|
||||||
请查看 [How-to-develop-leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-%E5%A6%82%E4%BD%95%E5%BC%80%E5%8F%91leanote)
|
* Linux: [leanote-linux-x86_64.v1.0-beta.2.bin.tar.gz](https://github.com/leanote/leanote/releases/download/1.0-beta/leanote-linux-x86_64.v1.0-beta.2.bin.tar.gz)
|
||||||
|
* MacOS X: [leanote-mac-x86_64.v1.0-beta.2.bin.tar.gz](https://github.com/leanote/leanote/releases/download/1.0-beta/leanote-mac-x86_64.v1.0-beta.2.bin.tar.gz)
|
||||||
|
|
||||||
## 5 相关文档
|
或者直接检出[Leanote bin repository](https://github.com/leanote/leanote-bin) (推荐, 因为为最新版本)
|
||||||
* [leanote二进制版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
|
||||||
* [leanote开发版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E5%BC%80%E5%8F%91%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
|
||||||
* [Leanote source leanote源码导读](https://github.com/leanote/leanote/wiki/Leanote-source-leanote源码导读)
|
|
||||||
* [leanote blog theme api(中文版)](https://github.com/leanote/leanote/wiki/leanote-blog-theme-api)
|
|
||||||
* [How to develop leanote 如何开发leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-如何开发leanote)
|
|
||||||
|
|
||||||
更多文档请查看 [wiki](https://github.com/leanote/leanote/wiki).
|
### 3.2. 安装 MongodbDB
|
||||||
|
|
||||||
## 6. 贡献者
|
Leanote是由golang(使用[revel](https://revel.github.io/)框架 和 [MongoDB](https://www.mongodb.org)数据库), 你需要先安装Mongodb.
|
||||||
多谢 [贡献者](https://github.com/leanote/leanote/graphs/contributors) 的贡献, leanote因有你们而更完美!
|
|
||||||
|
|
||||||
## 7. 加入我们
|
安装MongodbDB, 导入数据更多细节请查看: [wiki](https://github.com/leanote/leanote/wiki/Install-Mongodb)
|
||||||
|
|
||||||
欢迎提交[pull requests](https://github.com/leanote/leanote/pulls) 到leanote.
|
### 3.3. 导入初始数据
|
||||||
|
|
||||||
有任何问题或建议, 欢迎提交[issue](https://github.com/leanote/leanote/issues).
|
MongodbDB初始数据在 `[PATH_TO_LEANOTE]/mongodb_backup/leanote_install_data`
|
||||||
|
|
||||||
Leanote还有很多问题, 如果你喜欢它, 欢迎加入我们一起完善leanote.
|
```
|
||||||
|
$> mongorestore -h localhost -d leanote --directoryperdb PATH_TO_LEANOTE/mongodb_backup/leanote_install_data
|
||||||
|
```
|
||||||
|
|
||||||
## 8. 捐赠
|
初始数据包含两个用户:
|
||||||
支持我们, [捐赠Leanote](http://leanote.org/#donate). 感谢[捐赠者](http://leanote.leanote.com/post/leanote-donation-list), 谢谢你们的鼓励, Leanote会一直坚持!
|
|
||||||
|
|
||||||
## 9. 其它相关项目
|
```
|
||||||
* [Leanote Desktop App](https://github.com/leanote/desktop-app), [下载地址](http://app.leanote.com)
|
user2 username: admin, password: abc123 (管理员, 重要!)
|
||||||
* [Leanote IOS](https://github.com/leanote/leanote-ios), 开发阶段
|
user3 username: demo@leanote.com, password: demo@leanote.com (为体验使用)
|
||||||
* [Leanote Android](https://github.com/Dminter/leanote-android-client), 开发阶段
|
```
|
||||||
|
|
||||||
同样, 欢迎加入我们!
|
### 3.4. 配置
|
||||||
|
|
||||||
## 讨论
|
修改 `[PATH_TO_LEANOTE]/conf/app.conf`. 有以下选项:
|
||||||
* [leanote 社区](http://bbs.leanote.com)
|
|
||||||
* QQ群: 158716820
|
``mongodb`` **必须配置!**
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
db.host=localhost
|
||||||
|
db.port=27017
|
||||||
|
db.dbname=leanote
|
||||||
|
db.username=
|
||||||
|
db.password=
|
||||||
|
```
|
||||||
|
|
||||||
|
``app.secret`` **重要**
|
||||||
|
请随意修改一个, app的密钥, 不能使用默认的, 不然会有安全问题
|
||||||
|
|
||||||
|
更多配置请查看 `app/app.conf` 和 [revel 手册](https://revel.github.io/)
|
||||||
|
|
||||||
|
### 3.5. 运行leanote
|
||||||
|
|
||||||
|
```
|
||||||
|
$> cd PATH_TO_LEANOTE/bin
|
||||||
|
$> sudo sh run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. 如何对leanote进行二次开发
|
||||||
|
|
||||||
|
请查看 [How-to-develop-leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-%E5%A6%82%E4%BD%95%E5%BC%80%E5%8F%91leanote)
|
||||||
|
|
||||||
|
## 5. 贡献者
|
||||||
|
多谢 [贡献者](https://github.com/leanote/leanote/graphs/contributors) 的贡献, leanote因有你们而更完美!
|
||||||
|
|
||||||
|
## 6. 加入我们
|
||||||
|
|
||||||
|
欢迎提交[pull requests](https://github.com/leanote/leanote/pulls) 到leanote.
|
||||||
|
|
||||||
|
leanote还有很多问题, 如果你喜欢它, 欢迎加入我们一起完善leanote.
|
||||||
|
|
||||||
|
## 相关文档
|
||||||
|
* [leanote二进制版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
||||||
|
* [leanote开发版详细安装教程](https://github.com/leanote/leanote/wiki/leanote%E5%BC%80%E5%8F%91%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B)
|
||||||
|
* [Leanote source leanote源码导读](https://github.com/leanote/leanote/wiki/Leanote-source-leanote源码导读)
|
||||||
|
* [leanote blog theme api(中文版)](https://github.com/leanote/leanote/wiki/leanote-blog-theme-api)
|
||||||
|
* [How to develop leanote 如何开发leanote](https://github.com/leanote/leanote/wiki/How-to-develop-leanote-如何开发leanote)
|
||||||
|
|
||||||
|
|
||||||
|
## 讨论
|
||||||
|
* [leanote 社区](http://bbs.leanote.com)
|
||||||
|
* QQ群: 158716820
|
||||||
* [leanote google group](https://groups.google.com/forum/#!forum/leanote)
|
* [leanote google group](https://groups.google.com/forum/#!forum/leanote)
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|||||||
@@ -85,15 +85,9 @@ func (c Auth) Logout() revel.Result {
|
|||||||
|
|
||||||
// 体验一下
|
// 体验一下
|
||||||
func (c Auth) Demo() revel.Result {
|
func (c Auth) Demo() revel.Result {
|
||||||
email := configService.GetGlobalStringConfig("demoPassword")
|
c.doLogin(configService.GetGlobalStringConfig("demoUsername"), configService.GetGlobalStringConfig("demoPassword"))
|
||||||
pwd := configService.GetGlobalStringConfig("demoPassword");
|
|
||||||
userInfo := authService.Login(email, pwd)
|
|
||||||
if userInfo.Email != "" {
|
|
||||||
c.SetSession(userInfo)
|
|
||||||
return c.Redirect("/note")
|
return c.Redirect("/note")
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------
|
//--------
|
||||||
// 注册
|
// 注册
|
||||||
|
|||||||
@@ -824,7 +824,7 @@ func (c Blog) LikePost(noteId string, callback string) revel.Result {
|
|||||||
re.Ok, re.Item = blogService.LikeBlog(noteId, userId)
|
re.Ok, re.Item = blogService.LikeBlog(noteId, userId)
|
||||||
return c.RenderJsonP(callback, re)
|
return c.RenderJsonP(callback, re)
|
||||||
}
|
}
|
||||||
func (c Blog) GetComments(noteId string, callback string) revel.Result {
|
func (c Blog) GetComments(noteId string) revel.Result {
|
||||||
// 评论
|
// 评论
|
||||||
userId := c.GetUserId()
|
userId := c.GetUserId()
|
||||||
page := c.GetPage()
|
page := c.GetPage()
|
||||||
@@ -837,10 +837,6 @@ func (c Blog) GetComments(noteId string, callback string) revel.Result {
|
|||||||
result["commentUserInfo"] = commentUserInfo
|
result["commentUserInfo"] = commentUserInfo
|
||||||
re.Item = result
|
re.Item = result
|
||||||
|
|
||||||
if callback != "" {
|
|
||||||
return c.RenderJsonP(callback, result)
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,11 +49,10 @@ func (c Note) Index(noteId string) revel.Result {
|
|||||||
hasRightNoteId := false
|
hasRightNoteId := false
|
||||||
if IsObjectId(noteId) {
|
if IsObjectId(noteId) {
|
||||||
note := noteService.GetNoteById(noteId)
|
note := noteService.GetNoteById(noteId)
|
||||||
|
|
||||||
if note.NoteId != "" {
|
|
||||||
var noteOwner = note.UserId.Hex()
|
var noteOwner = note.UserId.Hex()
|
||||||
noteContent = noteService.GetNoteContent(noteId, noteOwner)
|
noteContent = noteService.GetNoteContent(noteId, noteOwner)
|
||||||
|
|
||||||
|
if note.NoteId != "" {
|
||||||
hasRightNoteId = true
|
hasRightNoteId = true
|
||||||
c.RenderArgs["curNoteId"] = noteId
|
c.RenderArgs["curNoteId"] = noteId
|
||||||
c.RenderArgs["curNotebookId"] = note.NotebookId.Hex()
|
c.RenderArgs["curNotebookId"] = note.NotebookId.Hex()
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.google.com/p/goauth2/oauth"
|
||||||
|
"github.com/revel/revel"
|
||||||
|
"github.com/leanote/leanote/app/lea/netutil"
|
||||||
|
. "github.com/leanote/leanote/app/lea"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Oauth struct {
|
||||||
|
BaseController
|
||||||
|
}
|
||||||
|
|
||||||
|
var oauthCfg = &oauth.Config{
|
||||||
|
ClientId: "3790fbf1fc14bc6c5d85",
|
||||||
|
ClientSecret: "e9dadfe601c7caa6df9b33db3e7539945c60dfa2",
|
||||||
|
AuthURL: "https://github.com/login/oauth/authorize",
|
||||||
|
TokenURL: "https://github.com/login/oauth/access_token",
|
||||||
|
RedirectURL: "http://leanote.com/oauth/githubCallback",
|
||||||
|
Scope: "user",
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户允许后, github返回到leanote
|
||||||
|
// 通过code得到token
|
||||||
|
// https://github.com/login/oauth/authorize?access_type=&approval_prompt=&client_id=3790fbf1fc14bc6c5d85&redirect_uri=http%3A%2F%2F127.0.0.1%3A8080%2Foauth2callback&response_type=code&scope=user&state=
|
||||||
|
func (c Oauth) GithubCallback(code string) revel.Result {
|
||||||
|
t := &oauth.Transport{Config: oauthCfg}
|
||||||
|
|
||||||
|
// Exchange the received code for a token
|
||||||
|
tok, err := t.Exchange(code)
|
||||||
|
token := tok.AccessToken
|
||||||
|
if err != nil || token == "" {
|
||||||
|
c.RenderArgs["title"] = "error"
|
||||||
|
return c.RenderTemplate("oauth/oauth_callback_error.html")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 得到用户信息
|
||||||
|
profileInfoURL := "https://api.github.com/user"
|
||||||
|
url := fmt.Sprintf("%s?access_token=%s", profileInfoURL, token)
|
||||||
|
content, err2 := netutil.GetContent(url)
|
||||||
|
if err2 != nil {
|
||||||
|
c.RenderArgs["title"] = "error"
|
||||||
|
return c.RenderTemplate("oauth/oauth_callback_error.html")
|
||||||
|
}
|
||||||
|
// 转成map
|
||||||
|
profileInfo := map[string]interface{}{}
|
||||||
|
Log(string(content))
|
||||||
|
err2 = json.Unmarshal(content, &profileInfo)
|
||||||
|
if err2 != nil {
|
||||||
|
c.RenderArgs["title"] = "error"
|
||||||
|
return c.RenderTemplate("oauth/oauth_callback_error.html")
|
||||||
|
}
|
||||||
|
|
||||||
|
usernameI := profileInfo["login"]
|
||||||
|
|
||||||
|
username, _ := usernameI.(string)
|
||||||
|
userId := username
|
||||||
|
|
||||||
|
// 注册
|
||||||
|
isExists, userInfo := authService.ThirdRegister("github", userId, username)
|
||||||
|
c.RenderArgs["isExists"] = isExists
|
||||||
|
c.RenderArgs["userInfo"] = userInfo
|
||||||
|
|
||||||
|
// 登录之
|
||||||
|
c.SetSession(userInfo)
|
||||||
|
|
||||||
|
return c.Redirect("/note")
|
||||||
|
}
|
||||||
@@ -253,6 +253,7 @@ http://leanote.com/api/file/getImage?fileId=xx
|
|||||||
http://leanote.com/api/file/getAttach?fileId=xx
|
http://leanote.com/api/file/getAttach?fileId=xx
|
||||||
所有附件:
|
所有附件:
|
||||||
http://leanote.com/api/file/getAllAttachs?noteId=xxx
|
http://leanote.com/api/file/getAllAttachs?noteId=xxx
|
||||||
|
```
|
||||||
|
|
||||||
**注意:**
|
**注意:**
|
||||||
addNote时必须要把Files, 和相关的图片/附件一起传到服务器中
|
addNote时必须要把Files, 和相关的图片/附件一起传到服务器中
|
||||||
@@ -271,9 +272,7 @@ addNote时必须要把Files, 和相关的图片/附件一起传到服务器中
|
|||||||
http://leanote.com 不绝对, 因为用户可以自建服务, 所以在开发时需要可配置
|
http://leanote.com 不绝对, 因为用户可以自建服务, 所以在开发时需要可配置
|
||||||
|
|
||||||
### /note/updateNote 更新笔记
|
### /note/updateNote 更新笔记
|
||||||
|
|
||||||
当更新了笔记某个属性时, 只要传某个属性就行, 其它不用传, 比如把笔记拉入了trash, 那么就传IsTrash: true
|
当更新了笔记某个属性时, 只要传某个属性就行, 其它不用传, 比如把笔记拉入了trash, 那么就传IsTrash: true
|
||||||
|
|
||||||
```
|
```
|
||||||
参数: (注意首字大写)
|
参数: (注意首字大写)
|
||||||
NoteId string 必传
|
NoteId string 必传
|
||||||
@@ -387,7 +386,6 @@ Notebook {
|
|||||||
Seq int // 排序
|
Seq int // 排序
|
||||||
Title string
|
Title string
|
||||||
IsBlog bool
|
IsBlog bool
|
||||||
IsDeleted bool
|
|
||||||
CreatedTime time.Time
|
CreatedTime time.Time
|
||||||
UpdatedTime time.Time
|
UpdatedTime time.Time
|
||||||
|
|
||||||
|
|||||||
@@ -335,12 +335,8 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
|
|||||||
Abstract: noteOrContent.Abstract}
|
Abstract: noteOrContent.Abstract}
|
||||||
|
|
||||||
// 通过内容得到Desc, abstract
|
// 通过内容得到Desc, abstract
|
||||||
if noteOrContent.Abstract == "" {
|
note.Desc = SubStringHTMLToRaw(noteContent.Content, 50)
|
||||||
note.Desc = SubStringHTMLToRaw(noteContent.Content, 200)
|
|
||||||
noteContent.Abstract = SubStringHTML(noteContent.Content, 200, "")
|
noteContent.Abstract = SubStringHTML(noteContent.Content, 200, "")
|
||||||
} else {
|
|
||||||
note.Desc = SubStringHTMLToRaw(noteContent.Abstract, 200)
|
|
||||||
}
|
|
||||||
|
|
||||||
note = noteService.AddNoteAndContentApi(note, noteContent, myUserId)
|
note = noteService.AddNoteAndContentApi(note, noteContent, myUserId)
|
||||||
|
|
||||||
@@ -356,7 +352,7 @@ func (c ApiNote) AddNote(noteOrContent info.ApiNote) revel.Result {
|
|||||||
noteOrContent.UpdatedTime = note.UpdatedTime
|
noteOrContent.UpdatedTime = note.UpdatedTime
|
||||||
noteOrContent.UserId = c.getUserId()
|
noteOrContent.UserId = c.getUserId()
|
||||||
noteOrContent.IsMarkdown = note.IsMarkdown
|
noteOrContent.IsMarkdown = note.IsMarkdown
|
||||||
// 删除一些不要返回的, 删除Desc?
|
// 删除一些不要返回的
|
||||||
noteOrContent.Content = ""
|
noteOrContent.Content = ""
|
||||||
noteOrContent.Abstract = ""
|
noteOrContent.Abstract = ""
|
||||||
// apiNote := info.NoteToApiNote(note, noteOrContent.Files)
|
// apiNote := info.NoteToApiNote(note, noteOrContent.Files)
|
||||||
@@ -498,12 +494,8 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.Has("Content") {
|
if c.Has("Content") {
|
||||||
// 通过内容得到Desc, 如果有Abstract, 则用Abstract生成Desc
|
// 通过内容得到Desc, abstract
|
||||||
if noteOrContent.Abstract == "" {
|
noteUpdate["Desc"] = SubStringHTMLToRaw(noteOrContent.Content, 50)
|
||||||
noteUpdate["Desc"] = SubStringHTMLToRaw(noteOrContent.Content, 200)
|
|
||||||
} else {
|
|
||||||
noteUpdate["Desc"] = SubStringHTMLToRaw(noteOrContent.Abstract, 200)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
afterNoteUsn := 0
|
afterNoteUsn := 0
|
||||||
|
|||||||
@@ -460,7 +460,7 @@ func (c MemberBlog) ImportTheme() revel.Result {
|
|||||||
var ext string
|
var ext string
|
||||||
_, ext = SplitFilename(filename)
|
_, ext = SplitFilename(filename)
|
||||||
if ext != ".zip" {
|
if ext != ".zip" {
|
||||||
re.Msg = "Please upload zip file"
|
re.Msg = "请上传zip文件"
|
||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,7 +472,7 @@ func (c MemberBlog) ImportTheme() revel.Result {
|
|||||||
|
|
||||||
// > 10M?
|
// > 10M?
|
||||||
if len(data) > 10*1024*1024 {
|
if len(data) > 10*1024*1024 {
|
||||||
re.Msg = "File is big than 10M"
|
re.Msg = "文件大于10M"
|
||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -10,8 +10,8 @@ import (
|
|||||||
|
|
||||||
// convert revel msg to js msg
|
// convert revel msg to js msg
|
||||||
|
|
||||||
var msgBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/messages/"
|
var msgBasePath = "/Users/life/Documents/Go/package1/src/github.com/leanote/leanote/messages/"
|
||||||
var targetBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/js/i18n/"
|
var targetBasePath = "/Users/life/Documents/Go/package1/src/github.com/leanote/leanote/public/js/i18n/"
|
||||||
func parse(filename string) {
|
func parse(filename string) {
|
||||||
file, err := os.Open(msgBasePath + filename)
|
file, err := os.Open(msgBasePath + filename)
|
||||||
reader := bufio.NewReader(file)
|
reader := bufio.NewReader(file)
|
||||||
@@ -84,8 +84,6 @@ function getMsg(key, data) {
|
|||||||
func main() {
|
func main() {
|
||||||
parse("msg.en")
|
parse("msg.en")
|
||||||
parse("msg.zh")
|
parse("msg.zh")
|
||||||
parse("msg.fr")
|
|
||||||
parse("blog.zh")
|
parse("blog.zh")
|
||||||
parse("blog.en")
|
parse("blog.en")
|
||||||
parse("blog.fr")
|
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ type Theme struct {
|
|||||||
Version string `Version`
|
Version string `Version`
|
||||||
Author string `Author`
|
Author string `Author`
|
||||||
AuthorUrl string `AuthorUrl`
|
AuthorUrl string `AuthorUrl`
|
||||||
Path string `Path` // 文件夹路径, public/upload/54d7620d99c37b030600002c/themes/54d867c799c37b533e000001
|
Path string `Path` // 文件夹路径
|
||||||
Info map[string]interface{} `Info` // 所有信息
|
Info map[string]interface{} `Info` // 所有信息
|
||||||
IsActive bool `IsActive` // 是否在用
|
IsActive bool `IsActive` // 是否在用
|
||||||
|
|
||||||
|
|||||||
+8
-47
@@ -10,8 +10,8 @@ import (
|
|||||||
"github.com/leanote/leanote/app/controllers/admin"
|
"github.com/leanote/leanote/app/controllers/admin"
|
||||||
"github.com/leanote/leanote/app/controllers/member"
|
"github.com/leanote/leanote/app/controllers/member"
|
||||||
_ "github.com/leanote/leanote/app/lea/binder"
|
_ "github.com/leanote/leanote/app/lea/binder"
|
||||||
// "github.com/leanote/leanote/app/lea/session"
|
"github.com/leanote/leanote/app/lea/session"
|
||||||
// "github.com/leanote/leanote/app/lea/memcache"
|
"github.com/leanote/leanote/app/lea/memcache"
|
||||||
"github.com/leanote/leanote/app/lea/route"
|
"github.com/leanote/leanote/app/lea/route"
|
||||||
"reflect"
|
"reflect"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -33,11 +33,11 @@ func init() {
|
|||||||
// AuthFilter, // Invoke the action.
|
// AuthFilter, // Invoke the action.
|
||||||
revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters.
|
revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters.
|
||||||
revel.ParamsFilter, // Parse parameters into Controller.Params.
|
revel.ParamsFilter, // Parse parameters into Controller.Params.
|
||||||
revel.SessionFilter, // Restore and write the session cookie.
|
// revel.SessionFilter, // Restore and write the session cookie.
|
||||||
|
|
||||||
// 使用SessionFilter标准版从cookie中得到sessionID, 然后通过MssessionFilter从Memcache中得到
|
// 使用SessionFilter标准版从cookie中得到sessionID, 然后通过MssessionFilter从Memcache中得到
|
||||||
// session, 之后MSessionFilter将session只存sessionID然后返回给SessionFilter返回到web
|
// session, 之后MSessionFilter将session只存sessionID然后返回给SessionFilter返回到web
|
||||||
// session.SessionFilter, // leanote session
|
session.SessionFilter, // leanote session
|
||||||
// session.MSessionFilter, // leanote memcache session
|
// session.MSessionFilter, // leanote memcache session
|
||||||
|
|
||||||
revel.FlashFilter, // Restore and write the flash cookie.
|
revel.FlashFilter, // Restore and write the flash cookie.
|
||||||
@@ -51,18 +51,6 @@ func init() {
|
|||||||
revel.TemplateFuncs["raw"] = func(str string) template.HTML {
|
revel.TemplateFuncs["raw"] = func(str string) template.HTML {
|
||||||
return template.HTML(str)
|
return template.HTML(str)
|
||||||
}
|
}
|
||||||
revel.TemplateFuncs["trim"] = func(str string) string {
|
|
||||||
str = strings.Trim(str, " ")
|
|
||||||
str = strings.Trim(str, " ")
|
|
||||||
|
|
||||||
str = strings.Trim(str, "\n")
|
|
||||||
str = strings.Trim(str, " ")
|
|
||||||
|
|
||||||
// 以下两个空格不一样
|
|
||||||
str = strings.Trim(str, " ")
|
|
||||||
str = strings.Trim(str, " ")
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
revel.TemplateFuncs["add"] = func(i int) string {
|
revel.TemplateFuncs["add"] = func(i int) string {
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
return fmt.Sprintf("%v", i)
|
return fmt.Sprintf("%v", i)
|
||||||
@@ -157,33 +145,8 @@ func init() {
|
|||||||
return template.HTML(tagStr)
|
return template.HTML(tagStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
revel.TemplateFuncs["blogTagsForExport"] = func(renderArgs map[string]interface{}, tags []string) template.HTML {
|
|
||||||
if tags == nil || len(tags) == 0 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
tagStr := ""
|
|
||||||
lenTags := len(tags)
|
|
||||||
|
|
||||||
for i, tag := range tags {
|
|
||||||
str := tag
|
|
||||||
var classes = "label"
|
|
||||||
if InArray([]string{"red", "blue", "yellow", "green"}, tag) {
|
|
||||||
classes += " label-" + tag
|
|
||||||
} else {
|
|
||||||
classes += " label-default"
|
|
||||||
}
|
|
||||||
|
|
||||||
classes += " label-post"
|
|
||||||
tagStr += "<span class=\"" + classes + "\" >" + str + "</span>";
|
|
||||||
if i != lenTags - 1 {
|
|
||||||
tagStr += " "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return template.HTML(tagStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// lea++
|
// lea++
|
||||||
revel.TemplateFuncs["blogTagsLea"] = func(renderArgs map[string]interface{}, tags []string, typeStr string) template.HTML {
|
revel.TemplateFuncs["blogTagsLea"] = func(renderArgs map[string]interface{}, tags []string, isRecommend bool) template.HTML {
|
||||||
if tags == nil || len(tags) == 0 {
|
if tags == nil || len(tags) == 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -192,12 +155,10 @@ func init() {
|
|||||||
lenTags := len(tags)
|
lenTags := len(tags)
|
||||||
|
|
||||||
tagPostUrl := "http://lea.leanote.com/"
|
tagPostUrl := "http://lea.leanote.com/"
|
||||||
if typeStr == "recommend" {
|
if isRecommend {
|
||||||
tagPostUrl += "?tag=";
|
tagPostUrl += "?tag=";
|
||||||
} else if typeStr == "latest" {
|
|
||||||
tagPostUrl += "latest?tag=";
|
|
||||||
} else {
|
} else {
|
||||||
tagPostUrl += "subscription?tag=";
|
tagPostUrl += "latest?tag=";
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tag := range tags {
|
for i, tag := range tags {
|
||||||
@@ -406,7 +367,7 @@ func init() {
|
|||||||
// email配置
|
// email配置
|
||||||
InitEmail()
|
InitEmail()
|
||||||
InitVd()
|
InitVd()
|
||||||
// memcache.InitMemcache() // session服务
|
memcache.InitMemcache() // session服务
|
||||||
// 其它service
|
// 其它service
|
||||||
service.InitService()
|
service.InitService()
|
||||||
controllers.InitService()
|
controllers.InitService()
|
||||||
|
|||||||
@@ -56,14 +56,6 @@ func ClearDir(dir string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func MkdirAll(dir string) bool {
|
|
||||||
err := os.MkdirAll(dir, 0777)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// list dir's all file, return filenames
|
// list dir's all file, return filenames
|
||||||
func ListDir(dir string) []string {
|
func ListDir(dir string) []string {
|
||||||
f, err := os.Open(dir)
|
f, err := os.Open(dir)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
"time"
|
"time"
|
||||||
"strings"
|
|
||||||
math_rand "math/rand"
|
math_rand "math/rand"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -316,23 +315,3 @@ func InArray(arr []string, str string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将名称的特殊字符去掉
|
|
||||||
func FixFilename(filename string) string {
|
|
||||||
if filename != "" {
|
|
||||||
// 把特殊字段给替换掉
|
|
||||||
// str := `life "%&()+,/:;<>=?@\|`
|
|
||||||
// . == \\.
|
|
||||||
// $ === \\$
|
|
||||||
reg, _ := regexp.Compile("\\.|/|#|\\$|!|\\^|\\*|'| |\"|%|&|\\(|\\)|\\+|\\,|/|:|;|<|>|=|\\?|@|\\||\\\\")
|
|
||||||
filename = reg.ReplaceAllString(filename, "-")
|
|
||||||
filename = strings.Trim(filename, "-") // 左右单独的-去掉
|
|
||||||
// 把空格替换成-
|
|
||||||
// filename = strings.Replace(filename, " ", "-", -1)
|
|
||||||
for strings.Index(filename, "--") >= 0 { // 防止出现连续的--
|
|
||||||
filename = strings.Replace(filename, "--", "-", -1)
|
|
||||||
}
|
|
||||||
return filename
|
|
||||||
}
|
|
||||||
return filename
|
|
||||||
}
|
|
||||||
+20
-16
@@ -6,7 +6,6 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"strings"
|
"strings"
|
||||||
// "time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -33,7 +32,7 @@ import (
|
|||||||
//var jss = []string{"js/jquery-cookie", "js/bootstrap"}
|
//var jss = []string{"js/jquery-cookie", "js/bootstrap"}
|
||||||
var jss = []string{"js/jquery-cookie", "js/bootstrap",
|
var jss = []string{"js/jquery-cookie", "js/bootstrap",
|
||||||
"js/common", "js/app/note", "js/app/tag", "js/app/notebook", "js/app/share",
|
"js/common", "js/app/note", "js/app/tag", "js/app/notebook", "js/app/share",
|
||||||
"js/object_id", "js/ZeroClipboard/ZeroClipboard"}
|
"js/object_id"}
|
||||||
|
|
||||||
var base1 = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/"
|
var base1 = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/"
|
||||||
var base = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/"
|
var base = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/"
|
||||||
@@ -92,6 +91,7 @@ func dev() {
|
|||||||
"notebook.js": "notebook-min.js",
|
"notebook.js": "notebook-min.js",
|
||||||
"share.js": "share-min.js",
|
"share.js": "share-min.js",
|
||||||
"tag.js": "tag-min.js",
|
"tag.js": "tag-min.js",
|
||||||
|
"main.js": "main-min.js",
|
||||||
"jquery.slimscroll.js": "jquery.slimscroll-min.js",
|
"jquery.slimscroll.js": "jquery.slimscroll-min.js",
|
||||||
"jquery.contextmenu.js": "jquery.contextmenu-min.js",
|
"jquery.contextmenu.js": "jquery.contextmenu-min.js",
|
||||||
"editor/editor.js": "editor/editor-min.js",
|
"editor/editor.js": "editor/editor-min.js",
|
||||||
@@ -107,13 +107,6 @@ func dev() {
|
|||||||
for key, value := range m {
|
for key, value := range m {
|
||||||
content = strings.Replace(content, key, value, -1)
|
content = strings.Replace(content, key, value, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// var time = time.Now().Unix() % 1000
|
|
||||||
|
|
||||||
// content = strings.Replace(content, "-min.js", fmt.Sprintf("-min.js?r=%d", time), -1)
|
|
||||||
// content = strings.Replace(content, "default{{end}}.css", fmt.Sprintf("default{{end}}.css?r=%d", time), 1)
|
|
||||||
// content = strings.Replace(content, "writting-overwrite.css", fmt.Sprintf("writting-overwrite.css?r=%d", time), 1)
|
|
||||||
|
|
||||||
ioutil.WriteFile(target, []byte(content), os.ModeAppend)
|
ioutil.WriteFile(target, []byte(content), os.ModeAppend)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,10 +114,8 @@ func dev() {
|
|||||||
func tinymce() {
|
func tinymce() {
|
||||||
// cmdStr := "node_modules/jake/bin/cli.js minify bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]"
|
// cmdStr := "node_modules/jake/bin/cli.js minify bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]"
|
||||||
// cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify", "bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]")
|
// cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify", "bundle[themes:modern,plugins:table,paste,advlist,autolink,link,image,lists,charmap,hr,searchreplace,visualblocks,visualchars,code,nav,tabfocus,contextmenu,directionality,codemirror,codesyntax,textcolor,fullpage]")
|
||||||
cmd := exec.Command("/bin/sh", "-c", "grunt minify");
|
cmd := exec.Command("/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master/node_modules/jake/bin/cli.js", "minify")
|
||||||
cmd.Dir = base + "/tinymce_4.1.9"
|
cmd.Dir = "/Users/life/Documents/eclipse-workspace/go/leanote_release/tinymce-master"
|
||||||
|
|
||||||
fmt.Println("正在build tinymce");
|
|
||||||
|
|
||||||
// 必须要先删除
|
// 必须要先删除
|
||||||
cmd2 := exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.dev.js")
|
cmd2 := exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.dev.js")
|
||||||
@@ -132,19 +123,32 @@ func tinymce() {
|
|||||||
cmd2 = exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.jquery.dev.js")
|
cmd2 = exec.Command("/bin/sh", "-c", "rm " + cmd.Dir + "/js/tinymce/tinymce.jquery.dev.js")
|
||||||
c, _ := cmd2.CombinedOutput()
|
c, _ := cmd2.CombinedOutput()
|
||||||
fmt.Println(string(c))
|
fmt.Println(string(c))
|
||||||
|
|
||||||
c, _ = cmd.CombinedOutput()
|
c, _ = cmd.CombinedOutput()
|
||||||
fmt.Println(string(c))
|
fmt.Println(string(c))
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 压缩tinymce
|
// 压缩tinymce
|
||||||
// tinymce()
|
tinymce()
|
||||||
|
|
||||||
dev();
|
dev();
|
||||||
|
|
||||||
// 其它零散的需要压缩的js
|
// 其它零散的需要压缩的js
|
||||||
otherJss := []string{"js/main", "js/app/page", "js/contextmenu/jquery.contextmenu",
|
otherJss := []string{"tinymce/tinymce", "js/main", "js/app/page", "js/contextmenu/jquery.contextmenu",
|
||||||
|
"mdeditor/editor/scrollLink",
|
||||||
|
"mdeditor/editor/editor",
|
||||||
|
"mdeditor/editor/jquery.waitforimages",
|
||||||
|
"mdeditor/editor/pagedown/local/Markdown.local.zh",
|
||||||
|
"mdeditor/editor/pagedown/local/Markdown.local.en",
|
||||||
|
"mdeditor/editor/pagedown/Markdown.Editor",
|
||||||
|
"mdeditor/editor/pagedown/Markdown.Sanitizer",
|
||||||
|
"mdeditor/editor/pagedown/Markdown.Converter",
|
||||||
|
"mdeditor/editor/Markdown.Extra",
|
||||||
|
"mdeditor/editor/underscore",
|
||||||
|
"mdeditor/editor/mathJax",
|
||||||
|
"js/jQuery-slimScroll-1.3.0/jquery.slimscroll",
|
||||||
|
"js/app/editor_drop_paste",
|
||||||
|
"js/app/attachment_upload",
|
||||||
"js/jquery.ztree.all-3.5",
|
"js/jquery.ztree.all-3.5",
|
||||||
"js/jQuery-slimScroll-1.3.0/jquery.slimscroll",
|
"js/jQuery-slimScroll-1.3.0/jquery.slimscroll",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1197,10 +1197,6 @@ func (this *BlogService) FixBlog(blog info.BlogItem) info.Post {
|
|||||||
LikeNum: blog.LikeNum,
|
LikeNum: blog.LikeNum,
|
||||||
IsMarkdown: blog.IsMarkdown,
|
IsMarkdown: blog.IsMarkdown,
|
||||||
}
|
}
|
||||||
if blog2.Tags != nil && len(blog2.Tags) > 0 && blog2.Tags[0] != "" {
|
|
||||||
} else {
|
|
||||||
blog2.Tags = nil
|
|
||||||
}
|
|
||||||
return blog2
|
return blog2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ func (this *ConfigService) Backup(remark string) (ok bool, msg string) {
|
|||||||
username, _ := revel.Config.String("db.username")
|
username, _ := revel.Config.String("db.username")
|
||||||
password, _ := revel.Config.String("db.password")
|
password, _ := revel.Config.String("db.password")
|
||||||
// mongodump -h localhost -d leanote -o /root/mongodb_backup/leanote-9-22/ -u leanote -p nKFAkxKnWkEQy8Vv2LlM
|
// mongodump -h localhost -d leanote -o /root/mongodb_backup/leanote-9-22/ -u leanote -p nKFAkxKnWkEQy8Vv2LlM
|
||||||
binPath = binPath + " -h " + host + " -d " + dbname + " --port " + port
|
binPath = binPath + " -h " + host + " -d " + dbname + " -port " + port
|
||||||
if username != "" {
|
if username != "" {
|
||||||
binPath += " -u " + username + " -p " + password
|
binPath += " -u " + username + " -p " + password
|
||||||
}
|
}
|
||||||
@@ -361,7 +361,7 @@ func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
|
|||||||
username, _ := revel.Config.String("db.username")
|
username, _ := revel.Config.String("db.username")
|
||||||
password, _ := revel.Config.String("db.password")
|
password, _ := revel.Config.String("db.password")
|
||||||
// mongorestore -h localhost -d leanote -o /root/mongodb_backup/leanote-9-22/ -u leanote -p nKFAkxKnWkEQy8Vv2LlM
|
// mongorestore -h localhost -d leanote -o /root/mongodb_backup/leanote-9-22/ -u leanote -p nKFAkxKnWkEQy8Vv2LlM
|
||||||
binPath = binPath + " --drop -h " + host + " -d " + dbname + " --port " + port
|
binPath = binPath + " --drop -h " + host + " -d " + dbname + " -port " + port
|
||||||
if username != "" {
|
if username != "" {
|
||||||
binPath += " -u " + username + " -p " + password
|
binPath += " -u " + username + " -p " + password
|
||||||
}
|
}
|
||||||
@@ -372,7 +372,7 @@ func (this *ConfigService) Restore(createdTime string) (ok bool, msg string) {
|
|||||||
return false, path + " Is Not Exists"
|
return false, path + " Is Not Exists"
|
||||||
}
|
}
|
||||||
|
|
||||||
binPath += " " + path
|
binPath += " --directoryperdb " + path
|
||||||
|
|
||||||
cmd := exec.Command("/bin/sh", "-c", binPath)
|
cmd := exec.Command("/bin/sh", "-c", binPath)
|
||||||
Log(binPath);
|
Log(binPath);
|
||||||
@@ -455,15 +455,12 @@ var port string
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
revel.OnAppStart(func() {
|
revel.OnAppStart(func() {
|
||||||
/*
|
|
||||||
不用配置的, 因为最终通过命令可以改, 而且有的使用nginx代理
|
|
||||||
port = strconv.Itoa(revel.HttpPort)
|
port = strconv.Itoa(revel.HttpPort)
|
||||||
if port != "80" {
|
if port != "80" {
|
||||||
port = ":" + port
|
port = ":" + port
|
||||||
} else {
|
} else {
|
||||||
port = "";
|
port = "";
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
siteUrl, _ := revel.Config.String("site.url") // 已包含:9000, http, 去掉成 leanote.com
|
siteUrl, _ := revel.Config.String("site.url") // 已包含:9000, http, 去掉成 leanote.com
|
||||||
if strings.HasPrefix(siteUrl, "http://") {
|
if strings.HasPrefix(siteUrl, "http://") {
|
||||||
@@ -472,17 +469,6 @@ func init() {
|
|||||||
defaultDomain = siteUrl[len("https://"):]
|
defaultDomain = siteUrl[len("https://"):]
|
||||||
schema = "https://"
|
schema = "https://"
|
||||||
}
|
}
|
||||||
|
|
||||||
// port localhost:9000
|
|
||||||
ports := strings.Split(defaultDomain, ":")
|
|
||||||
if len(ports) == 2 {
|
|
||||||
port = ports[1]
|
|
||||||
}
|
|
||||||
if port == "80" {
|
|
||||||
port = ""
|
|
||||||
} else {
|
|
||||||
port = ":" + port
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,21 +32,11 @@ func (this *GroupService) DeleteGroup(userId, groupId string) (ok bool, msg stri
|
|||||||
return false, "groupHasUsers"
|
return false, "groupHasUsers"
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if !this.isMyGroup(userId, groupId) {
|
|
||||||
return false, "notMyGroup"
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除分组后, 需要删除所有用户分享到该组的笔记本, 笔记
|
|
||||||
|
|
||||||
shareService.DeleteAllShareNotebookGroup(groupId);
|
|
||||||
shareService.DeleteAllShareNoteGroup(groupId);
|
|
||||||
|
|
||||||
db.DeleteAll(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId)})
|
db.DeleteAll(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId)})
|
||||||
return db.DeleteByIdAndUserId(db.Groups, groupId, userId), ""
|
return db.DeleteByIdAndUserId(db.Groups, groupId, userId), ""
|
||||||
|
|
||||||
// TODO 删除分组后, 在shareNote, shareNotebook中也要删除
|
// TODO 删除分组后, 在shareNote, shareNotebook中也要删除
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改group标题
|
// 修改group标题
|
||||||
func (this *GroupService) UpdateGroupTitle(userId, groupId, title string) (ok bool) {
|
func (this *GroupService) UpdateGroupTitle(userId, groupId, title string) (ok bool) {
|
||||||
return db.UpdateByIdAndUserIdField(db.Groups, groupId, userId, "Title", title)
|
return db.UpdateByIdAndUserIdField(db.Groups, groupId, userId, "Title", title)
|
||||||
@@ -54,14 +44,9 @@ func (this *GroupService) UpdateGroupTitle(userId, groupId, title string) (ok bo
|
|||||||
|
|
||||||
// 得到用户的所有分组(包括下的所有用户)
|
// 得到用户的所有分组(包括下的所有用户)
|
||||||
func (this *GroupService) GetGroupsAndUsers(userId string) ([]info.Group) {
|
func (this *GroupService) GetGroupsAndUsers(userId string) ([]info.Group) {
|
||||||
/*
|
// 得到分组s
|
||||||
// 得到我的分组
|
|
||||||
groups := []info.Group{}
|
groups := []info.Group{}
|
||||||
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
|
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
|
||||||
*/
|
|
||||||
// 我的分组, 及我所属的分组
|
|
||||||
groups := this.GetGroupsContainOf(userId);
|
|
||||||
|
|
||||||
// 得到其下的用户
|
// 得到其下的用户
|
||||||
for i, group := range groups {
|
for i, group := range groups {
|
||||||
group.Users = this.GetUsers(group.GroupId.Hex())
|
group.Users = this.GetUsers(group.GroupId.Hex())
|
||||||
@@ -76,55 +61,6 @@ func (this *GroupService) GetGroups(userId string) ([]info.Group) {
|
|||||||
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
|
db.ListByQ(db.Groups, bson.M{"UserId": bson.ObjectIdHex(userId)}, &groups)
|
||||||
return groups
|
return groups
|
||||||
}
|
}
|
||||||
|
|
||||||
// 得到我的和我所属组的ids
|
|
||||||
func (this *GroupService) GetMineAndBelongToGroupIds(userId string) ([]bson.ObjectId) {
|
|
||||||
// 所属组
|
|
||||||
groupIds := this.GetBelongToGroupIds(userId)
|
|
||||||
|
|
||||||
m := map[bson.ObjectId]bool{}
|
|
||||||
for _, groupId := range groupIds {
|
|
||||||
m[groupId] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 我的组
|
|
||||||
myGroups := this.GetGroups(userId)
|
|
||||||
|
|
||||||
for _, group := range myGroups {
|
|
||||||
if !m[group.GroupId] {
|
|
||||||
groupIds = append(groupIds, group.GroupId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return groupIds
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取包含此用户的组对象数组
|
|
||||||
// 获取该用户所属组, 和我的组
|
|
||||||
func (this *GroupService) GetGroupsContainOf(userId string) []info.Group {
|
|
||||||
// 我的组
|
|
||||||
myGroups := this.GetGroups(userId)
|
|
||||||
myGroupMap := map[bson.ObjectId]bool{}
|
|
||||||
|
|
||||||
for _, group := range myGroups {
|
|
||||||
myGroupMap[group.GroupId] = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 所属组
|
|
||||||
groupIds := this.GetBelongToGroupIds(userId)
|
|
||||||
|
|
||||||
groups := []info.Group{}
|
|
||||||
db.ListByQ(db.Groups, bson.M{"_id": bson.M{"$in": groupIds}}, &groups)
|
|
||||||
|
|
||||||
for _, group := range groups {
|
|
||||||
if !myGroupMap[group.GroupId] {
|
|
||||||
myGroups = append(myGroups, group)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return myGroups
|
|
||||||
}
|
|
||||||
|
|
||||||
// 得到分组, shareService用
|
// 得到分组, shareService用
|
||||||
func (this *GroupService) GetGroup(userId, groupId string) (info.Group) {
|
func (this *GroupService) GetGroup(userId, groupId string) (info.Group) {
|
||||||
// 得到分组s
|
// 得到分组s
|
||||||
@@ -167,25 +103,10 @@ func (this *GroupService) GetBelongToGroupIds(userId string) ([]bson.ObjectId) {
|
|||||||
func (this *GroupService) isMyGroup(ownUserId, groupId string) (ok bool) {
|
func (this *GroupService) isMyGroup(ownUserId, groupId string) (ok bool) {
|
||||||
return db.Has(db.Groups, bson.M{"_id": bson.ObjectIdHex(groupId), "UserId": bson.ObjectIdHex(ownUserId)})
|
return db.Has(db.Groups, bson.M{"_id": bson.ObjectIdHex(groupId), "UserId": bson.ObjectIdHex(ownUserId)})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断组中是否包含指定用户
|
|
||||||
func (this *GroupService) IsExistsGroupUser(userId, groupId string) (ok bool) {
|
|
||||||
// 如果我拥有这个组, 那也行
|
|
||||||
if this.isMyGroup(userId, groupId) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return db.Has(db.GroupUsers, bson.M{"UserId": bson.ObjectIdHex(userId), "GroupId": bson.ObjectIdHex(groupId)})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 为group添加用户
|
// 为group添加用户
|
||||||
// 用户是否已存在?
|
// 用户是否已存在?
|
||||||
func (this *GroupService) AddUser(ownUserId, groupId, userId string) (ok bool, msg string) {
|
func (this *GroupService) AddUser(ownUserId, groupId, userId string) (ok bool, msg string) {
|
||||||
// groupId是否是ownUserId的?
|
// groupId是否是ownUserId的?
|
||||||
/*
|
|
||||||
if !this.IsExistsGroupUser(ownUserId, groupId) {
|
|
||||||
return false, "forbidden"
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if !this.isMyGroup(ownUserId, groupId) {
|
if !this.isMyGroup(ownUserId, groupId) {
|
||||||
return false, "forbidden"
|
return false, "forbidden"
|
||||||
}
|
}
|
||||||
@@ -202,22 +123,11 @@ func (this *GroupService) AddUser(ownUserId, groupId, userId string) (ok bool, m
|
|||||||
CreatedTime: time.Now(),
|
CreatedTime: time.Now(),
|
||||||
}), ""
|
}), ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除用户
|
// 删除用户
|
||||||
func (this *GroupService) DeleteUser(ownUserId, groupId, userId string) (ok bool, msg string) {
|
func (this *GroupService) DeleteUser(ownUserId, groupId, userId string) (ok bool, msg string) {
|
||||||
// groupId是否是ownUserId的?
|
// groupId是否是ownUserId的?
|
||||||
/*
|
|
||||||
if !this.IsExistsGroupUser(ownUserId, groupId) {
|
|
||||||
return false, "forbidden"
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if !this.isMyGroup(ownUserId, groupId) {
|
if !this.isMyGroup(ownUserId, groupId) {
|
||||||
return false, "forbidden"
|
return false, "forbidden"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除该用户分享到本组的笔记本, 笔记
|
|
||||||
shareService.DeleteShareNotebookGroupWhenDeleteGroupUser(userId, groupId);
|
|
||||||
shareService.DeleteShareNoteGroupWhenDeleteGroupUser(userId, groupId);
|
|
||||||
|
|
||||||
return db.Delete(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId), "UserId": bson.ObjectIdHex(userId)}), ""
|
return db.Delete(db.GroupUsers, bson.M{"GroupId": bson.ObjectIdHex(groupId), "UserId": bson.ObjectIdHex(userId)}), ""
|
||||||
}
|
}
|
||||||
@@ -18,10 +18,9 @@ func (this *NoteService) GetNote(noteId, userId string) (note info.Note) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// fileService调用
|
// fileService调用
|
||||||
// 不能是已经删除了的, life bug, 客户端删除后, 竟然还能在web上打开
|
|
||||||
func (this *NoteService) GetNoteById(noteId string) (note info.Note) {
|
func (this *NoteService) GetNoteById(noteId string) (note info.Note) {
|
||||||
note = info.Note{}
|
note = info.Note{}
|
||||||
db.GetByQ(db.Notes, bson.M{"_id": bson.ObjectIdHex(noteId), "IsDeleted": false}, ¬e)
|
db.Get(db.Notes, noteId, ¬e)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 得到blog, blogService用
|
// 得到blog, blogService用
|
||||||
@@ -239,6 +238,7 @@ func (this *NoteService) AddNote(note info.Note, fromApi bool) info.Note {
|
|||||||
|
|
||||||
// api会传IsBlog, web不会传
|
// api会传IsBlog, web不会传
|
||||||
if !fromApi {
|
if !fromApi {
|
||||||
|
note.PublicTime = note.UpdatedTime
|
||||||
// 设为blog
|
// 设为blog
|
||||||
note.IsBlog = notebookService.IsBlog(notebookId)
|
note.IsBlog = notebookService.IsBlog(notebookId)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import (
|
|||||||
. "github.com/leanote/leanote/app/lea"
|
. "github.com/leanote/leanote/app/lea"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
"strings"
|
|
||||||
// "html"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 笔记本
|
// 笔记本
|
||||||
@@ -42,9 +40,7 @@ func ParseAndSortNotebooks(userNotebooks []info.Notebook, noParentDelete, needSo
|
|||||||
for _, each := range userNotebooks {
|
for _, each := range userNotebooks {
|
||||||
newNotebooks := info.Notebooks{Subs: info.SubNotebooks{}}
|
newNotebooks := info.Notebooks{Subs: info.SubNotebooks{}}
|
||||||
newNotebooks.NotebookId = each.NotebookId
|
newNotebooks.NotebookId = each.NotebookId
|
||||||
newNotebooks.Title = each.Title;
|
newNotebooks.Title = each.Title
|
||||||
// newNotebooks.Title = html.EscapeString(each.Title)
|
|
||||||
newNotebooks.Title = strings.Replace(strings.Replace(each.Title, "<script>", "", -1), "</script", "", -1)
|
|
||||||
newNotebooks.Seq = each.Seq
|
newNotebooks.Seq = each.Seq
|
||||||
newNotebooks.UserId = each.UserId
|
newNotebooks.UserId = each.UserId
|
||||||
newNotebooks.ParentNotebookId = each.ParentNotebookId
|
newNotebooks.ParentNotebookId = each.ParentNotebookId
|
||||||
|
|||||||
+12
-55
@@ -33,9 +33,8 @@ type ShareService struct {
|
|||||||
|
|
||||||
// 谁共享给了我的Query
|
// 谁共享给了我的Query
|
||||||
func (this *ShareService) getOrQ(userId string) bson.M {
|
func (this *ShareService) getOrQ(userId string) bson.M {
|
||||||
// 得到我和和我参与的组织
|
// 得到我参与的组织
|
||||||
groupIds := groupService.GetMineAndBelongToGroupIds(userId)
|
groupIds := groupService.GetBelongToGroupIds(userId)
|
||||||
|
|
||||||
q := bson.M{}
|
q := bson.M{}
|
||||||
if len(groupIds) > 0 {
|
if len(groupIds) > 0 {
|
||||||
orQ := []bson.M{
|
orQ := []bson.M{
|
||||||
@@ -52,8 +51,6 @@ func (this *ShareService) getOrQ(userId string) bson.M {
|
|||||||
|
|
||||||
// 得到共享给我的笔记本和用户(谁共享给了我)
|
// 得到共享给我的笔记本和用户(谁共享给了我)
|
||||||
func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksByUser, []info.User) {
|
func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksByUser, []info.User) {
|
||||||
myUserId := userId
|
|
||||||
|
|
||||||
// 得到共享给我的用户s信息
|
// 得到共享给我的用户s信息
|
||||||
// 得到我参与的组织
|
// 得到我参与的组织
|
||||||
q := this.getOrQ(userId)
|
q := this.getOrQ(userId)
|
||||||
@@ -67,15 +64,7 @@ func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksB
|
|||||||
db.Distinct(db.ShareNotebooks, q, "UserId", &userIds2) // BUG之前是userId1, 2014/12/29
|
db.Distinct(db.ShareNotebooks, q, "UserId", &userIds2) // BUG之前是userId1, 2014/12/29
|
||||||
|
|
||||||
userIds := append(userIds1, userIds2...)
|
userIds := append(userIds1, userIds2...)
|
||||||
|
|
||||||
userInfos := userService.GetUserInfosOrderBySeq(userIds);
|
userInfos := userService.GetUserInfosOrderBySeq(userIds);
|
||||||
// 不要我的id
|
|
||||||
for i, userInfo := range userInfos {
|
|
||||||
if userInfo.UserId.Hex() == myUserId {
|
|
||||||
userInfos = append(userInfos[:i], userInfos[i+1:]...)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------
|
//--------------------
|
||||||
// 得到他们共享给我的notebooks
|
// 得到他们共享给我的notebooks
|
||||||
@@ -113,11 +102,6 @@ func (this *ShareService) GetShareNotebooks(userId string) (info.ShareNotebooksB
|
|||||||
// 先建立userId => []
|
// 先建立userId => []
|
||||||
for _, eachSub := range subShareNotebooks {
|
for _, eachSub := range subShareNotebooks {
|
||||||
userId := eachSub.Notebook.UserId
|
userId := eachSub.Notebook.UserId
|
||||||
// 我自己的, 算了
|
|
||||||
if userId.Hex() == myUserId {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := shareNotebooksByUsersMap[userId]; ok {
|
if _, ok := shareNotebooksByUsersMap[userId]; ok {
|
||||||
shareNotebooksByUsersMap[userId] = append(shareNotebooksByUsersMap[userId], eachSub)
|
shareNotebooksByUsersMap[userId] = append(shareNotebooksByUsersMap[userId], eachSub)
|
||||||
} else {
|
} else {
|
||||||
@@ -690,7 +674,8 @@ func (this *ShareService) HasReadNotePerm(noteId, userId string) bool {
|
|||||||
|
|
||||||
// 得到笔记分享给的groups
|
// 得到笔记分享给的groups
|
||||||
func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.ShareNote {
|
func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.ShareNote {
|
||||||
groups := groupService.GetGroupsContainOf(userId)
|
// 得到分组s
|
||||||
|
groups := groupService.GetGroups(userId)
|
||||||
|
|
||||||
// 得到有分享的分组
|
// 得到有分享的分组
|
||||||
shares := []info.ShareNote{}
|
shares := []info.ShareNote{}
|
||||||
@@ -717,7 +702,9 @@ func (this *ShareService) GetNoteShareGroups(noteId, userId string) []info.Share
|
|||||||
|
|
||||||
// 共享笔记给分组
|
// 共享笔记给分组
|
||||||
func (this *ShareService) AddShareNoteGroup(userId, noteId, groupId string, perm int) (bool) {
|
func (this *ShareService) AddShareNoteGroup(userId, noteId, groupId string, perm int) (bool) {
|
||||||
if !groupService.IsExistsGroupUser(userId, groupId) {
|
// 得到group, 是否是我的group
|
||||||
|
group := groupService.GetGroup(userId, groupId)
|
||||||
|
if group.GroupId == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -745,7 +732,8 @@ func (this *ShareService) DeleteShareNoteGroup(userId, noteId, groupId string) b
|
|||||||
|
|
||||||
// 得到笔记本分享给的groups
|
// 得到笔记本分享给的groups
|
||||||
func (this *ShareService) GetNotebookShareGroups(notebookId, userId string) []info.ShareNotebook {
|
func (this *ShareService) GetNotebookShareGroups(notebookId, userId string) []info.ShareNotebook {
|
||||||
groups := groupService.GetGroupsContainOf(userId)
|
// 得到分组s
|
||||||
|
groups := groupService.GetGroups(userId)
|
||||||
|
|
||||||
// 得到有分享的分组
|
// 得到有分享的分组
|
||||||
shares := []info.ShareNotebook{}
|
shares := []info.ShareNotebook{}
|
||||||
@@ -772,7 +760,9 @@ func (this *ShareService) GetNotebookShareGroups(notebookId, userId string) []in
|
|||||||
}
|
}
|
||||||
// 共享笔记给分组
|
// 共享笔记给分组
|
||||||
func (this *ShareService) AddShareNotebookGroup(userId, notebookId, groupId string, perm int) (bool) {
|
func (this *ShareService) AddShareNotebookGroup(userId, notebookId, groupId string, perm int) (bool) {
|
||||||
if !groupService.IsExistsGroupUser(userId, groupId) {
|
// 得到group, 是否是我的group
|
||||||
|
group := groupService.GetGroup(userId, groupId)
|
||||||
|
if group.GroupId == "" {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -795,36 +785,3 @@ func (this *ShareService) DeleteShareNotebookGroup(userId, notebookId, groupId s
|
|||||||
"ToGroupId": bson.ObjectIdHex(groupId),
|
"ToGroupId": bson.ObjectIdHex(groupId),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------
|
|
||||||
// 删除组时, 删除所有的
|
|
||||||
//--------------------
|
|
||||||
|
|
||||||
func (this *ShareService) DeleteAllShareNotebookGroup(groupId string) bool {
|
|
||||||
return db.Delete(db.ShareNotebooks, bson.M{
|
|
||||||
"ToGroupId": bson.ObjectIdHex(groupId),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
func (this *ShareService) DeleteAllShareNoteGroup(groupId string) bool {
|
|
||||||
return db.Delete(db.ShareNotes, bson.M{
|
|
||||||
"ToGroupId": bson.ObjectIdHex(groupId),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------
|
|
||||||
// 删除组内用户时, 删除其分享的
|
|
||||||
//--------------------
|
|
||||||
|
|
||||||
func (this *ShareService) DeleteShareNotebookGroupWhenDeleteGroupUser(userId, groupId string) bool {
|
|
||||||
return db.Delete(db.ShareNotebooks, bson.M{
|
|
||||||
"UserId": bson.ObjectIdHex(userId),
|
|
||||||
"ToGroupId": bson.ObjectIdHex(groupId),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *ShareService) DeleteShareNoteGroupWhenDeleteGroupUser(userId, groupId string) bool {
|
|
||||||
return db.Delete(db.ShareNotes, bson.M{
|
|
||||||
"UserId": bson.ObjectIdHex(userId),
|
|
||||||
"ToGroupId": bson.ObjectIdHex(groupId),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="/blog" class="dk" target="_blank">
|
<a href="/blog/admin" class="dk" target="_blank">
|
||||||
My Blog
|
My Blog
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
<a href="/index">leanote</a> © 2014
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
<a href="/index">leanote</a> © 2014
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
<a href="/index">leanote</a> © 2014
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
<a href="http://weibo.com/leanotecom" target="_blank"><i class="fa fa-weibo"></i></a>
|
<a href="http://weibo.com/leanotecom" target="_blank"><i class="fa fa-weibo"></i></a>
|
||||||
<br />
|
<br />
|
||||||
leanote@leanote.com
|
leanote@leanote.com
|
||||||
<br />
|
<div id="beian">
|
||||||
Copyright © 2014-2015 <a href="http://leanote.com">Leanote</a>
|
<a href="http://www.miibeian.gov.cn" target="_blank">沪ICP备14006011号</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<i class="fa fa-globe fa-3x icon-muted"></i>
|
<i class="fa fa-globe fa-3x icon-muted"></i>
|
||||||
|
|||||||
+20
-24
@@ -5,8 +5,7 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="keywords" content="leanote,leanote.com">
|
<meta name="keywords" content="leanote,leanote.com">
|
||||||
<meta name="description" content="Leanote, {{msg $ "moto"}}">
|
<meta name="description" content="leanote, {{msg $ "moto"}}">
|
||||||
<meta property="qc:admins" content="2451332115167456375" />
|
|
||||||
<meta name="author" content="leanote">
|
<meta name="author" content="leanote">
|
||||||
<title>{{.title}}</title>
|
<title>{{.title}}</title>
|
||||||
|
|
||||||
@@ -38,33 +37,31 @@ function log(o) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
<div id="navbar" class="navbar-collapse collapse">
|
||||||
<div id="lang">
|
|
||||||
<a data-lang="en-us">English</a>
|
|
||||||
<a data-lang="fr-fr">Français</a>
|
|
||||||
<a data-lang="zh-cn">简体中文</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="nav navbar-nav navbar-left">
|
<ul class="nav navbar-nav navbar-left">
|
||||||
<li><a href="/index#" data-target="body" class="smooth-scroll">{{msg . "home"}}</a></li>
|
<li><a href="/index#" target="body" class="smooth-scroll">{{msg . "home"}}</a></li>
|
||||||
<li style="position: relative;">
|
<!--
|
||||||
<a id="" href="http://leanote.com/service" title="" class="">{{msg . "service"}}</a>
|
<li><a href="/index#aboutLeanote" target="#aboutLeanote" class="smooth-scroll">{{msg . "aboutLeanote"}}</a> </li>
|
||||||
|
-->
|
||||||
|
<li><a href="/index#download" target="#download" class="smooth-scroll">{{msg . "download"}}</a> </li>
|
||||||
|
<li><a href="/index#donate" target="#donate" class="smooth-scroll">{{msg . "donate"}}</a> </li>
|
||||||
|
<li><a id="leanoteBlog" href="{{.leaUrl}}/index" target="_blank" title="lea++, leanote博客平台" class="">lea++</a></li>
|
||||||
|
<li style="position: relative; margin-right: 3px;">
|
||||||
|
<a href="http://bbs.leanote.com" target="_blank" class="">{{msg . "discussion"}}</a>
|
||||||
<div class="red-circle" style=""></div>
|
<div class="red-circle" style=""></div>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li style="position: relative; margin-right: 3px;">
|
|
||||||
<a href="http://bbs.leanote.com" target="_blank" class="">{{msg . "discussion"}}</a>
|
|
||||||
</li>
|
|
||||||
<li><a id="leanoteBlog" href="http://lea.leanote.com" target="_blank" title="lea++, leanote blog platform" class="">lea++</a></li>
|
|
||||||
<li><a id="leanoteApp" href="http://app.leanote.com" target="_blank" title="Leanote App" class="">{{msg . "desktopApp"}}</a></li>
|
|
||||||
<li><a href="http://leanote.org" target="_blank" title="leanote.org" class="">leanote.org</a></li>
|
|
||||||
|
|
||||||
{{if .userInfo.Email}}
|
|
||||||
<li id="loginBtns">
|
<li id="loginBtns">
|
||||||
|
{{if .userInfo.Email}}
|
||||||
{{msg . "hi"}}, {{.userInfo.Username}}
|
{{msg . "hi"}}, {{.userInfo.Username}}
|
||||||
<a href="{{$.noteUrl}}">{{msg . "myNote"}}</a>
|
<a href="{{$.noteUrl}}">{{msg . "myNote"}}</a>
|
||||||
<a href="/logout">{{msg . "logout"}}</a>
|
<a href="/logout">{{msg . "logout"}}</a>
|
||||||
</li>
|
{{else}}
|
||||||
|
<a href="/login">{{msg . "login"}}</a>
|
||||||
|
{{if .openRegister}}
|
||||||
|
<a href="/register" class="btn-register">{{msg . "register"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
{{end}}
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -94,11 +91,10 @@ function log(o) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul id="blogNav" class="pull-right">
|
<ul id="blogNav" class="pull-right">
|
||||||
<li><a href="#" target="body" class="smooth-scroll">{{msg . "home"}}</a></li>
|
<li><a href="/index#" target="body" class="smooth-scroll">{{msg . "home"}}</a></li>
|
||||||
<li><a href="#download" target="#download" class="smooth-scroll">{{msg . "download"}}</a> </li>
|
<li><a href="/index#download" target="#download" class="smooth-scroll">{{msg . "download"}}</a> </li>
|
||||||
<li><a href="#donate" target="#donate" class="smooth-scroll">{{msg . "donate"}}</a> </li>
|
<li><a href="/index#donate" target="#donate" class="smooth-scroll">{{msg . "donate"}}</a> </li>
|
||||||
<li><a id="leanoteBlog" href="{{.leaUrl}}/index" target="_blank" title="lea++, leanote博客平台" class="">lea++</a></li>
|
<li><a id="leanoteBlog" href="{{.leaUrl}}/index" target="_blank" title="lea++, leanote博客平台" class="">lea++</a></li>
|
||||||
|
|
||||||
<li style="position: relative; margin-right: 3px;">
|
<li style="position: relative; margin-right: 3px;">
|
||||||
<a href="http://bbs.leanote.com" target="_blank" class="">{{msg . "discussion"}}</a>
|
<a href="http://bbs.leanote.com" target="_blank" class="">{{msg . "discussion"}}</a>
|
||||||
<div style="position: absolute;
|
<div style="position: absolute;
|
||||||
|
|||||||
@@ -4,22 +4,23 @@
|
|||||||
</style>
|
</style>
|
||||||
<section>
|
<section>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h2>Leanote, {{msg . "moto"}}</h2>
|
<h2>leanote, {{msg . "moto"}}</h2>
|
||||||
<p>{{msg . "moto3"}}</p>
|
<p>{{msg . "moto3"}}</p>
|
||||||
<p>
|
<p>
|
||||||
Knowledge, Blog, Sharing, Cooperation... all in leanote
|
Knowledge, Blog, Sharing, Cooperation... all in leanote
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<a class="btn btn-primary" href="https://github.com/leanote/leanote">{{msg . "fork github"}}</a>
|
<a class="btn btn-primary" href="https://github.com/leanote/leanote">{{msg . "fork github"}}</a>
|
||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/demo">{{msg . "try"}}</a>
|
<a class="btn btn-default" href="/demo">{{msg . "try"}}</a>
|
||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/login">{{msg . "login"}}</a>
|
|
||||||
{{if .openRegister}}
|
{{if .openRegister}}
|
||||||
|
|
||||||
|
|
||||||
|
OR
|
||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/register">{{msg . "register"}}</a>
|
<a class="btn btn-default" href="/register">{{msg . "register"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
@@ -65,6 +66,20 @@
|
|||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
<div class="container" id="download">
|
||||||
|
<h2 style="margin: 20px 0;text-align: center;">{{msg . "download"}}</h2>
|
||||||
|
<div class="row">
|
||||||
|
<div style="width:300px; margin:auto; padding: 10px;">
|
||||||
|
Linux : <a href="https://github.com/leanote/leanote/releases/download/0.4/leanote-linux-v0.4.bin.tar.gz">leanote-linux-v0.4.bin.tar.gz</a> <br />
|
||||||
|
MacOS X : <a href="https://github.com/leanote/leanote/releases/download/0.4/leanote-mac-v0.4.bin.tar.gz">leanote-mac-v0.4.bin.tar.gz</a> <br />
|
||||||
|
<br />
|
||||||
|
<a href="https://github.com/leanote/leanote#3-how-to-install-leanote">{{msg . "howToInstallLeanote"}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
<div class="container" id="donate">
|
<div class="container" id="donate">
|
||||||
<h2 style="margin: 20px 0;text-align: center;">{{msg . "donate"}}</h2>
|
<h2 style="margin: 20px 0;text-align: center;">{{msg . "donate"}}</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -119,19 +134,6 @@ $(function() {
|
|||||||
var targetOffset = $(t).offset().top - 80;
|
var targetOffset = $(t).offset().top - 80;
|
||||||
$('html,body').animate({scrollTop: targetOffset}, 300);
|
$('html,body').animate({scrollTop: targetOffset}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
function setCookie(name, value) {
|
|
||||||
var Days = 10*365;
|
|
||||||
var exp = new Date();
|
|
||||||
exp.setTime(exp.getTime() + Days*24*60*60*1000);
|
|
||||||
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#lang a').click(function() {
|
|
||||||
var lang = $(this).data('lang');
|
|
||||||
setCookie('LEANOTE_LANG', lang);
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
</style>
|
</style>
|
||||||
<section>
|
<section>
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<h2>Leanote, {{msg . "moto"}}</h2>
|
<h2>leanote, {{msg . "moto"}}</h2>
|
||||||
<p>{{msg . "moto3"}}</p>
|
<p>{{msg . "moto3"}}</p>
|
||||||
<p>{{msg . "moto2"}}</p>
|
<p>{{msg . "moto2"}}</p>
|
||||||
|
|
||||||
@@ -13,12 +13,12 @@
|
|||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/demo">{{msg . "try"}}</a>
|
<a class="btn btn-default" href="/demo">{{msg . "try"}}</a>
|
||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/login">{{msg . "login"}}</a>
|
|
||||||
{{if .openRegister}}
|
{{if .openRegister}}
|
||||||
|
|
||||||
|
|
||||||
|
OR
|
||||||
|
|
||||||
|
|
||||||
<a class="btn btn-default" href="/register">{{msg . "register"}}</a>
|
<a class="btn btn-default" href="/register">{{msg . "register"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
@@ -64,6 +64,20 @@
|
|||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
<div class="container" id="download">
|
||||||
|
<h2 style="margin: 20px 0;text-align: center;">{{msg . "download"}}</h2>
|
||||||
|
<div class="row">
|
||||||
|
<div style="width:300px; margin:auto; padding: 10px;">
|
||||||
|
Linux : <a href="https://github.com/leanote/leanote/releases/download/0.4/leanote-linux-v0.4.bin.tar.gz">leanote-linux-v0.4.bin.tar.gz</a> <br />
|
||||||
|
MacOS X : <a href="https://github.com/leanote/leanote/releases/download/0.4/leanote-mac-v0.4.bin.tar.gz">leanote-mac-v0.4.bin.tar.gz</a> <br />
|
||||||
|
<br />
|
||||||
|
<a href="https://github.com/leanote/leanote#3-how-to-install-leanote">{{msg . "howToInstallLeanote"}}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
<div class="container" id="donate">
|
<div class="container" id="donate">
|
||||||
<h2 style="margin: 20px 0;text-align: center;">{{msg . "donate"}}</h2>
|
<h2 style="margin: 20px 0;text-align: center;">{{msg . "donate"}}</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -119,19 +133,6 @@ $(function() {
|
|||||||
var targetOffset = $(t).offset().top - 80;
|
var targetOffset = $(t).offset().top - 80;
|
||||||
$('html,body').animate({scrollTop: targetOffset}, 300);
|
$('html,body').animate({scrollTop: targetOffset}, 300);
|
||||||
});
|
});
|
||||||
|
|
||||||
function setCookie(name, value) {
|
|
||||||
var Days = 10*365;
|
|
||||||
var exp = new Date();
|
|
||||||
exp.setTime(exp.getTime() + Days*24*60*60*1000);
|
|
||||||
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#lang a').click(function() {
|
|
||||||
var lang = $(this).data('lang');
|
|
||||||
setCookie('LEANOTE_LANG', lang);
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
<a href="/index">leanote</a> © 2014
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
<a href="/index">leanote</a> © 2014
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<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">
|
||||||
|
<meta name="keywords" content="leanote,leanote.com">
|
||||||
|
<meta name="description" content="leanote, {{msg $ "moto"}}">
|
||||||
|
<meta name="author" content="leanote">
|
||||||
|
|
||||||
|
<title>{{.title}}</title>
|
||||||
|
<link href="{{.siteUrl}}/css/bootstrap.css" rel="stylesheet">
|
||||||
|
<link id="styleLink" href="{{.siteUrl}}/css/toImage.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="content">
|
||||||
|
<h1 class="title">
|
||||||
|
{{.blog.Title}}
|
||||||
|
</h1>
|
||||||
|
<div class="created-time">
|
||||||
|
{{ if .userBlog.Logo}}
|
||||||
|
<img src="{{.userBlog.Logo}}" id="logo">
|
||||||
|
{{else}}
|
||||||
|
<img src="{{$.siteUrl}}/images/blog/default_avatar.png" id="logo">
|
||||||
|
{{end}}
|
||||||
|
{{.userInfo.Username}}
|
||||||
|
|
||||||
|
{{if .blog.Tags}}
|
||||||
|
<img src="{{$.siteUrl}}/images/blog/tag.png" id="tag">
|
||||||
|
{{blogTags .blog.Tags}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="desc">
|
||||||
|
{{if .blog.IsMarkdown }}
|
||||||
|
<div id="markdownContent" style="display: none">
|
||||||
|
<!-- 用textarea装html, 防止得到的值失真 -->
|
||||||
|
<textarea>
|
||||||
|
{{.content | raw}}
|
||||||
|
</textarea>
|
||||||
|
</div>
|
||||||
|
<div id="parsedContent">
|
||||||
|
</div>
|
||||||
|
{{else}}
|
||||||
|
{{.content | raw}}
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="footer">
|
||||||
|
<p>
|
||||||
|
{{ if .userBlog.Logo}}
|
||||||
|
<img src="{{.userBlog.Logo}}" id="logo">
|
||||||
|
{{else}}
|
||||||
|
<img src="{{$.siteUrl}}/images/blog/default_avatar.png" id="logo">
|
||||||
|
{{end}}
|
||||||
|
(<a href="#">http://blog.leanote.com/{{.userInfo.Username}}</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="{{.siteUrl}}/images/logo/leanote_white.png" id="leanote_logo"/>
|
||||||
|
<p>
|
||||||
|
leanote, {{msg $ "moto"}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="{{.siteUrl}}/js/jquery-1.9.0.min.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/js/bootstrap-min.js"></script>
|
||||||
|
|
||||||
|
<link href="{{.siteUrl}}/public/mdeditor/editor/google-code-prettify/prettify.css" type="text/css" rel="stylesheet">
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/google-code-prettify/prettify.js"></script>
|
||||||
|
<script>
|
||||||
|
$("pre").addClass("prettyprint linenums");
|
||||||
|
prettyPrint();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{if .blog.IsMarkdown }}
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/google-code-prettify/prettify.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/pagedown/Markdown.Converter.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/pagedown/Markdown.Sanitizer.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/pagedown/Markdown.Editor.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/pagedown/local/Markdown.local.zh.js"></script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/Markdown.Extra.js"></script>
|
||||||
|
|
||||||
|
<!--mathjax-->
|
||||||
|
<script type="text/x-mathjax-config">
|
||||||
|
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]], processEscapes: true }, messageStyle: "none"});
|
||||||
|
</script>
|
||||||
|
<script src="{{.siteUrl}}/public/mdeditor/editor/mathJax.js"></script>
|
||||||
|
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||||
|
<script>
|
||||||
|
var content = $.trim($("#markdownContent textarea").val());
|
||||||
|
var converter = Markdown.getSanitizingConverter();
|
||||||
|
Markdown.Extra.init(converter, {extensions: ["tables", "fenced_code_gfm", "def_list"]});
|
||||||
|
var html = converter.makeHtml(content);
|
||||||
|
$("#parsedContent").html(html);
|
||||||
|
$("pre").addClass("prettyprint linenums");
|
||||||
|
prettyPrint();
|
||||||
|
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"wmd-preview"]);
|
||||||
|
</script>
|
||||||
|
{{end}}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
lif------------
|
||||||
|
e
|
||||||
|
|
||||||
|
you can
|
||||||
@@ -40,32 +40,23 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<style>
|
|
||||||
.mce-btn.mce-active, .mce-btn.mce-active:hover {
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
}
|
|
||||||
.mce-btn {
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{{template "member/footer.html" .}}
|
{{template "member/footer.html" .}}
|
||||||
<script type="text/javascript" src="/tinymce/tinymce.js"></script>
|
<script type="text/javascript" src="/tinymce/tinymce.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var urlPrefix = "{{.siteUrl}}";
|
var urlPrefix = "{{.siteUrl}}";
|
||||||
var LeaAce = {nowIsInAce: function() {return false;}};
|
|
||||||
$(function() {
|
$(function() {
|
||||||
tinymce.init({
|
tinymce.init({
|
||||||
selector : "#content1",
|
selector : "#content1",
|
||||||
content_css : ["/css/editor/editor.css" ],
|
content_css : [ "/css/bootstrap.css", "/css/editor/editor.css" ],
|
||||||
theme : "leanote",
|
skin : "custom",
|
||||||
language : "{{.locale}}",
|
language : "{{.locale}}",
|
||||||
height : 300,
|
height : 300,
|
||||||
width : "100%",
|
width : "100%",
|
||||||
// skin : "custom",
|
skin : "custom",
|
||||||
plugins : [
|
plugins : [
|
||||||
"advlist autolink link lists charmap hr ",
|
"advlist autolink link leanote_image lists charmap hr ",
|
||||||
"searchreplace visualblocks visualchars tabfocus",
|
"searchreplace visualblocks visualchars tabfocus",
|
||||||
"table contextmenu directionality textcolor fullpage textcolor"],
|
"table contextmenu directionality textcolor paste fullpage textcolor"],
|
||||||
toolbar1 : "formatselect |fontselect fontsizeselect| forecolor backcolor | bold italic underline strikethrough | bullist numlist |",
|
toolbar1 : "formatselect |fontselect fontsizeselect| forecolor backcolor | bold italic underline strikethrough | bullist numlist |",
|
||||||
menubar : false,
|
menubar : false,
|
||||||
statusbar : false,
|
statusbar : false,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
{{range .myTpls}}
|
{{range .myTpls}}
|
||||||
<a href="#" class="list-group-item " data-file="{{.}}">
|
<a href="#" class="list-group-item " data-file="{{.}}">
|
||||||
<i class="fa fa-remove icon-muted remove-file" title="delete file" ></i>
|
<i class="fa fa-remove icon-muted remove-file" title="delete file" ></i>
|
||||||
<span class="filename" data-filename="{{.}}">{{.}}</span>
|
{{.}}
|
||||||
<span class="badge"></span>
|
<span class="badge"></span>
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
@@ -123,7 +123,7 @@ var theme = {
|
|||||||
saveBtnO: $("#saveBtn"),
|
saveBtnO: $("#saveBtn"),
|
||||||
newFileO: $("#newFile"),
|
newFileO: $("#newFile"),
|
||||||
curTpl: "",
|
curTpl: "",
|
||||||
tplInfos: {"header.html": "{{msg . "header"}}", "footer.html": "{{msg . "footer"}}", "index.html": "{{msg . "index"}}", "cate.html": "{{msg . "cate"}}", "search.html": "{{msg . "search"}}", "single.html": "{{msg . "single"}}", "archive.html": "{{msg . "archive"}}", "post.html": "{{msg . "post"}}", "tags.html": "{{msg . "tags"}}", "tag_posts.html": "{{msg . "tag_posts"}}", "share_comment.html": "{{msg . "share_comment"}}", "404.html":"404", "theme.json": "{{msg . "themeJson"}}", "paging.html": "{{msg . "paging"}}", "highlight.html": "{{msg . "highlight"}}"},
|
tplInfos: {"header.html": "{{msg . "header"}}", "footer.html": "{{msg . "footer"}}", "index.html": "{{msg . "header"}}", "cate.html": "{{msg . "cate"}}", "search.html": "{{msg . "search"}}", "single.html": "{{msg . "single"}}", "archive.html": "{{msg . "archive"}}", "post.html": "{{msg . "post"}}", "tags.html": "{{msg . "tags"}}", "tag_posts.html": "{{msg . "tag_posts"}}", "share_comment.html": "{{msg . "share_comment"}}", "404.html":"404", "theme.json": "{{msg . "themeJson"}}", "paging.html": "{{msg . "paging"}}", "highlight.html": "{{msg . "highlight"}}"},
|
||||||
init: function() {
|
init: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.showTplInfo();
|
self.showTplInfo();
|
||||||
@@ -171,22 +171,12 @@ var theme = {
|
|||||||
newFile: function() {
|
newFile: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.newFileO.click(function() {
|
self.newFileO.click(function() {
|
||||||
// 文件是否存在?
|
art.prompt("文件名", function(file){
|
||||||
|
|
||||||
|
|
||||||
art.prompt("Filename", function(file) {
|
|
||||||
if(!file) {
|
if(!file) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if($('[data-filename="' + file + '"]').length > 0) {
|
var t = '<a href="#" class="list-group-item " data-file="' + file + '"> <i class="fa fa-remove icon-muted remove-file" title="delete file" ></i> ' + file + '<span class="badge"></span></a>';
|
||||||
art.alert('File exists');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var t = $('<a href="#" class="list-group-item " data-file="' + file + '"> <i class="fa fa-remove icon-muted remove-file" title="delete file" ></i> <span class="filename" data-filename="' + file + '">' + file + '</span><span class="badge"></span></a>');
|
|
||||||
$(".file-list").append(t);
|
$(".file-list").append(t);
|
||||||
self.cache[file] = "";
|
|
||||||
// trigger click, 选中之
|
|
||||||
t.click();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -216,9 +206,6 @@ var theme = {
|
|||||||
var content = editor.getValue()
|
var content = editor.getValue()
|
||||||
|
|
||||||
var filename = self.curTpl;
|
var filename = self.curTpl;
|
||||||
if(!filename) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 之前的内容是否有改动
|
// 之前的内容是否有改动
|
||||||
if(self.cache[filename] == content) {
|
if(self.cache[filename] == content) {
|
||||||
return;
|
return;
|
||||||
@@ -247,7 +234,7 @@ var theme = {
|
|||||||
renderContent: function(name, content) {
|
renderContent: function(name, content) {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.curTplO.html(name);
|
self.curTplO.html(name);
|
||||||
self.curTpl = name; // 这里才设置
|
self.curTpl = name; // 这里设计
|
||||||
var lang = "html";
|
var lang = "html";
|
||||||
if(name.indexOf(".js") > 0 || name.indexOf(".json") > 0) {
|
if(name.indexOf(".js") > 0 || name.indexOf(".json") > 0) {
|
||||||
lang = "javascript";
|
lang = "javascript";
|
||||||
@@ -264,8 +251,8 @@ var theme = {
|
|||||||
renderTpl: function(name) {
|
renderTpl: function(name) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var content = "";
|
var content = "";
|
||||||
self.curTpl = ""; // 这里设置为空
|
self.curTpl = name; // 这里设置
|
||||||
if(self.cache[name] != undefined) {
|
if(self.cache[name]) {
|
||||||
content = self.cache[name];
|
content = self.cache[name];
|
||||||
self.renderContent(name, content);
|
self.renderContent(name, content);
|
||||||
return;
|
return;
|
||||||
@@ -277,7 +264,6 @@ var theme = {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
//-----------------
|
//-----------------
|
||||||
// theme images
|
// theme images
|
||||||
imageListO: $("#imageList"),
|
imageListO: $("#imageList"),
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
<meta name="apple-touch-fullscreen" content="yes">
|
<meta name="apple-touch-fullscreen" content="yes">
|
||||||
<meta name=”apple-mobile-web-app-capable” content=”yes” />
|
<meta name=”apple-mobile-web-app-capable” content=”yes” />
|
||||||
<meta name="keywords" content="leanote,leanote.com">
|
<meta name="keywords" content="leanote,leanote.com">
|
||||||
<meta name="description" content="Leanote, {{msg $ "moto"}}">
|
<meta name="description" content="leanote, Not Just A Notebook">
|
||||||
<title>Leanote, {{msg $ "moto"}}</title>
|
<title>leanote, Not Just A Notebook</title>
|
||||||
|
|
||||||
<link href="/css/bootstrap.css" rel="stylesheet" />
|
<link href="/css/bootstrap.css" rel="stylesheet" />
|
||||||
<!-- 先加载, 没有样式, 宽度不定 -->
|
<!-- 先加载, 没有样式, 宽度不定 -->
|
||||||
@@ -186,11 +186,13 @@ function log(o) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
<div class="pull-right top-nav writting-hide lea-blog">
|
<div class="pull-right top-nav writting-hide lea-blog">
|
||||||
<a target="_blank" href="http://lea.leanote.com">
|
<a target="_blank" href="http://lea.leanote.com">
|
||||||
lea++
|
lea++
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
-->
|
||||||
|
|
||||||
<div class="pull-right top-nav writting-hide" id="myBlog">
|
<div class="pull-right top-nav writting-hide" id="myBlog">
|
||||||
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
|
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
|
||||||
@@ -414,7 +416,29 @@ function log(o) {
|
|||||||
<div class="noteSplit" id="noteSplitter"></div>
|
<div class="noteSplit" id="noteSplitter"></div>
|
||||||
|
|
||||||
<div id="note">
|
<div id="note">
|
||||||
|
<!-- 只读模式 -->
|
||||||
|
<div id="noteRead">
|
||||||
|
<div id="noteReadContainer">
|
||||||
|
<div id="noteReadTop">
|
||||||
|
<h2 id="noteReadTitle"></h2>
|
||||||
|
<div class="clearfix" id="noteReadInfo">
|
||||||
|
<i class="fa fa-bookmark-o"></i>
|
||||||
|
<span id="noteReadTags"></span>
|
||||||
|
|
||||||
|
<!-- 修改时间 -->
|
||||||
|
<i class="fa fa-clock-o"></i>{{msg . "update"}}
|
||||||
|
<span id="noteReadUpdatedTime"></span>
|
||||||
|
|
||||||
|
<!-- 修改时间 -->
|
||||||
|
<i class="fa fa-clock-o"></i>{{msg . "create"}}
|
||||||
|
<span id="noteReadCreatedTime"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="noteReadContent">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- 遮罩, 为了resize3Columns用 -->
|
<!-- 遮罩, 为了resize3Columns用 -->
|
||||||
<div id="noteMask" class="note-mask"></div>
|
<div id="noteMask" class="note-mask"></div>
|
||||||
<div id="noteMaskForLoading" class="note-mask">
|
<div id="noteMaskForLoading" class="note-mask">
|
||||||
@@ -522,38 +546,17 @@ function log(o) {
|
|||||||
<div id="noteTitleDiv">
|
<div id="noteTitleDiv">
|
||||||
<input name="noteTitle" id="noteTitle" value="" placeholder="{{msg . "unTitled"}}" tabindex="1" />
|
<input name="noteTitle" id="noteTitle" value="" placeholder="{{msg . "unTitled"}}" tabindex="1" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 只读时 -->
|
|
||||||
<div id="noteReadTop">
|
|
||||||
<h2 id="noteReadTitle"></h2>
|
|
||||||
<div class="clearfix" id="noteReadInfo">
|
|
||||||
<i class="fa fa-bookmark-o"></i>
|
|
||||||
<span id="noteReadTags"></span>
|
|
||||||
|
|
||||||
<!-- 修改时间 -->
|
|
||||||
<i class="fa fa-clock-o"></i> {{msg . "update"}}
|
|
||||||
<span id="noteReadUpdatedTime"></span>
|
|
||||||
|
|
||||||
<!-- 修改时间 -->
|
|
||||||
<i class="fa fa-clock-o"></i> {{msg . "create"}}
|
|
||||||
<span id="noteReadCreatedTime"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="editor">
|
<div id="editor">
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<div id="mceToolbar">
|
<div id="mceToolbar">
|
||||||
<div id="mceToolbarContainer">
|
<div id="popularToolbar"
|
||||||
<div id="popularToolbar" style="position: absolute; right: 30px; left: 0"></div>
|
style="position: absolute; right: 30px; left: 0"></div>
|
||||||
<a id="moreBtn"> <i class="fa more-fa"></i></a>
|
<a
|
||||||
</div>
|
style="dispaly: block; position: absolute; cursor: pointer; right: 10px; padding: 3px 10px"
|
||||||
<!-- 查看信息 -->
|
id="moreBtn"> <i class="fa fa-angle-down"></i>
|
||||||
<div id="infoToolbar" class="info-toolbar">
|
</a>
|
||||||
<a class="toolbar-update"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
|
|
||||||
<span class="lang">{{msg . "created"}}</span>: <span class="created-time">2015-04-03</span>
|
|
||||||
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time">2015-05-01</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="editorBg"></div>
|
<div class="editorBg"></div>
|
||||||
<div id="leanoteNav" class="leanoteNav">
|
<div id="leanoteNav" class="leanoteNav">
|
||||||
@@ -583,17 +586,11 @@ function log(o) {
|
|||||||
|
|
||||||
<div id="mdEditor">
|
<div id="mdEditor">
|
||||||
|
|
||||||
|
|
||||||
<div class="layout-wrapper-l1">
|
<div class="layout-wrapper-l1">
|
||||||
<div class="layout-wrapper-l2">
|
<div class="layout-wrapper-l2">
|
||||||
<div class="navbar navbar-default">
|
<div class="navbar navbar-default">
|
||||||
<div class="navbar-inner" id="wmd-button-bar">
|
<div class="navbar-inner" id="wmd-button-bar">
|
||||||
<div id="mdInfoToolbar" class="info-toolbar">
|
|
||||||
<a class="toolbar-update"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
|
|
||||||
<span class="lang">{{msg . "created"}}</span>: <span class="created-time">2015-04-03</span>
|
|
||||||
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time">2015-05-01</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="wmd-button-bar-inner">
|
|
||||||
<ul class="nav left-buttons">
|
<ul class="nav left-buttons">
|
||||||
<li class="wmd-button-group1 btn-group"></li>
|
<li class="wmd-button-group1 btn-group"></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -632,7 +629,6 @@ function log(o) {
|
|||||||
</ul>
|
</ul>
|
||||||
-->
|
-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="editorBg"></div>
|
<div class="editorBg"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout-wrapper-l3">
|
<div class="layout-wrapper-l3">
|
||||||
@@ -904,7 +900,6 @@ var GlobalConfigs = {{.globalConfigs|jsonJs}}; // 2014/11/9 beta2
|
|||||||
|
|
||||||
<!-- 渲染view -->
|
<!-- 渲染view -->
|
||||||
<script src="/tinymce/tinymce.js"></script>
|
<script src="/tinymce/tinymce.js"></script>
|
||||||
|
|
||||||
<script src="/public/libs/ace/ace.js"></script>
|
<script src="/public/libs/ace/ace.js"></script>
|
||||||
<script src="/js/app/page.js"></script>
|
<script src="/js/app/page.js"></script>
|
||||||
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll.js"></script>
|
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll.js"></script>
|
||||||
@@ -924,14 +919,13 @@ initPage();
|
|||||||
|
|
||||||
<!-- v2 use require.js, mdeditor -->
|
<!-- v2 use require.js, mdeditor -->
|
||||||
<script>
|
<script>
|
||||||
// 当tinymce.dev.js时, 请注释require
|
window.baseDir = '/public/dist';
|
||||||
window.require = {
|
window.require = {
|
||||||
baseUrl: '/public',
|
baseUrl: window.baseDir,
|
||||||
|
deps: ['main']
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/require.js"></script>
|
<script src="/js/require.js"></script>
|
||||||
<script src="/public/dist/main.min.js"></script>
|
|
||||||
<script src="/public/js/upload_paste/main.js"></script>
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
+36
-42
@@ -7,8 +7,8 @@
|
|||||||
<meta name="apple-touch-fullscreen" content="yes">
|
<meta name="apple-touch-fullscreen" content="yes">
|
||||||
<meta name=”apple-mobile-web-app-capable” content=”yes” />
|
<meta name=”apple-mobile-web-app-capable” content=”yes” />
|
||||||
<meta name="keywords" content="leanote,leanote.com">
|
<meta name="keywords" content="leanote,leanote.com">
|
||||||
<meta name="description" content="Leanote, {{msg $ "moto"}}">
|
<meta name="description" content="leanote, Not Just A Notebook">
|
||||||
<title>Leanote, {{msg $ "moto"}}</title>
|
<title>leanote, Not Just A Notebook</title>
|
||||||
|
|
||||||
<link href="/css/bootstrap.css" rel="stylesheet" />
|
<link href="/css/bootstrap.css" rel="stylesheet" />
|
||||||
<!-- 先加载, 没有样式, 宽度不定 -->
|
<!-- 先加载, 没有样式, 宽度不定 -->
|
||||||
@@ -186,11 +186,13 @@ function log(o) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
<div class="pull-right top-nav writting-hide lea-blog">
|
<div class="pull-right top-nav writting-hide lea-blog">
|
||||||
<a target="_blank" href="http://lea.leanote.com">
|
<a target="_blank" href="http://lea.leanote.com">
|
||||||
lea++
|
lea++
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
-->
|
||||||
|
|
||||||
<div class="pull-right top-nav writting-hide" id="myBlog">
|
<div class="pull-right top-nav writting-hide" id="myBlog">
|
||||||
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
|
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
|
||||||
@@ -414,7 +416,29 @@ function log(o) {
|
|||||||
<div class="noteSplit" id="noteSplitter"></div>
|
<div class="noteSplit" id="noteSplitter"></div>
|
||||||
|
|
||||||
<div id="note">
|
<div id="note">
|
||||||
|
<!-- 只读模式 -->
|
||||||
|
<div id="noteRead">
|
||||||
|
<div id="noteReadContainer">
|
||||||
|
<div id="noteReadTop">
|
||||||
|
<h2 id="noteReadTitle"></h2>
|
||||||
|
<div class="clearfix" id="noteReadInfo">
|
||||||
|
<i class="fa fa-bookmark-o"></i>
|
||||||
|
<span id="noteReadTags"></span>
|
||||||
|
|
||||||
|
<!-- 修改时间 -->
|
||||||
|
<i class="fa fa-clock-o"></i>{{msg . "update"}}
|
||||||
|
<span id="noteReadUpdatedTime"></span>
|
||||||
|
|
||||||
|
<!-- 修改时间 -->
|
||||||
|
<i class="fa fa-clock-o"></i>{{msg . "create"}}
|
||||||
|
<span id="noteReadCreatedTime"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="noteReadContent">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<!-- 遮罩, 为了resize3Columns用 -->
|
<!-- 遮罩, 为了resize3Columns用 -->
|
||||||
<div id="noteMask" class="note-mask"></div>
|
<div id="noteMask" class="note-mask"></div>
|
||||||
<div id="noteMaskForLoading" class="note-mask">
|
<div id="noteMaskForLoading" class="note-mask">
|
||||||
@@ -522,38 +546,17 @@ function log(o) {
|
|||||||
<div id="noteTitleDiv">
|
<div id="noteTitleDiv">
|
||||||
<input name="noteTitle" id="noteTitle" value="" placeholder="{{msg . "unTitled"}}" tabindex="1" />
|
<input name="noteTitle" id="noteTitle" value="" placeholder="{{msg . "unTitled"}}" tabindex="1" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 只读时 -->
|
|
||||||
<div id="noteReadTop">
|
|
||||||
<h2 id="noteReadTitle"></h2>
|
|
||||||
<div class="clearfix" id="noteReadInfo">
|
|
||||||
<i class="fa fa-bookmark-o"></i>
|
|
||||||
<span id="noteReadTags"></span>
|
|
||||||
|
|
||||||
<!-- 修改时间 -->
|
|
||||||
<i class="fa fa-clock-o"></i> {{msg . "update"}}
|
|
||||||
<span id="noteReadUpdatedTime"></span>
|
|
||||||
|
|
||||||
<!-- 修改时间 -->
|
|
||||||
<i class="fa fa-clock-o"></i> {{msg . "create"}}
|
|
||||||
<span id="noteReadCreatedTime"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="editor">
|
<div id="editor">
|
||||||
<!-- 编辑器 -->
|
<!-- 编辑器 -->
|
||||||
<div id="mceToolbar">
|
<div id="mceToolbar">
|
||||||
<div id="mceToolbarContainer">
|
<div id="popularToolbar"
|
||||||
<div id="popularToolbar" style="position: absolute; right: 30px; left: 0"></div>
|
style="position: absolute; right: 30px; left: 0"></div>
|
||||||
<a id="moreBtn"> <i class="fa more-fa"></i></a>
|
<a
|
||||||
</div>
|
style="dispaly: block; position: absolute; cursor: pointer; right: 10px; padding: 3px 10px"
|
||||||
<!-- 查看信息 -->
|
id="moreBtn"> <i class="fa fa-angle-down"></i>
|
||||||
<div id="infoToolbar" class="info-toolbar">
|
</a>
|
||||||
<a class="toolbar-update"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
|
|
||||||
<span class="lang">{{msg . "created"}}</span>: <span class="created-time">2015-04-03</span>
|
|
||||||
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time">2015-05-01</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="editorBg"></div>
|
<div class="editorBg"></div>
|
||||||
<div id="leanoteNav" class="leanoteNav">
|
<div id="leanoteNav" class="leanoteNav">
|
||||||
@@ -583,17 +586,11 @@ function log(o) {
|
|||||||
|
|
||||||
<div id="mdEditor">
|
<div id="mdEditor">
|
||||||
|
|
||||||
|
|
||||||
<div class="layout-wrapper-l1">
|
<div class="layout-wrapper-l1">
|
||||||
<div class="layout-wrapper-l2">
|
<div class="layout-wrapper-l2">
|
||||||
<div class="navbar navbar-default">
|
<div class="navbar navbar-default">
|
||||||
<div class="navbar-inner" id="wmd-button-bar">
|
<div class="navbar-inner" id="wmd-button-bar">
|
||||||
<div id="mdInfoToolbar" class="info-toolbar">
|
|
||||||
<a class="toolbar-update"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
|
|
||||||
<span class="lang">{{msg . "created"}}</span>: <span class="created-time">2015-04-03</span>
|
|
||||||
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time">2015-05-01</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="wmd-button-bar-inner">
|
|
||||||
<ul class="nav left-buttons">
|
<ul class="nav left-buttons">
|
||||||
<li class="wmd-button-group1 btn-group"></li>
|
<li class="wmd-button-group1 btn-group"></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -632,7 +629,6 @@ function log(o) {
|
|||||||
</ul>
|
</ul>
|
||||||
-->
|
-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="editorBg"></div>
|
<div class="editorBg"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout-wrapper-l3">
|
<div class="layout-wrapper-l3">
|
||||||
@@ -904,7 +900,6 @@ var GlobalConfigs = {{.globalConfigs|jsonJs}}; // 2014/11/9 beta2
|
|||||||
|
|
||||||
<!-- 渲染view -->
|
<!-- 渲染view -->
|
||||||
<script src="/tinymce/tinymce.min.js"></script>
|
<script src="/tinymce/tinymce.min.js"></script>
|
||||||
|
|
||||||
<script src="/public/libs/ace/ace.js"></script>
|
<script src="/public/libs/ace/ace.js"></script>
|
||||||
<script src="/js/app/page-min.js"></script>
|
<script src="/js/app/page-min.js"></script>
|
||||||
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll-min.js"></script>
|
<script src="/js/jQuery-slimScroll-1.3.0/jquery.slimscroll-min.js"></script>
|
||||||
@@ -924,14 +919,13 @@ initPage();
|
|||||||
|
|
||||||
<!-- v2 use require.js, mdeditor -->
|
<!-- v2 use require.js, mdeditor -->
|
||||||
<script>
|
<script>
|
||||||
// 当tinymce.min.js时, 请注释require
|
window.baseDir = '/public/dist';
|
||||||
window.require = {
|
window.require = {
|
||||||
baseUrl: '/public',
|
baseUrl: window.baseDir,
|
||||||
|
deps: ['main']
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<script src="/js/require.js"></script>
|
<script src="/js/require.js"></script>
|
||||||
<script src="/public/dist/main.min.js"></script>
|
|
||||||
<script src="/public/js/upload_paste/main.js"></script>
|
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{{template "home/header_box.html" .}}
|
||||||
|
|
||||||
|
<section id="box" class="animated fadeInUp">
|
||||||
|
<div>
|
||||||
|
<h1 id="logo">leanote</h1>
|
||||||
|
<div id="boxForm">
|
||||||
|
<div id="boxHeader">We got a error</div>
|
||||||
|
<form>
|
||||||
|
<div class="alert alert-danger" id="loginMsg" style="display: block">
|
||||||
|
Sorry, we can't get your infomation.
|
||||||
|
|
||||||
|
<br />
|
||||||
|
Please <a href="/login">{{msg . "login"}}</a> Or <a href="/register?email={{.email}}">{{msg . "register"}}</a>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div id="boxFooter">
|
||||||
|
<p>
|
||||||
|
<a href="/login">{{msg . "login"}}</a>
|
||||||
|
|
||||||
|
<a href="/index">{{msg . "home"}}</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="/index">leanote</a> © 2014
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+37
-95
@@ -2,83 +2,40 @@
|
|||||||
|
|
||||||
# release leanote
|
# release leanote
|
||||||
|
|
||||||
# 当前路径
|
|
||||||
SP=$(cd "$(dirname "$0")"; pwd)
|
SP=$(cd "$(dirname "$0")"; pwd)
|
||||||
|
|
||||||
|
cd $SP
|
||||||
|
cd ../
|
||||||
|
|
||||||
# tmp path to store leanote release files
|
# tmp path to store leanote release files
|
||||||
tmp="/Users/life/Desktop/leanote_release"
|
tmp="/Users/life/Desktop/leanote_release"
|
||||||
|
|
||||||
# version
|
version=x86_64.v1.0-beta.2
|
||||||
V="v1.0-beta.4"
|
|
||||||
|
|
||||||
##=================================
|
|
||||||
# 1. 先build 成 3个平台, 2种bit = 6种
|
|
||||||
##=================================
|
|
||||||
|
|
||||||
# cd /Documents/Go/package2/src/github.com/leanote/leanote/bin
|
|
||||||
# GOOS=darwin GOARCH=amd64 go build -o leanote-darwin-amd64 ../app/tmp
|
|
||||||
|
|
||||||
cd $SP
|
|
||||||
|
|
||||||
# $1 = darwin, linux
|
|
||||||
# $2 = amd64
|
|
||||||
function build()
|
|
||||||
{
|
|
||||||
echo build-$1-$2
|
|
||||||
if [ $1 = "linux" -o $1 = "darwin" ]
|
|
||||||
then
|
|
||||||
suffix=""
|
|
||||||
else
|
|
||||||
suffix=".exe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
GOOS=$1 GOARCH=$2 go build -o leanote-$1-$2$suffix ../app/tmp
|
|
||||||
}
|
|
||||||
|
|
||||||
build "linux" "386";
|
|
||||||
build "linux" "amd64";
|
|
||||||
build "darwin" "386";
|
|
||||||
build "darwin" "amd64";
|
|
||||||
build "windows" "386";
|
|
||||||
build "windows" "amd64";
|
|
||||||
|
|
||||||
|
|
||||||
##======================
|
|
||||||
# 2. release目录准备工作
|
|
||||||
##======================
|
|
||||||
rm -rf $tmp/leanote
|
rm -rf $tmp/leanote
|
||||||
mkdir -p $tmp/leanote/app
|
mkdir -p $tmp/leanote/app
|
||||||
mkdir -p $tmp/leanote/conf
|
mkdir -p $tmp/leanote/conf
|
||||||
mkdir -p $tmp/leanote/bin
|
mkdir -p $tmp/leanote/bin
|
||||||
|
|
||||||
##==================
|
|
||||||
# 3. 复制
|
|
||||||
##==================
|
|
||||||
|
|
||||||
cd $SP
|
|
||||||
cd ../
|
|
||||||
|
|
||||||
# bin
|
# bin
|
||||||
cp -r ./bin/src $tmp/leanote/bin/
|
cp -r ./bin/src $tmp/leanote/bin/
|
||||||
cp ./bin/run.sh $tmp/leanote/bin/
|
cp ./bin/run.sh $tmp/leanote/bin/
|
||||||
cp ./bin/run.bat $tmp/leanote/bin/
|
|
||||||
|
# LICENSE
|
||||||
|
cp ./LICENSE $tmp/leanote/
|
||||||
|
|
||||||
# views
|
# views
|
||||||
cp -r ./app/views $tmp/leanote/app
|
cp -r ./app/views $tmp/leanote/app
|
||||||
# 可不要, 源码
|
# 可不要
|
||||||
#cp -r ./app/service $tmp/leanote/app/service
|
cp -r ./app/service $tmp/leanote/app/service
|
||||||
#cp -r ./app/controllers $tmp/leanote/app/controllers
|
cp -r ./app/controllers $tmp/leanote/app/controllers
|
||||||
#cp -r ./app/db $tmp/leanote/app/db
|
cp -r ./app/db $tmp/leanote/app/db
|
||||||
#cp -r ./app/info $tmp/leanote/app/info
|
cp -r ./app/info $tmp/leanote/app/info
|
||||||
#cp -r ./app/lea $tmp/leanote/app/lea
|
cp -r ./app/lea $tmp/leanote/app/lea
|
||||||
|
|
||||||
# conf
|
# conf
|
||||||
cp ./conf/app.conf $tmp/leanote/conf/app.conf
|
cp ./conf/app.conf-default $tmp/leanote/conf/app.conf
|
||||||
cp ./conf/routes $tmp/leanote/conf/routes
|
cp ./conf/routes-default $tmp/leanote/conf/routes
|
||||||
# 处理app.conf, 还原配置
|
|
||||||
cat $tmp/leanote/conf/app.conf | sed 's/db.dbname=leanote.*#/db.dbname=leanote #/' > $tmp/leanote/conf/app.conf2 # 不能直接覆盖
|
|
||||||
rm $tmp/leanote/conf/app.conf
|
|
||||||
mv $tmp/leanote/conf/app.conf2 $tmp/leanote/conf/app.conf
|
|
||||||
|
|
||||||
# others
|
# others
|
||||||
cp -r ./messages ./public ./mongodb_backup $tmp/leanote/
|
cp -r ./messages ./public ./mongodb_backup $tmp/leanote/
|
||||||
@@ -87,55 +44,40 @@ cp -r ./messages ./public ./mongodb_backup $tmp/leanote/
|
|||||||
rm -r $tmp/leanote/public/tinymce/classes
|
rm -r $tmp/leanote/public/tinymce/classes
|
||||||
rm -r $tmp/leanote/public/upload
|
rm -r $tmp/leanote/public/upload
|
||||||
mkdir $tmp/leanote/public/upload
|
mkdir $tmp/leanote/public/upload
|
||||||
|
mkdir $tmp/leanote/files
|
||||||
rm -r $tmp/leanote/public/.codekit-cache
|
rm -r $tmp/leanote/public/.codekit-cache
|
||||||
rm $tmp/leanote/public/.DS_Store
|
rm $tmp/leanote/public/.DS_Store
|
||||||
rm $tmp/leanote/public/config.codekit
|
rm $tmp/leanote/public/config.codekit
|
||||||
|
|
||||||
# make link
|
# make link
|
||||||
# cd $tmp/leanote/bin
|
cd $tmp/leanote/bin
|
||||||
|
mkdir ./src/github.com/leanote
|
||||||
# ln -s ../../../../ ./src/github.com/leanote/leanote
|
# ln -s ../../../../ ./src/github.com/leanote/leanote
|
||||||
|
|
||||||
# archieve
|
# archieve
|
||||||
# << 'BLOCK
|
# << 'BLOCK
|
||||||
|
# linux
|
||||||
##===========
|
|
||||||
# 4. 打包
|
|
||||||
##===========
|
|
||||||
# $1 = linux
|
|
||||||
# $2 = 386, amd64
|
|
||||||
|
|
||||||
# 创建一个$V的目录存放之
|
|
||||||
rm -rf $tmp/$V
|
|
||||||
mkdir $tmp/$V
|
|
||||||
|
|
||||||
function tarRelease()
|
|
||||||
{
|
|
||||||
echo tar-$1-$2
|
|
||||||
cd $SP
|
cd $SP
|
||||||
cd ../
|
cd ../
|
||||||
rm $tmp/leanote/bin/leanote-* # 删除之前的bin文件
|
cp ./bin/leanote-linux $tmp/leanote/bin/
|
||||||
rm $tmp/leanote/bin/run* # 删除之前的run.sh 或 run.bat
|
|
||||||
|
|
||||||
if [ $1 = "linux" -o $1 = "darwin" ]
|
|
||||||
then
|
|
||||||
suffix=""
|
|
||||||
cp ./bin/run.sh $tmp/leanote/bin/
|
|
||||||
else
|
|
||||||
cp ./bin/run.bat $tmp/leanote/bin/
|
|
||||||
suffix=".exe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp ./bin/leanote-$1-$2$suffix $tmp/leanote/bin/
|
|
||||||
cd $tmp
|
cd $tmp
|
||||||
tar -cf $tmp/$V/leanote-$1-$2-$V.bin.tar leanote
|
tar -cvf $tmp/leanote-linux-$version.bin.tar leanote
|
||||||
gzip $tmp/$V/leanote-$1-$2-$V.bin.tar
|
gzip $tmp/leanote-linux-$version.bin.tar
|
||||||
}
|
|
||||||
|
|
||||||
tarRelease "linux" "386";
|
# mac
|
||||||
tarRelease "linux" "amd64";
|
rm $tmp/leanote/bin/leanote-linux
|
||||||
tarRelease "darwin" "386";
|
cd $SP
|
||||||
tarRelease "darwin" "amd64";
|
cd ../
|
||||||
tarRelease "windows" "386";
|
cp ./bin/leanote-mac $tmp/leanote/bin/
|
||||||
tarRelease "windows" "amd64";
|
cd $tmp
|
||||||
|
tar -cvf $tmp/leanote-mac-$version.bin.tar leanote
|
||||||
|
gzip $tmp/leanote-mac-$version.bin.tar
|
||||||
|
|
||||||
|
cd $SP
|
||||||
|
cd ../
|
||||||
|
cp ./bin/leanote-linux $tmp/leanote/bin/
|
||||||
|
|
||||||
|
rm $tmp/bin/src/github.com/leanote/leanote
|
||||||
|
cp -r $tmp/leanote/* $tmp/leanote_release_github
|
||||||
|
|
||||||
# BLOCK'
|
# BLOCK'
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
@echo off
|
|
||||||
|
|
||||||
cd..
|
|
||||||
set SCRIPTPATH=%cd%
|
|
||||||
|
|
||||||
: top src directory
|
|
||||||
set path="%SCRIPTPATH%\bin\src\github.com\leanote"
|
|
||||||
|
|
||||||
if not exist "%path%" mkdir "%path%"
|
|
||||||
|
|
||||||
: create software link
|
|
||||||
if exist "%path%\leanote" del /Q "%path%\leanote"
|
|
||||||
mklink /D "%path%\leanote" %SCRIPTPATH%
|
|
||||||
|
|
||||||
: set GOPATH
|
|
||||||
set GOPATH=%GOPATH%;"%SCRIPTPATH%\bin"
|
|
||||||
|
|
||||||
: run
|
|
||||||
if %processor_architecture%==x86 (
|
|
||||||
"%SCRIPTPATH%\bin\leanote-windows-386.exe" -importPath github.com/leanote/leanote
|
|
||||||
) else (
|
|
||||||
"%SCRIPTPATH%\bin\leanote-windows-amd64.exe" -importPath github.com/leanote/leanote
|
|
||||||
)
|
|
||||||
+6
-12
@@ -7,23 +7,17 @@ path="$SCRIPTPATH/src/github.com/leanote"
|
|||||||
if [ ! -d "$path" ]; then
|
if [ ! -d "$path" ]; then
|
||||||
mkdir -p "$path"
|
mkdir -p "$path"
|
||||||
fi
|
fi
|
||||||
rm -rf $SCRIPTPATH/src/github.com/leanote/leanote # 先删除
|
|
||||||
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
|
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
|
||||||
|
|
||||||
# set GOPATH
|
# set GOPATH
|
||||||
export GOPATH=$GOPATH:$SCRIPTPATH
|
export GOPATH=$GOPATH:$SCRIPTPATH
|
||||||
|
|
||||||
# run
|
# run
|
||||||
osName=`uname` # Darwin or Linux
|
osName=`uname`
|
||||||
osName=`tr '[A-Z]' '[a-z]' <<<"$osName"` # toLowerCase
|
if [ $osName == "Darwin" ]; then
|
||||||
bit=`getconf LONG_BIT` # 32, 64
|
chmod 777 "$SCRIPTPATH/leanote-mac"
|
||||||
if [ $bit = "64" ]
|
"$SCRIPTPATH/leanote-mac" -importPath github.com/leanote/leanote
|
||||||
then
|
|
||||||
bit="amd64"
|
|
||||||
else
|
else
|
||||||
bit="386"
|
chmod 777 "$SCRIPTPATH/leanote-linux"
|
||||||
|
"$SCRIPTPATH/leanote-linux" -importPath github.com/leanote/leanote
|
||||||
fi
|
fi
|
||||||
|
|
||||||
script="$SCRIPTPATH/leanote-$osName-$bit"
|
|
||||||
chmod 777 $script
|
|
||||||
$script -importPath github.com/leanote/leanote
|
|
||||||
+2
-2
@@ -42,14 +42,14 @@ log.error.prefix = "ERROR "
|
|||||||
# The default language of this application.
|
# The default language of this application.
|
||||||
i18n.default_language=en
|
i18n.default_language=en
|
||||||
|
|
||||||
module.static=github.com/revel/modules/static
|
module.static=github.com/revel/revel/modules/static
|
||||||
|
|
||||||
[dev]
|
[dev]
|
||||||
mode.dev=true
|
mode.dev=true
|
||||||
results.pretty=true
|
results.pretty=true
|
||||||
watch=true
|
watch=true
|
||||||
|
|
||||||
module.testrunner = github.com/revel/modules/testrunner
|
module.testrunner = github.com/revel/revel/modules/testrunner
|
||||||
|
|
||||||
log.trace.output = stderr
|
log.trace.output = stderr
|
||||||
log.info.output = stderr
|
log.info.output = stderr
|
||||||
|
|||||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 305 KiB |
@@ -1,91 +0,0 @@
|
|||||||
# blog
|
|
||||||
|
|
||||||
blogNavs=Navigation
|
|
||||||
quickLinks=Liens rapides
|
|
||||||
latestPosts=Dernières publications
|
|
||||||
|
|
||||||
noBlog=Aucun blog
|
|
||||||
noTag=Aucune étiquette
|
|
||||||
blogClass=Catégorie
|
|
||||||
updatedTime=Mis à jour à
|
|
||||||
createdTime=Créé à
|
|
||||||
fullBlog=Blog entier
|
|
||||||
blogNav=Navigation du blog
|
|
||||||
more=Plus...
|
|
||||||
previous=Précédent
|
|
||||||
next=Suivant
|
|
||||||
|
|
||||||
#
|
|
||||||
# set blog
|
|
||||||
#
|
|
||||||
blogSet=Configuration du blog
|
|
||||||
baseInfoSet=Information de base
|
|
||||||
commentSet=Commentaires
|
|
||||||
themeSet=Thème
|
|
||||||
theme=Thème
|
|
||||||
blogName=Titre
|
|
||||||
blogLogo=Logo
|
|
||||||
blogDesc=Description
|
|
||||||
aboutMe=A propos de moi
|
|
||||||
|
|
||||||
#domain
|
|
||||||
domainSet=Domaine
|
|
||||||
subDomain=Sous-domaine
|
|
||||||
domain=Domaine personnalisé
|
|
||||||
|
|
||||||
# theme
|
|
||||||
elegant=Elegant
|
|
||||||
navFixed=Navigation figée sur le côté gauche
|
|
||||||
|
|
||||||
openComment=Ouvrir un commentaire?
|
|
||||||
chooseComment=Système de commentaires
|
|
||||||
disqusHelp=Veuillez renseigner votre identifiant Disqus
|
|
||||||
needHelp=Besoin d'aide?
|
|
||||||
blogLogoTips=Téléverser une image pour remplacer le titre du blog
|
|
||||||
saveSuccess=Sauvegarde réussie
|
|
||||||
|
|
||||||
community=Communauté
|
|
||||||
home=Accueil
|
|
||||||
none=Aucun
|
|
||||||
moreShare=Plus
|
|
||||||
sinaWeibo=Weibo
|
|
||||||
weixin=Weichat
|
|
||||||
tencentWeibo=Tencent Weibo
|
|
||||||
qqZone=QQ Zone
|
|
||||||
renren=Renren
|
|
||||||
report=Rapport
|
|
||||||
like=J'aime
|
|
||||||
unlike=Je n'aime plus
|
|
||||||
viewers=Lecteurs
|
|
||||||
author=Auteur
|
|
||||||
delete=Effacer
|
|
||||||
reply=Répondre
|
|
||||||
comment=Commenter
|
|
||||||
comments=Commentaires
|
|
||||||
cancel=Annuler
|
|
||||||
confirm=Confirmer
|
|
||||||
signIn=S'identifier
|
|
||||||
signUp=S'incrire
|
|
||||||
submitComment=Soumettre
|
|
||||||
reportReason1=不友善内容
|
|
||||||
reportReason2=广告等垃圾信息
|
|
||||||
reportReason3=违法违规内容
|
|
||||||
reportReason4=不宜公开讨论的政治内容
|
|
||||||
other=Autre
|
|
||||||
reportReason=Raison
|
|
||||||
chooseReason=请选择举报理由
|
|
||||||
reportSuccess=举报成功, 我们处理后会通知作者, 感谢您的监督
|
|
||||||
error=Erreur
|
|
||||||
reportComment?=举报该评论?
|
|
||||||
reportBlog?=举报该博客?
|
|
||||||
confirmDeleteComment=Êtes-vous sûr?
|
|
||||||
scanQRCode=Ouvrez Weichat et scannez le QR Code
|
|
||||||
justNow=Seulement maintenant
|
|
||||||
minutesAgo=Il y a quelques minutes
|
|
||||||
hoursAgo=Il y a plusieurs heures
|
|
||||||
daysAgo=Il y a plusieurs jours
|
|
||||||
weeksAgo=Il y a plusieurs semaines
|
|
||||||
monthsAgo=Il y a plusieurs mois
|
|
||||||
|
|
||||||
|
|
||||||
a=a
|
|
||||||
+9
-20
@@ -1,9 +1,9 @@
|
|||||||
# leanote
|
# leanote
|
||||||
app=Leanote
|
app=leanote
|
||||||
moto=Not Just A Notepad!
|
moto=Not Just A Notebook!
|
||||||
moto2=Knowledge, Blog, Sharing, Cooperation... all in Leanote
|
moto2=Knowledge, Blog, Sharing, Cooperation... all in leanote
|
||||||
moto3=Brief But Not Simple
|
moto3=Brief But Not Simple
|
||||||
fork github=Fork Leanote on Github
|
fork github=Fork leanote on Github
|
||||||
|
|
||||||
# 首页
|
# 首页
|
||||||
forgetPassword = Forget password?
|
forgetPassword = Forget password?
|
||||||
@@ -13,8 +13,7 @@ try=Try it
|
|||||||
usernameOrEmail=Username or email
|
usernameOrEmail=Username or email
|
||||||
password=Password
|
password=Password
|
||||||
home=Home
|
home=Home
|
||||||
desktopApp=App
|
aboutLeanote=About leanote
|
||||||
aboutLeanote=About Leanote
|
|
||||||
suggestions=Suggestions
|
suggestions=Suggestions
|
||||||
yourSuggestions=Suggestions
|
yourSuggestions=Suggestions
|
||||||
leanoteBlog=Blog
|
leanoteBlog=Blog
|
||||||
@@ -33,7 +32,6 @@ captcha=Captcha
|
|||||||
reloadCaptcha=Reload Captcha
|
reloadCaptcha=Reload Captcha
|
||||||
captchaError=Captcha Do Not Match
|
captchaError=Captcha Do Not Match
|
||||||
inputCaptcha=Captcha is required
|
inputCaptcha=Captcha is required
|
||||||
noTag=No Tags
|
|
||||||
|
|
||||||
hi=Hi
|
hi=Hi
|
||||||
welcomeUseLeanote=Welcome!
|
welcomeUseLeanote=Welcome!
|
||||||
@@ -58,7 +56,6 @@ ing=processing
|
|||||||
use = Use
|
use = Use
|
||||||
hadAcount = Already have an account?
|
hadAcount = Already have an account?
|
||||||
hasAcount = Do not have an account?
|
hasAcount = Do not have an account?
|
||||||
signInWithThird=Sign in with other account
|
|
||||||
|
|
||||||
# 注册
|
# 注册
|
||||||
registerSuccessAndRdirectToNote=Register success, redirecting...
|
registerSuccessAndRdirectToNote=Register success, redirecting...
|
||||||
@@ -168,7 +165,6 @@ cancelPublic=Cancel public
|
|||||||
move=Move
|
move=Move
|
||||||
copy=Copy
|
copy=Copy
|
||||||
rename=Rename
|
rename=Rename
|
||||||
exportPdf=Export PDF
|
|
||||||
addChildNotebook=Add child notebook
|
addChildNotebook=Add child notebook
|
||||||
deleteAllShared=Delete shared user
|
deleteAllShared=Delete shared user
|
||||||
deleteSharedNotebook=Delete shared notebook
|
deleteSharedNotebook=Delete shared notebook
|
||||||
@@ -248,7 +244,6 @@ themeValidHasRoundInclude=WARNING: Templates have circular references!
|
|||||||
leaDesc=leanote blog platform
|
leaDesc=leanote blog platform
|
||||||
recommend=Recommend
|
recommend=Recommend
|
||||||
latest=Latest
|
latest=Latest
|
||||||
subscription=Subscription
|
|
||||||
|
|
||||||
# 用户中心
|
# 用户中心
|
||||||
memberCenter=Member Center
|
memberCenter=Member Center
|
||||||
@@ -257,9 +252,8 @@ hasUsers=The user already exists
|
|||||||
|
|
||||||
# yu
|
# yu
|
||||||
service=Service
|
service=Service
|
||||||
trafficOver=Sorry, you have no web traffic, please go <a href="/service">upgrade your account</a>.
|
imageSizeOver=Sorry, you have no image opacity, please <a href="/service">upgrade your account</a>.
|
||||||
imageSizeOver=Sorry, you have no image capacity, please go <a href="/service">upgrade your account</a>.
|
attachSizeOver=Sorry, you have no attachment opacity, please <a href="/service">upgrade your account</a>.
|
||||||
attachSizeOver=Sorry, you have no attachment opacity, please go <a href="/service">upgrade your account</a>.
|
|
||||||
|
|
||||||
|
|
||||||
#memeber
|
#memeber
|
||||||
@@ -268,9 +262,8 @@ accountInfo=Account Info
|
|||||||
accountType=Account Type
|
accountType=Account Type
|
||||||
premiumAccountType=Premium
|
premiumAccountType=Premium
|
||||||
normalAccountType=Normal
|
normalAccountType=Normal
|
||||||
imageSize=Image Capacity
|
imageSize=Image Opacity
|
||||||
attachSize=Attachment Capacity
|
attachSize=Attachment Opacity
|
||||||
totalTraffic=Web Traffic
|
|
||||||
upgrade=Upgrade My Account
|
upgrade=Upgrade My Account
|
||||||
leanoteEvents=Leanote News
|
leanoteEvents=Leanote News
|
||||||
addLeanoteAccount=New Leanote Account
|
addLeanoteAccount=New Leanote Account
|
||||||
@@ -343,9 +336,5 @@ deleteGroup=Delete group
|
|||||||
addMemberTips=Input username or email to add member
|
addMemberTips=Input username or email to add member
|
||||||
deleteMember=Delete member
|
deleteMember=Delete member
|
||||||
|
|
||||||
created=Created
|
|
||||||
updated=Updated
|
|
||||||
modify=Modify
|
|
||||||
|
|
||||||
# error
|
# error
|
||||||
notFound=This page cann't found.
|
notFound=This page cann't found.
|
||||||
-348
@@ -1,348 +0,0 @@
|
|||||||
# leanote
|
|
||||||
app=Leanote
|
|
||||||
moto=Plus qu'un simple bloc-notes!
|
|
||||||
moto2=Connaissance, Blog, Partage, Coopération... tout est dans Leanote
|
|
||||||
moto3=Simple mais pas simplet.
|
|
||||||
fork github=Fork leanote sur Github
|
|
||||||
|
|
||||||
# Home
|
|
||||||
forgetPassword = Mot de passe oublié?
|
|
||||||
or=ou
|
|
||||||
try=Essayer
|
|
||||||
3th=Comptes tiers
|
|
||||||
usernameOrEmail=Nom d'utilisateur ou courriel
|
|
||||||
password=Mot de passe
|
|
||||||
home=Mon bloc-note
|
|
||||||
desktopApp=App
|
|
||||||
aboutLeanote=A propos de leanote
|
|
||||||
suggestions=Suggestions
|
|
||||||
yourSuggestions=Suggestions
|
|
||||||
leanoteBlog=Blog
|
|
||||||
knowledge=Connaissances
|
|
||||||
knowledgeInfo=Utiliser leanote comme une note, gérer ses connaissances dans leanote.
|
|
||||||
share=Partager
|
|
||||||
shareInfo=Partagez vos connaissances avec vos amis dans leanote.
|
|
||||||
cooperation=Coopération
|
|
||||||
cooperationInfo=Collaborez avec vos amis pour augmenter vos connaissances.
|
|
||||||
blog=Blog
|
|
||||||
blogInfo=Vous pouvez publier vos connaissances et leanote et votre blog!
|
|
||||||
suggestionsInfo=Aidez-nous à améliorer leanote.
|
|
||||||
yourContact=Vos contacts
|
|
||||||
emailOrOthers=Courriel ou autre méthode de contact
|
|
||||||
captcha=Captcha
|
|
||||||
reloadCaptcha=Recharger Captcha
|
|
||||||
captchaError=Le Captcha ne correspond pas
|
|
||||||
inputCaptcha=Le Captcha est requis
|
|
||||||
noTag=No Tags
|
|
||||||
|
|
||||||
hi=Coucou
|
|
||||||
welcomeUseLeanote=Bienvenue!
|
|
||||||
myNote=Ma note
|
|
||||||
curUser=Courriel
|
|
||||||
|
|
||||||
# form
|
|
||||||
submit=Soumettre
|
|
||||||
register=S'inscrire
|
|
||||||
login=S'identifier
|
|
||||||
password2=Confirmer votre mot de passe
|
|
||||||
email=Courriel
|
|
||||||
inputUsername=Le nom d'utilisateur(courriel) est requis
|
|
||||||
inputEmail=Le courriel est requis
|
|
||||||
wrongEmail=Wrong email
|
|
||||||
wrongUsernameOrPassword=Mauvais nom d'utilisateur ou mot de passe
|
|
||||||
inputPassword=Le mot de passe est requis
|
|
||||||
wrongPassword=Mauvais mot de passe
|
|
||||||
logining=S'identifier
|
|
||||||
loginSuccess=Identification réussie!
|
|
||||||
ing=En cours
|
|
||||||
use = Utiliser
|
|
||||||
hadAcount = Déjà inscrit?
|
|
||||||
hasAcount = Pas encore inscrit?
|
|
||||||
signInWithThird=Sign in with other account
|
|
||||||
|
|
||||||
# 注册
|
|
||||||
registerSuccessAndRdirectToNote=inscription réussie, redirection...
|
|
||||||
userHasBeenRegistered=%s a été inscrit
|
|
||||||
|
|
||||||
# 找回密码
|
|
||||||
passwordTips=Doit comporter au moins 6 caractères
|
|
||||||
findPassword=Demander le mot de passe
|
|
||||||
findPasswordSendEmailOver=Nous avons déjà envoyer le lien pour demander un mot de passe sur votre adresse de courriel, veuillez consulter votre boite de réception.
|
|
||||||
checkEmai=Vérifier le courriel
|
|
||||||
findPasswordTimeout=Temps imparti écoulé
|
|
||||||
reFindPassword=Re-demander le mot de passe
|
|
||||||
updatePassword=Mettre à jour le mot de passe
|
|
||||||
updatePasswordSuccessRedirectToLogin=Mise à jour du mot de passe réussie, redirection vers la page d'identification...
|
|
||||||
inputPassword2=Veuillez taper votre mot de passe à nouveau
|
|
||||||
confirmPassword=Veuillez confirmer votre mot de passe
|
|
||||||
notGoodPassword=Le mot de passe est incorrect, il doit comporter au moins 6 caractères.
|
|
||||||
|
|
||||||
# 笔记主页
|
|
||||||
myBlog=Blog
|
|
||||||
history=Historique
|
|
||||||
save=Sauvegarder
|
|
||||||
editorTips=Astuces
|
|
||||||
editorTipsInfo=<h4>1. Raccourcis</h4>ctrl+maj+c Active/désactive le code<h4>2. maj+entrée Sortir du bloc courant</h4> ex. <img src="/images/outofcode.png" style="width: 90px"/> dans cette situation vous pouvez utiliser maj+entrée pour sortir du bloc de code courant.
|
|
||||||
newNote=Nouvelle note
|
|
||||||
newMarkdownNote=Nouvelle Note Markdown
|
|
||||||
noNoteNewNoteTips=Le bloc-note est vide, pourquoi pas...
|
|
||||||
canntNewNoteTips=Désolé, impossible de créer une nouvelle note ici, veuillez d'abord choisir un bloc-note.
|
|
||||||
new=Nouveau
|
|
||||||
newMarkdown=Nouvelle note markdown
|
|
||||||
clickAddTag=Cliquez pour ajouter une étiquette
|
|
||||||
notebook=Bloc-note
|
|
||||||
note=Note
|
|
||||||
myNotebook=Mon bloc-note
|
|
||||||
addNotebook=Ajouter un bloc-note
|
|
||||||
search=Chercher
|
|
||||||
clearSearch=Nettoyer la recherche
|
|
||||||
all=Le plus récent
|
|
||||||
trash=Corbeille
|
|
||||||
delete=Effacer
|
|
||||||
unTitled=Sans titre
|
|
||||||
defaultShare=Partage par défaut
|
|
||||||
leftHidden=Cacher la barre latérale
|
|
||||||
leftShow=Montrer la barre latérale
|
|
||||||
nav=Naviguer parmi les notes
|
|
||||||
writingMode=Mode écriture
|
|
||||||
normalMode=Mode normal
|
|
||||||
saving=Sauvegarde
|
|
||||||
saveSuccess=Sauvegarde réussie
|
|
||||||
|
|
||||||
update=Mettre à jour
|
|
||||||
create=Créer
|
|
||||||
|
|
||||||
demoRegister=<a href="/register">S'inscrire</a>
|
|
||||||
|
|
||||||
close=Fermer
|
|
||||||
cancel=Annuler
|
|
||||||
send=Envoyer
|
|
||||||
|
|
||||||
# 标签
|
|
||||||
tag=Etiquette
|
|
||||||
myTag=Mes étiquettes
|
|
||||||
red=rouge
|
|
||||||
yellow=jaune
|
|
||||||
blue=bleu
|
|
||||||
green=vert
|
|
||||||
|
|
||||||
# 设置
|
|
||||||
accountSetting=Compte
|
|
||||||
themeSetting=Thème
|
|
||||||
setAvatar=Avatar
|
|
||||||
logout=Déconnexion
|
|
||||||
basicInfo=Basique
|
|
||||||
basicInfoSet=Réglages de base du blog
|
|
||||||
updateEmail=Mettre à jour le courriel
|
|
||||||
usernameSetting=Mettre à jour le nom d'utilisateur
|
|
||||||
username=Nom d'utilisateur
|
|
||||||
avatar=Avatar
|
|
||||||
chooseImage=Choisir une image
|
|
||||||
oldPassword=Ancien mot de passe
|
|
||||||
newPassword=Nouveau mot de passe
|
|
||||||
admin=Administrateur
|
|
||||||
|
|
||||||
default=Par défaut
|
|
||||||
simple=Simple
|
|
||||||
|
|
||||||
# tinymce
|
|
||||||
uploadImage=Téléverser une image
|
|
||||||
|
|
||||||
# blog
|
|
||||||
aboutMe=A propos de moi
|
|
||||||
blogSet=Réglages du blog
|
|
||||||
|
|
||||||
# index
|
|
||||||
discussion=Discussion
|
|
||||||
download=Téléchargement
|
|
||||||
howToInstallLeanote=Comment installer leanote
|
|
||||||
|
|
||||||
#
|
|
||||||
attachments = Pièces-jointes
|
|
||||||
donate = Faire un don
|
|
||||||
|
|
||||||
# contextmenu
|
|
||||||
shareToFriends=Partage avec ses amis
|
|
||||||
publicAsBlog=Publier en tant que blog
|
|
||||||
cancelPublic=Annuler la publication
|
|
||||||
move=Déplacer
|
|
||||||
copy=Copier
|
|
||||||
rename=Renommer
|
|
||||||
addChildNotebook=Ajouer un bloc-note enfant
|
|
||||||
deleteAllShared=Effacer l'utilisateur partagé
|
|
||||||
deleteSharedNotebook=Effacer le bloc-notes partagé
|
|
||||||
copyToMyNotebook=Copier vers mon bloc-notes
|
|
||||||
|
|
||||||
####note-dev
|
|
||||||
emailInSending=Envoi vers
|
|
||||||
checkEmail=Vérifier courriel
|
|
||||||
setUsername=Paramétrer le nom d'utilisateur
|
|
||||||
setUsernameTips=Votre courriel actuel est: <code>%s</code>. Vous pouvez définir un nom d'utilisateur unique. <br />Nom d'utilisateur' Au moins 4 caractères et sans caractères spéciaux.
|
|
||||||
currentEmail=Votre courriel actuel est: <code>%s</code>
|
|
||||||
updateEmail=Mettre à jour le courriel
|
|
||||||
updateEmailTips=Vous devez confirmer votre courriel après la mise-à-jour. Le courriel confirmé sera le nouveau compte.
|
|
||||||
sendVerifiedEmail=Envoyer le courriel de confirmation
|
|
||||||
verified=Confirmé
|
|
||||||
unVerified=Non confirmé
|
|
||||||
verifiedNow=Confirmer maintenant
|
|
||||||
resendVerifiedEmail=Renvoyer le courriel de confirmation
|
|
||||||
|
|
||||||
# 分享
|
|
||||||
defaulthhare=Par défaut
|
|
||||||
addShare=Ajouter un ami
|
|
||||||
friendEmail=Courriel de l'ami
|
|
||||||
permission=Autorisation
|
|
||||||
readOnly=Lecture seule
|
|
||||||
writable=Editable
|
|
||||||
inputFriendEmail=Le courriel de votre ami est requis/
|
|
||||||
clickToChangePermission=Cliquez pour changer l'autorisation.
|
|
||||||
sendInviteEmailToYourFriend=Envoyer un courriel d'invitation à votre ami.
|
|
||||||
copySuccess=Copie réussie
|
|
||||||
copyFailed=Copie échouée
|
|
||||||
friendNotExits=Votre ami n'a pas de compte %s, lien d'invitation à s'enregistrer: %s
|
|
||||||
emailBodyRequired=Corps du message requis
|
|
||||||
clickToCopy=Cliquer pour copier
|
|
||||||
sendSuccess=succès
|
|
||||||
inviteEmailBody=Coucou, je suis %s, %s est génial, viens!
|
|
||||||
|
|
||||||
# 历史记录
|
|
||||||
historiesNum=Nous avons enregistré au maximum <b>10</b> historiques récents de chaque note.
|
|
||||||
noHistories=Pas d'historique.
|
|
||||||
fold=Plier
|
|
||||||
unfold=Déplier
|
|
||||||
datetime=Date & Heure
|
|
||||||
restoreFromThisVersion=Restaurer depuis cette version
|
|
||||||
confirmBackup=Êtes-vous sûr de vouloir restaurer depuis cette version? Nous allons réaliser une copie de sauvegarde de la note actuelle.
|
|
||||||
createAccount=Créer un compte
|
|
||||||
createAccountSuccess=Compte créé avec succès
|
|
||||||
createAccountFailed=Echec de la création du compte
|
|
||||||
thirdCreateAcountTips=Vous utilisez un compte tiers pour connecter %(app)s, vous pouvrz créer un compte %(app) également. <br />Après avoir créé le compte %(app), vous pouvez utiliser ce compte et le compte tiers pour connecter %(app)s.
|
|
||||||
|
|
||||||
## valid msg
|
|
||||||
inputUsername=Entrer le nom d'utilisateur
|
|
||||||
updateUsernameSuccess=Mise à jour du nom d'utilisateur réussie
|
|
||||||
usernameIsExisted=Le nom d'utilisateur existe déjà.
|
|
||||||
noSpecialChars=le nom d'utilisateur ne peut pas contenir de caractères spéciaux
|
|
||||||
minLength=La longueur doit être d'au moins %s
|
|
||||||
errorEmail=Veuillez renseigner le courriel correct
|
|
||||||
verifiedEmaiHasSent=Le courriel de confirmation a été envoyé, veuillez surveiller votre boite de réception.
|
|
||||||
emailSendFailed=Envoi du courriel échoué.
|
|
||||||
inputPassword=Mot de passe requis
|
|
||||||
inputNewPassword=Le nouveau mot de passe est requis.
|
|
||||||
inputPassword2=Veuillez rentrer le nouveau mot de passe à nouveau.
|
|
||||||
errorPassword=La taille du mot de passe est d'au moins 6 caractères et aussi complexe que possible.
|
|
||||||
oldPasswordError=L'ancien mot de passe ne correspond pas.
|
|
||||||
confirmPassword=Le mot de passe ne correspond pas.
|
|
||||||
updatePasswordSuccess=Mises à jour du mot de passe réussie.
|
|
||||||
errorDomain=Le domaine personnalisé n'est pas valide, ex. www.myblog.com
|
|
||||||
domainExisted=Le domaine personnalisé existe déjà.
|
|
||||||
errorSubDomain=Veuillez entrer un sous domaine valide, au moins 4 caractères (non spéciaux)
|
|
||||||
subDomainExisted=Le sous-domaine existe déjà.
|
|
||||||
domainNotPointToLeanote=Le domaine personnalisé ne pointe pas vers d.leanote.com
|
|
||||||
errorPerPageSize=Erreur dans la taille de la page
|
|
||||||
errorSortField=Erreur dans le tri du champs
|
|
||||||
themeValidHasRoundInclude=WARNING: Les modèles ont des références circulaires!
|
|
||||||
|
|
||||||
# lea++
|
|
||||||
leaDesc=platerforme de blog leanote
|
|
||||||
recommend=Recommandé
|
|
||||||
latest=Plus récent.
|
|
||||||
|
|
||||||
# 用户中心
|
|
||||||
memberCenter=Centre de Membre
|
|
||||||
userNotExists=L'utilisateur n'existe pas
|
|
||||||
hasUsers=L'utilisateur existe déjà
|
|
||||||
|
|
||||||
# yu
|
|
||||||
service=Service
|
|
||||||
imageSizeOver=Désolé, l'image est trop volumineuse, veuillez <a href="/service">mettre votre compte à niveau</a>.
|
|
||||||
attachSizeOver=Désolé, la pièce-jointe est trop volumineuse, veuillez <a href="/service">mettre votre compte à niveau.</a>.
|
|
||||||
|
|
||||||
|
|
||||||
#memeber
|
|
||||||
welcomeToLeanote=Bienvenue
|
|
||||||
accountInfo=Info sur le Compte
|
|
||||||
accountType=Type de Compte
|
|
||||||
premiumAccountType=Premium
|
|
||||||
normalAccountType=Normal
|
|
||||||
imageSize=Taille de l'image
|
|
||||||
attachSize=Taille de la pièce-jointe
|
|
||||||
totalTraffic=Web Traffic
|
|
||||||
upgrade=Mettre mon compte à niveau
|
|
||||||
leanoteEvents=Nouvelles de Leanote
|
|
||||||
addLeanoteAccount=Nouveau compte Leanote
|
|
||||||
defaultComment=Système de commentaires Leanote par défaut
|
|
||||||
upgradeAccountTips=Je veux utiliser un domaine personnalisé pour mon blog, <a class="btn btn-default" href="/service">mettre mon compte à niveau.</a>
|
|
||||||
cateIsPublicNotebook=La catégorie est le bloc-note publié
|
|
||||||
dragAndSort=Faire glisser pour trier
|
|
||||||
permanentLink=Lien Permanent
|
|
||||||
cate=Catégorie
|
|
||||||
noCates=Sans catégorie
|
|
||||||
single=Page simple
|
|
||||||
singleTips=Vous pouvez ajouter beaucoup de pages simples
|
|
||||||
addSingle=Nouvelle page simple
|
|
||||||
updateSingle=Metter à jour une page simple
|
|
||||||
inputSingleTitle=Le titre de la page simple est requis
|
|
||||||
saveSort=Séquençage de la sauvegarde
|
|
||||||
pagingAndSort=Réglages du tri et de la mise en page
|
|
||||||
perPageSize=Taille par page
|
|
||||||
sortField=Champ de tri
|
|
||||||
sortType=Type de tri
|
|
||||||
publicTime=Heure de publication
|
|
||||||
createdTime=Heure de création
|
|
||||||
updatedTime=Heure de mise à jour
|
|
||||||
desc=Desc
|
|
||||||
asc=Asc
|
|
||||||
postList=Afficher la liste
|
|
||||||
hasSelfDefined=Défini
|
|
||||||
noSelfDefined=Non défini
|
|
||||||
setAbstract=Réglages abstraits
|
|
||||||
title=Titre
|
|
||||||
content=Contenu
|
|
||||||
|
|
||||||
addTheme=Nouveau thème
|
|
||||||
importTheme=Importer thème
|
|
||||||
exportTheme=Exporter thème
|
|
||||||
export=Exporter
|
|
||||||
preview=Aperçu
|
|
||||||
edit=Editer
|
|
||||||
use=Utiliser
|
|
||||||
install=Installer
|
|
||||||
currentTheme=Thème actuel
|
|
||||||
myOtherThemes=Mes autres thèmes
|
|
||||||
leanoteThemeMarket=Marché aux thèmes Leanote
|
|
||||||
updateTheme=Mettre à jour le thème
|
|
||||||
tplStyleScript=modèle, style, script
|
|
||||||
newFile=Nouveau fichier
|
|
||||||
image=Image
|
|
||||||
currentFile=Fichier actuel
|
|
||||||
tpl=Modèle
|
|
||||||
style=Style
|
|
||||||
script=Script
|
|
||||||
header=En-tête
|
|
||||||
footer=Pied de page
|
|
||||||
index=Accueil
|
|
||||||
cate=Catégorie
|
|
||||||
search=Chercher
|
|
||||||
single=Page simple
|
|
||||||
archive=Archive
|
|
||||||
post=Poster
|
|
||||||
tags=Etiquettes
|
|
||||||
tag_posts=Etiquettes des publications
|
|
||||||
share_comment=Commenter
|
|
||||||
themeJson=Réglages du thème
|
|
||||||
paging=Mise en page
|
|
||||||
highlight=Surlignage du code
|
|
||||||
|
|
||||||
group=Groupe
|
|
||||||
newGroup=Nouveau groupe
|
|
||||||
deleteGroup=Effacer groupe
|
|
||||||
addMemberTips=Rentrer le nom d'utilisateur et le courriel pour ajouter un membre
|
|
||||||
deleteMember=Effacer membre
|
|
||||||
|
|
||||||
created=Created
|
|
||||||
updated=Updated
|
|
||||||
modify=Modify
|
|
||||||
|
|
||||||
# error
|
|
||||||
notFound=Page introuvable.
|
|
||||||
+9
-19
@@ -1,7 +1,7 @@
|
|||||||
# leanote
|
# leanote
|
||||||
app=Leanote
|
app=leanote
|
||||||
moto=不只是笔记!
|
moto=不只是笔记!
|
||||||
moto2=知识管理, 博客, 分享, 协作... 尽在Leanote
|
moto2=知识管理, 博客, 分享, 协作... 尽在leanote
|
||||||
moto3=简约而不简单
|
moto3=简约而不简单
|
||||||
fork github=Github 源码
|
fork github=Github 源码
|
||||||
|
|
||||||
@@ -13,10 +13,9 @@ try=体验一下
|
|||||||
usernameOrEmail=用户名或Email
|
usernameOrEmail=用户名或Email
|
||||||
password=密码
|
password=密码
|
||||||
home=主页
|
home=主页
|
||||||
desktopApp=客户端
|
aboutLeanote=关于leanote
|
||||||
aboutLeanote=关于Leanote
|
|
||||||
suggestions=建议
|
suggestions=建议
|
||||||
yourSuggestions=帮助完善Leanote
|
yourSuggestions=帮助完善leanote
|
||||||
leanoteBlog=官方博客
|
leanoteBlog=官方博客
|
||||||
knowledge=知识
|
knowledge=知识
|
||||||
knowledgeInfo=leanote是一个笔记, 你可以用它来管理自己的知识.
|
knowledgeInfo=leanote是一个笔记, 你可以用它来管理自己的知识.
|
||||||
@@ -33,7 +32,6 @@ captcha=验证码
|
|||||||
reloadCaptcha=刷新验证码
|
reloadCaptcha=刷新验证码
|
||||||
captchaError=验证码错误
|
captchaError=验证码错误
|
||||||
inputCaptcha=请输入验证码
|
inputCaptcha=请输入验证码
|
||||||
noTag=无标签
|
|
||||||
|
|
||||||
hi=Hi
|
hi=Hi
|
||||||
welcomeUseLeanote=Welcome!
|
welcomeUseLeanote=Welcome!
|
||||||
@@ -78,7 +76,6 @@ ing=正在处理
|
|||||||
use = 使用
|
use = 使用
|
||||||
hadAcount = 已有帐户?
|
hadAcount = 已有帐户?
|
||||||
hasAcount = 还无帐户?
|
hasAcount = 还无帐户?
|
||||||
signInWithThird=使用第三方帐号登录
|
|
||||||
|
|
||||||
# 注册
|
# 注册
|
||||||
registerSuccessAndRdirectToNote=注册成功, 正在跳转...
|
registerSuccessAndRdirectToNote=注册成功, 正在跳转...
|
||||||
@@ -192,7 +189,6 @@ cancelPublic=取消公开为博客
|
|||||||
move=移动
|
move=移动
|
||||||
copy=复制
|
copy=复制
|
||||||
rename=重命名
|
rename=重命名
|
||||||
exportPdf=导出PDF
|
|
||||||
addChildNotebook=添加子笔记本
|
addChildNotebook=添加子笔记本
|
||||||
deleteAllShared=删除所有共享
|
deleteAllShared=删除所有共享
|
||||||
deleteSharedNotebook=删除共享笔记本
|
deleteSharedNotebook=删除共享笔记本
|
||||||
@@ -272,9 +268,8 @@ themeValidHasRoundInclude=警告: 模板存在循环引用问题!
|
|||||||
|
|
||||||
# lea++
|
# lea++
|
||||||
leaDesc=leanote博客平台
|
leaDesc=leanote博客平台
|
||||||
recommend=推荐文章
|
recommend=推荐
|
||||||
latest=最新文章
|
latest=最新
|
||||||
subscription=我的订阅
|
|
||||||
|
|
||||||
# 用户中心
|
# 用户中心
|
||||||
memberCenter=用户中心
|
memberCenter=用户中心
|
||||||
@@ -283,19 +278,17 @@ hasUsers=已存在该成员
|
|||||||
|
|
||||||
# yu
|
# yu
|
||||||
service=服务
|
service=服务
|
||||||
trafficOver=对不起, 您本月的流量已用完, 请至<a href="/service">升级您的帐户</a>
|
imageSizeOver=对不起, 您的图片容量不足, 请<a href="/service">升级您的帐户</a>
|
||||||
imageSizeOver=对不起, 您的图片容量不足, 请至<a href="/service">升级您的帐户</a>
|
attachSizeOver=对不起, 您的附件容量不足, 请<a href="/service">升级您的帐户</a>
|
||||||
attachSizeOver=对不起, 您的附件容量不足, 请至<a href="/service">升级您的帐户</a>
|
|
||||||
|
|
||||||
#memeber
|
#memeber
|
||||||
welcomeToLeanote=欢迎来到leanote
|
welcomeToLeanote=欢迎来到leanote
|
||||||
accountInfo=帐户信息
|
accountInfo=帐户信息
|
||||||
accountType=帐户类型
|
accountType=帐户类型
|
||||||
premiumAccountType=旗舰套餐
|
premiumAccountType=彩色套餐
|
||||||
normalAccountType=共享套餐
|
normalAccountType=共享套餐
|
||||||
imageSize=图片空间
|
imageSize=图片空间
|
||||||
attachSize=附件空间
|
attachSize=附件空间
|
||||||
totalTraffic=流量
|
|
||||||
upgrade=升级套餐
|
upgrade=升级套餐
|
||||||
leanoteEvents=Leanote动态
|
leanoteEvents=Leanote动态
|
||||||
addLeanoteAccount=新建Leanote帐户
|
addLeanoteAccount=新建Leanote帐户
|
||||||
@@ -368,9 +361,6 @@ deleteGroup=删除组
|
|||||||
addMemberTips=输入用户名或邮箱添加成员
|
addMemberTips=输入用户名或邮箱添加成员
|
||||||
deleteMember=删除成员
|
deleteMember=删除成员
|
||||||
|
|
||||||
created=创建
|
|
||||||
updated=更新
|
|
||||||
modify=修改
|
|
||||||
|
|
||||||
# 必须要加这个, 奇怪
|
# 必须要加这个, 奇怪
|
||||||
[CN]
|
[CN]
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.albums" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.albums" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.attachs" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.attachs" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.blog_comments" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.blog_comments" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.blog_likes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.blog_likes" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.blog_singles" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.blog_singles" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.configs" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.configs" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.email_logs" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.email_logs" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.files" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.files" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.find_pwds" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.find_pwds" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.group_users" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.group_users" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.groups" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.groups" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.has_share_notes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1 }, "name" : "UserId_1_ToUserId_1", "ns" : "leanote9.has_share_notes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.has_share_notes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1 }, "name" : "UserId_1_ToUserId_1", "ns" : "leanote6.has_share_notes" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.leanote.ShareNotes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1, "NoteId" : 1 }, "name" : "UserId_1_ToUserId_1_NoteId_1", "ns" : "leanote9.leanote.ShareNotes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.leanote.ShareNotes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1, "NoteId" : 1 }, "name" : "UserId_1_ToUserId_1_NoteId_1", "ns" : "leanote6.leanote.ShareNotes" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.leanote.has_share_notes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1 }, "name" : "UserId_1_ToUserId_1", "ns" : "leanote9.leanote.has_share_notes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.leanote.has_share_notes" }, { "v" : 1, "unique" : true, "key" : { "UserId" : 1, "ToUserId" : 1 }, "name" : "UserId_1_ToUserId_1", "ns" : "leanote6.leanote.has_share_notes" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.note_content_histories" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.note_content_histories" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.note_contents" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.note_contents" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.note_images" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.note_images" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.note_tags" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.note_tags" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.notebooks" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote9.notebooks" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.notebooks" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote6.notebooks" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.notes" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote9.notes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.notes" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote6.notes" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.reports" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.reports" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.sessions" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.sessions" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.share_notebooks" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.share_notebooks" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.share_notes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.share_notes" } ] }
|
||||||
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.suggestions" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.suggestions" } ] }
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.tag_count" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.tag_count" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.tags" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote9.tags" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.tags" }, { "v" : 1, "key" : { "UserId" : 1 }, "name" : "UserId_1", "ns" : "leanote6.tags" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.themes" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.themes" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.tokens" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.tokens" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.user_blogs" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.user_blogs" } ] }
|
||||||
Binary file not shown.
@@ -1 +1 @@
|
|||||||
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote9.users" } ] }
|
{ "indexes" : [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "leanote6.users" } ] }
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 71
|
||||||
|
/svn/ecmall/!svn/ver/367/ecmall/includes/libraries/javascript/artDialog
|
||||||
|
END
|
||||||
|
license.txt
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 82
|
||||||
|
/svn/ecmall/!svn/ver/55/ecmall/includes/libraries/javascript/artDialog/license.txt
|
||||||
|
END
|
||||||
|
index.html
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 81
|
||||||
|
/svn/ecmall/!svn/ver/55/ecmall/includes/libraries/javascript/artDialog/index.html
|
||||||
|
END
|
||||||
|
artDialog.source.js
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 90
|
||||||
|
/svn/ecmall/!svn/ver/55/ecmall/includes/libraries/javascript/artDialog/artDialog.source.js
|
||||||
|
END
|
||||||
|
jquery.artDialog.source.js
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 97
|
||||||
|
/svn/ecmall/!svn/ver/55/ecmall/includes/libraries/javascript/artDialog/jquery.artDialog.source.js
|
||||||
|
END
|
||||||
|
artDialog.js
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 83
|
||||||
|
/svn/ecmall/!svn/ver/55/ecmall/includes/libraries/javascript/artDialog/artDialog.js
|
||||||
|
END
|
||||||
|
jquery.artDialog.js
|
||||||
|
K 25
|
||||||
|
svn:wc:ra_dav:version-url
|
||||||
|
V 91
|
||||||
|
/svn/ecmall/!svn/ver/367/ecmall/includes/libraries/javascript/artDialog/jquery.artDialog.js
|
||||||
|
END
|
||||||
@@ -0,0 +1,248 @@
|
|||||||
|
10
|
||||||
|
|
||||||
|
dir
|
||||||
|
371
|
||||||
|
https://42.121.52.247/svn/ecmall/ecmall/includes/libraries/javascript/artDialog
|
||||||
|
https://42.121.52.247/svn/ecmall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-08-17T09:53:23.915878Z
|
||||||
|
367
|
||||||
|
litie
|
||||||
|
|
||||||
|
|
||||||
|
svn:special svn:externals svn:needs-lock
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
d8fde07f-0130-2f47-8851-2ad99dc1c468
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
0
|
||||||
|
|
||||||
|
_doc
|
||||||
|
dir
|
||||||
|
|
||||||
|
artDialog.js
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-06-16T14:20:20.000000Z
|
||||||
|
96b775131928186a269e3c93ecd8608a
|
||||||
|
2014-06-17T11:53:48.998281Z
|
||||||
|
55
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
25087
|
||||||
|
|
||||||
|
artDialog.source.js
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-06-16T14:20:20.000000Z
|
||||||
|
db4b85962f603c5f7cc938eebe6ce7ef
|
||||||
|
2014-06-17T11:53:48.998281Z
|
||||||
|
55
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
54000
|
||||||
|
|
||||||
|
index.html
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-06-16T14:20:20.000000Z
|
||||||
|
dce1000b4c176c0f784c09f46096ad28
|
||||||
|
2014-06-17T11:53:48.998281Z
|
||||||
|
55
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
9916
|
||||||
|
|
||||||
|
jquery.artDialog.js
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-08-17T09:27:53.000000Z
|
||||||
|
c13dd0e19254f0da17a00a0b718d1c1b
|
||||||
|
2014-08-17T09:53:23.915878Z
|
||||||
|
367
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
16141
|
||||||
|
|
||||||
|
jquery.artDialog.source.js
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-06-16T14:20:20.000000Z
|
||||||
|
9fb82c1ba68d570bbf6c3bbba3922527
|
||||||
|
2014-06-17T11:53:48.998281Z
|
||||||
|
55
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
33957
|
||||||
|
|
||||||
|
license.txt
|
||||||
|
file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
2014-06-16T14:20:20.000000Z
|
||||||
|
ad68978264a8534f355b1fff51e3e092
|
||||||
|
2014-06-17T11:53:48.998281Z
|
||||||
|
55
|
||||||
|
litie
|
||||||
|
has-props
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
7814
|
||||||
|
|
||||||
|
plugins
|
||||||
|
dir
|
||||||
|
|
||||||
|
skins
|
||||||
|
dir
|
||||||
|
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
K 14
|
||||||
|
svn:executable
|
||||||
|
V 1
|
||||||
|
*
|
||||||
|
END
|
||||||
Loaded 100 of 1831 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user