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

app-ctrl.js 6.0KB

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