module fb { export class ChangeTrack implements IChangeTrack { value: T; originalValue: T; //checkpointValue blir en klon av value i den tidpunkten en sparning skickas iväg checkpointValue: T; ignoreMerge: boolean;//Ignorera serverns värde dirty: boolean; valid: boolean; missValue: boolean; required: boolean; minLength: number; maxLength: number; regex: RegExp; range: { min: number; max: number; } invalidStr: string; requiredErrorMessage: string; minLengthErrorMessage: string; maxLengthErrorMessage: string; regexErrorMessage: string; rangeErrorMessage: string; customValidation: any; customValidationErrorMessage: string; root: ResourceBase; propertyReference: string; // string with the path to this property invalidStateFromExternal: { [key: string]: { isValid: boolean, invalidStr: string } } = {}; // Hanterar ändringar av value på changetrack. Sätter dirty och valid setValue(value) { if (this.root) { this.root.setValue(this, value); } else { this.value = value; /* tslint:disable */ this.dirty = this.originalValue != this.value; // jshint ignore:line /* tslint:enable */ this.valid = fb.changeTrackValid(this); var isNull = this.value === null; var isEmpty = this.value === ''; var isUndefined = this.value === undefined; this.missValue = isNull || isEmpty || isUndefined; } } /** * Denna bör användas sparsamt */ setInvalidStateFromExternal(key: string, isValid: boolean, invalidStr: string) { this.invalidStateFromExternal[key] = { isValid: isValid, invalidStr: invalidStr }; } constructor(val: T, rootObject?: any, propRef?: string) { var self = this; val = angular.isUndefined(val) ? null : val; //Vill kunna inita med undefined self.value = val; self.originalValue = JSON.parse(JSON.stringify(val)); self.dirty = false; self.ignoreMerge = false; var isNull = self.value === null; var isEmpty = (self).value === ''; var isUndefined = self.value === undefined; self.missValue = isNull || isEmpty || isUndefined; self.root = rootObject; self.propertyReference = propRef; self.valid = fb.changeTrackValid(self); } } export function changeTrackValid(track: fb.ChangeTrack) { //......---:---------------------::://+oossssssoooo+++///////////:::::::::::::::::::::::/::::::::::::+ //.........-:-------------------:/+osyyhhdddmmmmmmmdddhhyyysoossoo+////:::::::::::::::::/::::::::::::+ //..........-------------------:/++syysysyhhhdmmNNNNNNNNNNNmmmmmmmdddhhys+//::::::::::::/::::::::::::+ //............-:--------------::++sssossyhdmmNNNNNNNNNNNNNNNNNNNNNNNNNNmmmdhs+/:::::::::/::::::::::::+ //.............-:-------------:++ososhdmmmNNNNNmmdddhhhhddddddmmmmNNNNNNNNNNmdhy+/::::::/::::::::::::+ //...............------------:/+oyyhdmmmmNNmmdyysssoooossssssssyyyhhddmmNNNNNNmdhs+:::::/::::::::::::+ //``..............-:-.------://oyhhdddmmmmhyo++++++++oooooooooooooossssyhdmmNNNmddh+/:::/::::::::::::+ //````.............-:-..----:+syyyhyhmmdyo++////++++++++++++ooooooooooooossyhdmNNNmdhs+//::::::::::::+ //```````............---.---/syshyydmdy+/////////++++++++++++++oooooooooooooosydmNNNmmhhs+/::::::::::+ //``````````..........-----:+soyyhhmh+///////////+++++++++++++ooooo++++ooooooooshmmNmmmdddyo/::::::::+ //````````````.........-:--:ossyhdds/::::////////+++++++++++++oo+oo++++++++o+ooosydmmNNNmmmdy+:::::::+ //-.```````````..........--/ossyhd+::::::://////++++++++++++oooooooooo+++o++++oooyhdmNNNNmmmmho::::::+ //-:-````````````.........-/osyyh+:-:::::://///+++++++++++++ooooooooooooooo+++ooosyhdmNNNNmmmmdo:::::+ //`.::..```````````........-+yhy+----::::://////+++++++++++++ooooooooooooooo+++oosshdmmNNmmmmmmd+::::+ //```.::.```````````........:sds-----::::://///++++++++++++++++ooooooooooooo+++ooosyhdmNNNmmmmmmy+:::+ // ````.::.``````````......--oy-.----:::://////++++++++++++++++ooooooooooo+++++ooosyhdmmNNmmmNmmdy+::+ //`` ````-:-``````````.....-:y/..---:::://////////////++++++ooooosssssssooo++++++oosyhdmNNNmmmmmddy+:+ //`````````-:-`````````....-o+-..---::://///////////+++++ooosyyyhhhhhhhhyssooo++++ooshdmNNNmmmmmddhs/+ //```````````-:.````````...-+/...---:::////////////++ooosyyhdmmmmmmmddddhhyysoo+++++oyhdmNmmmmddddds/+ // ```````````.::.```````..-/:..---::::////////++++ossyhhddmmmmmmdddhhyyyyyyyso+++++ooydmmmmmdddddhs/+ // ```````````.::.`````...+---::///+++oo++++++ooosyyhhhddddhhhyyyyssssssooosso+++++oshmmmmmdddmdhs/+ //```....-..``````-::.```...+:/++syyhhhyyyssoo+oooosyyhhhhhhhhhyyyyyyyysssssoooo++++++oydmmmmddmmddy/+ //..........`.``````-:-.....++ssyhdddmddhhyyso++ooossyyyhhhhhhhhdhhhhhhhhyysssooo++++++ohmmmmmmmmmhs/+ //--------------`````.-/-.../oosyyyyyhhhhhyyso//+ooossyhddddddddddddddhhyyyyyyssoo+++++oymmmmmdmmmdy/+ //...------------..```..:/-.//:/+oosyhhhhhhhyo::/++oosyhddddddmdyshmmmddhdhhhhyssoo+++++sdmmmmddmmms/+ //`````````````````......-//:--/oosyddmmmmddhy::/++oossyyhhddddyyydmmmdhyyyyyyyyssoo++++oydmmdhhdddo/+ //```````````````````......-/-:++yhhdmNmmmmdy+::/++ooosssyyhhhhyyyyyyyysssssssssoooo+++++sdmmdyyyhy//+ //````````````````...........-:+yo+ohdddhhhy+:://+++oooossssyyyhhhhhhhyyyyyssooooooo+++++shmmhsooo+//o //`````..`````...........--.--:////+osyhhys/--:/++++++oooooooosssssyyysssooooo+++++++++++ohmmdhyo++//o //`.......................------:/+osssso+:--://++++++++oooooooooooooooooo+++++++++++++++ohmmdhhyo+//o //.......................------////+++//:----:/++++++++++++ooooooooooo+++++++++++++++++++ohmmdsyho+//o //------------:::---:::::::::--:://///::-----:/++++++++++oooooooooooooooooooo++++++++++++oydddyss++//o //++++++++++++++++++++++++++/.--::///::---..-:/+++++++++oooossssssssoooooooooooo+++++++++oyhhhs+++/++o //++++++++++++++++++++oooooo/..-::///////-.--/++++++++++o+oosyyyyyyysssoooooooooooo+oooooosyhyo++++++o //++++++++++++++++++++++oooo:.--:///++oo/..-:/+++++++++ooooosyyyyyyyyyyssssssoooooooooooosyhhyo++++++o //+++++++++++++++//++++++ooo:--::/+ossys:--:+++++++ooosyyyyyyyyyyyyyhhhhyyssssssoooooossssyhhyo++++++o //++++++++++++++-:/+++++++o+/-://+osyys++///+osooosyyhdddddhhhhhhhhhhddddhyysssssssssssssyyhhyo++++++o //++++++++++++++.//+++++++oo+/:/+osyyysooossyyyyyyhdmmmmmmmmmmddddddddddmmdhyyssssssssyyyyhhhyo++++++o //+++++++++++++/-:++++++++ooo+//+osyyysssyhhhhdddddddmmmmmmmmmmdddddddmmmmmdhyssssssyyyyyyhhhso++++++o //+++++++++++++/.:+oo++++ooooo+/++osyyysyyhhyhddddmdddddddddddhhhhhddddmmmmmdhyssyyyyyyhhhdhhs+++++++o //+++++++++++++:.:+ooo+++ooooooo+++syhyyssyyssyyhhdhdhhhhhhyyyyyhhdmmmNmmmmmmdyyyhhhhhhhdddhyoo+++++oo //+++++++++++++.-/+oooo++oooooooo++oyyyhhdmmho/+ossyyyyyyyssysosyyhmNNNmddmmmdyyhdddddddddddyooo++ooos //++++++++++++--:/+oooo++oooooo+oso+syyyshmNNh//+//+ooooosoosooyyydmmdhyhdmmmdhhdddddddddddhso++++++ss //+ooooo++++/-:://++oooooooooo:.:ssoosyys+ohmNh/::/+++ooooosyoyyyhdhysssydmmmdhhdddddddddddyo+++++++so /////++++++/-:://+oooooooooooo.`.+ysoshhy+:/ohm+-::+++o+ooooo+sssyssoosyhdmmmmdddddddmddddho+++++++ooo //````.....-:///++oooooosssoo+```:shyyhhhs/::/++://+++oooooooosssooooosyhdmmmmmddddddddmmdo+///////o/+ // ` `.://++oooooooshysoo:```-+yyyhddyo/:--::://++o++ooooooooooossyhhddmmmmmddddhdmmds+///////++/+ // ``` `.://++oooooooohhysoo.```-::+yhhhys+/:////+ooossssyyyyssssssyyhddddmmmmmdddddddhy+////////+::+ // ````.:///++oooooooddysso+```.::-./shyyss++osssyhhhhhhddhhhyyyyyyhddddddmmmmmmddmmdhyo///::::::/::o // ````.:://++ooooo++hdhysso/```-:://:/shhssooooosyhhdddddhhhyyyyyhhddddddmmmmmmmdmdhyso+/:::::::/--/o // `.:://++ooosoo++ddhysoo-```-:::://+ydhsssoooossyyhhhhhhyyyyyhhddmdhddmmmmmmmddhysoo+/::::::::-:oo ////-.-:///++ooooo++/mdyysoo```.:::::::/oyhyysssoooosyyyyyyyyhhhhddddddddmmmdddmdhyysoo++//:::::/--/+o //`..-:///+++++oso+/sdhysso/```.::-::::/++sdhhyysssssyyhhhhhhhhddmmmdddmmmmddddhyyssso++////::::/.://o //`.-::////++++oooo+hdho++o-```-::``..:////oyyyyyyyyyyhhhhhhdddmmmmmmmmmdhdmmdhyyyssoo++///////+:-///o //.--:::::::::////++++/:::/.``.::-.--:://///////++osyhhdddhddddmmmmmmmmdddmdhyyysssoo+++//////++/////o //.-----------::::::://////:::://///////////////////+oydddddddmmmmmmmmmmmdhyyysssooo+++++///+/+++/::/+ //.------------::::::::::::///////////////////////////+sddddmmmmmmmmmddhhyyyssssooo++++++++++++o+//:/o //..------------------::::::///////////////////////////+hddddmmddmdhyysssssssssoooo+++++++++++oo///:/o //...-----------------:::://////////////////////////////oooooosossssssssssssoooooo++++++++ooooo+/////o //..----------------:::::://////////////////////////////++oo++++ooossssssssooooooo+++++oooooso+/////+o //.--------------:-::::-:///++++++++++++++++++//////////+++++ooo+++ooooooooooooooo++ooooossyo+/////+/+ //-------::::::::::::--:/+++ooo++++++++++++++++++++++////+++++oo++++++oooooooooooooooooosys+/////////+ //----:::::::::::::-::/++oooo++++++++++osssooooo+++//////+++++++++///++ooooooooooooooosyyo////////::/+ //--:::::::::::::::://++++++++++++++///+++++///////////////+++++++////++ooooooooooooosso/////////////o //:::::::::::::::////+++++++++++////////////////////////////+++++/////++ooooooooooosso////::/:::::///o //:::::::::::::////////+++++++++/////////////////////////////++++////+++ooooooooosoo///::::::-----://+ //:::::::::::////////////////++////////////////////////+o++/+++++////+++oooooo+++////:::://:-----::::+ //::::://///////////////////+++++++++++++++++/+//////////++++++++++++++oo++////:////:::////::::::::::+ ///////////////////////////++++++++++++++++++++/+/////::::://///////////::::::::::::://////::::://///+ ///////////////////////////++++++++++++++++++++++++//:::::::::::::::::::::::::::::::::::/+/::::://///+ //////////////////////////+++oooo+++++++++++++++///////:::::::::::::::::::::::::-------://:----://///+ //+++++//////+++++++++++++ooooooooo+++++++++///////////:::::::::::::::::::------------::::------:::::+ //++++++++++++++++++++oooooooooooo+++++++++///+++++////:::::::::::::::::::::::::::::::::::-------::::+ //+++++++++++++++++++ooooooooooo+++++++++++++++++++/::::---:::::::--::::::::::///////////::::::::::::+ var validators = [ { fn: function(track) { return (!track.required || !!track.value || track.value === 0 || track.value === false); }, invalidStr: 'REQUIRED', errorMessage: track.requiredErrorMessage }, { fn: function(track) { return (!track.minLength || !track.value || ((track.value + '').length >= track.minLength)); }, invalidStr: 'MINLENGTH', errorMessage: track.minLengthErrorMessage }, { fn: function(track) { return (!track.maxLength || !track.value || ((track.value + '').length <= track.maxLength)); }, invalidStr: 'MAXLENGTH', errorMessage: track.maxLengthErrorMessage }, { fn: function(track) { return (!track.regex || (!track.value && track.value !== 0) || track.regex.test(track.value)); }, invalidStr: 'REGEX', errorMessage: track.regexErrorMessage }, { fn: function(track) { return (!track.range || (!track.value && track.value !== 0) || track.value >= track.range.min); }, invalidStr: 'RANGE.MIN', errorMessage: track.rangeErrorMessage }, { fn: function(track) { return (!track.range || (!track.value && track.value !== 0) || track.value <= track.range.max); }, invalidStr: 'RANGE.MAX', errorMessage: track.rangeErrorMessage }, { fn: function(track) { return (!track.customValidation || track.customValidation(track)); }, invalidStr: null, errorMessage: track.customValidationErrorMessage, }, ]; var valid = true; track.invalidStr = undefined; for (var i = 0; i < validators.length; i++) { valid = validators[i].fn(track); if (!valid) { track.invalidStr = validators[i].errorMessage ? validators[i].errorMessage : 'INVALID_REASON.' + validators[i].invalidStr; break; } } if (valid) { for (let key in track.invalidStateFromExternal) { valid = track.invalidStateFromExternal[key].isValid; if (!valid) { track.invalidStr = track.invalidStateFromExternal[key].invalidStr; break; } } } if (track.root && track.propertyReference && track.root.invalidField) { var invalidFieldIndex = track.root.invalidField.indexOf(track.propertyReference); if (valid) { if (invalidFieldIndex !== -1) { track.root.invalidField.splice(invalidFieldIndex, 1); } } else { if (invalidFieldIndex === -1) { track.root.invalidField.push(track.propertyReference); } } } return valid; } }