@@ -5,6 +5,4 @@ node_modules |
||
| 5 | 5 |
|
| 6 | 6 |
*/.DS_Store |
| 7 | 7 |
|
| 8 |
-codex/Research/* |
|
| 9 |
-codex/Inbox/* |
|
| 10 |
-codex/*.thumb.png |
|
| 8 |
+codex/* |
@@ -1,22 +1,13 @@ |
||
| 1 | 1 |
var app = require('app'); // Module to control application life.
|
| 2 | 2 |
var BrowserWindow = require('browser-window'); // Module to create native browser window.
|
| 3 |
+var ipc = require('ipc');
|
|
| 3 | 4 |
|
| 4 | 5 |
// Keep a global reference of the window object, if you don't, the window will |
| 5 | 6 |
// be closed automatically when the JavaScript object is garbage collected. |
| 6 | 7 |
var mainWindow = null; |
| 8 |
+var preferencesWindow = null; |
|
| 7 | 9 |
|
| 8 |
-// Quit when all windows are closed. |
|
| 9 |
-app.on('window-all-closed', function() {
|
|
| 10 |
- // On OS X it is common for applications and their menu bar |
|
| 11 |
- // to stay active until the user quits explicitly with Cmd + Q |
|
| 12 |
- if (process.platform != 'darwin') {
|
|
| 13 |
- app.quit(); |
|
| 14 |
- } |
|
| 15 |
-}); |
|
| 16 |
- |
|
| 17 |
-// This method will be called when Electron has finished |
|
| 18 |
-// initialization and is ready to create browser windows. |
|
| 19 |
-app.on('ready', function() {
|
|
| 10 |
+var createMainWindow = function() {
|
|
| 20 | 11 |
// Create the browser window. |
| 21 | 12 |
mainWindow = new BrowserWindow({
|
| 22 | 13 |
width: 1030, |
@@ -41,4 +32,39 @@ app.on('ready', function() {
|
||
| 41 | 32 |
// when you should delete the corresponding element. |
| 42 | 33 |
mainWindow = null; |
| 43 | 34 |
}); |
| 35 |
+} |
|
| 36 |
+ |
|
| 37 |
+var createPreferencesWindow = function() {
|
|
| 38 |
+ if(preferencesWindow === null){
|
|
| 39 |
+ preferencesWindow = new BrowserWindow({
|
|
| 40 |
+ width: 500, |
|
| 41 |
+ height: 300, |
|
| 42 |
+ show: true, |
|
| 43 |
+ 'title-bar-style': 'hidden', |
|
| 44 |
+ 'fullscreen' : false |
|
| 45 |
+ }); |
|
| 46 |
+ preferencesWindow.loadUrl('file://' + __dirname + '/app/preferences-window.html');
|
|
| 47 |
+ preferencesWindow.on('closed', function() {
|
|
| 48 |
+ preferencesWindow = null; |
|
| 49 |
+ }); |
|
| 50 |
+ } |
|
| 51 |
+} |
|
| 52 |
+ |
|
| 53 |
+// Quit when all windows are closed. |
|
| 54 |
+app.on('window-all-closed', function() {
|
|
| 55 |
+ // On OS X it is common for applications and their menu bar |
|
| 56 |
+ // to stay active until the user quits explicitly with Cmd + Q |
|
| 57 |
+ if (process.platform != 'darwin') {
|
|
| 58 |
+ app.quit(); |
|
| 59 |
+ } |
|
| 60 |
+}); |
|
| 61 |
+ |
|
| 62 |
+// This method will be called when Electron has finished |
|
| 63 |
+// initialization and is ready to create browser windows. |
|
| 64 |
+app.on('ready', function() {
|
|
| 65 |
+ createMainWindow(); |
|
| 66 |
+ //createPreferencesWindow(); |
|
| 67 |
+ ipc.on('show-preferences-window', function() {
|
|
| 68 |
+ createPreferencesWindow(); |
|
| 69 |
+ }); |
|
| 44 | 70 |
}); |
@@ -32,8 +32,145 @@ |
||
| 32 | 32 |
<script src="scripts/services/date-formatter.js" charset="utf-8"></script> |
| 33 | 33 |
|
| 34 | 34 |
<script> |
| 35 |
- var remote = require('remote');
|
|
| 36 |
- var dialog = remote.require('dialog');
|
|
| 35 |
+ var remote = require('remote');
|
|
| 36 |
+ var ipc = require('ipc');
|
|
| 37 |
+ var dialog = remote.require('dialog');
|
|
| 38 |
+ var Menu = remote.require('menu');
|
|
| 39 |
+ var template = [ |
|
| 40 |
+ {
|
|
| 41 |
+ label: 'Codex', |
|
| 42 |
+ submenu: [ |
|
| 43 |
+ {
|
|
| 44 |
+ label: 'About Codex', |
|
| 45 |
+ selector: 'orderFrontStandardAboutPanel:' |
|
| 46 |
+ }, |
|
| 47 |
+ {
|
|
| 48 |
+ type: 'separator' |
|
| 49 |
+ }, |
|
| 50 |
+ {
|
|
| 51 |
+ label: 'Preferences', |
|
| 52 |
+ click: function () {
|
|
| 53 |
+ ipc.send('show-preferences-window')
|
|
| 54 |
+ } |
|
| 55 |
+ }, |
|
| 56 |
+ {
|
|
| 57 |
+ type: 'separator' |
|
| 58 |
+ }, |
|
| 59 |
+ {
|
|
| 60 |
+ label: 'Services', |
|
| 61 |
+ submenu: [] |
|
| 62 |
+ }, |
|
| 63 |
+ {
|
|
| 64 |
+ type: 'separator' |
|
| 65 |
+ }, |
|
| 66 |
+ {
|
|
| 67 |
+ label: 'Hide Codex', |
|
| 68 |
+ accelerator: 'Command+H', |
|
| 69 |
+ selector: 'hide:' |
|
| 70 |
+ }, |
|
| 71 |
+ {
|
|
| 72 |
+ label: 'Hide Others', |
|
| 73 |
+ accelerator: 'Command+Shift+H', |
|
| 74 |
+ selector: 'hideOtherApplications:' |
|
| 75 |
+ }, |
|
| 76 |
+ {
|
|
| 77 |
+ label: 'Show All', |
|
| 78 |
+ selector: 'unhideAllApplications:' |
|
| 79 |
+ }, |
|
| 80 |
+ {
|
|
| 81 |
+ type: 'separator' |
|
| 82 |
+ }, |
|
| 83 |
+ {
|
|
| 84 |
+ label: 'Quit', |
|
| 85 |
+ accelerator: 'Command+Q', |
|
| 86 |
+ selector: 'terminate:' |
|
| 87 |
+ }, |
|
| 88 |
+ ] |
|
| 89 |
+ }, |
|
| 90 |
+ {
|
|
| 91 |
+ label: 'Edit', |
|
| 92 |
+ submenu: [ |
|
| 93 |
+ {
|
|
| 94 |
+ label: 'Undo', |
|
| 95 |
+ accelerator: 'Command+Z', |
|
| 96 |
+ selector: 'undo:' |
|
| 97 |
+ }, |
|
| 98 |
+ {
|
|
| 99 |
+ label: 'Redo', |
|
| 100 |
+ accelerator: 'Shift+Command+Z', |
|
| 101 |
+ selector: 'redo:' |
|
| 102 |
+ }, |
|
| 103 |
+ {
|
|
| 104 |
+ type: 'separator' |
|
| 105 |
+ }, |
|
| 106 |
+ {
|
|
| 107 |
+ label: 'Cut', |
|
| 108 |
+ accelerator: 'Command+X', |
|
| 109 |
+ selector: 'cut:' |
|
| 110 |
+ }, |
|
| 111 |
+ {
|
|
| 112 |
+ label: 'Copy', |
|
| 113 |
+ accelerator: 'Command+C', |
|
| 114 |
+ selector: 'copy:' |
|
| 115 |
+ }, |
|
| 116 |
+ {
|
|
| 117 |
+ label: 'Paste', |
|
| 118 |
+ accelerator: 'Command+V', |
|
| 119 |
+ selector: 'paste:' |
|
| 120 |
+ }, |
|
| 121 |
+ {
|
|
| 122 |
+ label: 'Select All', |
|
| 123 |
+ accelerator: 'Command+A', |
|
| 124 |
+ selector: 'selectAll:' |
|
| 125 |
+ } |
|
| 126 |
+ ] |
|
| 127 |
+ }, |
|
| 128 |
+ {
|
|
| 129 |
+ label: 'View', |
|
| 130 |
+ submenu: [ |
|
| 131 |
+ {
|
|
| 132 |
+ label: 'Reload', |
|
| 133 |
+ accelerator: 'Command+R', |
|
| 134 |
+ click: function() { remote.getCurrentWindow().reload(); }
|
|
| 135 |
+ }, |
|
| 136 |
+ {
|
|
| 137 |
+ label: 'Toggle DevTools', |
|
| 138 |
+ accelerator: 'Alt+Command+I', |
|
| 139 |
+ click: function() { remote.getCurrentWindow().toggleDevTools(); }
|
|
| 140 |
+ }, |
|
| 141 |
+ ] |
|
| 142 |
+ }, |
|
| 143 |
+ {
|
|
| 144 |
+ label: 'Window', |
|
| 145 |
+ submenu: [ |
|
| 146 |
+ {
|
|
| 147 |
+ label: 'Minimize', |
|
| 148 |
+ accelerator: 'Command+M', |
|
| 149 |
+ selector: 'performMiniaturize:' |
|
| 150 |
+ }, |
|
| 151 |
+ {
|
|
| 152 |
+ label: 'Close', |
|
| 153 |
+ accelerator: 'Command+W', |
|
| 154 |
+ selector: 'performClose:' |
|
| 155 |
+ }, |
|
| 156 |
+ {
|
|
| 157 |
+ type: 'separator' |
|
| 158 |
+ }, |
|
| 159 |
+ {
|
|
| 160 |
+ label: 'Bring All to Front', |
|
| 161 |
+ selector: 'arrangeInFront:' |
|
| 162 |
+ } |
|
| 163 |
+ ] |
|
| 164 |
+ }, |
|
| 165 |
+ {
|
|
| 166 |
+ label: 'Help', |
|
| 167 |
+ submenu: [] |
|
| 168 |
+ } |
|
| 169 |
+ ]; |
|
| 170 |
+ |
|
| 171 |
+ menu = Menu.buildFromTemplate(template); |
|
| 172 |
+ |
|
| 173 |
+ Menu.setApplicationMenu(menu); |
|
| 37 | 174 |
</script> |
| 38 | 175 |
</head> |
| 39 | 176 |
|
@@ -90,7 +227,7 @@ |
||
| 90 | 227 |
<span class="icon icon-archive"></span> |
| 91 | 228 |
All Files |
| 92 | 229 |
</span> |
| 93 |
- <span class="nav-group-item"> |
|
| 230 |
+ <span class="nav-group-item" ng-class="sidebar[2].active" ng-click="goToNotebooks()"> |
|
| 94 | 231 |
<span class="icon icon-book"></span> |
| 95 | 232 |
Notebooks |
| 96 | 233 |
</span> |
@@ -0,0 +1,29 @@ |
||
| 1 |
+<!DOCTYPE html> |
|
| 2 |
+<html class="no-js"> |
|
| 3 |
+ |
|
| 4 |
+ <head> |
|
| 5 |
+ <title>Codex</title> |
|
| 6 |
+ <meta charset="UTF-8"> |
|
| 7 |
+ <!-- Stylesheets --> |
|
| 8 |
+ <link rel="stylesheet" href="../css/tomorrow-night-eighties.css"> |
|
| 9 |
+ <link rel="stylesheet" href="../css/photon.min.css"> |
|
| 10 |
+ <link rel="stylesheet" href="../css/codex.css"> |
|
| 11 |
+ |
|
| 12 |
+ <script> |
|
| 13 |
+ var remote = require('remote');
|
|
| 14 |
+ var ipc = require('ipc');
|
|
| 15 |
+ var dialog = remote.require('dialog');
|
|
| 16 |
+ </script> |
|
| 17 |
+ </head> |
|
| 18 |
+ |
|
| 19 |
+ <body> |
|
| 20 |
+ <header class="toolbar toolbar-header"> |
|
| 21 |
+ <h1 class="title">Preferences</h1> |
|
| 22 |
+ |
|
| 23 |
+ <div class="toolbar-actions"> |
|
| 24 |
+ <img src="content/imgs/prefs-icon.png" style="width: 32px; height: 32px;"> |
|
| 25 |
+ </div> |
|
| 26 |
+ </header> |
|
| 27 |
+ |
|
| 28 |
+ </body> |
|
| 29 |
+</html> |
@@ -19,6 +19,8 @@ angular.module('codexApp.index', [])
|
||
| 19 | 19 |
case "All Files": |
| 20 | 20 |
$scope.files = FileService.getAllFiles(); |
| 21 | 21 |
break; |
| 22 |
+ case "Notebooks": |
|
| 23 |
+ $scope.files = FileService.getFolders(); |
|
| 22 | 24 |
} |
| 23 | 25 |
} |
| 24 | 26 |
|
@@ -30,6 +30,18 @@ angular.module('codexApp.sidebar', [])
|
||
| 30 | 30 |
$state.go("index");
|
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 |
+ $scope.goToNotebooks = function() {
|
|
| 34 |
+ PrefsService.setCurrentView("Notebooks");
|
|
| 35 |
+ $scope.activateSidebarBtn(2); |
|
| 36 |
+ $rootScope.$broadcast('main-window:file-list');
|
|
| 37 |
+ $rootScope.$broadcast('window-view:change');
|
|
| 38 |
+ $state.go("index");
|
|
| 39 |
+ } |
|
| 40 |
+ |
|
| 41 |
+ $rootScope.$on('main-window:note-view', function(){
|
|
| 42 |
+ $scope.activateSidebarBtn(); |
|
| 43 |
+ }); |
|
| 44 |
+ |
|
| 33 | 45 |
$rootScope.$on('sidebar:toogle', function() {
|
| 34 | 46 |
if(!$scope.$$phase) {
|
| 35 | 47 |
$scope.$apply(function(){
|
@@ -56,6 +68,10 @@ angular.module('codexApp.sidebar', [])
|
||
| 56 | 68 |
{
|
| 57 | 69 |
"view" : "All Files", |
| 58 | 70 |
"active" : "" |
| 71 |
+ }, |
|
| 72 |
+ {
|
|
| 73 |
+ "view" : "Notebooks", |
|
| 74 |
+ "active" : "" |
|
| 59 | 75 |
} |
| 60 | 76 |
] |
| 61 | 77 |
|
@@ -71,6 +87,7 @@ angular.module('codexApp.sidebar', [])
|
||
| 71 | 87 |
for (var i = 0; i < $scope.sidebar.length; i++) {
|
| 72 | 88 |
$scope.sidebar[i].active = ""; |
| 73 | 89 |
} |
| 90 |
+ if (typeof(num)==='undefined') return; |
|
| 74 | 91 |
$scope.sidebar[num].active = "active"; |
| 75 | 92 |
} |
| 76 | 93 |
} |
@@ -284,19 +284,35 @@ angular.module('codexApp')
|
||
| 284 | 284 |
return absoluteToRelativeURL(current_url, absolute_url); |
| 285 | 285 |
} |
| 286 | 286 |
|
| 287 |
+ // Get folders |
|
| 288 |
+ |
|
| 289 |
+ var getFolders = function(root) {
|
|
| 290 |
+ if (typeof(root)==='undefined') root = notes_dir; |
|
| 291 |
+ var filesystem = require("fs");
|
|
| 292 |
+ var results = []; |
|
| 293 |
+ filesystem.readdirSync(root).forEach(function(file) {
|
|
| 294 |
+ file_path = root+'/'+file; |
|
| 295 |
+ var stat = filesystem.statSync(file_path); |
|
| 296 |
+ if (stat && stat.isDirectory()) {
|
|
| 297 |
+ results.push(SetFileInfo( undefined, root, file_path, stat)); |
|
| 298 |
+ } |
|
| 299 |
+ }); |
|
| 300 |
+ console.log(results); |
|
| 301 |
+ return results; |
|
| 302 |
+ } |
|
| 303 |
+ |
|
| 304 |
+ this.getFolders = function(root){
|
|
| 305 |
+ return getFolders(root); |
|
| 306 |
+ } |
|
| 307 |
+ |
|
| 287 | 308 |
// Sort files |
| 288 | 309 |
var date_sort_asc = function (date1, date2) {
|
| 289 |
- // This is a comparison function that will result in dates being sorted in |
|
| 290 |
- // ASCENDING order. As you can see, JavaScript's native comparison operators |
|
| 291 |
- // can be used to compare dates. This was news to me. |
|
| 292 | 310 |
if (date1.modified_at > date2.modified_at) return 1; |
| 293 | 311 |
if (date1.modified_at < date2.modified_at) return -1; |
| 294 | 312 |
return 0; |
| 295 | 313 |
}; |
| 296 | 314 |
|
| 297 | 315 |
var date_sort_desc = function (date1, date2) {
|
| 298 |
- // This is a comparison function that will result in dates being sorted in |
|
| 299 |
- // DESCENDING order. |
|
| 300 | 316 |
if (date1.modified_at > date2.modified_at) return -1; |
| 301 | 317 |
if (date1.modified_at < date2.modified_at) return 1; |
| 302 | 318 |
return 0; |
@@ -1,7 +1,7 @@ |
||
| 1 | 1 |
angular.module('codexApp')
|
| 2 | 2 |
.service('PrefsService', [ '$rootScope', '$http', function($rootScope, $http) {
|
| 3 | 3 |
|
| 4 |
- var views = ["All Notes", "All Files"]; |
|
| 4 |
+ var views = ["All Notes", "All Files", "Notebooks"]; |
|
| 5 | 5 |
var current_view = "All Notes" |
| 6 | 6 |
|
| 7 | 7 |
this.getCurrentView = function() {
|
@@ -13,7 +13,7 @@ |
||
| 13 | 13 |
* [X] Syntax Highlight |
| 14 | 14 |
* [X] File Sorting Asc |
| 15 | 15 |
* [ ] Image View |
| 16 |
-* [ ] All Files / All Notes View |
|
| 16 |
+* [X] All Files / All Notes View |
|
| 17 | 17 |
* [ ] Folders/Notebook view & navigation |
| 18 | 18 |
* [ ] Nav btns go to file views |
| 19 | 19 |
* [ ] Note versioning |
@@ -28,4 +28,7 @@ |
||
| 28 | 28 |
* [ ] S3 Backup |
| 29 | 29 |
* [ ] Web Clipper |
| 30 | 30 |
* [ ] Multiple source folders |
| 31 |
-* [ ] Footer bar infos |
|
| 31 |
+* [ ] Footer bar infos |
|
| 32 |
+* [ ] File View Buffering |
|
| 33 |
+* [ ] Retina Thumbnails |
|
| 34 |
+* [ ] Charset Encoding bug |