{"version":3,"sources":["../../src/utils/module.js","../../src/utils/GhostClickBuster.js","../../src/utils/directives/apGoogleMaps.js","../../src/utils/filters/apPhoneNumberFilter.js","../../src/utils/services/PatientDashboardHelper.js"],"names":["angular","module","window","document","exportName","coordinates","resetCoordinates","popCoordinates","splice","registerCoordinates","ev","touches","length","changedTouches","touch","push","clientX","clientY","setTimeout","el","addEventListener","i","x","y","Math","abs","stopPropagation","preventDefault","directive","$window","_","$sce","apiKey","combine","array","compact","map","encodeURIComponent","value","join","makeIFrame","scope","element","name","address","city","state","zip","url","iframe","result","width","height","frameBorder","style","iFrameSettings","type","originName","originAddress","originCity","originState","originZip","isString","Address1","City","State","Zip","trustAsResourceUrl","makeDirectionURL","originname","originaddress","origincity","originstate","originzip","innerHTML","restrict","frameborder","link","watchGroup","$watchGroup","$on","filter","number","trim","substring","factory","getLayout","layout","displayColumns","rows","currentRow","totalColumns","columns","columnCreation","widget","columnSpan","ColumnSpan","widgets","maxColumnSpan","max","Infinity","Error","activeRow","span","forEach","willFit"],"mappings":"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","file":"aprima-utils.min.js","sourcesContent":["angular.module('aprima-utils', ['lodash']);\r\n","//https://gist.githubusercontent.com/jtangelder/361052976f044200ea17/raw/f54c2cef78d59da3f38286fad683471e1c976072/PreventGhostClick.js\r\n\r\n/**\r\n * Prevent click events after a touchend.\r\n *\r\n * Inspired/copy-paste from this article of Google by Ryan Fioravanti\r\n * https://developers.google.com/mobile/articles/fast_buttons#ghost\r\n *\r\n * USAGE:\r\n * Prevent the click event for an certain element\r\n * ````\r\n * PreventGhostClick(myElement);\r\n * ````\r\n *\r\n * Prevent clicks on the whole document (not recommended!!) *\r\n * ````\r\n * PreventGhostClick(document);\r\n * ````\r\n *\r\n */\r\n(function(window, document, exportName) {\r\n 'use strict';\r\n var coordinates = [];\r\n var threshold = 25;\r\n var timeout = 2500;\r\n\r\n // no touch support\r\n if(!('ontouchstart' in window)) {\r\n window[exportName] = function(){};\r\n return;\r\n }\r\n\r\n /**\r\n * prevent clicks if they're in a registered XY region\r\n * @param {MouseEvent} ev\r\n */\r\n function preventGhostClick(ev) {\r\n for (var i = 0; i < coordinates.length; i++) {\r\n var x = coordinates[i][0];\r\n var y = coordinates[i][1];\r\n\r\n // within the range, so prevent the click\r\n if (Math.abs(ev.clientX - x) < threshold && Math.abs(ev.clientY - y) < threshold) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * reset the coordinates array\r\n */\r\n function resetCoordinates() {\r\n coordinates = [];\r\n }\r\n\r\n /**\r\n * remove the first coordinates set from the array\r\n */\r\n function popCoordinates() {\r\n coordinates.splice(0, 1);\r\n }\r\n\r\n /**\r\n * if it is an final touchend, we want to register it's place\r\n * @param {TouchEvent} ev\r\n */\r\n function registerCoordinates(ev) {\r\n // touchend is triggered on every releasing finger\r\n // changed touches always contain the removed touches on a touchend\r\n // the touches object might contain these also at some browsers (firefox os)\r\n // so touches - changedTouches will be 0 or lower, like -1, on the final touchend\r\n if(ev.touches.length - ev.changedTouches.length <= 0) {\r\n var touch = ev.changedTouches[0];\r\n coordinates.push([touch.clientX, touch.clientY]);\r\n\r\n setTimeout(popCoordinates, timeout);\r\n }\r\n }\r\n\r\n /**\r\n * prevent click events for the given element\r\n * @param {EventTarget} el\r\n */\r\n window[exportName] = function(el) {\r\n el.addEventListener('touchstart', resetCoordinates, true);\r\n el.addEventListener('touchend', registerCoordinates, true);\r\n };\r\n\r\n document.addEventListener('click', preventGhostClick, true);\r\n})(window, document, 'PreventGhostClick');","angular.module('aprima-utils').directive('apGoogleMaps',\r\n ['$window', '_', '$sce',\r\n function ($window, _, $sce) {\r\n 'use strict';\r\n\r\n// Google's documentation for embedding Google Maps (May 28, 2015):\r\n// https://developers.google.com/maps/documentation/embed/guide\r\n\r\n //Api Key given by Google (browser only)\r\n //var apiKey = 'AIzaSyDtvKhyJ1Qtc1PWYX1lOQcJi2Q8earxj6M'; //Karl's Key\r\n var apiKey = 'AIzaSyDc0BvZWljbSm5cdoKh6D6ZypnJ9ARYkbA'; //Aprima's key (browser)\r\n\r\n //var types=['place', 'directions', 'search', 'view', 'streetview'];\r\n\r\n function combine(array) {\r\n return _(array).compact().map(encodeURIComponent).value().join('+');\r\n }\r\n\r\n function iFrameSettings(scope) {\r\n var result = '<iframe width=\"';\r\n result += (scope.width ? scope.width : '100%') + '\" height=\"';\r\n result += (scope.height ? scope.height : '280') +'\" frameborder=\"';\r\n result += (scope.frameBorder ? scope.frameBorder : '0') + '\" style=\"';\r\n result += (scope.style ? scope.style : 'border:0') + '\" src=\"';\r\n return result;\r\n }\r\n\r\n function makeIFrame(scope, element) {\r\n var iframe= ''+iFrameSettings(scope);\r\n if(!scope.type || scope.type==='place') {\r\n iframe += makePlaceURL(scope.name, scope.address, scope.city, scope.state, scope.zip);\r\n }\r\n else if(scope.type==='directions'){\r\n iframe += makeDirectionURL(\r\n scope.originname, scope.originaddress, scope.origincity, scope.originstate, scope.originzip,\r\n scope.name, scope.address, scope.city, scope.state, scope.zip);\r\n }\r\n iframe+='\"></iframe>';\r\n element[0].innerHTML=iframe;\r\n }\r\n\r\n function link(scope, element) {\r\n makeIFrame(scope,element);\r\n\r\n var watchGroup = scope.$watchGroup(\r\n ['name', 'address', 'city', 'state', 'zip',\r\n 'width', 'height', 'frameborder', 'style', 'type',\r\n 'originname', 'originaddress', 'origincity', 'originstate', 'originzip'], function() {\r\n makeIFrame(scope, element);\r\n });\r\n\r\n scope.$on('destroy', function () {\r\n watchGroup();\r\n });\r\n }\r\n\r\n function makePlaceURL(name,address,city,state,zip) {\r\n var url = 'https://www.google.com/maps/embed/v1/place?key='+apiKey+'&q=';\r\n url += _.isString(address) ?\r\n combine([name,address,city,state,zip]) :\r\n combine([name,address.Address1,address.City,address.State,address.Zip]);\r\n url=$sce.trustAsResourceUrl(url);\r\n return url;\r\n }\r\n\r\n function makeDirectionURL(originName,originAddress,originCity,originState,originZip, name,address,city,state,zip) {\r\n var url = 'https://www.google.com/maps/embed/v1/place?key='+apiKey+'&origin=';\r\n url += _.isString(originAddress) ?\r\n combine([originName,originAddress,originCity,originState,originZip]) :\r\n combine([originName,originAddress.Address1,originAddress.City,originAddress.State,originAddress.Zip]);\r\n url += '&destination=';\r\n url += _.isString(address) ?\r\n combine([name,address,city,state,zip]) :\r\n combine([name,address.Address1,address.City,address.State,address.Zip]);\r\n url=$sce.trustAsResourceUrl(url);\r\n return url;\r\n }\r\n\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n width: '=width',\r\n height: '=height',\r\n frameborder: '=frameborder',\r\n style: '=style',\r\n type: '=type',\r\n name: '=name',\r\n address: '=address',\r\n city: '=city',\r\n state: '=state',\r\n zip: '=zip',\r\n originname: '=originname',\r\n originaddress: '=originaddress',\r\n origincity: '=origincity',\r\n originstate: '=originstate',\r\n originzip: '=originzip'\r\n },\r\n link: link\r\n };\r\n }]);","angular.module('aprima-utils').filter('apPhoneNumberFilter',\r\n ['_',\r\n function (_) {\r\n 'use strict';\r\n\r\n return function (number){\r\n number = _.trim(number, '()- ');\r\n number=number.substring(0,number.length-10)+\r\n '('+number.substring(number.length-10,number.length-7)+\r\n ')'+number.substring(number.length-7,number.length-4)+\r\n '-'+number.substring(number.length-4,number.length);\r\n return number;\r\n };\r\n}]);\r\n","angular.module('aprima-utils').factory('PatientDashboardHelper',\r\n ['_',\r\n function (_) {\r\n 'use strict';\r\n\r\n var getLayout = function(layout, displayColumns){\r\n var rows = [];\r\n var currentRow = {\r\n totalColumns : 0,\r\n columns: []\r\n };\r\n\r\n var columnCreation = function(widget){\r\n currentRow.columns.push({\r\n columnSpan: widget.ColumnSpan,\r\n widgets: [widget]\r\n });\r\n\r\n currentRow.totalColumns += widget.ColumnSpan;\r\n };\r\n\r\n var maxColumnSpan = _(layout).map('ColumnSpan').max();\r\n if(maxColumnSpan !== Infinity && maxColumnSpan > displayColumns) {\r\n throw new Error('Trying to calculate a layout with a greater number of columns (' + maxColumnSpan + ') than the requested number of columns (' + displayColumns + ').');\r\n }\r\n\r\n for(var i = 0; i < layout.length;){\r\n var activeRow = [], span = 0;\r\n\r\n while(span < displayColumns){\r\n if(i < layout.length && span + layout[i].ColumnSpan <= displayColumns){\r\n activeRow.push(layout[i]);\r\n span += layout[i].ColumnSpan;\r\n i++;\r\n }\r\n else{\r\n break;\r\n }\r\n }\r\n\r\n if(currentRow.totalColumns === 0){\r\n _.forEach(activeRow, columnCreation);\r\n }\r\n else{\r\n var willFit = true;\r\n\r\n if(activeRow.length === currentRow.columns.length || (i === layout.length && activeRow.length < currentRow.columns.length)){\r\n for(var x = 0; x < activeRow.length; x++){\r\n if(activeRow[x].ColumnSpan !== currentRow.columns[x].columnSpan){\r\n willFit = false;\r\n }\r\n }\r\n }\r\n else{\r\n willFit = false;\r\n }\r\n\r\n if(willFit){\r\n for(var y = 0; y < activeRow.length; y++){\r\n currentRow.columns[y].widgets.push(activeRow[y]);\r\n }\r\n }\r\n else{\r\n rows.push(currentRow);\r\n\r\n currentRow = {\r\n totalColumns : 0,\r\n columns: []\r\n };\r\n\r\n _.forEach(activeRow, columnCreation);\r\n }\r\n }\r\n }\r\n\r\n rows.push(currentRow);\r\n return rows;\r\n };\r\n\r\n return {\r\n getLayout: getLayout\r\n };\r\n }]);\r\n"]}