From: Bill Erickson Date: Wed, 31 Dec 2014 20:28:48 +0000 (-0500) Subject: LP#1402797 browser client interval parser X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=b577d392a5e2974e59197aaf74396d3a73085823;p=working%2FEvergreen.git LP#1402797 browser client interval parser Adds a new service on the core module for adding date handling utilities. Included in this commit is a new function: egDate.intervalToSeconds(interval); Includes Gruntfile additions and unit tests. Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/templates/staff/base_js.tt2 b/Open-ILS/src/templates/staff/base_js.tt2 index 76bc5a32a8..9cf9d6952c 100644 --- a/Open-ILS/src/templates/staff/base_js.tt2 +++ b/Open-ILS/src/templates/staff/base_js.tt2 @@ -30,6 +30,7 @@ + [% ELSE %] diff --git a/Open-ILS/web/js/ui/default/staff/Gruntfile.js b/Open-ILS/web/js/ui/default/staff/Gruntfile.js index eb004dcc8e..a3ba032631 100644 --- a/Open-ILS/web/js/ui/default/staff/Gruntfile.js +++ b/Open-ILS/web/js/ui/default/staff/Gruntfile.js @@ -102,6 +102,7 @@ module.exports = function(grunt) { 'services/navbar.js', 'services/statusbar.js', 'services/ui.js', + 'services/date.js', ], dest: 'build/js/<%= pkg.name %>.<%= pkg.version %>.min.js' } diff --git a/Open-ILS/web/js/ui/default/staff/services/coresvc.js b/Open-ILS/web/js/ui/default/staff/services/coresvc.js index 690997849c..de502cd325 100644 --- a/Open-ILS/web/js/ui/default/staff/services/coresvc.js +++ b/Open-ILS/web/js/ui/default/staff/services/coresvc.js @@ -9,9 +9,9 @@ angular.module('egCoreMod') .factory('egCore', ['egIDL','egNet','egEnv','egOrg','egPCRUD','egEvent','egAuth', - 'egPerm','egHatch','egPrint','egStartup','egStrings', + 'egPerm','egHatch','egPrint','egStartup','egStrings','egDate', function(egIDL , egNet , egEnv , egOrg , egPCRUD , egEvent , egAuth , - egPerm , egHatch , egPrint , egStartup , egStrings) { + egPerm , egHatch , egPrint , egStartup , egStrings , egDate) { return { idl : egIDL, @@ -25,7 +25,8 @@ function(egIDL , egNet , egEnv , egOrg , egPCRUD , egEvent , egAuth , hatch : egHatch, print : egPrint, startup : egStartup, - strings : egStrings + strings : egStrings, + date : egDate }; }]); diff --git a/Open-ILS/web/js/ui/default/staff/services/date.js b/Open-ILS/web/js/ui/default/staff/services/date.js new file mode 100644 index 0000000000..629b799785 --- /dev/null +++ b/Open-ILS/web/js/ui/default/staff/services/date.js @@ -0,0 +1,61 @@ +/** + * Core Service - egDate + * + * Date utility functions. + * + */ +angular.module('egCoreMod') + +.factory('egDate', function() { + + var service = {}; + + /** + * Converts an interval string to seconds. + * + * egDate.intervalToSeconds('1 min 2 seconds')) => 62 + * egDate.intervalToSeconds('2 days')) => 172800 + * egDate.intervalToSeconds('02:00:23')) => 7223 + */ + service.intervalToSeconds = function(interval) { + var d = new Date(); + var start = d.getTime(); + var parts = interval.split(' '); + + for(var i = 0; i < parts.length; i += 2) { + + if (!parts[i+1]) { + // interval is a bare hour:min:sec string + var times = parts[i].split(':'); + d.setHours(d.getHours() + Number(times[0])); + d.setMinutes(d.getMinutes() + Number(times[1])); + d.setSeconds(d.getSeconds() + Number(times[2])); + continue; + } + + var count = Number(parts[i]); + var type = parts[i+1].replace(/s?,?$/,''); + + if (type.match(/^s/)) { + d.setSeconds(d.getSeconds() + count); + } else if (type.match(/^min/)) { + d.setMinutes(d.getMinutes() + count); + } else if (type.match(/^h/)) { + d.setHours(d.getHours() + count); + } else if (type.match(/^d/)) { + d.setDate(d.getDate() + count); + } else if (type.match(/^mon/)) { + d.setMonth(d.getMonth() + count); + } else if (type.match(/^y/)) { + d.setFullYear(d.getFullYear() + count); + } + } + + return Number((d.getTime() - start) / 1000); + } + + return service; +}) + + + diff --git a/Open-ILS/web/js/ui/default/staff/test/karma.conf.js b/Open-ILS/web/js/ui/default/staff/test/karma.conf.js index a27ca66292..5b9a272923 100644 --- a/Open-ILS/web/js/ui/default/staff/test/karma.conf.js +++ b/Open-ILS/web/js/ui/default/staff/test/karma.conf.js @@ -40,6 +40,7 @@ module.exports = function(config){ 'services/statusbar.js', 'services/grid.js', 'services/navbar.js', + 'services/date.js', // load app scripts 'app.js', 'circ/**/*.js', diff --git a/Open-ILS/web/js/ui/default/staff/test/unit/egDate.js b/Open-ILS/web/js/ui/default/staff/test/unit/egDate.js new file mode 100644 index 0000000000..f55fe9f2dd --- /dev/null +++ b/Open-ILS/web/js/ui/default/staff/test/unit/egDate.js @@ -0,0 +1,18 @@ +'use strict'; + +describe('egDate', function(){ + beforeEach(module('egCoreMod')); + + it('should parse a simple interval', inject(function(egDate) { + expect(egDate.intervalToSeconds('2 days')).toBe(172800); + })); + + it('should parse a combined interval', inject(function(egDate) { + expect(egDate.intervalToSeconds('1 min 2 seconds')).toBe(62); + })); + + it('should parse a time interval', inject(function(egDate) { + expect(egDate.intervalToSeconds('02:00:23')).toBe(7223); + })); + +});