Desktop markdown wiki app. Built with node, Electron Framework and AngularJS.

app-ctrl.js 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /**
  2. * @ngdoc function
  3. * @name domainManagerApp.controller:AboutCtrl
  4. * @description
  5. * # AboutCtrl
  6. * Controller of the domainManagerApp
  7. */
  8. angular.module('codexApp.index', [])
  9. .controller('AppCtrl', ['$scope', '$rootScope', '$state', '$location', 'FileService', 'PrefsService', '$timeout', function ($scope, $rootScope, $state, $location, FileService, PrefsService, $timeout) {
  10. $scope.setView = function() {
  11. $scope.view = PrefsService.getCurrentView();
  12. $scope.files = [];
  13. $timeout(function() {
  14. switch ($scope.view) {
  15. case "All Notes":
  16. var note = {
  17. type : "All Notes"
  18. }
  19. FileService.setCurrentNote(note);
  20. $scope.files = FileService.getAllNotes();
  21. var info = $scope.files.length + " Notes"
  22. $rootScope.$broadcast('footer:info', info);
  23. break;
  24. case "All Files":
  25. $scope.files = FileService.getAllFiles();
  26. var info = $scope.files.length + " Files"
  27. $rootScope.$broadcast('footer:info', info);
  28. break;
  29. case "Notebooks":
  30. $scope.current_folder = FileService.getNotesDir();
  31. $scope.files = FileService.getFolders();
  32. var info = $scope.files.length + " Notebooks"
  33. $rootScope.$broadcast('footer:info', info);
  34. break;
  35. case "Notebook":
  36. $scope.files = FileService.getFiles(FileService.getCurrentNote().path);
  37. var info = $scope.files.length + " Items"
  38. $rootScope.$broadcast('footer:info', info);
  39. break;
  40. case "Searched Files":
  41. $scope.files = FileService.getSearchFiles();
  42. var info = $scope.files.length + " Items"
  43. $rootScope.$broadcast('footer:info', info);
  44. break;
  45. }
  46. }, 1);
  47. }
  48. $scope.setView();
  49. $rootScope.$on('window-view:change', function(){
  50. $scope.setView();
  51. });
  52. var remote = require('remote')
  53. $scope.openFile = function(file){
  54. console.log("-> Openning " + file.type + " link: " + file.path);
  55. switch (file.type) {
  56. case "Markdown":
  57. FileService.setCurrentNote(file)
  58. $rootScope.$broadcast('main-window:note-view');
  59. $state.go("note-view");
  60. break;
  61. case "Folder":
  62. $scope.current_folder = file.path;
  63. FileService.setCurrentNote(file)
  64. PrefsService.setCurrentView("Notebook");
  65. $scope.setView();
  66. break;
  67. }
  68. }
  69. $scope.editFile = function(file){
  70. console.log("-> Editing " + file.type + " link: " + file.path);
  71. switch (file.type) {
  72. case "Markdown":
  73. FileService.setCurrentNote(file)
  74. $rootScope.$broadcast('main-window:note-edit');
  75. $state.go("note-edit");
  76. break;
  77. }
  78. }
  79. $rootScope.$on('file-service:files-loaded', function(){
  80. if(!$scope.$$phase) {
  81. $scope.$apply(function(){
  82. $scope.itemSpacing();
  83. });
  84. } else {
  85. $scope.itemSpacing();
  86. }
  87. })
  88. $rootScope.$on('$stateNotFound', function(event, unfoundState, fromState, fromParams){
  89. console.log(unfoundState.to); // "lazy.state"
  90. console.log(unfoundState.toParams); // {a:1, b:2}
  91. console.log(unfoundState.options); // {inherit:false} + default options
  92. })
  93. $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){
  94. console.log('Change state error'); // "lazy.state"
  95. console.log(error)
  96. console.log(toState)
  97. console.log(toParams)
  98. console.log(fromState)
  99. console.log(fromParams)
  100. })
  101. $scope.itemSpacing = function(){
  102. //var html_items = document.getElementsByClassName("file-view-item");
  103. //var items = [].slice.call(html_items);
  104. // var items = HTMLNodesToArray('grid', 'li');
  105. // for (var i = 0; i < items.length; i++) {
  106. // items[i].style.margin = "55px";
  107. // console.log(item[i]);
  108. // }
  109. }
  110. $scope.isImage = function(file_type) {
  111. if(file_type != 'Image') { return true; }
  112. else { return false; }
  113. }
  114. $scope.getImageURL = function(img_url) {
  115. return "" + FileService.absoluteToRelativeURL(FileService.getNotesDir(), img_url)
  116. }
  117. $scope.shortenPath = function(path) {
  118. if($scope.current_folder != null) {
  119. return FileService.shortenPath(path);
  120. } else {
  121. return "";
  122. }
  123. }
  124. var Menu = remote.require('menu');
  125. var MenuItem = remote.require('menu-item');
  126. var currentWindow = remote.getCurrentWindow();
  127. var clipboard = require('clipboard');
  128. $scope.fileContextMenu = function (file) {
  129. var menu = new Menu();
  130. menu.append(new MenuItem({ label: 'Open File', click: function () {
  131. $scope.openFile(file);
  132. } }));
  133. menu.append(new MenuItem({ label: 'Edit File', click: function () {
  134. $scope.editFile(file);
  135. } }));
  136. menu.append(new MenuItem({ label: 'Copy File URL', click: function () {
  137. var url = file.path;
  138. console.log("-> Copying URL to clipboard " + url);
  139. clipboard.writeText(url);
  140. } }));
  141. menu.append(new MenuItem({ label: 'Delete', click: function () {
  142. if(FileService.deleteFile(file.path)){
  143. var index = $scope.files.indexOf(file);
  144. if (index > -1) {
  145. if(!$scope.$$phase) {
  146. $scope.$apply(function(){
  147. $scope.files.splice(index, 1);
  148. });
  149. } else {
  150. $scope.files.splice(index, 1);
  151. }
  152. }
  153. };
  154. } }));
  155. menu.popup(currentWindow);
  156. }
  157. var HTMLNodesToArray = function (reference, elems) {
  158. reference = document.getElementById(reference);
  159. console.log(reference);
  160. //elems = elems || '*';
  161. //var nodes = [];
  162. //var elements = reference.getElementsByClassName(elems);
  163. var elements = angular.element(document.querySelector( '.file-view-item' ));
  164. console.log(elements);
  165. // var i;
  166. // nodes = Array.prototype.slice.call(elements);
  167. // console.log( Array.isArray(elements))
  168. // console.log( Array.isArray(nodes))
  169. // console.log(nodes)
  170. // var len = elements.length;
  171. // console.log(len)
  172. // for(i = 0; i< len; i += 1) {
  173. // var node = elements[i];
  174. // nodes.push(node);
  175. // }
  176. return elements;
  177. }
  178. }]);