Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
032470c3df | ||
|
|
a8dd578624 | ||
|
|
f49624d3eb | ||
|
|
816af11db2 | ||
|
|
eda03f0aa4 | ||
|
|
6a06511405 | ||
|
|
15d8ebdc0f | ||
|
|
5dc929c4c0 | ||
|
|
a4d6a99fee | ||
|
|
15d3b847cb | ||
|
|
065ac99942 | ||
|
|
08ec359b93 | ||
|
|
2f81c04f41 | ||
|
|
e8bff79425 | ||
|
|
4ca8e8cd83 | ||
|
|
c0cc08a3c2 | ||
|
|
d32a6dd277 | ||
|
|
8bacc15309 | ||
|
|
8a3f24b9c6 | ||
|
|
2a7d1fe7b5 | ||
|
|
9a05ffcd8f | ||
|
|
aa95e680f9 | ||
|
|
874ab69c34 | ||
|
|
d43f5fd7ab | ||
|
|
6a048f0d9a | ||
|
|
cb3681f651 | ||
|
|
dfd7159401 | ||
|
|
929ec975da | ||
|
|
e826dc7b93 | ||
|
|
629a49e54b | ||
|
|
6ebedf94f0 | ||
|
|
a07bb25128 | ||
|
|
a007b89ebb | ||
|
|
cc4b003503 | ||
|
|
091922175a | ||
|
|
371c93912d | ||
|
|
27221acda7 | ||
|
|
5db724e80b | ||
|
|
14265d9de4 | ||
|
|
5c9e95ed60 | ||
|
|
2fc97ed42d | ||
|
|
45cca30cec | ||
|
|
31167b6aaf | ||
|
|
139906b9d6 | ||
|
|
a9d49369e2 | ||
|
|
303e0da5c0 | ||
|
|
ff5523bfaa | ||
|
|
063dd0140d | ||
|
|
c52d388d5d | ||
|
|
18bcdb48af | ||
|
|
db8f132507 | ||
|
|
439d5212b0 | ||
|
|
88e2320027 | ||
|
|
659a4e590a | ||
|
|
ab7f2386e0 | ||
|
|
ec82ff18f2 | ||
|
|
f3f00626e6 | ||
|
|
80fbb56426 | ||
|
|
a5c952882f | ||
|
|
973b452a7e | ||
|
|
25bcd21ea9 | ||
|
|
09de5e1e83 | ||
|
|
15b0ef21ff | ||
|
|
9cf9ded855 | ||
|
|
7af433ebaf | ||
|
|
67b608b324 | ||
|
|
2aa3f5a654 | ||
|
|
f5538218bd | ||
|
|
0e3bdd177c | ||
|
|
12520cc09d | ||
|
|
cb67892124 | ||
|
|
45c09c9a26 | ||
|
|
20951ea2dd |
No files matched your search
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
language: go
|
language: go
|
||||||
go: 1.3
|
go: 1.4
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- mongodb # 2.4.12
|
- mongodb # 2.4.12
|
||||||
|
|||||||
+33
-17
@@ -15,6 +15,8 @@ var base = leanoteBase + '/public'; // public base
|
|||||||
var noteDev = leanoteBase + '/app/views/note/note-dev.html';
|
var noteDev = leanoteBase + '/app/views/note/note-dev.html';
|
||||||
var noteProBase = leanoteBase + '/app/views/note';
|
var noteProBase = leanoteBase + '/app/views/note';
|
||||||
|
|
||||||
|
var messagesPath = leanoteBase + 'messages';
|
||||||
|
|
||||||
// 合并Js, 这些js都是不怎么修改, 且是依赖
|
// 合并Js, 这些js都是不怎么修改, 且是依赖
|
||||||
// 840kb, 非常耗时!!
|
// 840kb, 非常耗时!!
|
||||||
gulp.task('concatDepJs', function() {
|
gulp.task('concatDepJs', function() {
|
||||||
@@ -205,6 +207,7 @@ gulp.task('i18n', function() {
|
|||||||
ls(leanoteBase + '/app/views');
|
ls(leanoteBase + '/app/views');
|
||||||
|
|
||||||
console.log('parsed');
|
console.log('parsed');
|
||||||
|
var langs = {}; // zh-cn: 1
|
||||||
|
|
||||||
// msg.zh
|
// msg.zh
|
||||||
function getAllMsgs(fname) {
|
function getAllMsgs(fname) {
|
||||||
@@ -229,14 +232,25 @@ gulp.task('i18n', function() {
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 得到所有的语言的后缀
|
||||||
|
// 返回{en-us: 1, }
|
||||||
|
function getAllLangs() {
|
||||||
|
var langs = {};
|
||||||
|
var files = fs.readdirSync(messagesPath);
|
||||||
|
for(fn in files) {
|
||||||
|
var fname = files[fn];
|
||||||
|
if (fname.indexOf('-') > 0) {
|
||||||
|
langs[fname] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return langs;
|
||||||
|
}
|
||||||
|
|
||||||
// msg.zh, msg.js
|
// msg.zh, msg.js
|
||||||
function genI18nJsFile(fromFilename, otherNames, keys) {
|
function genI18nJsFile(targetFilename, lang, fromFilenames, keys) {
|
||||||
var msgs = {};
|
var msgs = {};
|
||||||
otherNames.unshift(fromFilename);
|
fromFilenames.forEach(function (name) {
|
||||||
// console.log(fromFilename);
|
var tmpMsgs = getAllMsgs(leanoteBase + '/messages/' + lang + '/' + name + '.conf');
|
||||||
// console.log(otherNames);
|
|
||||||
otherNames.forEach(function (name) {
|
|
||||||
var tmpMsgs = getAllMsgs(leanoteBase + '/messages/' + name);
|
|
||||||
for (var i in tmpMsgs) {
|
for (var i in tmpMsgs) {
|
||||||
msgs[i] = tmpMsgs[i];
|
msgs[i] = tmpMsgs[i];
|
||||||
}
|
}
|
||||||
@@ -261,22 +275,24 @@ gulp.task('i18n', function() {
|
|||||||
'}';
|
'}';
|
||||||
|
|
||||||
// 写入到文件中
|
// 写入到文件中
|
||||||
var toFilename = fromFilename + '.js';
|
var toFilename = targetFilename + '.' + lang + '.js';
|
||||||
fs.writeFile(base + '/js/i18n/' + toFilename, str);
|
fs.writeFile(base + '/js/i18n/' + toFilename, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 必须要的
|
function genTinymceLang(lang) {
|
||||||
// keys.push();
|
var msgs = getAllMsgs(leanoteBase + 'messages/' + lang + '/tinymce_editor.conf');
|
||||||
|
var str = 'tinymce.addI18n("' + lang + '",' + JSON.stringify(msgs) + ');';
|
||||||
|
fs.writeFile(base + '/tinymce/langs/' + lang + '.js', str);
|
||||||
|
}
|
||||||
|
|
||||||
genI18nJsFile('blog.zh', [], keys);
|
var langs = getAllLangs();
|
||||||
genI18nJsFile('blog.en', [], keys);
|
for (var lang in langs) {
|
||||||
genI18nJsFile('blog.fr', [], keys);
|
genI18nJsFile('blog', lang, ['blog'], keys);
|
||||||
genI18nJsFile('blog.pt', [], keys);
|
genI18nJsFile('msg', lang, ['msg', 'member', 'markdown', 'album'], keys);
|
||||||
|
|
||||||
genI18nJsFile('msg.fr', ['member.fr', 'markdown.fr', 'album.fr'], keys);
|
genTinymceLang(lang);
|
||||||
genI18nJsFile('msg.zh', ['member.zh', 'markdown.zh', 'album.zh'], keys);
|
}
|
||||||
genI18nJsFile('msg.en', ['member.en', 'markdown.en', 'album.en'], keys);
|
|
||||||
genI18nJsFile('msg.pt', ['member.pt', 'markdown.pt', 'album.pt'], keys);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// 合并album需要的js
|
// 合并album需要的js
|
||||||
|
|||||||
@@ -5,66 +5,83 @@
|
|||||||
|
|
||||||
## 1. Introduction
|
## 1. Introduction
|
||||||
|
|
||||||
Leanote, Not Just A Notepad!
|
Leanote, not just a notepad!
|
||||||

|

|
||||||
|
|
||||||
**Some Features**
|
**Highlighted Features**
|
||||||
|
|
||||||
* Knowledge: Manage your knowledge in Leanote. Leanote contains the tinymce editor and a markdown editor, just enjoy yourself writing.
|
* Note-taking made easy: Leanote incorporates a clean and intuitive interface, the `tinymce` rich-text editor and a dedicated *markdown* editor, making your writing/typing more efficient and enjoyable. For more advanced users, we even offer `Vim` and `Emacs` writing modes to help boost your writing speed to another level.
|
||||||
* Share: Share your knowledge with your friends in Leanote. You can invite your friends to join your notepad in the cloud so you can share knowledge.
|
* Knowledge management: The flexible and versatile notebook-note-tagging system of Leanote makes it an ideal tool for knowledge management.
|
||||||
* Cooperation: Collaborate with friends to improve your skills.
|
* Sharing: Share your knowledge, thoughts and experiences with friends via Leanote. Invite your friends to join your notepad in the cloud.
|
||||||
* Blog: Publish your knowledge and make Leanote your blog.
|
* Cooperating: Collaborate with colleagues to improve skills, fertilize ideas and brainstorm on the fly.
|
||||||
|
* Blogging: Publish your work and make Leanote your personal blog.
|
||||||
|
|
||||||
**Other Features**
|
**Other Features**
|
||||||
|
|
||||||
* Support Markdown
|
* Markdown syntax support
|
||||||
* Writting mode
|
* Distraction-free writing mode
|
||||||
* Export note to PDF
|
* `Vim` and `Emacs` editing mode
|
||||||
* Note batch operation
|
* Export notes to PDFs
|
||||||
* Custom theme for blog
|
* Batch note operation
|
||||||
|
* Customizable themes for blogging
|
||||||
|
|
||||||
## 2. Why we created Leanote
|
## 2. Why we create Leanote
|
||||||
To be honest, our inspiration comes from Evernote. We use Evernote to manage our knowledge everyday. But we find that:
|
|
||||||
* Evernote's editor can't meet our needs, it does not have document navigation, it does not render code properly (as a programmer, syntax highlighted code rendering is a basic need), it cannot resize images and so forth
|
We have been using the popular note-taking software/service `Evernote` as our knowledge management tool on a daily basis. Benefited from and inspired by `Evernote`, we decided to create a brand-new tool that provides everything `Evernote` has to offer, plus a bunch of new features that `Evernote` failed to deliver, such as:
|
||||||
* We like markdown, but Evernote does not support it.
|
|
||||||
* We want to share our knowledge, so all of us have our blogs (e.g. on Wordpress) and our Evernote accounts, but why can not those two be one!
|
* A more powerful editor: `Evernote`'s editor lacks the functionalities of **document navigation**, **syntax based code rendering** (as a programmer, syntax highlighted code rendering is a necessity), **image resizing** and so forth.
|
||||||
|
* Everybody loves *markdown*, however `Evernote` simply wouldn't add it despite of years' of requests from users. So we will do the favor and bring a *markdown* enabled editor to you, guess what, it is also rendered in real-time!
|
||||||
|
* If you a developer and miss the `Vim` or `Emacs` ways of writing, we offer you the choice of `Vim` and `Emacs` editting modes. Equipped with *markdown* syntax for text formatting, you will never need to touch your mouse while writing.
|
||||||
|
* We love managing knowledge and thoughts as much as sharing them, so everybody has their own note account (`Evernote`, `Onenote`, `Google doc`, `Wiz note` etc.) and social media account (`Facebook`, `Wordpress`, blogs, etc.). But why can’t those two be one? Leanote makes this first step to bridge the private note-taking and public knowledge sharing seamlessly.
|
||||||
|
* A complete and all-platform (sorry Windows phone) covering software suite: that includes Leanote Web & Server (this repository), [Desktop app](https://github.com/leanote/desktop-app), [iOS](https://github.com/leanote/leanote-ios), [Android](https://github.com/leanote/leanote-android). And they are all open source!
|
||||||
* ......
|
* ......
|
||||||
|
|
||||||
## 3. How to install Leanote
|
## 3. How to get Leanote
|
||||||
|
|
||||||
Leanote contains: Leanote Web & Server (this repository), [Desktop app](https://github.com/leanote/desktop-app), [iOS](https://github.com/leanote/leanote-ios), [Android](https://github.com/leanote/leanote-android). And all the products are open source!
|
The Leanote software suite contains: Leanote Web & Server (this repository), [Desktop app](https://github.com/leanote/desktop-app), [iOS](https://github.com/leanote/leanote-ios), [Android](https://github.com/leanote/leanote-android).
|
||||||
|
|
||||||
You can install Leanote on your server, and use Leanote App (Desktop, iOs, Android) to sync notes with your self-hosted server.
|
Interested in our product and want to try it out from your web browser? Welcome to sign up on https://leanote.com.
|
||||||
|
|
||||||
Welcome to sign up on https://leanote.com, Leanote team provide a stable and reliable service for you.
|
Feeling suspicious about how those note-taking companies treat your personal data? You can install Leanote on your server, and use Leanote App (Desktop, iOS, Android) to sync notes with your self-hosted server.
|
||||||
|
|
||||||
More information about how to install Leanote please see:
|
More information about how to install Leanote please see:
|
||||||
|
|
||||||
* [Leanote binary installation tutorial](https://github.com/leanote/leanote/wiki/leanote-binary-distribution-installation-tutorial)
|
* Leanote binary installation tutorial:
|
||||||
* [Leanote source installation tutorial](https://github.com/leanote/leanote/wiki/leanote-source-installation-tutorial)
|
* [Windows](https://github.com/leanote/leanote/wiki/leanote-source-installation-on-Windows-(En))
|
||||||
|
* [Mac and Linux](https://github.com/leanote/leanote/wiki/leanote-binary-installation-on-Mac-and-Linux-(En))
|
||||||
|
* Leanote source installation tutorial:
|
||||||
|
* [Windows](https://github.com/leanote/leanote/wiki/leanote-source-installation-on-Windows-(En))
|
||||||
|
* [Mac and Linux](https://github.com/leanote/leanote/wiki/Leanote-source-installation-on-Mac-and-Linux-(En))
|
||||||
|
|
||||||
## 4. How to develop Leanote
|
## 4. Documentation
|
||||||
|
|
||||||
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 [wiki](https://github.com/leanote/leanote/wiki) for detailed instruction on how to install Leanote on various platforms, trouble shooting and configuration explanations.
|
||||||
|
|
||||||
## 5. Docs
|
|
||||||
|
|
||||||
Please see [wiki](https://github.com/leanote/leanote/wiki).
|
## 5. How to develop Leanote
|
||||||
|
|
||||||
## 6. Contributors
|
If you are a developer yourself and feel like to build on top of Leanote, please refer to [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).
|
||||||
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).
|
## 6. Contributions
|
||||||
|
|
||||||
If you find some problems or has some good ideas, please submit [issues](https://github.com/leanote/leanote/issues).
|
Like or dislike Leanote, please leave your comments and suggestions to help us improve it.
|
||||||
|
If you encounter any issue, we suggest you first do a search in the issues section to see whether a solution already exists, or open up a new one otherwise.
|
||||||
|
|
||||||
|
We’d like to acknowledge the contributions made by our [developers and contributors](https://github.com/leanote/leanote/graphs/contributors) to
|
||||||
|
this project. Leanote won’t exist without your hard work. Your help is much appreciated.
|
||||||
|
|
||||||
|
## 7. Join us
|
||||||
|
|
||||||
|
Please feel free to fork this repository and contribute back using [pull requests](https://github.com/leanote/leanote/pulls).
|
||||||
|
|
||||||
|
If you find any problems or have any good ideas, feature requests, please submit here [issues](https://github.com/leanote/leanote/issues).
|
||||||
|
|
||||||
You are always welcomed!
|
|
||||||
|
|
||||||
## 8. Donation
|
## 8. Donation
|
||||||
Support us, [donate us](http://leanote.org/#donate). And thanks [donators](http://leanote.leanote.com/post/leanote-donation-list).
|
|
||||||
|
If you like our product, consider supporting us via [donate us](http://leanote.org/#donate).
|
||||||
|
We acknowledge the donations make by all the [donators](http://leanote.leanote.com/post/leanote-donation-list).
|
||||||
|
|
||||||
## 9. Related projects
|
## 9. Related projects
|
||||||
|
|
||||||
@@ -74,12 +91,12 @@ Support us, [donate us](http://leanote.org/#donate). And thanks [donators](http:
|
|||||||
|
|
||||||
You are welcome to join us.
|
You are welcome to join us.
|
||||||
|
|
||||||
## 9. Support & Join us
|
## 10. Contacts
|
||||||
|
|
||||||
* Email: leanote@leanote.com
|
* Email: leanote@leanote.com
|
||||||
* [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: 256076853, 158716820
|
* QQ Groups: 326073529, 256076853, 158716820
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -91,64 +108,71 @@ Leanote, 不只是笔记!
|
|||||||
|
|
||||||
**特性**
|
**特性**
|
||||||
|
|
||||||
* 知识管理: 通过Leanote来管理知识, Leanote有易操作的界面, 包含两款编辑器富文本编辑器和Markdown编辑器. 在Leanote, 你可以尽情享受写作.
|
* 高效笔记:Leanote 有易操作的界面, 包含一款富文本编辑器和Markdown编辑器,让您的笔记记录更轻松和高效。对高阶用户,我们还提供`Vim` 和`Emacs` 编辑模式,助推你的写作速度更上层楼。
|
||||||
* 博客: Leanote也可以作为你的博客, 将知识公开成博客, 让Leanote把你的知识传播的更远!
|
* 知识管理: Leanote 灵活而强大的“笔记本-笔记-标签”系统,让它成为你个人知识管理的利器。
|
||||||
* 分享: 你也可以通过分享知识给好友, 让好友拥有你的知识.
|
* 分享: 你可以通过Leanote同好友分享知识、想法和经历, 邀请好友加入你的笔记簿,通过云端交流信息。
|
||||||
* 协作: 在分享的同时也可以与好友一起协作知识.
|
* 协作: Leanote协助你与同事之间相互协作,激荡新思路,随时随地头脑风暴。
|
||||||
|
* 博客: Leanote也可以作为你的个人博客, 把你的知识传播的更远!
|
||||||
|
|
||||||
**一些其它特性**
|
**其它特性**
|
||||||
|
|
||||||
* 支持Markdown编辑
|
* 支持Markdown编辑
|
||||||
* 写作模式
|
* 写作模式
|
||||||
|
* `Vim` 及 `Emacs` 编辑模式
|
||||||
* 支持PDF导出
|
* 支持PDF导出
|
||||||
* 支持批量操作
|
* 支持批量操作
|
||||||
* 博客自定义主题, 实现高度定制化
|
* 博客自定义主题, 实现高度定制化
|
||||||
|
|
||||||
## 2. 为什么我们要创建Leanote?
|
## 2. 为什么我们要创建Leanote?
|
||||||
说实话, 我们曾是evernote的忠实粉丝, 但是我们也发现evernote的不足:
|
我们都曾是`Evernote`的忠实粉丝, 一直以来`Evernote`都是我们日常知识管理的有效工具。于是我们决定重新创造一款工具,提供`Evernote`所能提供的功能,同时弥补`Evernote`的不足,比如:
|
||||||
* evernote的编辑器不能满足我们的需求, 不能贴代码(格式会乱掉, 作为程序员, 代码是我们的基本需求啊), 图片不能缩放.
|
* 功能更强的文本编辑器:`Evernote`的编辑器不能满足我们的需求, 不能实现文档导航、不能贴代码(格式会乱掉, 作为程序员, 代码是我们的基本需求啊), 图片不能缩放等。
|
||||||
* 我们是markdown的爱好者, 可是evernote竟然没有.
|
* `Evernote` 不支持所有人都喜爱的markdown语法,于是我们为Leanote配备了一款可以实时渲染的markdown编辑器。
|
||||||
* 我们也想将知识公开, 所以我们有自己的博客, 如wordpress, 但为什么这两者不能合二为一呢?
|
* 如果你是一名开发者,觉得手指怀念`Vim` 或 `Emacs` 了,那么我们还提供给你`Vim` 和 `Emacs` 写作模式,配合*markdown*的格式编辑,写作的时候再也不用去碰鼠标了。
|
||||||
|
* 知识积累和知识分享同样重要,因此大家都有自己的笔记账号和社交账号。但为什么这两者不能合二为一呢? Leanote 做到了将二者无缝衔接。
|
||||||
|
* 一套完整的、全平台覆盖的软件套装,包括了web、桌面、安卓、IOS设备,而且全部开源!
|
||||||
* 还有...
|
* 还有...
|
||||||
|
|
||||||
## 3.安装Leanote
|
## 3. 获取Leanote
|
||||||
|
|
||||||
Leanote云笔记产品包括: Leanote Web & Server(即本仓库), 桌面客户端, ios, android. 4端全部开源! 你可以下载它安装在自己的服务器上, Leanote的客户端可以连接自建的服务.
|
Leanote云笔记产品包括: Leanote Web & Server(即本仓库), 桌面客户端, IOS, android. 4端全部开源!
|
||||||
|
|
||||||
欢迎在 https://leanote.com 上注册, Leanote团队为你提供稳定可靠的服务.
|
如果想试用我们的产品,欢迎在 https://leanote.com 上注册, Leanote团队为你提供稳定可靠的服务。
|
||||||
|
担心服务厂商如何处理你的个人数据吗?你可以下载Leanote安装在自己的服务器上, 通过Leanote客户端连接与自建服务同步数据。
|
||||||
|
|
||||||
这里详细整理了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二进制详细安装教程:
|
||||||
* [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)
|
* [Windows](https://github.com/leanote/leanote/wiki/Leanote%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B---Windows)
|
||||||
|
* [Mac, Linux](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源码详细安装教程:
|
||||||
|
* [Windows](https://github.com/leanote/leanote/wiki/Leanote-%E6%BA%90%E7%A0%81%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B----Windows)
|
||||||
|
* [Mac, Linux](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进行二次开发
|
## 4. 相关文档
|
||||||
|
|
||||||
请查看 [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)
|
更多详细的安装说明、问题处理和配置说明文档,请查看 [wiki](https://github.com/leanote/leanote/wiki)。
|
||||||
|
|
||||||
## 5 相关文档
|
## 5. 如何对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)
|
|
||||||
|
|
||||||
更多文档请查看 [wiki](https://github.com/leanote/leanote/wiki).
|
如果您有兴趣基于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)。
|
||||||
|
|
||||||
## 6. 贡献者
|
## 6. 贡献者
|
||||||
|
|
||||||
谢谢 [贡献者](https://github.com/leanote/leanote/graphs/contributors) 的贡献, Leanote因有你们而更完美!
|
在此对向Leanote贡献力量的[贡献者们](https://github.com/leanote/leanote/graphs/contributors) 表示感谢。Leanote因有你们而更完美!
|
||||||
|
|
||||||
## 7. 加入我们
|
## 7. 加入我们
|
||||||
|
|
||||||
欢迎提交[pull requests](https://github.com/leanote/leanote/pulls) 到Leanote.
|
欢迎提交[pull requests](https://github.com/leanote/leanote/pulls) 到Leanote。
|
||||||
|
|
||||||
有任何问题或建议, 欢迎提交[issue](https://github.com/leanote/leanote/issues).
|
有任何问题或建议, 请先搜索[issue](https://github.com/leanote/leanote/issues)区是否已经有解决方法。如果没有,欢迎提交新issue。
|
||||||
|
|
||||||
Leanote还有很多问题, 如果你喜欢它, 欢迎加入我们一起完善Leanote.
|
Leanote还有很多问题, 如果你喜欢它, 欢迎加入我们一起完善Leanote。
|
||||||
|
|
||||||
## 8. 捐赠
|
## 8. 捐赠
|
||||||
支持我们, [捐赠Leanote](http://leanote.org/#donate). 感谢[捐赠者](http://leanote.leanote.com/post/leanote-donation-list), 谢谢你们的鼓励, Leanote会一直坚持!
|
|
||||||
|
如果您喜欢我们的产品,请考虑支持我们, [捐赠Leanote](http://leanote.org/#donate)。
|
||||||
|
|
||||||
|
感谢[这些捐赠者](http://leanote.leanote.com/post/leanote-donation-list), 谢谢你们的鼓励, Leanote会一直坚持!
|
||||||
|
|
||||||
## 9. 其它相关项目
|
## 9. 其它相关项目
|
||||||
* [Leanote Desktop App](https://github.com/leanote/desktop-app), [下载地址](http://app.leanote.com)
|
* [Leanote Desktop App](https://github.com/leanote/desktop-app), [下载地址](http://app.leanote.com)
|
||||||
@@ -160,6 +184,6 @@ Leanote还有很多问题, 如果你喜欢它, 欢迎加入我们一起完善Lea
|
|||||||
## 联系&加入我们
|
## 联系&加入我们
|
||||||
* Email: leanote@leanote.com
|
* Email: leanote@leanote.com
|
||||||
* [Leanote 社区](http://bbs.leanote.com)
|
* [Leanote 社区](http://bbs.leanote.com)
|
||||||
* QQ群: 256076853, 158716820(已满)
|
* QQ群: 326073529, 256076853, 158716820
|
||||||
* [Leanote Google Group](https://groups.google.com/forum/#!forum/leanote)
|
* [Leanote Google Group](https://groups.google.com/forum/#!forum/leanote)
|
||||||
|
|
||||||
@@ -3,6 +3,7 @@ package controllers
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"github.com/leanote/leanote/app/info"
|
"github.com/leanote/leanote/app/info"
|
||||||
|
"github.com/leanote/leanote/app/lea/i18n"
|
||||||
"github.com/revel/revel"
|
"github.com/revel/revel"
|
||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
// . "github.com/leanote/leanote/app/lea"
|
// . "github.com/leanote/leanote/app/lea"
|
||||||
@@ -19,6 +20,11 @@ type BaseController struct {
|
|||||||
*revel.Controller
|
*revel.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 覆盖revel.Message
|
||||||
|
func (c *BaseController) Message(message string, args ...interface{}) (value string) {
|
||||||
|
return i18n.Message(c.Request.Locale, message, args...)
|
||||||
|
}
|
||||||
|
|
||||||
func (c BaseController) GetUserId() string {
|
func (c BaseController) GetUserId() string {
|
||||||
if userId, ok := c.Session["UserId"]; ok {
|
if userId, ok := c.Session["UserId"]; ok {
|
||||||
return userId
|
return userId
|
||||||
@@ -181,13 +187,17 @@ func (c BaseController) E404() revel.Result {
|
|||||||
// 设置本地
|
// 设置本地
|
||||||
func (c BaseController) SetLocale() string {
|
func (c BaseController) SetLocale() string {
|
||||||
locale := string(c.Request.Locale) // zh-CN
|
locale := string(c.Request.Locale) // zh-CN
|
||||||
|
// lang := locale
|
||||||
|
// if strings.Contains(locale, "-") {
|
||||||
|
// pos := strings.Index(locale, "-")
|
||||||
|
// lang = locale[0:pos]
|
||||||
|
// }
|
||||||
|
// if lang != "zh" && lang != "en" {
|
||||||
|
// lang = "en"
|
||||||
|
// }
|
||||||
lang := locale
|
lang := locale
|
||||||
if strings.Contains(locale, "-") {
|
if !i18n.HasLang(locale) {
|
||||||
pos := strings.Index(locale, "-")
|
lang = i18n.GetDefaultLang()
|
||||||
lang = locale[0:pos]
|
|
||||||
}
|
|
||||||
if lang != "zh" && lang != "en" && lang != "fr" && lang != "pt" {
|
|
||||||
lang = "en"
|
|
||||||
}
|
}
|
||||||
c.RenderArgs["locale"] = lang
|
c.RenderArgs["locale"] = lang
|
||||||
c.RenderArgs["siteUrl"] = configService.GetSiteUrl()
|
c.RenderArgs["siteUrl"] = configService.GetSiteUrl()
|
||||||
|
|||||||
@@ -113,8 +113,8 @@ func (c Blog) setPreviewUrl() {
|
|||||||
themeId := c.Session["themeId"]
|
themeId := c.Session["themeId"]
|
||||||
theme := themeService.GetTheme(userId, themeId)
|
theme := themeService.GetTheme(userId, themeId)
|
||||||
|
|
||||||
siteUrl := configService.GetSiteUrl()
|
// siteUrl := configService.GetSiteUrl()
|
||||||
blogUrl := siteUrl + "/preview" // blog.leanote.com
|
blogUrl := "/preview" // blog.leanote.com
|
||||||
|
|
||||||
indexUrl = blogUrl + "/" + userIdOrEmail
|
indexUrl = blogUrl + "/" + userIdOrEmail
|
||||||
cateUrl = blogUrl + "/cate/" + userIdOrEmail // /notebookId
|
cateUrl = blogUrl + "/cate/" + userIdOrEmail // /notebookId
|
||||||
@@ -143,8 +143,8 @@ func (c Blog) setPreviewUrl() {
|
|||||||
// 各种地址设置
|
// 各种地址设置
|
||||||
func (c Blog) setUrl(userBlog info.UserBlog, userInfo info.User) {
|
func (c Blog) setUrl(userBlog info.UserBlog, userInfo info.User) {
|
||||||
// 主页 http://leanote.com/blog/life or http://blog.leanote.com/life or http:// xxxx.leanote.com or aa.com
|
// 主页 http://leanote.com/blog/life or http://blog.leanote.com/life or http:// xxxx.leanote.com or aa.com
|
||||||
host := c.Request.Request.Host
|
// host := c.Request.Request.Host
|
||||||
var staticUrl = configService.GetUserUrl(strings.Split(host, ":")[0])
|
// var staticUrl = configService.GetUserUrl(strings.Split(host, ":")[0])
|
||||||
// staticUrl == host, 为保证同源!!! 只有host, http://leanote.com, http://blog/leanote.com
|
// staticUrl == host, 为保证同源!!! 只有host, http://leanote.com, http://blog/leanote.com
|
||||||
// life.leanote.com, lealife.com
|
// life.leanote.com, lealife.com
|
||||||
siteUrl := configService.GetSiteUrl()
|
siteUrl := configService.GetSiteUrl()
|
||||||
@@ -168,20 +168,20 @@ func (c Blog) setUrl(userBlog info.UserBlog, userInfo info.User) {
|
|||||||
c.RenderArgs["themeBaseUrl"] = "/" + userBlog.ThemePath
|
c.RenderArgs["themeBaseUrl"] = "/" + userBlog.ThemePath
|
||||||
|
|
||||||
// 其它static js
|
// 其它static js
|
||||||
c.RenderArgs["jQueryUrl"] = siteUrl + "/js/jquery-1.9.0.min.js"
|
c.RenderArgs["jQueryUrl"] = "/js/jquery-1.9.0.min.js"
|
||||||
|
|
||||||
c.RenderArgs["prettifyJsUrl"] = siteUrl + "/js/google-code-prettify/prettify.js"
|
c.RenderArgs["prettifyJsUrl"] = "/js/google-code-prettify/prettify.js"
|
||||||
c.RenderArgs["prettifyCssUrl"] = siteUrl + "/js/google-code-prettify/prettify.css"
|
c.RenderArgs["prettifyCssUrl"] = "/js/google-code-prettify/prettify.css"
|
||||||
|
|
||||||
c.RenderArgs["blogCommonJsUrl"] = siteUrl + "/public/blog/js/common.js"
|
c.RenderArgs["blogCommonJsUrl"] = "/public/blog/js/common.js"
|
||||||
|
|
||||||
c.RenderArgs["shareCommentCssUrl"] = siteUrl + "/public/blog/css/share_comment.css"
|
c.RenderArgs["shareCommentCssUrl"] = "/public/blog/css/share_comment.css"
|
||||||
c.RenderArgs["shareCommentJsUrl"] = siteUrl + "/public/blog/js/share_comment.js"
|
c.RenderArgs["shareCommentJsUrl"] = "/public/blog/js/share_comment.js"
|
||||||
|
|
||||||
c.RenderArgs["fontAwesomeUrl"] = staticUrl + "/css/font-awesome-4.2.0/css/font-awesome.css"
|
c.RenderArgs["fontAwesomeUrl"] = "/css/font-awesome-4.2.0/css/font-awesome.css"
|
||||||
|
|
||||||
c.RenderArgs["bootstrapCssUrl"] = siteUrl + "/css/bootstrap.css"
|
c.RenderArgs["bootstrapCssUrl"] = "/css/bootstrap.css"
|
||||||
c.RenderArgs["bootstrapJsUrl"] = siteUrl + "/js/bootstrap-min.js"
|
c.RenderArgs["bootstrapJsUrl"] = "/js/bootstrap-min.js"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 笔记本分类
|
// 笔记本分类
|
||||||
|
|||||||
@@ -74,12 +74,13 @@ func (c AdminEmail) DoToImage(toImageBinPath string) revel.Result {
|
|||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c AdminEmail) Set(emailHost, emailPort, emailUsername, emailPassword string) revel.Result {
|
func (c AdminEmail) Set(emailHost, emailPort, emailUsername, emailPassword, emailSSL string) revel.Result {
|
||||||
re := info.NewRe()
|
re := info.NewRe()
|
||||||
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailHost", emailHost)
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailHost", emailHost)
|
||||||
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPort", emailPort)
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPort", emailPort)
|
||||||
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailUsername", emailUsername)
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailUsername", emailUsername)
|
||||||
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPassword", emailPassword)
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailPassword", emailPassword)
|
||||||
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "emailSSL", emailSSL)
|
||||||
|
|
||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,12 @@ func (c AdminSetting) ExportPdf(path string) revel.Result {
|
|||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c AdminSetting) DoSiteUrl(siteUrl string) revel.Result {
|
||||||
|
re := info.NewRe()
|
||||||
|
re.Ok = configService.UpdateGlobalStringConfig(c.GetUserId(), "siteUrl", siteUrl)
|
||||||
|
return c.RenderJson(re)
|
||||||
|
}
|
||||||
|
|
||||||
// SubDomain
|
// SubDomain
|
||||||
func (c AdminSetting) SubDomain() revel.Result {
|
func (c AdminSetting) SubDomain() revel.Result {
|
||||||
c.RenderArgs["str"] = configService.GlobalStringConfigs
|
c.RenderArgs["str"] = configService.GlobalStringConfigs
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import (
|
|||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
// "strings"
|
||||||
"time"
|
"time"
|
||||||
|
"regexp"
|
||||||
// "github.com/leanote/leanote/app/types"
|
// "github.com/leanote/leanote/app/types"
|
||||||
// "io/ioutil"
|
// "io/ioutil"
|
||||||
// "fmt"
|
// "fmt"
|
||||||
@@ -158,11 +159,31 @@ func (c ApiNote) fixPostNotecontent(noteOrContent *info.ApiNote) {
|
|||||||
if noteOrContent.Content == "" {
|
if noteOrContent.Content == "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
files := noteOrContent.Files
|
files := noteOrContent.Files
|
||||||
if files != nil && len(files) > 0 {
|
if files != nil && len(files) > 0 {
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
if file.LocalFileId != "" {
|
if file.LocalFileId != "" {
|
||||||
noteOrContent.Content = strings.Replace(noteOrContent.Content, "fileId="+file.LocalFileId, "fileId="+file.FileId, -1)
|
LogJ(file)
|
||||||
|
if !file.IsAttach {
|
||||||
|
reg, _ := regexp.Compile(`"https*://[^/]*?/api/file/getImage\?fileId=`+file.LocalFileId)
|
||||||
|
// Log(reg)
|
||||||
|
noteOrContent.Content = reg.ReplaceAllString(noteOrContent.Content, `"/api/file/getImage?fileId=`+file.FileId)
|
||||||
|
|
||||||
|
// // "http://a.com/api/file/getImage?fileId=localId" => /api/file/getImage?fileId=serverId
|
||||||
|
// noteOrContent.Content = strings.Replace(noteOrContent.Content,
|
||||||
|
// baseUrl + "/api/file/getImage?fileId="+file.LocalFileId,
|
||||||
|
// "/api/file/getImage?fileId="+file.FileId, -1)
|
||||||
|
} else {
|
||||||
|
reg, _ := regexp.Compile(`"https*://[^/]*?/api/file/getAttach\?fileId=`+file.LocalFileId)
|
||||||
|
Log(reg)
|
||||||
|
noteOrContent.Content = reg.ReplaceAllString(noteOrContent.Content, `"/api/file/getAttach?fileId=`+file.FileId)
|
||||||
|
/*
|
||||||
|
noteOrContent.Content = strings.Replace(noteOrContent.Content,
|
||||||
|
baseUrl + "/api/file/getAttach?fileId="+file.LocalFileId,
|
||||||
|
"/api/file/getAttach?fileId="+file.FileId, -1)
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -352,6 +373,7 @@ func (c ApiNote) UpdateNote(noteOrContent info.ApiNote) revel.Result {
|
|||||||
Log("conflict")
|
Log("conflict")
|
||||||
return c.RenderJson(re)
|
return c.RenderJson(re)
|
||||||
}
|
}
|
||||||
|
Log("没有冲突")
|
||||||
|
|
||||||
// 如果传了files
|
// 如果传了files
|
||||||
// TODO 测试
|
// TODO 测试
|
||||||
|
|||||||
@@ -1,94 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// convert revel msg to js msg
|
|
||||||
|
|
||||||
var msgBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/messages/"
|
|
||||||
var targetBasePath = "/Users/life/Documents/Go/package2/src/github.com/leanote/leanote/public/js/i18n/"
|
|
||||||
|
|
||||||
func parse(filename string) {
|
|
||||||
file, err := os.Open(msgBasePath + filename)
|
|
||||||
reader := bufio.NewReader(file)
|
|
||||||
msg := map[string]string{}
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for true {
|
|
||||||
line, _, err := reader.ReadLine()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(line) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// 对每一行进行处理
|
|
||||||
if line[0] == '#' || line[1] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
lineStr := string(line)
|
|
||||||
|
|
||||||
// 找到第一个=位置
|
|
||||||
pos := strings.Index(lineStr, "=")
|
|
||||||
|
|
||||||
if pos < 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
key := string(line[0:pos])
|
|
||||||
value := string(line[pos+1:])
|
|
||||||
|
|
||||||
// fmt.Println(lineStr)
|
|
||||||
// fmt.Println(value)
|
|
||||||
|
|
||||||
msg[key] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSON
|
|
||||||
b, _ := json.Marshal(msg)
|
|
||||||
str := string(b)
|
|
||||||
fmt.Println(str)
|
|
||||||
|
|
||||||
targetName := targetBasePath + filename + ".js"
|
|
||||||
file2, err2 := os.OpenFile(targetName, os.O_RDWR|os.O_CREATE, 0644)
|
|
||||||
if err2 != nil {
|
|
||||||
file2, err2 = os.Create(targetName)
|
|
||||||
}
|
|
||||||
file2.WriteString("var MSG = " + str + ";" + `
|
|
||||||
function getMsg(key, data) {
|
|
||||||
var msg = MSG[key]
|
|
||||||
if(msg) {
|
|
||||||
if(data) {
|
|
||||||
if(!isArray(data)) {
|
|
||||||
data = [data];
|
|
||||||
}
|
|
||||||
for(var i = 0; i < data.length; ++i) {
|
|
||||||
msg = msg.replace("%s", data[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
return key;
|
|
||||||
}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 生成js的i18n文件
|
|
||||||
func main() {
|
|
||||||
parse("msg.en")
|
|
||||||
parse("msg.zh")
|
|
||||||
parse("msg.fr")
|
|
||||||
parse("msg.pt")
|
|
||||||
parse("blog.zh")
|
|
||||||
parse("blog.en")
|
|
||||||
parse("blog.fr")
|
|
||||||
parse("blog.pt")
|
|
||||||
}
|
|
||||||
+17
-7
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/leanote/leanote/app/db"
|
"github.com/leanote/leanote/app/db"
|
||||||
. "github.com/leanote/leanote/app/lea"
|
. "github.com/leanote/leanote/app/lea"
|
||||||
_ "github.com/leanote/leanote/app/lea/binder"
|
_ "github.com/leanote/leanote/app/lea/binder"
|
||||||
|
"github.com/leanote/leanote/app/lea/i18n"
|
||||||
"github.com/leanote/leanote/app/lea/route"
|
"github.com/leanote/leanote/app/lea/route"
|
||||||
"github.com/leanote/leanote/app/service"
|
"github.com/leanote/leanote/app/service"
|
||||||
"github.com/revel/revel"
|
"github.com/revel/revel"
|
||||||
@@ -38,9 +39,10 @@ func init() {
|
|||||||
// 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.
|
||||||
revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie.
|
revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie.
|
||||||
revel.I18nFilter, // Resolve the requested language
|
// revel.I18nFilter, // Resolve the requested language
|
||||||
|
i18n.I18nFilter, // Resolve the requested language by leanote
|
||||||
revel.InterceptorFilter, // Run interceptors around the action.
|
revel.InterceptorFilter, // Run interceptors around the action.
|
||||||
revel.CompressFilter, // Compress the result.
|
revel.CompressFilter, // Compress the result.
|
||||||
revel.ActionInvoker, // Invoke the action.
|
revel.ActionInvoker, // Invoke the action.
|
||||||
@@ -180,10 +182,18 @@ func init() {
|
|||||||
return template.HTML(tagStr)
|
return template.HTML(tagStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
revel.TemplateFuncs["msg"] = func(renderArgs map[string]interface{}, message string, args ...interface{}) template.HTML {
|
||||||
|
str, ok := renderArgs[revel.CurrentLocaleRenderArg].(string)
|
||||||
|
if !ok {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return template.HTML(i18n.Message(str, message, args...))
|
||||||
|
}
|
||||||
|
|
||||||
// 不用revel的msg
|
// 不用revel的msg
|
||||||
revel.TemplateFuncs["leaMsg"] = func(renderArgs map[string]interface{}, key string) template.HTML {
|
revel.TemplateFuncs["leaMsg"] = func(renderArgs map[string]interface{}, key string) template.HTML {
|
||||||
locale, _ := renderArgs[revel.CurrentLocaleRenderArg].(string)
|
locale, _ := renderArgs[revel.CurrentLocaleRenderArg].(string)
|
||||||
str := revel.Message(locale, key)
|
str := i18n.Message(locale, key)
|
||||||
if strings.HasPrefix(str, "???") {
|
if strings.HasPrefix(str, "???") {
|
||||||
str = key
|
str = key
|
||||||
}
|
}
|
||||||
@@ -392,9 +402,9 @@ func init() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
{{range $i := N 1 10}}
|
{{range $i := N 1 10}}
|
||||||
<div>{{$i}}</div>
|
<div>{{$i}}</div>
|
||||||
{{end}}
|
{{end}}
|
||||||
*/
|
*/
|
||||||
revel.TemplateFuncs["N"] = func(start, end int) (stream chan int) {
|
revel.TemplateFuncs["N"] = func(start, end int) (stream chan int) {
|
||||||
stream = make(chan int)
|
stream = make(chan int)
|
||||||
|
|||||||
+18
-10
@@ -1,26 +1,34 @@
|
|||||||
package lea
|
package lea
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/revel/revel"
|
"github.com/revel/revel"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Log(i interface{}) {
|
func Log(i ...interface{}) {
|
||||||
revel.INFO.Println(i)
|
revel.INFO.Println(i...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LogW(i ...interface{}) {
|
||||||
|
revel.WARN.Println(i...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Log1(key, i interface{}) {
|
||||||
|
revel.INFO.Println(key, i)
|
||||||
}
|
}
|
||||||
|
|
||||||
func LogJ(i interface{}) {
|
func LogJ(i interface{}) {
|
||||||
b, _ := json.MarshalIndent(i, "", " ")
|
b, _ := json.MarshalIndent(i, "", " ")
|
||||||
revel.INFO.Println(string(b))
|
revel.INFO.Println(string(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 为test用
|
// 为test用
|
||||||
func L(i interface{}) {
|
func L(i interface{}) {
|
||||||
fmt.Println(i)
|
fmt.Println(i)
|
||||||
}
|
}
|
||||||
|
|
||||||
func LJ(i interface{}) {
|
func LJ(i interface{}) {
|
||||||
b, _ := json.MarshalIndent(i, "", " ")
|
b, _ := json.MarshalIndent(i, "", " ")
|
||||||
fmt.Println(string(b))
|
fmt.Println(string(b))
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
"github.com/leanote/leanote/app/lea"
|
||||||
)
|
)
|
||||||
|
|
||||||
// main functions shows how to TarGz a directory/file and
|
// main functions shows how to TarGz a directory/file and
|
||||||
@@ -144,12 +145,18 @@ func Unzip(srcFilePath string, destDirPath string) (ok bool, msg string) {
|
|||||||
}
|
}
|
||||||
defer r.Close()
|
defer r.Close()
|
||||||
for _, f := range r.File {
|
for _, f := range r.File {
|
||||||
// fmt.Println("FileName : ", f.Name); // j/aaa.zip
|
// fmt.Println("FileName : ", f.Name); // j/aaa.zip
|
||||||
rc, err := f.Open()
|
rc, err := f.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 包含恶意目录
|
||||||
|
if strings.Contains(f.Name, "../") {
|
||||||
|
lea.LogW("恶意文件", f.Name);
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// 把首文件夹去掉, 即j去掉, 分离出文件夹和文件名
|
// 把首文件夹去掉, 即j去掉, 分离出文件夹和文件名
|
||||||
paths := strings.Split(f.Name, "/")
|
paths := strings.Split(f.Name, "/")
|
||||||
prePath := ""
|
prePath := ""
|
||||||
|
|||||||
@@ -0,0 +1,223 @@
|
|||||||
|
package i18n
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/revel/revel"
|
||||||
|
"github.com/robfig/config"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CurrentLocaleRenderArg = "currentLocale" // The key for the current locale render arg value
|
||||||
|
|
||||||
|
messageFilesDirectory = "messages"
|
||||||
|
messageFilePattern = `^\w+\.conf$`
|
||||||
|
unknownValueFormat = "??? %s ???"
|
||||||
|
defaultLanguageOption = "i18n.default_language"
|
||||||
|
localeCookieConfigKey = "i18n.cookie"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// All currently loaded message configs.
|
||||||
|
// en-us, zh-cn, zh-hk ->
|
||||||
|
messages map[string]*config.Config
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetAllLangMessages() map[string]*config.Config {
|
||||||
|
return messages
|
||||||
|
}
|
||||||
|
|
||||||
|
func HasLang(lang string) bool {
|
||||||
|
_, ok := messages[lang]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDefaultLang() string {
|
||||||
|
lang, _ := revel.Config.String(defaultLanguageOption)
|
||||||
|
return lang
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return all currently loaded message languages.
|
||||||
|
func MessageLanguages() []string {
|
||||||
|
languages := make([]string, len(messages))
|
||||||
|
i := 0
|
||||||
|
for language, _ := range messages {
|
||||||
|
languages[i] = language
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
return languages
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform a message look-up for the given locale and message using the given arguments.
|
||||||
|
//
|
||||||
|
// When either an unknown locale or message is detected, a specially formatted string is returned.
|
||||||
|
func Message(locale, message string, args ...interface{}) string {
|
||||||
|
language, region := parseLocale(locale)
|
||||||
|
|
||||||
|
langAndRegion := language + "-" + region
|
||||||
|
// revel.TRACE.Println(langAndRegion + " 怎么回事")
|
||||||
|
|
||||||
|
messageConfig, knownLanguage := messages[langAndRegion]
|
||||||
|
if !knownLanguage {
|
||||||
|
// revel.TRACE.Printf("Unsupported language for locale '%s' and message '%s', trying default language", locale, message)
|
||||||
|
|
||||||
|
if defaultLanguage, found := revel.Config.String(defaultLanguageOption); found {
|
||||||
|
// revel.TRACE.Printf("Using default language '%s'", defaultLanguage)
|
||||||
|
|
||||||
|
messageConfig, knownLanguage = messages[defaultLanguage]
|
||||||
|
if !knownLanguage {
|
||||||
|
// WARN.Printf("Unsupported default language for locale '%s' and message '%s'", defaultLanguage, message)
|
||||||
|
return fmt.Sprintf(unknownValueFormat, message)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// WARN.Printf("Unable to find default language option (%s); messages for unsupported locales will never be translated", defaultLanguageOption)
|
||||||
|
return fmt.Sprintf(unknownValueFormat, message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This works because unlike the goconfig documentation suggests it will actually
|
||||||
|
// try to resolve message in DEFAULT if it did not find it in the given section.
|
||||||
|
value, error := messageConfig.String(region, message)
|
||||||
|
if error != nil {
|
||||||
|
// WARN.Printf("Unknown message '%s' for locale '%s'", message, locale)
|
||||||
|
return fmt.Sprintf(unknownValueFormat, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(args) > 0 {
|
||||||
|
// revel.TRACE.Printf("Arguments detected, formatting '%s' with %v", value, args)
|
||||||
|
value = fmt.Sprintf(value, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseLocale(locale string) (language, region string) {
|
||||||
|
if strings.Contains(locale, "-") {
|
||||||
|
languageAndRegion := strings.Split(locale, "-")
|
||||||
|
return languageAndRegion[0], languageAndRegion[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
return locale, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively read and cache all available messages from all message files on the given path.
|
||||||
|
func loadMessages(path string) {
|
||||||
|
messages = make(map[string]*config.Config)
|
||||||
|
|
||||||
|
if error := filepath.Walk(path, loadEachMessageLang); error != nil && !os.IsNotExist(error) {
|
||||||
|
// ERROR.Println("Error reading messages files:", error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载每一个文件夹
|
||||||
|
func loadEachMessageLang(parentPath string, parentInfo os.FileInfo, osError error) (err error) {
|
||||||
|
if !parentInfo.IsDir() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := filepath.Walk(parentPath, func(path string, info os.FileInfo, osError error) error {
|
||||||
|
return loadMessageFile(parentInfo.Name(), path, info, osError)
|
||||||
|
|
||||||
|
}); err != nil && !os.IsNotExist(err) {
|
||||||
|
// ERROR.Println("Error reading messages files:", error)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load a single message file
|
||||||
|
func loadMessageFile(locale string, path string, info os.FileInfo, osError error) error {
|
||||||
|
if osError != nil {
|
||||||
|
return osError
|
||||||
|
}
|
||||||
|
if info.IsDir() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if matched, _ := regexp.MatchString(messageFilePattern, info.Name()); matched {
|
||||||
|
if config, error := parseMessagesFile(path); error != nil {
|
||||||
|
return error
|
||||||
|
} else {
|
||||||
|
// locale := parseLocaleFromFileName(info.Name())
|
||||||
|
// revel.TRACE.Print(locale + "----locale")
|
||||||
|
|
||||||
|
// If we have already parsed a message file for this locale, merge both
|
||||||
|
if _, exists := messages[locale]; exists {
|
||||||
|
messages[locale].Merge(config)
|
||||||
|
revel.TRACE.Printf("Successfully merged messages for locale '%s'", locale)
|
||||||
|
} else {
|
||||||
|
messages[locale] = config
|
||||||
|
}
|
||||||
|
|
||||||
|
revel.TRACE.Println("Successfully loaded messages from file", info.Name())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
revel.TRACE.Printf("Ignoring file %s because it did not have a valid extension", info.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseMessagesFile(path string) (messageConfig *config.Config, error error) {
|
||||||
|
messageConfig, error = config.ReadDefault(path)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseLocaleFromFileName(file string) string {
|
||||||
|
extension := filepath.Ext(file)[1:]
|
||||||
|
return strings.ToLower(extension)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
revel.OnAppStart(func() {
|
||||||
|
loadMessages(filepath.Join(revel.BasePath, messageFilesDirectory))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func I18nFilter(c *revel.Controller, fc []revel.Filter) {
|
||||||
|
if foundCookie, cookieValue := hasLocaleCookie(c.Request); foundCookie {
|
||||||
|
revel.TRACE.Printf("Found locale cookie value: %s", cookieValue)
|
||||||
|
setCurrentLocaleControllerArguments(c, cookieValue)
|
||||||
|
} else if foundHeader, headerValue := hasAcceptLanguageHeader(c.Request); foundHeader {
|
||||||
|
revel.TRACE.Printf("Found Accept-Language header value: %s", headerValue)
|
||||||
|
setCurrentLocaleControllerArguments(c, headerValue)
|
||||||
|
} else {
|
||||||
|
revel.TRACE.Println("Unable to find locale in cookie or header, using empty string")
|
||||||
|
setCurrentLocaleControllerArguments(c, "")
|
||||||
|
}
|
||||||
|
fc[0](c, fc[1:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the current locale controller argument (CurrentLocaleControllerArg) with the given locale.
|
||||||
|
func setCurrentLocaleControllerArguments(c *revel.Controller, locale string) {
|
||||||
|
c.Request.Locale = locale
|
||||||
|
c.RenderArgs[CurrentLocaleRenderArg] = locale
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine whether the given request has valid Accept-Language value.
|
||||||
|
//
|
||||||
|
// Assumes that the accept languages stored in the request are sorted according to quality, with top
|
||||||
|
// quality first in the slice.
|
||||||
|
func hasAcceptLanguageHeader(request *revel.Request) (bool, string) {
|
||||||
|
if request.AcceptLanguages != nil && len(request.AcceptLanguages) > 0 {
|
||||||
|
return true, request.AcceptLanguages[0].Language
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine whether the given request has a valid language cookie value.
|
||||||
|
func hasLocaleCookie(request *revel.Request) (bool, string) {
|
||||||
|
if request != nil && request.Cookies() != nil {
|
||||||
|
name := revel.Config.StringDefault(localeCookieConfigKey, revel.CookiePrefix+"_LANG")
|
||||||
|
if cookie, error := request.Cookie(name); error == nil {
|
||||||
|
return true, cookie.Value
|
||||||
|
} else {
|
||||||
|
revel.TRACE.Printf("Unable to read locale cookie with name '%s': %s", name, error.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, ""
|
||||||
|
}
|
||||||
@@ -119,6 +119,7 @@ func (this *AttachService) DeleteAllAttachs(noteId, userId string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// delete attach
|
// delete attach
|
||||||
|
// 删除附件为什么要incrNoteUsn ? 因为可能没有内容要修改的
|
||||||
func (this *AttachService) DeleteAttach(attachId, userId string) (bool, string) {
|
func (this *AttachService) DeleteAttach(attachId, userId string) (bool, string) {
|
||||||
attach := info.Attach{}
|
attach := info.Attach{}
|
||||||
db.Get(db.Attachs, attachId, &attach)
|
db.Get(db.Attachs, attachId, &attach)
|
||||||
|
|||||||
@@ -518,7 +518,7 @@ func (this *BlogService) fixUserBlog(userBlog *info.UserBlog) {
|
|||||||
// Logo路径问题, 有些有http: 有些没有
|
// Logo路径问题, 有些有http: 有些没有
|
||||||
if userBlog.Logo != "" && !strings.HasPrefix(userBlog.Logo, "http") {
|
if userBlog.Logo != "" && !strings.HasPrefix(userBlog.Logo, "http") {
|
||||||
userBlog.Logo = strings.Trim(userBlog.Logo, "/")
|
userBlog.Logo = strings.Trim(userBlog.Logo, "/")
|
||||||
userBlog.Logo = configService.GetSiteUrl() + "/" + userBlog.Logo
|
userBlog.Logo = "/" + userBlog.Logo
|
||||||
}
|
}
|
||||||
|
|
||||||
if userBlog.SortField == "" {
|
if userBlog.SortField == "" {
|
||||||
@@ -1108,6 +1108,7 @@ func (this *BlogService) SortSingles(userId string, singleIds []string) (ok bool
|
|||||||
|
|
||||||
// 得到用户的博客url
|
// 得到用户的博客url
|
||||||
func (this *BlogService) GetUserBlogUrl(userBlog *info.UserBlog, username string) string {
|
func (this *BlogService) GetUserBlogUrl(userBlog *info.UserBlog, username string) string {
|
||||||
|
/*
|
||||||
if userBlog != nil {
|
if userBlog != nil {
|
||||||
if userBlog.Domain != "" && configService.AllowCustomDomain() {
|
if userBlog.Domain != "" && configService.AllowCustomDomain() {
|
||||||
return configService.GetUserUrl(userBlog.Domain)
|
return configService.GetUserUrl(userBlog.Domain)
|
||||||
@@ -1118,12 +1119,15 @@ func (this *BlogService) GetUserBlogUrl(userBlog *info.UserBlog, username string
|
|||||||
username = userBlog.UserId.Hex()
|
username = userBlog.UserId.Hex()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return configService.GetBlogUrl() + "/" + username
|
return configService.GetBlogUrl() + "/" + username
|
||||||
}
|
}
|
||||||
|
|
||||||
// 得到所有url
|
// 得到所有url
|
||||||
func (this *BlogService) GetBlogUrls(userBlog *info.UserBlog, userInfo *info.User) info.BlogUrls {
|
func (this *BlogService) GetBlogUrls(userBlog *info.UserBlog, userInfo *info.User) info.BlogUrls {
|
||||||
var indexUrl, postUrl, searchUrl, cateUrl, singleUrl, tagsUrl, archiveUrl, tagPostsUrl string
|
var indexUrl, postUrl, searchUrl, cateUrl, singleUrl, tagsUrl, archiveUrl, tagPostsUrl string
|
||||||
|
|
||||||
|
/*
|
||||||
if userBlog.Domain != "" && configService.AllowCustomDomain() { // http://demo.com
|
if userBlog.Domain != "" && configService.AllowCustomDomain() { // http://demo.com
|
||||||
// ok
|
// ok
|
||||||
indexUrl = configService.GetUserUrl(userBlog.Domain)
|
indexUrl = configService.GetUserUrl(userBlog.Domain)
|
||||||
@@ -1144,6 +1148,7 @@ func (this *BlogService) GetBlogUrls(userBlog *info.UserBlog, userInfo *info.Use
|
|||||||
tagsUrl = indexUrl + "/tags"
|
tagsUrl = indexUrl + "/tags"
|
||||||
tagPostsUrl = indexUrl + "/tag"
|
tagPostsUrl = indexUrl + "/tag"
|
||||||
} else {
|
} else {
|
||||||
|
*/
|
||||||
// ok
|
// ok
|
||||||
blogUrl := configService.GetBlogUrl() // blog.leanote.com
|
blogUrl := configService.GetBlogUrl() // blog.leanote.com
|
||||||
userIdOrEmail := ""
|
userIdOrEmail := ""
|
||||||
@@ -1162,7 +1167,7 @@ func (this *BlogService) GetBlogUrls(userBlog *info.UserBlog, userInfo *info.Use
|
|||||||
archiveUrl = blogUrl + "/archives/" + userIdOrEmail // blog.leanote.com/archive/username
|
archiveUrl = blogUrl + "/archives/" + userIdOrEmail // blog.leanote.com/archive/username
|
||||||
tagsUrl = blogUrl + "/tags/" + userIdOrEmail
|
tagsUrl = blogUrl + "/tags/" + userIdOrEmail
|
||||||
tagPostsUrl = blogUrl + "/tag/" + userIdOrEmail // blog.leanote.com/archive/username
|
tagPostsUrl = blogUrl + "/tag/" + userIdOrEmail // blog.leanote.com/archive/username
|
||||||
}
|
// }
|
||||||
|
|
||||||
return info.BlogUrls{
|
return info.BlogUrls{
|
||||||
IndexUrl: indexUrl,
|
IndexUrl: indexUrl,
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ func (this *ConfigService) InitGlobalConfigs() bool {
|
|||||||
this.adminUserId = userInfo.UserId.Hex()
|
this.adminUserId = userInfo.UserId.Hex()
|
||||||
|
|
||||||
configs := []info.Config{}
|
configs := []info.Config{}
|
||||||
db.ListByQ(db.Configs, bson.M{"UserId": userInfo.UserId}, &configs)
|
// db.ListByQ(db.Configs, bson.M{"UserId": userInfo.UserId}, &configs)
|
||||||
|
db.ListByQ(db.Configs, bson.M{}, &configs)
|
||||||
|
|
||||||
for _, config := range configs {
|
for _, config := range configs {
|
||||||
if config.IsArr {
|
if config.IsArr {
|
||||||
@@ -67,10 +68,20 @@ func (this *ConfigService) InitGlobalConfigs() bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// site URL
|
||||||
|
if s, ok := this.GlobalStringConfigs["siteUrl"]; !ok || s != "" {
|
||||||
|
this.GlobalStringConfigs["siteUrl"] = this.siteUrl
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *ConfigService) GetSiteUrl() string {
|
func (this *ConfigService) GetSiteUrl() string {
|
||||||
|
s := this.GetGlobalStringConfig("siteUrl")
|
||||||
|
if s != "" {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
return this.siteUrl
|
return this.siteUrl
|
||||||
}
|
}
|
||||||
func (this *ConfigService) GetAdminUsername() string {
|
func (this *ConfigService) GetAdminUsername() string {
|
||||||
@@ -86,7 +97,7 @@ func (this *ConfigService) updateGlobalConfig(userId, key string, value interfac
|
|||||||
if _, ok := this.GlobalAllConfigs[key]; !ok {
|
if _, ok := this.GlobalAllConfigs[key]; !ok {
|
||||||
// 需要添加
|
// 需要添加
|
||||||
config := info.Config{ConfigId: bson.NewObjectId(),
|
config := info.Config{ConfigId: bson.NewObjectId(),
|
||||||
UserId: bson.ObjectIdHex(userId),
|
UserId: bson.ObjectIdHex(userId), // 没用
|
||||||
Key: key,
|
Key: key,
|
||||||
IsArr: isArr,
|
IsArr: isArr,
|
||||||
IsMap: isMap,
|
IsMap: isMap,
|
||||||
@@ -131,7 +142,8 @@ func (this *ConfigService) updateGlobalConfig(userId, key string, value interfac
|
|||||||
i["ValueStr"] = v
|
i["ValueStr"] = v
|
||||||
this.GlobalStringConfigs[key] = v
|
this.GlobalStringConfigs[key] = v
|
||||||
}
|
}
|
||||||
return db.UpdateByQMap(db.Configs, bson.M{"UserId": bson.ObjectIdHex(userId), "Key": key}, i)
|
// return db.UpdateByQMap(db.Configs, bson.M{"UserId": bson.ObjectIdHex(userId), "Key": key}, i)
|
||||||
|
return db.UpdateByQMap(db.Configs, bson.M{"Key": key}, i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -498,42 +510,25 @@ func (this *ConfigService) GetDefaultDomain() string {
|
|||||||
return defaultDomain
|
return defaultDomain
|
||||||
}
|
}
|
||||||
|
|
||||||
// 包含http://
|
|
||||||
func (this *ConfigService) GetDefaultUrl() string {
|
|
||||||
return schema + defaultDomain
|
|
||||||
}
|
|
||||||
|
|
||||||
// note
|
// note
|
||||||
func (this *ConfigService) GetNoteDomain() string {
|
func (this *ConfigService) GetNoteDomain() string {
|
||||||
subDomain := this.GetGlobalStringConfig("noteSubDomain")
|
return "/note"
|
||||||
if subDomain != "" {
|
|
||||||
return subDomain + port
|
|
||||||
}
|
|
||||||
return this.GetDefaultDomain() + "/note"
|
|
||||||
}
|
}
|
||||||
func (this *ConfigService) GetNoteUrl() string {
|
func (this *ConfigService) GetNoteUrl() string {
|
||||||
return schema + this.GetNoteDomain()
|
return this.GetNoteDomain()
|
||||||
}
|
}
|
||||||
|
|
||||||
// blog
|
// blog
|
||||||
func (this *ConfigService) GetBlogDomain() string {
|
func (this *ConfigService) GetBlogDomain() string {
|
||||||
subDomain := this.GetGlobalStringConfig("blogSubDomain")
|
return "/blog"
|
||||||
if subDomain != "" {
|
|
||||||
return subDomain + port
|
|
||||||
}
|
|
||||||
return this.GetDefaultDomain() + "/blog"
|
|
||||||
}
|
}
|
||||||
func (this *ConfigService) GetBlogUrl() string {
|
func (this *ConfigService) GetBlogUrl() string {
|
||||||
return schema + this.GetBlogDomain()
|
return this.GetBlogDomain()
|
||||||
}
|
}
|
||||||
|
|
||||||
// lea
|
// lea
|
||||||
func (this *ConfigService) GetLeaDomain() string {
|
func (this *ConfigService) GetLeaDomain() string {
|
||||||
subDomain := this.GetGlobalStringConfig("leaSubDomain")
|
return "/lea"
|
||||||
if subDomain != "" {
|
|
||||||
return subDomain + port
|
|
||||||
}
|
|
||||||
return this.GetDefaultDomain() + "/lea"
|
|
||||||
}
|
}
|
||||||
func (this *ConfigService) GetLeaUrl() string {
|
func (this *ConfigService) GetLeaUrl() string {
|
||||||
return schema + this.GetLeaDomain()
|
return schema + this.GetLeaDomain()
|
||||||
@@ -611,5 +606,5 @@ func (this *ConfigService) HomePageIsAdminsBlog() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *ConfigService) GetVersion() string {
|
func (this *ConfigService) GetVersion() string {
|
||||||
return "1.4.2"
|
return "2.2"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"net"
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/leanote/leanote/app/db"
|
"github.com/leanote/leanote/app/db"
|
||||||
@@ -29,12 +31,74 @@ var host = ""
|
|||||||
var emailPort = ""
|
var emailPort = ""
|
||||||
var username = ""
|
var username = ""
|
||||||
var password = ""
|
var password = ""
|
||||||
|
var ssl = false
|
||||||
|
|
||||||
func InitEmailFromDb() {
|
func InitEmailFromDb() {
|
||||||
host = configService.GetGlobalStringConfig("emailHost")
|
host = configService.GetGlobalStringConfig("emailHost")
|
||||||
emailPort = configService.GetGlobalStringConfig("emailPort")
|
emailPort = configService.GetGlobalStringConfig("emailPort")
|
||||||
username = configService.GetGlobalStringConfig("emailUsername")
|
username = configService.GetGlobalStringConfig("emailUsername")
|
||||||
password = configService.GetGlobalStringConfig("emailPassword")
|
password = configService.GetGlobalStringConfig("emailPassword")
|
||||||
|
if configService.GetGlobalStringConfig("emailSSL") == "1" {
|
||||||
|
ssl = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//return a smtp client
|
||||||
|
func dial(addr string) (*smtp.Client, error) {
|
||||||
|
conn, err := tls.Dial("tcp", addr, nil)
|
||||||
|
if err != nil {
|
||||||
|
LogW("Dialing Error:", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
//分解主机端口字符串
|
||||||
|
host, _, _ := net.SplitHostPort(addr)
|
||||||
|
return smtp.NewClient(conn, host)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendEmailWithSSL (auth smtp.Auth, to []string, msg []byte) (err error) {
|
||||||
|
//create smtp client
|
||||||
|
c, err := dial(host + ":" + emailPort)
|
||||||
|
if err != nil {
|
||||||
|
LogW("Create smpt client error:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer c.Close()
|
||||||
|
|
||||||
|
if auth != nil {
|
||||||
|
if ok, _ := c.Extension("AUTH"); ok {
|
||||||
|
if err = c.Auth(auth); err != nil {
|
||||||
|
LogW("Error during AUTH", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = c.Mail(username); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, addr := range to {
|
||||||
|
if err = c.Rcpt(addr); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w, err := c.Data()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = w.Write(msg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = w.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Quit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *EmailService) SendEmail(to, subject, body string) (ok bool, e string) {
|
func (this *EmailService) SendEmail(to, subject, body string) (ok bool, e string) {
|
||||||
@@ -57,7 +121,14 @@ func (this *EmailService) SendEmail(to, subject, body string) (ok bool, e string
|
|||||||
|
|
||||||
msg := []byte("To: " + to + "\r\nFrom: " + username + "<" + username + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
|
msg := []byte("To: " + to + "\r\nFrom: " + username + "<" + username + ">\r\nSubject: " + subject + "\r\n" + content_type + "\r\n\r\n" + body)
|
||||||
send_to := strings.Split(to, ";")
|
send_to := strings.Split(to, ";")
|
||||||
err := smtp.SendMail(host+":"+emailPort, auth, username, send_to, msg)
|
|
||||||
|
var err error
|
||||||
|
if ssl {
|
||||||
|
err = SendEmailWithSSL(auth, send_to, msg)
|
||||||
|
} else {
|
||||||
|
Log("no ssl")
|
||||||
|
err = smtp.SendMail(host + ":" + emailPort, auth, username, send_to, msg)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e = fmt.Sprint(err)
|
e = fmt.Sprint(err)
|
||||||
|
|||||||
@@ -415,9 +415,15 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 这里不再判断, 因为controller已经判断了, 删除附件会新增, 所以不用判断
|
||||||
if usn > 0 && note.Usn != usn {
|
if usn > 0 && note.Usn != usn {
|
||||||
|
Log("有冲突!!")
|
||||||
|
Log(note.Usn)
|
||||||
|
Log(usn)
|
||||||
return false, "conflict", 0
|
return false, "conflict", 0
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// 是否已自定义
|
// 是否已自定义
|
||||||
if note.IsBlog && note.HasSelfDefined {
|
if note.IsBlog && note.HasSelfDefined {
|
||||||
@@ -438,11 +444,7 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
|
|||||||
afterUsn := userService.IncrUsn(userId)
|
afterUsn := userService.IncrUsn(userId)
|
||||||
needUpdate["Usn"] = afterUsn
|
needUpdate["Usn"] = afterUsn
|
||||||
|
|
||||||
// 添加tag2
|
needRecountTags := false
|
||||||
// TODO 这个tag去掉, 添加tag另外添加, 不要这个
|
|
||||||
if tags, ok := needUpdate["Tags"]; ok {
|
|
||||||
tagService.AddTagsI(userId, tags)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 是否修改了isBlog
|
// 是否修改了isBlog
|
||||||
// 也要修改noteContents的IsBlog
|
// 也要修改noteContents的IsBlog
|
||||||
@@ -455,6 +457,19 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
|
|||||||
if !note.IsBlog {
|
if !note.IsBlog {
|
||||||
needUpdate["PublicTime"] = needUpdate["UpdatedTime"]
|
needUpdate["PublicTime"] = needUpdate["UpdatedTime"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
needRecountTags = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加tag2
|
||||||
|
// TODO 这个tag去掉, 添加tag另外添加, 不要这个
|
||||||
|
if tags, ok := needUpdate["Tags"]; ok {
|
||||||
|
tagService.AddTagsI(userId, tags)
|
||||||
|
|
||||||
|
// 如果是博客, 标签改了, 那么重新计算
|
||||||
|
if note.IsBlog {
|
||||||
|
needRecountTags = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,6 +478,13 @@ func (this *NoteService) UpdateNote(updatedUserId, noteId string, needUpdate bso
|
|||||||
return ok, "", 0
|
return ok, "", 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if needRecountTags {
|
||||||
|
// 重新计算tags
|
||||||
|
go (func() {
|
||||||
|
blogService.ReCountBlogTags(userId)
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
|
||||||
// 重新获取之
|
// 重新获取之
|
||||||
note = this.GetNoteById(noteId)
|
note = this.GetNoteById(noteId)
|
||||||
|
|
||||||
@@ -1001,6 +1023,8 @@ func (this *NoteService) FixContentBad(content string, isMarkdown bool) string {
|
|||||||
return content
|
return content
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 得到笔记的内容, 此时将笔记内的链接转成标准的Leanote Url
|
||||||
|
// 将笔记的图片, 附件链接转换成 site.url/file/getImage?fileId=xxx, site.url/file/getAttach?fileId=xxxx
|
||||||
// 性能更好, 5倍的差距
|
// 性能更好, 5倍的差距
|
||||||
func (this *NoteService) FixContent(content string, isMarkdown bool) string {
|
func (this *NoteService) FixContent(content string, isMarkdown bool) string {
|
||||||
baseUrl := configService.GetSiteUrl()
|
baseUrl := configService.GetSiteUrl()
|
||||||
@@ -1013,12 +1037,19 @@ func (this *NoteService) FixContent(content string, isMarkdown bool) string {
|
|||||||
} else {
|
} else {
|
||||||
baseUrlPattern = strings.Replace(baseUrl, "http://", "https*://", 1)
|
baseUrlPattern = strings.Replace(baseUrl, "http://", "https*://", 1)
|
||||||
}
|
}
|
||||||
|
baseUrlPattern = "(?:" + baseUrlPattern + ")*"
|
||||||
|
|
||||||
|
Log(baseUrlPattern)
|
||||||
|
|
||||||
patterns := []map[string]string{
|
patterns := []map[string]string{
|
||||||
|
map[string]string{"src": "src", "middle": "/api/file/getImage", "param": "fileId", "to": "getImage?fileId="},
|
||||||
map[string]string{"src": "src", "middle": "/file/outputImage", "param": "fileId", "to": "getImage?fileId="},
|
map[string]string{"src": "src", "middle": "/file/outputImage", "param": "fileId", "to": "getImage?fileId="},
|
||||||
|
|
||||||
map[string]string{"src": "href", "middle": "/attach/download", "param": "attachId", "to": "getAttach?fileId="},
|
map[string]string{"src": "href", "middle": "/attach/download", "param": "attachId", "to": "getAttach?fileId="},
|
||||||
|
map[string]string{"src": "href", "middle": "/api/file/getAtach", "param": "fileId", "to": "getAttach?fileId="},
|
||||||
|
|
||||||
// 该链接已失效, 不再支持
|
// 该链接已失效, 不再支持
|
||||||
map[string]string{"src": "href", "middle": "/attach/downloadAll", "param": "noteId", "to": "getAllAttachs?noteId="},
|
// map[string]string{"src": "href", "middle": "/attach/downloadAll", "param": "noteId", "to": "getAllAttachs?noteId="},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, eachPattern := range patterns {
|
for _, eachPattern := range patterns {
|
||||||
@@ -1040,6 +1071,8 @@ func (this *NoteService) FixContent(content string, isMarkdown bool) string {
|
|||||||
reg2, _ = regexp.Compile("<a(?:[^>]+?)(" + eachPattern["src"] + `=['"]*` + baseUrlPattern + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})["']*)[^>]*>`)
|
reg2, _ = regexp.Compile("<a(?:[^>]+?)(" + eachPattern["src"] + `=['"]*` + baseUrlPattern + eachPattern["middle"] + `\?` + eachPattern["param"] + `=([a-z0-9A-Z]{24})["']*)[^>]*>`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log(reg2)
|
||||||
|
|
||||||
content = reg.ReplaceAllStringFunc(content, func(str string) string {
|
content = reg.ReplaceAllStringFunc(content, func(str string) string {
|
||||||
// str=这样的
|
// str=这样的
|
||||||
// <img src="http://localhost:9000/file/outputImage?fileId=563d706e99c37b48e0000001" alt="" data-mce-src="http://localhost:9000/file/outputImage?fileId=563d706e99c37b48e0000002">
|
// <img src="http://localhost:9000/file/outputImage?fileId=563d706e99c37b48e0000001" alt="" data-mce-src="http://localhost:9000/file/outputImage?fileId=563d706e99c37b48e0000002">
|
||||||
|
|||||||
@@ -264,8 +264,22 @@ func (this *ThemeService) GetDefaultThemes() (themes []info.Theme) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func validateFilename(filename string) bool {
|
||||||
|
// 防止用"../../来获取其它文件"
|
||||||
|
if (strings.Contains(filename, "..")) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 得到模板内容
|
// 得到模板内容
|
||||||
func (this *ThemeService) GetTplContent(userId, themeId, filename string) string {
|
func (this *ThemeService) GetTplContent(userId, themeId, filename string) string {
|
||||||
|
if (!validateFilename(filename)) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
path := this.GetThemeAbsolutePath(userId, themeId) + "/" + filename
|
path := this.GetThemeAbsolutePath(userId, themeId) + "/" + filename
|
||||||
return GetFileStrContent(path)
|
return GetFileStrContent(path)
|
||||||
}
|
}
|
||||||
@@ -290,6 +304,10 @@ func (this *ThemeService) GetThemePath(userId, themeId string) string {
|
|||||||
|
|
||||||
// 更新模板内容
|
// 更新模板内容
|
||||||
func (this *ThemeService) UpdateTplContent(userId, themeId, filename, content string) (ok bool, msg string) {
|
func (this *ThemeService) UpdateTplContent(userId, themeId, filename, content string) (ok bool, msg string) {
|
||||||
|
if (!validateFilename(filename)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
basePath := this.GetThemeAbsolutePath(userId, themeId)
|
basePath := this.GetThemeAbsolutePath(userId, themeId)
|
||||||
path := basePath + "/" + filename
|
path := basePath + "/" + filename
|
||||||
if strings.Contains(filename, ".html") {
|
if strings.Contains(filename, ".html") {
|
||||||
@@ -326,6 +344,10 @@ func (this *ThemeService) UpdateTplContent(userId, themeId, filename, content st
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *ThemeService) DeleteTpl(userId, themeId, filename string) (ok bool) {
|
func (this *ThemeService) DeleteTpl(userId, themeId, filename string) (ok bool) {
|
||||||
|
if (!validateFilename(filename)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
path := this.GetThemeAbsolutePath(userId, themeId) + "/" + filename
|
path := this.GetThemeAbsolutePath(userId, themeId) + "/" + filename
|
||||||
ok = DeleteFile(path)
|
ok = DeleteFile(path)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ func (this *UserService) setUserLogo(user *info.User) {
|
|||||||
}
|
}
|
||||||
if user.Logo != "" && !strings.HasPrefix(user.Logo, "http") {
|
if user.Logo != "" && !strings.HasPrefix(user.Logo, "http") {
|
||||||
user.Logo = strings.Trim(user.Logo, "/")
|
user.Logo = strings.Trim(user.Logo, "/")
|
||||||
user.Logo = configService.GetSiteUrl() + "/" + user.Logo
|
user.Logo = "/" + user.Logo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/revel/revel"
|
||||||
|
"github.com/leanote/leanote/app/db"
|
||||||
|
"testing"
|
||||||
|
// . "github.com/leanote/leanote/app/lea"
|
||||||
|
"github.com/leanote/leanote/app/service"
|
||||||
|
// "gopkg.in/mgo.v2"
|
||||||
|
// "fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
revel.Init("dev", "github.com/leanote/leanote", "/Users/life/Documents/Go/package_base/src")
|
||||||
|
db.Init("mongodb://localhost:27017/leanote", "leanote")
|
||||||
|
service.InitService()
|
||||||
|
service.ConfigS.InitGlobalConfigs()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试登录
|
||||||
|
func TestSendMail(t *testing.T) {
|
||||||
|
ok, err := service.EmailS.SendEmail("life@leanote.com", "你好", "你好吗")
|
||||||
|
t.Log(ok)
|
||||||
|
t.Log(err)
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/leanote/leanote/app/db"
|
||||||
|
"github.com/revel/revel"
|
||||||
|
"testing"
|
||||||
|
// . "github.com/leanote/leanote/app/lea"
|
||||||
|
"github.com/leanote/leanote/app/service"
|
||||||
|
// "regexp"
|
||||||
|
// "gopkg.in/mgo.v2"
|
||||||
|
// "fmt"
|
||||||
|
// "strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// 可在server端调试
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
revel.Init("dev", "github.com/leanote/leanote", "/Users/life/Documents/Go/package_base/src")
|
||||||
|
db.Init("mongodb://localhost:27017/leanote", "leanote")
|
||||||
|
service.InitService()
|
||||||
|
service.ConfigS.InitGlobalConfigs()
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestApiFixNoteContent2(t *testing.T) {
|
||||||
|
note2 := service.NoteS.GetNote("585df83771c1b17e8a000000", "585df81199c37b6176000004")
|
||||||
|
note := service.NoteS.GetNoteContent("585df83771c1b17e8a000000", "585df81199c37b6176000004")
|
||||||
|
contentFixed := service.NoteS.FixContent(note.Content, false)
|
||||||
|
t.Log(note2.Title)
|
||||||
|
t.Log(note.Content)
|
||||||
|
t.Log(contentFixed)
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package tests
|
||||||
|
|
||||||
|
import (
|
||||||
|
// "github.com/leanote/leanote/app/db"
|
||||||
|
"testing"
|
||||||
|
// . "github.com/leanote/leanote/app/lea"
|
||||||
|
// "github.com/leanote/leanote/app/service"
|
||||||
|
// "gopkg.in/mgo.v2"
|
||||||
|
// "fmt"
|
||||||
|
"regexp"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
// 测试登录
|
||||||
|
func TestReg(t *testing.T) {
|
||||||
|
a := `<a href="http://localhost:9000/api/file/getAttach?fileId=585e0e9c270a35609300000c" target="_blank" data-mce-href="http://localhost:9000/api/file/getAttach?fileId=585e0e9c270a35609300000c">proxy.go</a>`
|
||||||
|
reg, _ := regexp.Compile(`"https*://[^/]*?/api/file/getAttach\?fileId=585e0e9c270a35609300000c`)
|
||||||
|
|
||||||
|
a2 := reg.ReplaceAllString(a, `"`)
|
||||||
|
t.Log(a2)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -24,6 +24,10 @@
|
|||||||
<label>Password</label>
|
<label>Password</label>
|
||||||
<input type="text" class="form-control" name="emailPassword" value="{{.str.emailPassword}}" placeholder="">
|
<input type="text" class="form-control" name="emailPassword" value="{{.str.emailPassword}}" placeholder="">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label>SSL ?</label>
|
||||||
|
<input type="checkbox" class="form-control" name="emailSSL" {{if .str.emailSSL}}checked="checked"{{end}} value="1">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="panel-footer text-right bg-light lter">
|
<footer class="panel-footer text-right bg-light lter">
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
</h4>
|
</h4>
|
||||||
<ul class="list-group" id="eventsList"></ul>
|
<ul class="list-group" id="eventsList"></ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<section class="panel panel-default">
|
<section class="panel panel-default">
|
||||||
<form>
|
<form>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
</footer>
|
</footer>
|
||||||
</section>
|
</section>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{{template "admin/footer.html" .}}
|
{{template "admin/footer.html" .}}
|
||||||
<script>
|
<script>
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|||||||
@@ -131,6 +131,15 @@
|
|||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="nav lt">
|
<ul class="nav lt">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<a href="/admin/t?t=setting/site_url">
|
||||||
|
<span>
|
||||||
|
Site's URL
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<a href="/admin/t?t=setting/home_page">
|
<a href="/admin/t?t=setting/home_page">
|
||||||
<span>
|
<span>
|
||||||
@@ -216,6 +225,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<!--
|
||||||
<li>
|
<li>
|
||||||
<a href="#">
|
<a href="#">
|
||||||
<i class="fa fa-space-shuttle icon">
|
<i class="fa fa-space-shuttle icon">
|
||||||
@@ -250,5 +260,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
-->
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{{template "admin/top.html" .}}
|
||||||
|
<div class="m-b-md"> <h3 class="m-b-none">Site's URL</h3></div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<form id="add_user_form">
|
||||||
|
<section class="panel panel-default">
|
||||||
|
<div class="panel-body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Site's URL</label>
|
||||||
|
<input type="text" class="form-control" name="siteUrl" value="{{.str.siteUrl}}" placeholder="http://localhost:9000">
|
||||||
|
Please note that if the value isn't blank, it will override the "siteUrl" configuration on app.conf.
|
||||||
|
<br>
|
||||||
|
Site's URL will be used to upload images, find password, and send email...
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="panel-footer text-right bg-light lter">
|
||||||
|
<button type="submit" id="submit" class="btn btn-success btn-s-xs">Submit</button>
|
||||||
|
</footer>
|
||||||
|
</section>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{template "admin/footer.html" .}}
|
||||||
|
<script src="/public/admin/js/jquery-validation-1.13.0/jquery.validate.js"></script>
|
||||||
|
<script>
|
||||||
|
$(function() {
|
||||||
|
init_validator("#add_user_form");
|
||||||
|
$("#submit").click(function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
var t = this;
|
||||||
|
if($("#add_user_form").valid()) {
|
||||||
|
$(t).button('loading');
|
||||||
|
ajaxPost("/adminSetting/doSiteUrl", getFormJsonData("add_user_form"), function(ret){
|
||||||
|
$(t).button('reset');
|
||||||
|
if(!ret.Ok) {
|
||||||
|
art.alert(ret.Msg);
|
||||||
|
} else {
|
||||||
|
art.tips("Success");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{{template "admin/end.html" .}}
|
||||||
+12
-19
@@ -16,37 +16,30 @@
|
|||||||
<script src="/public/admin/js/ie/excanvas.js"></script>
|
<script src="/public/admin/js/ie/excanvas.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
</head>
|
</head>
|
||||||
<body class="">
|
<body class="lang-{{$.locale}}">
|
||||||
<section class="vbox">
|
<section class="vbox">
|
||||||
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
||||||
<div class="navbar-header aside-md clearfix" id="logo">
|
|
||||||
<a href="/admin/index" class="navbar-brand" data-toggle="fullscreen"></a>
|
<div class="navbar-header logo-ctn">
|
||||||
<div>Admin</div>
|
<a href="/admin/index" class="navbar-brand clearfix" data-toggle="fullscreen">
|
||||||
|
<span id="logo"></span>
|
||||||
|
<span class="logo-title">Admin</span>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul class="nav navbar-nav navbar-right m-n hidden-xs nav-user">
|
<ul class="nav navbar-nav navbar-right m-n hidden-xs nav-user">
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="http://leanote.com" class="dk" target="_blank">
|
<a href="/" class="dk">
|
||||||
Leanote Home
|
Home
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="https://github.com/leanote/leanote" class="dk" target="_blank">
|
<a href="/note" class="dk">
|
||||||
Leanote Github
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="hidden-xs">
|
|
||||||
<a href="http://lea.leanote.com" class="dk" target="_blank">
|
|
||||||
lea++
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="hidden-xs">
|
|
||||||
<a href="/note" class="dk" target="_blank">
|
|
||||||
My Note
|
My Note
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="/blog" class="dk" target="_blank">
|
<a href="/blog" class="dk">
|
||||||
My Blog
|
My Blog
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -84,7 +77,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<footer class="footer lt hidden-xs b-t b-light" style="min-height: initial;
|
<footer class="footer lt hidden-xs b-t b-light" style="min-height: initial;
|
||||||
padding: 10px 15px;text-align:center;">
|
padding: 10px 15px;text-align:center;">
|
||||||
<a href="http://leanote.com" target="_blank">leanote</a> © 2015
|
© <a href="https://leanote.com" target="_blank">Leanote</a>
|
||||||
<!--
|
<!--
|
||||||
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-default btn-icon">
|
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-default btn-icon">
|
||||||
<i class="fa fa-angle-left text">
|
<i class="fa fa-angle-left text">
|
||||||
|
|||||||
@@ -161,6 +161,6 @@ var UrlPrefix = '{{.siteUrl}}';
|
|||||||
<script src="/public/album/js/main.js"></script>
|
<script src="/public/album/js/main.js"></script>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<script src="/public/album/js/main.all.js"></script>
|
<script src="/public/album/js/main.all.js?i=2"></script>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{{template "blog/header.html" .}}
|
|
||||||
|
|
||||||
<div id="postsContainer">
|
|
||||||
<div id="posts">
|
|
||||||
<div class="each-post">
|
|
||||||
<div class="title">
|
|
||||||
{{msg . "aboutMe"}}
|
|
||||||
</div>
|
|
||||||
<div class="created-time">
|
|
||||||
</div>
|
|
||||||
<div class="desc">
|
|
||||||
{{.userBlog.AboutMe | raw}}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{template "blog/footer.html" .}}
|
|
||||||
@@ -1,204 +0,0 @@
|
|||||||
<!-- 赞 -->
|
|
||||||
<div class="entry-controls clearfix">
|
|
||||||
<div class="vote-section-wrapper clearfix">
|
|
||||||
<button class="btn btn-default btn-zan" id="likeBtn"><i class="fa fa-thumbs-o-up"></i> <span id="likeNum">{{.blog.LikeNum}}</span> {{msg . "like"}}</button>
|
|
||||||
<span class="control-item read-counts"><i class="fa fa-eye"></i> {{if .blog.ReadNum}}{{.blog.ReadNum}}{{else}}1{{end}} {{msg . "viewers"}}</span>
|
|
||||||
</div>
|
|
||||||
<div class="right-section">
|
|
||||||
<div id="weixinQRCode"></div>
|
|
||||||
<!-- google+
|
|
||||||
<g:plusone size=”medium”></g:plusone>
|
|
||||||
-->
|
|
||||||
<button class="btn btn-share btn-default btn-weibo"><i class="fa fa-weibo"></i> {{msg . "sinaWeibo"}}</button>
|
|
||||||
<button class="btn btn-share btn-default btn-weixin"><i class="fa fa-wechat"></i> {{msg . "weixin"}}</button>
|
|
||||||
<div class="dropdown" style="display: inline-block; cursor: pointer; padding: 5px 10px;">
|
|
||||||
<!-- open -->
|
|
||||||
<div class="dropdown-toggle" data-hover="dropdown" data-toggle="dropdown">
|
|
||||||
<i class="fa fa-share-square-o"></i>
|
|
||||||
{{msg . "moreShare"}}
|
|
||||||
</div>
|
|
||||||
<ul class="dropdown-menu" role="menu">
|
|
||||||
<li><a href="#" class="btn-share tencent-weibo"><i class="fa fa-tencent-weibo"></i> {{msg . "tencentWeibo"}}</a></li>
|
|
||||||
<li><a href="#" class="btn-share qq"><i class="fa fa-qq"></i> {{msg . "qqZone"}}</a></li>
|
|
||||||
<li><a href="#" class="btn-share renren"><i class="fa fa-renren"></i> {{msg . "renren"}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!-- 举报 -->
|
|
||||||
{{if eq .locale "zh"}}
|
|
||||||
<div style="display: inline-block">
|
|
||||||
<a id="reportBtn"><i class="fa fa-flag-o"></i> {{msg . "report"}}</a>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
<div class="voters clearfix" id="likers">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type="text/x-jsrender" id="tLikers">
|
|
||||||
[[for users]]
|
|
||||||
<a id="liker_[[:UserId]]" href="[[:~root.blogUrl]]/[[:Username]]" target="_blank" class="voter">
|
|
||||||
[[if Logo]]
|
|
||||||
<img alt="avatar" class="avatar-small" src="[[:Logo]]">
|
|
||||||
[[else]]
|
|
||||||
<img alt="avatar" class="avatar-small" src="/images/blog/default_avatar.png">
|
|
||||||
[[/if]]
|
|
||||||
</a>
|
|
||||||
[[/for]]
|
|
||||||
</script>
|
|
||||||
{{if and .userBlog.CanComment (not (eq .userBlog.CommentType "disqus"))}}
|
|
||||||
|
|
||||||
<script type="text/x-jsrender" id="tComments">
|
|
||||||
[[for comments]]
|
|
||||||
<li class="comment-item">
|
|
||||||
<!-- 头像 -->
|
|
||||||
<a ui-hovercard="" target="_blank" class="avatar-link" title="[[:UserInfo.Username]]" href="[[:~root.blogUrl]]/[[:UserInfo.Username]]">
|
|
||||||
<img class="avatar" src="[[:UserInfo.Logo]]">
|
|
||||||
</a>
|
|
||||||
<!-- 评论 -->
|
|
||||||
<div class="comment-body">
|
|
||||||
<div class="comment-hd">
|
|
||||||
<a href="[[:~root.blogUrl]]/[[:UserInfo.Username]]" target="_blank" >[[:UserInfo.Username]]</a>
|
|
||||||
[[if IsAuthorComment]]
|
|
||||||
<span>({{msg . "author"}})</span>
|
|
||||||
[[/if]]
|
|
||||||
|
|
||||||
<!-- 回复其它人 -->
|
|
||||||
[[if ToUserInfo]]
|
|
||||||
<span class="in-reply-to">
|
|
||||||
{{rawMsg . "reply"}}
|
|
||||||
<a href="[[:~root.blogUrl]]/[[:ToUserInfo.Username]]">[[:ToUserInfo.Username]]</a>
|
|
||||||
</span>
|
|
||||||
[[if ToUserIsAuthor]]
|
|
||||||
<span>({{msg . "author"}})</span>
|
|
||||||
[[/if]]
|
|
||||||
[[/if]]
|
|
||||||
</div>
|
|
||||||
<div class="comment-content ng-binding" ng-bind-html="comment.content">
|
|
||||||
[[html:Content]]
|
|
||||||
</div>
|
|
||||||
<div class="comment-ft clearfix" data-comment-id="[[:CommentId]]" >
|
|
||||||
<span title="" ui-time="" class="date">[[:PublishDate]] </span>
|
|
||||||
<span class="like-num [[if !LikeNum]]hide[[/if]]" title="[[:LikeNum]] {{rawMsg . "like"}}"><span class="like-num-i">[[:LikeNum]]</span> {{rawMsg . "like"}}</span></span>
|
|
||||||
|
|
||||||
[[if ~root.visitUserInfo.UserId]]
|
|
||||||
[[if IsMyNote && !IsMyComment]]
|
|
||||||
<a href="javascript:;" class="comment-trash op-link "><i class="fa fa-trash"></i> {{rawMsg . "delete"}}</a>
|
|
||||||
[[/if]]
|
|
||||||
[[if !IsMyComment]]
|
|
||||||
<a href="javascript:;" class="comment-reply op-link ">
|
|
||||||
<i class="fa fa-reply"></i>
|
|
||||||
{{rawMsg . "reply"}}
|
|
||||||
</a>
|
|
||||||
<a href="javascript:;" class="comment-like op-link"><i class="fa fa-thumbs-o-up"></i> <span class="like-text">[[if IsILikeIt]]{{rawMsg . "unlike"}}[[else]]{{rawMsg . "like"}}[[/if]]</span></a>
|
|
||||||
{{if eq .locale "zh"}}
|
|
||||||
<a href="javascript:;" class="comment-report op-link "><i class="fa fa-flag-o"></i> {{rawMsg . "report"}}</a>
|
|
||||||
{{end}}
|
|
||||||
[[else]]
|
|
||||||
<a href="javascript:;" class="comment-trash op-link "><i class="fa fa-trash"></i> {{rawMsg . "delete"}}</a>
|
|
||||||
[[/if]]
|
|
||||||
[[/if]]
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 回复该评论 -->
|
|
||||||
[[if ~root.visitUserInfo.UserId]]
|
|
||||||
<form class="comment-form comment-box-ft">
|
|
||||||
<div class="clearfix">
|
|
||||||
<div class="avatar-wrap">
|
|
||||||
<img class="avatar" src="[[:~root.visitUserInfo.Logo]]">
|
|
||||||
</div>
|
|
||||||
<div class="editor-wrap">
|
|
||||||
<textarea class="editable" id="commentContent" name="commentContent" placeholder="{{rawMsg . "reply"}}"></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="command clearfix" style="display: block;">
|
|
||||||
<button class="reply-comment-btn save btn btn-primary" data-comment-id="[[:CommentId]]">{{rawMsg . "comment"}}</button>
|
|
||||||
<a class="cancel reply-cancel btn-link">{{rawMsg . "cancel"}}</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
[[/if]]
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
[[/for]]
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- 评论 -->
|
|
||||||
<div class="comment-box hide">
|
|
||||||
{{if .visitUserInfo.UserId}}
|
|
||||||
<form class="comment-form comment-box-ft" id="commentForm">
|
|
||||||
<div class="clearfix">
|
|
||||||
<div class="avatar-wrap">
|
|
||||||
<img class="avatar" src="{{.visitUserInfo.Logo}}">
|
|
||||||
</div>
|
|
||||||
<div class="editor-wrap">
|
|
||||||
<textarea class="editable" id="commentContent" name="commentContent" placeholder="{{msg . "comment"}}" style="height: 100px;"></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="command clearfix" style="display: block;">
|
|
||||||
<button id="commentBtn" class="reply-comment-btn save btn btn-primary">{{msg . "comment"}}</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
{{else}}
|
|
||||||
<div class="needLogin">
|
|
||||||
<a onclick="goLogin()">{{msg . "signIn"}}</a>, {{msg . "submitComment"}}.
|
|
||||||
<br />
|
|
||||||
没有帐号? <a onclick="goRegister()">{{msg . "signUp"}}</a>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
<div class="box-header">
|
|
||||||
<span class="counter">
|
|
||||||
<i class="icon icon-comment"></i><span id="commentNum">{{.blog.CommentNum}}</span> {{msg . "comments"}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<ul id="comments">
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="moreComments">
|
|
||||||
<div class="hide comments-more">
|
|
||||||
<a>More...</a>
|
|
||||||
</div>
|
|
||||||
<div class="comments-loading">
|
|
||||||
<img src="/images/loading-32.gif" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{if eq .locale "zh"}}
|
|
||||||
<div id="reportMsg" class="hide">
|
|
||||||
<form class="report-form" name="reportForm">
|
|
||||||
<ul class="options clearfix">
|
|
||||||
<li><label><input required="" value="{{msg . "reportReason1"}}" name="reason" type="radio">{{msg . "reportReason1"}}</label></li>
|
|
||||||
<li><label><input required="" value="{{msg . "reportReason2"}}" name="reason" type="radio">{{msg . "reportReason2"}}</label></li>
|
|
||||||
<li><label><input required="" value="{{msg . "reportReason3"}}" name="reason" type="radio">{{msg . "reportReason3"}}</label></li>
|
|
||||||
<li><label><input required="" value="{{msg . "reportReason4"}}" name="reason" type="radio">{{msg . "reportReason4"}}</label></li>
|
|
||||||
<li><label><input required="" value="" name="reason" type="radio">{{msg . "other"}}</label></li>
|
|
||||||
</ul>
|
|
||||||
<p class="input-container" style="display: none">
|
|
||||||
<input placeholder="{{msg . "reportReason"}}" type="text" name="detail" class="form-control reason-text basic-input" />
|
|
||||||
</p>
|
|
||||||
<p class="footnote"></p>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if and .userBlog.CanComment (eq .userBlog.CommentType "disqus")}}
|
|
||||||
|
|
||||||
<div id="disqus_thread"></div>
|
|
||||||
<!-- comment -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
|
|
||||||
var disqus_shortname = '{{.userBlog.DisqusId}}'; // required: replace example with your forum shortname
|
|
||||||
var disqus_identifier = '{{.userBlog.UserId.Hex}}/{{.blog.NoteId.Hex}}/{{.blog.Title}}'; // 博客链接
|
|
||||||
|
|
||||||
/* * * DON'T EDIT BELOW THIS LINE * * */
|
|
||||||
(function() {
|
|
||||||
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
|
|
||||||
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
|
||||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
|
||||||
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
|
|
||||||
{{end}}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
<div id="footerContainer">
|
|
||||||
{{$userId := .userBlog.UserId.Hex}}
|
|
||||||
<div class="container" id="footer">
|
|
||||||
<div class="col-md-4">
|
|
||||||
<h3>{{msg . "blogNavs"}}</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="{{$.blogUrl}}/{{$.userInfo.Username}}">{{msg . "home"}}</a></li>
|
|
||||||
{{range .notebooks}}
|
|
||||||
<li>
|
|
||||||
<a href="{{$.cateUrl}}/{{.NotebookId.Hex}}">{{.Title}}</a>
|
|
||||||
</li>
|
|
||||||
{{end}}
|
|
||||||
<li><a href="{{$.aboutMeUrl}}">{{msg . "aboutMe"}}</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<h3>{{msg . "latestPosts"}}</h3>
|
|
||||||
<ul>
|
|
||||||
{{range .recentBlogs}}
|
|
||||||
<li title="{{.Title}}"><a href="{{$.blogUrl}}/view/{{.NoteId.Hex}}/">{{.Title}}</a></li>
|
|
||||||
{{end}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<h3>{{msg . "quickLinks"}}</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="{{$.noteUrl}}">{{msg . "myNote"}}</a></li>
|
|
||||||
<li><a href="{{$.siteUrl}}/login">leanote {{msg . "login"}}</a></li>
|
|
||||||
<li><a href="http://leanote.com" target="_blank">leanote {{msg . "home"}}</a></li>
|
|
||||||
<li><a href="http://lea.leanote.com" target="_blank">lea++</a></li>
|
|
||||||
<li><a href="http://bbs.leanote.com" target="_blank">leanote {{msg . "community"}}</a></li>
|
|
||||||
<li><a href="https://github.com/leanote/leanote" target="_blank">leanote github</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script src="{{$.siteUrl}}/js/jquery-1.9.0.min.js"></script>
|
|
||||||
<script src="{{$.siteUrl}}/js/bootstrap-min.js"></script>
|
|
||||||
<script src="{{$.siteUrl}}/js/bootstrap-hover-dropdown.js"></script>
|
|
||||||
<script src="{{$.siteUrl}}/js/i18n/blog.{{.locale}}.js"></script>
|
|
||||||
{{if not .isMe}}
|
|
||||||
<script src="{{$.siteUrl}}/blog/isMe.js?userId={{.userBlog.UserId.Hex}}"></script>
|
|
||||||
{{end}}
|
|
||||||
<script>
|
|
||||||
// 搜索
|
|
||||||
function search(e) {
|
|
||||||
var key = $("#searchInput").val();
|
|
||||||
if(!key) {
|
|
||||||
location.href = "{{$.searchUrl}}";
|
|
||||||
} else {
|
|
||||||
var tpl = '<form action="{{$.searchUrl}}" method="get">';
|
|
||||||
tpl += '<input name="key" value="' + key + '" />';
|
|
||||||
tpl += "</form";
|
|
||||||
$(tpl).submit();
|
|
||||||
}
|
|
||||||
}␍</script>
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
<!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>
|
|
||||||
<!-- Bootstrap core CSS -->
|
|
||||||
<link href="{{.siteUrl}}/css/bootstrap.css" rel="stylesheet">
|
|
||||||
<!-- 字体必须同一域 -->
|
|
||||||
{{if .set}}
|
|
||||||
<link href="{{.siteUrl}}/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
|
||||||
{{else}}
|
|
||||||
<link href="{{$.staticUrl}}/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
|
||||||
{{end}}
|
|
||||||
<link id="styleLink" href="{{.siteUrl}}/css/blog/{{if .userBlog.Style}}{{.userBlog.Style}}{{else}}blog_default{{end}}.css" rel="stylesheet">
|
|
||||||
<link href="{{.siteUrl}}/css/blog/comment.css" rel="stylesheet">
|
|
||||||
<script>
|
|
||||||
function log(o) {
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="headerAndNav" >
|
|
||||||
<div id="headerContainer" class="container">
|
|
||||||
<!-- 头部可放博客名, 导航 -->
|
|
||||||
<div id="header">
|
|
||||||
{{$userId := .userBlog.UserId.Hex}} <!-- 可不要了 -->
|
|
||||||
{{$username := .userInfo.Username}}
|
|
||||||
<h1>
|
|
||||||
<a href="{{.indexUrl}}" id="logo">
|
|
||||||
{{if .userBlog.Logo}}
|
|
||||||
<img src="{{.userBlog.Logo}}" title="{{.userBlog.Title}}"/>
|
|
||||||
{{else}}
|
|
||||||
{{.userBlog.Title | raw}}
|
|
||||||
{{end}}
|
|
||||||
</a>
|
|
||||||
</h1>
|
|
||||||
<div id="blogDesc">
|
|
||||||
{{.userBlog.SubTitle | raw}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Static navbar -->
|
|
||||||
<div class="navbar navbar-default">
|
|
||||||
<div class="container">
|
|
||||||
<div class="navbar-header">
|
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
|
||||||
<span class="sr-only">Toggle navigation</span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</button>
|
|
||||||
<a class="navbar-brand" href="{{.indexUrl}}">
|
|
||||||
{{if .userBlog.Logo}}
|
|
||||||
<img src="{{.userBlog.Logo}}" title="{{.userBlog.Title}}"/>
|
|
||||||
{{else}}
|
|
||||||
{{.userBlog.Title | raw}}
|
|
||||||
{{end}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="navbar-collapse collapse">
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
{{$navNotebookId := .notebookId}}
|
|
||||||
<li class="{{if .index}}active{{end}}"><a href="{{.indexUrl}}">{{msg . "home"}}</a></li>
|
|
||||||
{{range .notebooks}}
|
|
||||||
{{$notebookId := .NotebookId.Hex}}
|
|
||||||
<li class="{{if $navNotebookId}}{{if eq $navNotebookId $notebookId}}active{{else}}{{end}}{{end}}">
|
|
||||||
<a href="{{$.cateUrl}}/{{$notebookId}}"
|
|
||||||
>{{.Title}}</a>
|
|
||||||
</li>
|
|
||||||
{{end}}
|
|
||||||
<li class="{{if .aboutMe}}active{{end}}"><a href="{{.aboutMeUrl}}">{{msg . "aboutMe"}}</a></li>
|
|
||||||
<!-- 同源上传logo -->
|
|
||||||
<li class="is-me {{if .set}}active{{end}} {{if not .isMe}}hide{{end}}" ><a href="{{$.siteUrl}}/blog/set/">{{msg . "blogSet"}}</a></li>
|
|
||||||
<li><a href="{{$.noteUrl}}" class="is-me {{if not .isMe}}hide{{end}}">{{msg . "myNote"}}</a></li>
|
|
||||||
</ul>
|
|
||||||
<form class="navbar-form navbar-right" id="search" onsubmit="search(event);return false;">
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-addon" id="searchIcon" onclick="search(event);"><i class="fa fa-search"></i></span>
|
|
||||||
<input type="text" placeholder="search" id="searchInput" class="form-control" value="{{.key}}">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div><!--/.nav-collapse -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
var UserInfo = {UserId: "{{$userId}}", Email: "{{.userInfo.Email}}", Username: "{{.userInfo.Username}}"};
|
|
||||||
var UserBlogInfo={CanComment: {{.userBlog.CanComment}}, CommentType: "{{.userBlog.CommentType}}"};
|
|
||||||
var indexUrl = "{{$.indexUrl}}";
|
|
||||||
var viewUrl = "{{$.viewUrl}}";
|
|
||||||
var blogUrl = "{{$.blogUrl}}";
|
|
||||||
var staticUrl = "{{$.staticUrl}}"; // blog.leanote.com, life.leanote.com, aaa.com
|
|
||||||
</script>
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
<!-- This file is Depreciated -->
|
|
||||||
|
|
||||||
<link href="/public/mdeditor/editor/google-code-prettify/prettify.css" type="text/css" rel="stylesheet">
|
|
||||||
<script src="/public/mdeditor/editor/google-code-prettify/prettify.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$("pre").addClass("prettyprint linenums");
|
|
||||||
prettyPrint();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<script type="text/javascript" src="/js/syntaxhighlighter/scripts/shCore.js"></script>
|
|
||||||
<link href="/js/syntaxhighlighter/styles/shCore.css" rel="stylesheet" type="text/css" />
|
|
||||||
<link href="/js/syntaxhighlighter/styles/shThemeDefault.css" rel="stylesheet" type="text/css" />
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(function () {
|
|
||||||
var pathPrefix = "/js/syntaxhighlighter/scripts/";
|
|
||||||
var map = {
|
|
||||||
"brush: jscript": "shBrushJScript.js",
|
|
||||||
"brush: c#": "shBrushCSharp.js",
|
|
||||||
"brush: css": "shBrushCss.js",
|
|
||||||
"brush: cpp": "shBrushCpp.js",
|
|
||||||
"brush: java": "shBrushJava.js",
|
|
||||||
"brush: xml": "shBrushXml.js",
|
|
||||||
"brush: php": "shBrushPhp.js",
|
|
||||||
"brush: perl": "shBrushPerl.js",
|
|
||||||
"brush: python": "shBrushPython.js",
|
|
||||||
"brush: ruby": "shBrushRuby.js",
|
|
||||||
"brush: sql": "shBrushSql.js"}
|
|
||||||
var needLoadCount = 0;
|
|
||||||
var alreadyLoadCount = 0;
|
|
||||||
$('pre[class]').each(function() {
|
|
||||||
var brush = $(this).attr("class");
|
|
||||||
var js = map[brush]
|
|
||||||
if (js) {
|
|
||||||
needLoadCount++;
|
|
||||||
map[brush] = null; // 不要重复加载
|
|
||||||
loadJS(pathPrefix + js, function () {
|
|
||||||
alreadyLoadCount++;
|
|
||||||
if (alreadyLoadCount == needLoadCount) {
|
|
||||||
//setTimeout(function() {
|
|
||||||
SyntaxHighlighter.highlight();
|
|
||||||
//}, 500);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function loadJS(url, callback) {
|
|
||||||
$.getScript(url, function() {
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
function loadJS(url, callback, charset) {
|
|
||||||
var script = document.createElement('script');
|
|
||||||
script.onload = script.onreadystatechange = function () {
|
|
||||||
if (script && script.readyState && /^(?!(?:loaded|complete)$)/.test(script.readyState)) return;
|
|
||||||
script.onload = script.onreadystatechange = null;
|
|
||||||
script.src = '';
|
|
||||||
script.parentNode.removeChild(script);
|
|
||||||
script = null;
|
|
||||||
if (callback) callback();
|
|
||||||
};
|
|
||||||
script.charset = charset || document.charset || document.characterSet;
|
|
||||||
script.src = url;
|
|
||||||
try { document.getElementsByTagName("head")[0].appendChild(script); } catch (e) { }
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
</script>
|
|
||||||
-->
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
{{template "blog/header.html" .}}
|
|
||||||
|
|
||||||
<div id="postsContainer">
|
|
||||||
<div class="container">
|
|
||||||
{{if .notebookId}}
|
|
||||||
<h2>{{msg . "blogClass"}} - {{.notebook.Title}}</h2>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
<div id="posts">
|
|
||||||
{{$G := .}}
|
|
||||||
{{range .blogs}}
|
|
||||||
<div class="each-post">
|
|
||||||
<div class="title">
|
|
||||||
<a href="{{$.viewUrl}}/{{.NoteId.Hex}}" title="{{msg $ "fullBlog"}}">
|
|
||||||
{{.Title}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="created-time">
|
|
||||||
<i class="fa fa-bookmark-o"></i>
|
|
||||||
{{if .Tags}}
|
|
||||||
{{blogTags $ .Tags}}
|
|
||||||
{{else}}
|
|
||||||
{{msg $ "noTag"}}
|
|
||||||
{{end}}
|
|
||||||
|
|
|
||||||
<i class="fa fa-calendar"></i> {{msg $ "updatedTime"}} {{.UpdatedTime | datetime}} |
|
|
||||||
<i class="fa fa-calendar"></i> {{msg $ "createdTime"}} {{.CreatedTime | datetime}}
|
|
||||||
</div>
|
|
||||||
<div class="desc">
|
|
||||||
{{.Content | raw}}
|
|
||||||
</div>
|
|
||||||
<a class="more" href="{{$.viewUrl}}/{{.NoteId.Hex}}" title="{{msg $ "fullBlog"}}">{{msg $ "more"}}.</a>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
<!-- 分页 -->
|
|
||||||
<ul class="pager">
|
|
||||||
{{if .notebookId}}
|
|
||||||
{{set $ "pageUrl" (concatStr $.cateUrl "/" .notebookId)}}
|
|
||||||
{{else}}
|
|
||||||
{{set $ "pageUrl" $.indexUrl}}
|
|
||||||
{{end}}
|
|
||||||
{{page $.pageUrl .page .pageSize .count}}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{template "blog/footer.html" .}}
|
|
||||||
{{template "blog/highlight.html"}}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
{{template "blog/header.html" .}}
|
|
||||||
|
|
||||||
<div id="postsContainer">
|
|
||||||
<div class="container">
|
|
||||||
<h2>{{msg . "search"}} - {{.key}} </h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="posts">
|
|
||||||
{{range .blogs}}
|
|
||||||
<div class="each-post">
|
|
||||||
<div class="title">
|
|
||||||
<a href="{{$.viewUrl}}/{{.NoteId.Hex}}" title="{{msg $ "fullBlog"}}">
|
|
||||||
{{.Title}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="created-time">
|
|
||||||
<i class="fa fa-bookmark-o"></i>
|
|
||||||
{{if .Tags}}
|
|
||||||
{{blogTags $ .Tags}}
|
|
||||||
{{else}}
|
|
||||||
{{msg $ "noTag"}}
|
|
||||||
{{end}}
|
|
||||||
|
|
|
||||||
<i class="fa fa-calendar"></i> {{msg $ "updatedTime"}} {{.UpdatedTime | datetime}} |
|
|
||||||
<i class="fa fa-calendar"></i> {{msg $ "createdTime"}} {{.CreatedTime | datetime}}
|
|
||||||
</div>
|
|
||||||
<div class="desc">
|
|
||||||
{{.Content | raw}}
|
|
||||||
</div>
|
|
||||||
<a class="more" href="{{$.viewUrl}}/{{.NoteId.Hex}}" title="{{msg $ "fullBlog"}}">{{msg $ "more"}}</a>
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{if not .blogs }}
|
|
||||||
<div class="each-post">
|
|
||||||
{{msg . "none"}}
|
|
||||||
</div>
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{template "blog/footer.html" .}}
|
|
||||||
{{template "blog/highlight.html"}}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,323 +0,0 @@
|
|||||||
{{template "blog/header.html" .}}
|
|
||||||
|
|
||||||
<!-- set页面不是自定义域名和二级域名页 -->
|
|
||||||
<link rel="stylesheet" href="{{.siteUrl}}/tinymce/skins/custom/skin.min.css" type="text/css">
|
|
||||||
<style>
|
|
||||||
.tab-pane {
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<div id="postsContainer">
|
|
||||||
<div id="posts">
|
|
||||||
<ul id="myTab" class="nav nav-tabs">
|
|
||||||
<li class="active"><a href="#baseInfo" data-toggle="tab">{{msg . "baseInfoSet"}}</a></li>
|
|
||||||
<li class=""><a href="#commentInfo" data-toggle="tab">{{msg . "commentSet"}}</a></li>
|
|
||||||
<li class=""><a href="#styleInfo" data-toggle="tab">{{msg . "themeSet"}}</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<!-- Tab panes -->
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane" id="styleInfo">
|
|
||||||
<form class="form-horizontal" role="form">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="col-sm-2 control-label"></label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<div class="alert alert-success" id="styleMsg" style="display: none; margin-bottom: 3px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="Style" class="col-sm-2 control-label">{{msg . "theme"}}</label>
|
|
||||||
<div class="col-sm-10" style="margin-top: 6px;" id="themeList">
|
|
||||||
<label>
|
|
||||||
<img class="preview" src="{{$.siteUrl}}/images/blog/theme/default.png" />
|
|
||||||
<input type="radio" name="Style"
|
|
||||||
value="blog_default"
|
|
||||||
{{if not .userBlog.Style}}
|
|
||||||
checked="checked"
|
|
||||||
{{else}}
|
|
||||||
{{if eq .userBlog.Style "blog_default"}}
|
|
||||||
checked="checked"
|
|
||||||
{{end}}
|
|
||||||
{{end}}>
|
|
||||||
{{msg . "default"}}
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<img class="preview" src="{{$.siteUrl}}/images/blog/theme/elegent.png" />
|
|
||||||
<input type="radio" name="Style"
|
|
||||||
value="blog_daqi"
|
|
||||||
{{if eq .userBlog.Style "blog_daqi"}}checked="checked"{{end}}>
|
|
||||||
{{msg . "elegant"}}
|
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
<img class="preview" src="{{$.siteUrl}}/images/blog/theme/left_nav_fix.png" />
|
|
||||||
<input type="radio" name="Style"
|
|
||||||
value="blog_left_fixed"
|
|
||||||
{{if eq .userBlog.Style "blog_left_fixed"}}checked="checked"{{end}}>
|
|
||||||
{{msg . "navFixed"}}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
|
||||||
<button class="btn btn-success">{{msg . "save"}}</button>
|
|
||||||
<span class="msg"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="commentInfo">
|
|
||||||
<form class="form-horizontal" role="form">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="col-sm-2 control-label"></label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<div class="alert alert-success" id="commentMsg" style="display: none; margin-bottom: 3px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="subTitle" class="col-sm-2 control-label">{{msg . "chooseComment"}}</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" id="CanComment" name="CanComment"
|
|
||||||
{{if .userBlog.CanComment}}checked="checked"{{end}} > {{msg . "openComment"}}
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<div id="commentSet" {{if not .userBlog.CanComment}}style="display: none"{{end}}>
|
|
||||||
<label>
|
|
||||||
<input type="radio"
|
|
||||||
name="commentType"
|
|
||||||
value="default"
|
|
||||||
{{if or (not .userBlog.CommentType) (eq .userBlog.CommentType "default")}}checked="checked"{{end}} > Default
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<label>
|
|
||||||
<input type="radio" name="commentType" id="disqus"
|
|
||||||
value="disqus"
|
|
||||||
{{if eq .userBlog.CommentType "disqus"}}checked="checked"{{end}} > Disqus
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div id="disqusSet" {{if not (eq .userBlog.CommentType "disqus")}}style="display: none"{{end}}>
|
|
||||||
<label for="DisqusId">Disqus Id</label> <input type="text"
|
|
||||||
class="form-control" style="display: inline; width: 50%"
|
|
||||||
id="DisqusId" name="DisqusId"
|
|
||||||
value="{{if .userBlog.DisqusId}}{{.userBlog.DisqusId}}{{else}}leanote{{end}}">
|
|
||||||
<br />
|
|
||||||
{{msg . "disqusHelp"}}
|
|
||||||
<a target="_blank" href="http://leanote.com/blog/view/52db8463e01c530ef8000001">{{msg . "needHelp"}}</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
|
||||||
<button class="btn btn-success">{{msg . "save"}}</button>
|
|
||||||
<span class="msg"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane active" id="baseInfo">
|
|
||||||
<div class="form-horizontal" role="form" id="userBlogForm">
|
|
||||||
<div class="form-group">
|
|
||||||
<label class="col-sm-2 control-label"></label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<div class="alert alert-success" id="msg"
|
|
||||||
style="display: none; margin-bottom: 3px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="title" class="col-sm-2 control-label">{{msg . "blogName"}}</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<input type="text" class="form-control" id="Title" name="Title"
|
|
||||||
placeholder="eg: leanote's blog"
|
|
||||||
value="{{if .userBlog.Title}}{{.userBlog.Title}}{{else}}{{.userInfo.Email}} 's blog{{end}}">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="logo" class="col-sm-2 control-label">{{msg . "blogLogo"}}</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<input type="hidden" name="Logo" id="Logo"
|
|
||||||
value="{{.userBlog.Logo}}" />
|
|
||||||
<form id="formLogo" action="{{$.siteUrl}}/file/uploadBlogLogo" method="post"
|
|
||||||
enctype="multipart/form-data" target="logoTarget"
|
|
||||||
onsubmit="inProgress()">
|
|
||||||
<input type="file" class="form-control" id="logo2" name="file"
|
|
||||||
onChange='$("#formLogo").submit();' />
|
|
||||||
{{msg . "blogLogoTips"}}
|
|
||||||
<div id="logoImg"
|
|
||||||
{{if .userBlog.Logo }}
|
|
||||||
{{else}}
|
|
||||||
style="display: none"{{end}}
|
|
||||||
>
|
|
||||||
<img src="{{.userBlog.Logo}}" style="height: 40px" /> <a
|
|
||||||
href="#" id="deleteLogo">{{msg . "delete"}}</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<iframe id="logoTarget" name="logoTarget" src="#"
|
|
||||||
style="display: none"></iframe>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="subTitle" class="col-sm-2 control-label">{{msg . "blogDesc"}}</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<input type="text" class="form-control" id="SubTitle"
|
|
||||||
name="SubTitle" value="{{.userBlog.SubTitle}}"
|
|
||||||
placeholder="eg: leanote, Not Just A Notebook">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="aboutMe" class="col-sm-2 control-label"></label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<div id="popularToolbar"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="aboutMe" class="col-sm-2 control-label">{{msg . "aboutMe"}}</label>
|
|
||||||
<div class="col-sm-10">
|
|
||||||
<textarea id="AboutMe" name="AboutMe">{{.userBlog.AboutMe}}</textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
|
||||||
<button class="btn btn-success">{{msg . "save"}}</button>
|
|
||||||
<span class="msg"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{template "blog/footer.html" .}}
|
|
||||||
|
|
||||||
<script src="{{.siteUrl}}/js/common-min.js"></script>
|
|
||||||
<script type="text/javascript" src="{{.siteUrl}}/tinymce/tinymce.min.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
var urlPrefix = "{{.siteUrl}}";
|
|
||||||
$(function() {
|
|
||||||
tinymce.init({
|
|
||||||
selector : "#AboutMe",
|
|
||||||
content_css : [ "/css/bootstrap.css", "/css/editor/editor.css" ],
|
|
||||||
skin : "custom",
|
|
||||||
language : "{{.locale}}",
|
|
||||||
height : 300,
|
|
||||||
width : "100%",
|
|
||||||
skin : "custom",
|
|
||||||
plugins : [
|
|
||||||
"advlist autolink link leanote_image lists charmap hr ",
|
|
||||||
"searchreplace visualblocks visualchars leanote_code tabfocus",
|
|
||||||
"table contextmenu directionality textcolor paste fullpage textcolor"],
|
|
||||||
toolbar1 : "formatselect |fontselect fontsizeselect| forecolor backcolor | bold italic underline strikethrough | bullist numlist |",
|
|
||||||
menubar : false,
|
|
||||||
toolbar_items_size : 'small',
|
|
||||||
statusbar : false,
|
|
||||||
font_formats : "Arial=arial,helvetica,sans-serif;"
|
|
||||||
+ "Arial Black=arial black,avant garde;"
|
|
||||||
+ "Times New Roman=times new roman,times;"
|
|
||||||
+ "Courier New=courier new,courier;"
|
|
||||||
+ "Tahoma=tahoma,arial,helvetica,sans-serif;"
|
|
||||||
+ "Verdana=verdana,geneva;" + "宋体=SimSun;"
|
|
||||||
+ "新宋体=NSimSun;" + "黑体=SimHei;"
|
|
||||||
+ "微软雅黑=Microsoft YaHei",
|
|
||||||
block_formats : "Header 1=h1;Header 2=h2;Header 3=h3; Header 4=h4;Pre=pre;Paragraph=p"
|
|
||||||
});
|
|
||||||
$("#deleteLogo").click(function() {
|
|
||||||
$("#Logo").val("");
|
|
||||||
$("#logoImg").hide();
|
|
||||||
});
|
|
||||||
|
|
||||||
$("#CanComment").click(function() {
|
|
||||||
if ($(this).is(":checked")) {
|
|
||||||
$("#commentSet").show();
|
|
||||||
} else {
|
|
||||||
$("#commentSet").hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$("input[name='commentType']").click(function() {
|
|
||||||
if ($("input[name='commentType']:checked").val() == "disqus") {
|
|
||||||
$("#disqusSet").show();
|
|
||||||
} else {
|
|
||||||
$("#disqusSet").hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// 基本设置
|
|
||||||
$("#baseInfo .btn-success").click(function() {
|
|
||||||
var data = {
|
|
||||||
Title : $("#Title").val(),
|
|
||||||
SubTitle : $("#SubTitle").val(),
|
|
||||||
Logo : $("#Logo").val(),
|
|
||||||
AboutMe : getEditorContent()
|
|
||||||
}
|
|
||||||
|
|
||||||
post("/blog/setUserBlogBase", data, function(ret) {
|
|
||||||
showMsg2($("#baseInfo .msg"), "{{msg . "saveSuccess"}}", 2000);
|
|
||||||
$("#blogDesc").html(data.SubTitle);
|
|
||||||
$("#logo").html(data.Title);
|
|
||||||
if(data.Logo) {
|
|
||||||
$("#logo").html(t('<img src="?" />', urlPrefix + "/" + data.Logo));
|
|
||||||
}
|
|
||||||
}, this);
|
|
||||||
});
|
|
||||||
// 评论
|
|
||||||
$("#commentInfo .btn-success").click(function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var data = {
|
|
||||||
CanComment : $("#CanComment").is(":checked"),
|
|
||||||
CommentType: $("input[name='commentType']:checked").val(),
|
|
||||||
DisqusId : $("#DisqusId").val(),
|
|
||||||
}
|
|
||||||
post("/blog/setUserBlogComment", data, function(ret) {
|
|
||||||
showMsg2($("#commentInfo .msg"), "{{msg . "saveSuccess"}}", 2000);
|
|
||||||
}, this);
|
|
||||||
});
|
|
||||||
|
|
||||||
// 主题
|
|
||||||
$("#styleInfo .btn-success").click(function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
var data = {
|
|
||||||
Style : $("input[name='Style']:checked").val()
|
|
||||||
}
|
|
||||||
post("/blog/setUserBlogStyle", data, function(ret) {
|
|
||||||
showMsg2($("#styleInfo .msg"), "{{msg . "saveSuccess"}}", 2000);
|
|
||||||
}, this);
|
|
||||||
});
|
|
||||||
$("input[name='Style']").click(function() {
|
|
||||||
$("#styleLink").attr("href", "/css/blog/" + $(this).val() + ".css");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
function inProgress() {
|
|
||||||
}
|
|
||||||
|
|
||||||
// filename, result, resultCode
|
|
||||||
function uploadFinish(ret) {
|
|
||||||
if (ret) {
|
|
||||||
if (ret.resultCode == '1') {
|
|
||||||
$("#logoImg img").attr("src", urlPrefix + "/" + ret.filename).parent().show();
|
|
||||||
$("#Logo").val(ret.filename);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
alert(ret.result);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 上传出错
|
|
||||||
alert("上传出错");
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
{{template "blog/header.html" .}}
|
|
||||||
|
|
||||||
<div id="postsContainer">
|
|
||||||
<div id="posts">
|
|
||||||
<div class="each-post">
|
|
||||||
<div class="title">
|
|
||||||
{{.blog.Title}}
|
|
||||||
</div>
|
|
||||||
<div class="created-time">
|
|
||||||
<i class="fa fa-bookmark-o"></i>
|
|
||||||
{{if .blog.Tags}}
|
|
||||||
{{blogTags $ .blog.Tags}}
|
|
||||||
{{else}}
|
|
||||||
{{msg . "noTag"}}
|
|
||||||
{{end}}
|
|
||||||
|
|
|
||||||
<i class="fa fa-calendar"></i> {{msg . "updatedTime"}} {{.blog.UpdatedTime | datetime}} |
|
|
||||||
<i class="fa fa-calendar"></i> {{msg . "createdTime"}} {{.blog.CreatedTime | datetime}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mobile-created-time">
|
|
||||||
{{ if .userInfo.Logo}}
|
|
||||||
<img src="{{.userInfo.Logo}}" id="userLogo">
|
|
||||||
{{else}}
|
|
||||||
<img src="{{$.siteUrl}}/images/blog/default_avatar.png" id="userLogo">
|
|
||||||
{{end}}
|
|
||||||
{{.userInfo.Username}}
|
|
||||||
|
|
||||||
{{if .blog.Tags}}
|
|
||||||
|
|
||||||
<i class="fa fa-bookmark-o" style="color: #666"></i>
|
|
||||||
{{blogTags $ .blog.Tags}}
|
|
||||||
{{end}}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="desc" id="content">
|
|
||||||
{{if .blog.IsMarkdown }}
|
|
||||||
<div id="markdownContent" style="display: none">
|
|
||||||
<!-- 用textarea装html, 防止得到的值失真 -->
|
|
||||||
<textarea>
|
|
||||||
{{.blog.Content | raw}}
|
|
||||||
</textarea>
|
|
||||||
</div>
|
|
||||||
<div style="padding: 20px; text-align: center">
|
|
||||||
<img src="/images/loading-32.gif" />
|
|
||||||
</div>
|
|
||||||
{{else}}
|
|
||||||
{{.blog.Content | raw}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
<div id="desc" class="hide">{{.blog.Desc}}</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- comment -->
|
|
||||||
{{template "blog/comment.html" .}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{template "blog/footer.html" .}}
|
|
||||||
{{template "blog/highlight.html"}}
|
|
||||||
<div id="blogNav">
|
|
||||||
<div id="blogNavNav">
|
|
||||||
<i class="fa fa-align-justify" title="文档导航"></i>
|
|
||||||
<span>{{msg . "blogNav"}}</span>
|
|
||||||
</div>
|
|
||||||
<div id="blogNavContent">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
var visitUserInfo = eval("(" + {{.visitUserInfoJson}} + ")");
|
|
||||||
var urlPrefix = "{{.siteUrl}}";
|
|
||||||
var noteId = "{{.blog.NoteId.Hex}}";
|
|
||||||
var preLikeNum = +"{{.blog.LikeNum}}";
|
|
||||||
var commentNum = +"{{.blog.CommentNum}}";
|
|
||||||
</script>
|
|
||||||
<script src="/js/app/blog/common.js"></script>
|
|
||||||
<script src="/js/jsrender.js"></script>
|
|
||||||
<script src="/js/jquery-cookie-min.js"></script>
|
|
||||||
<script src="/js/bootstrap-dialog.min.js"></script>
|
|
||||||
<script src="/js/jquery.qrcode.min.js"></script>
|
|
||||||
<script src="/js/app/blog/view.js"></script>
|
|
||||||
|
|
||||||
{{if .blog.IsMarkdown }}
|
|
||||||
<script src="/public/mdeditor/editor/pagedown/Markdown.Converter.js"></script>
|
|
||||||
<script src="/public/mdeditor/editor/pagedown/Markdown.Sanitizer.js"></script>
|
|
||||||
<script src="/public/mdeditor/editor/pagedown/Markdown.Editor.js"></script>
|
|
||||||
<script src="/public/mdeditor/editor/pagedown/local/Markdown.local.zh.js"></script>
|
|
||||||
<script src="/public/mdeditor/editor/Markdown.Extra.js"></script>
|
|
||||||
|
|
||||||
<!--mathjax-->
|
|
||||||
<script type="text/x-mathjax-config">
|
|
||||||
MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'], ["\\(","\\)"]], processEscapes: true }, messageStyle: "none"});
|
|
||||||
</script>
|
|
||||||
<script src="/public/mdeditor/editor/mathJax.js"></script>
|
|
||||||
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
|
||||||
<script>
|
|
||||||
var content = $.trim($("#markdownContent textarea").val());
|
|
||||||
|
|
||||||
// $("#markdownContent").html("");
|
|
||||||
var converter = Markdown.getSanitizingConverter();
|
|
||||||
Markdown.Extra.init(converter, {extensions: ["tables", "fenced_code_gfm", "def_list"]});
|
|
||||||
var html = converter.makeHtml(content);
|
|
||||||
$("#content").html(html);
|
|
||||||
$("pre").addClass("prettyprint linenums");
|
|
||||||
prettyPrint();
|
|
||||||
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"wmd-preview"]);
|
|
||||||
|
|
||||||
initNav();
|
|
||||||
weixin();
|
|
||||||
</script>
|
|
||||||
{{else}}
|
|
||||||
<script>
|
|
||||||
$(function() {
|
|
||||||
initNav();
|
|
||||||
weixin();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
<!--google+
|
|
||||||
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> {lang: 'zh-CN'} </script>
|
|
||||||
-->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<div id="boxFooter">
|
<div id="boxFooter">
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2015
|
© <a href="/index">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<div id="boxFooter">
|
<div id="boxFooter">
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2015
|
© <a href="/index">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -50,12 +50,12 @@ table tr:nth-child(2n) {
|
|||||||
{{ if .userBlog.Logo}}
|
{{ if .userBlog.Logo}}
|
||||||
<img src="{{.userBlog.Logo}}" id="logo">
|
<img src="{{.userBlog.Logo}}" id="logo">
|
||||||
{{else}}
|
{{else}}
|
||||||
<img src="{{$.siteUrl}}/images/blog/default_avatar.png" id="logo">
|
<img src="/images/blog/default_avatar.png" id="logo">
|
||||||
{{end}}
|
{{end}}
|
||||||
{{.userInfo.Username}}
|
{{.userInfo.Username}}
|
||||||
-->
|
-->
|
||||||
{{if .blog.Tags}}
|
{{if .blog.Tags}}
|
||||||
<img src="{{$.siteUrl}}/images/blog/tag.png" id="tag">
|
<img src="/images/blog/tag.png" id="tag">
|
||||||
{{blogTagsForExport $ .blog.Tags}}
|
{{blogTagsForExport $ .blog.Tags}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
@@ -79,7 +79,7 @@ table tr:nth-child(2n) {
|
|||||||
<!--
|
<!--
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<p class="split"></p>
|
<p class="split"></p>
|
||||||
<a href="http://leanote.com"><img src="{{.siteUrl}}/images/logo/leanote_icon_blue.png" id="leanote_logo"/></a>
|
<a href="http://leanote.com"><img src="/images/logo/leanote_icon_blue.png" id="leanote_logo"/></a>
|
||||||
<p>
|
<p>
|
||||||
<a href="http://leanote.com">Leanote</a>
|
<a href="http://leanote.com">Leanote</a>
|
||||||
<br />
|
<br />
|
||||||
@@ -88,10 +88,10 @@ table tr:nth-child(2n) {
|
|||||||
</div>
|
</div>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<script src="{{.siteUrl}}/js/jquery-1.9.0.min.js"></script>
|
<script src="/js/jquery-1.9.0.min.js"></script>
|
||||||
|
|
||||||
<link href="{{.siteUrl}}/public/js/google-code-prettify/prettify.css" type="text/css" rel="stylesheet">
|
<link href="/public/js/google-code-prettify/prettify.css" type="text/css" rel="stylesheet">
|
||||||
<script src="{{.siteUrl}}/public/js/google-code-prettify/prettify.js"></script>
|
<script src="/public/js/google-code-prettify/prettify.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function ok() {
|
function ok() {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<section id="box" class="animated fadeInUp">
|
<section id="box" class="animated fadeInUp">
|
||||||
<div>
|
<div>
|
||||||
<h1 id="logo">Leanote</h1>
|
<h1 id="logo"></h1>
|
||||||
<div id="boxForm">
|
<div id="boxForm">
|
||||||
<div id="boxHeader">{{msg . "findPassword"}}</div>
|
<div id="boxHeader">{{msg . "findPassword"}}</div>
|
||||||
<form>
|
<form>
|
||||||
@@ -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="https://leanote.com">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<section id="box" class="animated fadeInUp">
|
<section id="box" class="animated fadeInUp">
|
||||||
<div>
|
<div>
|
||||||
<h1 id="logo">Leanote</h1>
|
<h1 id="logo"></h1>
|
||||||
<div id="boxForm">
|
<div id="boxForm">
|
||||||
<div id="boxHeader">{{msg . "updatePassword"}}</div>
|
<div id="boxHeader">{{msg . "updatePassword"}}</div>
|
||||||
<form>
|
<form>
|
||||||
@@ -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="https://leanote.com">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<section id="box" class="animated fadeInUp">
|
<section id="box" class="animated fadeInUp">
|
||||||
<div>
|
<div>
|
||||||
<h1 id="logo">Leanote</h1>
|
<h1 id="logo"></h1>
|
||||||
<div id="boxForm">
|
<div id="boxForm">
|
||||||
<div id="boxHeader">{{msg . "findPasswordTimeout"}}</div>
|
<div id="boxHeader">{{msg . "findPasswordTimeout"}}</div>
|
||||||
<form>
|
<form>
|
||||||
@@ -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="https://leanote.com">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -4,22 +4,21 @@
|
|||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
<i class="fa fa-envelope-o fa-3x icon-muted"></i>
|
<i class="fa fa-envelope-o fa-3x icon-muted"></i>
|
||||||
<h2>Contact</h2>
|
<h2>Contact</h2>
|
||||||
<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> / leanote@leanote.com
|
||||||
<br />
|
<br />
|
||||||
leanote@leanote.com
|
|
||||||
<br />
|
|
||||||
Copyright © 2014-2015 <a href="https://leanote.com">Leanote</a>
|
|
||||||
</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>
|
||||||
<h2>Join Us</h2>
|
<h2>Join Us</h2>
|
||||||
<a href="https://github.com/leanote/leanote">Github Leanote</a>
|
<a href="https://github.com/leanote/leanote">Github</a> / <a href="http://leanote.leanote.com/post/Leanote-groups">QQ Group</a>
|
||||||
<br />
|
|
||||||
QQ Group: <span id="qqGrup">256076853, <s>158716820</s></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer-leanote">Proudly powered by <a href="https://leanote.com">Leanote</a></div>
|
<div class="footer-leanote">
|
||||||
|
Copyright © <a href="https://leanote.com">Leanote</a>
|
||||||
|
<br/>
|
||||||
|
Proudly powered by <a href="https://leanote.com">Leanote</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
+13
-13
@@ -4,16 +4,14 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<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 name="author" content="leanote">
|
<meta name="author" content="leanote,蚂蚁笔记">
|
||||||
<title>{{.title}}</title>
|
<title>{{.title}}</title>
|
||||||
|
|
||||||
<link href="/css/bootstrap.css" rel="stylesheet">
|
<link href="/css/bootstrap.css" rel="stylesheet">
|
||||||
<link href="/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
<link href="/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet">
|
||||||
<link href="/css/index.css" rel="stylesheet">
|
<link href="/css/index.css" rel="stylesheet">
|
||||||
<style>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function log(o) {
|
function log(o) {
|
||||||
@@ -21,7 +19,7 @@ function log(o) {
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body class="lang-{{$.locale}}">
|
||||||
<nav id="headerContainer" style="background-color:#fff" class="navbar navbar-default navbar-fixed-top" role="navigation">
|
<nav id="headerContainer" style="background-color:#fff" class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
@@ -31,17 +29,19 @@ function log(o) {
|
|||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
</button>
|
</button>
|
||||||
<a class="navbar-brand" href="/index">
|
<a class="navbar-brand" href="/index" id="logo">
|
||||||
<img src="/images/logo/leanote_black.png" id="" title="leanote, {{msg $ "moto"}}"/>
|
<img src="/images/logo/leanote_black.png" class="hide" title="leanote, {{msg $ "moto"}}"/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="navbar" class="navbar-collapse collapse">
|
<div id="navbar" class="navbar-collapse collapse">
|
||||||
<div id="lang">
|
<div id="lang">
|
||||||
<a data-lang="en-us">English</a>
|
<a data-lang="en-us">English</a>
|
||||||
|
<a data-lang="de-de">Deutsch</a>
|
||||||
<a data-lang="fr-fr">Français</a>
|
<a data-lang="fr-fr">Français</a>
|
||||||
<a data-lang="zh-cn">简体中文</a>
|
<a data-lang="zh-cn">简体中文</a>
|
||||||
<a data-lang="pt-br">Português</a>
|
<a data-lang="zh-hk">繁体中文</a>
|
||||||
|
<a data-lang="pt-pt">Português</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul class="nav navbar-nav navbar-left">
|
<ul class="nav navbar-nav navbar-left">
|
||||||
@@ -49,13 +49,13 @@ function log(o) {
|
|||||||
<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>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a id="leanoteBlog" href="http://lea.leanote.com" target="_blank" title="Lea++, leanote blog platform" class="">Lea++</a></li>
|
<li><a id="leanoteBlog" href="http://lea.leanote.com" target="_blank" title="Leanote explore, leanote blog platform" class="">{{leaMsg . "Leanote Explore"}}</a></li>
|
||||||
<li><a id="leanoteApp" href="http://app.leanote.com" target="_blank" title="Leanote App" class="">{{msg . "desktopApp"}}</a></li>
|
<li><a id="leanoteApp" href="http://app.leanote.com" target="_blank" title="Leanote App" class="">{{msg . "desktopApp"}}</a></li>
|
||||||
<li>
|
<li>
|
||||||
<a href="http://leanote.org#donate" target="_blank" class="">{{msg . "donate"}}</a>
|
<a href="http://leanote.org#donate" target="_blank" class="">{{msg . "donate"}}</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="http://leanote.org" target="_blank" title="leanote.org" class="">leanote.org</a></li>
|
<li><a href="http://leanote.org" target="_blank" title="leanote.org" class="">leanote.org</a></li>
|
||||||
|
|
||||||
{{if .userInfo.Email}}
|
{{if .userInfo.Email}}
|
||||||
@@ -112,4 +112,4 @@ function log(o) {
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
-->
|
-->
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<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 name="author" content="leanote">
|
<meta name="author" content="leanote,蚂蚁笔记">
|
||||||
<title>{{.title}}</title>
|
<title>{{.title}}</title>
|
||||||
|
|
||||||
<link href="/css/bootstrap.css" rel="stylesheet">
|
<link href="/css/bootstrap.css" rel="stylesheet">
|
||||||
|
|||||||
@@ -77,15 +77,5 @@ var lang = '{{.locale}}';
|
|||||||
<script src="/js/home/index.js"></script>
|
<script src="/js/home/index.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
var _hmt = _hmt || [];
|
|
||||||
(function() {
|
|
||||||
var hm = document.createElement("script");
|
|
||||||
hm.src = "//hm.baidu.com/hm.js?d0c988e37b452b3bf1220d45b30f2de2";
|
|
||||||
var s = document.getElementsByTagName("script")[0];
|
|
||||||
s.parentNode.insertBefore(hm, s);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
</div>
|
</div>
|
||||||
-->
|
-->
|
||||||
<div>
|
<div>
|
||||||
<h1 id="logo">Leanote</h1>
|
<h1 id="logo"></h1>
|
||||||
<div id="boxForm">
|
<div id="boxForm">
|
||||||
<div id="boxHeader">{{msg . "login"}}</div>
|
<div id="boxHeader">{{msg . "login"}}</div>
|
||||||
<form>
|
<form>
|
||||||
@@ -61,10 +61,10 @@
|
|||||||
|
|
||||||
<div id="boxFooter">
|
<div id="boxFooter">
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">{{msg . "home"}}</a>
|
<a href="/">{{msg . "home"}}</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="/index">leanote</a> © 2014-2015
|
© <a href="https://leanote.com">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
</div>
|
</div>
|
||||||
-->
|
-->
|
||||||
<div>
|
<div>
|
||||||
<h1 id="logo">Leanote</h1>
|
<h1 id="logo"></h1>
|
||||||
<div id="boxForm">
|
<div id="boxForm">
|
||||||
<div id="boxHeader">{{msg . "register"}}</div>
|
<div id="boxHeader">{{msg . "register"}}</div>
|
||||||
<form>
|
<form>
|
||||||
@@ -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="https://leanote.com">Leanote</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
<a class="btn btn-default btn-sm btn-export"><span class="fa fa-download"></span> {{msg $ "export"}}</a>
|
<a class="btn btn-default btn-sm btn-export"><span class="fa fa-download"></span> {{msg $ "export"}}</a>
|
||||||
<!-- 必须是自己的主题 -->
|
<!-- 必须是自己的主题 -->
|
||||||
{{if .activeTheme.ThemeId}}
|
{{if .activeTheme.ThemeId}}
|
||||||
<a class="btn btn-default btn-sm" href="{{$.siteUrl}}/preview?themeId={{.activeTheme.ThemeId.Hex}}" target="_blank"><span class="fa fa-eye"></span> {{msg $ "preview"}}</a>
|
<a class="btn btn-default btn-sm" href="/preview?themeId={{.activeTheme.ThemeId.Hex}}" target="_blank"><span class="fa fa-eye"></span> {{msg $ "preview"}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
<a class="btn btn-primary btn-sm" target="_blank" href="/member/blog/updateTheme?themeId={{if .activeTheme.ThemeId}}{{.activeTheme.ThemeId.Hex}}{{end}}"><span class="fa fa-pencil"></span> {{msg $ "edit"}}</a>
|
<a class="btn btn-primary btn-sm" target="_blank" href="/member/blog/updateTheme?themeId={{if .activeTheme.ThemeId}}{{.activeTheme.ThemeId.Hex}}{{end}}"><span class="fa fa-pencil"></span> {{msg $ "edit"}}</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
<div class="btn-group" data-id="{{.ThemeId.Hex}}">
|
<div class="btn-group" data-id="{{.ThemeId.Hex}}">
|
||||||
<a class="btn btn-default btn-sm btn-delete" data-loading-text="..."><span class="fa fa-remove"></span> {{msg $ "delete"}}</a>
|
<a class="btn btn-default btn-sm btn-delete" data-loading-text="..."><span class="fa fa-remove"></span> {{msg $ "delete"}}</a>
|
||||||
<a class="btn btn-default btn-sm btn-export"><span class="fa fa-download"></span> {{msg $ "export"}}</a>
|
<a class="btn btn-default btn-sm btn-export"><span class="fa fa-download"></span> {{msg $ "export"}}</a>
|
||||||
<a class="btn btn-default btn-sm" href="{{$.siteUrl}}/preview?themeId={{.ThemeId.Hex}}" target="_blank"><span class="fa fa-eye"></span> {{msg $ "preview"}}</a>
|
<a class="btn btn-default btn-sm" href="/preview?themeId={{.ThemeId.Hex}}" target="_blank"><span class="fa fa-eye"></span> {{msg $ "preview"}}</a>
|
||||||
<a class="btn btn-default btn-sm" target="_blank" href="/member/blog/updateTheme?themeId={{.ThemeId.Hex}}"><span class="fa fa-pencil"></span> {{msg $ "edit"}}</a>
|
<a class="btn btn-default btn-sm" target="_blank" href="/member/blog/updateTheme?themeId={{.ThemeId.Hex}}"><span class="fa fa-pencil"></span> {{msg $ "edit"}}</a>
|
||||||
<a class="btn btn-primary btn-sm btn-active" data-loading-text="..."><span class="fa fa-check"></span> {{msg $ "use"}}</a>
|
<a class="btn btn-primary btn-sm btn-active" data-loading-text="..."><span class="fa fa-check"></span> {{msg $ "use"}}</a>
|
||||||
{{if $.isAdmin}}
|
{{if $.isAdmin}}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
-
|
-
|
||||||
{{.theme.Name}}
|
{{.theme.Name}}
|
||||||
{{end}}
|
{{end}}
|
||||||
<a class="btn btn-default" href="{{$.siteUrl}}/preview?themeId={{.themeId}}" target="_blank"><span class="fa fa-eye"></span> {{msg . "preview"}}</a>
|
<a class="btn btn-default" href="/preview?themeId={{.themeId}}" target="_blank"><span class="fa fa-eye"></span> {{msg . "preview"}}</a>
|
||||||
|
|
||||||
<small>
|
<small>
|
||||||
|
|
||||||
|
|||||||
@@ -16,24 +16,24 @@
|
|||||||
<script src="/public/admin/js/ie/excanvas.js"></script>
|
<script src="/public/admin/js/ie/excanvas.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
</head>
|
</head>
|
||||||
<body class="">
|
<body class="lang-{{$.locale}}">
|
||||||
<section class="vbox">
|
<section class="vbox">
|
||||||
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
<header class="bg-dark dk header navbar navbar-fixed-top-xs">
|
||||||
<div class="navbar-header aside-md" id="logo">
|
<div class="navbar-header aside-md logo-ctn">
|
||||||
<a href="/member" class="navbar-brand clearfix" data-toggle="fullscreen">
|
<a href="/member" class="navbar-brand clearfix" data-toggle="fullscreen">
|
||||||
<span class="logo-icon"></span>
|
<span id="logo"></span>
|
||||||
<span class="logo-title">{{msg . "memberCenter"}}</span>
|
<span class="logo-title">{{msg . "memberCenter"}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ul class="nav navbar-nav navbar-right m-n hidden-xs nav-user">
|
<ul class="nav navbar-nav navbar-right m-n hidden-xs nav-user">
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="/note" class="dk" target="_blank">
|
<a href="/note" class="dk">
|
||||||
{{msg . "myNote"}}
|
{{msg . "myNote"}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="hidden-xs">
|
<li class="hidden-xs">
|
||||||
<a href="/blog/{{$.session.Username}}" class="dk" target="_blank">
|
<a href="/blog/{{$.session.Username}}" class="dk">
|
||||||
{{msg . "myBlog"}}
|
{{msg . "myBlog"}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<footer class="footer lt hidden-xs b-t b-light" style="min-height: initial;
|
<footer class="footer lt hidden-xs b-t b-light" style="min-height: initial;
|
||||||
padding: 10px 15px;text-align:center;">
|
padding: 10px 15px;text-align:center;">
|
||||||
<a href="http://leanote.com" target="_blank">leanote</a> © 2015
|
© <a href="https://leanote.com" target="_blank">Leanote</a>
|
||||||
<!--
|
<!--
|
||||||
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-default btn-icon">
|
<a href="#nav" data-toggle="class:nav-xs" class="pull-right btn btn-sm btn-default btn-icon">
|
||||||
<i class="fa fa-angle-left text">
|
<i class="fa fa-angle-left text">
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
||||||
<meta name="apple-touch-fullscreen" content="yes">
|
<meta name="apple-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, 蚂蚁笔记, {{msg $ "moto"}}">
|
||||||
<title>Leanote, {{msg $ "moto"}}</title>
|
<title>Leanote, {{msg $ "moto"}}</title>
|
||||||
|
|
||||||
<link href="/css/bootstrap-min.css" rel="stylesheet" />
|
<link href="/css/bootstrap-min.css" rel="stylesheet" />
|
||||||
@@ -39,7 +39,7 @@ function log(o) {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="leanote-plugin lang-{{$.locale}}">
|
||||||
<div id="page">
|
<div id="page">
|
||||||
<div id="pageInner">
|
<div id="pageInner">
|
||||||
|
|
||||||
@@ -47,17 +47,10 @@ function log(o) {
|
|||||||
<!-- <div id="headerContainer"> -->
|
<!-- <div id="headerContainer"> -->
|
||||||
<div id="header">
|
<div id="header">
|
||||||
|
|
||||||
<!--
|
<a id="logo" href="/" title="Leanote {{msg . "home"}}" class="pull-left"></a>
|
||||||
<div id="headerLeft" class="pull-left">
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
<div id="logo" class="pull-left">
|
|
||||||
<!--<span>lea</span>note -->
|
|
||||||
<!--<img style="height: 45px;" src="/images/logo/leanote_white.png" title="leanote, 不一样的笔记" alt="leanote">-->
|
|
||||||
</div>
|
|
||||||
<div id="switcher" class="pull-left">
|
<div id="switcher" class="pull-left">
|
||||||
<i class="fa fa-align-justify" id="leftSwitcher" title="{{msg . "leftHidden"}}"></i>
|
<i class="fa fa-dedent" id="leftSwitcher" title="{{msg . "leftHidden"}}"></i>
|
||||||
<span id="leftSwitcher2" title="{{msg . "leftShow"}}"></span>
|
<span id="leftSwitcher2" class="fa fa-indent" title="{{msg . "leftShow"}}"></span>
|
||||||
</div>
|
</div>
|
||||||
<!-- search -->
|
<!-- search -->
|
||||||
<div class="pull-left" id="searchWrap">
|
<div class="pull-left" id="searchWrap">
|
||||||
@@ -134,9 +127,9 @@ function log(o) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pull-right" style="margin: 0 10px" id="myProfile">
|
<div class="pull-right" id="myProfile">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<a class="dropdown-toggle" title="{{.userInfo.Username}}" data-toggle="dropdown" style="line-height: 60px;">
|
<a class="dropdown-toggle profile-img" title="{{.userInfo.Username}}" data-toggle="dropdown">
|
||||||
<img alt="{{.userInfo.Username}}" title="{{.userInfo.Username}}" src="{{if .userInfo.Logo}}{{.userInfo.Logo}}{{else}}/images/blog/default_avatar.png{{end}}" id="myAvatar"/>
|
<img alt="{{.userInfo.Username}}" title="{{.userInfo.Username}}" src="{{if .userInfo.Logo}}{{.userInfo.Logo}}{{else}}/images/blog/default_avatar.png{{end}}" id="myAvatar"/>
|
||||||
<span class="username">
|
<span class="username">
|
||||||
{{.userInfo.Username}}
|
{{.userInfo.Username}}
|
||||||
@@ -198,7 +191,7 @@ function log(o) {
|
|||||||
|
|
||||||
<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++
|
{{msg . "Explore"}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
||||||
<meta name="apple-touch-fullscreen" content="yes">
|
<meta name="apple-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, 蚂蚁笔记, {{msg $ "moto"}}">
|
||||||
<title>Leanote, {{msg $ "moto"}}</title>
|
<title>Leanote, {{msg $ "moto"}}</title>
|
||||||
<link href="/css/bootstrap-min.css" rel="stylesheet" />
|
<link href="/css/bootstrap-min.css" rel="stylesheet" />
|
||||||
<!-- 先加载, 没有样式, 宽度不定 -->
|
<!-- 先加载, 没有样式, 宽度不定 -->
|
||||||
@@ -35,23 +35,16 @@ function log(o) {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="leanote-plugin lang-{{$.locale}}">
|
||||||
<div id="page">
|
<div id="page">
|
||||||
<div id="pageInner">
|
<div id="pageInner">
|
||||||
<!-- 头部 -->
|
<!-- 头部 -->
|
||||||
<!-- <div id="headerContainer"> -->
|
<!-- <div id="headerContainer"> -->
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<!--
|
<a id="logo" href="/" title="Leanote {{msg . "home"}}" class="pull-left"></a>
|
||||||
<div id="headerLeft" class="pull-left">
|
|
||||||
</div>
|
|
||||||
-->
|
|
||||||
<div id="logo" class="pull-left">
|
|
||||||
<!--<span>lea</span>note -->
|
|
||||||
<!--<img style="height: 45px;" src="/images/logo/leanote_white.png" title="leanote, 不一样的笔记" alt="leanote">-->
|
|
||||||
</div>
|
|
||||||
<div id="switcher" class="pull-left">
|
<div id="switcher" class="pull-left">
|
||||||
<i class="fa fa-align-justify" id="leftSwitcher" title="{{msg . "leftHidden"}}"></i>
|
<i class="fa fa-dedent" id="leftSwitcher" title="{{msg . "leftHidden"}}"></i>
|
||||||
<span id="leftSwitcher2" title="{{msg . "leftShow"}}"></span>
|
<span id="leftSwitcher2" class="fa fa-indent" title="{{msg . "leftShow"}}"></span>
|
||||||
</div>
|
</div>
|
||||||
<!-- search -->
|
<!-- search -->
|
||||||
<div class="pull-left" id="searchWrap">
|
<div class="pull-left" id="searchWrap">
|
||||||
@@ -124,9 +117,9 @@ function log(o) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pull-right" style="margin: 0 10px" id="myProfile">
|
<div class="pull-right" id="myProfile">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<a class="dropdown-toggle" title="{{.userInfo.Username}}" data-toggle="dropdown" style="line-height: 60px;">
|
<a class="dropdown-toggle profile-img" title="{{.userInfo.Username}}" data-toggle="dropdown">
|
||||||
<img alt="{{.userInfo.Username}}" title="{{.userInfo.Username}}" src="{{if .userInfo.Logo}}{{.userInfo.Logo}}{{else}}/images/blog/default_avatar.png{{end}}" id="myAvatar"/>
|
<img alt="{{.userInfo.Username}}" title="{{.userInfo.Username}}" src="{{if .userInfo.Logo}}{{.userInfo.Logo}}{{else}}/images/blog/default_avatar.png{{end}}" id="myAvatar"/>
|
||||||
<span class="username">
|
<span class="username">
|
||||||
{{.userInfo.Username}}
|
{{.userInfo.Username}}
|
||||||
@@ -187,7 +180,7 @@ function log(o) {
|
|||||||
</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++
|
{{msg . "Explore"}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ SP=$(cd "$(dirname "$0")"; pwd)
|
|||||||
tmp="/Users/life/Desktop/leanote_release"
|
tmp="/Users/life/Desktop/leanote_release"
|
||||||
|
|
||||||
# version
|
# version
|
||||||
V="v1.4.2"
|
V="v2.2"
|
||||||
|
|
||||||
##=================================
|
##=================================
|
||||||
# 1. 先build 成 3个平台, 2种bit = 6种
|
# 1. 先build 成 3个平台, 2种bit = 6种
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@ db.password= # if not exists, please leave it blank
|
|||||||
# db.urlEnv=${MONGODB_URL} # set url from env. eg. mongodb://root:root123@localhost:27017/leanote
|
# db.urlEnv=${MONGODB_URL} # set url from env. eg. mongodb://root:root123@localhost:27017/leanote
|
||||||
|
|
||||||
# You Must Change It !! About Security!!
|
# You Must Change It !! About Security!!
|
||||||
app.secret=V85ZzBeTnzpsHyjQX4zukbQ8qqtju9y2aDM55VWxAH9Qop19poekx3xkcDVvrD0y
|
app.secret=V85ZzBeTnzpsHyjQX4zukbQ8qqtju9y2aDM55VWxAH9Qop19poekx3xkcDVvrD0y #
|
||||||
|
|
||||||
#--------------------------------
|
#--------------------------------
|
||||||
# revel config
|
# revel config
|
||||||
@@ -44,7 +44,7 @@ log.warn.prefix = "WARN "
|
|||||||
log.error.prefix = "ERROR "
|
log.error.prefix = "ERROR "
|
||||||
|
|
||||||
# The default language of this application.
|
# The default language of this application.
|
||||||
i18n.default_language=en
|
i18n.default_language=en-us
|
||||||
|
|
||||||
module.static=github.com/revel/modules/static
|
module.static=github.com/revel/modules/static
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#------------------------
|
||||||
|
# leanote config
|
||||||
|
#------------------------
|
||||||
|
|
||||||
|
http.port=9000
|
||||||
|
|
||||||
|
site.url=http://localhost:9000 # or http://x.com:8080, http://www.xx.com:9000
|
||||||
|
|
||||||
|
# admin username
|
||||||
|
adminUsername=admin
|
||||||
|
|
||||||
|
# mongdb
|
||||||
|
db.host=127.0.0.1
|
||||||
|
db.port=27017
|
||||||
|
db.dbname=leanote # required
|
||||||
|
db.username= # if not exists, please leave it blank
|
||||||
|
db.password= # if not exists, please leave it blank
|
||||||
|
# or you can set the mongodb url for more complex needs the format is:
|
||||||
|
# mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb
|
||||||
|
# db.url=mongodb://root:root123@localhost:27017/leanote
|
||||||
|
# db.urlEnv=${MONGODB_URL} # set url from env. eg.
|
||||||
|
# mongodb://root:root123@localhost:27017/leanote
|
||||||
|
|
||||||
|
# You Must Change It !! About Security!!
|
||||||
|
app.secret=V85ZzBeTnzpsHyjQX4zukbQ8qqtju9y2aDM55VWxAH9Qop19poekx3xkcDVvrD0y
|
||||||
|
|
||||||
|
#--------------------------------
|
||||||
|
# revel config
|
||||||
|
# for dev
|
||||||
|
#--------------------------------
|
||||||
|
app.name=leanote
|
||||||
|
http.addr=
|
||||||
|
http.ssl=false
|
||||||
|
cookie.httponly=false
|
||||||
|
cookie.prefix=LEANOTE
|
||||||
|
cookie.domain= # for share cookie with sub-domain
|
||||||
|
cookie.secure=false
|
||||||
|
format.date=2006-01-02
|
||||||
|
format.datetime=2006-01-02 15:04:05 # 必须这样配置
|
||||||
|
results.chunked=false
|
||||||
|
|
||||||
|
log.trace.prefix = "TRACE "
|
||||||
|
log.info.prefix = "INFO "
|
||||||
|
log.warn.prefix = "WARN "
|
||||||
|
log.error.prefix = "ERROR "
|
||||||
|
|
||||||
|
# The default language of this application.
|
||||||
|
i18n.default_language=en-us
|
||||||
|
|
||||||
|
module.static=github.com/revel/modules/static
|
||||||
|
|
||||||
|
[dev]
|
||||||
|
mode.dev=true
|
||||||
|
results.pretty=true
|
||||||
|
watch=true
|
||||||
|
|
||||||
|
module.testrunner = # github.com/revel/modules/testrunner
|
||||||
|
|
||||||
|
log.trace.output = stderr
|
||||||
|
log.info.output = stderr
|
||||||
|
log.warn.output = stderr
|
||||||
|
log.error.output = stderr
|
||||||
|
|
||||||
|
[prod]
|
||||||
|
mode.dev=false
|
||||||
|
results.pretty=false
|
||||||
|
watch=false
|
||||||
|
|
||||||
|
module.testrunner =
|
||||||
|
|
||||||
|
log.trace.output = off
|
||||||
|
log.info.output = off
|
||||||
|
log.warn.output = %(app.name)s.log
|
||||||
|
log.error.output = %(app.name)s.log
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
|
|
||||||
# album image
|
|
||||||
Images=Images
|
|
||||||
Upload=Upload
|
|
||||||
Image URL=Image URL
|
|
||||||
Albums=Albums
|
|
||||||
Default=Default
|
|
||||||
File title search=File title search
|
|
||||||
Go to upload images=Go to upload images
|
|
||||||
Rename=Rename
|
|
||||||
Add=Add
|
|
||||||
Add Album=Add Album
|
|
||||||
Add Image=Add Image
|
|
||||||
Can't load this url=Can't load this url
|
|
||||||
No Images=No Images
|
|
||||||
Click to upload images Or Drop images to here=Click to upload images Or Drop images to here
|
|
||||||
|
|
||||||
Cannot delete default album=Cannot delete default album
|
|
||||||
Cannot rename default album=Cannot rename default album
|
|
||||||
This album has images, please delete it's images at first.=This album has images, please delete it's images at first.
|
|
||||||
|
|
||||||
Rename Album=Rename Album
|
|
||||||
Add Success!=Add Success!
|
|
||||||
Rename Success!=Rename Success!
|
|
||||||
Delete Success!=Delete Success!
|
|
||||||
Are you sure to delete this image ?=Are you sure to delete this image ?
|
|
||||||
click to remove this image=click to remove this image
|
|
||||||
error=error
|
|
||||||
Error=Error
|
|
||||||
Prev=Prev
|
|
||||||
Next=Next
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
# album image
|
||||||
|
Images=Bilder
|
||||||
|
Upload=Upload
|
||||||
|
Image URL=Bild URL
|
||||||
|
Albums=Alben
|
||||||
|
Default=Standard
|
||||||
|
File title search=Dateinamensuche
|
||||||
|
Go to upload images=Gehe zu Bildupload
|
||||||
|
Rename=Umbenennen
|
||||||
|
Add=Hinzufügen
|
||||||
|
Add Album=Album hinzufügen
|
||||||
|
Add Image=Bild hinzufügen
|
||||||
|
Can't load this url=Diese URL kann nicht geladen werden
|
||||||
|
No Images=Keine Bilder
|
||||||
|
Click to upload images Or Drop images to here=Hier Klicken und Bilder hochzuladen oder per Drag'n'Drop Bilder hier ablegen
|
||||||
|
|
||||||
|
Cannot delete default album=Standard Album kann nicht gelöscht werden
|
||||||
|
Cannot rename default album=Standard Album kann nicht umbenannt werden
|
||||||
|
This album has images, please delete it's images at first.=Dieses Album enthält Bilder, bitte diese zuerst löschen.
|
||||||
|
|
||||||
|
Rename Album=Album umbenennen
|
||||||
|
Add Success!=Hinzufügen erfolgreich!
|
||||||
|
Rename Success!=Umbenennen erfolgreich!
|
||||||
|
Delete Success!=Löschen erfolgreich!
|
||||||
|
Are you sure to delete this image ?=Soll dieses Bild wirklich gelöscht werden ?
|
||||||
|
click to remove this image=Klicken um dieses Bild zu löschen
|
||||||
|
error=Fehler
|
||||||
|
Error=Fehler
|
||||||
|
Prev=Vorheriges
|
||||||
|
Next=Nächstes
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
# blog
|
||||||
|
|
||||||
|
blogNavs=Navigation
|
||||||
|
quickLinks=Quick Links
|
||||||
|
latestPosts=Neuste Posts
|
||||||
|
|
||||||
|
noBlog=Kein Blog
|
||||||
|
noTag=Keine Tags
|
||||||
|
blogClass=Kategorie
|
||||||
|
updatedTime=Aktualisert am
|
||||||
|
createdTime=Erstellt am
|
||||||
|
fullBlog=Vollstädiger Blog
|
||||||
|
blogNav=Blog Navigation
|
||||||
|
more=Mehr...
|
||||||
|
previous=Vorherige
|
||||||
|
next=Nächste
|
||||||
|
|
||||||
|
#
|
||||||
|
# set blog
|
||||||
|
#
|
||||||
|
blogSet=Blog Konfiguration
|
||||||
|
baseInfoSet=Grundeinstellungen
|
||||||
|
commentSet=Kommentar
|
||||||
|
themeSet=Theme
|
||||||
|
theme=Theme
|
||||||
|
blogName=Titel
|
||||||
|
blogLogo=Logo
|
||||||
|
blogDesc=Beschreibung
|
||||||
|
aboutMe=Über mich
|
||||||
|
|
||||||
|
#domain
|
||||||
|
domainSet=Domain
|
||||||
|
subDomain=Sub-Domain
|
||||||
|
domain=Eigene Domain
|
||||||
|
|
||||||
|
# theme
|
||||||
|
elegant=Elegant
|
||||||
|
navFixed=Navigation fest am linken Rand
|
||||||
|
|
||||||
|
openComment=Offen für Kommentare?
|
||||||
|
chooseComment=Kommentar System
|
||||||
|
disqusHelp=Bitte Disqus Id eingeben
|
||||||
|
needHelp=Brauche Sie Hilfe?
|
||||||
|
blogLogoTips=Bild Hochladen für den Blogtitel
|
||||||
|
saveSuccess=Speichern erfolgreich
|
||||||
|
|
||||||
|
community=Community
|
||||||
|
home=Home
|
||||||
|
none=Keine
|
||||||
|
moreShare=Mehr
|
||||||
|
sinaWeibo=Weibo
|
||||||
|
weixin=Weichat
|
||||||
|
tencentWeibo=Tencent Weibo
|
||||||
|
qqZone=QQ Zone
|
||||||
|
renren=Renren
|
||||||
|
report=Report
|
||||||
|
like=Gefällt mir
|
||||||
|
unlike=Gefällt mir nicht mehr
|
||||||
|
viewers=Betrachter
|
||||||
|
author=Autor
|
||||||
|
delete=Löschen
|
||||||
|
reply=Antworten
|
||||||
|
comment=Kommentar
|
||||||
|
comments=Kommentare
|
||||||
|
cancel=Abbrechen
|
||||||
|
confirm=Bestätigen
|
||||||
|
signIn=Anmelden
|
||||||
|
signUp=Registrieren
|
||||||
|
submitComment=Absenden
|
||||||
|
reportReason1=不友善内容
|
||||||
|
reportReason2=广告等垃圾信息
|
||||||
|
reportReason3=违法违规内容
|
||||||
|
reportReason4=不宜公开讨论的政治内容
|
||||||
|
other=Anderes
|
||||||
|
reportReason=Grund
|
||||||
|
chooseReason=请选择举报理由
|
||||||
|
reportSuccess=举报成功, 我们处理后会通知作者, 感谢您的监督
|
||||||
|
error=Error
|
||||||
|
reportComment?=举报该评论?
|
||||||
|
reportBlog?=举报该博客?
|
||||||
|
confirmDeleteComment=Sind Sie sicher?
|
||||||
|
scanQRCode=Öffnen Sie weichat und scannen den QR Code
|
||||||
|
justNow=Jetz
|
||||||
|
minutesAgo=Minuten
|
||||||
|
hoursAgo=Stunden
|
||||||
|
daysAgo=Tage
|
||||||
|
weeksAgo=Wochen
|
||||||
|
monthsAgo=Monate
|
||||||
|
|
||||||
|
|
||||||
|
a=a
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
# markdown editor
|
||||||
|
|
||||||
|
Hyperlink=Hyperlink
|
||||||
|
Please provide the link URL and an optional title=Bitte Link URL und einen optionalen Titel angeben
|
||||||
|
optional title=Optionaler Titel
|
||||||
|
Ok=Ok
|
||||||
|
Cancel=Abbrechen
|
||||||
|
Strong=Fett
|
||||||
|
strong text=Text in Fettschrift
|
||||||
|
Emphasis=Kursiv
|
||||||
|
emphasized text=Kursiver Text
|
||||||
|
Blockquote=Blockzitat
|
||||||
|
Code Sample=Code-Schnipsel
|
||||||
|
enter code here=Code hier eingeben
|
||||||
|
Image=Bild
|
||||||
|
Heading=Überschrift
|
||||||
|
Numbered List=Nummerierte Liste
|
||||||
|
Bulleted List=Aufzählungsliste
|
||||||
|
List item=Listenelement
|
||||||
|
Horizontal Rule=Horizontale Trennlinie
|
||||||
|
Markdown syntax=Markdown Syntax
|
||||||
|
Undo=Rückgängig
|
||||||
|
Redo=Wiederholen
|
||||||
|
enter image description here=Beschreibung des Bildes hier eingeben
|
||||||
|
enter link description here=Beschreibung des Links hier eingeben
|
||||||
|
Edit mode=Bearbeiten Modus
|
||||||
|
Vim mode=Vim Modus
|
||||||
|
Emacs mode=Emacs Modus
|
||||||
|
Normal mode=Normaler Modus
|
||||||
|
Normal=Normal
|
||||||
|
Light=Light
|
||||||
|
Light editor=Light Editor
|
||||||
|
|
||||||
|
Insert Image=Bild einfügen
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
####################
|
||||||
|
# Member Center
|
||||||
|
####################
|
||||||
|
|
||||||
|
memberCenter=Mitgliederbereich
|
||||||
|
userNotExists=Der Benutzer ist nicht vorhanden
|
||||||
|
hasUsers=Der Benutzer existiert bereits
|
||||||
|
Leanote Blog Theme Api=Leanote Blog Theme Schnittstelle
|
||||||
|
My Group=Meine Gruppe
|
||||||
|
|
||||||
|
# post abstract
|
||||||
|
|
||||||
|
Abstract=Zusammenfassung
|
||||||
|
Description=Beschreibungn
|
||||||
|
Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=Wenn die Zusammenfassung einmal definiert wurde, wird sie nicht automatisch aktulisiert werden, wenn Sie sie löschen.
|
||||||
|
Main Image=Haupt-Bild
|
||||||
|
Get next image as main image from content=Das Bild als Haupt-Bild von folgendem Inhalt definieren
|
||||||
|
Raw Content=Rohdaten
|
||||||
|
|
||||||
|
#memeber
|
||||||
|
welcomeToLeanote=Willkommen
|
||||||
|
accountInfo=Konto Information
|
||||||
|
accountType=Konto Typ
|
||||||
|
premiumAccountType=Premium
|
||||||
|
normalAccountType=Normal
|
||||||
|
imageSize=Bild Kapazität
|
||||||
|
attachSize=Anhang Kapazität
|
||||||
|
totalTraffic=Web Traffic
|
||||||
|
upgrade=Konto Upgraden
|
||||||
|
leanoteEvents=Leanote News
|
||||||
|
addLeanoteAccount=Neues Leanote Konto
|
||||||
|
defaultComment=Standard Leanote Kommentar System
|
||||||
|
upgradeAccountTips=Ich möchte eine eigene Domain für meinen Blog verwenden, <a class="btn btn-default" href="/service">Konto Upgrade</a>
|
||||||
|
cateIsPublicNotebook=Kategorie der veröffentlichten Notizen
|
||||||
|
dragAndSort=Ziehen zum Sortieren
|
||||||
|
permanentLink=Permanent Link
|
||||||
|
cate=Kategorie
|
||||||
|
noCates=Keine Kategorie
|
||||||
|
single=Einfache Seite
|
||||||
|
singleTips=Es können viele einzelne Seiten angelegt werden
|
||||||
|
addSingle=Neue einfache Seite
|
||||||
|
updateSingle=Einfache Seite aktualisieren
|
||||||
|
inputSingleTitle=Titel für einfache Seite erforderlich
|
||||||
|
saveSort=Reihenfolge speichern
|
||||||
|
pagingAndSort=Paging und Sortiereinstellungen
|
||||||
|
perPageSize=Anzahl Posts pro Seite
|
||||||
|
sortField=Sortierfeld
|
||||||
|
sortType=Sortiertyp
|
||||||
|
publicTime=Veröffentlicht am
|
||||||
|
createdTime=Erstellt am
|
||||||
|
updatedTime=Geändert am
|
||||||
|
desc=Absteigend
|
||||||
|
asc=Aufsteigend
|
||||||
|
postList=Veröffentlichungsliste
|
||||||
|
hasSelfDefined=ist definiert
|
||||||
|
noSelfDefined=ist nicht definiert
|
||||||
|
setAbstract=Einstellungen der Zusammenfassung
|
||||||
|
title=Titel
|
||||||
|
content=Inhalt
|
||||||
|
|
||||||
|
addTheme=Neues Theme
|
||||||
|
importTheme=Import Theme
|
||||||
|
exportTheme=Export Theme
|
||||||
|
export=Export
|
||||||
|
preview=Vorschau
|
||||||
|
edit=Bearbeiten
|
||||||
|
use=Benutzen
|
||||||
|
install=Installieren
|
||||||
|
currentTheme=Aktuelles Theme
|
||||||
|
myOtherThemes=Meine anderen Themes
|
||||||
|
leanoteThemeMarket=Leanote Theme Market
|
||||||
|
updateTheme=Theme aktualisieren
|
||||||
|
tplStyleScript=template, style, script
|
||||||
|
newFile=Neue Datei
|
||||||
|
image=Bild
|
||||||
|
currentFile=Aktuelle Datei
|
||||||
|
tpl=Template
|
||||||
|
style=Style
|
||||||
|
script=Script
|
||||||
|
header=Header
|
||||||
|
footer=Footer
|
||||||
|
index=Home
|
||||||
|
cate=Kategorie
|
||||||
|
search=Suchen
|
||||||
|
single=Einfache Seite
|
||||||
|
archive=Archiv
|
||||||
|
post=Post
|
||||||
|
tags=Tags
|
||||||
|
tag_posts=Tag's posts
|
||||||
|
share_comment=Kommentare
|
||||||
|
themeJson=Theme Einstellungen
|
||||||
|
paging=Paging
|
||||||
|
highlight=Code highlight
|
||||||
|
|
||||||
|
# member title
|
||||||
|
Leanote Member Center=Leanote Mitgliederbereich
|
||||||
|
Username=Benutzername
|
||||||
|
Email=E-Mail
|
||||||
|
Password=Passwort
|
||||||
|
Avatar=Avatar
|
||||||
|
Add Account=Konto hinzufügen
|
||||||
|
Update Post Abstract=Zusammenfassung aktualisieren
|
||||||
|
Blog Base Info=Blog Grundeinstellungen
|
||||||
|
Comment=Kommentare
|
||||||
|
Posts=Posts
|
||||||
|
Domain=Domain
|
||||||
|
Paging=Paging
|
||||||
|
Category=Kategorien
|
||||||
|
Add Single=Einfache Seite hinzufügen
|
||||||
|
Update Single=Einfache Seite aktualiseren
|
||||||
|
Single=Einfache Seiten
|
||||||
|
Theme=Theme
|
||||||
|
Upate Theme=Theme Aktualisieren
|
||||||
|
|
||||||
|
group=Gruppe
|
||||||
|
newGroup=Neue Gruppe
|
||||||
|
deleteGroup=Gruppe löschen
|
||||||
|
addMemberTips=Benutzername oder E-Mail angeben um Benutzer hinzuzufügen
|
||||||
|
deleteMember=Mitglied entfernen
|
||||||
|
forbiddenNotMyGroup=Sie haben keine Zugriffsrechte, da Sie nicht Besitzer der Gruppe sind
|
||||||
|
userExistsInGroup=Dieser Benutzer ist bereits Mitglied in der Gruppe
|
||||||
|
notMyGroup=Sie sind nicht Besitzer der Gruppe
|
||||||
|
|
||||||
|
# view js
|
||||||
|
Are you sure ?=Sind Sie sicher ?
|
||||||
|
Are you sure to install it ?=Soll das wirklich installiert werden ?
|
||||||
|
Are you sure to delete=Wirklich löschen
|
||||||
|
Success=Erfolgreich
|
||||||
|
Error=Fehler
|
||||||
|
File exists=Datei bereits vorhanden
|
||||||
|
Delete file=Datei löschen
|
||||||
|
No images=Keine Bilder
|
||||||
|
Filename=Dateiname
|
||||||
|
Group Title=Gruppenname
|
||||||
|
|
||||||
@@ -0,0 +1,286 @@
|
|||||||
|
# leanote
|
||||||
|
app=Leanote
|
||||||
|
moto=Nicht nur ein Notizzettel!
|
||||||
|
moto2=Wissen teilen, Blog, Zusammenarbeit ... Alles in Leanote
|
||||||
|
moto3=Einfach, aber nicht leicht
|
||||||
|
fork github=Fork Leanote auf Github
|
||||||
|
|
||||||
|
# Anfang
|
||||||
|
openSource=leanote.org
|
||||||
|
forgetPassword = Passwort vergessen?
|
||||||
|
or=oder
|
||||||
|
try=Ausprobieren
|
||||||
|
3th=Externe Konten
|
||||||
|
usernameOrEmail=Nutzername oder E-Mail
|
||||||
|
password=Passwort
|
||||||
|
home=Home
|
||||||
|
desktopApp=App
|
||||||
|
aboutLeanote=Über Leanote
|
||||||
|
suggestions=Vorschläge
|
||||||
|
yourSuggestions=Vorschläge
|
||||||
|
leanoteBlog=Blog
|
||||||
|
knowledge=Wissen
|
||||||
|
knowledgeInfo=Nutze Leanote als Notizzettel und verwalte dein Wissen in Leanote.
|
||||||
|
share=Teilen
|
||||||
|
shareInfo=Teile dein Wissen mit Anderen in Leanote.
|
||||||
|
cooperation=Zusammenarbeit
|
||||||
|
cooperationInfo=Arbeite mit Anderen zusammen und verbessere dein Wissen.
|
||||||
|
blog=Blog
|
||||||
|
blogInfo=Veröffentliche dein Wissen, und Leanote ist dein Blog!
|
||||||
|
suggestionsInfo=Hilf uns, unseren Service zu verbessern.
|
||||||
|
yourContact=Dein Kontakt
|
||||||
|
emailOrOthers=E-Mail oder andere Kontaktmöglichkeiten
|
||||||
|
captcha=Sicherheitswort
|
||||||
|
reloadCaptcha=Sicherheitswort neu laden
|
||||||
|
captchaError=Sicherheitswort stimmt nicht überein
|
||||||
|
inputCaptcha=Sicherheitswort ist notwendig
|
||||||
|
noTag=Keine Tags
|
||||||
|
|
||||||
|
hi=Hallo
|
||||||
|
welcomeUseLeanote=Willkommen!
|
||||||
|
myNote=Meine Notizen
|
||||||
|
curUser=E-Mail
|
||||||
|
|
||||||
|
# form
|
||||||
|
submit=Übertragen
|
||||||
|
Submit=Übertragen
|
||||||
|
register=Registrieren
|
||||||
|
login=Einloggen
|
||||||
|
Password=Passwort
|
||||||
|
password2=Bestätige dein Passwort
|
||||||
|
email=E-Mail
|
||||||
|
inputUsername=Nutzername(E-Mail) ist erforderlich
|
||||||
|
inputEmail=E-Mail ist erforderlich
|
||||||
|
wrongEmail=Falsche E-Mail
|
||||||
|
wrongUsernameOrPassword=Falscher Nutzername oder Passwort
|
||||||
|
inputPassword=Passwort ist erforderlich
|
||||||
|
wrongPassword=Falsches Passwort
|
||||||
|
logining=Einloggen
|
||||||
|
loginSuccess=Einloggen erfolgreich
|
||||||
|
ing=Bearbeiten
|
||||||
|
use = Nutzen
|
||||||
|
hadAcount = Du hast schon ein Konto?
|
||||||
|
hasAcount = Du hast noch kein Konto?
|
||||||
|
signInWithThird=Mit anderem Konto anmelden
|
||||||
|
|
||||||
|
# Registrierung
|
||||||
|
registerSuccessAndRdirectToNote=Registrierung erfolgreich, Weiterleitung ...
|
||||||
|
userHasBeenRegistered=%s ist registriert
|
||||||
|
|
||||||
|
# Passwort vergessen
|
||||||
|
passwordTips=Passwortlänge mindestens 6 Zeichen
|
||||||
|
findPassword=Finde Passwort
|
||||||
|
findPasswordSendEmailOver=Wir haben dir bereits den Passwortlink geschickt, bitte überprüfe deine E-Mail.
|
||||||
|
checkEmai=Überprüfe deine E-Mail
|
||||||
|
findPasswordTimeout=Unterbrechung
|
||||||
|
reFindPassword=Suche Passwort noch mal
|
||||||
|
updatePassword=Aktualisiere Passwort
|
||||||
|
updatePasswordSuccessRedirectToLogin=Aktualisierung des Passworts war erfolgreich, Weiterleitung zur Login-Seite ...
|
||||||
|
inputPassword2=Bitte gib dein Passwort erneut ein
|
||||||
|
confirmPassword=Bitte bestätige dein Passwort
|
||||||
|
notGoodPassword=Kein sicheres Passwort, die Länge sollte zumindest 6 Zeichen betragen
|
||||||
|
|
||||||
|
# Notizen Start
|
||||||
|
myBlog=Blog
|
||||||
|
Explore=Erkunden
|
||||||
|
history=Verlauf
|
||||||
|
save=Speichern
|
||||||
|
editorTips=Tipps
|
||||||
|
editorTipsInfo=<h4>1. Kurzbefehle</h4>ctrl+shift+c Ansicht ändern<h4>2. shift+enter Den aktuellen Block verlassen</h4> eg. <img src="/images/outofcode.png" style="width: 90px"/> in dieser Situation nutze shift+enter um den derzeitigen Block zu verlassen.
|
||||||
|
newNote=Neue Notiz
|
||||||
|
newMarkdownNote=Neue Markdown Notiz
|
||||||
|
noNoteNewNoteTips=Diese Notizbuch ist leer, warum erstellst du keine neuen Notizen ...
|
||||||
|
canntNewNoteTips=Entschuldigung, du kannst hier keine neue Notiz hinzufügen, bitte wähle zuerst ein Notizbuch.
|
||||||
|
new=Neu
|
||||||
|
newMarkdown=Neue Markup Notiz
|
||||||
|
clickAddTag=Klicke hier, um Tags hinzuzufügen
|
||||||
|
notebook=Notizbücher
|
||||||
|
note=Notiz
|
||||||
|
myNotebook=Meine Notizen
|
||||||
|
addNotebook=Füge Notiz hinzu
|
||||||
|
search=Suchen
|
||||||
|
clearSearch=Lösche Suche
|
||||||
|
all=Neueste
|
||||||
|
trash=Papierkorb
|
||||||
|
delete=Löschen
|
||||||
|
unTitled=Ohne Titel
|
||||||
|
defaultShare=Standard Freigabe
|
||||||
|
leftHidden=Verstecke Seitenleiste
|
||||||
|
leftShow=Zeige Seitenleiste
|
||||||
|
nav=Notiznavigation
|
||||||
|
writingMode=Schreibmodus
|
||||||
|
normalMode=Normaler Modus
|
||||||
|
saving=Speichern
|
||||||
|
saveSuccess=Speichern erfolgreich
|
||||||
|
SearchNote=Notizen suchen
|
||||||
|
SearchNotebook=Notizbuch suchen
|
||||||
|
Choose File=Datei auswählen
|
||||||
|
Download All=Alle herunterladen
|
||||||
|
Information=Information
|
||||||
|
|
||||||
|
Toggle Modify with Readonly=Bearbeiten/Ansehen
|
||||||
|
|
||||||
|
update=Aktualisierung
|
||||||
|
create=Erzeugen
|
||||||
|
|
||||||
|
demoRegister=<a href="/register">Registrieren</a>
|
||||||
|
|
||||||
|
close=Schliessen
|
||||||
|
cancel=Abbrechen
|
||||||
|
send=Absenden
|
||||||
|
|
||||||
|
# Etikett
|
||||||
|
tag=Tags
|
||||||
|
myTag=Meine Tags
|
||||||
|
red=Rot
|
||||||
|
yellow=Gelb
|
||||||
|
blue=Blau
|
||||||
|
green=Grün
|
||||||
|
|
||||||
|
# Einrichtung
|
||||||
|
accountSetting=Konto
|
||||||
|
themeSetting=Darstellung
|
||||||
|
setAvatar=Avatar
|
||||||
|
logout=Abmelden
|
||||||
|
basicInfo=Grundlagen
|
||||||
|
basicInfoSet=Blog Grundeinstellugen
|
||||||
|
updateEmail=Aktualisiere E-Mail
|
||||||
|
usernameSetting=Aktualisiere Nutzernamen
|
||||||
|
username=Nutzername
|
||||||
|
avatar=Avatar
|
||||||
|
chooseImage=Wähle Bild
|
||||||
|
oldPassword=Altes Passwort
|
||||||
|
newPassword=Neues Passwort
|
||||||
|
admin=Admin
|
||||||
|
|
||||||
|
default=Voreinstellung
|
||||||
|
simple=Einfach
|
||||||
|
|
||||||
|
# tinymce
|
||||||
|
uploadImage=Bild hochladen
|
||||||
|
|
||||||
|
# blog
|
||||||
|
aboutMe=Über mich
|
||||||
|
blogSet=Blog Einstellungen
|
||||||
|
|
||||||
|
# index
|
||||||
|
discussion=Forum
|
||||||
|
download=Herunterladen
|
||||||
|
howToInstallLeanote=Wie installiere ich Leanote?
|
||||||
|
|
||||||
|
#
|
||||||
|
attachments = Anhang
|
||||||
|
donate = Spenden
|
||||||
|
|
||||||
|
# Kontextmenü
|
||||||
|
shareToFriends=Teile mit Anderen
|
||||||
|
publicAsBlog=Veröffentlichen als Blog
|
||||||
|
cancelPublic=Veröffentlichung zurückziehen
|
||||||
|
move=Verschieben
|
||||||
|
copy=Kopieren
|
||||||
|
rename=Umbenennen
|
||||||
|
exportPdf=Export als PDF
|
||||||
|
addChildNotebook=Erstelle Unter-Notizbuch
|
||||||
|
deleteAllShared=Lösche gemeinsame Nutzer
|
||||||
|
deleteSharedNotebook=Lösche gemeinsame Notiz
|
||||||
|
copyToMyNotebook=Kopiere zu meinen Notizen
|
||||||
|
|
||||||
|
####note-dev
|
||||||
|
emailInSending=E-Mail in Zustellung
|
||||||
|
checkEmail=Überprüfe E-Mail
|
||||||
|
setUsername=Lege Nutzernamen fest
|
||||||
|
setUsernameTips=Deine aktuelle E-Mail ist: <code>%s</code>.Du kannst einen einzigartigen Nutzernamen anlegen. <br />Nutzername' mindestens 4 Zeichen und keinen Sonderzeichen.
|
||||||
|
currentEmail=Deine aktuelle E-Mail Adresse lautet: <code>%s</code>
|
||||||
|
updateEmail=Aktualisiere E-Mail
|
||||||
|
updateEmailTips=Bitte bestätige deine E-Mail nach dem Aktualisieren. Die verifizierte E-Mail ist dein neues Konto.
|
||||||
|
sendVerifiedEmail=Schicke Bestätigungsmail
|
||||||
|
verified=Bestätigt
|
||||||
|
unVerified=Unbestätigt
|
||||||
|
verifiedNow=Bestätige jetzt
|
||||||
|
resendVerifiedEmail=Versende Bestätigungsmail noch einmal
|
||||||
|
|
||||||
|
# Teilen
|
||||||
|
defaulthhare=Voreinstellung
|
||||||
|
addShare=Füge Freund hinzu
|
||||||
|
friendEmail=E-Mail des Freundes
|
||||||
|
permission=Erlaubnis
|
||||||
|
readOnly=Nur lesen
|
||||||
|
writable=Schreibrechte
|
||||||
|
inputFriendEmail=E-Mail-Adresse deines Freundes wird benötigt
|
||||||
|
clickToChangePermission=Klicke, um Erlaubniss zu ändern
|
||||||
|
sendInviteEmailToYourFriend=Schicke deinem Freund eine E-Mail-Benachrichtigung
|
||||||
|
copySuccess=Kopieren erfolgreich
|
||||||
|
copyFailed=Fehler beim Kopieren
|
||||||
|
friendNotExits=Dein Freund besitzt kein %s's Konto, Einladungs-Benachrichtigung verschicken: %s
|
||||||
|
emailBodyRequired=E-Mail-Inhalt ist notwendig
|
||||||
|
clickToCopy=Klicke zum Kopieren
|
||||||
|
sendSuccess=Erfolgreich
|
||||||
|
inviteEmailBody=Hallo, ich bin %s, %s ist grossartig, schau es dir an!
|
||||||
|
|
||||||
|
# Verlauf
|
||||||
|
historiesNum=Wir haben deine letzten <b>10</b> Einträge gespeichert.
|
||||||
|
noHistories=Kein Verlauf
|
||||||
|
fold=Einklappen
|
||||||
|
unfold=Ausklappen
|
||||||
|
datetime=Datum und Zeit
|
||||||
|
restoreFromThisVersion=Wiederherstellen von dieser Version
|
||||||
|
confirmBackup=Bist du sicher, dass du von dieser Version wiederherstellen willst? Wir werden die aktuelle Version speichern.
|
||||||
|
createAccount=Erstelle Konto
|
||||||
|
createAccountSuccess=Konto-Erstellung erfolgreich
|
||||||
|
createAccountFailed=Fehler beim Erstellen des Kontos
|
||||||
|
thirdCreateAcountTips=Du nutzt das %(app)s Konto um dich einzuloggen, du kannst %(app)s Konto erstellen. <br /> Nachdem du das %(app)s Konto erstellt hast, kannst du dich %(app)s einloggen.
|
||||||
|
|
||||||
|
## Gültige Nachricht
|
||||||
|
inputUsername=Füge Nutzernamen ein
|
||||||
|
updateUsernameSuccess=Aktualisierung des Nutzernamens war erfolgreich
|
||||||
|
usernameIsExisted=Nutzername existiert bereits
|
||||||
|
noSpecialChars=Nutzername darf keine Sonderzeichen enthalten
|
||||||
|
minLength=Die Länge muss mindestens %s Zeichen betragen
|
||||||
|
errorEmail=Bitte füge die richtige E-Mail ein
|
||||||
|
verifiedEmaiHasSent=Die Verifizierungs-E-Mail wurde verschickt, bitte checke deine E-Mail.
|
||||||
|
emailSendFailed=E-Mail-Verifizierung fehlgeschlagen
|
||||||
|
inputPassword=Passwort ist erforderlich
|
||||||
|
inputNewPassword=Neues Passwort ist erforderlich
|
||||||
|
inputPassword2=Bitte füge dein neues Passwort ein
|
||||||
|
errorPassword=Die länge des Passwortes sollte mindestenns 6 Zeichen und so komplex wie möglich sein
|
||||||
|
oldPasswordError=Das alte Passwort stimmt nicht überein
|
||||||
|
confirmPassword=Passwort stimmt nicht überein
|
||||||
|
updatePasswordSuccess=Aktualiseren des Passwortes erfolgreich
|
||||||
|
errorDomain=Die personalisierte Webseitenaddresse stimmt nicht, z.B. www.myblog.com
|
||||||
|
domainExisted=Personalisierte Webseitenadresse existiert bereits
|
||||||
|
errorSubDomain=Bitte füge eine gültige Subdomain mit mindestens 4 Zeichen und ohne Sonderzeichen ein.
|
||||||
|
subDomainExisted=Subdomain existiert bereits
|
||||||
|
domainNotPointToLeanote=Die Benutzerdefinierte Domain zeigt nicht auf d.leanote.com
|
||||||
|
errorPerPageSize=Seitengrössenfehler
|
||||||
|
errorSortField=Suchfeldfehler
|
||||||
|
themeValidHasRoundInclude=WARNING: Layout hat unterschiedliche Verweise!
|
||||||
|
|
||||||
|
# share
|
||||||
|
tokenExpired=Token abgelaufen
|
||||||
|
Share=Teilen
|
||||||
|
hasSharedThisNote=hat diese Notiz geteilt
|
||||||
|
inputSharePwd=Bitte Passwort eingeben
|
||||||
|
shareToGroup=Mit Gruppe teilen
|
||||||
|
shareByPwd=Mit Passwort teilen
|
||||||
|
groupName=Gruppen Name
|
||||||
|
operation=Operation
|
||||||
|
groupAndMemberManage=Gruppenmitglieder verwalten
|
||||||
|
shareToGroupTips=Wenn eine Notiz mit einer Gruppe geteilt wird, bekommen alle Mitglieder ger Gruppe Zugriff
|
||||||
|
shared=geteilt
|
||||||
|
notShared=nicht geteilt
|
||||||
|
shareLink=Geteilt Link
|
||||||
|
sharePwd=Zugriffs-Passwort
|
||||||
|
cancelShare=Abbrechen
|
||||||
|
getShareLinkAndPwd=Link und Passwort kopieren
|
||||||
|
|
||||||
|
# Common
|
||||||
|
created=erstellt
|
||||||
|
updated=geändert
|
||||||
|
modify=Ändern
|
||||||
|
Search=Suchen
|
||||||
|
Save Success=erfolgreich gespeichert
|
||||||
|
Please save note firstly!=Bitte die Notiz zuerst speichen!
|
||||||
|
Please sign in firstly!=Bitte zuerst anmelden!
|
||||||
|
|
||||||
|
# Fehler
|
||||||
|
notFound=Diese Seite kann nicht gefunden werden.
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
Cut=Cut
|
||||||
|
Header 2=Header 2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.
|
||||||
|
Div=Div
|
||||||
|
Paste=Paste
|
||||||
|
Close=Close
|
||||||
|
Font Family=Schriftart
|
||||||
|
Pre=Pre
|
||||||
|
Align right=Align right
|
||||||
|
New document=New document
|
||||||
|
Blockquote=Blockquote
|
||||||
|
Numbered list=Numbered list
|
||||||
|
Increase indent=Increase indent
|
||||||
|
Formats=Formats
|
||||||
|
Headers=Headers
|
||||||
|
Select all=Select all
|
||||||
|
Header 3=Header 3
|
||||||
|
Blocks=Blocks
|
||||||
|
Undo=Undo
|
||||||
|
Strikethrough=Strike-through
|
||||||
|
Bullet list=Bullet list
|
||||||
|
Header 1=Header 1
|
||||||
|
Superscript=Superscript
|
||||||
|
Clear formatting=Clear formatting
|
||||||
|
Font Sizes=Font Sizes
|
||||||
|
Subscript=Subscript
|
||||||
|
Header 6=Header 6
|
||||||
|
Redo=Redo
|
||||||
|
Paragraph=Paragraph
|
||||||
|
Ok=Ok
|
||||||
|
Bold=Bold
|
||||||
|
Code=Code
|
||||||
|
Italic=Italic
|
||||||
|
Align center=Align centre
|
||||||
|
Header 5=Header 5
|
||||||
|
Decrease indent=Decrease indent
|
||||||
|
Header 4=Header 4
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.
|
||||||
|
Underline=Underline
|
||||||
|
Cancel=Cancel
|
||||||
|
Justify=Justify
|
||||||
|
Inline=Inline
|
||||||
|
Copy=Copy
|
||||||
|
Align left=Align left
|
||||||
|
Visual aids=Visual aids
|
||||||
|
Lower Greek=Lower Greek
|
||||||
|
Square=Square
|
||||||
|
Default=Default
|
||||||
|
Lower Alpha=Lower Alpha
|
||||||
|
Circle=Circle
|
||||||
|
Disc=Disc
|
||||||
|
Upper Alpha=Upper Alpha
|
||||||
|
Upper Roman=Upper Roman
|
||||||
|
Lower Roman=Lower Roman
|
||||||
|
Name=Name
|
||||||
|
Anchor=Anchor
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=You have unsaved changes are you sure you want to navigate away?
|
||||||
|
Restore last draft=Restore last draft
|
||||||
|
Special character=Special character
|
||||||
|
Source code=Source code
|
||||||
|
Right to left=Right to left
|
||||||
|
Left to right=Left to right
|
||||||
|
Emoticons=Emoticons
|
||||||
|
Robots=Robots
|
||||||
|
Document properties=Document properties
|
||||||
|
Title=Title
|
||||||
|
Keywords=Keywords
|
||||||
|
Encoding=Encoding
|
||||||
|
Description=Description
|
||||||
|
Author=Author
|
||||||
|
Language=Language
|
||||||
|
`ctrl/cmd+shift+c` toggle code=`ctrl/cmd+shift+c` toggle code
|
||||||
|
Fullscreen=Full-screen
|
||||||
|
Horizontal line=Horizontal line
|
||||||
|
Horizontal space=Horizontal space
|
||||||
|
Insert\/edit image=Insert\/edit image
|
||||||
|
General=General
|
||||||
|
Advanced=Advanced
|
||||||
|
Source=Source
|
||||||
|
Border=Border
|
||||||
|
Constrain proportions=Constrain proportions
|
||||||
|
Vertical space=Vertical space
|
||||||
|
Image description=Image description
|
||||||
|
Style=Style
|
||||||
|
Dimensions=Dimensions
|
||||||
|
Insert image=Insert image
|
||||||
|
Insert date\/time=Insert date\/time
|
||||||
|
Remove link=Remove link
|
||||||
|
Url=URL
|
||||||
|
Text to display=Text to display
|
||||||
|
Anchors=Anchors
|
||||||
|
Insert link=Insert link
|
||||||
|
New window=New window
|
||||||
|
None=None
|
||||||
|
The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?=The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?
|
||||||
|
Target=Target
|
||||||
|
The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?=The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?
|
||||||
|
Insert\/edit link=Insert\/edit link
|
||||||
|
Insert\/edit video=Insert\/edit video
|
||||||
|
Poster=Poster
|
||||||
|
Alternative source=Alternative source
|
||||||
|
Paste your embed code below:=Paste your embed code below:
|
||||||
|
Insert video=Insert video
|
||||||
|
Embed=Embed
|
||||||
|
Nonbreaking space=Non-breaking space
|
||||||
|
Page break=Page break
|
||||||
|
Paste as text=Paste as text
|
||||||
|
Preview=Preview
|
||||||
|
Print=Print
|
||||||
|
Save=Save
|
||||||
|
Could not find the specified string.=Could not find the specified string.
|
||||||
|
Replace=Replace
|
||||||
|
Next=Next
|
||||||
|
Whole words=Whole words
|
||||||
|
Find and replace=Find and replace
|
||||||
|
Replace with=Replace with
|
||||||
|
Find=Find
|
||||||
|
Replace all=Replace all
|
||||||
|
Match case=Match case
|
||||||
|
Prev=Prev
|
||||||
|
Spellcheck=Spell-check
|
||||||
|
Finish=Finish
|
||||||
|
Ignore all=Ignore all
|
||||||
|
Ignore=Ignore
|
||||||
|
Insert row before=Insert row before
|
||||||
|
Rows=Rows
|
||||||
|
Height=Height
|
||||||
|
Paste row after=Paste row after
|
||||||
|
Alignment=Alignment
|
||||||
|
Column group=Column group
|
||||||
|
Row=Row
|
||||||
|
Insert column before=Insert column before
|
||||||
|
Split cell=Split cell
|
||||||
|
Cell padding=Cell padding
|
||||||
|
Cell spacing=Cell spacing
|
||||||
|
Row type=Row type
|
||||||
|
Insert table=Insert table
|
||||||
|
Body=Body
|
||||||
|
Caption=Caption
|
||||||
|
Footer=Footer
|
||||||
|
Delete row=Delete row
|
||||||
|
Paste row before=Paste row before
|
||||||
|
Scope=Scope
|
||||||
|
Delete table=Delete table
|
||||||
|
Header cell=Header cell
|
||||||
|
Column=Column
|
||||||
|
Cell=Cell
|
||||||
|
Header=Header
|
||||||
|
Cell type=Cell type
|
||||||
|
Copy row=Copy row
|
||||||
|
Row properties=Row properties
|
||||||
|
Table properties=Table properties
|
||||||
|
Row group=Row group
|
||||||
|
Right=Right
|
||||||
|
Insert column after=Insert column after
|
||||||
|
Cols=Cols
|
||||||
|
Insert row after=Insert row after
|
||||||
|
Width=Width
|
||||||
|
Cell properties=Cell properties
|
||||||
|
Left=Left
|
||||||
|
Cut row=Cut row
|
||||||
|
Delete column=Delete column
|
||||||
|
Center=Centre
|
||||||
|
Merge cells=Merge cells
|
||||||
|
Insert template=Insert template
|
||||||
|
Templates=Templates
|
||||||
|
Background color=Background colour
|
||||||
|
Text color=Text colour
|
||||||
|
Show blocks=Show blocks
|
||||||
|
Show invisible characters=Show invisible characters
|
||||||
|
Words: {0}=Words: {0}
|
||||||
|
Insert=Insert
|
||||||
|
File=File
|
||||||
|
Edit=Edit
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help
|
||||||
|
Tools=Tools
|
||||||
|
View=View
|
||||||
|
Table=Table
|
||||||
|
Format=Format
|
||||||
File renamed without changes.
@@ -67,17 +67,17 @@ confirm=Confirm
|
|||||||
signIn=Sign In
|
signIn=Sign In
|
||||||
signUp=Sign Up
|
signUp=Sign Up
|
||||||
submitComment=Submit
|
submitComment=Submit
|
||||||
reportReason1=不友善内容
|
reportReason1=Unfriendly content
|
||||||
reportReason2=广告等垃圾信息
|
reportReason2=Advertising and other spam
|
||||||
reportReason3=违法违规内容
|
reportReason3=Illegal content
|
||||||
reportReason4=不宜公开讨论的政治内容
|
reportReason4=Public discussion of political content
|
||||||
other=Other
|
other=Other
|
||||||
reportReason=Reason
|
reportReason=Reason
|
||||||
chooseReason=请选择举报理由
|
chooseReason=Select report reason
|
||||||
reportSuccess=举报成功, 我们处理后会通知作者, 感谢您的监督
|
reportSuccess=Reporting success, we will notify the author, thank you for your monitor
|
||||||
error=Error
|
error=Error
|
||||||
reportComment?=举报该评论?
|
reportComment?=Report this comment?
|
||||||
reportBlog?=举报该博客?
|
reportBlog?=Report this blog?
|
||||||
confirmDeleteComment=Are you sure?
|
confirmDeleteComment=Are you sure?
|
||||||
scanQRCode=Open weichat and scan the QR code
|
scanQRCode=Open weichat and scan the QR code
|
||||||
justNow=Just now
|
justNow=Just now
|
||||||
@@ -88,4 +88,4 @@ weeksAgo=weeks ago
|
|||||||
monthsAgo=months ago
|
monthsAgo=months ago
|
||||||
|
|
||||||
|
|
||||||
a=a
|
a=a
|
||||||
File renamed without changes.
File renamed without changes.
@@ -83,6 +83,7 @@ notGoodPassword=Tt's not a good password, the length is at least 6
|
|||||||
|
|
||||||
# note
|
# note
|
||||||
myBlog=Blog
|
myBlog=Blog
|
||||||
|
Explore=Explore
|
||||||
history=Histories
|
history=Histories
|
||||||
save=Save
|
save=Save
|
||||||
editorTips=Tips
|
editorTips=Tips
|
||||||
@@ -90,7 +91,7 @@ editorTipsInfo=<h4>1. Short cuts</h4>ctrl+shift+c Toggle code<h4>2. shift+enter
|
|||||||
newNote=New note
|
newNote=New note
|
||||||
newMarkdownNote=New Markdown Note
|
newMarkdownNote=New Markdown Note
|
||||||
noNoteNewNoteTips=The notebook is empty, why not...
|
noNoteNewNoteTips=The notebook is empty, why not...
|
||||||
canntNewNoteTips=Sorry, cannot new note in here, please choose a notebook at first.
|
canntNewNoteTips=Sorry, you can't add notes here, please choose a notebook first.
|
||||||
new=New
|
new=New
|
||||||
newMarkdown=New markdown note
|
newMarkdown=New markdown note
|
||||||
clickAddTag=Click to add Tag
|
clickAddTag=Click to add Tag
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
Cut=Cut
|
||||||
|
Header 2=Header 2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.
|
||||||
|
Div=Div
|
||||||
|
Paste=Paste
|
||||||
|
Close=Close
|
||||||
|
Font Family=Font Family
|
||||||
|
Pre=Pre
|
||||||
|
Align right=Align right
|
||||||
|
New document=New document
|
||||||
|
Blockquote=Blockquote
|
||||||
|
Numbered list=Numbered list
|
||||||
|
Increase indent=Increase indent
|
||||||
|
Formats=Formats
|
||||||
|
Headers=Headers
|
||||||
|
Select all=Select all
|
||||||
|
Header 3=Header 3
|
||||||
|
Blocks=Blocks
|
||||||
|
Undo=Undo
|
||||||
|
Strikethrough=Strike-through
|
||||||
|
Bullet list=Bullet list
|
||||||
|
Header 1=Header 1
|
||||||
|
Superscript=Superscript
|
||||||
|
Clear formatting=Clear formatting
|
||||||
|
Font Sizes=Font Sizes
|
||||||
|
Subscript=Subscript
|
||||||
|
Header 6=Header 6
|
||||||
|
Redo=Redo
|
||||||
|
Paragraph=Paragraph
|
||||||
|
Ok=Ok
|
||||||
|
Bold=Bold
|
||||||
|
Code=Code
|
||||||
|
Italic=Italic
|
||||||
|
Align center=Align centre
|
||||||
|
Header 5=Header 5
|
||||||
|
Decrease indent=Decrease indent
|
||||||
|
Header 4=Header 4
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.
|
||||||
|
Underline=Underline
|
||||||
|
Cancel=Cancel
|
||||||
|
Justify=Justify
|
||||||
|
Inline=Inline
|
||||||
|
Copy=Copy
|
||||||
|
Align left=Align left
|
||||||
|
Visual aids=Visual aids
|
||||||
|
Lower Greek=Lower Greek
|
||||||
|
Square=Square
|
||||||
|
Default=Default
|
||||||
|
Lower Alpha=Lower Alpha
|
||||||
|
Circle=Circle
|
||||||
|
Disc=Disc
|
||||||
|
Upper Alpha=Upper Alpha
|
||||||
|
Upper Roman=Upper Roman
|
||||||
|
Lower Roman=Lower Roman
|
||||||
|
Name=Name
|
||||||
|
Anchor=Anchor
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=You have unsaved changes are you sure you want to navigate away?
|
||||||
|
Restore last draft=Restore last draft
|
||||||
|
Special character=Special character
|
||||||
|
Source code=Source code
|
||||||
|
Right to left=Right to left
|
||||||
|
Left to right=Left to right
|
||||||
|
Emoticons=Emoticons
|
||||||
|
Robots=Robots
|
||||||
|
Document properties=Document properties
|
||||||
|
Title=Title
|
||||||
|
Keywords=Keywords
|
||||||
|
Encoding=Encoding
|
||||||
|
Description=Description
|
||||||
|
Author=Author
|
||||||
|
Language=Language
|
||||||
|
`ctrl/cmd+shift+c` toggle code=`ctrl/cmd+shift+c` toggle code
|
||||||
|
Fullscreen=Full-screen
|
||||||
|
Horizontal line=Horizontal line
|
||||||
|
Horizontal space=Horizontal space
|
||||||
|
Insert\/edit image=Insert\/edit image
|
||||||
|
General=General
|
||||||
|
Advanced=Advanced
|
||||||
|
Source=Source
|
||||||
|
Border=Border
|
||||||
|
Constrain proportions=Constrain proportions
|
||||||
|
Vertical space=Vertical space
|
||||||
|
Image description=Image description
|
||||||
|
Style=Style
|
||||||
|
Dimensions=Dimensions
|
||||||
|
Insert image=Insert image
|
||||||
|
Insert date\/time=Insert date\/time
|
||||||
|
Remove link=Remove link
|
||||||
|
Url=URL
|
||||||
|
Text to display=Text to display
|
||||||
|
Anchors=Anchors
|
||||||
|
Insert link=Insert link
|
||||||
|
New window=New window
|
||||||
|
None=None
|
||||||
|
The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?=The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?
|
||||||
|
Target=Target
|
||||||
|
The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?=The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?
|
||||||
|
Insert\/edit link=Insert\/edit link
|
||||||
|
Insert\/edit video=Insert\/edit video
|
||||||
|
Poster=Poster
|
||||||
|
Alternative source=Alternative source
|
||||||
|
Paste your embed code below:=Paste your embed code below:
|
||||||
|
Insert video=Insert video
|
||||||
|
Embed=Embed
|
||||||
|
Nonbreaking space=Non-breaking space
|
||||||
|
Page break=Page break
|
||||||
|
Paste as text=Paste as text
|
||||||
|
Preview=Preview
|
||||||
|
Print=Print
|
||||||
|
Save=Save
|
||||||
|
Could not find the specified string.=Could not find the specified string.
|
||||||
|
Replace=Replace
|
||||||
|
Next=Next
|
||||||
|
Whole words=Whole words
|
||||||
|
Find and replace=Find and replace
|
||||||
|
Replace with=Replace with
|
||||||
|
Find=Find
|
||||||
|
Replace all=Replace all
|
||||||
|
Match case=Match case
|
||||||
|
Prev=Prev
|
||||||
|
Spellcheck=Spell-check
|
||||||
|
Finish=Finish
|
||||||
|
Ignore all=Ignore all
|
||||||
|
Ignore=Ignore
|
||||||
|
Insert row before=Insert row before
|
||||||
|
Rows=Rows
|
||||||
|
Height=Height
|
||||||
|
Paste row after=Paste row after
|
||||||
|
Alignment=Alignment
|
||||||
|
Column group=Column group
|
||||||
|
Row=Row
|
||||||
|
Insert column before=Insert column before
|
||||||
|
Split cell=Split cell
|
||||||
|
Cell padding=Cell padding
|
||||||
|
Cell spacing=Cell spacing
|
||||||
|
Row type=Row type
|
||||||
|
Insert table=Insert table
|
||||||
|
Body=Body
|
||||||
|
Caption=Caption
|
||||||
|
Footer=Footer
|
||||||
|
Delete row=Delete row
|
||||||
|
Paste row before=Paste row before
|
||||||
|
Scope=Scope
|
||||||
|
Delete table=Delete table
|
||||||
|
Header cell=Header cell
|
||||||
|
Column=Column
|
||||||
|
Cell=Cell
|
||||||
|
Header=Header
|
||||||
|
Cell type=Cell type
|
||||||
|
Copy row=Copy row
|
||||||
|
Row properties=Row properties
|
||||||
|
Table properties=Table properties
|
||||||
|
Row group=Row group
|
||||||
|
Right=Right
|
||||||
|
Insert column after=Insert column after
|
||||||
|
Cols=Cols
|
||||||
|
Insert row after=Insert row after
|
||||||
|
Width=Width
|
||||||
|
Cell properties=Cell properties
|
||||||
|
Left=Left
|
||||||
|
Cut row=Cut row
|
||||||
|
Delete column=Delete column
|
||||||
|
Center=Centre
|
||||||
|
Merge cells=Merge cells
|
||||||
|
Insert template=Insert template
|
||||||
|
Templates=Templates
|
||||||
|
Background color=Background colour
|
||||||
|
Text color=Text colour
|
||||||
|
Show blocks=Show blocks
|
||||||
|
Show invisible characters=Show invisible characters
|
||||||
|
Words: {0}=Words: {0}
|
||||||
|
Insert=Insert
|
||||||
|
File=File
|
||||||
|
Edit=Edit
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help
|
||||||
|
Tools=Tools
|
||||||
|
View=View
|
||||||
|
Table=Table
|
||||||
|
Format=Format
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
# album image
|
||||||
|
Images=Images
|
||||||
|
Upload=Téléverser
|
||||||
|
Image URL=URL de l'image
|
||||||
|
Albums=Albums
|
||||||
|
Default=Par défaut
|
||||||
|
File title search=Recherche par nom de fichier
|
||||||
|
Go to upload images=Aller au téléversement d'images
|
||||||
|
Rename=Renommer
|
||||||
|
Add=Ajouter
|
||||||
|
Add Album=Ajouter un album
|
||||||
|
Add Image=Ajouter une image
|
||||||
|
Can't load this url=Chargement de l'URL impossible
|
||||||
|
No Images=Aucune image
|
||||||
|
Click to upload images Or Drop images to here=Cliquez pour téléverser des images ou glisser des images ici
|
||||||
|
|
||||||
|
Cannot delete default album=Album par défaut impossible à effacer
|
||||||
|
Cannot rename default album=Album par défaut impossible à renommer
|
||||||
|
This album has images, please delete it's images at first.=Cet album contient des images, veuillez les effacer en premier.
|
||||||
|
|
||||||
|
Rename Album=Renommer un album
|
||||||
|
Add Success!=Ajout effectué avec succès!
|
||||||
|
Rename Success!=Renommage effectué avec succès!
|
||||||
|
Delete Success!=Effaçage effectué avec succès!
|
||||||
|
Are you sure to delete this image ?=Voulez-vous vraiment effacer cette image ?
|
||||||
|
click to remove this image=cliquez pour supprimer cette image
|
||||||
|
error=erreur
|
||||||
|
Error=Erreur
|
||||||
|
Prev=Préc
|
||||||
|
Next=Suiv
|
||||||
File renamed without changes.
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
# markdown editor
|
||||||
|
|
||||||
|
Hyperlink=Hyperlien
|
||||||
|
Please provide the link URL and an optional title=Veuillez fournir le lien hypertexte et un titre facultatif
|
||||||
|
optional title=titre facultatif
|
||||||
|
Ok=Ok
|
||||||
|
Cancel=Annuler
|
||||||
|
Strong=Fort
|
||||||
|
strong text=Texte fort
|
||||||
|
Emphasis=Emphase
|
||||||
|
emphasized text=Texte avec emphase
|
||||||
|
Blockquote=Bloc de citation
|
||||||
|
Code Sample=Extrait de code
|
||||||
|
enter code here=entrer le code ici
|
||||||
|
Image=Image
|
||||||
|
Heading=Titre
|
||||||
|
Numbered List=Liste ordonnée
|
||||||
|
Bulleted List=Liste non ordonnée
|
||||||
|
List item=Element de liste
|
||||||
|
Horizontal Rule=Ligne horizontale
|
||||||
|
Markdown syntax=Syntaxe markdown
|
||||||
|
Undo=Annuler
|
||||||
|
Redo=Reproduire
|
||||||
|
enter image description here=entrer la description de l'image ici
|
||||||
|
enter link description here=entrer la description du lien ici
|
||||||
|
Edit mode=Mode édition
|
||||||
|
Vim mode=Mode Vim
|
||||||
|
Emacs mode=Mode Emacs
|
||||||
|
Normal mode=Mode Normal
|
||||||
|
Normal=Normal
|
||||||
|
Light=Léger
|
||||||
|
Light editor=Editeur léger
|
||||||
|
|
||||||
|
Insert Image=Inserérer une image
|
||||||
@@ -7,37 +7,37 @@
|
|||||||
memberCenter=Espace Membre
|
memberCenter=Espace Membre
|
||||||
userNotExists=L'utilisateur n'existe pas
|
userNotExists=L'utilisateur n'existe pas
|
||||||
hasUsers=L'utilisateur existe déjà
|
hasUsers=L'utilisateur existe déjà
|
||||||
My Group=My Group
|
My Group=Mon Groupe
|
||||||
|
|
||||||
|
|
||||||
# post abstract
|
# post abstract
|
||||||
|
|
||||||
Abstract=Abstract
|
Abstract=Résumé
|
||||||
Description=Description
|
Description=Description
|
||||||
Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.
|
Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=Une fois que le résumé a été mis à jour, celui-ci ne sera pas automatiquement appliqué, à moins que vous ne l'annuliez.
|
||||||
Main Image=Main Image
|
Main Image=Image principale
|
||||||
Get next image as main image from content=Get next image as main image from content
|
Get next image as main image from content=Faire de cette image l'image principale depuis le contenu
|
||||||
Raw Content=Raw Content
|
Raw Content=Contenu brut
|
||||||
|
|
||||||
# member title
|
# member title
|
||||||
Leanote Member Center=Leanote Member Center
|
Leanote Member Center=Centre de Membre Leanote
|
||||||
Username=Username
|
Username=Nom d'utilisateur
|
||||||
Email=Email
|
Email=Courriel
|
||||||
Password=Password
|
Password=Mot de passe
|
||||||
Avatar=Avatar
|
Avatar=Avatar
|
||||||
Add Account=Add Account
|
Add Account=Ajouter compte
|
||||||
Update Post Abstract=Update Post Abstract
|
Update Post Abstract=Mise à jour après résumé
|
||||||
Blog Base Info=Blog Base Info
|
Blog Base Info=Info de base du blog
|
||||||
Comment=Comment
|
Comment=Commentaire
|
||||||
Posts=Posts
|
Posts=Posts
|
||||||
Domain=Domain
|
Domain=Domaine
|
||||||
Paging=Paging
|
Paging=Pagination
|
||||||
Category=Category
|
Category=Catégorie
|
||||||
Add Single=Add Single
|
Add Single=Ajout unique
|
||||||
Update Single=Update Single
|
Update Single=Mise à jour unique
|
||||||
Single=Single
|
Single=Unique
|
||||||
Theme=Theme
|
Theme=Thème
|
||||||
Upate Theme=Upate Theme
|
Upate Theme=Mise à jour du thème
|
||||||
|
|
||||||
|
|
||||||
group=Groupe
|
group=Groupe
|
||||||
@@ -45,9 +45,9 @@ newGroup=Nouveau groupe
|
|||||||
deleteGroup=Effacer groupe
|
deleteGroup=Effacer groupe
|
||||||
addMemberTips=Rentrer le nom d'utilisateur et le courriel pour ajouter un membre
|
addMemberTips=Rentrer le nom d'utilisateur et le courriel pour ajouter un membre
|
||||||
deleteMember=Effacer membre
|
deleteMember=Effacer membre
|
||||||
forbiddenNotMyGroup=You have no authority to access, cause you are not the group owner
|
forbiddenNotMyGroup=Vous n'avez aucun droit d'accès, car vous n'êtes pas le propriétaire du groupe.
|
||||||
userExistsInGroup=The member is already exists in this group
|
userExistsInGroup=Le membre existe déjà dans le groupe.
|
||||||
notMyGroup=You are not the group owner
|
notMyGroup=Vous n'êtes pas le propriétaire du groupe.
|
||||||
|
|
||||||
#memeber
|
#memeber
|
||||||
welcomeToLeanote=Bienvenue
|
welcomeToLeanote=Bienvenue
|
||||||
@@ -126,13 +126,13 @@ highlight=Surlignage du code
|
|||||||
|
|
||||||
|
|
||||||
# view js
|
# view js
|
||||||
Are you sure ?=Are you sure ?
|
Are you sure ?=Êtes-vous sûr ?
|
||||||
Are you sure to install it ?=Are you sure to install it ?
|
Are you sure to install it ?=Voulez-vous vraiment l'installer ?
|
||||||
Are you sure to delete=Are you sure to delete
|
Are you sure to delete=Voulez-vous vraiment l'effacer?
|
||||||
Success=Success
|
Success=Succès
|
||||||
Error=Error
|
Error=Erreur
|
||||||
File exists=File exists
|
File exists=Le fichier exite
|
||||||
Delete file=Delete file
|
Delete file=Effacer le fichier
|
||||||
No images=No images
|
No images=Pas d'images
|
||||||
Filename=Filename
|
Filename=Nom de fichier
|
||||||
Group Title=Group Title
|
Group Title=Titre du groupe
|
||||||
@@ -49,7 +49,7 @@ password2=Confirmer votre mot de passe
|
|||||||
email=Adresse de courriel
|
email=Adresse de courriel
|
||||||
inputUsername=Le nom d'utilisateur(adresse courriel) est requis
|
inputUsername=Le nom d'utilisateur(adresse courriel) est requis
|
||||||
inputEmail=L'adresse courriel est requis
|
inputEmail=L'adresse courriel est requis
|
||||||
wrongEmail=Wrong email
|
wrongEmail=Adresse courriel incorrecte
|
||||||
wrongUsernameOrPassword=Mauvais nom d'utilisateur ou mot de passe
|
wrongUsernameOrPassword=Mauvais nom d'utilisateur ou mot de passe
|
||||||
inputPassword=Le mot de passe est requis
|
inputPassword=Le mot de passe est requis
|
||||||
wrongPassword=Mauvais mot de passe
|
wrongPassword=Mauvais mot de passe
|
||||||
@@ -80,6 +80,7 @@ notGoodPassword=Le mot de passe est incorrect, il doit comporter au moins 6 cara
|
|||||||
|
|
||||||
# note
|
# note
|
||||||
myBlog=Blog
|
myBlog=Blog
|
||||||
|
Explore=Explorer
|
||||||
history=Historique
|
history=Historique
|
||||||
save=Sauvegarder
|
save=Sauvegarder
|
||||||
editorTips=Astuces
|
editorTips=Astuces
|
||||||
@@ -111,7 +112,7 @@ saving=Sauvegarde
|
|||||||
saveSuccess=Sauvegarde réussie
|
saveSuccess=Sauvegarde réussie
|
||||||
SearchNote=Chercher une note
|
SearchNote=Chercher une note
|
||||||
SearchNotebook=Chercher un bloc-note
|
SearchNotebook=Chercher un bloc-note
|
||||||
Toggle Modify with Readonly=Toggle Modify with Readonly
|
Toggle Modify with Readonly=Passer d'écriture à lecture seule
|
||||||
|
|
||||||
update=Mettre à jour
|
update=Mettre à jour
|
||||||
create=Créer
|
create=Créer
|
||||||
@@ -155,7 +156,7 @@ blogSet=Réglages du blog
|
|||||||
# index
|
# index
|
||||||
discussion=Discussion
|
discussion=Discussion
|
||||||
download=Téléchargement
|
download=Téléchargement
|
||||||
howToInstallLeanote=Comment installer leanote
|
howToInstallLeanote=Comment installer Leanote
|
||||||
|
|
||||||
#
|
#
|
||||||
attachments = Pièces-jointes
|
attachments = Pièces-jointes
|
||||||
@@ -194,7 +195,7 @@ friendEmail=Courriel de l'ami
|
|||||||
permission=Autorisation
|
permission=Autorisation
|
||||||
readOnly=Lecture seule
|
readOnly=Lecture seule
|
||||||
writable=Editable
|
writable=Editable
|
||||||
inputFriendEmail=Le courriel de votre ami est requis/
|
inputFriendEmail=Le courriel de votre ami est requis
|
||||||
clickToChangePermission=Cliquez pour changer l'autorisation.
|
clickToChangePermission=Cliquez pour changer l'autorisation.
|
||||||
sendInviteEmailToYourFriend=Envoyer un courriel d'invitation à votre ami.
|
sendInviteEmailToYourFriend=Envoyer un courriel d'invitation à votre ami.
|
||||||
copySuccess=Copie réussie
|
copySuccess=Copie réussie
|
||||||
@@ -244,31 +245,31 @@ errorSortField=Erreur dans le tri du champs
|
|||||||
themeValidHasRoundInclude=WARNING: Les modèles ont des références circulaires!
|
themeValidHasRoundInclude=WARNING: Les modèles ont des références circulaires!
|
||||||
|
|
||||||
# share
|
# share
|
||||||
tokenExpired=Token Expired
|
tokenExpired=Session expirée
|
||||||
Share=Share
|
Share=Partager
|
||||||
hasSharedThisNote=has shared this note
|
hasSharedThisNote=a partagé cette note
|
||||||
inputSharePwd=Please input password
|
inputSharePwd=Veuillez entrer le mot de passe
|
||||||
shareToGroup=Share to group
|
shareToGroup=Partager avec le groupe
|
||||||
shareByPwd=Share by password
|
shareByPwd=Partager via un mot de passe
|
||||||
groupName=Group Name
|
groupName=Nom du groupe
|
||||||
operation=Operation
|
operation=Opération
|
||||||
groupAndMemberManage=Manage group/member
|
groupAndMemberManage=Gérer le groupe/les membres
|
||||||
shareToGroupTips=If you share your note to group, the member belongs to group will have the right to access the note
|
shareToGroupTips=Si vous partagez cette note avec le groupe, les membres auront le droit d'y accéder.
|
||||||
shared=Shared
|
shared=Partagé
|
||||||
notShared=Not shared
|
notShared=Non partagé
|
||||||
shareLink=Share link
|
shareLink=Partager le lien
|
||||||
sharePwd=Access password
|
sharePwd=Accès au mot de passe
|
||||||
cancelShare=Cancel
|
cancelShare=Annuler
|
||||||
getShareLinkAndPwd=Get link and password
|
getShareLinkAndPwd=Obtenir le lien et le mot de passe
|
||||||
|
|
||||||
# Common
|
# Common
|
||||||
created=Créé
|
created=Créé
|
||||||
updated=Mis à jour
|
updated=Mis à jour
|
||||||
modify=Modifier
|
modify=Modifier
|
||||||
Search=Search
|
Search=Chercher
|
||||||
Save Success=Save Success
|
Save Success=Sauvegardé avec succès
|
||||||
Please save note firstly!=Please save note firstly!
|
Please save note firstly!=Veuillez d'abord enregistrer votre note!
|
||||||
Please sign in firstly!=Please sign in firstly!
|
Please sign in firstly!=Veuillez d'abord vous enregistrer!
|
||||||
|
|
||||||
# error
|
# error
|
||||||
notFound=Page introuvable.
|
notFound=Page introuvable.
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
Cut=Couper
|
||||||
|
Header 2=Titre 2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=Votre navigateur ne supporte pas l'accès direct au presse-papier. Veuillez utiliser les raccourcis Ctrl+X\/C\/V à la place.
|
||||||
|
Div=Div
|
||||||
|
Paste=Coller
|
||||||
|
Close=Fermer
|
||||||
|
Font Family=Famille de police
|
||||||
|
Pre=Pre
|
||||||
|
Align right=Aligné à droite
|
||||||
|
New document=Nouveau document
|
||||||
|
Blockquote=Bloc de citation
|
||||||
|
Numbered list=Liste ordonnée
|
||||||
|
Increase indent=Augmenter l'indentation
|
||||||
|
Formats=Format
|
||||||
|
Headers=En-tête
|
||||||
|
Select all=Sélectionner tout
|
||||||
|
Header 3=En-tête 3
|
||||||
|
Blocks=Blocs
|
||||||
|
Undo=Annuler
|
||||||
|
Strikethrough=Barrer
|
||||||
|
Bullet list=Liste à puces
|
||||||
|
Header 1=En-tête 1
|
||||||
|
Superscript=Exposant
|
||||||
|
Clear formatting=Nettoyer le formatage
|
||||||
|
Font Sizes=Taille des Polices
|
||||||
|
Subscript=Indice
|
||||||
|
Header 6=En-tête 6
|
||||||
|
Redo=Reproduire
|
||||||
|
Paragraph=Paragraphe
|
||||||
|
Ok=Ok
|
||||||
|
Bold=Gras
|
||||||
|
Code=Code
|
||||||
|
Italic=Italique
|
||||||
|
Align center=Aligner au centre
|
||||||
|
Header 5=En-tête 5
|
||||||
|
Decrease indent=Diminuer l'indentation
|
||||||
|
Header 4=En-tête 4
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=Coller est en mode texte clair. Les contenus seront collés désormais en clair jusqu'à ce que vous ne désactiviez cette option.
|
||||||
|
Underline=Souligner
|
||||||
|
Cancel=Annuler
|
||||||
|
Justify=Justifier
|
||||||
|
Inline=En ligne
|
||||||
|
Copy=Copier
|
||||||
|
Align left=Aligner à gauche
|
||||||
|
Visual aids=Aides visuelles
|
||||||
|
Lower Greek=Grec minuscule
|
||||||
|
Square=Carré
|
||||||
|
Default=Par défaut
|
||||||
|
Lower Alpha=Alpha minuscule
|
||||||
|
Circle=Cercle
|
||||||
|
Disc=Disque
|
||||||
|
Upper Alpha=Alpha majuscule
|
||||||
|
Upper Roman=Roman majuscule
|
||||||
|
Lower Roman=Roman minuscule
|
||||||
|
Name=Nom
|
||||||
|
Anchor=Ancre
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=Des changements n'ont pas été enregistrés, voulez-vous vraiment sortir?
|
||||||
|
Restore last draft=Restaurer dernier brouillon
|
||||||
|
Special character=Caractère spécial
|
||||||
|
Source code=Code Source
|
||||||
|
Right to left=De droite à gauche
|
||||||
|
Left to right=De gauche à droite
|
||||||
|
Emoticons=Emoticones
|
||||||
|
Robots=Robots
|
||||||
|
Document properties=Propriétés du document
|
||||||
|
Title=Titre
|
||||||
|
Keywords=Mots-clés
|
||||||
|
Encoding=Encodage
|
||||||
|
Description=Description
|
||||||
|
Author=Auteur
|
||||||
|
Language=Langue
|
||||||
|
`ctrl/cmd+shift+c` toggle code=inverser le code `ctrl/cmd+shift+c`
|
||||||
|
Fullscreen=Plein écran
|
||||||
|
Horizontal line=Ligne horizontal
|
||||||
|
Horizontal space=Espace horizontal
|
||||||
|
Insert\/edit image=Insérer\/éditer image
|
||||||
|
General=Général
|
||||||
|
Advanced=Avancé
|
||||||
|
Source=Source
|
||||||
|
Border=Bordure
|
||||||
|
Constrain proportions=Conserver proportions
|
||||||
|
Vertical space=Espace vertical
|
||||||
|
Image description=Description de l'image
|
||||||
|
Style=Style
|
||||||
|
Dimensions=Dimensions
|
||||||
|
Insert image=Insérer image
|
||||||
|
Insert date\/time=Insérer date\/heure
|
||||||
|
Remove link=Enlever le lien
|
||||||
|
Url=URL
|
||||||
|
Text to display=Texte à afficher
|
||||||
|
Anchors=Ancres
|
||||||
|
Insert link=Insérer liens
|
||||||
|
New window=Nouvelle fenêtre
|
||||||
|
None=Aucune
|
||||||
|
The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?=L'URL que vous avez entré semble être un lien externe. Voulez-vous ajouter le préfixe http:\/\/ requis?
|
||||||
|
Target=Cible
|
||||||
|
The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?=L'URL que vous avez entré semble être une adresse de courriel. Voulez-vous ajouter le préfixe mailto: requis?
|
||||||
|
Insert\/edit link=Insérer\/éditer le lien
|
||||||
|
Insert\/edit video=Insérer\/éditer la vidéo
|
||||||
|
Poster=Poster
|
||||||
|
Alternative source=Source alternative
|
||||||
|
Paste your embed code below:=Coller le code intégré ci-dessous:
|
||||||
|
Insert video=Insérer video
|
||||||
|
Embed=Intégrer
|
||||||
|
Nonbreaking space=Espaces insécables
|
||||||
|
Page break=Saut de page
|
||||||
|
Paste as text=Coller en tant que texte
|
||||||
|
Preview=Aperçu
|
||||||
|
Print=Imprimer
|
||||||
|
Save=Enregistrer
|
||||||
|
Could not find the specified string.=Impossible de trouver la chaîne spécifiée.
|
||||||
|
Replace=Remplacer
|
||||||
|
Next=Suivant
|
||||||
|
Whole words=Mots entiers
|
||||||
|
Find and replace=Trouver et remplacer
|
||||||
|
Replace with=Remplacer par
|
||||||
|
Find=Trouver
|
||||||
|
Replace all=Tout remplacer
|
||||||
|
Match case=Correspondance de la casse
|
||||||
|
Prev=Précédent
|
||||||
|
Spellcheck=Correcteur d'orthographe
|
||||||
|
Finish=Terminer
|
||||||
|
Ignore all=Ignorer tout
|
||||||
|
Ignore=Ignorer
|
||||||
|
Insert row before=Insérer une ligne avant
|
||||||
|
Rows=Lignes
|
||||||
|
Height=Hauteur
|
||||||
|
Paste row after=Coller une ligne après
|
||||||
|
Alignment=Alignement
|
||||||
|
Column group=Groupe de colonnes
|
||||||
|
Row=Ligne
|
||||||
|
Insert column before=Insérer une colonne avant
|
||||||
|
Split cell=Diviser la cellule
|
||||||
|
Cell padding=Marge intérieure de cellule
|
||||||
|
Cell spacing=Marge extérieure de cellule
|
||||||
|
Row type=Type de ligne
|
||||||
|
Insert table=Insérer tableau
|
||||||
|
Body=Corps
|
||||||
|
Caption=Légende
|
||||||
|
Footer=Pied de page
|
||||||
|
Delete row=Effacer la ligne
|
||||||
|
Paste row before=Coller une ligne avant
|
||||||
|
Scope=Cadre
|
||||||
|
Delete table=Effacer le tableau
|
||||||
|
Header cell=En-tête de cellule
|
||||||
|
Column=Colonne
|
||||||
|
Cell=Cellule
|
||||||
|
Header=En-tête
|
||||||
|
Cell type=Type de cellule
|
||||||
|
Copy row=Copier la ligne
|
||||||
|
Row properties=Propriétés de la ligne
|
||||||
|
Table properties=Propriétés du tableau
|
||||||
|
Row group=Groupe de ligne
|
||||||
|
Right=Droit
|
||||||
|
Insert column after=Insérer une colonne après
|
||||||
|
Cols=Colonnes
|
||||||
|
Insert row after=Insérer une ligne après
|
||||||
|
Width=Largeur
|
||||||
|
Cell properties=Propriétés de la cellule
|
||||||
|
Left=Gauche
|
||||||
|
Cut row=Couper la ligne
|
||||||
|
Delete column=Effacer la colonne
|
||||||
|
Center=Centrer
|
||||||
|
Merge cells=Fusionner les cellules
|
||||||
|
Insert template=Insérer un modèle
|
||||||
|
Templates=Modèles
|
||||||
|
Background color=Couleur de fond
|
||||||
|
Text color=Couleur de texte
|
||||||
|
Show blocks=Montrer les blocs
|
||||||
|
Show invisible characters=Montrer les caractères invisibles
|
||||||
|
Words: {0}=Mots: {0}
|
||||||
|
Insert=Insérer
|
||||||
|
File=Fichier
|
||||||
|
Edit=Editer
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=Zone de texte riche. Appuyer sur ALT-F9 pour afficher le menu. Sur ALT-F10 pour la barre d'outils. Sur ALT-0 for l'aide.
|
||||||
|
Tools=Outils
|
||||||
|
View=Vue
|
||||||
|
Table=Tableau
|
||||||
|
Format=Format
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
|
|
||||||
# markdown editor
|
|
||||||
|
|
||||||
Hyperlink=Hyperlink
|
|
||||||
Please provide the link URL and an optional title=Please provide the link URL and an optional title
|
|
||||||
optional title=optional title
|
|
||||||
Ok=Ok
|
|
||||||
Cancel=Cancel
|
|
||||||
Strong=Strong
|
|
||||||
strong text=strong text
|
|
||||||
Emphasis=Emphasis
|
|
||||||
emphasized text=emphasized text
|
|
||||||
Blockquote=Blockquote
|
|
||||||
Code Sample=Code Sample
|
|
||||||
enter code here=enter code here
|
|
||||||
Image=Image
|
|
||||||
Heading=Heading
|
|
||||||
Numbered List=Numbered List
|
|
||||||
Bulleted List=Bulleted List
|
|
||||||
List item=List item
|
|
||||||
Horizontal Rule=Horizontal Rule
|
|
||||||
Markdown syntax=Markdown syntax
|
|
||||||
Undo=Undo
|
|
||||||
Redo=Redo
|
|
||||||
enter image description here=enter image description here
|
|
||||||
enter link description here=enter link description here
|
|
||||||
Edit mode=Edit mode
|
|
||||||
Vim mode=Vim mode
|
|
||||||
Emacs mode=Emacs mode
|
|
||||||
Normal mode=Normal mode
|
|
||||||
Normal=Normal
|
|
||||||
Light=Light
|
|
||||||
Light editor=Light editor
|
|
||||||
|
|
||||||
Insert Image=Insert Image
|
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -83,6 +83,7 @@ notGoodPassword=Esta não é uma boa senha, o tamanho deve ser de pelo menos 6 c
|
|||||||
|
|
||||||
# note
|
# note
|
||||||
myBlog=Blog
|
myBlog=Blog
|
||||||
|
Explore=Explore
|
||||||
history=Histórico
|
history=Histórico
|
||||||
save=Salvar
|
save=Salvar
|
||||||
editorTips=Dicas
|
editorTips=Dicas
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
Cut=Cut
|
||||||
|
Header 2=Header 2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.
|
||||||
|
Div=Div
|
||||||
|
Paste=Paste
|
||||||
|
Close=Close
|
||||||
|
Font Family=Font Family
|
||||||
|
Pre=Pre
|
||||||
|
Align right=Align right
|
||||||
|
New document=New document
|
||||||
|
Blockquote=Blockquote
|
||||||
|
Numbered list=Numbered list
|
||||||
|
Increase indent=Increase indent
|
||||||
|
Formats=Formats
|
||||||
|
Headers=Headers
|
||||||
|
Select all=Select all
|
||||||
|
Header 3=Header 3
|
||||||
|
Blocks=Blocks
|
||||||
|
Undo=Undo
|
||||||
|
Strikethrough=Strike-through
|
||||||
|
Bullet list=Bullet list
|
||||||
|
Header 1=Header 1
|
||||||
|
Superscript=Superscript
|
||||||
|
Clear formatting=Clear formatting
|
||||||
|
Font Sizes=Font Sizes
|
||||||
|
Subscript=Subscript
|
||||||
|
Header 6=Header 6
|
||||||
|
Redo=Redo
|
||||||
|
Paragraph=Paragraph
|
||||||
|
Ok=Ok
|
||||||
|
Bold=Bold
|
||||||
|
Code=Code
|
||||||
|
Italic=Italic
|
||||||
|
Align center=Align centre
|
||||||
|
Header 5=Header 5
|
||||||
|
Decrease indent=Decrease indent
|
||||||
|
Header 4=Header 4
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.
|
||||||
|
Underline=Underline
|
||||||
|
Cancel=Cancel
|
||||||
|
Justify=Justify
|
||||||
|
Inline=Inline
|
||||||
|
Copy=Copy
|
||||||
|
Align left=Align left
|
||||||
|
Visual aids=Visual aids
|
||||||
|
Lower Greek=Lower Greek
|
||||||
|
Square=Square
|
||||||
|
Default=Default
|
||||||
|
Lower Alpha=Lower Alpha
|
||||||
|
Circle=Circle
|
||||||
|
Disc=Disc
|
||||||
|
Upper Alpha=Upper Alpha
|
||||||
|
Upper Roman=Upper Roman
|
||||||
|
Lower Roman=Lower Roman
|
||||||
|
Name=Name
|
||||||
|
Anchor=Anchor
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=You have unsaved changes are you sure you want to navigate away?
|
||||||
|
Restore last draft=Restore last draft
|
||||||
|
Special character=Special character
|
||||||
|
Source code=Source code
|
||||||
|
Right to left=Right to left
|
||||||
|
Left to right=Left to right
|
||||||
|
Emoticons=Emoticons
|
||||||
|
Robots=Robots
|
||||||
|
Document properties=Document properties
|
||||||
|
Title=Title
|
||||||
|
Keywords=Keywords
|
||||||
|
Encoding=Encoding
|
||||||
|
Description=Description
|
||||||
|
Author=Author
|
||||||
|
Language=Language
|
||||||
|
`ctrl/cmd+shift+c` toggle code=`ctrl/cmd+shift+c` toggle code
|
||||||
|
Fullscreen=Full-screen
|
||||||
|
Horizontal line=Horizontal line
|
||||||
|
Horizontal space=Horizontal space
|
||||||
|
Insert\/edit image=Insert\/edit image
|
||||||
|
General=General
|
||||||
|
Advanced=Advanced
|
||||||
|
Source=Source
|
||||||
|
Border=Border
|
||||||
|
Constrain proportions=Constrain proportions
|
||||||
|
Vertical space=Vertical space
|
||||||
|
Image description=Image description
|
||||||
|
Style=Style
|
||||||
|
Dimensions=Dimensions
|
||||||
|
Insert image=Insert image
|
||||||
|
Insert date\/time=Insert date\/time
|
||||||
|
Remove link=Remove link
|
||||||
|
Url=URL
|
||||||
|
Text to display=Text to display
|
||||||
|
Anchors=Anchors
|
||||||
|
Insert link=Insert link
|
||||||
|
New window=New window
|
||||||
|
None=None
|
||||||
|
The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?=The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?
|
||||||
|
Target=Target
|
||||||
|
The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?=The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?
|
||||||
|
Insert\/edit link=Insert\/edit link
|
||||||
|
Insert\/edit video=Insert\/edit video
|
||||||
|
Poster=Poster
|
||||||
|
Alternative source=Alternative source
|
||||||
|
Paste your embed code below:=Paste your embed code below:
|
||||||
|
Insert video=Insert video
|
||||||
|
Embed=Embed
|
||||||
|
Nonbreaking space=Non-breaking space
|
||||||
|
Page break=Page break
|
||||||
|
Paste as text=Paste as text
|
||||||
|
Preview=Preview
|
||||||
|
Print=Print
|
||||||
|
Save=Save
|
||||||
|
Could not find the specified string.=Could not find the specified string.
|
||||||
|
Replace=Replace
|
||||||
|
Next=Next
|
||||||
|
Whole words=Whole words
|
||||||
|
Find and replace=Find and replace
|
||||||
|
Replace with=Replace with
|
||||||
|
Find=Find
|
||||||
|
Replace all=Replace all
|
||||||
|
Match case=Match case
|
||||||
|
Prev=Prev
|
||||||
|
Spellcheck=Spell-check
|
||||||
|
Finish=Finish
|
||||||
|
Ignore all=Ignore all
|
||||||
|
Ignore=Ignore
|
||||||
|
Insert row before=Insert row before
|
||||||
|
Rows=Rows
|
||||||
|
Height=Height
|
||||||
|
Paste row after=Paste row after
|
||||||
|
Alignment=Alignment
|
||||||
|
Column group=Column group
|
||||||
|
Row=Row
|
||||||
|
Insert column before=Insert column before
|
||||||
|
Split cell=Split cell
|
||||||
|
Cell padding=Cell padding
|
||||||
|
Cell spacing=Cell spacing
|
||||||
|
Row type=Row type
|
||||||
|
Insert table=Insert table
|
||||||
|
Body=Body
|
||||||
|
Caption=Caption
|
||||||
|
Footer=Footer
|
||||||
|
Delete row=Delete row
|
||||||
|
Paste row before=Paste row before
|
||||||
|
Scope=Scope
|
||||||
|
Delete table=Delete table
|
||||||
|
Header cell=Header cell
|
||||||
|
Column=Column
|
||||||
|
Cell=Cell
|
||||||
|
Header=Header
|
||||||
|
Cell type=Cell type
|
||||||
|
Copy row=Copy row
|
||||||
|
Row properties=Row properties
|
||||||
|
Table properties=Table properties
|
||||||
|
Row group=Row group
|
||||||
|
Right=Right
|
||||||
|
Insert column after=Insert column after
|
||||||
|
Cols=Cols
|
||||||
|
Insert row after=Insert row after
|
||||||
|
Width=Width
|
||||||
|
Cell properties=Cell properties
|
||||||
|
Left=Left
|
||||||
|
Cut row=Cut row
|
||||||
|
Delete column=Delete column
|
||||||
|
Center=Centre
|
||||||
|
Merge cells=Merge cells
|
||||||
|
Insert template=Insert template
|
||||||
|
Templates=Templates
|
||||||
|
Background color=Background colour
|
||||||
|
Text color=Text colour
|
||||||
|
Show blocks=Show blocks
|
||||||
|
Show invisible characters=Show invisible characters
|
||||||
|
Words: {0}=Words: {0}
|
||||||
|
Insert=Insert
|
||||||
|
File=File
|
||||||
|
Edit=Edit
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help
|
||||||
|
Tools=Tools
|
||||||
|
View=View
|
||||||
|
Table=Table
|
||||||
|
Format=Format
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -15,6 +15,7 @@ try=体验一下
|
|||||||
usernameOrEmail=用户名或Email
|
usernameOrEmail=用户名或Email
|
||||||
password=密码
|
password=密码
|
||||||
home=主页
|
home=主页
|
||||||
|
Leanote Explore=Leanote探索
|
||||||
desktopApp=客户端
|
desktopApp=客户端
|
||||||
aboutLeanote=关于Leanote
|
aboutLeanote=关于Leanote
|
||||||
suggestions=建议
|
suggestions=建议
|
||||||
@@ -105,6 +106,7 @@ notGoodPassword=密码至少6位
|
|||||||
|
|
||||||
# 笔记主页
|
# 笔记主页
|
||||||
myBlog=我的博客
|
myBlog=我的博客
|
||||||
|
Explore=探索
|
||||||
history=历史记录
|
history=历史记录
|
||||||
save=保存
|
save=保存
|
||||||
editorTips=帮助
|
editorTips=帮助
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
Cut=剪切
|
||||||
|
Header 2=标题2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=你的浏览器不支持对剪贴板的访问,请使用Ctrl+X\/C\/V键进行复制粘贴。
|
||||||
|
Div=Div区块
|
||||||
|
Paste=粘贴
|
||||||
|
Close=关闭
|
||||||
|
Font Family=字体
|
||||||
|
Pre=预格式文本
|
||||||
|
Align right=右对齐
|
||||||
|
New document=新文档
|
||||||
|
Blockquote=引用
|
||||||
|
Numbered list=编号列表
|
||||||
|
Increase indent=增加缩进
|
||||||
|
Formats=格式
|
||||||
|
Headers=标题
|
||||||
|
Select all=全选
|
||||||
|
Header 3=标题3
|
||||||
|
Blocks=区块
|
||||||
|
Undo=撤消
|
||||||
|
Strikethrough=删除线
|
||||||
|
Bullet list=项目符号
|
||||||
|
Header 1=标题1
|
||||||
|
Superscript=上标
|
||||||
|
Clear formatting=清除格式
|
||||||
|
Font Sizes=字号
|
||||||
|
Subscript=下标
|
||||||
|
Header 6=标题6
|
||||||
|
Redo=重复
|
||||||
|
Paragraph=段落
|
||||||
|
Ok=确定
|
||||||
|
Bold=粗体
|
||||||
|
Code=代码
|
||||||
|
Italic=斜体
|
||||||
|
Align center=居中
|
||||||
|
Header 5=标题5
|
||||||
|
Decrease indent=减少缩进
|
||||||
|
Header 4=标题4
|
||||||
|
Convert Code=转换成文本
|
||||||
|
toggleCode=ctrl+shift+c 切换代码
|
||||||
|
Language=代码语言
|
||||||
|
`ctrl/cmd+shift+c` toggle code=`ctrl/cmd+shift+c` 切换代码
|
||||||
|
Toggle ace with raw html=Ace代码与普通Pre代码切换
|
||||||
|
Inline Code=<code>
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=当前为纯文本粘贴模式,再次点击可以回到普通粘贴模式。
|
||||||
|
Underline=下划线
|
||||||
|
Cancel=取消
|
||||||
|
Justify=两端对齐
|
||||||
|
Inline=文本
|
||||||
|
Copy=复制
|
||||||
|
Align left=左对齐
|
||||||
|
Visual aids=网格线
|
||||||
|
Lower Greek=小写希腊字母
|
||||||
|
Square=方块
|
||||||
|
Default=默认
|
||||||
|
Lower Alpha=小写英文字母
|
||||||
|
Circle=空心圆
|
||||||
|
Disc=实心圆
|
||||||
|
Upper Alpha=大写英文字母
|
||||||
|
Upper Roman=大写罗马字母
|
||||||
|
Lower Roman=小写罗马字母
|
||||||
|
Name=名称
|
||||||
|
Anchor=锚点
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=你还有文档尚未保存,确定要离开?
|
||||||
|
Restore last draft=恢复上次的草稿
|
||||||
|
Special character=特殊符号
|
||||||
|
Source code=源代码
|
||||||
|
Right to left=从右到左
|
||||||
|
Left to right=从左到右
|
||||||
|
Emoticons=表情
|
||||||
|
Robots=机器人
|
||||||
|
Document properties=文档属性
|
||||||
|
Title=标题
|
||||||
|
Keywords=关键词
|
||||||
|
Encoding=编码
|
||||||
|
Description=描述
|
||||||
|
Author=作者
|
||||||
|
Fullscreen=全屏
|
||||||
|
Horizontal line=水平分割线
|
||||||
|
Horizontal space=水平边距
|
||||||
|
Insert\/edit image=上传/插入图片
|
||||||
|
Insert\/edit mind map=新建/编辑思维导图
|
||||||
|
Insert Mind Map=插入思维导图
|
||||||
|
Mind Map=思维导图
|
||||||
|
Image=图片
|
||||||
|
Insert Image=插入
|
||||||
|
General=普通
|
||||||
|
Advanced=高级
|
||||||
|
Source=地址
|
||||||
|
Border=边框
|
||||||
|
Constrain proportions=保持纵横比
|
||||||
|
Vertical space=垂直边距
|
||||||
|
Image description=图片描述
|
||||||
|
Style=样式
|
||||||
|
Dimensions=大小
|
||||||
|
Insert image=插入图片
|
||||||
|
Insert date\/time=插入日期\/时间
|
||||||
|
Remove link=删除链接
|
||||||
|
Url=地址
|
||||||
|
Text to display=显示文字
|
||||||
|
Anchors=锚点
|
||||||
|
Insert link=插入链接
|
||||||
|
New window=在新窗口打开
|
||||||
|
None=无
|
||||||
|
Target=打开方式
|
||||||
|
Insert\/edit link=插入\/编辑链接
|
||||||
|
Insert\/edit video=插入\/编辑视频
|
||||||
|
Poster=封面
|
||||||
|
Alternative source=镜像
|
||||||
|
Paste your embed code below:=将内嵌代码粘贴在下面:
|
||||||
|
Insert video=插入视频
|
||||||
|
Embed=内嵌
|
||||||
|
Nonbreaking space=不间断空格
|
||||||
|
Page break=分页符
|
||||||
|
Paste as text=粘贴为文本
|
||||||
|
Preview=预览
|
||||||
|
Print=打印
|
||||||
|
Save=保存
|
||||||
|
Could not find the specified string.=未找到搜索内容.
|
||||||
|
Replace=替换
|
||||||
|
Next=下一个
|
||||||
|
Whole words=全字匹配
|
||||||
|
Find and replace=查找和替换
|
||||||
|
Replace with=替换为
|
||||||
|
Find=查找
|
||||||
|
Replace all=全部替换
|
||||||
|
Match case=区分大小写
|
||||||
|
Prev=上一个
|
||||||
|
Spellcheck=拼写检查
|
||||||
|
Finish=完成
|
||||||
|
Ignore all=全部忽略
|
||||||
|
Ignore=忽略
|
||||||
|
Insert row before=在上方插入
|
||||||
|
Rows=行
|
||||||
|
Height=高
|
||||||
|
Paste row after=粘贴到下方
|
||||||
|
Alignment=对齐方式
|
||||||
|
Column group=列组
|
||||||
|
Row=行
|
||||||
|
Insert column before=在左侧插入
|
||||||
|
Split cell=拆分单元格
|
||||||
|
Cell padding=单元格内边距
|
||||||
|
Cell spacing=单元格外间距
|
||||||
|
Row type=行类型
|
||||||
|
Insert table=插入表格
|
||||||
|
Body=表体
|
||||||
|
Caption=标题
|
||||||
|
Footer=表尾
|
||||||
|
Delete row=删除行
|
||||||
|
Paste row before=粘贴到上方
|
||||||
|
Scope=范围
|
||||||
|
Delete table=删除表格
|
||||||
|
Header cell=表头单元格
|
||||||
|
Column=列
|
||||||
|
Cell=单元格
|
||||||
|
Header=表头
|
||||||
|
Cell type=单元格类型
|
||||||
|
Copy row=复制行
|
||||||
|
Row properties=行属性
|
||||||
|
Table properties=表格属性
|
||||||
|
Row group=行组
|
||||||
|
Right=右对齐
|
||||||
|
Insert column after=在右侧插入
|
||||||
|
Cols=列
|
||||||
|
Insert row after=在下方插入
|
||||||
|
Width=宽
|
||||||
|
Cell properties=单元格属性
|
||||||
|
Left=左对齐
|
||||||
|
Cut row=剪切行
|
||||||
|
Delete column=删除列
|
||||||
|
Center=居中
|
||||||
|
Merge cells=合并单元格
|
||||||
|
Insert template=插入模板
|
||||||
|
Templates=模板
|
||||||
|
Background color=背景色
|
||||||
|
Text color=文字颜色
|
||||||
|
Show blocks=显示区块边框
|
||||||
|
Show invisible characters=显示不可见字符
|
||||||
|
Words: {0}=字数:{0}
|
||||||
|
Insert=插入
|
||||||
|
File=文件
|
||||||
|
Edit=编辑
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=在编辑区按ALT-F9打开菜单,按ALT-F10打开工具栏,按ALT-0查看帮助
|
||||||
|
Tools=工具
|
||||||
|
View=视图
|
||||||
|
Table=表格
|
||||||
|
Format=格式
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
# album image
|
||||||
|
Images=圖片
|
||||||
|
Upload=上傳
|
||||||
|
Image URL=圖片地址
|
||||||
|
Albums=相冊
|
||||||
|
Default=預設
|
||||||
|
File title search=通過標題搜索
|
||||||
|
Go to upload images=去上傳圖片
|
||||||
|
Rename=重新命名
|
||||||
|
Add=新增
|
||||||
|
Add Album=新增相簿
|
||||||
|
Add Image=新增圖片
|
||||||
|
Can't load this url=不能載入該圖片
|
||||||
|
No Images=無圖片
|
||||||
|
Click to upload images Or Drop images to here=點擊上傳圖片或將圖片拖至此
|
||||||
|
|
||||||
|
Cannot delete default album=不能刪除預設相簿
|
||||||
|
Cannot rename default album=不能重命名預設相簿
|
||||||
|
This album has images, please delete it's images at first.=相簿內有圖片, 不能刪除
|
||||||
|
|
||||||
|
Rename Album=重新命名
|
||||||
|
Add Success!=新增成功!
|
||||||
|
Rename Success!=重新命名成功!
|
||||||
|
Delete Success!=刪除成功
|
||||||
|
Are you sure to delete this image ?=確定刪除該圖片?
|
||||||
|
click to remove this image=刪除圖片
|
||||||
|
error=錯誤
|
||||||
|
Error=錯誤
|
||||||
|
Prev=上一頁
|
||||||
|
Next=下一頁
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
# blog
|
||||||
|
blog=部落格
|
||||||
|
aboutMe=關於我
|
||||||
|
blogSet=部落格設定
|
||||||
|
|
||||||
|
blogNavs=導航
|
||||||
|
quickLinks=快速連結
|
||||||
|
latestPosts=最近發表
|
||||||
|
|
||||||
|
noBlog=無部落格
|
||||||
|
noTag=無
|
||||||
|
blogClass=分類
|
||||||
|
updatedTime=更新
|
||||||
|
createdTime=建立
|
||||||
|
fullBlog=全文
|
||||||
|
blogNav=導航
|
||||||
|
more=更多...
|
||||||
|
previous=上一頁
|
||||||
|
next=下一頁
|
||||||
|
|
||||||
|
#
|
||||||
|
# set blog
|
||||||
|
#
|
||||||
|
blogSet=部落格設定
|
||||||
|
baseInfoSet=基本設定
|
||||||
|
commentSet=評論設定
|
||||||
|
themeSet=主題設定
|
||||||
|
theme=主題
|
||||||
|
blogName=部落格標題
|
||||||
|
blogLogo=部落格Logo
|
||||||
|
blogDesc=部落格描述
|
||||||
|
aboutMe=關於我
|
||||||
|
|
||||||
|
#domain
|
||||||
|
domainSet=域名設定
|
||||||
|
subDomain=部落格子域名
|
||||||
|
domain=自定義域名
|
||||||
|
|
||||||
|
# theme
|
||||||
|
elegant=大氣
|
||||||
|
navFixed=導航左側固定
|
||||||
|
|
||||||
|
openComment=開啟評論?
|
||||||
|
chooseComment=選擇評論系統
|
||||||
|
disqusHelp=請填寫您申請的Disqus唯一url前綴. 建議您申請Disqus帳號, 這樣可以自己管理評論. 或使用leanote的預設Disqus Id.
|
||||||
|
needHelp=需要幫助?
|
||||||
|
blogLogoTips=上傳logo將顯示logo(替代部落格標題)
|
||||||
|
saveSuccess=保存成功
|
||||||
|
|
||||||
|
community=社區
|
||||||
|
home=主頁
|
||||||
|
none=無
|
||||||
|
moreShare=更多分享
|
||||||
|
sinaWeibo=新浪微博
|
||||||
|
weixin=微信
|
||||||
|
tencentWeibo=騰訊微博
|
||||||
|
qqZone=QQ空間
|
||||||
|
renren=人人網
|
||||||
|
report=檢舉
|
||||||
|
like=讚
|
||||||
|
unlike=取消讚
|
||||||
|
viewers=人讀過
|
||||||
|
author=作者
|
||||||
|
delete=刪除
|
||||||
|
reply=回復
|
||||||
|
comment=評論
|
||||||
|
comments=條評論
|
||||||
|
cancel=取消
|
||||||
|
confirm=確認
|
||||||
|
signIn=登錄
|
||||||
|
signUp=註冊
|
||||||
|
submitComment=發表評論
|
||||||
|
reportReason1=不友善內容
|
||||||
|
reportReason2=廣告等垃圾信息
|
||||||
|
reportReason3=違法違規內容
|
||||||
|
reportReason4=不宜公開討論的政治內容
|
||||||
|
other=其它
|
||||||
|
reportReason=檢舉理由
|
||||||
|
chooseReason=請選擇檢舉理由
|
||||||
|
reportSuccess=檢舉成功, 我們處理後會通知作者, 感謝您的監督
|
||||||
|
error=錯誤
|
||||||
|
reportComment?=檢舉該評論?
|
||||||
|
reportBlog?=檢舉該部落格?
|
||||||
|
confirmDeleteComment=確定刪除該評論?
|
||||||
|
scanQRCode=打開微信掃一掃二維碼
|
||||||
|
|
||||||
|
justNow=剛剛
|
||||||
|
minutesAgo=分鐘前
|
||||||
|
hoursAgo=個小時前
|
||||||
|
daysAgo=天前
|
||||||
|
weeksAgo=周前
|
||||||
|
monthsAgo=個月前
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
a=a
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
# markdown editor
|
||||||
|
|
||||||
|
Hyperlink=超連結
|
||||||
|
Please provide the link URL and an optional title=請填寫連結和一個可選的標題
|
||||||
|
optional title=可選標題
|
||||||
|
Ok=確定
|
||||||
|
Cancel=取消
|
||||||
|
Strong=粗體
|
||||||
|
strong text=粗體
|
||||||
|
Emphasis=斜體
|
||||||
|
emphasized text=斜體
|
||||||
|
Blockquote=引用
|
||||||
|
Code Sample=代碼
|
||||||
|
enter code here=代碼
|
||||||
|
Image=圖片
|
||||||
|
Heading=標題
|
||||||
|
Numbered List=有序列表
|
||||||
|
Bulleted List=無序列表
|
||||||
|
List item=項目
|
||||||
|
Horizontal Rule=水平線
|
||||||
|
Markdown syntax=Markdown 語法
|
||||||
|
Undo=還原
|
||||||
|
Redo=重作
|
||||||
|
enter image description here=圖片標題
|
||||||
|
enter link description here=連結標題
|
||||||
|
Edit mode=編輯模式
|
||||||
|
Vim mode=Vim模式
|
||||||
|
Emacs mode=Emacs模式
|
||||||
|
Normal mode=普通模式
|
||||||
|
Normal=普通
|
||||||
|
Light=輕量
|
||||||
|
Light editor=輕量編輯器
|
||||||
|
|
||||||
|
Insert Image=插入
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
####################
|
||||||
|
# 個人中心
|
||||||
|
####################
|
||||||
|
|
||||||
|
memberCenter=個人中心
|
||||||
|
userNotExists=使用者尚未註冊
|
||||||
|
hasUsers=使用者已存在
|
||||||
|
Leanote Blog Theme Api=Leanote博客主題API
|
||||||
|
My Group=我的群組
|
||||||
|
group=群組
|
||||||
|
newGroup=新增群組
|
||||||
|
deleteGroup=刪除群組
|
||||||
|
addMemberTips=輸入使用者名稱或電子郵件建立使用者
|
||||||
|
deleteMember=刪除使用者
|
||||||
|
forbiddenNotMyGroup=無權限操作, 非該群組的所有者
|
||||||
|
userExistsInGroup=已存在該使用者
|
||||||
|
notMyGroup=非該組組的所有者
|
||||||
|
|
||||||
|
# 博客列表
|
||||||
|
|
||||||
|
# 博客摘要設定
|
||||||
|
|
||||||
|
Abstract=摘要
|
||||||
|
Description=描述
|
||||||
|
Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=以下內容設定後, 以後修改筆記時將不自動獲取. 若將該文章取消為博客後, 以下內容會自動獲取.
|
||||||
|
Main Image=主要圖片
|
||||||
|
Get next image as main image from content=從筆記中自動取得一張
|
||||||
|
Raw Content=原文
|
||||||
|
|
||||||
|
# member title
|
||||||
|
Leanote Member Center=Leanote 個人中心
|
||||||
|
Username=使用者名稱
|
||||||
|
Email=Email
|
||||||
|
Password=密碼
|
||||||
|
Avatar=頭像
|
||||||
|
Add Account=新增Leanote帳號
|
||||||
|
Update Post Abstract=更新博文摘要
|
||||||
|
Blog Base Info=博客基本設定
|
||||||
|
Comment=評論設定
|
||||||
|
Posts=博文管理
|
||||||
|
Domain=域名
|
||||||
|
Paging=分頁
|
||||||
|
Category=分類管理
|
||||||
|
Add Single=添加單頁
|
||||||
|
Update Single=修改單頁
|
||||||
|
Single=單頁管理
|
||||||
|
Theme=主題
|
||||||
|
Update Theme=修改主題
|
||||||
|
|
||||||
|
|
||||||
|
#memeber
|
||||||
|
welcomeToLeanote=歡迎來到leanote
|
||||||
|
accountInfo=帳戶資訊
|
||||||
|
accountType=帳戶類型
|
||||||
|
premiumAccountType=旗艦套餐
|
||||||
|
normalAccountType=共享套餐
|
||||||
|
imageSize=圖片空間
|
||||||
|
attachSize=附件空間
|
||||||
|
totalTraffic=流量
|
||||||
|
upgrade=升級套餐
|
||||||
|
leanoteEvents=Leanote動態
|
||||||
|
addLeanoteAccount=新增Leanote帳號
|
||||||
|
defaultComment=預設leanote評論系統
|
||||||
|
upgradeAccountTips=Leanote支持綁定自己的域名到博客上, 請 <a class="btn btn-default" href="/service">升級您的帳戶</a>
|
||||||
|
cateIsPublicNotebook=分類是公開為博客的記事本
|
||||||
|
dragAndSort=拖動可排序
|
||||||
|
permanentLink=固定連結
|
||||||
|
cate=分類
|
||||||
|
noCates=無分類
|
||||||
|
single=單頁面
|
||||||
|
singleTips=您可以添加多個單頁面
|
||||||
|
addSingle=添加單頁面
|
||||||
|
updateSingle=修改單頁面
|
||||||
|
inputSingleTitle=請輸入單頁面標題
|
||||||
|
saveSort=保存排序
|
||||||
|
pagingAndSort=分頁與排序設定
|
||||||
|
perPageSize=每頁記錄數
|
||||||
|
sortField=排序字段
|
||||||
|
sortType=排序類型
|
||||||
|
publicTime=發表時間
|
||||||
|
createdTime=建立時間
|
||||||
|
updatedTime=更新時間
|
||||||
|
desc=降序
|
||||||
|
asc=升序
|
||||||
|
postList=文章列表
|
||||||
|
hasSelfDefined=已設定
|
||||||
|
noSelfDefined=未設定
|
||||||
|
setAbstract=摘要設定
|
||||||
|
title=標題
|
||||||
|
content=內容
|
||||||
|
|
||||||
|
addTheme=新增主題
|
||||||
|
importTheme=匯入主題
|
||||||
|
exportTheme=匯出主題
|
||||||
|
export=匯出
|
||||||
|
preview=預覽
|
||||||
|
edit=編輯
|
||||||
|
use=使用
|
||||||
|
install=安裝
|
||||||
|
currentTheme=當前主題
|
||||||
|
myOtherThemes=我的其它主題
|
||||||
|
leanoteThemeMarket=Leanote主題市場
|
||||||
|
updateTheme=編輯主題
|
||||||
|
tplStyleScript=模板, 樣式, 腳本
|
||||||
|
newFile=新文件
|
||||||
|
image=圖片
|
||||||
|
currentFile=當前文件
|
||||||
|
tpl=模板
|
||||||
|
style=樣式
|
||||||
|
script=腳本
|
||||||
|
header=頭部
|
||||||
|
footer=底部
|
||||||
|
index=首頁
|
||||||
|
cate=分類
|
||||||
|
search=搜索頁
|
||||||
|
single=單頁
|
||||||
|
archive=歸檔頁
|
||||||
|
post=文章頁
|
||||||
|
tags=標簽頁
|
||||||
|
tag_posts=標簽文章頁
|
||||||
|
share_comment=分享評論
|
||||||
|
themeJson=主題配置
|
||||||
|
paging=分頁
|
||||||
|
highlight=高亮
|
||||||
|
|
||||||
|
# view js
|
||||||
|
|
||||||
|
Are you sure ?=你確定執行該操作?
|
||||||
|
Are you sure to install it ?=你確定安裝該主題?
|
||||||
|
Are you sure to delete=你確定刪除
|
||||||
|
Success=成功
|
||||||
|
Error=錯誤
|
||||||
|
File exists=檔案已存在
|
||||||
|
Delete file=刪除檔案
|
||||||
|
No images=無圖片
|
||||||
|
Filename=文件名
|
||||||
|
Group Title=群組標題
|
||||||
@@ -0,0 +1,319 @@
|
|||||||
|
# leanote
|
||||||
|
app=Leanote
|
||||||
|
moto=不只是筆記!
|
||||||
|
moto2=知識管理, 博客, 分享, 協作... 盡在Leanote
|
||||||
|
moto3=簡約而不簡單
|
||||||
|
fork github=Github 源碼
|
||||||
|
|
||||||
|
# 首頁
|
||||||
|
openSource=開源
|
||||||
|
Desktop App=桌面客戶端
|
||||||
|
forgetPassword = 忘記密碼?
|
||||||
|
or=或
|
||||||
|
try=體驗一下
|
||||||
|
3th=第三方登入
|
||||||
|
usernameOrEmail=使用者名稱或Email
|
||||||
|
password=密碼
|
||||||
|
home=首頁
|
||||||
|
Leanote Explore=Leanote探索
|
||||||
|
desktopApp=客戶端
|
||||||
|
aboutLeanote=關於Leanote
|
||||||
|
suggestions=建議
|
||||||
|
yourSuggestions=說明完善Leanote
|
||||||
|
leanoteBlog=官方博客
|
||||||
|
knowledge=知識
|
||||||
|
knowledgeInfo=leanote是一個筆記, 你可以用它來管理自己的知識.
|
||||||
|
share=分享
|
||||||
|
shareInfo=你也可以將知識分享給你的好友.
|
||||||
|
cooperation=協作
|
||||||
|
cooperationInfo=分享給好友的同時也可以讓你的好友和你一起來完善它.
|
||||||
|
blog=博客
|
||||||
|
blogInfo=將筆記公開, 讓知識傳播的更遠!
|
||||||
|
suggestionsInfo=說明我們完善leanote
|
||||||
|
yourContact=您的聯絡方式
|
||||||
|
emailOrOthers=Email或其它聯絡方式
|
||||||
|
captcha=驗證碼
|
||||||
|
reloadCaptcha=刷新驗證碼
|
||||||
|
captchaError=驗證碼錯誤
|
||||||
|
inputCaptcha=請輸入驗證碼
|
||||||
|
noTag=無標簽
|
||||||
|
|
||||||
|
hi=Hi
|
||||||
|
welcomeUseLeanote=Welcome!
|
||||||
|
myNote=My note
|
||||||
|
curUser=Email
|
||||||
|
|
||||||
|
# form
|
||||||
|
submit=送出
|
||||||
|
Submit=送出
|
||||||
|
register=註冊
|
||||||
|
login=登入
|
||||||
|
Password=密碼
|
||||||
|
password2=請確認密碼
|
||||||
|
email=Email
|
||||||
|
inputUsername=請輸入使用者名稱或Email
|
||||||
|
inputEmail=請輸入Email
|
||||||
|
wrongEmail=Email錯誤
|
||||||
|
wrongUsernameOrPassword=使用者名稱或密碼錯誤
|
||||||
|
inputPassword=請輸入密碼
|
||||||
|
inputLoginPasswordTips=請輸入登入密碼
|
||||||
|
wrongPassword=密碼錯誤
|
||||||
|
logining=登入
|
||||||
|
loginSuccess=登入成功
|
||||||
|
|
||||||
|
hi=Hi
|
||||||
|
welcomeUseLeanote=歡迎使用leanote
|
||||||
|
myNote=我的筆記
|
||||||
|
curUser=當前登入帳戶
|
||||||
|
|
||||||
|
# form
|
||||||
|
submit=送出
|
||||||
|
login=登入
|
||||||
|
register=註冊
|
||||||
|
password2=確認密碼
|
||||||
|
email=Email
|
||||||
|
inputUsername=請輸入使用者名稱或Email
|
||||||
|
inputEmail=請輸入Email
|
||||||
|
wrongEmail=Email格式有誤
|
||||||
|
wrongUsernameOrPassword=使用者名稱或密碼錯誤
|
||||||
|
inputPassword=請輸入密碼
|
||||||
|
wrongPassword=密碼錯誤
|
||||||
|
logining=正在登入
|
||||||
|
loginSuccess=登入成功, 正在跳轉
|
||||||
|
ing=正在處理
|
||||||
|
use = 使用
|
||||||
|
hadAcount = 已有帳戶?
|
||||||
|
hasAcount = 還無帳戶?
|
||||||
|
signInWithThird=使用第三方帳號登入
|
||||||
|
|
||||||
|
# 註冊
|
||||||
|
registerSuccessAndRdirectToNote=註冊成功, 正在跳轉...
|
||||||
|
userHasBeenRegistered=%s已被註冊
|
||||||
|
|
||||||
|
# 找回密碼
|
||||||
|
passwordTips=密碼至少6位
|
||||||
|
findPassword=找回密碼
|
||||||
|
findPasswordSendEmailOver=已經將修改密碼的連結傳送到您的郵箱, 請查收郵件.
|
||||||
|
checkEmai=查收郵箱
|
||||||
|
updatePassword=修改密碼
|
||||||
|
findPasswordTimeout=連結已過期
|
||||||
|
reFindPassword=重新找回密碼
|
||||||
|
updatePassword=修改密碼
|
||||||
|
updatePasswordSuccessRedirectToLogin=修改成功, 正在跳轉到登入頁
|
||||||
|
inputPassword2=請再次輸入密碼
|
||||||
|
confirmPassword=兩次密碼輸入不一致
|
||||||
|
notGoodPassword=密碼至少6位
|
||||||
|
|
||||||
|
# 筆記首頁
|
||||||
|
myBlog=我的博客
|
||||||
|
Explore=探索
|
||||||
|
history=歷史記錄
|
||||||
|
save=儲存
|
||||||
|
editorTips=說明
|
||||||
|
editorTipsInfo=<h4>1. 快捷鍵</h4>ctrl+shift+c 代碼塊切換 <h4>2. shift+enter 跳出當前區域</h4>比如在代碼塊中<img src="/images/outofcode.png" style="width: 90px"/>按shift+enter可跳出當前代碼塊.
|
||||||
|
newNote=新記事
|
||||||
|
newMarkdownNote=新Markdown記事
|
||||||
|
noNoteNewNoteTips=該記事本下空空如也...何不
|
||||||
|
canntNewNoteTips=Sorry, 這裏不能新增筆記的. 你需要先選擇一個記事本.
|
||||||
|
new=新建
|
||||||
|
newMarkdown=新Markdown記事
|
||||||
|
clickAddTag=點擊新增標簽
|
||||||
|
notebook=記事本
|
||||||
|
note=筆記
|
||||||
|
myNotebook=我的記事本
|
||||||
|
addNotebook=新增記事本
|
||||||
|
search=搜尋
|
||||||
|
clearSearch=清除搜尋
|
||||||
|
all=最新
|
||||||
|
trash=垃圾桶
|
||||||
|
delete=刪除
|
||||||
|
unTitled=無標題
|
||||||
|
defaultShare=預設分享
|
||||||
|
leftHidden=隱藏左側
|
||||||
|
leftShow=展開左側
|
||||||
|
nav=文檔導航
|
||||||
|
writingMode=寫作模式
|
||||||
|
normalMode=普通模式
|
||||||
|
saving=正在儲存
|
||||||
|
saveSuccess=儲存成功
|
||||||
|
SearchNote=搜尋筆記
|
||||||
|
SearchNotebook=搜尋記事本
|
||||||
|
Choose File=選擇文件
|
||||||
|
Download All=下載全部
|
||||||
|
Information=信息
|
||||||
|
Are you sure to delete it ?=確認刪除?
|
||||||
|
Insert link into content=將附件連結插入到內容中
|
||||||
|
Download=下載
|
||||||
|
Delete=刪除
|
||||||
|
Drop images to here=將圖片拖動至此
|
||||||
|
Toggle Modify with Readonly=編輯與只讀切換
|
||||||
|
|
||||||
|
update=更新
|
||||||
|
create=建立
|
||||||
|
Update Time=更新時間
|
||||||
|
Create Time=建立時間
|
||||||
|
Post Url=博文連結
|
||||||
|
|
||||||
|
demoRegister=<a href="/register">立即註冊</a>
|
||||||
|
|
||||||
|
close=關閉
|
||||||
|
cancel=取消
|
||||||
|
send=傳送
|
||||||
|
|
||||||
|
# 標簽
|
||||||
|
tag=標簽
|
||||||
|
myTag=我的標簽
|
||||||
|
red=紅色
|
||||||
|
yellow=黃色
|
||||||
|
blue=藍色
|
||||||
|
green=綠色
|
||||||
|
|
||||||
|
# 設定
|
||||||
|
accountSetting=帳戶設定
|
||||||
|
logout=退出
|
||||||
|
basicInfo=基本信息
|
||||||
|
basicInfoSet=博客基本設定
|
||||||
|
updateEmail=修改Email
|
||||||
|
usernameSetting=使用者名稱設定
|
||||||
|
chooseImage=選擇圖片
|
||||||
|
oldPassword=舊密碼
|
||||||
|
newPassword=新密碼
|
||||||
|
admin=後台管理
|
||||||
|
|
||||||
|
default=預設
|
||||||
|
simple=簡約
|
||||||
|
|
||||||
|
# tinymce
|
||||||
|
uploadImage=上傳圖片
|
||||||
|
|
||||||
|
# blog
|
||||||
|
aboutMe=關於我
|
||||||
|
blogSet=博客設定
|
||||||
|
|
||||||
|
# error
|
||||||
|
notFound=該頁面不存在
|
||||||
|
|
||||||
|
# index
|
||||||
|
discussion=社區討論
|
||||||
|
download=下載
|
||||||
|
howToInstallLeanote=leanote安裝步驟
|
||||||
|
|
||||||
|
#
|
||||||
|
attachments = 附件
|
||||||
|
donate = 捐贈
|
||||||
|
|
||||||
|
# contextmenu
|
||||||
|
shareToFriends=分享給好友
|
||||||
|
publicAsBlog=公開為博客
|
||||||
|
cancelPublic=取消公開為博客
|
||||||
|
move=移動
|
||||||
|
copy=複製
|
||||||
|
rename=重命名
|
||||||
|
exportPdf=匯出PDF
|
||||||
|
addChildNotebook=新增子記事本
|
||||||
|
deleteAllShared=刪除所有分享
|
||||||
|
deleteSharedNotebook=刪除分享記事本
|
||||||
|
copyToMyNotebook=複製到我的記事本
|
||||||
|
|
||||||
|
####note-dev
|
||||||
|
emailInSending=正在傳送郵件到
|
||||||
|
checkEmail=查看郵件
|
||||||
|
setUsername=使用者名稱設定
|
||||||
|
setUsernameTips=你的郵箱是 <code>%s</code>, 可以再設定一個唯一的使用者名稱.<br />使用者名稱至少4位, 不可含特殊字符.
|
||||||
|
currentEmail=當前郵箱為: <code>%s</code>
|
||||||
|
updateEmail=修改郵箱
|
||||||
|
updateEmailTips=郵箱修改後, 驗證之後才有效, 驗證之後新的郵箱地址將會作為登入帳號使用.
|
||||||
|
sendVerifiedEmail=傳送驗證郵箱
|
||||||
|
sendSuccess=傳送成功
|
||||||
|
sendFailed=傳送失敗
|
||||||
|
verified=已驗證
|
||||||
|
unVerified=未驗證
|
||||||
|
verifiedNow=現在去驗證
|
||||||
|
resendVerifiedEmail=重新傳送驗證郵件
|
||||||
|
# 分享
|
||||||
|
defaultShare=預設分享
|
||||||
|
addShare=新增分享
|
||||||
|
friendEmail=好友郵箱
|
||||||
|
permission=權限
|
||||||
|
readOnly=只讀
|
||||||
|
writable=可寫
|
||||||
|
inputFriendEmail=請輸入好友郵箱
|
||||||
|
clickToChangePermission=點擊改變權限
|
||||||
|
sendInviteEmailToYourFriend=傳送邀請email給Ta
|
||||||
|
copySuccess=複製成功
|
||||||
|
copyFailed=對不起, 複製失敗, 請自行複製
|
||||||
|
friendNotExits=該用戶還沒有註冊%s, 複製邀請連結傳送給Ta, 邀請連結: %s
|
||||||
|
emailBodyRequired=郵件內容不能為空
|
||||||
|
clickToCopy=點擊複製
|
||||||
|
sendSuccess=傳送成功
|
||||||
|
inviteEmailBody=Hi, 你好, 我是%s, %s非常好用, 快來註冊吧!
|
||||||
|
<span></span> notes selected=當前選中了 <span></span> 篇筆記
|
||||||
|
|
||||||
|
# 歷史記錄
|
||||||
|
historiesNum=leanote會儲存筆記的最近<b>10</b>份歷史記錄
|
||||||
|
noHistories=無歷史記錄
|
||||||
|
datetime=日期
|
||||||
|
restoreFromThisVersion=從該版本還原
|
||||||
|
confirmBackup=確定要從該版還原? 還原前leanote會備份當前版本到歷史記錄中.
|
||||||
|
createAccount=建立帳號
|
||||||
|
createAccountSuccess=帳號建立成功
|
||||||
|
createAccountFailed=帳號建立失敗
|
||||||
|
thirdCreateAcountTips=您現在使用的是第三方帳號登入%(app)s, 您也可以註冊%(app)s帳號登入, 趕緊註冊一個吧. <br />註冊成功後仍可以使用第三方帳號登入leanote並管理您現有的筆記.
|
||||||
|
|
||||||
|
## valid msg
|
||||||
|
cannotUpdateDemo=抱歉, Demo用戶不允許修改
|
||||||
|
inputUsername=請輸入使用者名稱
|
||||||
|
updateUsernameSuccess=使用者名稱修改成功
|
||||||
|
usernameIsExisted=使用者名稱已存在
|
||||||
|
noSpecialChars=不能包含特殊字符
|
||||||
|
minLength=長度至少為%s
|
||||||
|
errorEmail=請輸入正確的email
|
||||||
|
verifiedEmaiHasSent=驗證郵件已傳送, 請及時查閱郵件並驗證.
|
||||||
|
emailSendFailed=郵件傳送失敗
|
||||||
|
inputPassword=請輸入密碼
|
||||||
|
inputNewPassword=請輸入新密碼
|
||||||
|
inputPassword2=請輸入確認密碼
|
||||||
|
errorPassword=請輸入長度不少於6位的密碼, 盡量復雜
|
||||||
|
oldPasswordError=舊密碼錯誤
|
||||||
|
confirmPassword=兩次密碼輸入不正確
|
||||||
|
updatePasswordSuccess=修改密碼成功
|
||||||
|
errorDomain=請輸入正確的網域名稱, 如www.myblog.com
|
||||||
|
domainExisted=網域名稱已存在
|
||||||
|
errorSubDomain=請輸入正確的博客子網域名稱, 長度至少為4, 不能包含特殊字符
|
||||||
|
subDomainExisted=博客子網域名稱已存在
|
||||||
|
domainNotPointToLeanote=該網域名稱還未指向 d.leanote.com, 請稍後再試
|
||||||
|
errorPerPageSize=每頁記錄數至少為1
|
||||||
|
errorSortField=排序類型錯誤
|
||||||
|
themeValidHasRoundInclude=警告: 模板存在循環引用問題!
|
||||||
|
|
||||||
|
#share
|
||||||
|
tokenExpired = 會話已過期
|
||||||
|
Share=分享
|
||||||
|
hasSharedThisNote=分享了筆記
|
||||||
|
inputSharePwd=您需要輸入分享密碼才能查看
|
||||||
|
shareToGroup=分享給項目組
|
||||||
|
shareByPwd=通過密碼分享
|
||||||
|
groupName=分組名
|
||||||
|
operation=操作
|
||||||
|
groupAndMemberManage=項目組/成員管理
|
||||||
|
shareToGroupTips=將筆記/記事本分享給項目組後, 該組下的用戶便擁有了該筆記/記事本
|
||||||
|
shared=已分享
|
||||||
|
notShared=未分享
|
||||||
|
shareLink=分享連結
|
||||||
|
sharePwd=查看密碼
|
||||||
|
cancelShare=取消分享
|
||||||
|
getShareLinkAndPwd=生成該筆記的分享連結和密碼
|
||||||
|
|
||||||
|
#############
|
||||||
|
# 通用
|
||||||
|
#############
|
||||||
|
created=建立
|
||||||
|
updated=更新
|
||||||
|
modify=修改
|
||||||
|
Search=搜尋
|
||||||
|
Save Success=儲存成功
|
||||||
|
Please save note firstly!=請先儲存筆記!
|
||||||
|
Please sign in firstly!=你還沒有登入, 請先登入!
|
||||||
|
|
||||||
|
# 必須要加這個, 奇怪
|
||||||
|
[CN]
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
Cut=剪切
|
||||||
|
Header 2=標題2
|
||||||
|
Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.=你的瀏覽器不支持對剪貼簿的訪問,請使用Ctrl+X\/C\/V鍵進行複製貼上。
|
||||||
|
Div=Div區塊
|
||||||
|
Paste=貼上
|
||||||
|
Close=關閉
|
||||||
|
Font Family=字體
|
||||||
|
Pre=預格式文本
|
||||||
|
Align right=靠右對齊
|
||||||
|
New document=新文件
|
||||||
|
Blockquote=引用
|
||||||
|
Numbered list=編號列表
|
||||||
|
Increase indent=增加縮進
|
||||||
|
Formats=格式
|
||||||
|
Headers=標題
|
||||||
|
Select all=全選
|
||||||
|
Header 3=標題3
|
||||||
|
Blocks=區塊
|
||||||
|
Undo=撤消
|
||||||
|
Strikethrough=刪除線
|
||||||
|
Bullet list=項目符號
|
||||||
|
Header 1=標題1
|
||||||
|
Superscript=上標
|
||||||
|
Clear formatting=清除格式
|
||||||
|
Font Sizes=字體大小
|
||||||
|
Subscript=下標
|
||||||
|
Header 6=標題6
|
||||||
|
Redo=重作
|
||||||
|
Paragraph=段落
|
||||||
|
Ok=確定
|
||||||
|
Bold=粗體
|
||||||
|
Code=代碼
|
||||||
|
Italic=斜體
|
||||||
|
Align center=置中
|
||||||
|
Header 5=標題5
|
||||||
|
Decrease indent=減少縮進
|
||||||
|
Header 4=標題4
|
||||||
|
Convert Code=轉換成文本
|
||||||
|
toggleCode=ctrl+shift+c 切換代碼
|
||||||
|
Language=代碼語言
|
||||||
|
`ctrl/cmd+shift+c` toggle code=`ctrl/cmd+shift+c` 切換代碼
|
||||||
|
Toggle ace with raw html=Ace代碼與普通Pre代碼切換
|
||||||
|
Inline Code=<code>
|
||||||
|
Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.=當前為純文本貼上模式,再次點擊可以回到普通貼上模式。
|
||||||
|
Underline=下劃線
|
||||||
|
Cancel=取消
|
||||||
|
Justify=分散段期
|
||||||
|
Inline=文本
|
||||||
|
Copy=複製
|
||||||
|
Align left=靠左對齊
|
||||||
|
Visual aids=網格線
|
||||||
|
Lower Greek=小寫希臘字母
|
||||||
|
Square=方塊
|
||||||
|
Default=預設
|
||||||
|
Lower Alpha=小寫英文字母
|
||||||
|
Circle=空心圓
|
||||||
|
Disc=實心圓
|
||||||
|
Upper Alpha=大寫英文字母
|
||||||
|
Upper Roman=大寫羅馬字母
|
||||||
|
Lower Roman=小寫羅馬字母
|
||||||
|
Name=名稱
|
||||||
|
Anchor=錨點
|
||||||
|
You have unsaved changes are you sure you want to navigate away?=你還有檔案尚未保存,確定要離開?
|
||||||
|
Restore last draft=恢復上次的草稿
|
||||||
|
Special character=特殊符號
|
||||||
|
Source code=原始碼
|
||||||
|
Right to left=從右到左
|
||||||
|
Left to right=從左到右
|
||||||
|
Emoticons=表情
|
||||||
|
Robots=機器人
|
||||||
|
Document properties=文件屬性
|
||||||
|
Title=標題
|
||||||
|
Keywords=關鍵詞
|
||||||
|
Encoding=編碼
|
||||||
|
Description=描述
|
||||||
|
Author=作者
|
||||||
|
Fullscreen=全螢幕
|
||||||
|
Horizontal line=水平分割線
|
||||||
|
Horizontal space=水平邊距
|
||||||
|
Insert\/edit image=上傳/插入圖片
|
||||||
|
Insert\/edit mind map=新建/編輯心智圖
|
||||||
|
Insert Mind Map=插入心智圖
|
||||||
|
Mind Map=心智圖
|
||||||
|
Image=圖片
|
||||||
|
Insert Image=插入
|
||||||
|
General=普通
|
||||||
|
Advanced=進階
|
||||||
|
Source=地址
|
||||||
|
Border=邊框
|
||||||
|
Constrain proportions=保持長寬比
|
||||||
|
Vertical space=垂直邊距
|
||||||
|
Image description=圖片描述
|
||||||
|
Style=樣式
|
||||||
|
Dimensions=大小
|
||||||
|
Insert image=插入圖片
|
||||||
|
Insert date\/time=插入日期\/時間
|
||||||
|
Remove link=刪除連結
|
||||||
|
Url=地址
|
||||||
|
Text to display=顯示文字
|
||||||
|
Anchors=錨點
|
||||||
|
Insert link=插入連結
|
||||||
|
New window=在新窗口打開
|
||||||
|
None=無
|
||||||
|
Target=打開方式
|
||||||
|
Insert\/edit link=插入\/編輯連結
|
||||||
|
Insert\/edit video=插入\/編輯視頻
|
||||||
|
Poster=封面
|
||||||
|
Alternative source=鏡像
|
||||||
|
Paste your embed code below:=將內嵌代碼貼上在下面:
|
||||||
|
Insert video=插入視頻
|
||||||
|
Embed=內嵌
|
||||||
|
Nonbreaking space=不間斷空格
|
||||||
|
Page break=分頁符號
|
||||||
|
Paste as text=未格式化文字
|
||||||
|
Preview=預覽
|
||||||
|
Print=列印
|
||||||
|
Save=儲存
|
||||||
|
Could not find the specified string.=沒有找到搜索內容.
|
||||||
|
Replace=取代
|
||||||
|
Next=下一個
|
||||||
|
Whole words=全文匹配
|
||||||
|
Find and replace=尋找和取代
|
||||||
|
Replace with=取代為
|
||||||
|
Find=尋找
|
||||||
|
Replace all=全部取代
|
||||||
|
Match case=區分大小寫
|
||||||
|
Prev=上一個
|
||||||
|
Spellcheck=拼寫檢查
|
||||||
|
Finish=完成
|
||||||
|
Ignore all=全部忽略
|
||||||
|
Ignore=忽略
|
||||||
|
Insert row before=在上方插入
|
||||||
|
Rows=行
|
||||||
|
Height=高
|
||||||
|
Paste row after=貼上到下方
|
||||||
|
Alignment=對齊方式
|
||||||
|
Column group=列組
|
||||||
|
Row=行
|
||||||
|
Insert column before=在左側插入
|
||||||
|
Split cell=拆分單元格
|
||||||
|
Cell padding=單元格內邊距
|
||||||
|
Cell spacing=單元格外間距
|
||||||
|
Row type=行類型
|
||||||
|
Insert table=插入表格
|
||||||
|
Body=表體
|
||||||
|
Caption=標題
|
||||||
|
Footer=表尾
|
||||||
|
Delete row=刪除行
|
||||||
|
Paste row before=貼上到上方
|
||||||
|
Scope=範圍
|
||||||
|
Delete table=刪除表格
|
||||||
|
Header cell=表頭單元格
|
||||||
|
Column=列
|
||||||
|
Cell=單元格
|
||||||
|
Header=表頭
|
||||||
|
Cell type=單元格類型
|
||||||
|
Copy row=複製行
|
||||||
|
Row properties=行屬性
|
||||||
|
Table properties=表格屬性
|
||||||
|
Row group=行組
|
||||||
|
Right=靠右對齊
|
||||||
|
Insert column after=在右側插入
|
||||||
|
Cols=列
|
||||||
|
Insert row after=在下方插入
|
||||||
|
Width=寬
|
||||||
|
Cell properties=單元格屬性
|
||||||
|
Left=左對齊
|
||||||
|
Cut row=剪切行
|
||||||
|
Delete column=刪除列
|
||||||
|
Center=居中
|
||||||
|
Merge cells=合並單元格
|
||||||
|
Insert template=插入模板
|
||||||
|
Templates=模板
|
||||||
|
Background color=背景色
|
||||||
|
Text color=文字顏色
|
||||||
|
Show blocks=顯示區塊邊框
|
||||||
|
Show invisible characters=顯示不可見字符
|
||||||
|
Words: {0}=字數:{0}
|
||||||
|
Insert=插入
|
||||||
|
File=文件
|
||||||
|
Edit=編輯
|
||||||
|
Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help=在編輯區按ALT-F9打開選單,按ALT-F10打開工具列,按ALT-0查看說明
|
||||||
|
Tools=工具
|
||||||
|
View=檢視
|
||||||
|
Table=表格
|
||||||
|
Format=格式
|
||||||
+56
-18
@@ -1,3 +1,45 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'leanote';
|
||||||
|
src: url('../../fonts/leanote-font3/leanote.eot?-vcf23i');
|
||||||
|
src: url('../../fonts/leanote-font3/leanote.eot?#iefix-vcf23i') format('embedded-opentype'), url('../../fonts/leanote-font3/leanote.ttf?-vcf23i') format('truetype'), url('../../fonts/leanote-font3/leanote.woff?-vcf23i') format('woff'), url('../../fonts/leanote-font3/leanote.svg?-vcf23i#leanote') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
#logo,
|
||||||
|
.mce-i-mind,
|
||||||
|
.mce-i-ace-pre,
|
||||||
|
.lea-icon {
|
||||||
|
font-family: 'leanote' !important;
|
||||||
|
speak: none;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
text-transform: none;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
.icon-markdown:before {
|
||||||
|
content: "\e604";
|
||||||
|
}
|
||||||
|
.mce-i-mind:before {
|
||||||
|
content: "\e602";
|
||||||
|
}
|
||||||
|
.mce-i-ace-pre:before {
|
||||||
|
content: "\e603";
|
||||||
|
}
|
||||||
|
#logo:before {
|
||||||
|
content: "\e901";
|
||||||
|
line-height: 1;
|
||||||
|
margin-top: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
#logo.icon-only:before {
|
||||||
|
content: "\e902";
|
||||||
|
}
|
||||||
|
.lang-zh-cn #logo:before {
|
||||||
|
content: "\e900";
|
||||||
|
}
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Open Sans';
|
font-family: 'Open Sans';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
@@ -22,14 +64,6 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../../fonts/open-sans2/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff') format('woff');
|
src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../../fonts/open-sans2/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff') format('woff');
|
||||||
}
|
}
|
||||||
/* leanote */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'leanoteregular';
|
|
||||||
src: url('../../fonts/leanote/leanote-regular-webfont.eot');
|
|
||||||
src: url('../../fonts/leanote/leanote-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../../fonts/leanote/leanote-regular-webfont.woff') format('woff'), url('../../fonts/leanote/leanote-regular-webfont.ttf') format('truetype'), url('../../fonts/leanote/leanote-regular-webfont.svg#leanoteregular') format('svg');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
::selection {
|
::selection {
|
||||||
background: #000000;
|
background: #000000;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -52,20 +86,24 @@ h2,
|
|||||||
h3 {
|
h3 {
|
||||||
font-family: 'Open Sans', '微软雅黑', Arial, Tahoma, sans-serif;
|
font-family: 'Open Sans', '微软雅黑', Arial, Tahoma, sans-serif;
|
||||||
}
|
}
|
||||||
#logo a {
|
.navbar-brand {
|
||||||
font-family: "leanoteregular";
|
height: 45px;
|
||||||
font-size: 32px;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
margin-top: -5px;
|
|
||||||
}
|
}
|
||||||
#logo div {
|
.logo-ctn {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.logo-ctn #logo {
|
||||||
|
float: left;
|
||||||
|
padding-right: 3px;
|
||||||
|
}
|
||||||
|
.logo-ctn #logo:before {
|
||||||
|
line-height: 38px;
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
.logo-ctn .logo-title {
|
||||||
float: left;
|
float: left;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
}
|
}
|
||||||
#logo a:before {
|
|
||||||
content: "a";
|
|
||||||
}
|
|
||||||
.animated {
|
.animated {
|
||||||
-webkit-animation-fill-mode: both;
|
-webkit-animation-fill-mode: both;
|
||||||
-moz-animation-fill-mode: both;
|
-moz-animation-fill-mode: both;
|
||||||
|
|||||||
+15
-23
@@ -13,6 +13,8 @@
|
|||||||
@containerWidth: 945px;
|
@containerWidth: 945px;
|
||||||
@titleColor: #5AD4A0;
|
@titleColor: #5AD4A0;
|
||||||
|
|
||||||
|
@import "../../css/theme/includes/icon.less";
|
||||||
|
|
||||||
// font
|
// font
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Open Sans';
|
font-family: 'Open Sans';
|
||||||
@@ -38,17 +40,7 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../../fonts/open-sans2/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff') format('woff');
|
src: local('Open Sans Italic'), local('OpenSans-Italic'), url('../../fonts/open-sans2/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff') format('woff');
|
||||||
}
|
}
|
||||||
/* leanote */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'leanoteregular';
|
|
||||||
src: url('../../fonts/leanote/leanote-regular-webfont.eot');
|
|
||||||
src: url('../../fonts/leanote/leanote-regular-webfont.eot?#iefix') format('embedded-opentype'),
|
|
||||||
url('../../fonts/leanote/leanote-regular-webfont.woff') format('woff'),
|
|
||||||
url('../../fonts/leanote/leanote-regular-webfont.ttf') format('truetype'),
|
|
||||||
url('../../fonts/leanote/leanote-regular-webfont.svg#leanoteregular') format('svg');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
@selectionBg: @aBlackColor;
|
@selectionBg: @aBlackColor;
|
||||||
@selectionColor: #fff;
|
@selectionColor: #fff;
|
||||||
@@ -64,25 +56,25 @@ html,body {
|
|||||||
h1, h2, h3 {
|
h1, h2, h3 {
|
||||||
font-family: @fontFamily;
|
font-family: @fontFamily;
|
||||||
}
|
}
|
||||||
|
.navbar-brand {
|
||||||
#logo {
|
height: 45px;
|
||||||
a {
|
}
|
||||||
font-family: "leanoteregular";
|
.logo-ctn {
|
||||||
font-size: 32px;
|
display: block;
|
||||||
display: block;
|
#logo {
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: -5px;
|
padding-right: 3px;
|
||||||
|
&:before {
|
||||||
|
line-height: 38px;
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
div {
|
.logo-title {
|
||||||
float: left;
|
float: left;
|
||||||
line-height: 50px;
|
line-height: 50px;
|
||||||
}
|
}
|
||||||
a:before {
|
|
||||||
content: "a";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
//------------
|
//------------
|
||||||
.animated {
|
.animated {
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ return c(e,"previousSibling")},nextAll:function(e){return se.dir(e,"nextSibling"
|
|||||||
if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]}}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one(t.support.transition.end,function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e()})}(jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.prototype.close=function(e){function i(){s.trigger("closed.bs.alert").remove()}var o=t(this),n=o.attr("data-target");n||(n=o.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=o.hasClass("alert")?o:o.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one(t.support.transition.end,i).emulateTransitionEnd(150):i())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o)};e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",n.resetText||i.data("resetText",i[o]()),i[o](n[t]||this.options[t]),setTimeout(function(){"loadingText"==t?i.addClass(e).attr(e,e):i.removeClass(e).removeAttr(e)},0)},e.prototype.toggle=function(){var t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var e=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===e.prop("type")&&t.find(".active").removeClass("active")}this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=function(i){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof i&&i;n||o.data("bs.button",n=new e(this,s)),"toggle"==i?n.toggle():i&&n.setState(i)})},t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api","[data-toggle^=button]",function(e){var i=t(e.target);i.hasClass("btn")||(i=i.closest(".btn")),i.button("toggle"),e.preventDefault()})}(jQuery),+function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",t.proxy(this.pause,this)).on("mouseleave",t.proxy(this.cycle,this))};e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},e.prototype.to=function(e){var i=this,o=this.getActiveIndex();return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid",function(){i.to(e)}):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition.end&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){return this.sliding?void 0:this.slide("next")},e.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),n=i||o[e](),s=this.interval,a="next"==e?"left":"right",r="next"==e?"first":"last",l=this;if(!n.length){if(!this.options.wrap)return;n=this.$element.find(".item")[r]()}this.sliding=!0,s&&this.pause();var h=t.Event("slide.bs.carousel",{relatedTarget:n[0],direction:a});if(!n.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var e=t(l.$indicators.children()[l.getActiveIndex()]);e&&e.addClass("active")})),t.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(h),h.isDefaultPrevented())return;n.addClass(e),n[0].offsetWidth,o.addClass(a),n.addClass(a),o.one(t.support.transition.end,function(){n.removeClass([e,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(functioLine truncated
|
if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]}}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one(t.support.transition.end,function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e()})}(jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.prototype.close=function(e){function i(){s.trigger("closed.bs.alert").remove()}var o=t(this),n=o.attr("data-target");n||(n=o.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=o.hasClass("alert")?o:o.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one(t.support.transition.end,i).emulateTransitionEnd(150):i())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o)};e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",n.resetText||i.data("resetText",i[o]()),i[o](n[t]||this.options[t]),setTimeout(function(){"loadingText"==t?i.addClass(e).attr(e,e):i.removeClass(e).removeAttr(e)},0)},e.prototype.toggle=function(){var t=this.$element.closest('[data-toggle="buttons"]');if(t.length){var e=this.$element.find("input").prop("checked",!this.$element.hasClass("active")).trigger("change");"radio"===e.prop("type")&&t.find(".active").removeClass("active")}this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=function(i){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof i&&i;n||o.data("bs.button",n=new e(this,s)),"toggle"==i?n.toggle():i&&n.setState(i)})},t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api","[data-toggle^=button]",function(e){var i=t(e.target);i.hasClass("btn")||(i=i.closest(".btn")),i.button("toggle"),e.preventDefault()})}(jQuery),+function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",t.proxy(this.pause,this)).on("mouseleave",t.proxy(this.cycle,this))};e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},e.prototype.to=function(e){var i=this,o=this.getActiveIndex();return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid",function(){i.to(e)}):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition.end&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){return this.sliding?void 0:this.slide("next")},e.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),n=i||o[e](),s=this.interval,a="next"==e?"left":"right",r="next"==e?"first":"last",l=this;if(!n.length){if(!this.options.wrap)return;n=this.$element.find(".item")[r]()}this.sliding=!0,s&&this.pause();var h=t.Event("slide.bs.carousel",{relatedTarget:n[0],direction:a});if(!n.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var e=t(l.$indicators.children()[l.getActiveIndex()]);e&&e.addClass("active")})),t.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(h),h.isDefaultPrevented())return;n.addClass(e),n[0].offsetWidth,o.addClass(a),n.addClass(a),o.one(t.support.transition.end,function(){n.removeClass([e,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(functioLine truncated
|
||||||
!function(e){"use strict";e(window.jQuery)}(function(e){"use strict";var t=0;e.ajaxTransport("iframe",function(i){if(i.async){var n,r,o;return{send:function(s,a){n=e('<form style="display:none;"></form>'),n.attr("accept-charset",i.formAcceptCharset),o=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+o+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+o+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+o+"_method=PATCH",i.type="POST"),r=e('<iframe src="javascript:false;" name="iframe-transport-'+(t+=1)+'"></iframe>').bind("load",function(){var t,o=e.isArray(i.paramName)?i.paramName:[i.paramName];r.unbind("load").bind("load",function(){var t;try{if(t=r.contents(),!t.length||!t[0].firstChild)throw new Error}catch(i){t=void 0}a(200,"success",{iframe:t}),e('<iframe src="javascript:false;"></iframe>').appendTo(n),n.remove()}),n.prop("target",r.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,function(t,i){e('<input type="hidden"/>').prop("name",i.name).val(i.value).appendTo(n)}),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after(function(e){return t[e]}),i.paramName&&i.fileInput.each(function(t){e(this).prop("name",o[t]||i.paramName)}),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data")),n.submit(),t&&t.length&&i.fileInput.each(function(i,n){var r=e(t[i]);e(n).prop("name",r.prop("name")),r.replaceWith(n)})}),n.append(r).appendTo(document.body)},abort:function(){r&&r.unbind("load").prop("src","javascript".concat(":false;")),n&&n.remove()}}}}),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&e.parseJSON(e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}),!function(e){e(jQuery)}(function(e,t){var i=0,n=Array.prototype.slice,r=e.cleanData;e.cleanData=function(t){for(var i,n=0;null!=(i=t[n]);n++)try{e(i).triggerHandler("remove")}catch(o){}r(t)},e.widget=function(t,i,n){var r,o,s,a,l={},p=t.split(".")[0];t=t.split(".")[1],r=p+"-"+t,n||(n=i,i=e.Widget),e.expr[":"][r.toLowerCase()]=function(t){return!!e.data(t,r)},e[p]=e[p]||{},o=e[p][t],s=e[p][t]=function(e,t){return this._createWidget?void(arguments.length&&this._createWidget(e,t)):new s(e,t)},e.extend(s,o,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),a=new i,a.options=e.widget.extend({},a.options),e.each(n,function(t,n){return e.isFunction(n)?void(l[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},r=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,o=this._superApply;return this._super=e,this._superApply=r,t=n.apply(this,arguments),this._super=i,this._superApply=o,t}}()):void(l[t]=n)}),s.prototype=e.widget.extend(a,{widgetEventPrefix:o?a.widgetEventPrefix:t},l,{constructor:s,namespace:p,widgetName:t,widgetFullName:r}),o?(e.each(o._childConstructors,function(t,i){var n=i.prototype;e.widget(n.namespace+"."+n.widgetName,s,i._proto)}),delete o._childConstructors):i._childConstructors.push(s),e.widget.bridge(t,s)},e.widget.extend=function(i){for(var r,o,s=n.call(arguments,1),a=0,l=s.length;l>a;a++)for(r in s[a])o=s[a][r],s[a].hasOwnProperty(r)&&o!==t&&(e.isPlainObject(o)?i[r]=e.isPlainObject(i[r])?e.widget.extend({},i[r],o):e.widget.extend({},o):i[r]=o);return i},e.widget.bridge=function(i,r){var o=r.prototype.widgetFullName||i;e.fn[i]=function(s){var a="string"==typeof s,l=n.call(arguments,1),p=this;return s=!a&&l.length?e.widget.extend.apply(null,[s].concat(l)):s,a?this.each(function(){var n,r=e.data(this,o);return r?e.isFunction(r[s])&&"_"!==s.charAt(0)?(n=r[s].apply(r,l),n!==r&&n!==t?(p=n&&n.jquery?p.pushStack(n.get()):n,!1):void 0):e.error("no such method '"+s+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; attempted to call method '"+s+"'")}):this.each(function(){var t=e.data(this,o);t?t.option(s||{})._init():e.data(this,o,new r(s,this))}),p}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,n){n=e(n||this.defaultElement||this)[0],this.element=e(n),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),n!==this&&(e.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===n&&this.destroy()}}),this.document=e(n.style?n.ownerDocument:n.document||n),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._deLine truncated
|
!function(e){"use strict";e(window.jQuery)}(function(e){"use strict";var t=0;e.ajaxTransport("iframe",function(i){if(i.async){var n,r,o;return{send:function(s,a){n=e('<form style="display:none;"></form>'),n.attr("accept-charset",i.formAcceptCharset),o=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+o+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+o+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+o+"_method=PATCH",i.type="POST"),r=e('<iframe src="javascript:false;" name="iframe-transport-'+(t+=1)+'"></iframe>').bind("load",function(){var t,o=e.isArray(i.paramName)?i.paramName:[i.paramName];r.unbind("load").bind("load",function(){var t;try{if(t=r.contents(),!t.length||!t[0].firstChild)throw new Error}catch(i){t=void 0}a(200,"success",{iframe:t}),e('<iframe src="javascript:false;"></iframe>').appendTo(n),n.remove()}),n.prop("target",r.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,function(t,i){e('<input type="hidden"/>').prop("name",i.name).val(i.value).appendTo(n)}),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after(function(e){return t[e]}),i.paramName&&i.fileInput.each(function(t){e(this).prop("name",o[t]||i.paramName)}),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data")),n.submit(),t&&t.length&&i.fileInput.each(function(i,n){var r=e(t[i]);e(n).prop("name",r.prop("name")),r.replaceWith(n)})}),n.append(r).appendTo(document.body)},abort:function(){r&&r.unbind("load").prop("src","javascript".concat(":false;")),n&&n.remove()}}}}),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&e.parseJSON(e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}),!function(e){e(jQuery)}(function(e,t){var i=0,n=Array.prototype.slice,r=e.cleanData;e.cleanData=function(t){for(var i,n=0;null!=(i=t[n]);n++)try{e(i).triggerHandler("remove")}catch(o){}r(t)},e.widget=function(t,i,n){var r,o,s,a,l={},p=t.split(".")[0];t=t.split(".")[1],r=p+"-"+t,n||(n=i,i=e.Widget),e.expr[":"][r.toLowerCase()]=function(t){return!!e.data(t,r)},e[p]=e[p]||{},o=e[p][t],s=e[p][t]=function(e,t){return this._createWidget?void(arguments.length&&this._createWidget(e,t)):new s(e,t)},e.extend(s,o,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),a=new i,a.options=e.widget.extend({},a.options),e.each(n,function(t,n){return e.isFunction(n)?void(l[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},r=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,o=this._superApply;return this._super=e,this._superApply=r,t=n.apply(this,arguments),this._super=i,this._superApply=o,t}}()):void(l[t]=n)}),s.prototype=e.widget.extend(a,{widgetEventPrefix:o?a.widgetEventPrefix:t},l,{constructor:s,namespace:p,widgetName:t,widgetFullName:r}),o?(e.each(o._childConstructors,function(t,i){var n=i.prototype;e.widget(n.namespace+"."+n.widgetName,s,i._proto)}),delete o._childConstructors):i._childConstructors.push(s),e.widget.bridge(t,s)},e.widget.extend=function(i){for(var r,o,s=n.call(arguments,1),a=0,l=s.length;l>a;a++)for(r in s[a])o=s[a][r],s[a].hasOwnProperty(r)&&o!==t&&(e.isPlainObject(o)?i[r]=e.isPlainObject(i[r])?e.widget.extend({},i[r],o):e.widget.extend({},o):i[r]=o);return i},e.widget.bridge=function(i,r){var o=r.prototype.widgetFullName||i;e.fn[i]=function(s){var a="string"==typeof s,l=n.call(arguments,1),p=this;return s=!a&&l.length?e.widget.extend.apply(null,[s].concat(l)):s,a?this.each(function(){var n,r=e.data(this,o);return r?e.isFunction(r[s])&&"_"!==s.charAt(0)?(n=r[s].apply(r,l),n!==r&&n!==t?(p=n&&n.jquery?p.pushStack(n.get()):n,!1):void 0):e.error("no such method '"+s+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; attempted to call method '"+s+"'")}):this.each(function(){var t=e.data(this,o);t?t.option(s||{})._init():e.data(this,o,new r(s,this))}),p}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,n){n=e(n||this.defaultElement||this)[0],this.element=e(n),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),n!==this&&(e.data(n,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===n&&this.destroy()}}),this.document=e(n.style?n.ownerDocument:n.document||n),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._deLine truncated
|
||||||
jQuery.fn.pagination=function(e,t){return t=jQuery.extend({items_per_page:10,num_display_entries:10,current_page:0,num_edge_entries:2,link_to:"#",prev_text:"Prev",next_text:"Next",ellipse_text:"...",prev_show_always:!0,next_show_always:!0,callback:function(){return!1}},t||{}),this.each(function(){function n(){return Math.ceil(e/t.items_per_page)}function a(){var e=Math.ceil(t.num_display_entries/2),a=n(),r=a-t.num_display_entries,s=i>e?Math.max(Math.min(i-e,r),0):0,_=i>e?Math.min(i+e,a):Math.min(t.num_display_entries,a);return[s,_]}function r(e,n){n.preventDefault(),i=e,s();var a=t.callback(e,_);return a||(n.stopPropagation?n.stopPropagation():n.cancelBubble=!0),a}function s(){_.empty();var e=a(),s=n(),p=function(e){return function(t){return r(e,t)}},l=function(e,n){e=0>e?0:s>e?e:s-1,n=jQuery.extend({text:e+1,classes:""},n||{});var a="";if(e==i){var r=jQuery("<span class='current'>"+n.text+"</span>");n.text!=t.prev_text&&n.text!=t.next_text&&(a='class="active"')}else var r=jQuery("<a>"+n.text+"</a>").bind("click",p(e)).attr("href",t.link_to.replace(/__id__/,e));n.classes&&r.addClass(n.classes);var l=$("<li "+a+"></li>").append(r);_.append(l)};if(t.prev_text&&(i>0||t.prev_show_always)&&l(i-1,{text:t.prev_text,classes:"prev"}),e[0]>0&&t.num_edge_entries>0){for(var u=Math.min(t.num_edge_entries,e[0]),c=0;u>c;c++)l(c);t.num_edge_entries<e[0]&&t.ellipse_text&&jQuery("<li><span>"+t.ellipse_text+"</span></li>").appendTo(_)}for(var c=e[0];c<e[1];c++)l(c);if(e[1]<s&&t.num_edge_entries>0){s-t.num_edge_entries>e[1]&&t.ellipse_text&&jQuery("<li><span>"+t.ellipse_text+"</span></li>").appendTo(_);for(var x=Math.max(s-t.num_edge_entries,e[1]),c=x;s>c;c++)l(c)}t.next_text&&(s-1>i||t.next_show_always)&&l(i+1,{text:t.next_text,classes:"next"})}var i=t.current_page;e=!e||0>e?1:e,t.items_per_page=!t.items_per_page||t.items_per_page<0?1:t.items_per_page;var _=jQuery(this);this.selectPage=function(e){r(e)},this.prevPage=function(){return i>0?(r(i-1),!0):!1},this.nextPage=function(){return i<n()-1?(r(i+1),!0):!1},s()})};
|
jQuery.fn.pagination=function(e,t){return t=jQuery.extend({items_per_page:10,num_display_entries:10,current_page:0,num_edge_entries:2,link_to:"#",prev_text:"Prev",next_text:"Next",ellipse_text:"...",prev_show_always:!0,next_show_always:!0,callback:function(){return!1}},t||{}),this.each(function(){function n(){return Math.ceil(e/t.items_per_page)}function a(){var e=Math.ceil(t.num_display_entries/2),a=n(),r=a-t.num_display_entries,s=i>e?Math.max(Math.min(i-e,r),0):0,_=i>e?Math.min(i+e,a):Math.min(t.num_display_entries,a);return[s,_]}function r(e,n){n.preventDefault(),i=e,s();var a=t.callback(e,_);return a||(n.stopPropagation?n.stopPropagation():n.cancelBubble=!0),a}function s(){_.empty();var e=a(),s=n(),p=function(e){return function(t){return r(e,t)}},l=function(e,n){e=0>e?0:s>e?e:s-1,n=jQuery.extend({text:e+1,classes:""},n||{});var a="";if(e==i){var r=jQuery("<span class='current'>"+n.text+"</span>");n.text!=t.prev_text&&n.text!=t.next_text&&(a='class="active"')}else var r=jQuery("<a>"+n.text+"</a>").bind("click",p(e)).attr("href",t.link_to.replace(/__id__/,e));n.classes&&r.addClass(n.classes);var l=$("<li "+a+"></li>").append(r);_.append(l)};if(t.prev_text&&(i>0||t.prev_show_always)&&l(i-1,{text:t.prev_text,classes:"prev"}),e[0]>0&&t.num_edge_entries>0){for(var u=Math.min(t.num_edge_entries,e[0]),c=0;u>c;c++)l(c);t.num_edge_entries<e[0]&&t.ellipse_text&&jQuery("<li><span>"+t.ellipse_text+"</span></li>").appendTo(_)}for(var c=e[0];c<e[1];c++)l(c);if(e[1]<s&&t.num_edge_entries>0){s-t.num_edge_entries>e[1]&&t.ellipse_text&&jQuery("<li><span>"+t.ellipse_text+"</span></li>").appendTo(_);for(var x=Math.max(s-t.num_edge_entries,e[1]),c=x;s>c;c++)l(c)}t.next_text&&(s-1>i||t.next_show_always)&&l(i+1,{text:t.next_text,classes:"next"})}var i=t.current_page;e=!e||0>e?1:e,t.items_per_page=!t.items_per_page||t.items_per_page<0?1:t.items_per_page;var _=jQuery(this);this.selectPage=function(e){r(e)},this.prevPage=function(){return i>0?(r(i-1),!0):!1},this.nextPage=function(){return i<n()-1?(r(i+1),!0):!1},s()})};
|
||||||
function log(e){}function retIsOk(e){return e&&"object"==typeof e&&1==e.Ok?!0:!1}function getImageSize(e,t){function a(e,a){i.parentNode.removeChild(i),t({width:e,height:a})}var i=document.createElement("img");i.onload=function(){a(i.clientWidth,i.clientHeight)},i.onerror=function(){a()},i.src=e;var s=i.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left=0,s.width=s.height="auto",document.body.appendChild(i)}function mdGetImgSrc(){return o.selectedImages&&o.selectedImages.length?o.selectedImages[0]:""}var urlPrefix=UrlPrefix,getMsg=parent.getMsg;getMsg||(getMsg=function(e){return e});var o={maxSelected:G.maxSelected,selectedZoneO:$("#preview"),previewO:$("#preview"),selectedImages:[],imageAttrs:{},pageNum:1,pagination:function(e){var t=this;$(".pagination").pagination(e,{items_per_page:G.perPageItems,prev_text:getMsg("Prev"),next_text:getMsg("Next"),callback:function(e){t.pageNum=e+1,t.renderImages($("#albumsForList").val(),t.pageNum,!1)}})},showMsg:function(e){$("#msg").html(e).css("display","inline"),setTimeout(function(){$("#msg").fadeOut()},2e3)},pageAddAlbum:function(e){var t='<option value="'+e.AlbumId+'">'+e.Name+"</option>";$("#albumsForUpload").append(t).val(e.AlbumId),$("#albumsForList").append(t)},pageUpdateAlbum:function(e,t){$('option[value="'+e+'"]').html(t)},processAlbum:function(){function e(){$("#addOrUpdateAlbumForm").is(":hidden")?($("#addOrUpdateAlbumForm").show(),$("#albumSelect").hide()):($("#addOrUpdateAlbumForm").hide(),$("#albumSelect").show())}var t=this,a=!0,i="";$("#renameAlbumBtn").click(function(){return(i=$("#albumsForUpload").val())?(e(),$("#addOrUpdateAlbumBtn").html(getMsg("Rename Album")),$("#albumName").val($("#albumsForUpload option:selected").html()).focus(),void(a=!1)):void alert(getMsg("Cannot rename default album"))}),$("#addAlbumBtn").click(function(){e(),$("#addOrUpdateAlbumBtn").html(getMsg("Add Album")),$("#albumName").val("").focus(),a=!0}),$("#cancelAlbumBtn").click(function(){e()}),$("#addOrUpdateAlbumBtn").click(function(){var s=$("#albumName").val();return s?void(a?$.get("/album/addAlbum",{name:s},function(a){"object"==typeof a&&""!=a.AlbumId?($("#albumName").val(""),t.showMsg(getMsg("Add Success!")),t.pageAddAlbum(a),setTimeout(function(){e()},200)):alert(getMsg("error"))}):$.get("/album/updateAlbum",{albumId:i,name:s},function(a){"boolean"==typeof a&&a?($("#albumName").val(""),t.showMsg(getMsg("Rename Success!")),t.pageUpdateAlbum(i,s),setTimeout(function(){e()},200)):alert(getMsg("error!"))})):void $("#albumName").focus()}),$("#deleteAlbumBtn").click(function(){var e=$("#albumsForUpload").val();return e?void $.get("/album/deleteAlbum",{albumId:e},function(a){"object"==typeof a&&1==a.Ok?(t.showMsg(getMsg("Delete Success!")),$("#albumsForUpload option[value='"+e+"']").remove(),$("#albumsForList").val()==e&&(t.needRefresh=!0),$("#albumsForList option[value='"+e+"']").remove()):alert(getMsg("This album has images, please delete it's images at first."))}):void alert(getMsg("Cannot delete default album"))})},renderAlbums:function(){var e=this;$.get("/album/getAlbums",function(t){if(t){var a="";for(var i in t){var s=t[i],r='<option value="'+s.AlbumId+'">'+s.Name+"</option>";a+=r}$("#albumsForUpload").append(a),$("#albumsForList").append(a);var l=$("#albumsForList").val();e.renderImages(l,1,!0)}})},imageMaskO:$("#imageMask"),noImagesO:$("#noImages"),loadingO:$("#loading"),loadingStart:function(){this.imageMaskO.is(":hidden")&&this.imageMaskO.css("opacity",.8).show(),this.noImagesO.hide(),this.loadingO.show()},loadingEnd:function(){this.imageMaskO.hide()},noImages:function(){this.imageMaskO.show().css("opacity",1),this.noImagesO.show(),this.loadingO.hide()},search:function(){var e=this,t=1;$("#key").on("keyup",function(){var a=++t,i=$(this).val(),s=$("#albumsForList").val();e.renderImages(s,1,!0,i,function(){return t==a})})},renderImages:function(e,t,a,i,s){var r=this;t||(t=1),r.loadingStart(),$.get("/file/getImages",{albumId:e,page:t,key:i},function(e){if(!e||!e.Count)return void r.noImages();r.loadingEnd();var t=e.List,i={};for(var s in r.selectedImages){var l=r.selectedImages[s];i[l]=!0}var n="";for(var s in t){var o=t[s],d="";if(""!=o.Path&&"/"==o.Path[0]&&(o.Path=o.Path.substr(1)),""!=o.Path&&"upload/"==o.Path.substr(0,7))var l=urlPrefix+"/"+o.Path;else var l=urlPrefix+"/api/file/getImage?fileId="+o.FileId;i[l]&&(d='class="selected"'),n+="<li "+d+">",n+='<a title="" href="javascript:;" class="a-img"><img alt="" src="'+l+'" data-original="'+l+'" ></a>',n+='<div class="tools clearfix" data-id="'+o.FileId+'"><div class="file-title pull-left">'+o.Title+'</div><div class="pull-right"><a href="javascript:;" class="del" data-id="'+o.FileId+'"><span class="fa fa-trash"></span></a></div></div>',n+="</li>"}$("#imageList").html(n),a&&r.pagination(e.Count)})},initSelectedZones:function(){var e=this;num=this.maxSelected,e.previewO.html("");for(var t=1;t<=num;++t)e.previewO.append("<li>?</li>")},reRenderSelectedImages:function(e,t){for(var a=this,i=this.selectLine truncated
|
function log(e){}function retIsOk(e){return e&&"object"==typeof e&&1==e.Ok?!0:!1}function getImageSize(e,t){function a(e,a){i.parentNode.removeChild(i),t({width:e,height:a})}var i=document.createElement("img");i.onload=function(){a(i.clientWidth,i.clientHeight)},i.onerror=function(){a()},i.src=e;var s=i.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left=0,s.width=s.height="auto",document.body.appendChild(i)}function mdGetImgSrc(){return o.selectedImages&&o.selectedImages.length?o.selectedImages[0]:""}var urlPrefix="",getMsg=parent.getMsg;getMsg||(getMsg=function(e){return e});var o={maxSelected:G.maxSelected,selectedZoneO:$("#preview"),previewO:$("#preview"),selectedImages:[],imageAttrs:{},pageNum:1,pagination:function(e){var t=this;$(".pagination").pagination(e,{items_per_page:G.perPageItems,prev_text:getMsg("Prev"),next_text:getMsg("Next"),callback:function(e){t.pageNum=e+1,t.renderImages($("#albumsForList").val(),t.pageNum,!1)}})},showMsg:function(e){$("#msg").html(e).css("display","inline"),setTimeout(function(){$("#msg").fadeOut()},2e3)},pageAddAlbum:function(e){var t='<option value="'+e.AlbumId+'">'+e.Name+"</option>";$("#albumsForUpload").append(t).val(e.AlbumId),$("#albumsForList").append(t)},pageUpdateAlbum:function(e,t){$('option[value="'+e+'"]').html(t)},processAlbum:function(){function e(){$("#addOrUpdateAlbumForm").is(":hidden")?($("#addOrUpdateAlbumForm").show(),$("#albumSelect").hide()):($("#addOrUpdateAlbumForm").hide(),$("#albumSelect").show())}var t=this,a=!0,i="";$("#renameAlbumBtn").click(function(){return(i=$("#albumsForUpload").val())?(e(),$("#addOrUpdateAlbumBtn").html(getMsg("Rename Album")),$("#albumName").val($("#albumsForUpload option:selected").html()).focus(),void(a=!1)):void alert(getMsg("Cannot rename default album"))}),$("#addAlbumBtn").click(function(){e(),$("#addOrUpdateAlbumBtn").html(getMsg("Add Album")),$("#albumName").val("").focus(),a=!0}),$("#cancelAlbumBtn").click(function(){e()}),$("#addOrUpdateAlbumBtn").click(function(){var s=$("#albumName").val();return s?void(a?$.get("/album/addAlbum",{name:s},function(a){"object"==typeof a&&""!=a.AlbumId?($("#albumName").val(""),t.showMsg(getMsg("Add Success!")),t.pageAddAlbum(a),setTimeout(function(){e()},200)):alert(getMsg("error"))}):$.get("/album/updateAlbum",{albumId:i,name:s},function(a){"boolean"==typeof a&&a?($("#albumName").val(""),t.showMsg(getMsg("Rename Success!")),t.pageUpdateAlbum(i,s),setTimeout(function(){e()},200)):alert(getMsg("error!"))})):void $("#albumName").focus()}),$("#deleteAlbumBtn").click(function(){var e=$("#albumsForUpload").val();return e?void $.get("/album/deleteAlbum",{albumId:e},function(a){"object"==typeof a&&1==a.Ok?(t.showMsg(getMsg("Delete Success!")),$("#albumsForUpload option[value='"+e+"']").remove(),$("#albumsForList").val()==e&&(t.needRefresh=!0),$("#albumsForList option[value='"+e+"']").remove()):alert(getMsg("This album has images, please delete it's images at first."))}):void alert(getMsg("Cannot delete default album"))})},renderAlbums:function(){var e=this;$.get("/album/getAlbums",function(t){if(t){var a="";for(var i in t){var s=t[i],r='<option value="'+s.AlbumId+'">'+s.Name+"</option>";a+=r}$("#albumsForUpload").append(a),$("#albumsForList").append(a);var l=$("#albumsForList").val();e.renderImages(l,1,!0)}})},imageMaskO:$("#imageMask"),noImagesO:$("#noImages"),loadingO:$("#loading"),loadingStart:function(){this.imageMaskO.is(":hidden")&&this.imageMaskO.css("opacity",.8).show(),this.noImagesO.hide(),this.loadingO.show()},loadingEnd:function(){this.imageMaskO.hide()},noImages:function(){this.imageMaskO.show().css("opacity",1),this.noImagesO.show(),this.loadingO.hide()},search:function(){var e=this,t=1;$("#key").on("keyup",function(){var a=++t,i=$(this).val(),s=$("#albumsForList").val();e.renderImages(s,1,!0,i,function(){return t==a})})},renderImages:function(e,t,a,i,s){var r=this;t||(t=1),r.loadingStart(),$.get("/file/getImages",{albumId:e,page:t,key:i},function(e){if(!e||!e.Count)return void r.noImages();r.loadingEnd();var t=e.List,i={};for(var s in r.selectedImages){var l=r.selectedImages[s];i[l]=!0}var n="";for(var s in t){var o=t[s],d="";if(""!=o.Path&&"/"==o.Path[0]&&(o.Path=o.Path.substr(1)),""!=o.Path&&"upload/"==o.Path.substr(0,7))var l=urlPrefix+"/"+o.Path;else var l=urlPrefix+"/api/file/getImage?fileId="+o.FileId;i[l]&&(d='class="selected"'),n+="<li "+d+">",n+='<a title="" href="javascript:;" class="a-img"><img alt="" src="'+l+'" data-original="'+l+'" ></a>',n+='<div class="tools clearfix" data-id="'+o.FileId+'"><div class="file-title pull-left">'+o.Title+'</div><div class="pull-right"><a href="javascript:;" class="del" data-id="'+o.FileId+'"><span class="fa fa-trash"></span></a></div></div>',n+="</li>"}$("#imageList").html(n),a&&r.pagination(e.Count)})},initSelectedZones:function(){var e=this;num=this.maxSelected,e.previewO.html("");for(var t=1;t<=num;++t)e.previewO.append("<li>?</li>")},reRenderSelectedImages:function(e,t){for(var a=this,i=this.selectedZoneOLine truncated
|
||||||
@@ -8,7 +8,7 @@ function retIsOk(ret) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var urlPrefix = UrlPrefix;
|
var urlPrefix = '';
|
||||||
var getMsg = parent.getMsg;
|
var getMsg = parent.getMsg;
|
||||||
if (!getMsg) {
|
if (!getMsg) {
|
||||||
getMsg = function(msg) {
|
getMsg = function(msg) {
|
||||||
|
|||||||
Loaded 100 of 939 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user