{"version":3,"sources":["app.js","controllers/accountBookCashController.js","controllers/accountBookController.js","controllers/accountBookFundController.js","controllers/accountBookNewController.js","controllers/accountBookStockController.js","controllers/addController.js","controllers/indexController.js","controllers/signinController.js","directives/accountBookCashDirective.js","directives/accountBookDirective.js","directives/accountBookFundDirective.js","directives/accountBookStockDirective.js","directives/focusMeDirective.js","directives/numeralDirective.js","filters/basicFilter.js","helpers/helpers.js","services/accountBookService.js","services/transactionService.js","services/userService.js","services/wsApiService.js"],"names":[],"mappings":"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","file":"../scripts/app.min.js","sourcesContent":["// modules\nangular.module('controllers', []);\nangular.module('services', []);\nangular.module('filters', []);\nangular.module('directives', []);\n\n// app\nangular.module('app', [\n 'ngAria',\n 'ngAnimate',\n 'ui.router',\n 'ui.bootstrap',\n 'controllers',\n 'services',\n 'filters',\n 'directives'\n])\n\n// routes\n.config(function($stateProvider, $urlRouterProvider, $locationProvider) {\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false\n });\n\n $urlRouterProvider.otherwise(\"/\");\n\n return $stateProvider\n .state('signin', {\n url: '/signin',\n templateUrl: \"static/templates/signin.975414e8.html\",\n controller: \"signinController\"\n }).state('index', {\n url: '/',\n templateUrl: \"static/templates/index.34be1931.html\",\n controller: \"indexController\"\n });\n})\n\n.run(function($rootScope, $state, $log) {\n $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {});\n return $rootScope.$on('$stateChangeSuccess', function(event, toState) {});\n});\n","angular.module(\"controllers\")\n\n.controller(\"AccountBookCashController\", function($rootScope, $scope, $interval, $uibModal, $filter, $state, $location, $window, transactionService, accountBookService, wsApiService) {\n let accountBookId = $scope.$parent.accountBook.metadata.name;\n $scope.groups = {};\n $scope.summary = {};\n\n $scope.$on('summary', function(event, ...args) {\n let summary = args[0];\n for (let code in summary.cashes) {\n let cashsummary = summary.cashes[code];\n if (!(code in $scope.groups)) {\n $scope.groups[code] = {\n cashes: []\n };\n }\n let group = $scope.groups[code];\n Object.assign(group, cashsummary);\n }\n return $scope.summary = summary;\n });\n\n // Used to load items in this group.\n $scope.load = function(group) {\n if (!group.collapsed) {\n return;\n }\n return wsApiService.transactions(accountBookId, \"cash\", group.code)\n .then(cashes => group.cashes = cashes);\n };\n\n $scope.create = function(tran_type) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return {\n spec: {\n type: tran_type,\n time: helpers.toRFC3333DateString(new Date()),\n itemType: \"cash\",\n bookRef: {\n name: $scope.$parent.accountBook.metadata.name\n }\n }\n };\n }\n }\n });\n return instance.result\n .then((result) => {\n for (let code in $scope.groups) {\n if (code == result.spec.itemCode) {\n $scope.load($scope.groups[code]);\n }\n }\n })\n .finally(() => $scope.$emit(\"refreshSummary\"));\n };\n\n $scope.update = function(group, cash) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return cash;\n }\n }\n });\n return instance.result\n .finally(() => $scope.load(group));\n };\n\n $scope.delete = function(group, cash) {\n bootbox.confirm({\n title: \"确定删除?\",\n message: `基金代码: ${cash.code} 购买日期:${$filter('date')(cash.tran_time, 'yyyy-MM-dd')}`,\n callback(result) {\n if (!result) {\n return;\n }\n return transactionService.delete(cash.metadata.name)\n .finally(() => $scope.load(group));\n }\n });\n };\n return;\n});\n","angular.module(\"controllers\")\n\n.controller(\"AccountBookController\", function($rootScope, $scope, $interval, $uibModal, $filter, $state, $location, $window, accountBookService, wsApiService) {\n $scope.inited = false;\n $scope.summary = {};\n\n $scope.refresh = () =>\n wsApiService.summary($scope.accountBook.metadata.name)\n .then(function(summary) {\n summary.today_delta = summary.today_value - summary.yesterday_value;\n if (summary.yesterday_value) {\n summary.today_delta_percent = summary.today_delta / summary.yesterday_value;\n }\n Object.assign($scope.summary, summary);\n return $scope.$broadcast(\"summary\", summary);\n });\n\n $scope.$on(\"refreshSummary\", function(event, data) {\n $scope.refresh();\n return event.stopPropagation();\n });\n\n $scope.isActive = function() {\n if (!$scope.$parent.currentAccountBook) {\n return;\n }\n return $scope.accountBook.metadata.name === $scope.$parent.currentAccountBook.metadata.name;\n };\n\n $scope.filter = function(value, index, array) {\n var fnum = Number.parseFloat(value.num)\n if (Number.isNaN(fnum)) {\n fnum = 0\n }\n if ($scope.$parent.options.hideEmptyItems && fnum == 0) {\n return false;\n }\n return true;\n };\n\n let autoRefresh = $interval(function() {\n if (!$scope.$parent.options.autoRefresh) {\n return;\n }\n if (!$scope.isActive()) {\n return;\n }\n return $scope.refresh();\n }, 3000);\n\n $scope.$on(\"$destroy\", () => $interval.cancel(autoRefresh));\n\n if ($scope.isActive()) {\n $scope.refresh();\n $scope.inited = true;\n }\n\n return $scope.$on('load', function(event, ...args) {\n if ($scope.isActive()) {\n return $scope.refresh();\n }\n });\n});\n","angular.module(\"controllers\")\n\n.controller(\"AccountBookFundController\", function($rootScope, $scope, $interval, $uibModal, $filter, $state, $location, $window, transactionService, accountBookService, wsApiService) {\n let accountBookId = $scope.$parent.accountBook.metadata.name;\n $scope.groups = {};\n $scope.summary = {};\n\n $scope.$on('summary', function(event, ...args) {\n let summary = args[0];\n for (let code in summary.funds) {\n let fundsummary = summary.funds[code];\n if (!(code in $scope.groups)) {\n $scope.groups[code] = {\n funds: []\n };\n }\n let group = $scope.groups[code];\n Object.assign(group, fundsummary);\n }\n return $scope.summary = summary;\n });\n\n // Used to load items in this group.\n $scope.load = function(group) {\n if (!group.collapsed) {\n return;\n }\n return wsApiService.transactions(accountBookId, \"fund\", group.code)\n .then(funds => group.funds = funds);\n };\n\n $scope.create = function(tran_type) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return {\n spec: {\n type: tran_type,\n time: helpers.toRFC3333DateString(new Date()),\n itemType: \"fund\",\n bookRef: {\n name: $scope.$parent.accountBook.metadata.name\n }\n }\n };\n }\n }\n });\n return instance.result\n .then((result) => {\n for (let code in $scope.groups) {\n if (code == result.spec.itemCode) {\n $scope.load($scope.groups[code]);\n }\n }\n })\n .finally(() => $scope.$emit(\"refreshSummary\"));\n };\n\n $scope.update = function(group, fund) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return fund;\n }\n }\n });\n return instance.result\n .finally(() => $scope.load(group));\n };\n\n $scope.delete = function(group, fund) {\n bootbox.confirm({\n title: \"确定删除?\",\n message: `基金代码: ${fund.spec.itemCode} 购买日期:${$filter('date')(fund.spec.time, 'yyyy-MM-dd')}`,\n callback(result) {\n if (!result) {\n return;\n }\n return transactionService.delete(fund.metadata.name)\n .finally(() => $scope.load(group));\n }\n });\n };\n return;\n});\n","angular.module(\"controllers\")\n\n.controller('accountBookNewController', function($rootScope, $scope, $uibModalInstance, accountBookService, accountBook) {\n $scope.obj = {}\n if (accountBook) {\n Object.assign($scope.obj, accountBook)\n } else {\n $scope.obj = {\n metadata: {\n name: \"\",\n },\n spec: {\n type: \"normal\",\n order: 0,\n },\n }\n }\n if (_.isUndefined($scope.obj.spec.order)) {\n $scope.obj.spec.order = 0;\n }\n $scope.types = [{\n \"value\": \"normal\",\n \"name\": \"普通\"\n }, {\n \"value\": \"selector\",\n \"name\": \"选择器\"\n }]\n return $scope.submit = function() {\n if ($scope.obj.metadata.name) {\n return accountBookService.update($scope.obj)\n .then(result => $uibModalInstance.close(\"success\")).catch(err => bootbox.alert(`更新失败 ${err.error}`));\n } else {\n return accountBookService.create($scope.obj)\n .then(result => $uibModalInstance.close(\"success\")).catch(err => bootbox.alert(`创建失败 ${err.error}`));\n }\n };\n});\n","angular.module(\"controllers\")\n\n.controller(\"AccountBookStockController\", function($rootScope, $scope, $interval, $uibModal, $filter, $state, $location, $window, transactionService, accountBookService, wsApiService) {\n let accountBookId = $scope.$parent.accountBook.metadata.name;\n $scope.groups = {};\n $scope.summary = {};\n\n $scope.$on('summary', function(event, ...args) {\n let summary = args[0];\n for (let code in summary.stocks) {\n let stocksummary = summary.stocks[code];\n if (!(code in $scope.groups)) {\n $scope.groups[code] = {\n stocks: []\n };\n }\n let group = $scope.groups[code];\n Object.assign(group, stocksummary);\n }\n return $scope.summary = summary;\n });\n\n // Used to load items in this group.\n $scope.load = function(group) {\n if (!group.collapsed) {\n return;\n }\n return wsApiService.transactions(accountBookId, \"stock\", group.code)\n .then(stocks => {\n group.stocks = stocks\n });\n };\n\n $scope.create = function(tran_type) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return {\n spec: {\n type: tran_type,\n time: helpers.toRFC3333DateString(new Date()),\n itemType: \"stock\",\n bookRef: {\n name: $scope.$parent.accountBook.metadata.name\n }\n }\n };\n }\n }\n });\n return instance.result\n .then((result) => {\n for (let code in $scope.groups) {\n if (code == result.spec.itemCode) {\n $scope.load($scope.groups[code]);\n }\n }\n })\n .finally(() => $scope.$emit(\"refreshSummary\"));\n };\n\n $scope.update = function(group, stock) {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/add-modal.9f5f5aa2.html',\n controller: 'addController',\n size: 'sm',\n resolve: {\n obj() {\n return stock;\n }\n }\n });\n return instance.result\n .finally(() => $scope.load(group));\n };\n\n $scope.delete = function(group, stock) {\n bootbox.confirm({\n title: \"确定删除?\",\n message: `证券号码: ${stock.spec.itemCode} 购买日期:${$filter('date')(stock.spec.time, 'yyyy-MM-dd')}`,\n callback(result) {\n if (!result) {\n return;\n }\n return transactionService.delete(stock.metadata.name)\n .finally(() => $scope.load(group));\n }\n });\n };\n return;\n});\n","angular.module(\"controllers\")\n\n.controller('addController', function($rootScope, $scope, $uibModalInstance, transactionService, accountBookService, obj) {\n // object\n if (!obj) {\n console.log(\"no object provided in addController\")\n return\n }\n\n if (!obj.metadata) {\n obj.metadata = {};\n }\n $scope.obj = obj;\n\n // get list of books\n $scope.books = [];\n accountBookService.list()\n .then(books => {\n for (var book of books) {\n if (book.spec.type != \"normal\") {\n continue\n }\n $scope.books.push(book)\n }\n });\n\n $scope.tranTypes = [];\n if (obj.spec.itemType == 'stock' || obj.spec.itemType == 'fund') {\n $scope.tranTypes.push({\n name: \"买入\",\n value: \"buy\"\n });\n $scope.tranTypes.push({\n name: \"卖出\",\n value: \"sell\"\n });\n $scope.tranTypes.push({\n name: \"现金分红\",\n value: \"cash_dividend\"\n });\n if (obj.spec.itemType === 'stock') {\n $scope.tranTypes.push({\n name: \"股份分红\",\n value: \"stock_dividend\"\n });\n } else if (obj.spec.itemType === 'fund') {\n $scope.tranTypes.push({\n name: \"红利再投资\",\n value: \"reinvestment_dividend\"\n });\n }\n } else if (obj.spec.itemType == 'cash') {\n $scope.tranTypes.push({\n name: \"存入\",\n value: \"deposit\"\n });\n $scope.tranTypes.push({\n name: \"收益\",\n value: \"income\"\n });\n $scope.tranTypes.push({\n name: \"提取\",\n value: \"withdraw\"\n });\n }\n\n // local variable for input model\n // string: \"2018-01-19T02:56:40.000Z\"\n // TODO: move these logic into directive, etc\n $scope.time = new Date(obj.spec.time);\n $scope.modelOptions = {\n timezone: \"+0800\",\n };\n $scope.dateOptions = {\n formatYear: 'yy',\n startingDay: 1\n };\n $scope.format = 'yy/MM/dd HH:mm';\n $scope.status = {\n opened: false\n };\n $scope.open = () => $scope.status.opened = true;\n $scope.disabled = (date, mode) => (mode === 'day') && ((date.getDay() === 0) || (date.getDay() === 6));\n\n $scope.submit = function() {\n // normalize cash transfter\n if (obj.spec.cashTransfer) {\n if (obj.spec.cashTransfer.bookRef && obj.spec.cashTransfer.bookRef.name && obj.spec.cashTransfer.itemCode) {\n // if book and item code all set\n obj.spec.cashTransfer.itemType = \"cash\" // hard-coded in web\n } else {\n // invalid, empty it\n obj.spec.cashTransfer = null\n }\n }\n // TODO: move this to directive\n $scope.obj.spec.time = helpers.toRFC3333DateString($scope.time);\n $scope.obj.spec.itemCode = $scope.obj.spec.itemCode.toUpperCase();\n if ($scope.obj.metadata.name) {\n return transactionService.update($scope.obj.metadata.name, obj)\n .then(result => $uibModalInstance.close(result))\n .catch(err => alert(\"error: \" + err.error));\n } else {\n return transactionService.create(obj)\n .then(result => $uibModalInstance.close(result))\n .catch(err => alert(\"error: \" + err.error));\n }\n };\n\n return;\n});\n","angular.module(\"controllers\")\n\n.controller(\"indexController\", function($rootScope, $scope, $log, $timeout, $interval, $uibModal, $filter, $state, $location, $window, userService, accountBookService, wsApiService) {\n $scope.accountBooks = [];\n $scope.options = userService.loadOptions();\n if (!$scope.options) {\n $scope.options = {\n selected_account_book: \"\"\n };\n }\n\n $scope.active = 0;\n $scope.currentAccountBook = null;\n\n wsApiService.info()\n .then(info => $scope.info = info);\n\n wsApiService.user()\n .then(user => $scope.user = user).catch(err => $state.go('signin'));\n\n $scope.signout = () =>\n userService.signOut()\n .then(() => $state.go('signin'));\n\n // Load all books. Activate user selected book if needed. If user does not\n // choose, activiate the first one.\n $scope.load = () =>\n wsApiService.books()\n .then(function(accountBooks) {\n // account books load in two cases:\n // 1. on first page load\n // 2. on account books change\n // So, for rendering page corrrectly, we simply modifed a copy of old objs, then apply at once\n\n let i, old;\n let copyAccountBooks = $scope.accountBooks.slice();\n let toDeleteAccountBooks = [];\n\n // delete\n for (var accountBook of Array.from(copyAccountBooks)) {\n old = _.find(accountBooks, a => a.metadata.name === accountBook.metadata.name);\n if (!old) {\n let index = _.findIndex(copyAccountBooks, a => a.metadata.name === accountBook.metadata.name);\n if (index !== 0) {\n toDeleteAccountBooks.push(accountBook);\n }\n }\n }\n\n // add or update\n for (accountBook of Array.from(accountBooks)) {\n old = _.find(copyAccountBooks, a => a.metadata.name === accountBook.metadata.name);\n if (old) {\n Object.assign(old, accountBook);\n } else {\n copyAccountBooks.push(accountBook);\n }\n }\n\n // update\n for (accountBook of Array.from(copyAccountBooks)) {\n old = _.find($scope.accountBooks, a => a.metadata.name === accountBook.metadata.name);\n if (old) {\n Object.assign(old, accountBook);\n } else {\n $scope.accountBooks.push(accountBook);\n }\n }\n for (let toDeleteAccountBook of Array.from(toDeleteAccountBooks)) {\n for (i = 0; i < $scope.accountBooks.length; i++) {\n accountBook = $scope.accountBooks[i];\n if (accountBook === toDeleteAccountBook) {\n $scope.accountBooks.splice(i, 1);\n break;\n }\n }\n }\n\n // sort\n $scope.accountBooks = _.sortBy($scope.accountBooks, a => {\n if (_.isUndefined(a.spec.order)) {\n return 0;\n } else {\n return a.spec.order;\n }\n });\n var active = -1;\n for (i = 0; i < $scope.accountBooks.length; i++) {\n accountBook = $scope.accountBooks[i];\n if (accountBook.metadata.name === $scope.options.selected_account_book) {\n $scope.currentAccountBook = accountBook;\n active = i;\n }\n }\n if (active < 0) {\n active = 0;\n $scope.currentAccountBook = $scope.accountBooks[active]\n }\n\n // update tabs active index\n // See http://stackoverflow.com/a/36420520/288089.\n return $timeout(() => $scope.active = active, 0);\n });\n\n $scope.newBook = function() {\n let instance = $uibModal.open({\n templateUrl: '/static/templates/account-book-new-modal.d6d24297.html',\n controller: 'accountBookNewController',\n size: 'md',\n resolve: {\n accountBook() {\n return null;\n }\n }\n });\n return instance.result\n .finally(() => $scope.load());\n };\n\n $scope.updateBook = function() {\n let accountBook = $scope.currentAccountBook;\n let instance = $uibModal.open({\n templateUrl: '/static/templates/account-book-new-modal.d6d24297.html',\n controller: 'accountBookNewController',\n size: 'md',\n resolve: {\n accountBook() {\n return accountBook;\n }\n }\n });\n return instance.result\n .finally(() => $scope.load());\n };\n\n $scope.deleteBook = function() {\n let accountBook = $scope.currentAccountBook;\n bootbox.confirm(`确认删除账本 ${accountBook.spec.name}?`, function(result) {\n if (!result) {\n return;\n }\n return accountBookService.delete(accountBook.metadata.name)\n .catch(err => bootbox.alert(`删除失败 ${err.error}`)).finally(() => $scope.load());\n });\n };\n\n $scope.switch = function(accountBook) {\n if (!accountBook) {\n return;\n }\n $scope.currentAccountBook = accountBook;\n $scope.options.selected_account_book = $scope.currentAccountBook.metadata.name;\n userService.saveOptions($scope.options);\n return $scope.$broadcast(\"load\", accountBook);\n };\n\n $scope.saveOptions = () => userService.saveOptions($scope.options);\n\n return $scope.load();\n});\n","angular.module(\"controllers\")\n\n.controller(\"signinController\", function($rootScope, $scope, $uibModal, $state, $location, $window, userService) {\n userService.getUser()\n .then(user => $state.go('index'));\n\n return $scope.signin = () => $window.location.href = \"/connect/github\";\n});\n","angular.module('directives')\n\n.directive('accountBookCashDirective', () =>\n ({\n restrict: 'AE',\n templateUrl: '/static/templates/account-book-cash.27459702.html',\n controller: 'AccountBookCashController',\n scope: {}\n })\n);\n","angular.module('directives')\n\n.directive('accountBookDirective', () =>\n ({\n restrict: 'AE',\n templateUrl: '/static/templates/account-book.79ae4148.html',\n controller: 'AccountBookController',\n scope: {\n accountBook: '='\n }\n })\n);\n","angular.module('directives')\n\n.directive('accountBookFundDirective', () =>\n ({\n restrict: 'AE',\n templateUrl: '/static/templates/account-book-fund.779b9a1d.html',\n controller: 'AccountBookFundController',\n scope: {}\n })\n);\n","angular.module('directives')\n\n.directive('accountBookStockDirective', () =>\n ({\n restrict: 'AE',\n templateUrl: '/static/templates/account-book-stock.e6975237.html',\n controller: 'AccountBookStockController',\n scope: {}\n })\n);\n","angular.module('directives')\n\n/**\n * focusMe directive\n *\n * When a Model is opened, set focus on a predefined insdie this Modal.\n *\n * References:\n * - https://stackoverflow.com/a/14837021/288089\n */\n\n.directive('focusMe', ['$timeout', '$parse', function($timeout, $parse) {\n return {\n restrict: 'A',\n scope: {\n focusMe: '='\n },\n link: function(scope, elt) {\n scope.$watch('focusMe', function(val) {\n if (val) {\n elt[0].focus();\n }\n });\n }\n };\n}]);\n","angular.module('directives')\n\n/**\n * numeral directive\n *\n * References:\n * - numeral: http://numeraljs.com/\n */\n\n.directive('numeralDirective', () =>\n ({\n restrict: 'A',\n require: 'ngModel',\n scope: {\n numeralFormat: '@',\n numeralScale: '@',\n },\n link(scope, element, attrs, ngModelController, transcludeFn) {\n var scale = 0;\n if (scope.numeralScale) {\n var scaleNum = numeral(scope.numeralScale).value();\n if (Number.isInteger(scaleNum)) {\n scale = scaleNum\n }\n }\n ngModelController.$parsers.push(data => {\n return numeral(data).value() * Math.pow(10, scale);\n });\n ngModelController.$formatters.push(data => {\n if (scope.numeralFormat) {\n return numeral(data * Math.pow(10, -scale)).format(scope.numeralFormat)\n } else {\n return data * Math.pow(10, -scale);\n }\n });\n }\n })\n);\n","angular.module('filters')\n\n.filter('toTimestamp', () => date => Date.parse(date))\n\n.filter('objValuesToArray', () => obj => _.values(obj))\n\n.filter('toPercent', $filter => (input, decimals) => `${$filter('number')(input * 100, decimals)}%`)\n\n.filter('printTranType', () =>\n function(tran_type) {\n switch (tran_type) {\n case \"sell\":\n return \"卖出\";\n case \"buy\":\n return \"买入\";\n case \"cash_dividend\":\n return \"现金分红\";\n case \"stock_dividend\":\n return \"股份分红\";\n case \"reinvestment_dividend\":\n return \"红利再投资\";\n case \"deposit\":\n return \"存入\"\n case \"income\":\n return \"收益\"\n case \"withdraw\":\n return \"提取\"\n default:\n return tran_type;\n }\n }\n)\n\n.filter('printObjType', () =>\n function(obj_type) {\n switch (obj_type) {\n case \"stock\":\n return \"股票\";\n case \"fund\":\n return \"基金\";\n default:\n return obj_type;\n }\n }\n);\n","// helpers scripts\nvar helpers = helpers || {};\n\nhelpers.toRFC3333DateString = function(d) {\n function pad(n) {\n return n < 10 ? '0' + n : n\n }\n return d.getUTCFullYear() + '-' +\n pad(d.getUTCMonth() + 1) + '-' +\n pad(d.getUTCDate()) + 'T' +\n pad(d.getUTCHours()) + ':' +\n pad(d.getUTCMinutes()) + ':' +\n pad(d.getUTCSeconds()) + 'Z'\n}\n","angular.module('services')\n\n.factory('accountBookService', function($http, $q) {\n\n this.list = () =>\n $q((resolve, reject) =>\n $http.get(\"/api/books\")\n .then(resp => resolve(resp.data)\n , resp => reject(resp.data))\n )\n ;\n\n this.create = function(input) {\n return $q((resolve, reject) =>\n $http.post(\"/api/books\", input)\n .then(resp => resolve(resp.data)\n , resp => reject(resp.data))\n );\n };\n\n this.update = function(input) {\n return $q((resolve, reject) =>\n $http.put(`/api/books/${input.metadata.name}`, input)\n .then(resp => resolve(resp.data)\n , resp => reject(resp.data))\n );\n };\n\n this.delete = _id =>\n $q((resolve, reject) =>\n $http.delete(`/api/books/${_id}`)\n .then(resp => resolve(resp.data)\n , resp => reject(resp.data))\n )\n ;\n\n this.summary = _id =>\n $q((resolve, reject) =>\n $http.get(`/api/books/${_id}/summary`)\n .then(resp => resolve(resp.data)\n , resp => reject(resp.data))\n )\n ;\n\n return this;\n});\n","angular.module('services')\n\n.factory('transactionService', function($http, $q, $httpParamSerializer) {\n\n this.list = function(book_name) {\n args = {}\n if (book_name != null) {\n args[\"book_name\"] = book_name\n }\n return $q((resolve, reject) =>\n $http.get(\"/api/transactions?\" + $httpParamSerializer(args))\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n };\n\n this.create = obj =>\n $q((resolve, reject) =>\n $http.post(\"/api/transactions\", obj)\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n this.update = (name, obj) =>\n $q((resolve, reject) =>\n $http.put(`/api/transactions/${name}`, obj)\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n this.delete = name =>\n $q((resolve, reject) =>\n $http.delete(`/api/transactions/${name}`)\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n return this;\n});\n","angular.module('services')\n\n.factory('userService', function($http, $q) {\n\n this.getUser = () =>\n $q((resolve, reject) =>\n $http.get(\"/api/user\")\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n this.signOut = () =>\n $q((resolve, reject) =>\n $http.get(\"/signout\")\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n this.loadOptions = function() {\n let optionsStr = localStorage.getItem(\"options\");\n if (!optionsStr) {\n return {};\n }\n return JSON.parse(optionsStr);\n };\n\n this.saveOptions = options => localStorage.setItem(\"options\", JSON.stringify(options));\n\n this.info = () =>\n $q((resolve, reject) =>\n $http.get(\"/api/info\")\n .then(resp => resolve(resp.data), resp => reject(resp.data))\n );\n\n return this;\n});\n","angular.module('services')\n\n.service('wsApiService', function($q, $log) {\n if (location.protocol == 'https:') {\n let API = `wss://${location.host}/api/ws`;\n } else {\n let API = `ws://${location.host}/api/ws`;\n }\n\n let websocket = new ReconnectingWebSocket(API);\n let callbacks = {};\n\n websocket.onopen = function(event) {\n console.log(`API (${API}) connected`);\n console.log(`API (${API}) resending cached requests...`);\n return (() => {\n let result = [];\n for (let id in callbacks) {\n let callback = callbacks[id];\n let item;\n if (callback.sent === false) {\n try {\n websocket.send(angular.toJson(callback.request));\n item = callback.sent = true;\n } catch (error) {\n item = callback.sent = false;\n }\n }\n result.push(item);\n }\n return result;\n })();\n };\n\n websocket.onerror = function(event) {\n console.log(`API (${API}) error`, event);\n for (let id in callbacks) {\n let callback = callbacks[id];\n callback.reject(\"websocket closed\");\n }\n return callbacks = {};\n };\n\n websocket.onclose = event => console.log(`API (${API}) close`, event);\n\n websocket.onmessage = function(event) {\n let msg = angular.fromJson(event.data);\n msg.body = Base64.decode(msg.body);\n if (angular.isDefined(callbacks[msg.id])) {\n let callback = callbacks[msg.id];\n delete callbacks[msg.id];\n if (msg.cmd === 'error') {\n $log.error(msg.body);\n callback.reject(msg);\n } else {\n msg.body = angular.fromJson(msg.body);\n callback.resolve(msg);\n }\n } else {\n $log.error('Unhandled message: %o', msg);\n }\n };\n\n let requestId = 0;\n\n let getRequestId = () => requestId++;\n\n let call = function(cmd, body) {\n let deferred = $q.defer();\n let request = {\n id: getRequestId(),\n cmd,\n body: Base64.encode(angular.toJson(body))\n };\n deferred.request = request;\n deferred.sent = false;\n callbacks[request.id] = deferred;\n try {\n websocket.send(angular.toJson(request));\n deferred.sent = true;\n } catch (e) {\n deferred.sent = false;\n }\n return deferred.promise;\n };\n\n this.transactions = function(bookName, itemType, code) {\n let input = {\n bookName: bookName,\n itemType: itemType,\n code: code,\n };\n return $q((resolve, reject) =>\n call(\"transactions\", input)\n .then(resp => resolve(resp.body), resp => reject(resp.body))\n );\n };\n\n this.summary = function(bookName) {\n let input = {\n bookName: bookName\n };\n return $q((resolve, reject) =>\n call(\"summary\", input)\n .then(resp => resolve(resp.body), resp => reject(resp.body))\n );\n };\n\n this.books = () =>\n $q((resolve, reject) =>\n call(\"books\")\n .then(resp => resolve(resp.body), resp => reject(resp.body))\n );\n\n this.user = () =>\n $q((resolve, reject) =>\n call(\"user\")\n .then(resp => resolve(resp.body), resp => reject(resp.body))\n );\n\n this.info = () =>\n $q((resolve, reject) =>\n call(\"info\")\n .then(resp => resolve(resp.body), resp => reject(resp.body))\n );\n\n return this;\n});\n"]}