notebook,note, tag OK

This commit is contained in:
life
2015-01-19 00:03:46 +08:00
parent ab969d4e2c
commit 5bf1d1b5ec
11 changed files with 1054 additions and 56 deletions

858
index.html Executable file
View File

@@ -0,0 +1,858 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="apple-touch-fullscreen" content="yes">
<meta name=”apple-mobile-web-app-capable” content=”yes” />
<meta name="keywords" content="leanote,leanote.com">
<meta name="description" content="leanote, Not Just A Notebook">
<title>Leanote, Not Just A Notebook</title>
<link href="public/css/bootstrap.css" rel="stylesheet" />
<!-- 先加载, 没有样式, 宽度不定 -->
<link rel="stylesheet" href="public/tinymce/skins/custom/skin.min.css" rel="stylesheet"/>
<!-- leanote css -->
<link href="public/css/font-awesome-4.2.0/css/font-awesome.css" rel="stylesheet" />
<link href="public/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<!-- theme -->
<link rel="stylesheet" href="public/css/theme/simple.css" type="text/css" />
<!-- context-menu -->
<link rel="stylesheet" href="public/js/contextmenu/css/contextmenu.css" type="text/css" />
<!-- mdeditor -->
<link href="public/dist/themes/default.css" rel="stylesheet" />
<!-- For Develop writting mod -->
<script>
function log(o) {
console.log(o);
}
</script>
</head>
<body>
<div id="page">
<div id="pageInner">
<!-- 头部 -->
<!-- <div id="headerContainer"> -->
<div id="header">
<!--
<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">
<i class="fa fa-align-justify" id="leftSwitcher" title="Hidden slide bar"></i>
<span id="leftSwitcher2" title="Show slide bar"></span>
</div>
<!-- search -->
<div class="pull-left" id="searchWrap">
<form class="navbar-form form-inline col-lg-2" id="searchNote">
<input class="form-control" placeholder="Search" type="text" id="searchNoteInput">
</form>
</div>
<!-- 全局按钮 -->
<div class="pull-left" style="" id="newNoteWrap">
<!-- 新建笔记 -->
<div id="newMyNote">
<a id="newNoteBtn" title="New note">
<i class="fa fa-file-o"></i>
<span class="new-note-text">New note</span>
<span class="new-note-text-abbr">New</span>
</a>
<span class="new-split">|</span>
<a id="newNoteMarkdownBtn" title="New markdown note">
<span class="new-markdown-text">New Markdown</span>
<span class="new-markdown-text-abbr">Md</span>
</a>
<span class="for-split"> - </span>
<span id="curNotebookForNewNote" notebookId=""></span>
<!--
<div class="dropdown" style="display: inline-block">
<a class="ios7-a dropdown-toggle"
id="listNotebookDropdownMenu" data-toggle="dropdown">
<i class="fa fa-angle-down"></i>
</a>
<div class="dropdown-menu dropdown-list" id="searchNotebookForAddDropdownList">
<input type="text" placeholder="Search notebook" class="form-control" id="searchNotebookForAdd"/>
<ul class="clearfix" role="menu" aria-labelledby="listNotebookDropdownMenu" id="notebookNavForNewNote">
</ul>
</div>
</div>
-->
</div>
<!-- 只为新建别人的笔记 -->
<div id="newSharedNote" style="display: none">
<a id="newSharedNoteBtn">
<i class="fa fa-file-o"></i>
<span class="new-note-text">New note</span>
<span class="new-note-text-abbr">New</span>
</a>
<span class="new-split">|</span>
<a id="newShareNoteMarkdownBtn" title="New markdown note">
<span class="new-markdown-text">Markdown</span>
<span class="new-markdown-text-abbr">Md</span>
</a>
<span class="for-split"> - </span>
<span id="curNotebookForNewSharedNote" notebookId="" userId=""></span>
<div class="dropdown" style="display: inline-block">
<a id="listShareNotebookDropdownMenu" class="ios7-a dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-angle-down"></i>
</a>
<div class="dropdown-menu dropdown-list" id="searchNotebookForAddShareDropdownList" >
<ul id="notebookNavForNewSharedNote"></ul>
</div>
</div>
</div>
</div>
<div class="pull-left" id="leanoteMsg">
<span id="msg" style="display: inline-block;"></span>
<span id="loading">
</span>
</div>
<div class="pull-right" style="margin: 0 10px" id="myProfile">
<div class="dropdown">
<a class="dropdown-toggle" title="{{.userInfo.Username}}" data-toggle="dropdown" style="line-height: 60px;">
<span class="username">
lif@leanote.com
</span>
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu li-a" role="menu">
<li role="presentation" class="my-link" >
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
<i class="fa fa-bold"></i>
Blog</a>
</li>
<li role="presentation" class="divider"></li>
<li role="presentation" onclick="logout()">
<i class="fa fa-sign-out"></i>
Logout
</li>
</ul>
</div>
</div>
<div class="pull-right top-nav writting-hide" id="myBlog">
<a target="_blank" href="{{$.blogUrl}}/{{.userInfo.Username}}">
Blog
</a>
</div>
<div style="clear: both"></div>
</div>
<div id="mainContainer" class="clearfix">
<div id="mainMask">
<img src="public/images/loading-30.gif" />
<br />
<br />
loading...
</div>
<div id="leftNotebook">
<div id="notebook">
<div class="folderNote opened" id="myNotebooks">
<div class="folderHeader clearfix">
<i class="fa fa-book pull-left fa-left"></i>
<span class="pull-left">
Notebook
</span>
<div class="pull-right" id="addNotebookPlus" title="Add notebook">
<i class="fa fa-plus" title="Add notebook"></i>
</div>
</div>
<div class="folderBody">
<input type="text" class="form-control" id="searchNotebookForList" placeholder="Search notebook"/>
<ul class="ztree" id="notebookList"></ul>
<ul class="ztree" id="notebookListForSearch"></ul>
</div>
</div>
<div class="folderNote closed" id="myTag">
<div class="folderHeader">
<i class="fa fa-bookmark fa-left"></i>
<span>
Tag
</span>
</div>
<ul class="folderBody clearfix" id="tagNav">
<li data-tag="red"><a> <span class="label label-red">red</span></a></li>
<li data-tag="blue"><a> <span class="label label-blue">blue</span></a></li>
<li data-tag="yellow"><a> <span class="label label-yellow">yellow</span></a></li>
<li data-tag="green"><a> <span class="label label-green">green</span></a></li>
</ul>
</div>
<div class="folderNote closed" id="myShareNotebooks">
<div class="folderHeader">
<i class="fa fa-file fa-left"></i>
<span>
Recent Notes
</span>
</div>
<ul class="folderBody" id="shareNotebooks">
</ul>
</div>
<!--
<div class="folderNote closed" id="myShareNotebooks">
<div class="folderHeader">
<i class="fa fa-user fa-left"></i>
<span>
Share
</span>
</div>
<ul class="folderBody" id="shareNotebooks">
</ul>
</div>
-->
</div>
<!-- 缩小版 todo 不要展示, 点击展开即可 -->
<div id="notebookMin">
<!-- 这里隐藏, 不要 -->
<div target="#notebookList" title="Notebook" class="minContainer">
<i class="fa fa-book"></i>
<ul class="dropdown-menu" id="minNotebookList">
</ul>
</div>
<div target="#tagNav" title="My tag" class="minContainer">
<i class="fa fa-bookmark"></i>
<ul class="dropdown-menu" id="minTagNav">
</ul>
</div>
<div id="minShareNotebooks">
<div class="minContainer" target="#friendContainer0" title="Share">
<i class="fa fa-user"></i>
</div>
</div>
</div>
<!--
底下隐藏/展开
<div id="notebookBottom">
<i class="fa fa-angle-left" id="leftSwitcher"></i>
</div>
-->
</div>
<div class="noteSplit" id="notebookSplitter"></div>
<div id="noteAndEditor">
<div id="noteAndEditorMask">
<img src="public/images/loading-24.gif"/>
<br />
loading...
</div>
<div id="noteList">
<div class="clearfix" id="notesAndSort" style="position: relative">
<div class="pull-left">
<!-- 我的笔记本 -->
<div class="dropdown" id="myNotebookNavForListNav">
<a class="ios7-a dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown">
<span id="curNotebookForListNote">Newest</span>
<!--
<i class="fa fa-angle-down"></i>
-->
</a>
<!-- 如果notebook过多, 则会产生滚动 弃用
<div class="dropdown-menu dropdown-list" style="left: 5px;">
<ul role="menu" aria-labelledby="dropdownMenu1" id="notebookNavForListNote"></ul>
</div>
-->
</div>
<!-- 共享的笔记本 -->
<div class="dropdown" id="sharedNotebookNavForListNav" style="display: none">
<a class="ios7-a dropdown-toggle" id="dropdownMenu2" data-toggle="dropdown">
<span id="curSharedNotebookForListNote">Newest</span>
<!--
<i class="fa fa-angle-down"></i>
-->
</a>
<ul class="dropdown-menu" role="menu"
aria-labelledby="dropdownMenu2" style="left: 5px;" id="sharedNotebookNavForListNote">
</ul>
</div>
</div>
<div class="pull-left" id="tagSearch" style="line-height: 38px">
</div>
<div id="sortType">
<div class="dropdown">
<a class="ios7-a dropdown-toggle" id="dropdownMenu1"
data-toggle="dropdown">
<!--
<i class="fa fa-sort-alpha-asc">
</i>Sort <i class="fa fa-angle-down"></i>
-->
</a>
<!--
<ul class="dropdown-menu" role="menu"
aria-labelledby="dropdownMenu1"
style="right: 3px; ! important; left: -100px; min-width: 100px;">
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">创建日期</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">修改日期</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">标题</a></li>
<li role="presentation" class="divider"></li>
<li role="presentation"><a role="menuitem" tabindex="-1"
href="#">Separated </a></li>
</ul>
-->
</div>
</div>
</div>
<!-- 笔记列表 -->
<!-- wrap 为了slimScroll -->
<div id="noteItemListWrap">
<ul id="noteItemList">
</ul>
</div>
</div>
<div class="noteSplit" id="noteSplitter"></div>
<div id="note">
<!-- 只读模式 -->
<div id="noteRead">
<div id="noteReadContainer">
<div id="noteReadTop">
<h2 id="noteReadTitle"></h2>
<div class="clearfix" id="noteReadInfo">
<i class="fa fa-bookmark-o"></i>
<span id="noteReadTags"></span>
<!-- 修改时间 -->
<i class="fa fa-clock-o"></i>Update
<span id="noteReadUpdatedTime"></span>
<!-- 修改时间 -->
<i class="fa fa-clock-o"></i>Create
<span id="noteReadCreatedTime"></span>
</div>
</div>
<div id="noteReadContent">
</div>
</div>
</div>
<!-- 遮罩, 为了resize3Columns用 -->
<div id="noteMask" class="note-mask"></div>
<div id="noteMaskForLoading" class="note-mask">
<img src="public/images/loading-24.gif"/>
<br />
loading...
</div>
<div id="editorMask">
The notebook is empty, why not...
<br />
<br />
<div id="editorMaskBtns">
<a class="note">New note</a>
<a class="markdown">New Markdown Note</a>
</div>
<div id="editorMaskBtnsEmpty">
Sorry, cannot new note in here, please choose a notebook at first.
</div>
</div>
<div id="noteTop">
<!-- 左侧放tag, 右侧放按钮, 比如save, info, move, delete -->
<div id="tool" class="clearfix">
<!-- tag可以参考 mac的文件tag, 预定义一些颜色, 用户也可以自己输入-->
<!--
<div class="pull-left" id="noteTitleDiv">
<input name="noteTitle" id="noteTitle" value="" placeholder="无标题">
</div>
-->
<div class="pull-left" id="tag">
<div id="tags" style="display: inline-block; line-height: 25px;">
</div>
<div class="dropdown" style="display: inline-block"
id="tagDropdown">
<i class="fa fa-bookmark-o"></i>
<a
class="metro-a dropdown-toggle" data-toggle="dropdown"
id="addTagTrigger" style="cursor: text; padding-left: 0">
<span class="add-tag-text">
Click to add Tag
</span>
</a>
<input type="text" id="addTagInput" />
<ul class="dropdown-menu" role="menu" id="tagColor">
<li role="presentation"><span class="label label-red">red</span>
</li>
<li role="presentation"><span class="label label-blue">blue</span>
</li>
<li role="presentation"><span class="label label-yellow">yellow</span></li>
<li role="presentation"><span class="label label-green">green</span></li>
</ul>
</div>
</div>
<ul class="pull-right" id="editorTool">
<li><a class="ios7-a " id="saveBtn" title="ctrl+s"
data-toggle="dropdown">
<span class="fa fa-save"></span>
Save</a></li>
<li class="dropdown" id="attachDropdown">
<a class="ios7-a dropdown-toggle" data-toggle="dropdown" id="showAttach">
<span class="fa fa-paperclip"></span>
attachments<span id="attachNum"></span>
</a>
<div class="dropdown-menu" id="attachMenu">
<ul id="attachList">
</ul>
<form id="uploadAttach" method="post" action="/attach/UploadAttach" enctype="multipart/form-data">
<div id="dropAttach" class="dropzone">
<a class="btn btn-success btn-choose-file">
<i class="fa fa-upload"></i>
<span>Choose File</span>
</a>
<a class="btn btn-default" id="downloadAllBtn">
<i class="fa fa-download"></i>
<span>Download All</span>
</a>
<a class="btn btn-default" id="linkAllBtn">
<i class="fa fa-link"></i>
<span>Link All</span>
</a>
<input type="file" name="file" multiple/>
</div>
<div id="attachUploadMsg">
</div>
</form>
</div>
</li>
<li><a class="ios7-a " id="tipsBtn"
data-toggle="dropdown">
<span class="fa fa-question"></span>
Tips</a></li>
<li><a class="ios7-a " id="contentHistory"
data-toggle="dropdown">
<span class="fa fa-history"></span>
Histories</a></li>
</ul>
</div>
<div id="noteTitleDiv">
<input name="noteTitle" id="noteTitle" value="" placeholder="UnTitled" tabindex="1" />
</div>
</div>
<div id="editor">
<!-- 编辑器 -->
<div id="mceToolbar">
<div id="popularToolbar"
style="position: absolute; right: 30px; left: 0"></div>
<a
style="dispaly: block; position: absolute; cursor: pointer; right: 10px; padding: 3px 10px"
id="moreBtn"> <i class="fa fa-angle-down"></i>
</a>
</div>
<div class="editorBg"></div>
<div id="leanoteNav" class="leanoteNav">
<h1>
<i class="fa fa-align-justify" title="Note nav"></i>
<span>Note nav</span>
</h1>
<div id="leanoteNavContent" class="leanoteNavContent">
</div>
</div>
<!-- leaui image drop image to editor-->
<form id="upload" method="post" action="/file/uploadImageLeaui" enctype="multipart/form-data" style="margin-top: 5px;">
<div id="drop">
Drop images to here
<input type="file" name="file" multiple style="display: none"/>
</div>
<ul id="uploadMsg">
</ul>
</form>
<!-- 由此可以算高度 -->
<div id="editorContent" name="editorContent" tabindex="2" />
{{.noteContent}}
</div>
</div>
<div id="mdEditor">
<div class="layout-wrapper-l1">
<div class="layout-wrapper-l2">
<div class="navbar navbar-default">
<div class="navbar-inner" id="wmd-button-bar">
<ul class="nav left-buttons">
<li class="wmd-button-group1 btn-group"></li>
</ul>
<ul class="nav left-buttons">
<li class="wmd-button-group2 btn-group"></li>
</ul>
<ul class="nav left-buttons">
<li class="wmd-button-group3 btn-group"></li>
</ul>
<ul class="nav left-buttons">
<li class="wmd-button-group5 btn-group"></li>
</ul>
<!-- 帮助 -->
<ul class="nav left-buttons">
<li class="wmd-button-group6 btn-group">
<li class="wmd-button btn btn-success" id="wmd-help-button" title="Markdown syntax" style="left: 0px; display: none;"><span style="display: none; background-position: 0px 0px;"></span><i class="fa fa-question-circle"></i></li>
</li>
</ul>
<!--
<ul class="nav pull-right right-buttons">
<li class="offline-status hide">
<div class="text-danger">
<i class="icon-attention-circled"></i>offline
</div>
</li>
<li class="extension-buttons"></li>
</ul>
<ul class="nav pull-right title-container">
<li><div class="working-indicator"></div></li>
<li><a class="btn btn-success file-title-navbar" href="#"
title="Rename document"> </a></li>
<li><div class="input-file-title-container"><input type="text"
class="col-sm-4 form-control hide input-file-title"
placeholder="Document title" /></div></li>
</ul>
-->
</div>
<div class="editorBg"></div>
</div>
<div class="layout-wrapper-l3">
<div id="left-column">
<pre id="wmd-input" class="form-control"><div class="editor-content mousetrap" contenteditable=true></div><div class="editor-margin"></div></pre>
</div>
<div id="right-column">
<div class="preview-panel panel-open" id="preview-panel">
<div id="mdSplitter2" class="layout-resizer layout-resizer-preview open" style="-webkit-user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); touch-action: none;"></div>
<div class="layout-toggler layout-toggler-preview btn btn-info open" title="Toggle preview" data-open="1"><i class="fa fa-angle-right"></i></div>
<div class="preview-container">
<div id="preview-contents">
<div id="wmd-preview" class="preview-content"></div>
</div>
</div>
</div>
</div>
</div>
<div class="extension-preview-buttons">
<div id="leanoteNavMd" class="leanoteNav">
<h1>
<i class="fa fa-align-justify" title="Note nav"></i>
<span>Note nav</span>
</h1>
<div id="leanoteNavContentMd" class="leanoteNavContent table-of-contents">
</div>
</div>
</div>
</div>
<div id="wmd-button-bar" class="hide"></div>
</div>
<!--
<div id="wmd-button-bar" id="mdBar"></div>
<div class="editorBg"></div>
<div class="clearfix" id="mdEditorPreview">
<div id="left-column">
<div id="wmd-panel-editor" class="wmd-panel-editor">
<textarea class="wmd-input theme" id="wmd-input" spellcheck="false" tabindex="3"></textarea>
</div>
</div>
<div id="mdSplitter"></div>
<div id="right-column">
<div id="wmd-panel-preview" class="wmd-panel-preview preview-container">
<div id="wmd-preview" class="wmd-preview"></div>
</div>
</div>
</div>
<textarea id="md-section-helper"></textarea>
-->
</div>
</div>
</div>
<!-- mdEditor -->
<!-- v2 -->
<div class="modal fade modal-insert-link">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title">Hyperlink</h4>
</div>
<div class="modal-body">
<p>Please provide the link URL and an optional title:</p>
<div class="input-group">
<span class="input-group-addon"><i class="icon-globe"></i></span><input
id="input-insert-link" type="text" class="col-sm-5 form-control"
placeholder='http://example.com/ "optional title"' />
</div>
</div>
<div class="modal-footer">
<a href="#" class="btn btn-default" data-dismiss="modal">Cancel</a>
<a href="#" class="btn btn-primary action-insert-link"
data-dismiss="modal">OK</a>
</div>
</div>
</div>
</div>
<!-- 插入图片 -->
<div class="modal fade modal-insert-image">
<div class="modal-dialog" style="width: 840px;max-width:100%;">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title">Image</h4>
</div>
<div class="modal-body" style="padding-top: 0; padding-bottom: 0">
<iframe name="mdImageManager" style="width: 100%; height: 350px" scrolling="no" id="leauiIfrForMD" src="" frameborder="0"></iframe>
</div>
<div class="modal-footer">
<a href="#" class="btn btn-default"
data-dismiss="modal">Cancel</a> <a href="#"
class="btn btn-primary action-insert-image" data-dismiss="modal">Insert Image</a>
</div>
</div>
</div>
</div>
<!-- v1 -->
<!-- Hidden Popup Modal -->
<div class="modal fade bs-modal-sm" id="editorDialog" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="editorDialog-title"></h4>
</div>
<div class="modal-body">
<p></p>
<div class="input-group">
<span class="input-group-addon">
<i></i>
</span>
<input type="text" class="form-control" placeholder="">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" id="editorDialog-confirm">confirm</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- 弹出框 模板 -->
<div class="modal fade bs-modal-sm" id="leanoteDialogRemote" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
</div>
<div class="modal fade bs-modal-sm" id="leanoteDialog" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="modalTitle">操作</h4>
</div>
<div class="modal-body">
内容区
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div class="modal fade bs-modal-sm" id="sendRegisterEmailDialog" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" class="modalTitle">邀请好友</h4>
</div>
<div class="modal-body">
<form role="form">
<div class="form-group">
<div id="registerEmailMsg" class="alert alert-warning" style="display: none">
</div>
<input type="hidden" id="toEmail"/>
<label for="emailContent">邮件内容</label>
<textarea class="form-control" id="emailContent">Hi, 我是life, leanote非常好用, 快来注册吧.</textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-success" id="registerEmailBtn">发送</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- theme -->
<div class="modal fade bs-modal-sm" id="setThemeDialog" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" class="modalTitle">theme</h4>
</div>
<div class="modal-body">
<table id="themeForm">
<tr>
<td>
<label>
<img src="public/images/slider/all.gif" height="100px">
<br />
<input type="radio" name="theme" value="default"> Default
</label>
</td>
<td>
<label>
<img src="public/images/slider/all-simple.gif" height="100px">
<br />
<input type="radio" name="theme" value="simple"> Simple
</label>
</td>
</tr>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- 编辑器提示 -->
<div class="modal fade bs-modal-sm" id="tipsDialog" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" class="modalTitle">Tips</h4>
</div>
<div class="modal-body">
<h4>1. Short cuts</h4>ctrl+shift+c Toggle code <br /> ctrl+shift+i Insert/edit image <h4>2. shift+enter Get out of current block</h4> eg. <img src="/images/outofcode.png" style="width: 90px"/> in this situation you can use shift+enter to get out of current code block.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- modal 静态区域 -->
<div class="display: hidden">
<div class="hide" id="copyDiv"></div>
</div>
</div>
</div>
<script src="public/js/jquery-1.9.0.min.js"></script>
<script src="public/js/jquery.ztree.all-3.5.js"></script>
<script src="public/js/i18n/msg.en.js"></script>
<script src="public/js/app/service.js"></script>
<script src="public/js/common.js"></script>
<script>
var UrlPrefix = '{{.siteUrl}}'; // 为了发weibo
var UserInfo = {};
var notebooks = [{NotebookId: "123232323", Title: "Default"}];
var shareNotebooks = [];
var sharedUserInfos = [];
var curNoteId = '';
var curNotebookId = '';
var curSharedNoteNotebookId = '';
var curSharedUserId = '';
var notes = [];
var latestNotes = [];
var noteContentJson = {};
var tagsJson = {};
LEA.locale = "en";
var GlobalConfigs = {}; // 2014/11/9 beta2
</script>
<script>
window.requireNode = window.require;
window.require = undefined;
</script>
<!-- 渲染view -->
<script src="public/tinymce/tinymce.dev.js"></script>
<script src="public/libs/ace/ace.js"></script>
<script src="public/js/app/page.js"></script>
<script src="public/js/jQuery-slimScroll-1.3.0/jquery.slimscroll.js"></script>
<script src="public/js/contextmenu/jquery.contextmenu.js"></script>
<script src="public/js/bootstrap-min.js"></script>
<script src="public/js/app/note.js"></script>
<script src="public/js/app/tag.js"></script>
<script src="public/js/app/notebook.js"></script>
<script src="public/js/app/share.js"></script>
<script src="public/js/object_id-min.js"></script>
<script>
initPage();
</script>
<!-- v2 use require.js, mdeditor -->
<script>
window.require = window.requireNode;
/*
window.baseDir = 'public/dist';
window.require = {
baseUrl: window.baseDir,
};
*/
</script>
<script src="public/tinymce/plugins/leaui_image/public/js/jquery.ui.widget.js"></script>
<script src="public/tinymce/plugins/leaui_image/public/js/jquery.fileupload.js"></script>
<script src="public/tinymce/plugins/leaui_image/public/js/jquery.iframe-transport.js"></script>
<!-- <script src="public/js/app/paste.js"></script> -->
<!-- <script src="public/js/require.js"></script> -->
<!-- <script src="public/js/main.js"></script> -->
</body>
</html>

View File

@@ -1,26 +0,0 @@
global.$ = $;
var abar = require('address_bar');
var folder_view = require('folder_view');
var path = require('path');
var shell = require('nw.gui').Shell;
$(document).ready(function() {
var folder = new folder_view.Folder($('#files'));
var addressbar = new abar.AddressBar($('#addressbar'));
folder.open(process.cwd());
addressbar.set(process.cwd());
folder.on('navigate', function(dir, mime) {
if (mime.type == 'folder') {
addressbar.enter(mime);
} else {
shell.openItem(mime.path);
}
});
addressbar.on('navigate', function(dir) {
folder.open(dir);
});
});

4
node_modules/common.js generated vendored
View File

@@ -2,6 +2,7 @@ var fs = require('fs');
var User = require('user');
var Image = require('image');
var Evt = require('evt');
var ObjectId = require('objectid');
// var gui = require('nw.gui');
// console.log(gui.App);
@@ -9,6 +10,9 @@ var Evt = require('evt');
function log(o) {console.log(o)}
var Common = {
objectId: function() {
return ObjectId()
},
_uuid: 1,
uuid: function() {
this._uuid++;

9
node_modules/note.js generated vendored
View File

@@ -1,6 +1,7 @@
var db = require('db');
var User = require('user');
var Notebook = require('notebook');
var Tag = require('tag');
var Notes = db.notes;
function log(o) {
@@ -50,6 +51,10 @@ var Note = {
// 重新统计笔记本的笔记数量
Notebook.reCountNotebookNumberNotes(noteOrContent.NotebookId);
// 标签
if(noteOrContent.Tags && noteOrContent.Tags.length > 0) {
Tag.addTags(noteOrContent.Tags);
}
}
});
// 更新笔记
@@ -73,6 +78,10 @@ var Note = {
callback && callback(false);
} else {
callback && callback(noteOrContent);
// 标签
if(noteOrContent.Tags && noteOrContent.Tags.length > 0) {
Tag.addTags(noteOrContent.Tags);
}
}
});
}

109
node_modules/objectid.js generated vendored Normal file
View File

@@ -0,0 +1,109 @@
/*
*
* Copyright (c) 2011 Justin Dearing (zippy1981@gmail.com)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) version 2 licenses.
* This software is not distributed under version 3 or later of the GPL.
*
* Version 1.0.1-dev
*
*/
/**
* Javascript class that mimics how WCF serializes a object of type MongoDB.Bson.ObjectId
* and converts between that format and the standard 24 character representation.
*/
var ObjectId = (function () {
var increment = 0;
var pid = Math.floor(Math.random() * (32767));
var machine = Math.floor(Math.random() * (16777216));
/*
if (typeof (localStorage) != 'undefined') {
var mongoMachineId = parseInt(localStorage['mongoMachineId']);
if (mongoMachineId >= 0 && mongoMachineId <= 16777215) {
machine = Math.floor(localStorage['mongoMachineId']);
}
// Just always stick the value in.
localStorage['mongoMachineId'] = machine;
document.cookie = 'mongoMachineId=' + machine + ';expires=Tue, 19 Jan 2038 05:00:00 GMT'
}
else {
var cookieList = document.cookie.split('; ');
for (var i in cookieList) {
var cookie = cookieList[i].split('=');
if (cookie[0] == 'mongoMachineId' && cookie[1] >= 0 && cookie[1] <= 16777215) {
machine = cookie[1];
break;
}
}
document.cookie = 'mongoMachineId=' + machine + ';expires=Tue, 19 Jan 2038 05:00:00 GMT';
}
*/
function ObjId() {
if (!(this instanceof ObjectId)) {
return new ObjectId(arguments[0], arguments[1], arguments[2], arguments[3]).toString();
}
if (typeof (arguments[0]) == 'object') {
this.timestamp = arguments[0].timestamp;
this.machine = arguments[0].machine;
this.pid = arguments[0].pid;
this.increment = arguments[0].increment;
}
else if (typeof (arguments[0]) == 'string' && arguments[0].length == 24) {
this.timestamp = Number('0x' + arguments[0].substr(0, 8)),
this.machine = Number('0x' + arguments[0].substr(8, 6)),
this.pid = Number('0x' + arguments[0].substr(14, 4)),
this.increment = Number('0x' + arguments[0].substr(18, 6))
}
else if (arguments.length == 4 && arguments[0] != null) {
this.timestamp = arguments[0];
this.machine = arguments[1];
this.pid = arguments[2];
this.increment = arguments[3];
}
else {
this.timestamp = Math.floor(new Date().valueOf() / 1000);
this.machine = machine;
this.pid = pid;
this.increment = increment++;
if (increment > 0xffffff) {
increment = 0;
}
}
};
return ObjId;
})();
ObjectId.prototype.getDate = function () {
return new Date(this.timestamp * 1000);
};
ObjectId.prototype.toArray = function () {
var strOid = this.toString();
var array = [];
var i;
for(i = 0; i < 12; i++) {
array[i] = parseInt(strOid.slice(i*2, i*2+2), 16);
}
return array;
};
/**
* Turns a WCF representation of a BSON ObjectId into a 24 character string representation.
*/
ObjectId.prototype.toString = function () {
var timestamp = this.timestamp.toString(16);
var machine = this.machine.toString(16);
var pid = this.pid.toString(16);
var increment = this.increment.toString(16);
return '00000000'.substr(0, 8 - timestamp.length) + timestamp +
'000000'.substr(0, 6 - machine.length) + machine +
'0000'.substr(0, 4 - pid.length) + pid +
'000000'.substr(0, 6 - increment.length) + increment;
};
module.exports = ObjectId;

66
node_modules/tag.js generated vendored
View File

@@ -1,6 +1,70 @@
var db = require('db');
var Common = require('common');
var User = require('user');
var Tags = db.tags;
/*
TagId
UserId
Title
NumberNotes
CreatedTime
UpdatedTime
Usn
*/
// 笔记本服务
var Tag = {
// 添加多个标签
addTags: function(titles) {
for(var i in titles) {
var title = titles[i];
this.addTag(title);
}
},
// 添加标签, 先查询是否存在
addTag: function(title, callback) {
userId = User.getCurActiveUserId();
Tags.count({UserId: userId, Title: title}, function(err, count) {
if(count) {
callback && callback({Ok: false, IsExists: true});
} else {
var date = new Date();
Tags.insert({
TagId: Common.objectId(),
UserId: userId,
Title: title,
CreatedTime: date,
UpdatedTime: date
}, function(err, doc) {
if(!err) {
callback && callback({Ok: false, Inserted: false});
} else {
callback && callback(doc);
}
});
}
});
},
// 更新标签标题
updateTagTitle: function(tagId, Title, callback) {
userId = User.getCurActiveUserId();
// Tags.update({TagId: tagId, userId: userId}, {$set: {NumberNotes: count}}, {})
Tags.update({TagId: tagId, userId: userId}, {$set: {Title: title}}, {}, function(err) {
if(err) {
callback && callback(false);
} else {
callback && callback(true);
}
});
},
// 得到标签
getTags: function(callback) {
Tags.find({UserId: User.getCurActiveUserId()}, function(err, tags) {
if(err) {
callback && callback(false);
} else {
callback && callback(tags);
}
});
}
};
module.exports = Tag;

View File

@@ -1,25 +0,0 @@
0 info it worked if it ends with ok
1 verbose cli [ 'node', '/usr/bin/npm', 'install', 'life' ]
2 info using npm@2.1.11
3 info using node@v0.10.33
4 verbose node symlink /usr/bin/node
5 verbose stack Error: Invalid version: "0.1"
5 verbose stack at Object.module.exports.fixVersionField (/usr/lib/node_modules/npm/node_modules/normalize-package-data/lib/fixer.js:190:13)
5 verbose stack at /usr/lib/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js:30:38
5 verbose stack at Array.forEach (native)
5 verbose stack at normalize (/usr/lib/node_modules/npm/node_modules/normalize-package-data/lib/normalize.js:29:15)
5 verbose stack at final (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:342:33)
5 verbose stack at then (/usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:126:33)
5 verbose stack at /usr/lib/node_modules/npm/node_modules/read-package-json/read-json.js:331:40
5 verbose stack at evalmachine.<anonymous>:271:14
5 verbose stack at /usr/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:102:5
5 verbose stack at Object.oncomplete (evalmachine.<anonymous>:107:15)
6 verbose cwd /Users/life/Documents/kuaipan/leanote/desktop-app
7 error Darwin 13.4.0
8 error argv "node" "/usr/bin/npm" "install" "life"
9 error node v0.10.33
10 error npm v2.1.11
11 error Invalid version: "0.1"
12 error If you need help, you may report this error at:
12 error <http://github.com/npm/npm/issues>
13 verbose exit [ 1, true ]

View File

@@ -1318,7 +1318,10 @@ function initPage() {
}
}
Tag.renderTagNav(tagsJson);
// 标签
Service.tagService.getTags(function(tags) {
Tag.renderTagNav(tags);
});
// init notebook后才调用
// initSlimScroll();

View File

@@ -5,7 +5,8 @@ var Service = {
notebookService: require('notebook'),
noteService: require('note'),
tagService: require('tag'),
userService: require('user')
userService: require('user'),
tagService: require('tag')
};
// 分发服务
// route = /note/notebook

View File

@@ -191,13 +191,13 @@ function reRenderTags() {
Tag.renderTagNav = function(tags) {
tags = tags || [];
for(var i in tags) {
var tag = tags[i];
var tag = tags[i].Title;
if(tag == "red" || tag == "blue" || tag == "yellow" || tag == "green") {
continue;
}
var text = Tag.mapEn2Cn[tag] || tag;
var classes = Tag.classes[tag] || "label label-default";
$("#tagNav").append(tt('<li data-tag="?"><a> <span class="?">?</span></li>', text, classes, text));
$("#tagNav").append(tt('<li data-tag="?"><a> <span class="?">?</span></li>', text, classes, text));
}
}

View File

@@ -0,0 +1 @@
tinymce.PluginManager.requireLangPack("leanote_code"),tinymce.PluginManager.add("leanote_code",function(e,t){function n(e){return e?("object"==typeof e&&(e=$(e).html()),e.replace(/\<br *\/*\>/gi,"\n").replace(/<\/(p|li|div|ul|ol|hr)>/,"\n").replace(/(<([^>]+)>)/gi,"").replace(/\n\n/g,"\n")):e}function o(e){return e?("object"==typeof e&&(e=$(e).html()),e.replace(/\n/g,"<br />")):e}function a(e){r=tinymce.activeEditor;var t,a=r.selection.getNode(),c=r.selection.getContent(),i=LeaAce.isInAce(a),l=!1,d=!1;if(i&&(l=i[0],d=i[1]),$("#editorContent .toggle-raw").remove(),log("curNode:"),log(a),e&&"convert"!=e){if(l&&l.session.setMode("ace/mode/"+e),d||"PRE"!=a.nodeName||(d=$(a)),d){var s=LeaAce.getPreBrush(d);return void d.removeClass(s).addClass("brush:"+e)}}else if(e&&("BODY"==a.nodeName||"editorContent"==$(a).attr("id")))return;if(LeaAce.canAce()){var p=LeaAce.getAceId();if(LeaAce.disableAddHistory(),l){var g=l.getValue();g=g.replace(/</g,"&lt;"),g=g.replace(/>/g,"&gt;"),g=g.replace(/\n/g,"<br />"),d.replaceWith("<p>"+g+"</p>"),l.destroy()}else{if("PRE"==a.nodeName){var d=$(a),g=d.html();return g&&(g=g.replace(/\n/g,"<br />")),void d.replaceWith("<p>"+g+"</p>")}var t=c;if(!t&&("BODY"==a.nodeName||"editorContent"==$(a).attr("id")))return;t?(t=n(t),r.insertContent('<pre id="'+p+'">'+t+"</pre>")):(t=n(a),$(a).replaceWith("<pre id='"+p+"'>"+t+"</pre>"));var u=LeaAce.initAce(p);u&&(u.focus(),e&&u.session.setMode("ace/mode/"+e))}LeaAce.resetAddHistory()}else if("PRE"!=a.nodeName&&(a=$(a).closest("pre").get(0)),a&&"PRE"==a.nodeName){var d=$(a),g=d.html();g&&(g=g.replace(/\n/g,"<br />")),d.replaceWith("<p>"+g+"</p>")}else{try{t=$.trim($(c).text())}catch(v){}t||(t=$.trim(c));var h=null,p=LeaAce.getAceId();t?(t=o(t),h='<pre id="'+p+'">'+t+"</pre>",r.insertContent(h)):a?(t=o(a),h='<pre id="'+p+'">'+t+"</pre>",$(a).replaceWith(h)):(h='<pre id="'+p+'">'+t+"</pre>",r.insertContent(h))}}function c(){return function(){var t=this;e.on("nodeChange",function(){var n=null;try{var o=e.selection.getNode();if("PRE"!=o.nodeName&&(o=$(o).closest("pre").get(0)),o){var a=LeaAce.isInAce(o),c=!1,r=!1;if(a||"PRE"==o.nodeName){a?(c=a[0],r=a[1]):r=$(o);var i=LeaAce.getPreBrush(r);n=$.trim(i.split(":")[1]),t.diableValue("convert",!1)}else t.diableValue("convert",!0)}}catch(l){log(l)}"convert"!=n&&t.value(n)})}}var r=e;e.addButton("leanote_code",function(){var e=["Convert Code:convert","CSS:css","C/C++:c_cpp","C#:csharp","HTML:html","Javascript:javascript","Java:java","PHP:php","Python:python","Shell:shell","Delphi:delphi","Golang:golang","Erlang:erlang","Groovy:groovy","ActionScript:actionScript"],t=[];for(var n in e){var o=e[n].split(":");t.push({text:o[0],value:o[1]})}return{type:"listbox",text:"codeLang",tooltip:"toggleCode",values:t,fixedWidth:!0,onselect:function(e){e.control.settings.value&&a(e.control.settings.value)},onPostRender:c(t)}}),e.addButton("leanote_inline_code",{icon:"code",tooltip:"Inline Code",stateSelector:"code",onclick:function(){e.execCommand("mceToggleFormat",!1,"code")}}),LeaAce.canAce()&&e.addButton("leanote_ace_pre",{icon:"code",image:t+"/img/ace-pre2.png",tooltip:"Toggle ace with raw html",active:LeaAce.isAce===!1,onclick:function(){LeaAce.isAce===!1?(this.active(!1),LeaAce.isAce=!0,LeaAce.initAceFromContent(e)):(this.active(!0),LeaAce.allToPre(e),LeaAce.isAce=!1)}}),r.addCommand("toggleCode",a),r.addShortcut("ctrl+shift+c","","toggleCode"),r.addShortcut("command+shift+c","","toggleCode"),LeaAce.canAce()&&e.on("keydown",function(){var e=LeaAce.nowIsInAce();return e?(setTimeout(function(){e[0].focus()}),!0):void 0}),r.on("keydown",function(e){var t=e.which?e.which:e.keyCode;return 9==t?(e.shiftKey||r.insertContent("&nbsp;&nbsp;&nbsp;&nbsp;"),e.preventDefault(),e.stopPropagation(),!1):void 0})});