Compare commits

..
87 Commits
Author SHA1 Message Date
lealife 816af11db2 防止Unzip文件恶意攻击 2016-10-27 16:37:12 +08:00
lealife eda03f0aa4 防止用"../../来获取其它文件" 2016-10-27 15:40:17 +08:00
lealife 6a06511405 防止用"../../来获取其它文件" 2016-10-27 15:09:10 +08:00
lealife 15d8ebdc0f New Chrome, Chinese input problem
https://github.com/leanote/leanote/issues/42
2016-09-24 10:44:10 +08:00
life 5dc929c4c0 Merge pull request #408 from zhang-yuan/master
Translation fixed
2016-08-26 09:55:50 +08:00
life a4d6a99fee Merge pull request #409 from alexsourcerer/patch-9
Update album.conf  (fr-fr)
2016-08-26 09:54:59 +08:00
life 15d3b847cb Merge pull request #411 from alexsourcerer/patch-11
Update member.conf (fr-fr)
2016-08-26 09:54:49 +08:00
life 065ac99942 Merge pull request #412 from alexsourcerer/patch-12
Update msg.conf (fr-fr)
2016-08-26 09:54:33 +08:00
life 08ec359b93 Merge pull request #413 from alexsourcerer/patch-13
Update tinymce_editor.conf (fr-fr)
2016-08-26 09:54:03 +08:00
life 2f81c04f41 Merge pull request #378 from lucienevans/master
auto number in MathJax (just blog)
2016-08-26 09:52:23 +08:00
life e8bff79425 Merge pull request #410 from alexsourcerer/patch-10
Update markdown.conf
2016-08-26 09:49:45 +08:00
alexsourcerer 4ca8e8cd83 Update tinymce_editor.conf
translation created & completed!
2016-08-23 12:41:32 +02:00
alexsourcerer c0cc08a3c2 Update msg.conf
translation updated!
2016-08-23 12:04:53 +02:00
alexsourcerer d32a6dd277 Update member.conf
updated translation to french
2016-08-23 11:57:22 +02:00
alexsourcerer 8bacc15309 Update markdown.conf
translated to french
2016-08-23 11:46:26 +02:00
alexsourcerer 8a3f24b9c6 Update album.conf
translated to french
2016-08-23 11:37:16 +02:00
haha 2a7d1fe7b5 Add translation 2016-08-23 14:09:53 +08:00
haha 9a05ffcd8f 翻译问题 2016-08-23 12:11:41 +08:00
lealife aa95e680f9 travis use go 1.4 2016-08-23 11:06:50 +08:00
life 874ab69c34 Merge pull request #406 from Xunius/patch-2
add vim and emacs modes to features
2016-08-23 10:33:13 +08:00
Xunius d43f5fd7ab add vim and emacs modes to features 2016-08-22 17:44:39 +08:00
life 6a048f0d9a Merge pull request #403 from Xunius/patch-1
rephrased English n Chinese, fixed links to docs.
2016-08-22 17:23:21 +08:00
Xunius cb3681f651 rephrased English n Chinese, fixed links to docs.
Fixed grammar errors in English and polished the wordings.
Changed order at one place to make the Doc part appear before develop.
Added links to installation tutorials
2016-08-19 19:12:30 +08:00
life dfd7159401 Merge pull request #361 from gaoyifan/patch-1
fix spelling mistake in README.md
2016-07-22 10:36:10 +08:00
lucien 929ec975da auto number in MathJax 2016-06-21 23:35:49 +08:00
life e826dc7b93 Merge pull request #374 from mhoffmann75/german_transl
add complete german translation
2016-06-10 17:12:21 +08:00
Martin Hoffmann 629a49e54b add complete german translation
- modify app/views/home/header.html to know de-de messages folder
- create messages/de-de folder with all german language files (album, blog, ...)
- create public/js/i18n/blog.de-de.js and ms.de-de.js files
- add public/tinymce/langs/de-de.js from tinymce project

Thanks to Marc Manthey (macbroadcast) who is the original author of the german translation for the leanote 1.x project (https://github.com/macbroadcast/leanote). I took his work as starting point for my complete german translation on leanote 2.0.
2016-06-10 09:46:31 +02:00
lealife 6ebedf94f0 app.conf 2016-05-25 17:33:38 +08:00
lealife a07bb25128 remove unused codes and add site'url configuration on admin 2016-05-25 16:05:47 +08:00
lealife a007b89ebb v2.0 2016-05-25 14:46:40 +08:00
lealife cc4b003503 markdown vim cursor fixed 2016-05-25 09:51:53 +08:00
lealife 091922175a box leanote logo 2016-05-22 16:12:51 +08:00
lealife 371c93912d build 2016-05-22 10:36:36 +08:00
lealife 27221acda7 new logo 2016-05-22 10:34:40 +08:00
lealife 5db724e80b new logo 2016-05-21 23:05:50 +08:00
Yifan Gao 14265d9de4 fix spelling mistake in README.md 2016-05-18 10:26:24 +08:00
lealife 5c9e95ed60 build 2016-04-16 14:53:30 +08:00
lealife 2fc97ed42d markdown editor prettify add linenums 2016-04-16 14:51:54 +08:00
lealife 45cca30cec lea++ -> Explore 2016-04-16 12:09:48 +08:00
lealife 31167b6aaf recount tags 2016-04-16 11:58:39 +08:00
lealife 139906b9d6 recount tags when public note 2016-04-16 11:31:27 +08:00
lealife a9d49369e2 upgrade markdown mathjax 2016-04-12 22:02:36 +08:00
life 303e0da5c0 Update README.md 2016-04-09 10:12:46 +08:00
life ff5523bfaa Merge pull request #340 from eric2100/patch-15
Update blog.conf
2016-04-08 17:07:20 +08:00
Tsunghan,Tsai 063dd0140d Update blog.conf
部分口語修改
2016-04-08 12:31:41 +08:00
life c52d388d5d Merge pull request #337 from eric2100/patch-14
Update msg.conf
2016-04-07 17:31:04 +08:00
eric2100 18bcdb48af Update msg.conf 2016-04-07 12:29:03 +08:00
life db8f132507 Merge pull request #333 from eric2100/patch-9
Update blog.conf
2016-04-05 10:14:31 +08:00
life 439d5212b0 Merge pull request #334 from eric2100/patch-10
Update markdown.conf
2016-04-05 10:13:40 +08:00
life 88e2320027 Merge pull request #335 from eric2100/patch-11
Update member.conf
2016-04-05 10:13:09 +08:00
life 659a4e590a Merge pull request #336 from eric2100/patch-12
Update tinymce_editor.conf
2016-04-05 10:12:19 +08:00
eric2100 ab7f2386e0 Update tinymce_editor.conf 2016-04-05 00:24:21 +08:00
eric2100 ec82ff18f2 Update member.conf 2016-04-05 00:16:00 +08:00
eric2100 f3f00626e6 Update markdown.conf 2016-04-05 00:03:27 +08:00
eric2100 80fbb56426 Update blog.conf 2016-04-05 00:01:46 +08:00
life a5c952882f Merge pull request #332 from eric2100/patch-8
Update album.conf
2016-04-03 21:30:30 +08:00
eric2100 973b452a7e Update album.conf 2016-04-02 21:12:30 +08:00
lealife 25bcd21ea9 overwrite revel.Message 2016-03-19 23:00:41 +08:00
lealife 09de5e1e83 Gulp js i18n generator 2016-03-19 15:46:41 +08:00
lealife 15b0ef21ff restructure messages 2016-03-19 15:37:36 +08:00
lealife 9cf9ded855 remove config langs. Gulp will get all langs by messages/ 2016-03-19 15:17:15 +08:00
lealife 7af433ebaf build 2016-03-19 14:36:47 +08:00
lealife 67b608b324 set langs to config and modify gulp build to support langs 2016-03-19 14:30:07 +08:00
lealife 2aa3f5a654 support 中文繁体 2016-03-19 14:05:09 +08:00
lealife f5538218bd remove baidu statistics Code
https://github.com/leanote/leanote/issues/318
2016-03-04 22:23:53 +08:00
lealife 0e3bdd177c md resize when toggle 2016-02-27 15:30:01 +08:00
lealife 12520cc09d mathjax 2.6.1 2016-02-27 14:20:31 +08:00
life cb67892124 Merge pull request #309 from alexsourcerer/patch-8
Update msg.fr
2016-02-18 14:55:17 +08:00
alexsourcerer 45c09c9a26 Update msg.fr
I updated the msg.fr file (note that the website isn't it french at all anymore for french users)
2016-02-03 23:10:50 +01:00
lealife 20951ea2dd build release 2015-12-25 23:59:57 +08:00
lealife 530f2368da v1.4.2 released 2015-12-25 23:45:38 +08:00
lealife e685a99628 member css for multi lang 2015-12-25 23:45:19 +08:00
lealife bfc5acc3ee 1.4.2 released 2015-12-25 11:50:34 +08:00
lealife 551e3d965e markdown todo-list style 2015-12-25 11:50:34 +08:00
lealife 7c479b5595 fix ace editor hide the last line part section text 2015-12-25 11:50:34 +08:00
lealife b135f9717f fix gen desc 2015-12-25 11:50:34 +08:00
lealife 08ae37cae0 markdown add todo-list feature 2015-12-25 11:50:34 +08:00
Yingbo CUI 315a7bbe62 Update README.md 2015-12-24 16:47:31 +08:00
life e173b18ddc Merge pull request #285 from eurafa/master
Portuguese (Brazil) language added
2015-12-17 10:29:10 +08:00
Rafael Andrade de Oliveira dcc25df679 Chinese translations 2015-12-13 09:09:02 -02:00
Rafael Andrade de Oliveira c561dec14c Portuguese (Brazil) language added 2015-12-13 09:03:50 -02:00
lealife 43e8f2e701 markdown editor inited 2015-12-06 15:48:05 +08:00
lealife dd9952c453 fix export pdf error 2015-12-04 17:50:14 +08:00
lealife 19517dd634 fix export pdf error 2015-12-04 17:37:57 +08:00
lealife a5b006aae7 添加全局 toggle modify with readonly; 发布1.4.1 2015-12-02 20:56:03 +08:00
lealife 90bd07cdcc * markdown v2, 修复笔记内容覆盖 2015-12-02 20:55:34 +08:00
lealife 92576e9239 arm run script 2015-11-29 13:05:26 +08:00
921 changed files with 7388 additions and 3765 deletions

No files matched your search

+1 -1
View File
@@ -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 -15
View File
@@ -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,20 +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('msg', lang, ['msg', 'member', 'markdown', 'album'], keys);
genTinymceLang(lang);
}
genI18nJsFile('msg.fr', ['member.fr', 'markdown.fr', 'album.fr'], keys);
genI18nJsFile('msg.zh', ['member.zh', 'markdown.zh', 'album.zh'], keys);
genI18nJsFile('msg.en', ['member.en', 'markdown.en', 'album.en'], keys);
}); });
// 合并album需要的js // 合并album需要的js
+90 -66
View File
@@ -5,66 +5,83 @@
## 1. Introduction ## 1. Introduction
Leanote, Not Just A Notepad! Leanote, not just a notepad!
![leanote.png](leanote.png "") ![leanote.png](leanote.png "")
**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
@@ -72,14 +89,14 @@ Support us, [donate us](http://leanote.org/#donate). And thanks [donators](http:
* [Leanote iOS](https://github.com/leanote/leanote-ios), [Download From App Store](https://itunes.apple.com/en/app/leanote/id1022302858?mt=8) * [Leanote iOS](https://github.com/leanote/leanote-ios), [Download From App Store](https://itunes.apple.com/en/app/leanote/id1022302858?mt=8)
* [Leanote Android](https://github.com/leanote/leanote-android), development phase * [Leanote Android](https://github.com/leanote/leanote-android), development phase
Yare 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)
+16 -6
View File
@@ -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 = "en"
} }
c.RenderArgs["locale"] = lang c.RenderArgs["locale"] = lang
c.RenderArgs["siteUrl"] = configService.GetSiteUrl() c.RenderArgs["siteUrl"] = configService.GetSiteUrl()
+13 -13
View File
@@ -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"
} }
// 笔记本分类 // 笔记本分类
@@ -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
-92
View File
@@ -1,92 +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("blog.zh")
parse("blog.en")
parse("blog.fr")
}
+12 -2
View File
@@ -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"
@@ -40,7 +41,8 @@ func init() {
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
} }
+10 -2
View File
@@ -6,8 +6,16 @@ import (
"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{}) {
+7
View File
@@ -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
@@ -150,6 +151,12 @@ func Unzip(srcFilePath string, destDirPath string) (ok bool, msg string) {
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 := ""
+223
View File
@@ -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, ""
}
+7 -2
View File
@@ -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,
+16 -23
View File
@@ -67,10 +67,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 {
@@ -498,42 +508,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 +604,5 @@ func (this *ConfigService) HomePageIsAdminsBlog() bool {
} }
func (this *ConfigService) GetVersion() string { func (this *ConfigService) GetVersion() string {
return "1.4" return "2.0"
} }
+21 -5
View File
@@ -438,11 +438,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 +451,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 +472,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)
+22
View File
@@ -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
+1 -1
View File
@@ -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
} }
} }
+9
View File
@@ -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>
+51
View File
@@ -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" .}}
+10 -7
View File
@@ -16,12 +16,15 @@
<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">
@@ -37,16 +40,16 @@
</li> </li>
<li class="hidden-xs"> <li class="hidden-xs">
<a href="http://lea.leanote.com" class="dk" target="_blank"> <a href="http://lea.leanote.com" class="dk" target="_blank">
lea++ Leanote Explore
</a> </a>
</li> </li>
<li class="hidden-xs"> <li class="hidden-xs">
<a href="/note" class="dk" target="_blank"> <a href="/note" class="dk">
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>
-19
View File
@@ -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" .}}
-204
View File
@@ -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}}
-56
View File
@@ -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>
-104
View File
@@ -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>
-73
View File
@@ -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>
-->
-50
View File
@@ -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>
-45
View File
@@ -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>
-323
View File
@@ -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>
-125
View File
@@ -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}}
&nbsp;
<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>
+6 -6
View File
@@ -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/mdeditor/editor/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/mdeditor/editor/google-code-prettify/prettify.js"></script> <script src="/public/js/google-code-prettify/prettify.js"></script>
<script> <script>
function ok() { function ok() {
+2 -2
View File
@@ -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> © 2014-2016
</p> </p>
</div> </div>
+2 -2
View File
@@ -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> © 2014-2016
</p> </p>
</div> </div>
+2 -2
View File
@@ -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> © 2014-2016
</p> </p>
</div> </div>
+2 -2
View File
@@ -8,14 +8,14 @@
<br /> <br />
leanote@leanote.com leanote@leanote.com
<br /> <br />
Copyright © 2014-2015 <a href="https://leanote.com">Leanote</a> Copyright © 2014-2016 <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 Leanote</a>
<br /> <br />
QQ Group: <span id="qqGrup">256076853, <s>158716820</s></span> QQ Group: <span id="qqGrup">326073529, 256076853, 158716820</span>
</div> </div>
</div> </div>
</div> </div>
+10 -9
View File
@@ -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,16 +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="zh-hk">繁体中文</a>
<a data-lang="pt-pt">Portugu&ecirc;s</a>
</div> </div>
<ul class="nav navbar-nav navbar-left"> <ul class="nav navbar-nav navbar-left">
@@ -49,7 +50,7 @@ function log(o) {
<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>
+3 -3
View File
@@ -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">
-10
View File
@@ -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>
+3 -3
View File
@@ -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> © 2014-2016
</p> </p>
</div> </div>
+2 -2
View File
@@ -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> © 2014-2016
</p> </p>
</div> </div>
+2 -2
View File
@@ -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}}
+1 -1
View File
@@ -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>
+4 -4
View File
@@ -7,7 +7,7 @@
<b class="bg-success"> <b class="bg-success">
</b> </b>
</i> </i>
<span> <span class="nav-h1">
{{msg . "memberCenter"}} {{msg . "memberCenter"}}
</span> </span>
</a> </a>
@@ -25,7 +25,7 @@
<i class="fa fa-angle-up text-active"> <i class="fa fa-angle-up text-active">
</i> </i>
</span> </span>
<span> <span class="nav-h1">
{{msg . "accountInfo"}} {{msg . "accountInfo"}}
</span> </span>
</a> </a>
@@ -77,7 +77,7 @@
<i class="fa fa-angle-up text-active"> <i class="fa fa-angle-up text-active">
</i> </i>
</span> </span>
<span> <span class="nav-h1">
{{msg . "blog"}} {{msg . "blog"}}
</span> </span>
</a> </a>
@@ -141,7 +141,7 @@
<b class="bg-success"> <b class="bg-success">
</b> </b>
</i> </i>
<span> <span class="nav-h1">
{{msg . "group"}} {{msg . "group"}}
</span> </span>
</a> </a>
+5 -5
View File
@@ -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>
+18 -22
View File
@@ -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>
@@ -208,13 +201,13 @@ function log(o) {
</a> </a>
</div> </div>
<div class="pull-right toggle-editor-mode" style="line-height: 60px; margin-right:10px" id="toggleEditorMode"> <div class="pull-right toggle-editor-mode top-nav" id="toggleEditorMode">
<a href="#writing"><span>{{msg . "writingMode"}}</span></a> <a href="#writing"><span>{{msg . "writingMode"}}</span></a>
</div> </div>
{{if eq .userInfo.Email "demo@leanote.com"}} {{if eq .userInfo.Email "demo@leanote.com"}}
{{if .openRegister}} {{if .openRegister}}
<div class="pull-right" style="line-height: 60px; margin-right:10px" id="demoRegister"> <div class="pull-right top-nav" id="demoRegister">
<span> <span>
{{msg . "demoRegister"}} {{msg . "demoRegister"}}
</span> </span>
@@ -423,7 +416,7 @@ function log(o) {
<div class="noteSplit" id="noteSplitter"></div> <div class="noteSplit" id="noteSplitter"></div>
<div id="note"> <div id="note" class="read-only-editor">
<!-- 遮罩, 为了resize3Columns用 --> <!-- 遮罩, 为了resize3Columns用 -->
<div id="noteMask" class="note-mask"></div> <div id="noteMask" class="note-mask"></div>
@@ -494,8 +487,12 @@ function log(o) {
</div> </div>
<ul class="pull-right" id="editorTool"> <ul class="pull-right" id="editorTool">
<li><a class="ios7-a " id="editBtn"
data-toggle="dropdown" title="ctrl/cmd+e {{leaMsg . "Toggle Modify with Readonly"}}">
<span class="fa"></span></a></li>
<li><a class="ios7-a " id="saveBtn" <li><a class="ios7-a " id="saveBtn"
data-toggle="dropdown" title="ctrl+s {{msg . "save"}}"> data-toggle="dropdown" title="ctrl/cmd+s {{msg . "save"}}">
<span class="fa fa-save"></span></a></li> <span class="fa fa-save"></span></a></li>
<li class="dropdown" id="noteInfoDropdown"> <li class="dropdown" id="noteInfoDropdown">
@@ -572,7 +569,7 @@ function log(o) {
</div> </div>
<!-- 查看信息 --> <!-- 查看信息 -->
<div id="infoToolbar" class="info-toolbar invisible"> <div id="infoToolbar" class="info-toolbar invisible">
<a class="toolbar-update" title="{{msg . "modify"}} ctrl/cmd+e"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
<span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span> <span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span>
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span> <span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span>
</div> </div>
@@ -607,7 +604,6 @@ function log(o) {
<div class="navbar navbar-default"> <div class="navbar navbar-default">
<div class="navbar-inner" id="wmd-button-bar"> <div class="navbar-inner" id="wmd-button-bar">
<div id="mdInfoToolbar" class="info-toolbar invisible"> <div id="mdInfoToolbar" class="info-toolbar invisible">
<a class="toolbar-update" title="{{msg . "modify"}} ctrl/cmd+e"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
<span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span> <span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span>
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span> <span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span>
</div> </div>
+17 -22
View File
@@ -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>
@@ -196,13 +189,13 @@ function log(o) {
{{msg . "myBlog"}} {{msg . "myBlog"}}
</a> </a>
</div> </div>
<div class="pull-right toggle-editor-mode" style="line-height: 60px; margin-right:10px" id="toggleEditorMode"> <div class="pull-right toggle-editor-mode top-nav" id="toggleEditorMode">
<a href="#writing"><span>{{msg . "writingMode"}}</span></a> <a href="#writing"><span>{{msg . "writingMode"}}</span></a>
</div> </div>
{{if eq .userInfo.Email "demo@leanote.com"}} {{if eq .userInfo.Email "demo@leanote.com"}}
{{if .openRegister}} {{if .openRegister}}
<div class="pull-right" style="line-height: 60px; margin-right:10px" id="demoRegister"> <div class="pull-right top-nav" id="demoRegister">
<span> <span>
{{msg . "demoRegister"}} {{msg . "demoRegister"}}
</span> </span>
@@ -405,7 +398,7 @@ function log(o) {
<div class="noteSplit" id="noteSplitter"></div> <div class="noteSplit" id="noteSplitter"></div>
<div id="note"> <div id="note" class="read-only-editor">
<!-- 遮罩, 为了resize3Columns用 --> <!-- 遮罩, 为了resize3Columns用 -->
<div id="noteMask" class="note-mask"></div> <div id="noteMask" class="note-mask"></div>
@@ -473,8 +466,11 @@ function log(o) {
</div> </div>
<ul class="pull-right" id="editorTool"> <ul class="pull-right" id="editorTool">
<li><a class="ios7-a " id="editBtn"
data-toggle="dropdown" title="ctrl/cmd+e {{leaMsg . "Toggle Modify with Readonly"}}">
<span class="fa"></span></a></li>
<li><a class="ios7-a " id="saveBtn" <li><a class="ios7-a " id="saveBtn"
data-toggle="dropdown" title="ctrl+s {{msg . "save"}}"> data-toggle="dropdown" title="ctrl/cmd+s {{msg . "save"}}">
<span class="fa fa-save"></span></a></li> <span class="fa fa-save"></span></a></li>
<li class="dropdown" id="noteInfoDropdown"> <li class="dropdown" id="noteInfoDropdown">
<a class="ios7-a dropdown-toggle" data-toggle="dropdown" title="{{msg . "Information"}}"> <a class="ios7-a dropdown-toggle" data-toggle="dropdown" title="{{msg . "Information"}}">
@@ -547,7 +543,7 @@ function log(o) {
</div> </div>
<!-- 查看信息 --> <!-- 查看信息 -->
<div id="infoToolbar" class="info-toolbar invisible"> <div id="infoToolbar" class="info-toolbar invisible">
<a class="toolbar-update" title="{{msg . "modify"}} ctrl/cmd+e"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
<span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span> <span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span>
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span> <span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span>
</div> </div>
@@ -582,7 +578,6 @@ function log(o) {
<div class="navbar navbar-default"> <div class="navbar navbar-default">
<div class="navbar-inner" id="wmd-button-bar"> <div class="navbar-inner" id="wmd-button-bar">
<div id="mdInfoToolbar" class="info-toolbar invisible"> <div id="mdInfoToolbar" class="info-toolbar invisible">
<a class="toolbar-update" title="{{msg . "modify"}} ctrl/cmd+e"><i class="fa fa-pencil"></i> <span class="lang">{{msg . "modify"}}</span></a>
<span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span> <span class="lang">{{msg . "created"}}</span>: <span class="created-time"></span>
<span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span> <span class="lang">{{msg . "updated"}}</span>: <span class="updated-time"></span>
</div> </div>
+7 -2
View File
@@ -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" V="v2.0"
##================================= ##=================================
# 1. 先build 成 3个平台, 2种bit = 6种 # 1. 先build 成 3个平台, 2种bit = 6种
@@ -122,7 +122,12 @@ function tarRelease()
if [ $1 = "linux" -o $1 = "darwin" ] if [ $1 = "linux" -o $1 = "darwin" ]
then then
suffix="" suffix=""
cp ./bin/run.sh $tmp/leanote/bin/ if [ $2 = "arm" ]
then
cp ./bin/run-arm.sh $tmp/leanote/bin/run.sh
else
cp ./bin/run-$1-$2.sh $tmp/leanote/bin/run.sh
fi
else else
cp ./bin/run.bat $tmp/leanote/bin/ cp ./bin/run.bat $tmp/leanote/bin/
suffix=".exe" suffix=".exe"
+1 -12
View File
@@ -13,17 +13,6 @@ ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
# set GOPATH # set GOPATH
export GOPATH=$SCRIPTPATH export GOPATH=$SCRIPTPATH
# run script="$SCRIPTPATH/leanote-linux-arm"
osName=`uname` # Darwin or Linux
osName=`tr '[A-Z]' '[a-z]' <<<"$osName"` # toLowerCase
bit=`getconf LONG_BIT` # 32, 64
if [ $bit = "64" ]
then
bit="amd64"
else
bit="386"
fi
script="$SCRIPTPATH/leanote-$osName-$bit"
chmod 777 $script chmod 777 $script
$script -importPath github.com/leanote/leanote $script -importPath github.com/leanote/leanote
+18
View File
@@ -0,0 +1,18 @@
#!/bin/sh
SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)
# set link
path="$SCRIPTPATH/src/github.com/leanote"
if [ ! -d "$path" ]; then
mkdir -p "$path"
fi
rm -rf $SCRIPTPATH/src/github.com/leanote/leanote # 先删除
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
# set GOPATH
export GOPATH=$SCRIPTPATH
script="$SCRIPTPATH/leanote-darwin-amd64"
chmod 777 $script
$script -importPath github.com/leanote/leanote
+18
View File
@@ -0,0 +1,18 @@
#!/bin/sh
SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)
# set link
path="$SCRIPTPATH/src/github.com/leanote"
if [ ! -d "$path" ]; then
mkdir -p "$path"
fi
rm -rf $SCRIPTPATH/src/github.com/leanote/leanote # 先删除
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
# set GOPATH
export GOPATH=$SCRIPTPATH
script="$SCRIPTPATH/leanote-linux-386"
chmod 777 $script
$script -importPath github.com/leanote/leanote
+18
View File
@@ -0,0 +1,18 @@
#!/bin/sh
SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)
# set link
path="$SCRIPTPATH/src/github.com/leanote"
if [ ! -d "$path" ]; then
mkdir -p "$path"
fi
rm -rf $SCRIPTPATH/src/github.com/leanote/leanote # 先删除
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote
# set GOPATH
export GOPATH=$SCRIPTPATH
script="$SCRIPTPATH/leanote-linux-amd64"
chmod 777 $script
$script -importPath github.com/leanote/leanote
+2 -2
View File
@@ -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
+74
View File
@@ -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
-31
View File
@@ -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
+31
View File
@@ -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
+91
View File
@@ -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
+35
View File
@@ -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
+135
View File
@@ -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
+286
View File
@@ -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.
+179
View File
@@ -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
File renamed without changes.
File renamed without changes.
+4 -1
View File
@@ -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
@@ -118,6 +119,8 @@ Choose File=Choose File
Download All=Download All Download All=Download All
Information=Information Information=Information
Toggle Modify with Readonly=Toggle Modify with Readonly
update=Update update=Update
create=Create create=Create
+179
View File
@@ -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
+31
View File
@@ -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.
+35
View File
@@ -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
+25 -23
View File
@@ -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,6 +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=Passer d'écriture à lecture seule
update=Mettre à jour update=Mettre à jour
create=Créer create=Créer
@@ -154,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
@@ -193,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
@@ -243,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.
+179
View File
@@ -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
-35
View File
@@ -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
+31
View File
@@ -0,0 +1,31 @@
# album image
Images=Imagens
Upload=Enviar
Image URL=Imagem URL
Albums=Álbuns
Default=Padrão
File title search=Busca pelo título do arquivo
Go to upload images=Ir para envio de imagens
Rename=Renomear
Add=Incluir
Add Album=Incluir álbum
Add Image=Incluir imagem
Can't load this url=Não é possível carregar esta URL
No Images=Sem imagens
Click to upload images Or Drop images to here=Clique para fazer o envio de imagens or arraste imagens aqui
Cannot delete default album=Não é possível excluir o álbum padrão
Cannot rename default album=Não é possível renomear o álbum padrão
This album has images, please delete it's images at first.=Este álbum tem imagens, favor excluir elas antes.
Rename Album=Renomear Álbum
Add Success!=Incluído com sucesso!
Rename Success!=Renomeado com sucesso!
Delete Success!=Excluído com sucesso!
Are you sure to delete this image ?=Vocês tem certeza que deseja excluir esta imagem ?
click to remove this image=clique para excluir esta imagem
error=erro
Error=Erro
Prev=Anterior
Next=Próxima
+91
View File
@@ -0,0 +1,91 @@
# blog
blogNavs=Navegação
quickLinks=Links rápidos
latestPosts=Últimas postagens
noBlog=Sem blog
noTag=Sem tag
blogClass=Categoria
updatedTime=Enviado em
createdTime=Criado em
fullBlog=Blog completo
blogNav=Navegação do blog
more=Mais...
previous=Anterior
next=Próximo
#
# set blog
#
blogSet=Configuração do blog
baseInfoSet=Informações básicas
commentSet=Comentário
themeSet=Tema
theme=Tema
blogName=Título
blogLogo=Logo
blogDesc=Descrição
aboutMe=Sobre mim
#domain
domainSet=Domímio
subDomain=Subdomínio
domain=Domain personalizado
# theme
elegant=Elegante
navFixed=Navegação fixada à esquerda
openComment=Abrir commentário?
chooseComment=Sistema de comentário
disqusHelp=Favor insira seu Disqus Id
needHelp=Precisa de ajuda?
blogLogoTips=Envie uma imagem para substituir o título do blog
saveSuccess=Gravado com sucesso
community=Comunidade
home=Home
none=Nada
moreShare=Mais
sinaWeibo=Weibo
weixin=Weichat
tencentWeibo=Tencent Weibo
qqZone=QQ Zone
renren=Renren
report=Relatório
like=Gostei
unlike=Não gostei
viewers=Visualizadores
author=Autor
delete=Excluir
reply=Responder
comment=Comentar
comments=Comentários
cancel=Cancelar
confirm=Confirmar
signIn=Sign In
signUp=Sign Up
submitComment=Submeter
reportReason1=Conteúdos hostis
reportReason2=Publicidade de spam
reportReason3=Conteúdos ilegais
reportReason4=Não deve abrir a discussão de conteúdo político
other=Outro
reportReason=Razão
chooseReason=Por favor selecione a razão do relatório
reportSuccess=Relatório enviado com sucesso, iremos notificar o acordo com o autor, obrigado pela supervisão
error=Erro
reportComment?=Denunciar este comentário?
reportBlog?=Denunciar este blog?
confirmDeleteComment=Você tem certeza?
scanQRCode=Abrir weichat e escanear o código QR
justNow=Agota
minutesAgo=minutos atrás
hoursAgo=horás atrás
daysAgo=dias atrás
weeksAgo=semanas atrás
monthsAgo=meses atrás
a=a
+35
View File
@@ -0,0 +1,35 @@
# markdown editor
Hyperlink=Hyperlink
Please provide the link URL and an optional title=Favor informar a URL e um título opcional
optional title=título opcional
Ok=Ok
Cancel=Cancelar
Strong=Negrito
strong text=texto em negrito
Emphasis=Itálico
emphasized text=texto em itálido
Blockquote=Avanço
Code Sample=Código de exemplo
enter code here=Insira o código aqui
Image=Imagem
Heading=Cabeçalho
Numbered List=Lista numerada
Bulleted List=Lista não-numerada
List item=Item de lista
Horizontal Rule=Linha horizontal
Markdown syntax=Syntaxe Markdown
Undo=Desfazer
Redo=Refazer
enter image description here=Inserir a descrição da imagem aqui
enter link description here=Inserir a descrição do link aqui
Edit mode=Modo Edit
Vim mode=Movo Vim
Emacs mode=Modo Emacs
Normal mode=Modo Normal
Normal=Normal
Light=Light
Light editor=Editor light
Insert Image=Inserir Imagem
+136
View File
@@ -0,0 +1,136 @@
####################
# Member Center
####################
memberCenter=Membro Central
userNotExists=Usuário inexistente
hasUsers=O usuário já existe
Leanote Blog Theme Api=Tema da API do Blog do Leanote
My Group=Meu grupo
# post abstract
Abstract=Resumo
Description=Descrição
Once the abstract has been updated, it will not set the abstract automatically other than you cancel it.=Uma vez que o resumo seja atualizado, ele não será definido automaticamente exceto se você cancelá-lo.
Main Image=Imagem principal
Get next image as main image from content=Usar a próxima imagem do conteúdo como imagem principal
Raw Content=Conteúdo original
#memeber
welcomeToLeanote=Bem-vindo
accountInfo=Informações da conta
accountType=Tipo da conta
premiumAccountType=Premium
normalAccountType=Normal
imageSize=Tamanho de imagem
attachSize=Tamanho de anexo
totalTraffic=Tráfego de Internet
upgrade=Evoluir minha conta
leanoteEvents=Novidade da Leanote
addLeanoteAccount=Nova conta Leanote
defaultComment=Sistema padrão de comentário Leanote
upgradeAccountTips=Quero utilizar um domínio personalizado para o meu blog, <a class="btn btn-default" href="/service">Evoluir minha conta</a>
cateIsPublicNotebook=Categoria são notas publicadas
dragAndSort=Arraste para ordenar
permanentLink=Link permanente
cate=Categoria
noCates=Sem categoria
single=Página simples
singleTips=Você pode incluir diversas páginas simples
addSingle=Nova página simples
updateSingle=Atualizar página simples
inputSingleTitle=O título é obrigatório
saveSort=Ordenação gravada
pagingAndSort=Configurações de paginação e ordenação
perPageSize=Itens por página
sortField=Campo de ordenação
sortType=Tipo de ordenação
publicTime=Data/hora da publicação
createdTime=Data de criação
updatedTime=Data de atualização
desc=Desc
asc=Asc
postList=Lista de postagens
hasSelfDefined=Definido
noSelfDefined=Não definido
setAbstract=Configurações do resumo
title=Título
content=Conteúdo
addTheme=Novo tema
importTheme=Importar tema
exportTheme=Exportar tema
export=Exportar
preview=Pré-visualização
edit=Editar
use=Usar
install=Instalar
currentTheme=Tema atual
myOtherThemes=Meus outros tema
leanoteThemeMarket=Venda de temas da Leanote
updateTheme=Atualizar tema
tplStyleScript=template, style, script
newFile=Novo arquivo
image=Imagem
currentFile=Arquivo atual
tpl=Template
style=Style
script=Script
header=Cabeçalho
footer=Rodapé
index=Início
cate=Categoria
search=Pesquisa
single=Página simples
archive=Arquivo
post=Post
tags=Tags
tag_posts=Postagens de tags
share_comment=Comentários
themeJson=Configurações de tema
paging=Paginação
highlight=Realce de código
# member title
Leanote Member Center=Membro Central Leanote
Username=Usuário
Email=E-mail
Password=Senha
Avatar=Avatar
Add Account=Incluir conta
Update Post Abstract=Atualizar resumo da postagem
Blog Base Info=Informações básicas do blog
Comment=Comentário
Posts=Postagens
Domain=Domínio
Paging=Paginação
Category=Categoria
Add Single=Incluir página simples
Update Single=Atualizar página simples
Single=Página simples
Theme=Tema
Upate Theme=Atualizar tema
group=Grupo
newGroup=Novo grupo
deleteGroup=Excluir grupo
addMemberTips=Informar nome de usuário ou e-mail para incluir o membro
deleteMember=Excluir membro
forbiddenNotMyGroup=Você não possui autorização de acesso porque você não é o dono do grupo
userExistsInGroup=O membro já está neste grupo
notMyGroup=Você não é o dono do grupo
# view js
Are you sure ?=Você tem certeza ?
Are you sure to install it ?=Você tem certeza que deseja instalar ?
Are you sure to delete=Você tem certeza que deseja excluir
Success=Sucesso
Error=Erro
File exists=Arquivo existente
Delete file=Excluir arquivo
No images=Sem imagens
Filename=Arquivo
Group Title=Título do grupo
+282
View File
@@ -0,0 +1,282 @@
# leanote
app=Leanote
moto=Mais que um bloco de notas!
moto2=Conhecimento, Blog, Compartilhamento, Cooperação... tudo em Leanote
moto3=Breve mas não simples
fork github=Fork Leanote no Github
# Home
openSource=leanote.org
forgetPassword = Esqueceu sua senha?
or=ou
try=Tente isso
3th=Contas de terceiros
usernameOrEmail=Nome de usuário ou e-mail
password=Senha
home=Página inicial
desktopApp=Aplicativo
aboutLeanote=Sobre Leanote
suggestions=Sugestões
yourSuggestions=Sugestões
leanoteBlog=Blog
knowledge=Conhecimento
knowledgeInfo=Use Leanote como uma nota, gerencie seu conhecimento no Leanote.
share=Compartilhamento
shareInfo=Compartilhe seu conhecimento com amigos no Leanote.
cooperation=Cooperação
cooperationInfo=Coopere com amigos para aprimorar o conhecimento deles.
blog=Blog
blogInfo=Você pode publicar seu conhecimento e leanote no seu blog!
suggestionsInfo=Ajude-nos a melhorar nosso serviço
yourContact=Seu contato
emailOrOthers=E-mail ou outra forma de contato
captcha=Captcha
reloadCaptcha=Recarregar Captcha
captchaError=Captcha inválido
inputCaptcha=Captcha é obrigatório
noTag=Sem Tags
hi=Hi
welcomeUseLeanote=Bem-vindo!
myNote=Minha nota
curUser=E-mail
# form
submit=submeter
Submit=Submeter
register=Sign up
login=Sign in
Password=Senha
password2=Confirmação de senha
email=E-mail
inputUsername=Nome de usuário (e-mail) é obrigatório
inputEmail=E-mail é obrigatório
wrongEmail=E-mail inválido
wrongUsernameOrPassword=Nome de usuário ou senha inválida
inputPassword=Senha é obrigatória
inputLoginPasswordTips=Favor informar a senha
wrongPassword=Senha inválida
logining=Sign in
loginSuccess=Login com sucesso
ing=Processando
use = Use
hadAcount = Já possui uma conta?
hasAcount = Não possui uma conta?
signInWithThird=Entrar com outra conta
# sign in
registerSuccessAndRdirectToNote=Registro com sucesso, redirecionando...
userHasBeenRegistered=%s já está registrado
# find password
passwordTips=O tamanho deve ser de pelo menos 6 caracteres
findPassword=Recuperar senha
findPasswordSendEmailOver=Nós já enviamos o link de recuperação de senha para o seu e-mail, por favor verifique o seu e-mail
checkEmai=Verificar e-mail
findPasswordTimeout=prazo
reFindPassword=Recuperar senha novamente
updatePassword=Alterar a senha
updatePasswordSuccessRedirectToLogin=Senha alterada com sucesso e redirecionado para a página de login...
inputPassword2=Favor informar sua senha novamente
confirmPassword=Favor confirmar a seua senha
notGoodPassword=Esta não é uma boa senha, o tamanho deve ser de pelo menos 6 caracteres
# note
myBlog=Blog
Explore=Explore
history=Histórico
save=Salvar
editorTips=Dicas
editorTipsInfo=<h4>1. Atalhos</h4>ctrl+shift+c Alternar código<h4>2. shift+enter Sair do bloco atual</h4> ex.: <img src="/images/outofcode.png" style="width: 90px"/> neste caso você pode usar shift+enter para sair do bloco atual.
newNote=Nova nota
newMarkdownNote=Nova nota em Markdown
noNoteNewNoteTips=O bloco de notas está vazio porque não...
canntNewNoteTips=Desculpe, não é possível uma nova nota aqui, favor escolher um caderno primeiro.
new=Novo
newMarkdown=Nova nota em markdown
clickAddTag=Clique para incluir uma tag
notebook=Bloco de notas
note=Nota
myNotebook=Meu bloco de notas
addNotebook=Incluir bloco de notas
search=Pesquisar
clearSearch=Limpar pesquisa
all=Recentes
trash=Lixo
delete=Excluir
unTitled=Sem título
defaultShare=Compartilhamento padrão
leftHidden=Ocultar barra deslizante
leftShow=Mostrar barra deslizante
nav=Navegação da nota
writingMode=Modo de escrita
normalMode=Modo normal
saving=Salvando
saveSuccess=Salvo com sucesso
SearchNote=Pequisar nota
SearchNotebook=Pesquisar bloco de notas
Choose File=Escolher arquivo
Download All=Download de tudo
Information=Informação
Toggle Modify with Readonly=Alternar modificação somente leitura
update=Alterar
create=Criar
demoRegister=<a href="/register">Registrar</a>
close=Fechar
cancel=Cancelar
send=Enviar
# tag
tag=Tag
myTag=Minha tag
red=vermelho
yellow=amarelo
blue=azul
green=verde
# setting
accountSetting=Conta
logout=Logout
basicInfo=Básico
basicInfoSet=Configurações básicad do blog
updateEmail=Alterar e-mail
usernameSetting=Alterar nome de usuário
chooseImage=Escolher imagem
oldPassword=Senha anterior
newPassword=Nova senha
admin=Administrador
# theme
default=Padrõa
simple=Simples
# tinymce
uploadImage=Enviar imagem
# blog
aboutMe=Sobre mim
blogSet=Configurações do Blog
# index
discussion=Discussão
download=Download
howToInstallLeanote=Como instalar o leanote
#
attachments = Anexos
donate = Doação
# contextmenu
shareToFriends=Compartilhar com amigos
publicAsBlog=Publicar como blog
cancelPublic=Cancelar publicação
move=Mover
copy=Copiar
rename=Renomear
exportPdf=Exportar PDF
addChildNotebook=Incluir bloco de notas filho
deleteAllShared=Excluir usuário compartilhad
deleteSharedNotebook=Excluir bloco de notas compartilhado
copyToMyNotebook=Copiar para meu bloco de notas
# note-dev
emailInSending=Enviando para
checkEmail=Verificar e-mail
setUsername=Configurar nome de usuário
setUsernameTips=Seu e-mail atual é: <code>%s</code>. Você pode configurar um nome de usuário único. <br />O tamanho do nome de usuário deve ser de pelo menos 4 caracteres e não pode conter caracteres especiais.
currentEmail=Seu e-mail atual é: <code>%s</code>
updateEmail=Alterar e-mail
updateEmailTips=Você deve verificar o e-mail antes de alterar o e-mail. O e-mail verificado será sua nova conta.
sendVerifiedEmail=Enviar e-mail de verificação
verified=Verificado
unVerified=Não verificado
verifiedNow=Verificar agora
resendVerifiedEmail=Reenviar e-mail de verificação
# share
defaulthhare=Padrão
addShare=Adicionar amigo
friendEmail=E-mail do amigo
permission=Permissão
readOnly=Somente leitura
writable=Escrita
inputFriendEmail=O e-mail do amigo é obrigatório
clickToChangePermission=Clique para alterar a permissão
sendInviteEmailToYourFriend=Enviar convite por e-mail para seu amigo
copySuccess=Copiado com sucesso
copyFailed=Falha ao copiar
friendNotExits=Seu amigo não possui uma conta, link para o registro: %s
emailBodyRequired=Corpo do e-mail body é obrigatório
clickToCopy=Clique para copiar
sendSuccess=sucesso
inviteEmailBody=Olá, eu sou %s, %s é incrível, vamos lá!
# history
historiesNum=Nós gravamos pelo menos os <b>10</b> últimas históricos de cada nota
noHistories=Sem histórico
datetime=Data/hora
restoreFromThisVersion=Restaurar a partir desta versão
confirmBackup=Você tem certeza que deseja restaurar a partir desta versão? Nós faremos backup da nota atual.
createAccount=Criar conta
createAccountSuccess=Conta criada com sucesso
createAccountFailed=Falha na criação da conta
thirdCreateAcountTips=Você está usando conta de terceiros para login %(app)s, você pode criar uma %(app)s conta também. <br />Depois de criar %(app)s conta, você pode usar a conta e a conta de terceiros para fazer login %(app)s.
# valid msg
inputUsername=Informe o nome de usuário
updateUsernameSuccess=Alteração do nome de usuário com sucesso
usernameIsExisted=Nome de usuário existente
noSpecialChars=Nome de usuário não pode conter caracteres especiais
minLength=O tamanho mínimo é %s
errorEmail=Favor informar o e-mail corretamente
verifiedEmaiHasSent=O e-mail de verificação foi enviado, favor verificar o seu e-mail.
emailSendFailed=Falha ao enviar o e-mail
inputPassword=A senha é obrigatória
inputNewPassword=A nova senha é obrigatória
inputPassword2=Favor informar a nova senha novamene
errorPassword=O tamanho da senha deve ser de pelo menos 6 caracteres e uma senha segura
oldPasswordError=A senha antiga não confere
confirmPassword=Senha não confere
updatePasswordSuccess=Alteração de senha com sucesso
errorDomain=O domínio personalizado é inválido, ex.: www.myblog.com
domainExisted=O domínio personalizado já existe
errorSubDomain=Favor informar um subdomínio válido, o tamanho deve ser de pelo menos 4 caracteres e não deve conter caracteres especiais
subDomainExisted=O subdomínio já existe
domainNotPointToLeanote=O domínio personalizado não pode ser d.leanote.com
errorPerPageSize=Tamanho de página está errado
errorSortField=Campo de ordenação está errado
themeValidHasRoundInclude=ALERTA: Templates tem referência circular!
# share
tokenExpired=Token Expirado
Share=Compartilhar
hasSharedThisNote=compartilhou esta nota
inputSharePwd=Favor informar a senha
shareToGroup=Compartilhar para o grupo
shareByPwd=Compartilhar pela senha
groupName=Nome do grupo
operation=Operação
groupAndMemberManage=Gereciar grupos/membros
shareToGroupTips=Se você compartilhar esta nota com o grupo, o membro pertencente ao grupo irá ter direito de acesso a esta nota
shared=Compartilhado
notShared=Não compartilhado
shareLink=Link compartilhado
sharePwd=Senha de acesso
cancelShare=Cancelar
getShareLinkAndPwd=Pegar link e senha
# Common
created=Criado
updated=Alterado
modify=Modificar
Search=Pesquisar
Save Success=Salvo com sucesso
Please save note firstly!=Favor salvar a nota primeiro!
Please sign in firstly!=Favor entrar primento!
# error
notFound=Esta página não pode ser encontrada.
+179
View File
@@ -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=帮助
@@ -144,6 +146,7 @@ Insert link into content=将附件链接插入到内容中
Download=下载 Download=下载
Delete=删除 Delete=删除
Drop images to here=将图片拖动至此 Drop images to here=将图片拖动至此
Toggle Modify with Readonly=编辑与只读切换
update=更新 update=更新
create=创建 create=创建
+186
View File
@@ -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=格式
+31
View File
@@ -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=下一頁
+97
View File
@@ -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
+35
View File
@@ -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=插入
+137
View File
@@ -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=群組標題
+319
View File
@@ -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]
+186
View File
@@ -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
View File
@@ -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;
+14 -22
View File
@@ -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 {
+1 -1
View File
@@ -4,4 +4,4 @@
* Licensed under http://www.apache.org/licenses/LICENSE-2.0 * Licensed under http://www.apache.org/licenses/LICENSE-2.0
* *
* Designed and built with all the love in the world by @mdo and @fat. * Designed and built with all the love in the world by @mdo and @fat.
*//*! normalize.css v2.1.3 | MIT License | git.io/normalize */hr,img{border:0}body,figure{margin:0}.img-thumbnail,.thumbnail{-webkit-transition:all .2s ease-in-out}.breadcrumb,.carousel-indicators,.dropdown-menu,.media-list,.nav,.pager{list-style:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}h1{margin:.67em 0}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*{color:#000!important;text-shadow:none!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}@page{margin:2cm .5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open .dropdown-toggle.btn-danger,.open .dropdown-toggle.btn-default,.open .dropdown-toggle.btn-info,.open .dropdown-toggle.btn-success,.open .dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Tahoma,sans-serif,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333}button,input,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:focus,a:hover{color:#2a6496;text-decoration:underline}a:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out}pre code,table{background-color:transparent}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.collapsing,.dropdown,.glyphicon{position:relative}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}h1,h2,h3,h4,h5,h6{margin-bottom:10px}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3071a9}.text-warning{color:#c09853}.text-warning:hover{color:#a47e3c}.text-danger{color:#b94a48}.text-danger:hover{color:#953b39}.text-success{color:#468847}.text-success:hover{color:#356635}.text-info{color:#3a87ad}.text-info:hover{color:#2d6987}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:Arial,Tahoma,sans-serif,HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,"Microsoft Yahei",Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4Line truncated *//*! normalize.css v2.1.3 | MIT License | git.io/normalize */hr,img{border:0}body,figure{margin:0}.img-thumbnail,.thumbnail{-webkit-transition:all .2s ease-in-out}.breadcrumb,.carousel-indicators,.dropdown-menu,.m-todo-item,.media-list,.nav,.pager{list-style:none}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}h1{margin:.67em 0}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*{color:#000!important;text-shadow:none!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}@page{margin:2cm .5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.open .dropdown-toggle.btn-danger,.open .dropdown-toggle.btn-default,.open .dropdown-toggle.btn-info,.open .dropdown-toggle.btn-success,.open .dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-size:62.5%;-webkit-tap-highlight-color:transparent}body{font-family:Arial,Tahoma,sans-serif,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333}button,input,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:focus,a:hover{color:#2a6496;text-decoration:underline}a:focus{outline:#333 dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out}pre code,table{background-color:transparent}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.collapsing,.dropdown,.glyphicon{position:relative}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4}h1,h2,h3,h4,h5,h6{margin-bottom:10px}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-primary:hover{color:#3071a9}.text-warning{color:#c09853}.text-warning:hover{color:#a47e3c}.text-danger{color:#b94a48}.text-danger:hover{color:#953b39}.text-success{color:#468847}.text-success:hover{color:#356635}.text-info{color:#3a87ad}.text-info:hover{color:#2d6987}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:Arial,Tahoma,sans-serif,HelveticaNeue-Light,"Helvetica Neue Light","Helvetica Neue",Helvetica,"Microsoft Yahei",Arial,sans-serif;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,Line truncated
+3
View File
@@ -7141,3 +7141,6 @@ td.visible-print {
#content .MathJax * { #content .MathJax * {
font-size: inherit; font-size: inherit;
} }
.m-todo-item {
list-style: none;
}
-325
View File
@@ -1,325 +0,0 @@
.entry-controls {
text-align: right;
padding-top: 20px;
margin-top: 20px;
margin-bottom: 10px;
border-top: 1px solid #f1f2f3;
}
.entry-controls .right-section {
float: right;
color: #9d9e9f;
}
.entry-controls .right-section a {
color: #9d9e9f;
}
.post-menu-button {
padding-bottom: 10px;
}
.ui-menu-button {
position: relative;
display: inline-block;
cursor: pointer;
}
.entry-controls .control-item {
margin-left: 15px;
color: #9d9e9f;
font-size: 15px;
opacity: 1;
-webkit-transition: all 0.05s ease-in-out;
-moz-transition: all 0.05s ease-in-out;
-o-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
}
.vote-section-wrapper {
display: inline-block;
float: left;
}
.entry-controls .voters {
display: block;
margin-top: 52px;
height: 25px;
clear: both;
}
.entry-controls .voters .more-voters,
.entry-controls .voters .voter {
width: 25px;
height: 25px;
position: relative;
margin: 0 8px 8px 0;
float: left;
}
.entry-controls .voters .voter > img {
float: left;
}
.avatar-small {
width: 25px;
height: 25px;
border-radius: 50%;
}
.comment-box {
margin: 0;
padding: 0;
font-size: 16px;
}
.comment-box a {
font-size: 16px;
}
.comment-box .box-header {
border-top: 1px solid #f1f2f3;
font-size: 15px;
color: #9d9e9f;
padding: 30px 0 10px;
position: relative;
}
.comment-box .box-header .icon {
margin-right: 8px;
vertical-align: -3px;
}
.comment-box .box-header a.comment-options {
margin-left: 10px;
}
@media screen and (max-width: 600px) {
.comment-box .box-header {
padding-left: 17px;
padding-right: 17px;
}
}
.comment-box .load-more {
height: 26px;
margin-top: 15px;
padding-top: 24px;
text-align: center;
font-size: 15px;
border-top: solid 1px #f1f2f3;
}
.comment-box .load-more a {
color: #9d9e9f;
}
.comment-box .ui-spinner {
margin: 0 auto;
}
.comment-box .ui-spinner.small {
position: relative;
left: 10px;
}
.comment-box.empty.cannot-comment {
border: 1px solid #dddddd;
}
.comment-box.cannot-comment .editable,
.comment-box.cannot-comment .editable,
.comment-box.comment-box.cannot-comment .command,
.comment-box.comment-box.cannot-comment .op-link.reply {
display: none !important;
}
.comment-box.empty.cannot-comment .comment-form {
margin: 0;
}
.comment-box.empty.cannot-comment .comment-box-ft {
background: #ffffff;
}
.comment-box.empty.cannot-comment .comment-box-ft,
.comment-box .comment-box-ft {
position: relative;
margin-top: 0;
}
.comment-box .avatar {
width: 40px;
height: 40px;
border-radius: 20px;
float: left;
}
.comment-box .message {
margin-top: 24px;
padding: 10px;
border-radius: 4px;
text-align: center;
background: #F7F8F9;
color: #9d9e9f;
}
.comment-item {
position: relative;
list-style: none;
outline: 0;
padding: 15px 0;
border-bottom: solid 1px #f1f2f3;
}
.item-highlight * {
border-radius: 5px;
font-weight: bold;
}
@media screen and (max-width: 600px) {
.comment-item {
padding-left: 17px;
padding-right: 17px;
}
}
.comment-item > .avatar-link {
float: left;
margin: 4px 0 0;
}
.comment-item > .comment-body {
margin: 0 0 0 60px;
}
.comment-item .comment-content {
min-height: 22px;
font-size: 15px;
word-wrap: break-word;
padding: 5px 0;
}
.comment-item .comment-hd,
.comment-item .comment-ft {
color: #9d9e9f;
}
.comment-item .comment-hd .desc,
.comment-item .comment-ft .desc {
font-size: 15px;
}
.comment-item .comment-ft {
font-size: 15px;
}
.comment-item .op-link {
color: #9d9e9f;
font-size: 15px;
margin-left: 12px;
}
.comment-item .op-link {
visibility: hidden;
}
@media screen and (max-width: 420px) {
.comment-item .op-link .icon {
display: none;
}
}
.comment-item .like-num {
float: right;
}
.comment-item .like-num.nil {
display: none;
}
.comment-item:hover .op-link {
visibility: visible;
}
.comment-form.comment-reply-form {
padding: 20px 0;
}
.comment-form .row {
margin: 0;
}
.comment-form .editable {
padding: 6px 12px;
font-size: 16px;
min-height: 18px;
line-height: 26px;
white-space: pre-wrap;
width: 100%;
color: #222;
cursor: text;
border: 1px solid #DDD;
border-radius: 4px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05) inset;
background: #e6eaed;
color: #747f8c;
}
#commentForm {
border-top: solid 1px #f1f2f3;
padding: 10px 0;
}
.comment-form .editable:focus {
outline: none;
border: 1px solid #cccccc;
}
.comment-form > .command {
display: none;
margin-top: 20px;
padding-bottom: 0;
text-align: right;
}
.comment-form > .command .save {
float: right;
}
.comment-form > .command .cancel {
color: #9d9e9f;
vertical-align: -7px;
margin-right: 10px;
}
.comment-form.expanded .command {
display: block;
}
.comment-form > .avatar + .editable {
margin-left: 60px;
}
#comments {
padding: 0;
}
#comments form {
display: none;
}
@media screen and (max-width: 600px) {
.comment-form {
padding-left: 17px;
padding-right: 17px;
}
}
.btn-zan {
border-radius: 50px;
}
.btn-weibo {
border-radius: 50px;
color: #d44137;
border-color: #d44137;
}
.btn-weibo:hover {
color: #fff;
background: #d44137;
}
.btn-weixin {
color: #38ad5a;
border-color: #38ad5a;
border-radius: 50px;
}
.btn-weixin:hover {
color: #fff;
background: #38ad5a;
}
.reply-comment-btn {
width: 100px;
}
.avatar-wrap {
float: left;
}
.editor-wrap {
margin-left: 60px;
}
#weixinQRCode {
text-align: center;
}
.report-form ul {
margin: 0;
padding: 0;
}
.report-form .options > li {
list-style: none;
display: block;
line-height: 2;
color: #666768;
}
.report-form .options input {
margin-right: 10px;
vertical-align: 1px;
}
.footnote {
color: red;
}
#moreComments {
padding: 20px 0;
text-align: center;
}
.needLogin {
padding: 20px 0;
text-align: center;
font-size: 18px;
border-top: 1px solid #f1f2f3;
}
.needLogin a {
font-size: 18px;
}
-15
View File
@@ -1,15 +0,0 @@
html {
border: none;
}
body {
background-color: #fbfcf7;
}
* {
font-size: 16px;
}
pre {
font-size: 14px;
}
img {
max-width: 100% !important;
}
-27
View File
@@ -1,27 +0,0 @@
html {
margin-top: 3px;
padding: 3px;
border: 1px solid #ebeff2;
border-radius: 5px;
-webkit-border-radius: 5px;
border-width: 1px;
box-shadow: none;
}
* {
font-family: Helvetica, Tahoma, Arial, Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", "Micro Hei", SimSun, "宋体", Heiti, "黑体", sans-serif;
}
.mce-item-table,
.mce-item-table td,
.mce-item-table th,
.mce-item-table caption {
border: 1px solid #9B9898;
border-collapse: collapse;
}
img {
max-width: 100% !important;
}
@media screen and (max-width: 500px) {
* {
font-size: 16px;
}
}
+48 -3
View File
@@ -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,6 +64,11 @@
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');
} }
#logo {
font-size: 32px;
color: #000;
padding-top: 8px;
}
/*"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue", Helvetica, "Microsoft Yahei", Verdana, Simsun, "Segoe UI", "Segoe UI Web Regular", "Segoe UI Symbol", "BBAlpha Sans", "S60 Sans", Arial, sans-serif;*/ /*"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue", Helvetica, "Microsoft Yahei", Verdana, Simsun, "Segoe UI", "Segoe UI Web Regular", "Segoe UI Symbol", "BBAlpha Sans", "S60 Sans", Arial, sans-serif;*/
::selection { ::selection {
background: #000000; background: #000000;
@@ -60,14 +107,13 @@ a:hover {
margin: 0; margin: 0;
} }
#headerContainer .navbar-brand { #headerContainer .navbar-brand {
padding: 0;
padding-left: 10px; padding-left: 10px;
line-height: 60px;
} }
#headerContainer .navbar-brand img { #headerContainer .navbar-brand img {
height: 50px; height: 50px;
display: inline-block; display: inline-block;
margin-top: -5px; margin-top: -5px;
padding: 8px;
} }
#headerContainer .navbar-nav a { #headerContainer .navbar-nav a {
line-height: 60px; line-height: 60px;
@@ -694,7 +740,6 @@ input,
#footer .footer-leanote a { #footer .footer-leanote a {
color: #475F77; color: #475F77;
} }
/* news */ /* news */
.index-news a:hover { .index-news a:hover {
text-decoration: underline !important; text-decoration: underline !important;
+10 -2
View File
@@ -13,6 +13,8 @@
@containerWidth: 945px; @containerWidth: 945px;
@titleColor: #5AD4A0; @titleColor: #5AD4A0;
@import "./theme/includes/icon.less";
// font // font
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
@@ -39,6 +41,12 @@
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');
} }
#logo {
font-size: 32px;
color: #000;
padding-top: 8px;
}
/*"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue", Helvetica, "Microsoft Yahei", Verdana, Simsun, "Segoe UI", "Segoe UI Web Regular", "Segoe UI Symbol", "BBAlpha Sans", "S60 Sans", Arial, sans-serif;*/ /*"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue", Helvetica, "Microsoft Yahei", Verdana, Simsun, "Segoe UI", "Segoe UI Web Regular", "Segoe UI Symbol", "BBAlpha Sans", "S60 Sans", Arial, sans-serif;*/
@selectionBg: @aBlackColor; @selectionBg: @aBlackColor;
@selectionColor: #fff; @selectionColor: #fff;
@@ -74,13 +82,13 @@ a:hover {
box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.1); box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.1);
margin: 0; margin: 0;
.navbar-brand { .navbar-brand {
padding: 0;
padding-left: 10px; padding-left: 10px;
line-height: @headerHeight; // line-height: @headerHeight;
img { img {
height: 50px; height: 50px;
display: inline-block; display: inline-block;
margin-top: -5px; margin-top: -5px;
padding: 8px;
} }
} }
.navbar-nav a { .navbar-nav a {
+4 -38
View File
@@ -2,6 +2,7 @@
@import "includes/animation.less"; @import "includes/animation.less";
@import "includes/common.less"; @import "includes/common.less";
@import "includes/icon.less";
@import "includes/header.less"; @import "includes/header.less";
@import "includes/page.less"; @import "includes/page.less";
@@ -21,43 +22,6 @@
@import "includes/tag.less"; @import "includes/tag.less";
@import "includes/batch.less"; @import "includes/batch.less";
#logo,
#switcher span,
.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;
/* Better Font Rendering =========== */
-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: "\e600";
line-height: 1;
margin-top: 5px;
display: inline-block;
vertical-align: top;
}
#switcher span:before {
content: "\e601";
}
*,.h1, *,.h1,
.h2, .h2,
.h3, .h3,
@@ -103,7 +67,9 @@ h1, h2, h3 {
@fontFamily: 'Open Sans', Helvetica, Tahoma, Arial, Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", "Micro Hei", SimSun, "宋体", Heiti, "黑体", sans-serif; @fontFamily: 'Open Sans', Helvetica, Tahoma, Arial, Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", "Micro Hei", SimSun, "宋体", Heiti, "黑体", sans-serif;
// @fontFamily: Helvetica, Tahoma, Arial, Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", "Micro Hei", SimSun, "宋体", Heiti, "黑体", sans-serif; // @fontFamily: Helvetica, Tahoma, Arial, Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", "Micro Hei", SimSun, "宋体", Heiti, "黑体", sans-serif;
@aceFontFamily: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', Hiragino Sans GB, "Microsoft YaHei", "微软雅黑"; @aceFontFamily: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', Hiragino Sans GB, "Microsoft YaHei", "微软雅黑", monospace, sans-serif;
// @fontFamily: PingFang SC,Hiragino Sans GB,Helvetica Neue,Microsoft Yahei,WenQuanYi Micro Hei,sans-serif;
@aceFontFamily: Menlo, 'Ubuntu Mono', Consolas, 'Courier New', 'Microsoft Yahei', 'Hiragino Sans GB', 'WenQuanYi Micro Hei', sans-serif;
// header // header
@headerTextColor: #fff; @headerTextColor: #fff;
+1 -1
View File
@@ -1 +1 @@
::selection{background:#000;color:#fff}::-moz-selection{background:#000;color:#fff}::-webkit-selection{background:#000;color:#fff}@-webkit-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-moz-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-ms-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-webkit-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-moz-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-ms-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;-ms-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@font-face{font-family:leanote;src:url(../../fonts/leanote-font2/leanote.eot?-vcf23i);src:url(../../fonts/leanote-font2/leanote.eot?#iefix-vcf23i) format('embedded-opentype'),url(../../fonts/leanote-font2/leanote.ttf?-vcf23i) format('truetype'),url(../../fonts/leanote-font2/leanote.woff?-vcf23i) format('woff'),url(../../fonts/leanote-font2/leanote.svg?-vcf23i#leanote) format('svg');font-weight:400;font-style:normal}.close:focus{outline:0}.invisible{visibility:hidden}.btn{border-radius:2px}.alert{margin-bottom:10px}.btn *{cursor:pointer!important}.dropdown-submenu{position:relative}.dropdown-submenu>ul.dropdown-menu{top:0;left:100%;margin-left:-3px!important;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding-top:10px!important}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu:after{display:block;content:" ";position:absolute;right:0;top:10px;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#666}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{visibility:visible;-webkit-animation:pulldown .2s;animation:pulldown .2s}.dropdown-menu{visibility:hidden;display:block}.dropdown-list{width:530px;border-radius:3px}.dropdown-list ul{margin:0;padding:0}.dropdown-list ul li{float:left;width:120px;margin-left:10px;margin-bottom:10px;border:1px dashed #ccc}.dropdown-menu .divider{margin:3px 0}.dropdown-menu{border-radius:3px;margin:0;border:1px solid #e6eaed;box-shadow:rgba(0,0,0,.172549)0 6px 12px 0}.dropdown-menu:before{content:"";width:20px;height:12px;position:absolute;top:-12px;right:8px;background-image:url(../../images/triangle_2x.png);background-size:20px 12px}.dropdown-submenu .dropdown-menu:before{background:0 0}#searchNotebookForAddDropdownList,#searchNotebookForAddShareDropdownList{left:-200px}#searchNotebookForAddDropdownList:before,#searchNotebookForAddShareDropdownList:before{left:190px;right:inherit}.dropdown-menu li{list-style:none;padding-left:10px;width:100%;height:30px;line-height:30px}.dropdown-menu li>a{color:#000;display:block;padding-right:20px}.dropdown-menu>li>a{padding:3px 20px 3px 0}.noteSplit{position:absolute;top:0;width:5px;height:100%;overflow:hidden;z-index:3333;cursor:col-resize}a.raw{color:#428bca}a.raw:hover{color:#2a6496}.cm-item{position:relative}.cm-item .cm-text{position:absolute;left:23px;right:10px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.cm-item .cm-text .c-text{display:initial}.b-m-mpanel{border-radius:3px}.modal-content{background-color:#f8f8f8}.modal-body{background-color:#fff;padding-bottom:30px}.modal-footer{margin-top:0}#listNotebookDropdownMenu{display:none}#themeForm td{padding:5px;text-aliLine truncated ::selection{background:#000;color:#fff}::-moz-selection{background:#000;color:#fff}::-webkit-selection{background:#000;color:#fff}@-webkit-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-moz-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-ms-keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@keyframes dropdown{0%{margin-top:-25px;opacity:0}90%{margin-top:2px}100%{margin-top:0;opacity:1}}@-webkit-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-moz-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-ms-keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@keyframes pulldown{0%{top:0;opacity:0}90%{top:90%}100%{top:100%;opacity:1}}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;-ms-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(../../fonts/open-sans2/DXI1ORHCpsQm3Vp6mXoaTXhCUOGz7vYGh680lGh-uXM.woff) format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(../../fonts/open-sans2/cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff) format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(../../fonts/open-sans2/k3k702ZOKiLJc3WVjuplzHhCUOGz7vYGh680lGh-uXM.woff) format('woff')}@font-face{font-family:'Open Sans';font-style:italic;font-weight:400;src:local('Open Sans Italic'),local('OpenSans-Italic'),url(../../fonts/open-sans2/xjAJXh38I15wypJXxuGMBobN6UDyHWBl620a-IRfuBk.woff) format('woff')}.close:focus{outline:0}.invisible{visibility:hidden}.mobile-show{display:none}.btn{border-radius:2px}.alert{margin-bottom:10px}.btn *{cursor:pointer!important}.dropdown-submenu{position:relative}.dropdown-submenu>ul.dropdown-menu{top:0;left:100%;margin-left:-3px!important;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;padding-top:10px!important}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu:after{display:block;content:" ";position:absolute;right:0;top:10px;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#666}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{visibility:visible;-webkit-animation:pulldown .2s;animation:pulldown .2s}.dropdown-menu{visibility:hidden;display:block}.dropdown-list{width:530px;border-radius:3px}.dropdown-list ul{margin:0;padding:0}.dropdown-list ul li{float:left;width:120px;margin-left:10px;margin-bottom:10px;border:1px dashed #ccc}.dropdown-menu .divider{margin:3px 0}.dropdown-menu{border-radius:3px;margin:0}.dropdown-menu:before{content:"";width:20px;height:12px;position:absolute;top:-12px;right:8px;background-image:url(../../images/triangle_2x.png);background-size:20px 12px}.dropdown-submenu .dropdown-menu:before{background:0 0}#searchNotebookForAddDropdownList,#searchNotebookForAddShareDropdownList{left:-200px}#searchNotebookForAddDropdownList:before,#searchNotebookForAddShareDropdownList:before{left:190px;right:inherit}.dropdown-menu li{list-style:none;padding-left:10px;width:100%;height:30px;line-height:30px}.dropdown-menu li>a{color:#000;display:block;padding-right:20px}.dropdown-menu>li>a{padding:3px 20px 3px 0}.noteSplit{position:absolute;top:0;width:5px;height:100%;overflow:hidden;z-index:3333;cursor:col-resize}a.raw{color:#428bca}a.raw:hover{color:#2a6496}.cm-item{position:relativLine truncated
Loaded 100 of 921 files, more files were not shown because too many files have changed in this diff. Show more