{"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"]}