{"version":3,"file":"commonTemplate.97cb86d6c5b6d7cdffc5.js","mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGhDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AMnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AMVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxBA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpyCA;AACA;;;;;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack://advantshop/./Templates/Modern_Promo/scripts/_common/additional-text/additionalText.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/autocompleter/autocompleter.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/carousel/carousel.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdown.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdown.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdownList.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdownSelected.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdownService.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/listenerDocumentClick.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/vanillaDropdown.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/modal/modal.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/spinbox/spinbox.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/stickyElement/directives/stickyElementDirective.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/stickyElement/services/stickyEventsService.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/stickyElement/stickyElement.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/tabs/tabs.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/zoomer/zoomer.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/cart/cart.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/cart/directives/сartMiniFooter.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/catalog-filter/catalogFilter.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/colors-viewer/colorsViewer.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/order/order.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/payment/payment.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/product-view/productView.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/reviews/reviews.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/shipping/shipping.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/subscribe/subscribe.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/managers/managers.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/preorder/preorder.module.js","webpack://advantshop/./Templates/Modern_Promo/scripts/registration/registration.module.js","webpack://advantshop/./scripts/_partials/reviews/controllers/reviewItemRatingController.js","webpack://advantshop/./scripts/_partials/reviews/controllers/reviewsController.js","webpack://advantshop/./scripts/_partials/reviews/controllers/reviewsFormController.js","webpack://advantshop/./scripts/_partials/reviews/directives/reviewsDirectives.js","webpack://advantshop/./scripts/_partials/reviews/reviews.module.js","webpack://advantshop/./scripts/appDependency.js","webpack://advantshop/./Templates/Modern_Promo/fonts/fonts.css?ab45","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/additional-text/additionalText.scss?ca7b","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/autocompleter/styles/autocompleter.scss?d622","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/carousel/styles/carousel.scss?1d69","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/dropdown/dropdown.scss?e893","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/modal/styles/modal-theme.scss?ef8f","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/spinbox/styles/spinbox.scss?4f9e","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/stickyElement/styles/stickyElementDirective.scss?964a","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/tabs/styles/tabs.scss?d644","webpack://advantshop/./Templates/Modern_Promo/scripts/_common/zoomer/styles/zoomer.scss?6ba2","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/cart/styles/cart.scss?3b45","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/catalog-filter/styles/catalogFilter.scss?d80e","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/colors-viewer/styles/colors-viewer.scss?5fa5","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/order/styles/orderHistory.scss?96c3","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/payment/styles/payment.scss?37df","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/product-view/styles/product-view.scss?f8e9","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/reviews/styles/reviews.scss?a0ad","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/shipping/styles/shipping.scss?a648","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/subscribe/styles/subscribe.scss?1809","webpack://advantshop/./Templates/Modern_Promo/scripts/_partials/zone/zones.scss?2cb2","webpack://advantshop/./Templates/Modern_Promo/scripts/managers/styles/managers.scss?53c1","webpack://advantshop/./Templates/Modern_Promo/scripts/preorder/styles/preorder.scss?f976","webpack://advantshop/./Templates/Modern_Promo/scripts/registration/styles/registration.scss?51cb","webpack://advantshop/./Templates/Modern_Promo/styles/common/animations.scss?91b5","webpack://advantshop/./Templates/Modern_Promo/styles/common/buttons.scss?aad9","webpack://advantshop/./Templates/Modern_Promo/styles/common/custom-input.scss?0e4f","webpack://advantshop/./Templates/Modern_Promo/styles/common/forms.scss?49d9","webpack://advantshop/./Templates/Modern_Promo/styles/common/inputs.scss?f69a","webpack://advantshop/./Templates/Modern_Promo/styles/common/personal-menu.scss?1485","webpack://advantshop/./Templates/Modern_Promo/styles/common/sidebar.scss?f957","webpack://advantshop/./Templates/Modern_Promo/styles/common/validation.scss?a380","webpack://advantshop/./Templates/Modern_Promo/styles/general.scss?9ad9","webpack://advantshop/./Templates/Modern_Promo/styles/partials/advantages.scss?c2d0","webpack://advantshop/./Templates/Modern_Promo/styles/partials/bonus-card.scss?6ca7","webpack://advantshop/./Templates/Modern_Promo/styles/partials/breads.scss?ad31","webpack://advantshop/./Templates/Modern_Promo/styles/partials/fixed-header.scss?fd98","webpack://advantshop/./Templates/Modern_Promo/styles/partials/footer.scss?115b","webpack://advantshop/./Templates/Modern_Promo/styles/partials/header.scss?06b9","webpack://advantshop/./Templates/Modern_Promo/styles/partials/login.scss?54e0","webpack://advantshop/./Templates/Modern_Promo/styles/partials/menu-dropdown.scss?e982","webpack://advantshop/./Templates/Modern_Promo/styles/partials/menu-general.scss?f605","webpack://advantshop/./Templates/Modern_Promo/styles/partials/pagenumberer.scss?a242","webpack://advantshop/./Templates/Modern_Promo/styles/partials/popular-categories.scss?fb73","webpack://advantshop/./Templates/Modern_Promo/styles/partials/price.scss?d2f5","webpack://advantshop/./Templates/Modern_Promo/styles/partials/recently-viewed-block.scss?d209","webpack://advantshop/./Templates/Modern_Promo/styles/partials/socials.scss?082d","webpack://advantshop/./Templates/Modern_Promo/styles/partials/toolbar-top.scss?6856","webpack://advantshop/./Templates/Modern_Promo/styles/views/brands.scss?1cdd","webpack://advantshop/./Templates/Modern_Promo/styles/views/checkout.scss?408c","webpack://advantshop/./Templates/Modern_Promo/styles/views/compareproducts.scss?1eb7","webpack://advantshop/./Templates/Modern_Promo/styles/views/feedback.scss?c60c","webpack://advantshop/./Templates/Modern_Promo/styles/views/home.scss?0cbc","webpack://advantshop/./Templates/Modern_Promo/styles/views/myAccount.scss?d4ab","webpack://advantshop/./Templates/Modern_Promo/styles/views/news.scss?4082","webpack://advantshop/./Templates/Modern_Promo/styles/views/product.scss?5605","webpack://advantshop/./Templates/Modern_Promo/styles/views/wishlist.scss?5ca8","webpack://advantshop/./scripts/_partials/reviews/styles/reviews.scss?728d","webpack://advantshop/./node_modules/ng-file-upload/dist/ng-file-upload-all.js","webpack://advantshop/./node_modules/ng-file-upload/index.js","webpack://advantshop/webpack/bootstrap","webpack://advantshop/webpack/runtime/compat get default export","webpack://advantshop/webpack/runtime/define property getters","webpack://advantshop/webpack/runtime/hasOwnProperty shorthand","webpack://advantshop/webpack/runtime/make namespace object","webpack://advantshop/./Templates/Modern_Promo/bundle_config/common.js"],"sourcesContent":["import './additionalText.scss';\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n \"use strict\";\n\n let additionalHref = document.querySelector(\".js-additional-text__href\"),\n additionalText = document.querySelector(\".js-additional-text__main\");\n\n if (!additionalHref) {\n return;\n }\n\n additionalHref.addEventListener(\"click\", e => {\n e.preventDefault();\n\n if (additionalText.classList.contains(\"show\")) {\n additionalText.classList.remove(\"show\");\n additionalHref.textContent = \"\\u0427\\u0438\\u0442\\u0430\\u0442\\u044C \\u0434\\u0430\\u043B\\u0435\\u0435\";\n } else {\n additionalText.classList.add(\"show\");\n additionalHref.textContent = \"\\u0421\\u043A\\u0440\\u044B\\u0442\\u044C\";\n }\n });\n});\nexport default \"additionalText\";","import './styles/autocompleter.scss';","import './styles/carousel.scss';","export default class Dropdown {\n constructor(element) {\n this._element = element;\n this.triggerElement = this._element.querySelector(\"[data-vanilla-dropdown-trigger]\") || this._element.querySelector(\"[vanilla-dropdown-trigger]\");\n\n this._bind();\n\n this.isOpen = false;\n }\n\n open(e) {\n e.stopPropagation();\n this.isOpen = true;\n this.preOpen();\n\n this._element.classList.add(\"is-open\");\n\n this.onOpen();\n }\n\n close(e) {\n this.isOpen = false;\n\n this._element.classList.remove(\"is-open\");\n\n this.onClose();\n }\n\n toggle(e) {\n this.isOpen ? this.close(e) : this.open(e);\n }\n\n preOpen() {}\n\n onOpen() {} //callback\n\n\n onClose() {} //callback\n\n\n _bind() {\n if (this.triggerElement != null) {\n this.triggerElement.addEventListener(\"click\", e => this.toggle(e));\n }\n }\n\n}","import VanillaDropdown from './vanillaDropdown.js'; //window.addEventListener(`load`, () => {\n// const dropdowns = document.querySelectorAll(`vanilla-dropdown`);\n// for (dropdown of dropdowns) {\n// const dropdown = new VanillaDropdown(dropdown);\n// }\n//});","export default class DropdownList {\n constructor(element, dropdownSelected, dropdown) {\n this._element = element;\n this.dropdownSelected = dropdownSelected;\n this.boundEventHandler = this.select.bind(this);\n\n this._bind();\n }\n\n select(e) {\n e.stopPropagation();\n let value = e.target.closest(\"vanilla-dropdown-value\") || e.target.querySelector(\"vanilla-dropdown-value\") || e.target;\n this.onChange(e, value.innerHTML.trim());\n }\n\n onChange() {}\n\n get element() {\n return this._element;\n }\n\n _bind() {\n if (this._element != null) {\n this._element.addEventListener(\"click\", this.boundEventHandler);\n }\n }\n\n _unbind() {\n if (this._element) {\n this._element.removeEventListener(\"click\", this.boundEventHandler);\n }\n }\n\n}","export default class DropdownSelected {\n constructor(element) {\n this._element = element;\n }\n\n update(e, value) {\n this._element.innerHTML = \"\";\n this._element.innerHTML = value;\n }\n\n onUpdate() {}\n\n}","let instance = null;\nexport default class DropdownService {\n constructor() {\n if (!instance) {\n instance = this;\n this.dropdownList = new Set();\n }\n\n return instance;\n }\n\n getActiveDropdown() {\n return this.activeDropdown;\n }\n\n setActiveDropdown(activeDropdown) {\n this.activeDropdown = activeDropdown;\n }\n\n addDropdown(dropdown) {\n this.dropdownList.add(dropdown);\n }\n\n getDropdownList() {\n return this.dropdownList;\n }\n\n closeAllDropdowns() {\n for (let dropdown of this.dropdownList) {\n dropdown.close();\n }\n }\n\n}","let instance = null;\nexport default class ListenerDocumentClick {\n constructor() {\n if (!instance) {\n instance = this;\n }\n\n return instance;\n }\n\n emmit(e) {\n //e.preventDefault();\n this._unbind();\n\n if (this.onEmmit != null) {\n this.onEmmit();\n }\n }\n\n onEmmit() {}\n\n _bind() {\n document.addEventListener(\"click\", this);\n }\n\n _unbind() {\n document.removeEventListener(\"click\", this);\n }\n\n handleEvent(e) {\n this.emmit(e);\n }\n\n}","import './dropdown.scss';\nimport Dropdown from './dropdown.js';\nimport ListenerDocumentClick from './listenerDocumentClick.js';\nimport DropdownList from './dropdownList.js';\nimport DropdownSelected from './dropdownSelected.js';\nimport dropdownService from './dropdownService.js';\nexport default class VanillaDropdown {\n constructor(element, options) {\n this.element = element;\n this.options = options;\n this.listenerDocumentClick = new ListenerDocumentClick();\n this.dropdown = new Dropdown(this.element);\n this.dropdownService = new dropdownService();\n this.dropdownService.addDropdown(this.dropdown);\n this.init();\n return this;\n }\n\n init() {\n this.dropdown.preOpen = () => {\n const activeDropdown = this.dropdownService.getActiveDropdown();\n\n if (activeDropdown != null && activeDropdown != this.dropdown) {\n activeDropdown.close();\n }\n\n this.dropdownService.setActiveDropdown(this.dropdown);\n };\n\n this.dropdown.onOpen = () => {\n this.listenerDocumentClick._bind();\n\n this.listenerDocumentClick.onEmmit = () => {\n this.dropdown.close();\n };\n };\n\n const dropdownListElement = this.element.querySelector(\"vanilla-dropdown-list\");\n const dropdownSelectedElement = this.element.querySelector(\"vanilla-dropdown-selected\");\n const dropdownSelectedInstance = new DropdownSelected(dropdownSelectedElement);\n const dropdownListInstance = new DropdownList(dropdownListElement);\n\n dropdownListInstance.onChange = (e, value) => {\n dropdownSelectedInstance.update(e, value);\n this.listenerDocumentClick.emmit(e);\n };\n }\n\n}","import './styles/modal-theme.scss';","import './styles/spinbox.scss';","StickyElement.$inject = [\"stickyEventsService\"];\n\n/* @ngInject */\nexport default function StickyElement(stickyEventsService) {\n return {\n restrict: 'A',\n scope: true,\n link: function (scope, element, attrs, ctrl) {\n element[0].classList.add(\"sticky-element\");\n element[0].style[attrs.position || \"top\"] = \"\".concat(attrs.offset || -1, \"px\");\n var observer = new IntersectionObserver(_ref => {\n let [e] = _ref;\n\n if (e.intersectionRatio < 1) {\n e.target.classList.add(\"is-pinned\"); //element[0].style.top = '0';\n } else {\n e.target.classList.remove(\"is-pinned\"); //element[0].style.top = '-400px';\n }\n }, {\n threshold: [1]\n });\n observer.observe(element[0]); //stickyEventsService.createHeaderObserver();\n //stickyEventsService.addElementToObserver(element[0]);\n }\n };\n}","export default class StickyEventsService {\n constructor() {}\n\n createHeaderObserver() {\n if (this.headerIntersectionObserver) {\n return;\n }\n\n return this.headerIntersectionObserver = new IntersectionObserver(function (entries) {\n // no intersection \n if (entries[0].intersectionRatio === 0) {\n console.log('1');\n entries[0].target.classList.add(\"nav-container-sticky\");\n } // fully intersects \n else if (entries[0].intersectionRatio === 1) {\n entries[0].target.classList.remove(\"nav-container-sticky\");\n console.log('2');\n }\n }, {\n threshold: [0, 1]\n });\n }\n\n createFooterObserver() {\n return new IntersectionObserver(_ref => {\n let [e] = _ref;\n return e.target.classList.toggle('isSticky', e.intersectionRatio < 1);\n }, {\n threshold: [1]\n });\n }\n\n addElementToObserver(el) {\n this.headerIntersectionObserver.observe(el);\n }\n\n removeElementToObserver(el) {\n this.headerIntersectionObserver.unobserve(el);\n }\n\n}","import StickyElement from './directives/stickyElementDirective.js';\nimport StickyEventsService from './services/stickyEventsService.js';\nimport './styles/stickyElementDirective.scss';\nconst moduleName = \"stickyElement\";\nangular.module(\"stickyElement\", []).service(\"stickyEventsService\", StickyEventsService).directive(\"stickyElement\", StickyElement);\nexport default moduleName;","import './styles/tabs.scss';","import './styles/zoomer.scss';","import cartMiniFooter from './directives/сartMiniFooter.js';\nimport './styles/cart.scss';\nconst pathToCartMiniSidebarTemplate = WEBPACK_BASE_URL + 'scripts/_partials/cart/templates/cart-mini-sidebar.html';\nconst MODULE_NAME = 'cart';\nangular.module(MODULE_NAME).config([\"$provide\", function ($provide) {\n $provide.decorator(\"cartMiniListDirective\", [\"$delegate\", function ($delegate) {\n const directive = $delegate[0];\n const path = WEBPACK_BASE_URL + 'scripts/_partials/cart/templates/cart-mini.html';\n directive.templateUrl = path;\n return $delegate;\n }]);\n}]).directive(\"cartMiniFooter\", cartMiniFooter).run([\"cartService\", \"cartConfig\", \"sidebarsContainerService\", \"$translate\", (cartService, cartConfig, sidebarsContainerService, $translate) => {\n cartService.addCallback(cartConfig.callbackNames.add, () => {\n sidebarsContainerService.open({\n contentId: \"cart-mini\",\n templateUrl: pathToCartMiniSidebarTemplate,\n title: $translate.instant('Js.Cart.Cart'),\n hideFooter: true,\n sidebarClass: \"sidebar--cart\"\n });\n }, \"cartMiniList\");\n cartService.addCallback(cartConfig.callbackNames.open, () => {\n sidebarsContainerService.open({\n contentId: \"cart-mini\",\n templateUrl: pathToCartMiniSidebarTemplate,\n title: $translate.instant('Js.Cart.Cart'),\n hideFooter: true,\n sidebarClass: \"sidebar--cart\"\n });\n });\n}]);\nexport default MODULE_NAME;","CartMiniFooter.$inject = [\"$timeout\", \"$window\", \"cartService\", \"cartConfig\"];\n\n/* @ngInject */\nexport default function CartMiniFooter($timeout, $window, cartService, cartConfig) {\n return {\n require: \"^cartMini\",\n restrict: \"A\",\n scope: true,\n controller: 'CartMiniCtrl',\n controllerAs: '$ctrl',\n bindToController: true,\n templateUrl: 'templates/Modern_Promo/scripts/_partials/cart/templates/cartMiniFooter.html',\n link: {\n post: function (scope, element, attrs, ctrls) {\n const calcHeightFooter = () => {\n $timeout(() => {\n const style = element[0].currentStyle || $window.getComputedStyle(element[0]),\n height = element[0].offsetHeight,\n margin = parseFloat(style.marginTop) + parseFloat(style.marginBottom),\n padding = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom),\n border = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n const totalHeight = (height + margin - padding + border || 0) + \"px\";\n const root = document.querySelector(':root');\n root.style.setProperty('--cartFooterHeight', totalHeight);\n }, 0);\n };\n\n calcHeightFooter();\n cartService.addCallback(cartConfig.callbackNames.update, calcHeightFooter, \"cartMiniFooter\");\n scope.$on('$destroy', function () {\n cartService.removeCallback(cartConfig.callbackNames.update, \"cartMiniFooter\");\n });\n }\n }\n };\n}","import './styles/catalogFilter.scss';","import './styles/colors-viewer.scss';","import './styles/orderHistory.scss';","import './styles/payment.scss';","import './styles/product-view.scss';","import reviewsModule from '../../../../../scripts/_partials/reviews/reviews.module.js';\nimport './styles/reviews.scss';\nangular.module(reviewsModule).config([\"$provide\", function ($provide) {\n $provide.decorator(\"reviewsFormDirective\", [\"$delegate\", function ($delegate) {\n const directive = $delegate[0];\n const path = WEBPACK_BASE_URL + 'scripts/_partials/reviews/templates/reviewForm.html';\n directive.templateUrl = path;\n return $delegate;\n }]);\n}]);\nexport default reviewsModule;","import './styles/shipping.scss';","import './styles/subscribe.scss';","import './styles/managers.scss';","import './styles/preorder.scss';","import './styles/registration.scss';","ReviewItemRatingCtrl.$inject = [\"$attrs\", \"$http\", \"$parse\", \"$scope\", \"toaster\"];\n\n/* @ngInject */\nfunction ReviewItemRatingCtrl($attrs, $http, $parse, $scope, toaster) {\n var ctrl = this;\n\n ctrl.$onInit = function () {\n ctrl.actionUrl = $parse($attrs.actionUrl)($scope);\n ctrl.reviewId = $parse($attrs.reviewId)($scope);\n ctrl.likeData = {\n Dislikes: $parse($attrs.countDislikes)($scope),\n Likes: $parse($attrs.countLikes)($scope)\n };\n };\n\n ctrl.like = function () {\n ctrl.voteReview(ctrl.reviewId, true, ctrl.actionUrl);\n };\n\n ctrl.dislike = function () {\n ctrl.voteReview(ctrl.reviewId, false, ctrl.actionUrl);\n };\n\n ctrl.voteReview = function (reviewId, like, actionUrl) {\n return $http.post(actionUrl, {\n reviewId: reviewId,\n vote: like\n }).then(function (response) {\n if (response.data.error) {\n toaster.pop('error', response.data.errors);\n } else {\n angular.extend(ctrl.likeData, response.data.likeData);\n }\n\n return response.data;\n });\n };\n}\n\n;\nexport default ReviewItemRatingCtrl;","ReviewsCtrl.$inject = [\"$element\", \"$compile\", \"$scope\", \"$http\", \"$filter\", \"$templateCache\", \"$timeout\", \"toaster\", \"Upload\", \"$translate\"];\n\n/* @ngInject */\nfunction ReviewsCtrl($element, $compile, $scope, $http, $filter, $templateCache, $timeout, toaster, Upload, $translate) {\n var ctrl = this,\n listRoot,\n items = {},\n form,\n formScope;\n ctrl.visibleFormCancelButton = false;\n ctrl.reviewIdActive = 0;\n\n ctrl.addItemInStorage = function (id, element) {\n items[id] = element;\n };\n\n ctrl.addForm = function (scope, element) {\n form = element;\n formScope = scope;\n };\n\n ctrl.getForm = function () {\n return form;\n };\n\n ctrl.reply = function (parentId) {\n items[parentId].append(ctrl.getForm());\n ctrl.moveFormInside(parentId);\n ctrl.formVisible = true;\n ctrl.focusInput();\n };\n\n ctrl.moveFormInside = function (parentId) {\n ctrl.reviewIdActive = parentId;\n ctrl.visibleFormCancelButton = true;\n };\n\n ctrl.formReset = function () {\n formScope.reset();\n };\n\n ctrl.moveFormDefault = function () {\n $element.append(form);\n };\n\n ctrl.formInStart = function () {\n ctrl.moveFormDefault();\n ctrl.formReset();\n ctrl.reviewIdActive = 0;\n ctrl.visibleFormCancelButton = false;\n };\n\n ctrl.addReview = function (actionUrl, name, email, text, parentId, files, agreement, captchaCode, captchaSource) {\n $(document).trigger(\"add_response\");\n return Upload.upload({\n url: actionUrl,\n data: {\n entityId: ctrl.entityId,\n entityType: ctrl.entityType,\n name: name,\n email: email,\n text: text,\n parentId: parentId,\n agreement: agreement,\n captchaCode: captchaCode,\n captchaSource: captchaSource\n },\n file: files // or list of files (files) for html5 only\n\n });\n };\n\n ctrl.submit = function (form, actionUrl) {\n //if (form.form.captchaCode != undefined) {\n ctrl.addReview(actionUrl, form.name, form.email, form.text, form.reviewId, form.images, form.agreement, form.captchaCode, form.captchaSource).then(function (response) {\n if (response.data.error) {\n toaster.pop('error', response.data.errors);\n return;\n }\n\n var newReview = response.data.review;\n\n if (ctrl.moderate == false) {\n ctrl.renderReviewItem(newReview.ParentId, newReview.ReviewId, newReview.Name, $filter('date')(Date.now(), 'dd MMMM yyyy'), newReview.Text, newReview.Photos, newReview.Likes, newReview.Dislikes, newReview.RatioByLikes);\n\n if (ctrl.onAddComment != null) {\n ctrl.onAddComment($scope);\n }\n } else {\n toaster.pop('info', $translate.instant('Js.Reviews.ThxForReviewTitle'), $translate.instant('Js.Reviews.ThxForReviewMsg'));\n }\n }); //}\n\n if (ctrl.showFormAfterDo === true) {\n ctrl.formInStart();\n } else {\n ctrl.formReset();\n ctrl.reviewIdActive = 0;\n ctrl.visibleFormCancelButton = false;\n ctrl.formVisible = false;\n }\n };\n\n ctrl.renderReviewItem = function (parentId, reviewId, name, date, text, photos, likes, dislikes, ratioByLikes) {\n var parentContainer, list, needContainer, reviewNew, htmlItem, before;\n\n if (items[parentId] != null) {\n list = items[parentId].children('ul');\n\n if (list.length > 0) {\n parentContainer = list;\n needContainer = false;\n } else {\n parentContainer = items[parentId];\n needContainer = true;\n }\n } else {\n if (listRoot) {\n parentContainer = listRoot;\n }\n\n if (parentContainer == null) {\n var reviewslist = $element[0].querySelector('.reviews-list');\n\n if (reviewslist != null) {\n parentContainer = angular.element(reviewslist);\n }\n }\n\n if (parentContainer == null) {\n parentContainer = angular.element($element[0].querySelector('.js-reviews-list-root'));\n }\n\n needContainer = true;\n before = true;\n }\n\n ctrl.getHtmlReviewItem(needContainer).then(function (htmlItem) {\n reviewNew = angular.element(htmlItem);\n\n if (before) {\n parentContainer.before(reviewNew);\n } else {\n parentContainer.append(reviewNew);\n }\n\n var scopeItem = $scope.$new();\n scopeItem.parentId = parentId;\n scopeItem.reviewId = reviewId;\n scopeItem.name = name;\n scopeItem.date = $translate.instant(date);\n scopeItem.text = text;\n scopeItem.photos = photos;\n scopeItem.likes = likes;\n scopeItem.dislikes = dislikes;\n scopeItem.ratioByLikes = ratioByLikes;\n $compile(reviewNew)(scopeItem);\n });\n };\n\n ctrl.getHtmlReviewItem = function (needContainer) {\n return $http.get('reviewItemTemplate.html', {\n cache: $templateCache\n }).then(function (response) {\n var result = response.data;\n\n if (needContainer === true) {\n result = '';\n }\n\n return result;\n });\n };\n\n ctrl.cancel = function (form) {\n if (ctrl.showFormAfterDo === true) {\n ctrl.formInStart();\n } else {\n ctrl.formReset();\n ctrl.reviewIdActive = 0;\n ctrl.visibleFormCancelButton = false;\n ctrl.formVisible = false;\n }\n };\n\n ctrl.deleteReviewFromDB = function (reviewId, actionUrl) {\n return $http.post(actionUrl, {\n reviewId: reviewId\n });\n };\n\n ctrl.delete = function (reviewId, actionUrl) {\n if (items[reviewId] != null) {\n ctrl.deleteReviewFromDB(reviewId, actionUrl).then(function (response) {\n items[reviewId].remove();\n\n if (ctrl.onDeleteComment != null) {\n ctrl.onDeleteComment($scope);\n }\n });\n }\n };\n\n ctrl.focusInput = function () {\n formScope.setAutofocus();\n };\n}\n\n;\nexport default ReviewsCtrl;","ReviewsFormCtrl.$inject = [\"$timeout\", \"toaster\", \"$translate\", \"$http\"];\n\n/* @ngInject */\nfunction ReviewsFormCtrl($timeout, toaster, $translate, $http) {\n var ctrl = this;\n ctrl.nameFocus = ctrl.emailFocus = ctrl.textFocus = false;\n ctrl.images = [];\n\n ctrl.selectedImage = function (files) {\n if (files && files.length) {\n for (var i = 0; i < files.length; i++) {\n ctrl.pushImages(files[i]);\n }\n }\n };\n\n ctrl.pushImages = function (image) {\n ctrl.images.push(image || {});\n };\n\n ctrl.deleteImage = function (index) {\n ctrl.images.splice(index, 1);\n };\n\n ctrl.submit = function () {\n if (ctrl.isShowUserAgreementText && !ctrl.agreement) {\n toaster.pop('error', $translate.instant('Js.Subscribe.ErrorAgreement'));\n return;\n }\n\n ctrl.images = ctrl.images.filter(function (image) {\n return image.name;\n });\n var sendResult = false;\n\n if (typeof CaptchaSource != \"undefined\") {\n CaptchaSource.InputId = \"CaptchaCode\";\n ctrl.captchaCode = CaptchaSource.GetInputElement().value;\n ctrl.captchaSource = CaptchaSource.InstanceId;\n $http.get(CaptchaSource.ValidationUrl + '&i=' + CaptchaSource.GetInputElement().value).then(function (result) {\n if (result.data === true) {\n ctrl.submitFn({\n form: ctrl\n });\n sendResult = true;\n } else {\n toaster.pop('error', $translate.instant('Js.Captcha.Wrong'));\n }\n }).then(function () {\n $timeout(function () {\n CaptchaSource.ReloadImage();\n }, 1000);\n CaptchaSource.GetInputElement().value = '';\n\n if ((ctrl.moderate == null || ctrl.moderate == false) && sendResult === true) {\n $translate(['Js.Reviews.SuccessTitle', 'Js.Reviews.SuccessMessage']).then(function (translations) {\n toaster.success(translations['Js.Reviews.SuccessTitle'], translations['Js.Reviews.SuccessMessage']);\n });\n }\n });\n } else {\n ctrl.submitFn({\n form: ctrl\n });\n sendResult = true;\n\n if ((ctrl.moderate == null || ctrl.moderate == false) && sendResult === true) {\n $translate(['Js.Reviews.SuccessTitle', 'Js.Reviews.SuccessMessage']).then(function (translations) {\n toaster.success(translations['Js.Reviews.SuccessTitle'], translations['Js.Reviews.SuccessMessage']);\n });\n }\n }\n };\n\n ctrl.reset = function () {\n //formScope.name = '';\n //formScope.email = '';\n ctrl.text = '';\n ctrl.images = [];\n ctrl.agreement = false;\n ctrl.form.$setPristine();\n };\n\n ctrl.setAutofocus = function () {\n ctrl.nameFocus = ctrl.emailFocus = ctrl.textFocus = false;\n $timeout(function () {\n if (ctrl.name == null || ctrl.name.length === 0) {\n ctrl.nameFocus = true;\n } else if (ctrl.email == null || ctrl.email.length === 0) {\n ctrl.emailFocus = true;\n } else if (ctrl.text == null || ctrl.text.length === 0) {\n ctrl.textFocus = true;\n }\n }, 0);\n };\n}\n\n;\nexport default ReviewsFormCtrl;","reviewsDirective.$inject = [\"$parse\"];\n\n/* @ngInject */\nfunction reviewsDirective($parse) {\n return {\n restrict: 'A',\n scope: true,\n controller: 'ReviewsCtrl',\n controllerAs: 'reviews',\n bindToController: true,\n link: function (scope, element, attrs, ctrl) {\n ctrl.moderate = attrs.moderate === 'true';\n ctrl.isAdmin = attrs.isAdmin === 'true';\n ctrl.entityId = attrs.entityId;\n ctrl.entityType = attrs.entityType;\n ctrl.name = attrs.name;\n ctrl.email = attrs.email;\n ctrl.actionUrl = attrs.actionUrl;\n ctrl.formVisible = attrs.formVisible !== 'false';\n ctrl.allowImageUpload = attrs.allowImageUpload === 'true';\n ctrl.readonly = attrs.readonly === 'true';\n ctrl.onAddComment = attrs.onAddComment != null ? $parse(attrs.onAddComment) : null;\n ctrl.onDeleteComment = attrs.onDeleteComment != null ? $parse(attrs.onDeleteComment) : null;\n ctrl.showFormAfterDo = attrs.showFormAfterDo != null ? $parse(attrs.showFormAfterDo) : true;\n }\n };\n}\n\n;\n\nfunction reviewItemDirective() {\n return {\n require: '^reviews',\n restrict: 'A',\n scope: true,\n link: function (scope, element, attrs, ctrl) {\n ctrl.addItemInStorage(attrs.reviewId, element);\n }\n };\n}\n\n;\n\nfunction reviewsFormDirective() {\n return {\n require: ['^reviewsForm', '^reviews'],\n restrict: 'A',\n scope: {\n visibleFormCancelButton: '=',\n reviewId: '=',\n name: '=',\n email: '=',\n submitFn: '&',\n cancelFn: '&',\n formVisible: '=',\n allowImageUpload: '=',\n isShowUserAgreementText: '=',\n agreementDefaultChecked: '',\n link: function (scope, element, attrs, ctrl) {\n scope.parentScope = ctrl;\n }\n };\n}\n\n;\n\nfunction reviewDeleteDirective() {\n return {\n require: '^reviews',\n restrict: 'A',\n replace: true,\n transclude: true,\n scope: {\n reviewId: '@',\n actionUrl: '@'\n },\n template: '',\n link: function (scope, element, attrs, ctrl) {\n scope.parentScope = ctrl;\n }\n };\n}\n\n;\n\nfunction reviewItemRatingDirective() {\n return {\n scope: true,\n controller: 'ReviewItemRatingCtrl',\n controllerAs: 'reviewItemRating'\n };\n}\n\n;\nexport { reviewsDirective, reviewItemDirective, reviewsFormDirective, reviewReplyDirective, reviewDeleteDirective, reviewItemRatingDirective };","import ngFileUploadModule from '../../../node_modules/ng-file-upload/index.js';\nimport './styles/reviews.scss';\nimport ReviewsCtrl from './controllers/reviewsController.js';\nimport ReviewsFormCtrl from './controllers/reviewsFormController.js';\nimport ReviewItemRatingCtrl from './controllers/reviewItemRatingController.js';\nimport { reviewsDirective, reviewItemDirective, reviewsFormDirective, reviewReplyDirective, reviewDeleteDirective, reviewItemRatingDirective } from './directives/reviewsDirectives.js';\nconst moduleName = 'reviews';\nangular.module(moduleName, [ngFileUploadModule]).controller('ReviewsCtrl', ReviewsCtrl).controller('ReviewItemRatingCtrl', ReviewItemRatingCtrl).controller('ReviewsFormCtrl', ReviewsFormCtrl).directive('reviews', reviewsDirective).directive('reviewItem', reviewItemDirective).directive('reviewsForm', reviewsFormDirective).directive('reviewReply', reviewReplyDirective).directive('reviewDelete', reviewDeleteDirective).directive('reviewItemRating', reviewItemRatingDirective);\nexport default moduleName;","class AppDependency {\n constructor() {\n if (!window.___appDependency) {\n window.___appDependency = this;\n window.___appDependencyList = [];\n }\n\n return window.___appDependency;\n }\n\n addItem(moduleName) {\n window.___appDependencyList.push(moduleName);\n }\n\n addList(moduleNameList) {\n window.___appDependencyList = window.___appDependencyList.concat(moduleNameList);\n }\n\n get() {\n return window.___appDependencyList;\n }\n\n}\n\nexport default new AppDependency();","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","/**!\n * AngularJS file upload/drop directive and service with progress and abort\n * FileAPI Flash shim for old browsers not supporting FormData\n * @author Danial \n * @version 6.1.0\n */\n\n(function () {\n /** @namespace FileAPI.noContentTimeout */\n\n function patchXHR(fnName, newFn) {\n window.XMLHttpRequest.prototype[fnName] = newFn(window.XMLHttpRequest.prototype[fnName]);\n }\n\n function redefineProp(xhr, prop, fn) {\n try {\n Object.defineProperty(xhr, prop, {get: fn});\n } catch (e) {/*ignore*/\n }\n }\n\n if (!window.FileAPI) {\n window.FileAPI = {};\n }\n\n FileAPI.shouldLoad = (window.XMLHttpRequest && !window.FormData) || FileAPI.forceLoad;\n if (FileAPI.shouldLoad) {\n var initializeUploadListener = function (xhr) {\n if (!xhr.__listeners) {\n if (!xhr.upload) xhr.upload = {};\n xhr.__listeners = [];\n var origAddEventListener = xhr.upload.addEventListener;\n xhr.upload.addEventListener = function (t, fn) {\n xhr.__listeners[t] = fn;\n if (origAddEventListener) origAddEventListener.apply(this, arguments);\n };\n }\n };\n\n patchXHR('open', function (orig) {\n return function (m, url, b) {\n initializeUploadListener(this);\n this.__url = url;\n try {\n orig.apply(this, [m, url, b]);\n } catch (e) {\n if (e.message.indexOf('Access is denied') > -1) {\n this.__origError = e;\n orig.apply(this, [m, '_fix_for_ie_crossdomain__', b]);\n }\n }\n };\n });\n\n patchXHR('getResponseHeader', function (orig) {\n return function (h) {\n return this.__fileApiXHR && this.__fileApiXHR.getResponseHeader ? this.__fileApiXHR.getResponseHeader(h) : (orig == null ? null : orig.apply(this, [h]));\n };\n });\n\n patchXHR('getAllResponseHeaders', function (orig) {\n return function () {\n return this.__fileApiXHR && this.__fileApiXHR.getAllResponseHeaders ? this.__fileApiXHR.getAllResponseHeaders() : (orig == null ? null : orig.apply(this));\n };\n });\n\n patchXHR('abort', function (orig) {\n return function () {\n return this.__fileApiXHR && this.__fileApiXHR.abort ? this.__fileApiXHR.abort() : (orig == null ? null : orig.apply(this));\n };\n });\n\n patchXHR('setRequestHeader', function (orig) {\n return function (header, value) {\n if (header === '__setXHR_') {\n initializeUploadListener(this);\n var val = value(this);\n // fix for angular < 1.2.0\n if (val instanceof Function) {\n val(this);\n }\n } else {\n this.__requestHeaders = this.__requestHeaders || {};\n this.__requestHeaders[header] = value;\n orig.apply(this, arguments);\n }\n };\n });\n\n patchXHR('send', function (orig) {\n return function () {\n var xhr = this;\n if (arguments[0] && arguments[0].__isFileAPIShim) {\n var formData = arguments[0];\n var config = {\n url: xhr.__url,\n jsonp: false, //removes the callback form param\n cache: true, //removes the ?fileapiXXX in the url\n complete: function (err, fileApiXHR) {\n xhr.__completed = true;\n if (!err && xhr.__listeners.load)\n xhr.__listeners.load({\n type: 'load',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (!err && xhr.__listeners.loadend)\n xhr.__listeners.loadend({\n type: 'loadend',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (err === 'abort' && xhr.__listeners.abort)\n xhr.__listeners.abort({\n type: 'abort',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (fileApiXHR.status !== undefined) redefineProp(xhr, 'status', function () {\n return (fileApiXHR.status === 0 && err && err !== 'abort') ? 500 : fileApiXHR.status;\n });\n if (fileApiXHR.statusText !== undefined) redefineProp(xhr, 'statusText', function () {\n return fileApiXHR.statusText;\n });\n redefineProp(xhr, 'readyState', function () {\n return 4;\n });\n if (fileApiXHR.response !== undefined) redefineProp(xhr, 'response', function () {\n return fileApiXHR.response;\n });\n var resp = fileApiXHR.responseText || (err && fileApiXHR.status === 0 && err !== 'abort' ? err : undefined);\n redefineProp(xhr, 'responseText', function () {\n return resp;\n });\n redefineProp(xhr, 'response', function () {\n return resp;\n });\n if (err) redefineProp(xhr, 'err', function () {\n return err;\n });\n xhr.__fileApiXHR = fileApiXHR;\n if (xhr.onreadystatechange) xhr.onreadystatechange();\n if (xhr.onload) xhr.onload();\n },\n progress: function (e) {\n e.target = xhr;\n if (xhr.__listeners.progress) xhr.__listeners.progress(e);\n xhr.__total = e.total;\n xhr.__loaded = e.loaded;\n if (e.total === e.loaded) {\n // fix flash issue that doesn't call complete if there is no response text from the server\n var _this = this;\n setTimeout(function () {\n if (!xhr.__completed) {\n xhr.getAllResponseHeaders = function () {\n };\n _this.complete(null, {status: 204, statusText: 'No Content'});\n }\n }, FileAPI.noContentTimeout || 10000);\n }\n },\n headers: xhr.__requestHeaders\n };\n config.data = {};\n config.files = {};\n for (var i = 0; i < formData.data.length; i++) {\n var item = formData.data[i];\n if (item.val != null && item.val.name != null && item.val.size != null && item.val.type != null) {\n config.files[item.key] = item.val;\n } else {\n config.data[item.key] = item.val;\n }\n }\n\n setTimeout(function () {\n if (!FileAPI.hasFlash) {\n throw 'Adode Flash Player need to be installed. To check ahead use \"FileAPI.hasFlash\"';\n }\n xhr.__fileApiXHR = FileAPI.upload(config);\n }, 1);\n } else {\n if (this.__origError) {\n throw this.__origError;\n }\n orig.apply(xhr, arguments);\n }\n };\n });\n window.XMLHttpRequest.__isFileAPIShim = true;\n window.FormData = FormData = function () {\n return {\n append: function (key, val, name) {\n if (val.__isFileAPIBlobShim) {\n val = val.data[0];\n }\n this.data.push({\n key: key,\n val: val,\n name: name\n });\n },\n data: [],\n __isFileAPIShim: true\n };\n };\n\n window.Blob = Blob = function (b) {\n return {\n data: b,\n __isFileAPIBlobShim: true\n };\n };\n }\n\n})();\n\n(function () {\n /** @namespace FileAPI.forceLoad */\n /** @namespace window.FileAPI.jsUrl */\n /** @namespace window.FileAPI.jsPath */\n\n function isInputTypeFile(elem) {\n return elem[0].tagName.toLowerCase() === 'input' && elem.attr('type') && elem.attr('type').toLowerCase() === 'file';\n }\n\n function hasFlash() {\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) return true;\n } catch (e) {\n if (navigator.mimeTypes['application/x-shockwave-flash'] !== undefined) return true;\n }\n return false;\n }\n\n function getOffset(obj) {\n var left = 0, top = 0;\n\n if (window.jQuery) {\n return jQuery(obj).offset();\n }\n\n if (obj.offsetParent) {\n do {\n left += (obj.offsetLeft - obj.scrollLeft);\n top += (obj.offsetTop - obj.scrollTop);\n obj = obj.offsetParent;\n } while (obj);\n }\n return {\n left: left,\n top: top\n };\n }\n\n if (FileAPI.shouldLoad) {\n\n //load FileAPI\n if (FileAPI.forceLoad) {\n FileAPI.html5 = false;\n }\n\n if (!FileAPI.upload) {\n var jsUrl, basePath, script = document.createElement('script'), allScripts = document.getElementsByTagName('script'), i, index, src;\n if (window.FileAPI.jsUrl) {\n jsUrl = window.FileAPI.jsUrl;\n } else if (window.FileAPI.jsPath) {\n basePath = window.FileAPI.jsPath;\n } else {\n for (i = 0; i < allScripts.length; i++) {\n src = allScripts[i].src;\n index = src.search(/\\/ng\\-file\\-upload[\\-a-zA-z0-9\\.]*\\.js/);\n if (index > -1) {\n basePath = src.substring(0, index + 1);\n break;\n }\n }\n }\n\n if (FileAPI.staticPath == null) FileAPI.staticPath = basePath;\n script.setAttribute('src', jsUrl || basePath + 'FileAPI.min.js');\n document.getElementsByTagName('head')[0].appendChild(script);\n\n FileAPI.hasFlash = hasFlash();\n }\n\n FileAPI.ngfFixIE = function (elem, createFileElemFn, bindAttr, changeFn) {\n if (!hasFlash()) {\n throw 'Adode Flash Player need to be installed. To check ahead use \"FileAPI.hasFlash\"';\n }\n var makeFlashInput = function () {\n if (elem.attr('disabled')) {\n elem.$$ngfRefElem.removeClass('js-fileapi-wrapper');\n } else {\n var fileElem = elem.$$ngfRefElem;\n if (!fileElem) {\n fileElem = elem.$$ngfRefElem = createFileElemFn();\n fileElem.addClass('js-fileapi-wrapper');\n if (!isInputTypeFile(elem)) {\n//\t\t\t\t\t\tif (fileElem.parent().css('position') === '' || fileElem.parent().css('position') === 'static') {\n//\t\t\t\t\t\t\tfileElem.parent().css('position', 'relative');\n//\t\t\t\t\t\t}\n//\t\t\t\t\t\telem.parent()[0].insertBefore(fileElem[0], elem[0]);\n//\t\t\t\t\t\telem.css('overflow', 'hidden');\n }\n setTimeout(function () {\n fileElem.bind('mouseenter', makeFlashInput);\n }, 10);\n fileElem.bind('change', function (evt) {\n fileApiChangeFn.apply(this, [evt]);\n changeFn.apply(this, [evt]);\n//\t\t\t\t\t\talert('change' + evt);\n });\n } else {\n bindAttr(elem.$$ngfRefElem);\n }\n if (!isInputTypeFile(elem)) {\n fileElem.css('position', 'absolute')\n .css('top', getOffset(elem[0]).top + 'px').css('left', getOffset(elem[0]).left + 'px')\n .css('width', elem[0].offsetWidth + 'px').css('height', elem[0].offsetHeight + 'px')\n .css('filter', 'alpha(opacity=0)').css('display', elem.css('display'))\n .css('overflow', 'hidden').css('z-index', '900000')\n .css('visibility', 'visible');\n }\n }\n };\n\n elem.bind('mouseenter', makeFlashInput);\n\n var fileApiChangeFn = function (evt) {\n var files = FileAPI.getFiles(evt);\n //just a double check for #233\n for (var i = 0; i < files.length; i++) {\n if (files[i].size === undefined) files[i].size = 0;\n if (files[i].name === undefined) files[i].name = 'file';\n if (files[i].type === undefined) files[i].type = 'undefined';\n }\n if (!evt.target) {\n evt.target = {};\n }\n evt.target.files = files;\n // if evt.target.files is not writable use helper field\n if (evt.target.files !== files) {\n evt.__files_ = files;\n }\n (evt.__files_ || evt.target.files).item = function (i) {\n return (evt.__files_ || evt.target.files)[i] || null;\n };\n };\n };\n\n FileAPI.disableFileInput = function (elem, disable) {\n if (disable) {\n elem.removeClass('js-fileapi-wrapper');\n } else {\n elem.addClass('js-fileapi-wrapper');\n }\n };\n }\n})();\n\nif (!window.FileReader) {\n window.FileReader = function () {\n var _this = this, loadStarted = false;\n this.listeners = {};\n this.addEventListener = function (type, fn) {\n _this.listeners[type] = _this.listeners[type] || [];\n _this.listeners[type].push(fn);\n };\n this.removeEventListener = function (type, fn) {\n if (_this.listeners[type]) _this.listeners[type].splice(_this.listeners[type].indexOf(fn), 1);\n };\n this.dispatchEvent = function (evt) {\n var list = _this.listeners[evt.type];\n if (list) {\n for (var i = 0; i < list.length; i++) {\n list[i].call(_this, evt);\n }\n }\n };\n this.onabort = this.onerror = this.onload = this.onloadstart = this.onloadend = this.onprogress = null;\n\n var constructEvent = function (type, evt) {\n var e = {type: type, target: _this, loaded: evt.loaded, total: evt.total, error: evt.error};\n if (evt.result != null) e.target.result = evt.result;\n return e;\n };\n var listener = function (evt) {\n if (!loadStarted) {\n loadStarted = true;\n if (_this.onloadstart) _this.onloadstart(constructEvent('loadstart', evt));\n }\n var e;\n if (evt.type === 'load') {\n if (_this.onloadend) _this.onloadend(constructEvent('loadend', evt));\n e = constructEvent('load', evt);\n if (_this.onload) _this.onload(e);\n _this.dispatchEvent(e);\n } else if (evt.type === 'progress') {\n e = constructEvent('progress', evt);\n if (_this.onprogress) _this.onprogress(e);\n _this.dispatchEvent(e);\n } else {\n e = constructEvent('error', evt);\n if (_this.onerror) _this.onerror(e);\n _this.dispatchEvent(e);\n }\n };\n this.readAsArrayBuffer = function (file) {\n FileAPI.readAsBinaryString(file, listener);\n };\n this.readAsBinaryString = function (file) {\n FileAPI.readAsBinaryString(file, listener);\n };\n this.readAsDataURL = function (file) {\n FileAPI.readAsDataURL(file, listener);\n };\n this.readAsText = function (file) {\n FileAPI.readAsText(file, listener);\n };\n };\n}\n\n/**!\n * AngularJS file upload/drop directive and service with progress and abort\n * @author Danial \n * @version 6.1.0\n */\n\nif (window.XMLHttpRequest && !(window.FileAPI && FileAPI.shouldLoad)) {\n window.XMLHttpRequest.prototype.setRequestHeader = (function (orig) {\n return function (header, value) {\n if (header === '__setXHR_') {\n var val = value(this);\n // fix for angular < 1.2.0\n if (val instanceof Function) {\n val(this);\n }\n } else {\n orig.apply(this, arguments);\n }\n };\n })(window.XMLHttpRequest.prototype.setRequestHeader);\n}\n\nvar ngFileUpload = angular.module('ngFileUpload', []);\n\nngFileUpload.version = '6.1.0';\nngFileUpload.defaults = {};\n\nngFileUpload.service('Upload', ['$http', '$q', '$timeout', function ($http, $q, $timeout) {\n function sendHttp(config) {\n config.method = config.method || 'POST';\n config.headers = config.headers || {};\n\n var deferred = $q.defer();\n var promise = deferred.promise;\n\n config.headers.__setXHR_ = function () {\n return function (xhr) {\n if (!xhr) return;\n config.__XHR = xhr;\n if (config.xhrFn) config.xhrFn(xhr);\n xhr.upload.addEventListener('progress', function (e) {\n e.config = config;\n if (deferred.notify) {\n deferred.notify(e);\n } else if (promise.progressFunc) {\n $timeout(function () {\n promise.progressFunc(e);\n });\n }\n }, false);\n //fix for firefox not firing upload progress end, also IE8-9\n xhr.upload.addEventListener('load', function (e) {\n if (e.lengthComputable) {\n e.config = config;\n if (deferred.notify) {\n deferred.notify(e);\n } else if (promise.progressFunc) {\n $timeout(function () {\n promise.progressFunc(e);\n });\n }\n }\n }, false);\n };\n };\n\n $http(config).then(function (r) {\n deferred.resolve(r);\n }, function (e) {\n deferred.reject(e);\n }, function (n) {\n deferred.notify(n);\n });\n\n promise.success = function (fn) {\n promise.then(function (response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.error = function (fn) {\n promise.then(null, function (response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.progress = function (fn) {\n promise.progressFunc = fn;\n promise.then(null, null, function (update) {\n fn(update);\n });\n return promise;\n };\n promise.abort = function () {\n if (config.__XHR) {\n $timeout(function () {\n config.__XHR.abort();\n });\n }\n return promise;\n };\n promise.xhr = function (fn) {\n config.xhrFn = (function (origXhrFn) {\n return function () {\n if (origXhrFn) origXhrFn.apply(promise, arguments);\n fn.apply(promise, arguments);\n };\n })(config.xhrFn);\n return promise;\n };\n\n return promise;\n }\n\n this.upload = function (config) {\n function addFieldToFormData(formData, val, key) {\n if (val !== undefined) {\n if (angular.isDate(val)) {\n val = val.toISOString();\n }\n if (angular.isString(val)) {\n formData.append(key, val);\n } else if (config.sendFieldsAs === 'form') {\n if (angular.isObject(val)) {\n for (var k in val) {\n if (val.hasOwnProperty(k)) {\n addFieldToFormData(formData, val[k], key + '[' + k + ']');\n }\n }\n } else {\n formData.append(key, val);\n }\n } else {\n val = angular.isString(val) ? val : JSON.stringify(val);\n if (config.sendFieldsAs === 'json-blob') {\n formData.append(key, new Blob([val], {type: 'application/json'}));\n } else {\n formData.append(key, val);\n }\n }\n }\n }\n\n config.headers = config.headers || {};\n config.headers['Content-Type'] = undefined;\n config.transformRequest = config.transformRequest ?\n (angular.isArray(config.transformRequest) ?\n config.transformRequest : [config.transformRequest]) : [];\n config.transformRequest.push(function (data) {\n var formData = new FormData();\n var allFields = {};\n var key;\n for (key in config.fields) {\n if (config.fields.hasOwnProperty(key)) {\n allFields[key] = config.fields[key];\n }\n }\n if (data) allFields.data = data;\n for (key in allFields) {\n if (allFields.hasOwnProperty(key)) {\n var val = allFields[key];\n if (config.formDataAppender) {\n config.formDataAppender(formData, key, val);\n } else {\n addFieldToFormData(formData, val, key);\n }\n }\n }\n\n if (config.file != null) {\n var fileFormName = config.fileFormDataName || 'file';\n\n if (angular.isArray(config.file)) {\n var isFileFormNameString = angular.isString(fileFormName);\n for (var i = 0; i < config.file.length; i++) {\n formData.append(isFileFormNameString ? fileFormName : fileFormName[i], config.file[i],\n (config.fileName && config.fileName[i]) || config.file[i].name);\n }\n } else {\n formData.append(fileFormName, config.file, config.fileName || config.file.name);\n }\n }\n return formData;\n });\n\n return sendHttp(config);\n };\n\n this.http = function (config) {\n config.transformRequest = config.transformRequest || function (data) {\n if ((window.ArrayBuffer && data instanceof window.ArrayBuffer) || data instanceof Blob) {\n return data;\n }\n return $http.defaults.transformRequest[0](arguments);\n };\n return sendHttp(config);\n };\n\n this.dataUrl = function (file, callback, disallowObjectUrl) {\n if (window.FileReader && file &&\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n $timeout(function () {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = window.URL || window.webkitURL;\n if (URL && URL.createObjectURL && !disallowObjectUrl) {\n callback(URL.createObjectURL(file));\n } else {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function (e) {\n $timeout(function () {\n callback(e.target.result);\n });\n };\n }\n });\n } else {\n callback(null);\n }\n };\n\n this.setDefaults = function(defaults) {\n ngFileUpload.defaults = defaults || {};\n };\n}\n\n]);\n\n(function () {\n ngFileUpload.getAttrWithDefaults = function(attr, name) {\n return attr[name] != null ? attr[name] :\n (ngFileUpload.defaults[name] == null ?\n ngFileUpload.defaults[name] : ngFileUpload.defaults[name].toString());\n };\n\n var getAttr = ngFileUpload.getAttrWithDefaults;\n\n ngFileUpload.directive('ngfSelect', ['$parse', '$timeout', '$compile',\n function ($parse, $timeout, $compile) {\n return {\n restrict: 'AEC',\n require: '?ngModel',\n link: function (scope, elem, attr, ngModel) {\n linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile);\n }\n };\n }]);\n\n function linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile) {\n /** @namespace attr.ngfSelect */\n /** @namespace attr.ngfChange */\n /** @namespace attr.ngModel */\n /** @namespace attr.ngModelRejected */\n /** @namespace attr.ngfModel */\n /** @namespace attr.ngfMultiple */\n /** @namespace attr.ngfCapture */\n /** @namespace attr.ngfAccept */\n /** @namespace attr.ngfValidate */\n /** @namespace attr.ngfMaxSize */\n /** @namespace attr.ngfMinSize */\n /** @namespace attr.ngfResetOnClick */\n /** @namespace attr.ngfResetModelOnClick */\n /** @namespace attr.ngfKeep */\n /** @namespace attr.ngfKeepDistinct */\n\n if (elem.attr('__ngf_gen__')) {\n return;\n }\n\n scope.$on('$destroy', function () {\n if (elem.$$ngfRefElem) elem.$$ngfRefElem.remove();\n });\n\n var disabled = false;\n if (getAttr(attr, 'ngfSelect').search(/\\W+\\$files\\W+/) === -1) {\n scope.$watch(getAttr(attr, 'ngfSelect'), function (val) {\n disabled = val === false;\n });\n }\n function isInputTypeFile() {\n return elem[0].tagName.toLowerCase() === 'input' && attr.type && attr.type.toLowerCase() === 'file';\n }\n\n var isUpdating = false;\n\n function changeFn(evt) {\n if (!isUpdating) {\n isUpdating = true;\n try {\n var fileList = evt.__files_ || (evt.target && evt.target.files);\n var files = [], rejFiles = [];\n\n for (var i = 0; i < fileList.length; i++) {\n var file = fileList.item(i);\n if (validate(scope, $parse, attr, file, evt)) {\n files.push(file);\n } else {\n rejFiles.push(file);\n }\n }\n updateModel($parse, $timeout, scope, ngModel, attr,\n getAttr(attr, 'ngfChange') || getAttr(attr, 'ngfSelect'), files, rejFiles, evt);\n if (files.length === 0) evt.target.value = files;\n// if (evt.target && evt.target.getAttribute('__ngf_gen__')) {\n// angular.element(evt.target).remove();\n// }\n } finally {\n isUpdating = false;\n }\n }\n }\n\n function bindAttrToFileInput(fileElem) {\n if (getAttr(attr, 'ngfMultiple')) fileElem.attr('multiple', $parse(getAttr(attr, 'ngfMultiple'))(scope));\n if (getAttr(attr, 'ngfCapture')) fileElem.attr('capture', $parse(getAttr(attr, 'ngfCapture'))(scope));\n if (getAttr(attr, 'accept')) fileElem.attr('accept', getAttr(attr, 'accept'));\n for (var i = 0; i < elem[0].attributes.length; i++) {\n var attribute = elem[0].attributes[i];\n if ((isInputTypeFile() && attribute.name !== 'type') ||\n (attribute.name !== 'type' && attribute.name !== 'class' &&\n attribute.name !== 'id' && attribute.name !== 'style')) {\n if (attribute.value == null || attribute.value === '') {\n if (attribute.name === 'required') attribute.value = 'required';\n if (attribute.name === 'multiple') attribute.value = 'multiple';\n }\n fileElem.attr(attribute.name, attribute.value);\n }\n }\n }\n\n function createFileInput(evt, resetOnClick) {\n if (!resetOnClick && (evt || isInputTypeFile())) return elem.$$ngfRefElem || elem;\n if (elem.$$ngfProgramClick) return elem;\n\n var fileElem = angular.element('');\n bindAttrToFileInput(fileElem);\n\n if (isInputTypeFile()) {\n elem.replaceWith(fileElem);\n elem = fileElem;\n fileElem.attr('__ngf_gen__', true);\n $compile(elem)(scope);\n } else {\n fileElem.css('visibility', 'hidden').css('position', 'absolute').css('overflow', 'hidden')\n .css('width', '0px').css('height', '0px').css('border', 'none')\n .css('margin', '0px').css('padding', '0px').attr('tabindex', '-1');\n if (elem.$$ngfRefElem) {\n elem.$$ngfRefElem.remove();\n }\n elem.$$ngfRefElem = fileElem;\n document.body.appendChild(fileElem[0]);\n }\n\n return fileElem;\n }\n\n function resetModel(evt) {\n updateModel($parse, $timeout, scope, ngModel, attr,\n getAttr(attr, 'ngfChange') || getAttr(attr, 'ngfSelect'), [], [], evt, true);\n }\n\n var initialTouchStartY = 0;\n function clickHandler(evt) {\n if (elem.attr('disabled') || disabled) return false;\n\n if (evt != null) {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (evt.type === 'touchstart') {\n initialTouchStartY = touches ? touches[0].clientY : 0;\n return true; // don't block event default\n } else {\n evt.stopPropagation();\n evt.preventDefault();\n\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentLocation = touches ? touches[0].clientY : 0;\n if (Math.abs(currentLocation - initialTouchStartY) > 20) return false;\n }\n }\n }\n\n var resetOnClick = $parse(getAttr(attr, 'ngfResetOnClick'))(scope) !== false;\n var fileElem = createFileInput(evt, resetOnClick);\n\n function clickAndAssign(evt) {\n if (evt && !elem.$$ngfProgramClick) {\n elem.$$ngfProgramClick = true;\n fileElem[0].click();\n $timeout(function() {\n delete elem.$$ngfProgramClick;\n }, 500);\n }\n if ((isInputTypeFile() || !evt) && resetOnClick) {\n elem.bind('click touchstart touchend', clickHandler);\n }\n }\n\n if (fileElem) {\n if (!evt || resetOnClick) fileElem.bind('change', changeFn);\n if (evt && resetOnClick && $parse(getAttr(attr, 'ngfResetModelOnClick'))(scope) !== false) {\n resetModel(evt);\n }\n\n // fix for android native browser < 4.4\n if (shouldClickLater(navigator.userAgent)) {\n setTimeout(function () {\n clickAndAssign(evt);\n }, 0);\n } else {\n clickAndAssign(evt);\n }\n }\n\n return false;\n }\n\n if (window.FileAPI && window.FileAPI.ngfFixIE) {\n window.FileAPI.ngfFixIE(elem, createFileInput, bindAttrToFileInput, changeFn);\n } else {\n clickHandler();\n //if (!isInputTypeFile()) {\n // elem.bind('click touchend', clickHandler);\n //}\n }\n }\n\n function shouldClickLater(ua) {\n // android below 4.4\n var m = ua.match(/Android[^\\d]*(\\d+)\\.(\\d+)/);\n if (m && m.length > 2) {\n var v = ngFileUpload.defaults.androidFixMinorVersion || 4;\n return parseInt(m[1]) < 4 || (parseInt(m[1]) === v && parseInt(m[2]) < v);\n }\n\n // safari on windows\n return ua.indexOf('Chrome') === -1 && /.*Windows.*Safari.*/.test(ua);\n }\n\n ngFileUpload.validate = function (scope, $parse, attr, file, evt) {\n if (file == null) {\n return false;\n }\n function globStringToRegex(str) {\n if (str.length > 2 && str[0] === '/' && str[str.length - 1] === '/') {\n return str.substring(1, str.length - 1);\n }\n var split = str.split(','), result = '';\n if (split.length > 1) {\n for (var i = 0; i < split.length; i++) {\n result += '(' + globStringToRegex(split[i]) + ')';\n if (i < split.length - 1) {\n result += '|';\n }\n }\n } else {\n if (str.indexOf('.') === 0) {\n str = '*' + str;\n }\n result = '^' + str.replace(new RegExp('[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\' + '-]', 'g'), '\\\\$&') + '$';\n result = result.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\n }\n return result;\n }\n\n var custom = $parse(getAttr(attr, 'ngfValidate'))(scope, {$file: file, $event: evt});\n if (custom != null && (custom === false || custom.length > 0)) {\n file.$error = custom ? custom : 'validate';\n return false;\n }\n var accept = $parse(getAttr(attr, 'ngfAccept'))(scope, {$file: file, $event: evt});\n var fileSizeMax = $parse(getAttr(attr, 'ngfMaxSize'))(scope, {$file: file, $event: evt}) || 9007199254740991;\n var fileSizeMin = $parse(getAttr(attr, 'ngfMinSize'))(scope, {$file: file, $event: evt}) || -1;\n if (accept != null && angular.isString(accept)) {\n var regexp = new RegExp(globStringToRegex(accept), 'gi');\n accept = (file.type != null && regexp.test(file.type.toLowerCase())) ||\n (file.name != null && regexp.test(file.name.toLowerCase()));\n if (!accept) {\n file.$error = 'accept';\n return false;\n }\n } else {\n if (accept === false) {\n file.$error = 'accept';\n return false;\n }\n }\n if (file.size == null) return true;\n if (file.size > fileSizeMax) {\n file.$error = 'maxSize';\n return false;\n }\n if (file.size < fileSizeMin) {\n file.$error = 'minSize';\n return false;\n }\n return true;\n };\n\n ngFileUpload.updateModel = function ($parse, $timeout, scope, ngModel, attr, fileChange,\n files, rejFiles, evt, noDelay) {\n function update() {\n var keep = $parse(getAttr(attr, 'ngfKeep'))(scope);\n if (keep === true) {\n var prevFiles = (ngModel.$modelValue || []).slice(0);\n if (!files || !files.length) {\n files = prevFiles;\n } else if ($parse(getAttr(attr, 'ngfKeepDistinct'))(scope) === true) {\n var len = prevFiles.length;\n for (var i = 0; i < files.length; i++) {\n for (var j = 0; j < len; j++) {\n if (files[i].name === prevFiles[j].name) break;\n }\n if (j === len) {\n prevFiles.push(files[i]);\n }\n }\n files = prevFiles;\n } else {\n files = prevFiles.concat(files);\n }\n }\n var file = files && files.length ? files[0] : null;\n if (ngModel) {\n var singleModel = !$parse(getAttr(attr, 'ngfMultiple'))(scope) && ! getAttr(attr, 'multiple') && !keep;\n $parse(getAttr(attr, 'ngModel')).assign(scope, singleModel ? file : files);\n $timeout(function () {\n if (ngModel) {\n ngModel.$setViewValue(singleModel ? file : (files != null && files.length === 0 ? null : files));\n }\n });\n }\n var ngfModel = getAttr(attr, 'ngfModel');\n if (ngfModel) {\n $parse(ngfModel).assign(scope, files);\n }\n\n if (getAttr(attr, 'ngModelRejected')) {\n $parse(getAttr(attr, 'ngModelRejected')).assign(scope, rejFiles);\n }\n if (fileChange) {\n $parse(fileChange)(scope, {\n $files: files,\n $file: file,\n $rejectedFiles: rejFiles,\n $event: evt\n });\n }\n }\n\n if (noDelay) {\n update();\n } else {\n $timeout(function () {\n update();\n });\n }\n };\n\n var validate = ngFileUpload.validate;\n var updateModel = ngFileUpload.updateModel;\n\n})();\n\n(function () {\n var validate = ngFileUpload.validate;\n var updateModel = ngFileUpload.updateModel;\n var getAttr = ngFileUpload.getAttrWithDefaults;\n\n ngFileUpload.directive('ngfDrop', ['$parse', '$timeout', '$location', function ($parse, $timeout, $location) {\n return {\n restrict: 'AEC',\n require: '?ngModel',\n link: function (scope, elem, attr, ngModel) {\n linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location);\n }\n };\n }]);\n\n ngFileUpload.directive('ngfNoFileDrop', function () {\n return function (scope, elem) {\n if (dropAvailable()) elem.css('display', 'none');\n };\n });\n\n ngFileUpload.directive('ngfDropAvailable', ['$parse', '$timeout', function ($parse, $timeout) {\n return function (scope, elem, attr) {\n if (dropAvailable()) {\n var fn = $parse(getAttr(attr, 'ngfDropAvailable'));\n $timeout(function () {\n fn(scope);\n if (fn.assign) {\n fn.assign(scope, true);\n }\n });\n }\n };\n }]);\n\n function linkDrop(scope, elem, attr, ngModel, $parse, $timeout, $location) {\n var available = dropAvailable();\n if (getAttr(attr, 'dropAvailable')) {\n $timeout(function () {\n if (scope[getAttr(attr, 'dropAvailable')]) {\n scope[getAttr(attr, 'dropAvailable')].value = available;\n } else {\n scope[getAttr(attr, 'dropAvailable')] = available;\n }\n });\n }\n if (!available) {\n if ($parse(getAttr(attr, 'ngfHideOnDropNotAvailable'))(scope) === true) {\n elem.css('display', 'none');\n }\n return;\n }\n\n var disabled = false;\n if (getAttr(attr, 'ngfDrop').search(/\\W+\\$files\\W+/) === -1) {\n scope.$watch(getAttr(attr, 'ngfDrop'), function(val) {\n disabled = val === false;\n });\n }\n\n var leaveTimeout = null;\n var stopPropagation = $parse(getAttr(attr, 'ngfStopPropagation'));\n var dragOverDelay = 1;\n var actualDragOverClass;\n\n elem[0].addEventListener('dragover', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n // handling dragover events from the Chrome download bar\n if (navigator.userAgent.indexOf('Chrome') > -1) {\n var b = evt.dataTransfer.effectAllowed;\n evt.dataTransfer.dropEffect = ('move' === b || 'linkMove' === b) ? 'move' : 'copy';\n }\n $timeout.cancel(leaveTimeout);\n if (!scope.actualDragOverClass) {\n actualDragOverClass = calculateDragOverClass(scope, attr, evt);\n }\n elem.addClass(actualDragOverClass);\n }, false);\n elem[0].addEventListener('dragenter', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n }, false);\n elem[0].addEventListener('dragleave', function () {\n if (elem.attr('disabled') || disabled) return;\n leaveTimeout = $timeout(function () {\n elem.removeClass(actualDragOverClass);\n actualDragOverClass = null;\n }, dragOverDelay || 1);\n }, false);\n elem[0].addEventListener('drop', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n evt.preventDefault();\n if (stopPropagation(scope)) evt.stopPropagation();\n elem.removeClass(actualDragOverClass);\n actualDragOverClass = null;\n extractFiles(evt, function (files, rejFiles) {\n updateModel($parse, $timeout, scope, ngModel, attr,\n getAttr(attr, 'ngfChange') || getAttr(attr, 'ngfDrop'), files, rejFiles, evt);\n }, $parse(getAttr(attr, 'ngfAllowDir'))(scope) !== false,\n getAttr(attr, 'multiple') || $parse(getAttr(attr, 'ngfMultiple'))(scope));\n }, false);\n elem[0].addEventListener('paste', function (evt) {\n if (elem.attr('disabled') || disabled) return;\n extractFiles(evt, function (files, rejFiles) {\n updateModel($parse, $timeout, scope, ngModel, attr,\n getAttr(attr, 'ngfChange') || getAttr(attr, 'ngfDrop'), files, rejFiles, evt);\n }, false, getAttr(attr, 'multiple') || $parse(getAttr(attr, 'ngfMultiple'))(scope));\n }, false);\n\n function calculateDragOverClass(scope, attr, evt) {\n var accepted = true;\n var items = evt.dataTransfer.items;\n if (items != null) {\n for (var i = 0; i < items.length && accepted; i++) {\n accepted = accepted &&\n (items[i].kind === 'file' || items[i].kind === '') &&\n validate(scope, $parse, attr, items[i], evt);\n }\n }\n var clazz = $parse(getAttr(attr, 'ngfDragOverClass'))(scope, {$event: evt});\n if (clazz) {\n if (clazz.delay) dragOverDelay = clazz.delay;\n if (clazz.accept) clazz = accepted ? clazz.accept : clazz.reject;\n }\n return clazz || getAttr(attr, 'ngfDragOverClass') || 'dragover';\n }\n\n function extractFiles(evt, callback, allowDir, multiple) {\n var files = [], rejFiles = [], processing = 0;\n\n function addFile(file) {\n if (validate(scope, $parse, attr, file, evt)) {\n files.push(file);\n } else {\n rejFiles.push(file);\n }\n }\n\n function traverseFileTree(files, entry, path) {\n if (entry != null) {\n if (entry.isDirectory) {\n var filePath = (path || '') + entry.name;\n addFile({name: entry.name, type: 'directory', path: filePath});\n var dirReader = entry.createReader();\n var entries = [];\n processing++;\n var readEntries = function () {\n dirReader.readEntries(function (results) {\n try {\n if (!results.length) {\n for (var i = 0; i < entries.length; i++) {\n traverseFileTree(files, entries[i], (path ? path : '') + entry.name + '/');\n }\n processing--;\n } else {\n entries = entries.concat(Array.prototype.slice.call(results || [], 0));\n readEntries();\n }\n } catch (e) {\n processing--;\n console.error(e);\n }\n }, function () {\n processing--;\n });\n };\n readEntries();\n } else {\n processing++;\n entry.file(function (file) {\n try {\n processing--;\n file.path = (path ? path : '') + file.name;\n addFile(file);\n } catch (e) {\n processing--;\n console.error(e);\n }\n }, function () {\n processing--;\n });\n }\n }\n }\n\n if (evt.type === 'paste') {\n var clipboard = evt.clipboardData || evt.originalEvent.clipboardData;\n if (clipboard && clipboard.items) {\n for (var k = 0; k < clipboard.items.length; k++) {\n if (clipboard.items[k].type.indexOf('image') !== -1) {\n addFile(clipboard.items[k].getAsFile());\n }\n }\n callback(files, rejFiles);\n }\n } else {\n var items = evt.dataTransfer.items;\n\n if (items && items.length > 0 && $location.protocol() !== 'file') {\n for (var i = 0; i < items.length; i++) {\n if (items[i].webkitGetAsEntry && items[i].webkitGetAsEntry() && items[i].webkitGetAsEntry().isDirectory) {\n var entry = items[i].webkitGetAsEntry();\n if (entry.isDirectory && !allowDir) {\n continue;\n }\n if (entry != null) {\n traverseFileTree(files, entry);\n }\n } else {\n var f = items[i].getAsFile();\n if (f != null) addFile(f);\n }\n if (!multiple && files.length > 0) break;\n }\n } else {\n var fileList = evt.dataTransfer.files;\n if (fileList != null) {\n for (var j = 0; j < fileList.length; j++) {\n addFile(fileList.item(j));\n if (!multiple && files.length > 0) {\n break;\n }\n }\n }\n }\n var delays = 0;\n (function waitForProcess(delay) {\n $timeout(function () {\n if (!processing) {\n if (!multiple && files.length > 1) {\n i = 0;\n while (files[i].type === 'directory') i++;\n files = [files[i]];\n }\n callback(files, rejFiles);\n } else {\n if (delays++ * 10 < 20 * 1000) {\n waitForProcess(10);\n }\n }\n }, delay || 0);\n })();\n }\n }\n }\n\n function dropAvailable() {\n var div = document.createElement('div');\n return ('draggable' in div) && ('ondrop' in div);\n }\n\n})();\n\n(function () {\n\n function fileToSrc(Upload, scope, $parse, attr, name, defaultName, callback) {\n if (defaultName) {\n callback($parse(defaultName)(scope));\n }\n scope.$watch(name, function (file) {\n if (!angular.isString(file)) {\n if (window.FileReader && ngFileUpload.validate(scope, $parse, attr, file, null)) {\n Upload.dataUrl(file, function (url) {\n if (callback) {\n callback(url);\n } else {\n file.dataUrl = url || $parse(defaultName)(scope);\n }\n }, $parse(attr.ngfNoObjectUrl)(scope));\n }\n } else {\n callback(file);\n }\n });\n }\n\n /** @namespace attr.ngfSrc */\n /** @namespace attr.ngfDefaultSrc */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfSrc', ['$parse', 'Upload', function ($parse, Upload) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n fileToSrc(Upload, scope, $parse, attr, attr.ngfSrc, attr.ngfDefaultSrc, function (url) {\n elem.attr('src', url);\n });\n }\n };\n }]);\n\n /** @namespace attr.ngfBackground */\n /** @namespace attr.ngfDefaultBackground */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfBackground', ['$parse', 'Upload', function ($parse, Upload) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n fileToSrc(Upload, scope, $parse, attr, attr.ngfBackground, attr.ngfDefaultBackground, function (url) {\n elem.css('background-image', 'url(' + url + ')');\n });\n }\n };\n }]);\n\n /** @namespace attr.ngfDataUrl */\n /** @namespace attr.ngfDefaultDataUrl */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfDataUrl', ['$parse', 'Upload', function ($parse, Upload) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n\n fileToSrc(Upload, scope, $parse, attr, attr.ngfDataUrl, attr.ngfDefaultDataUrl);\n }\n };\n }]);\n})();\n","require('./dist/ng-file-upload-all');\nmodule.exports = 'ngFileUpload';","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","//import '../../../bundle_config/common.js';\nimport appDependency from '../../../scripts/appDependency.js';\nimport stickyElementModule from '../scripts/_common/stickyElement/stickyElement.module.js'; //import setCssCustomPropsModule from '../scripts/_common/setCssCustomProps/setCssCustomProps.module.js';\n\nappDependency.addItem(stickyElementModule); //appDependency.addItem(setCssCustomPropsModule);\n\nimport '../scripts/_common/dropdown/dropdown.module.js';\nimport '../scripts/_common/autocompleter/autocompleter.module.js';\nimport '../scripts/_common/tabs/tabs.module.js';\nimport '../scripts/managers/managers.module.js';\nimport '../scripts/_common/zoomer/zoomer.module.js';\nimport '../scripts/_common/modal/modal.module.js';\nimport '../scripts/_common/spinbox/spinbox.module.js';\nimport '../scripts/_partials/cart/cart.module.js';\nimport '../scripts/_partials/catalog-filter/catalogFilter.module.js';\nimport '../scripts/_partials/shipping/shipping.module.js';\nimport '../scripts/_partials/payment/payment.module.js';\nimport '../styles/partials/bonus-card.scss';\nimport '../scripts/_common/carousel/carousel.module.js';\nimport '../scripts/_partials/colors-viewer/colorsViewer.module.js';\nimport '../scripts/_partials/order/order.module.js';\nimport '../scripts/_partials/product-view/productView.module.js';\nimport '../scripts/_partials/reviews/reviews.module.js';\nimport '../scripts/_partials/subscribe/subscribe.module.js';\nimport '../scripts/preorder/preorder.module.js';\nimport '../scripts/registration/registration.module.js';\nimport '../styles/views/checkout.scss';\nimport '../styles/views/product.scss';\nimport '../styles/views/news.scss';\nimport '../styles/views/brands.scss';\nimport '../styles/partials/pagenumberer.scss';\nimport '../styles/partials/login.scss';\nimport '../styles/partials/breads.scss';\nimport '../styles/partials/footer.scss';\nimport '../styles/partials/toolbar-top.scss';\nimport '../styles/common/inputs.scss';\nimport '../styles//common/buttons.scss';\nimport '../styles/common/validation.scss';\nimport '../styles/common/forms.scss';\nimport '../styles/common/custom-input.scss';\nimport '../styles/common/sidebar.scss';\nimport '../styles/common/buttons.scss';\nimport '../styles/common/forms.scss';\nimport '../styles/common/animations.scss';\nimport '../styles/common/personal-menu.scss';\nimport '../scripts/_partials/zone/zones.scss';\nimport '../styles/partials/header.scss';\nimport '../styles/partials/menu-dropdown.scss';\nimport '../styles/partials/menu-general.scss'; //import '../styles/partials/toolbar-top.scss';\n\nimport '../styles/partials/fixed-header.scss';\nimport '../styles/partials/recently-viewed-block.scss';\nimport '../styles/partials/socials.scss';\nimport '../styles/partials/price.scss';\nimport '../fonts/fonts.css';\nimport '../styles/general.scss';\nimport '../styles/views/compareproducts.scss';\nimport '../styles/views/feedback.scss';\nimport '../styles/views/home.scss';\nimport '../scripts/_common/additional-text/additionalText.module.js';\nimport '../styles/partials/popular-categories.scss';\nimport '../styles/partials/advantages.scss';\nimport '../styles/views/myAccount.scss';\nimport '../styles/views/wishlist.scss';"],"names":[],"sourceRoot":""}