angular.module('fbMocks')
.factory('commonService', ['$q', function (
$q: ng.IQService
): fb.IMockCommonService {
var ignoredKeys: string[] = ['root', '$promise', '$resolved', '$rootName', '$dirty', '$lastModification', 'isArray',
'$tempPK', '$$hashKey', 'exceptionFromAPI', 'ignoredKeys', 'invalidField', 'mergeConflicts', 'enqueueable'];
var mockBase = new fb.MockBase($q);
var mockBase: fb.MockBase = new fb.MockBase($q);
var resolve = function (type: fb.RequestType, identifier: string, returnValue: any): void {
mockBase.resolve(mockBase.requestIdentifier(type, identifier), returnValue);
};
var reject = function (type: fb.RequestType, identifier: string, returnValue: any): void {
mockBase.reject(mockBase.requestIdentifier(type, identifier), returnValue);
};
var getPendingRequests = function (): string[] {
return mockBase.getPendingRequests();
};
var setDPI = function (pixels: number) {
return DPI;
}
var getDPI = function (): number {
return DPI;
}
var DPI = 92;
var dimensions = {
inToPt: function (inches: number): number
{ return inches * 72; },
ptToIn: function (pt: number): number
{ return pt / 72; },
inToPx: function (inches: number): number
{ return inches * DPI; },
ptToPx: function (pt: number): number
{ return (pt / 72) * DPI },
pxToIn: function (pixels: number): number
{ return pixels / DPI; },
pxToPt: function (pixels: number): number
{ return (pixels / DPI) * 72 },
pxToMm: function (pixels: number): number
{ return dimensions.pxToIn(pixels) * 25.4; },
mmToPx: function (millimeters: number): number
{ return dimensions.inToPx(millimeters / 25.4) }
};
var absolutePositioning = {
offsetTop: function (element: ng.IAugmentedJQuery): number {
return 0;
},
offsetLeft: function (element: ng.IAugmentedJQuery): number {
return 0;
}
}
var angularFunctions = {
safeApply: function (scope: ng.IScope, fn: any) { fn(); }
}
var security = {
splitNonSecureTags: function (str: string, allowedTagsRegexStrings: string[]): { content: string; secure: boolean; }[] {
return [
{ "content": "", "secure": false },
{ "content": "", "secure": true },
{ "content": "", "secure": false },
{ "content": "", "secure": true },
{ "content": "", "secure": false },
{ "content": "", "secure": true }
];
}
}
var changeTrack = {
isChangeTrackObject: function (obj: any) {return true },
createChangeTrackObject: function (objectData: any, rootObject?: any, rootName?: string): any {
var returnObject;
var getRootObject = function () {
if (rootObject) {
return rootObject;
} else {
return returnObject;
}
};
var getRootName = function (): string {
if (rootName) {
return rootName;
} else {
return '';
}
};
var recurse = function (obj, data, propertyString: string) {
// vill ha kvar undefined-checken för säkerhets skull, men borde inte gå att nå
/* istanbul ignore if */
if (typeof data === 'undefined' || data === null) {
return;
} else if (data instanceof Array) {
// data är en array
for (var k: number = 0; k < data.length; k++) {
if (typeof data[k] === 'object') {
var tmpObject;
if (data[k] instanceof Array) {
tmpObject = [];
} else {
tmpObject = {};
}
recurse(tmpObject, data[k], propertyString + '[]');
obj[k] = tmpObject;
}
else {
obj[k] = new fb.ChangeTrack(data[k], getRootObject(), propertyString + '[]');
}
}
return returnObject;
}
// data är ett objekt
var keys = Object.keys(data);
for (var i: number = 0; i < keys.length; i++) {
if (keys[i] === 'root') {
continue;
}
if (typeof data[keys[i]] === 'object') {
// propertien var klassad som object
if (data[keys[i]] instanceof Array) {
// Propertien är en lista, kör rekursivt över alla objekt i listan
obj[keys[i]] = [];
recurse(obj[keys[i]], data[keys[i]], propertyString + '.' + keys[i]);
} else if (data[keys[i]] === null) {
// propertien var satt till null
obj[keys[i]] = new fb.ChangeTrack(data[keys[i]], getRootObject(), propertyString + '.' + keys[i]);
} else {
// propertien är ett icke null objekt
obj[keys[i]] = {};
recurse(obj[keys[i]], data[keys[i]], propertyString + '.' + keys[i]);
}
} else if (typeof data[keys[i]] === 'function') {
// Gör ingenting om propertyn är en funktion
} else if (typeof data[keys[i]] === 'undefined') {
obj[keys[i]] = undefined;
} else {
// propertien var inte ett objekt utan innehöll ett datavärde
obj[keys[i]] = new fb.ChangeTrack(data[keys[i]], getRootObject(), propertyString + '.' + keys[i]);
}
}
}; // END Recurse
if (typeof objectData === 'undefined') {
return objectData;
} else if (objectData === null) {
returnObject = new fb.ChangeTrack(objectData, getRootObject(), getRootName());
} else if (objectData instanceof Array) {
returnObject = [];
recurse(returnObject, objectData, getRootName());
} else {
returnObject = {};
recurse(returnObject, objectData, getRootName());
}
return returnObject;
},
fromChangeTrackObject: function (data: any, isArray: boolean) {
return {};
}
};
var screenDimensions: fb.ICommonServiceScreenDimensions = {
window: {
innerWidth: 1920,
innerHeight: 1080
},
topNav: {
width: 1920,
height: 50
},
leftNav: {
width: 150,
height: 1030
},
mainContent: {
actual: {
width: 1770,
height: 1030
},
noScroll: {
width: 1770,
height: 1030
}
}
};
var getScreenDimensions = function (): fb.ICommonServiceScreenDimensions {
return screenDimensions;
}
var getResizingCounter = function (): number {
return 1;
}
var deepFind = function deepFind(obj: any, path: string, putValue?: any) {
var paths = path.split('.');
var current = obj;
var i;
for (i = 0; i < paths.length; ++i && i < 10) {
if (typeof current[paths[i]] === 'undefined') {
return undefined;
} else {
current = current[paths[i]];
}
}
if (angular.isDefined(putValue)) {
current = putValue;
}
return current;
}
var naturalSort = function (a: string, b: string) {
for (var x = 0, aa, bb; (aa = a[x]) && (bb = b[x]); x++) {
if (aa !== bb) {
var c = Number(aa), d = Number(bb);
if (c && d) {
var cc = Number(a.substring(x).match(/\d+/));
var dd = Number(b.substring(x).match(/\d+/));
return cc - dd;
}
return aa > bb ? 1 : -1;
}
}
return a.length - b.length;
}
// Funktion för att hitta största gemensamma delaren för 2 tal
var gcdHelper = function (a: number, b: number) {
if (!angular.isNumber(a) || !angular.isNumber(b)
|| !isFinite(a) || !isFinite(b)) {
return null;
}
if (a === 0) {
return b;
}
if (b === 0) {
return a;
}
var r = a % b;
return gcdHelper(b, r);
};
var sumFrac = function (numbers: { taeljare: number; naemnare: number }[]): { taeljare: number; naemnare: number } {
if (!numbers || !numbers.length) { return null; }
var naemnare = numbers[0].naemnare;
var sumTaljare = numbers[0].taeljare;
for (var i = 1; i < numbers.length; i++) {
var gcd = gcdHelper(numbers[i].naemnare, naemnare);
sumTaljare = numbers[i].taeljare * naemnare / gcd + sumTaljare * numbers[i].naemnare / gcd;
naemnare = naemnare * numbers[i].naemnare / gcd;
}
return { taeljare: sumTaljare, naemnare: naemnare };
};
var strings = {
capitalizeFirstLetter: function (val: string): string {
return 'CapatilizeFirstLetter';
}
}
var date = {
validDate: function (date: string): boolean {
return false;
},
validTime: function (time: string): boolean {
return false;
},
compareDateStrings: function (dateA: string, dateB: string): number {
return 123
},
splitDate: function (date: string): { year: number; month: number; day: number; hour: number; minute: number; second: number } {
return {
year: 2014,
month: 3,
day: 20,
hour: 20,
minute: 30,
second: 25,
};
},
datePart: function (dateTimeString: string): string {
var tIndex = dateTimeString.indexOf('T');
return tIndex >= 0
? dateTimeString.substring(0, tIndex)
: dateTimeString;
},
timePart: function (dateTimeString: string): string {
var tIndex = dateTimeString.indexOf('T');
if (tIndex === -1 &&
(moment(dateTimeString, 'HH:mm:ss', true).isValid() ||
moment(dateTimeString, 'HH:mm:ss.00', true).isValid())) {
return dateTimeString;
}
return tIndex >= 0
? dateTimeString.substring(tIndex + 1)
: '';
},
clearTime: function (dateTimeString: string): string {
var tIndex = dateTimeString.indexOf('T');
if (tIndex !== 1) {
return dateTimeString.substring(0, tIndex + 1) + '00:00:00.00'; // WebAPI def. av ingen tidsangivelse
}
return dateTimeString;
},
setDatePart: function (dateTimeString: string, datePartString: string): string {
var hasDateAndTime = moment(dateTimeString, 'YYYY-MM-DDTHH:mm:ss', true).isValid();
var hasDateAndNoTime = moment(dateTimeString, 'YYYY-MM-DDTHH:mm:ss.00', true).isValid();
var hasTimeOnly = moment(dateTimeString, 'HH:mm:ss', true).isValid();
var hasNoTimeOnly = moment(dateTimeString, 'HH:mm:ss.00', true).isValid();
datePartString = date.datePart(datePartString);
if (hasDateAndTime || hasDateAndNoTime) {
return (datePartString !== '' ? (datePartString + 'T') : '') + date.timePart(dateTimeString);
}
else if (hasTimeOnly || hasNoTimeOnly) {
return (datePartString !== '' ? (datePartString + 'T') : '') + dateTimeString;
}
return datePartString + 'T00:00:00.00'; // Ingen giltig tid, skriv över allt med datum-delen, appenda med c# notime
},
setTimePart: function (dateTimeString: string, timePartString: string): string {
if (timePartString === '') {
timePartString = '00:00:00.00';
}
var hasDateAndTime = moment(dateTimeString, 'YYYY-MM-DDTHH:mm:ss', true).isValid();
var hasDateAndNoTime = moment(dateTimeString, 'YYYY-MM-DDTHH:mm:ss.00', true).isValid();
var hasDateOnly = moment(dateTimeString, 'YYYY-MM-DD', true).isValid();
if (hasDateAndTime || hasDateAndNoTime) {
return date.datePart(dateTimeString) + 'T' + timePartString;
}
else if (hasDateOnly) {
return dateTimeString + 'T' + timePartString;
}
return timePartString; // Inget giltigt datum, skriv över allt med tids-delen
}
};
var merge = function (a, b, c, d) { return a; };
var maeklarObjektTyper = {
aerSmaahus: function (ObjektTypId: number): boolean {
return true;
},
aerBostadsraett: function (ObjektTypId: number): boolean {
return true;
},
aerByggnadArrenderadMark: function (ObjektTypId: number): boolean {
return true;
},
aerHyresraett: function (ObjektTypId: number): boolean {
return true;
},
aerKomersiellt: function (ObjektTypId: number): boolean {
return true;
},
aerLokal: function (ObjektTypId: number): boolean {
return true;
},
aerProjekt: function (ObjektTypId: number): boolean {
return true;
},
aerBestaand: function (ObjektTypId: number): boolean {
return true;
},
aerGaard: function (ObjektTypId: number): boolean {
return true;
},
aerAegarlgh: function (ObjektTypId: number): boolean {
return true;
},
aerOevrigt: function (ObjektTypId: number): boolean {
return true;
},
aerUtland: function (ObjektTypId: number): boolean {
return true;
}
};
var debounce = function(func:any, wait:number, immediate?:boolean){
return function(){
func();
};
}
var throttle = function(func:any, wait:number, context?:any){
return function(){
func();
};
}
var getPageRange = function (totalNumberOfPages: number, currentPage: number, gap: number) {
var returnArray = [];
return returnArray;
}
var filterMedarbetareList = function (medarbetareArray: fb.List, rollArray: number[]) {
var returnArray = [];
return returnArray;
};
var getKontaktTypStr = function (jurPersonTyp: number, fysPersonTyp: number, aerAvliden: boolean) :string {
return '';
};
var getDeferred = function () {
var deferred = $q.defer();
return {
$promise: deferred.promise,
$resolved: false
};
};
var getPropValue = function (propString: string, option: Object): any {
var properties = propString.split('.');
var value = option;
for (var i = 0; i < properties.length; ++i) {
if (_.isUndefined(value)) {
return;
}
value = value[properties[i]];
}
return value;
}
var getKontorsValutaSuffix = function () {
return 'kr';
};
var getKontorsValutaLong = function (singular?: boolean) {
return 'kronor';
};
var valideraSidval = function (sidVal: string) {
return false;
};
var juridiskPerson = {
getJuridiskIcon : function (jurPersonTyp: number) {
return null;
},
getJuridiskInitials : function (jurPersonTyp: number, text: string) {
return '';
}
}
var kundKategori = {
getKundKategoriAltText: function (kundKategori: number): string {
return "";
}
}
var resourceEvents = {
onMergeCompleted: function (scope: ng.IScope, id: string, fun: () => void) {
return;
},
mergeCompleted: function (id: string) {
return;
}
};
return {
ignoredKeys: ignoredKeys,
resolve: resolve,
reject: reject,
util: {
deepFind: deepFind,
naturalSort: naturalSort
},
math: {
sumFrac: sumFrac
},
getPendingRequests: getPendingRequests,
setDPI: setDPI,
getDPI: getDPI,
dimensions: dimensions,
absolutePositioning: absolutePositioning,
angularFunctions: angularFunctions,
security: security,
changeTrack: changeTrack,
getScreenDimensions: getScreenDimensions,
getResizingCounter: getResizingCounter,
date: date,
merge: merge,
maeklarObjektTyper: maeklarObjektTyper,
debounce: debounce,
throttle: throttle,
filterMedarbetareList: filterMedarbetareList,
getKontaktTypStr: getKontaktTypStr,
getPageRange: getPageRange,
strings: strings,
getDeferred: getDeferred,
getPropValue: getPropValue,
getKontorsValutaSuffix: getKontorsValutaSuffix,
getKontorsValutaLong: getKontorsValutaLong,
valideraSidval: valideraSidval,
JuridiskPerson: juridiskPerson,
KundKategori: {
getKundKategoriAltText : kundKategori.getKundKategoriAltText
},
Events: {
Resources: resourceEvents
},
gcdHelper: gcdHelper,
}
}]);