app.js 216 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // install a JSONP callback for chunk loading
  3. /******/ function webpackJsonpCallback(data) {
  4. /******/ var chunkIds = data[0];
  5. /******/ var moreModules = data[1];
  6. /******/ var executeModules = data[2];
  7. /******/
  8. /******/ // add "moreModules" to the modules object,
  9. /******/ // then flag all "chunkIds" as loaded and fire callback
  10. /******/ var moduleId, chunkId, i = 0, resolves = [];
  11. /******/ for(;i < chunkIds.length; i++) {
  12. /******/ chunkId = chunkIds[i];
  13. /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
  14. /******/ resolves.push(installedChunks[chunkId][0]);
  15. /******/ }
  16. /******/ installedChunks[chunkId] = 0;
  17. /******/ }
  18. /******/ for(moduleId in moreModules) {
  19. /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
  20. /******/ modules[moduleId] = moreModules[moduleId];
  21. /******/ }
  22. /******/ }
  23. /******/ if(parentJsonpFunction) parentJsonpFunction(data);
  24. /******/
  25. /******/ while(resolves.length) {
  26. /******/ resolves.shift()();
  27. /******/ }
  28. /******/
  29. /******/ // add entry modules from loaded chunk to deferred list
  30. /******/ deferredModules.push.apply(deferredModules, executeModules || []);
  31. /******/
  32. /******/ // run deferred modules when all chunks ready
  33. /******/ return checkDeferredModules();
  34. /******/ };
  35. /******/ function checkDeferredModules() {
  36. /******/ var result;
  37. /******/ for(var i = 0; i < deferredModules.length; i++) {
  38. /******/ var deferredModule = deferredModules[i];
  39. /******/ var fulfilled = true;
  40. /******/ for(var j = 1; j < deferredModule.length; j++) {
  41. /******/ var depId = deferredModule[j];
  42. /******/ if(installedChunks[depId] !== 0) fulfilled = false;
  43. /******/ }
  44. /******/ if(fulfilled) {
  45. /******/ deferredModules.splice(i--, 1);
  46. /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
  47. /******/ }
  48. /******/ }
  49. /******/
  50. /******/ return result;
  51. /******/ }
  52. /******/ function hotDisposeChunk(chunkId) {
  53. /******/ delete installedChunks[chunkId];
  54. /******/ }
  55. /******/ var parentHotUpdateCallback = window["webpackHotUpdate"];
  56. /******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
  57. /******/ function webpackHotUpdateCallback(chunkId, moreModules) {
  58. /******/ hotAddUpdateChunk(chunkId, moreModules);
  59. /******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
  60. /******/ } ;
  61. /******/
  62. /******/ // eslint-disable-next-line no-unused-vars
  63. /******/ function hotDownloadUpdateChunk(chunkId) {
  64. /******/ var script = document.createElement("script");
  65. /******/ script.charset = "utf-8";
  66. /******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
  67. /******/ if (null) script.crossOrigin = null;
  68. /******/ document.head.appendChild(script);
  69. /******/ }
  70. /******/
  71. /******/ // eslint-disable-next-line no-unused-vars
  72. /******/ function hotDownloadManifest(requestTimeout) {
  73. /******/ requestTimeout = requestTimeout || 10000;
  74. /******/ return new Promise(function(resolve, reject) {
  75. /******/ if (typeof XMLHttpRequest === "undefined") {
  76. /******/ return reject(new Error("No browser support"));
  77. /******/ }
  78. /******/ try {
  79. /******/ var request = new XMLHttpRequest();
  80. /******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
  81. /******/ request.open("GET", requestPath, true);
  82. /******/ request.timeout = requestTimeout;
  83. /******/ request.send(null);
  84. /******/ } catch (err) {
  85. /******/ return reject(err);
  86. /******/ }
  87. /******/ request.onreadystatechange = function() {
  88. /******/ if (request.readyState !== 4) return;
  89. /******/ if (request.status === 0) {
  90. /******/ // timeout
  91. /******/ reject(
  92. /******/ new Error("Manifest request to " + requestPath + " timed out.")
  93. /******/ );
  94. /******/ } else if (request.status === 404) {
  95. /******/ // no update available
  96. /******/ resolve();
  97. /******/ } else if (request.status !== 200 && request.status !== 304) {
  98. /******/ // other failure
  99. /******/ reject(new Error("Manifest request to " + requestPath + " failed."));
  100. /******/ } else {
  101. /******/ // success
  102. /******/ try {
  103. /******/ var update = JSON.parse(request.responseText);
  104. /******/ } catch (e) {
  105. /******/ reject(e);
  106. /******/ return;
  107. /******/ }
  108. /******/ resolve(update);
  109. /******/ }
  110. /******/ };
  111. /******/ });
  112. /******/ }
  113. /******/
  114. /******/ var hotApplyOnUpdate = true;
  115. /******/ // eslint-disable-next-line no-unused-vars
  116. /******/ var hotCurrentHash = "cf45a25e2b261ab38fa6";
  117. /******/ var hotRequestTimeout = 10000;
  118. /******/ var hotCurrentModuleData = {};
  119. /******/ var hotCurrentChildModule;
  120. /******/ // eslint-disable-next-line no-unused-vars
  121. /******/ var hotCurrentParents = [];
  122. /******/ // eslint-disable-next-line no-unused-vars
  123. /******/ var hotCurrentParentsTemp = [];
  124. /******/
  125. /******/ // eslint-disable-next-line no-unused-vars
  126. /******/ function hotCreateRequire(moduleId) {
  127. /******/ var me = installedModules[moduleId];
  128. /******/ if (!me) return __webpack_require__;
  129. /******/ var fn = function(request) {
  130. /******/ if (me.hot.active) {
  131. /******/ if (installedModules[request]) {
  132. /******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
  133. /******/ installedModules[request].parents.push(moduleId);
  134. /******/ }
  135. /******/ } else {
  136. /******/ hotCurrentParents = [moduleId];
  137. /******/ hotCurrentChildModule = request;
  138. /******/ }
  139. /******/ if (me.children.indexOf(request) === -1) {
  140. /******/ me.children.push(request);
  141. /******/ }
  142. /******/ } else {
  143. /******/ console.warn(
  144. /******/ "[HMR] unexpected require(" +
  145. /******/ request +
  146. /******/ ") from disposed module " +
  147. /******/ moduleId
  148. /******/ );
  149. /******/ hotCurrentParents = [];
  150. /******/ }
  151. /******/ return __webpack_require__(request);
  152. /******/ };
  153. /******/ var ObjectFactory = function ObjectFactory(name) {
  154. /******/ return {
  155. /******/ configurable: true,
  156. /******/ enumerable: true,
  157. /******/ get: function() {
  158. /******/ return __webpack_require__[name];
  159. /******/ },
  160. /******/ set: function(value) {
  161. /******/ __webpack_require__[name] = value;
  162. /******/ }
  163. /******/ };
  164. /******/ };
  165. /******/ for (var name in __webpack_require__) {
  166. /******/ if (
  167. /******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
  168. /******/ name !== "e" &&
  169. /******/ name !== "t"
  170. /******/ ) {
  171. /******/ Object.defineProperty(fn, name, ObjectFactory(name));
  172. /******/ }
  173. /******/ }
  174. /******/ fn.e = function(chunkId) {
  175. /******/ if (hotStatus === "ready") hotSetStatus("prepare");
  176. /******/ hotChunksLoading++;
  177. /******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
  178. /******/ finishChunkLoading();
  179. /******/ throw err;
  180. /******/ });
  181. /******/
  182. /******/ function finishChunkLoading() {
  183. /******/ hotChunksLoading--;
  184. /******/ if (hotStatus === "prepare") {
  185. /******/ if (!hotWaitingFilesMap[chunkId]) {
  186. /******/ hotEnsureUpdateChunk(chunkId);
  187. /******/ }
  188. /******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
  189. /******/ hotUpdateDownloaded();
  190. /******/ }
  191. /******/ }
  192. /******/ }
  193. /******/ };
  194. /******/ fn.t = function(value, mode) {
  195. /******/ if (mode & 1) value = fn(value);
  196. /******/ return __webpack_require__.t(value, mode & ~1);
  197. /******/ };
  198. /******/ return fn;
  199. /******/ }
  200. /******/
  201. /******/ // eslint-disable-next-line no-unused-vars
  202. /******/ function hotCreateModule(moduleId) {
  203. /******/ var hot = {
  204. /******/ // private stuff
  205. /******/ _acceptedDependencies: {},
  206. /******/ _declinedDependencies: {},
  207. /******/ _selfAccepted: false,
  208. /******/ _selfDeclined: false,
  209. /******/ _selfInvalidated: false,
  210. /******/ _disposeHandlers: [],
  211. /******/ _main: hotCurrentChildModule !== moduleId,
  212. /******/
  213. /******/ // Module API
  214. /******/ active: true,
  215. /******/ accept: function(dep, callback) {
  216. /******/ if (dep === undefined) hot._selfAccepted = true;
  217. /******/ else if (typeof dep === "function") hot._selfAccepted = dep;
  218. /******/ else if (typeof dep === "object")
  219. /******/ for (var i = 0; i < dep.length; i++)
  220. /******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
  221. /******/ else hot._acceptedDependencies[dep] = callback || function() {};
  222. /******/ },
  223. /******/ decline: function(dep) {
  224. /******/ if (dep === undefined) hot._selfDeclined = true;
  225. /******/ else if (typeof dep === "object")
  226. /******/ for (var i = 0; i < dep.length; i++)
  227. /******/ hot._declinedDependencies[dep[i]] = true;
  228. /******/ else hot._declinedDependencies[dep] = true;
  229. /******/ },
  230. /******/ dispose: function(callback) {
  231. /******/ hot._disposeHandlers.push(callback);
  232. /******/ },
  233. /******/ addDisposeHandler: function(callback) {
  234. /******/ hot._disposeHandlers.push(callback);
  235. /******/ },
  236. /******/ removeDisposeHandler: function(callback) {
  237. /******/ var idx = hot._disposeHandlers.indexOf(callback);
  238. /******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
  239. /******/ },
  240. /******/ invalidate: function() {
  241. /******/ this._selfInvalidated = true;
  242. /******/ switch (hotStatus) {
  243. /******/ case "idle":
  244. /******/ hotUpdate = {};
  245. /******/ hotUpdate[moduleId] = modules[moduleId];
  246. /******/ hotSetStatus("ready");
  247. /******/ break;
  248. /******/ case "ready":
  249. /******/ hotApplyInvalidatedModule(moduleId);
  250. /******/ break;
  251. /******/ case "prepare":
  252. /******/ case "check":
  253. /******/ case "dispose":
  254. /******/ case "apply":
  255. /******/ (hotQueuedInvalidatedModules =
  256. /******/ hotQueuedInvalidatedModules || []).push(moduleId);
  257. /******/ break;
  258. /******/ default:
  259. /******/ // ignore requests in error states
  260. /******/ break;
  261. /******/ }
  262. /******/ },
  263. /******/
  264. /******/ // Management API
  265. /******/ check: hotCheck,
  266. /******/ apply: hotApply,
  267. /******/ status: function(l) {
  268. /******/ if (!l) return hotStatus;
  269. /******/ hotStatusHandlers.push(l);
  270. /******/ },
  271. /******/ addStatusHandler: function(l) {
  272. /******/ hotStatusHandlers.push(l);
  273. /******/ },
  274. /******/ removeStatusHandler: function(l) {
  275. /******/ var idx = hotStatusHandlers.indexOf(l);
  276. /******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
  277. /******/ },
  278. /******/
  279. /******/ //inherit from previous dispose call
  280. /******/ data: hotCurrentModuleData[moduleId]
  281. /******/ };
  282. /******/ hotCurrentChildModule = undefined;
  283. /******/ return hot;
  284. /******/ }
  285. /******/
  286. /******/ var hotStatusHandlers = [];
  287. /******/ var hotStatus = "idle";
  288. /******/
  289. /******/ function hotSetStatus(newStatus) {
  290. /******/ hotStatus = newStatus;
  291. /******/ for (var i = 0; i < hotStatusHandlers.length; i++)
  292. /******/ hotStatusHandlers[i].call(null, newStatus);
  293. /******/ }
  294. /******/
  295. /******/ // while downloading
  296. /******/ var hotWaitingFiles = 0;
  297. /******/ var hotChunksLoading = 0;
  298. /******/ var hotWaitingFilesMap = {};
  299. /******/ var hotRequestedFilesMap = {};
  300. /******/ var hotAvailableFilesMap = {};
  301. /******/ var hotDeferred;
  302. /******/
  303. /******/ // The update info
  304. /******/ var hotUpdate, hotUpdateNewHash, hotQueuedInvalidatedModules;
  305. /******/
  306. /******/ function toModuleId(id) {
  307. /******/ var isNumber = +id + "" === id;
  308. /******/ return isNumber ? +id : id;
  309. /******/ }
  310. /******/
  311. /******/ function hotCheck(apply) {
  312. /******/ if (hotStatus !== "idle") {
  313. /******/ throw new Error("check() is only allowed in idle status");
  314. /******/ }
  315. /******/ hotApplyOnUpdate = apply;
  316. /******/ hotSetStatus("check");
  317. /******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
  318. /******/ if (!update) {
  319. /******/ hotSetStatus(hotApplyInvalidatedModules() ? "ready" : "idle");
  320. /******/ return null;
  321. /******/ }
  322. /******/ hotRequestedFilesMap = {};
  323. /******/ hotWaitingFilesMap = {};
  324. /******/ hotAvailableFilesMap = update.c;
  325. /******/ hotUpdateNewHash = update.h;
  326. /******/
  327. /******/ hotSetStatus("prepare");
  328. /******/ var promise = new Promise(function(resolve, reject) {
  329. /******/ hotDeferred = {
  330. /******/ resolve: resolve,
  331. /******/ reject: reject
  332. /******/ };
  333. /******/ });
  334. /******/ hotUpdate = {};
  335. /******/ for(var chunkId in installedChunks)
  336. /******/ // eslint-disable-next-line no-lone-blocks
  337. /******/ {
  338. /******/ hotEnsureUpdateChunk(chunkId);
  339. /******/ }
  340. /******/ if (
  341. /******/ hotStatus === "prepare" &&
  342. /******/ hotChunksLoading === 0 &&
  343. /******/ hotWaitingFiles === 0
  344. /******/ ) {
  345. /******/ hotUpdateDownloaded();
  346. /******/ }
  347. /******/ return promise;
  348. /******/ });
  349. /******/ }
  350. /******/
  351. /******/ // eslint-disable-next-line no-unused-vars
  352. /******/ function hotAddUpdateChunk(chunkId, moreModules) {
  353. /******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
  354. /******/ return;
  355. /******/ hotRequestedFilesMap[chunkId] = false;
  356. /******/ for (var moduleId in moreModules) {
  357. /******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
  358. /******/ hotUpdate[moduleId] = moreModules[moduleId];
  359. /******/ }
  360. /******/ }
  361. /******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
  362. /******/ hotUpdateDownloaded();
  363. /******/ }
  364. /******/ }
  365. /******/
  366. /******/ function hotEnsureUpdateChunk(chunkId) {
  367. /******/ if (!hotAvailableFilesMap[chunkId]) {
  368. /******/ hotWaitingFilesMap[chunkId] = true;
  369. /******/ } else {
  370. /******/ hotRequestedFilesMap[chunkId] = true;
  371. /******/ hotWaitingFiles++;
  372. /******/ hotDownloadUpdateChunk(chunkId);
  373. /******/ }
  374. /******/ }
  375. /******/
  376. /******/ function hotUpdateDownloaded() {
  377. /******/ hotSetStatus("ready");
  378. /******/ var deferred = hotDeferred;
  379. /******/ hotDeferred = null;
  380. /******/ if (!deferred) return;
  381. /******/ if (hotApplyOnUpdate) {
  382. /******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
  383. /******/ // avoid triggering uncaught exception warning in Chrome.
  384. /******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
  385. /******/ Promise.resolve()
  386. /******/ .then(function() {
  387. /******/ return hotApply(hotApplyOnUpdate);
  388. /******/ })
  389. /******/ .then(
  390. /******/ function(result) {
  391. /******/ deferred.resolve(result);
  392. /******/ },
  393. /******/ function(err) {
  394. /******/ deferred.reject(err);
  395. /******/ }
  396. /******/ );
  397. /******/ } else {
  398. /******/ var outdatedModules = [];
  399. /******/ for (var id in hotUpdate) {
  400. /******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
  401. /******/ outdatedModules.push(toModuleId(id));
  402. /******/ }
  403. /******/ }
  404. /******/ deferred.resolve(outdatedModules);
  405. /******/ }
  406. /******/ }
  407. /******/
  408. /******/ function hotApply(options) {
  409. /******/ if (hotStatus !== "ready")
  410. /******/ throw new Error("apply() is only allowed in ready status");
  411. /******/ options = options || {};
  412. /******/ return hotApplyInternal(options);
  413. /******/ }
  414. /******/
  415. /******/ function hotApplyInternal(options) {
  416. /******/ hotApplyInvalidatedModules();
  417. /******/
  418. /******/ var cb;
  419. /******/ var i;
  420. /******/ var j;
  421. /******/ var module;
  422. /******/ var moduleId;
  423. /******/
  424. /******/ function getAffectedStuff(updateModuleId) {
  425. /******/ var outdatedModules = [updateModuleId];
  426. /******/ var outdatedDependencies = {};
  427. /******/
  428. /******/ var queue = outdatedModules.map(function(id) {
  429. /******/ return {
  430. /******/ chain: [id],
  431. /******/ id: id
  432. /******/ };
  433. /******/ });
  434. /******/ while (queue.length > 0) {
  435. /******/ var queueItem = queue.pop();
  436. /******/ var moduleId = queueItem.id;
  437. /******/ var chain = queueItem.chain;
  438. /******/ module = installedModules[moduleId];
  439. /******/ if (
  440. /******/ !module ||
  441. /******/ (module.hot._selfAccepted && !module.hot._selfInvalidated)
  442. /******/ )
  443. /******/ continue;
  444. /******/ if (module.hot._selfDeclined) {
  445. /******/ return {
  446. /******/ type: "self-declined",
  447. /******/ chain: chain,
  448. /******/ moduleId: moduleId
  449. /******/ };
  450. /******/ }
  451. /******/ if (module.hot._main) {
  452. /******/ return {
  453. /******/ type: "unaccepted",
  454. /******/ chain: chain,
  455. /******/ moduleId: moduleId
  456. /******/ };
  457. /******/ }
  458. /******/ for (var i = 0; i < module.parents.length; i++) {
  459. /******/ var parentId = module.parents[i];
  460. /******/ var parent = installedModules[parentId];
  461. /******/ if (!parent) continue;
  462. /******/ if (parent.hot._declinedDependencies[moduleId]) {
  463. /******/ return {
  464. /******/ type: "declined",
  465. /******/ chain: chain.concat([parentId]),
  466. /******/ moduleId: moduleId,
  467. /******/ parentId: parentId
  468. /******/ };
  469. /******/ }
  470. /******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
  471. /******/ if (parent.hot._acceptedDependencies[moduleId]) {
  472. /******/ if (!outdatedDependencies[parentId])
  473. /******/ outdatedDependencies[parentId] = [];
  474. /******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
  475. /******/ continue;
  476. /******/ }
  477. /******/ delete outdatedDependencies[parentId];
  478. /******/ outdatedModules.push(parentId);
  479. /******/ queue.push({
  480. /******/ chain: chain.concat([parentId]),
  481. /******/ id: parentId
  482. /******/ });
  483. /******/ }
  484. /******/ }
  485. /******/
  486. /******/ return {
  487. /******/ type: "accepted",
  488. /******/ moduleId: updateModuleId,
  489. /******/ outdatedModules: outdatedModules,
  490. /******/ outdatedDependencies: outdatedDependencies
  491. /******/ };
  492. /******/ }
  493. /******/
  494. /******/ function addAllToSet(a, b) {
  495. /******/ for (var i = 0; i < b.length; i++) {
  496. /******/ var item = b[i];
  497. /******/ if (a.indexOf(item) === -1) a.push(item);
  498. /******/ }
  499. /******/ }
  500. /******/
  501. /******/ // at begin all updates modules are outdated
  502. /******/ // the "outdated" status can propagate to parents if they don't accept the children
  503. /******/ var outdatedDependencies = {};
  504. /******/ var outdatedModules = [];
  505. /******/ var appliedUpdate = {};
  506. /******/
  507. /******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
  508. /******/ console.warn(
  509. /******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
  510. /******/ );
  511. /******/ };
  512. /******/
  513. /******/ for (var id in hotUpdate) {
  514. /******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
  515. /******/ moduleId = toModuleId(id);
  516. /******/ /** @type {TODO} */
  517. /******/ var result;
  518. /******/ if (hotUpdate[id]) {
  519. /******/ result = getAffectedStuff(moduleId);
  520. /******/ } else {
  521. /******/ result = {
  522. /******/ type: "disposed",
  523. /******/ moduleId: id
  524. /******/ };
  525. /******/ }
  526. /******/ /** @type {Error|false} */
  527. /******/ var abortError = false;
  528. /******/ var doApply = false;
  529. /******/ var doDispose = false;
  530. /******/ var chainInfo = "";
  531. /******/ if (result.chain) {
  532. /******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
  533. /******/ }
  534. /******/ switch (result.type) {
  535. /******/ case "self-declined":
  536. /******/ if (options.onDeclined) options.onDeclined(result);
  537. /******/ if (!options.ignoreDeclined)
  538. /******/ abortError = new Error(
  539. /******/ "Aborted because of self decline: " +
  540. /******/ result.moduleId +
  541. /******/ chainInfo
  542. /******/ );
  543. /******/ break;
  544. /******/ case "declined":
  545. /******/ if (options.onDeclined) options.onDeclined(result);
  546. /******/ if (!options.ignoreDeclined)
  547. /******/ abortError = new Error(
  548. /******/ "Aborted because of declined dependency: " +
  549. /******/ result.moduleId +
  550. /******/ " in " +
  551. /******/ result.parentId +
  552. /******/ chainInfo
  553. /******/ );
  554. /******/ break;
  555. /******/ case "unaccepted":
  556. /******/ if (options.onUnaccepted) options.onUnaccepted(result);
  557. /******/ if (!options.ignoreUnaccepted)
  558. /******/ abortError = new Error(
  559. /******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
  560. /******/ );
  561. /******/ break;
  562. /******/ case "accepted":
  563. /******/ if (options.onAccepted) options.onAccepted(result);
  564. /******/ doApply = true;
  565. /******/ break;
  566. /******/ case "disposed":
  567. /******/ if (options.onDisposed) options.onDisposed(result);
  568. /******/ doDispose = true;
  569. /******/ break;
  570. /******/ default:
  571. /******/ throw new Error("Unexception type " + result.type);
  572. /******/ }
  573. /******/ if (abortError) {
  574. /******/ hotSetStatus("abort");
  575. /******/ return Promise.reject(abortError);
  576. /******/ }
  577. /******/ if (doApply) {
  578. /******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
  579. /******/ addAllToSet(outdatedModules, result.outdatedModules);
  580. /******/ for (moduleId in result.outdatedDependencies) {
  581. /******/ if (
  582. /******/ Object.prototype.hasOwnProperty.call(
  583. /******/ result.outdatedDependencies,
  584. /******/ moduleId
  585. /******/ )
  586. /******/ ) {
  587. /******/ if (!outdatedDependencies[moduleId])
  588. /******/ outdatedDependencies[moduleId] = [];
  589. /******/ addAllToSet(
  590. /******/ outdatedDependencies[moduleId],
  591. /******/ result.outdatedDependencies[moduleId]
  592. /******/ );
  593. /******/ }
  594. /******/ }
  595. /******/ }
  596. /******/ if (doDispose) {
  597. /******/ addAllToSet(outdatedModules, [result.moduleId]);
  598. /******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
  599. /******/ }
  600. /******/ }
  601. /******/ }
  602. /******/
  603. /******/ // Store self accepted outdated modules to require them later by the module system
  604. /******/ var outdatedSelfAcceptedModules = [];
  605. /******/ for (i = 0; i < outdatedModules.length; i++) {
  606. /******/ moduleId = outdatedModules[i];
  607. /******/ if (
  608. /******/ installedModules[moduleId] &&
  609. /******/ installedModules[moduleId].hot._selfAccepted &&
  610. /******/ // removed self-accepted modules should not be required
  611. /******/ appliedUpdate[moduleId] !== warnUnexpectedRequire &&
  612. /******/ // when called invalidate self-accepting is not possible
  613. /******/ !installedModules[moduleId].hot._selfInvalidated
  614. /******/ ) {
  615. /******/ outdatedSelfAcceptedModules.push({
  616. /******/ module: moduleId,
  617. /******/ parents: installedModules[moduleId].parents.slice(),
  618. /******/ errorHandler: installedModules[moduleId].hot._selfAccepted
  619. /******/ });
  620. /******/ }
  621. /******/ }
  622. /******/
  623. /******/ // Now in "dispose" phase
  624. /******/ hotSetStatus("dispose");
  625. /******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
  626. /******/ if (hotAvailableFilesMap[chunkId] === false) {
  627. /******/ hotDisposeChunk(chunkId);
  628. /******/ }
  629. /******/ });
  630. /******/
  631. /******/ var idx;
  632. /******/ var queue = outdatedModules.slice();
  633. /******/ while (queue.length > 0) {
  634. /******/ moduleId = queue.pop();
  635. /******/ module = installedModules[moduleId];
  636. /******/ if (!module) continue;
  637. /******/
  638. /******/ var data = {};
  639. /******/
  640. /******/ // Call dispose handlers
  641. /******/ var disposeHandlers = module.hot._disposeHandlers;
  642. /******/ for (j = 0; j < disposeHandlers.length; j++) {
  643. /******/ cb = disposeHandlers[j];
  644. /******/ cb(data);
  645. /******/ }
  646. /******/ hotCurrentModuleData[moduleId] = data;
  647. /******/
  648. /******/ // disable module (this disables requires from this module)
  649. /******/ module.hot.active = false;
  650. /******/
  651. /******/ // remove module from cache
  652. /******/ delete installedModules[moduleId];
  653. /******/
  654. /******/ // when disposing there is no need to call dispose handler
  655. /******/ delete outdatedDependencies[moduleId];
  656. /******/
  657. /******/ // remove "parents" references from all children
  658. /******/ for (j = 0; j < module.children.length; j++) {
  659. /******/ var child = installedModules[module.children[j]];
  660. /******/ if (!child) continue;
  661. /******/ idx = child.parents.indexOf(moduleId);
  662. /******/ if (idx >= 0) {
  663. /******/ child.parents.splice(idx, 1);
  664. /******/ }
  665. /******/ }
  666. /******/ }
  667. /******/
  668. /******/ // remove outdated dependency from module children
  669. /******/ var dependency;
  670. /******/ var moduleOutdatedDependencies;
  671. /******/ for (moduleId in outdatedDependencies) {
  672. /******/ if (
  673. /******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
  674. /******/ ) {
  675. /******/ module = installedModules[moduleId];
  676. /******/ if (module) {
  677. /******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
  678. /******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
  679. /******/ dependency = moduleOutdatedDependencies[j];
  680. /******/ idx = module.children.indexOf(dependency);
  681. /******/ if (idx >= 0) module.children.splice(idx, 1);
  682. /******/ }
  683. /******/ }
  684. /******/ }
  685. /******/ }
  686. /******/
  687. /******/ // Now in "apply" phase
  688. /******/ hotSetStatus("apply");
  689. /******/
  690. /******/ if (hotUpdateNewHash !== undefined) {
  691. /******/ hotCurrentHash = hotUpdateNewHash;
  692. /******/ hotUpdateNewHash = undefined;
  693. /******/ }
  694. /******/ hotUpdate = undefined;
  695. /******/
  696. /******/ // insert new code
  697. /******/ for (moduleId in appliedUpdate) {
  698. /******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
  699. /******/ modules[moduleId] = appliedUpdate[moduleId];
  700. /******/ }
  701. /******/ }
  702. /******/
  703. /******/ // call accept handlers
  704. /******/ var error = null;
  705. /******/ for (moduleId in outdatedDependencies) {
  706. /******/ if (
  707. /******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
  708. /******/ ) {
  709. /******/ module = installedModules[moduleId];
  710. /******/ if (module) {
  711. /******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
  712. /******/ var callbacks = [];
  713. /******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
  714. /******/ dependency = moduleOutdatedDependencies[i];
  715. /******/ cb = module.hot._acceptedDependencies[dependency];
  716. /******/ if (cb) {
  717. /******/ if (callbacks.indexOf(cb) !== -1) continue;
  718. /******/ callbacks.push(cb);
  719. /******/ }
  720. /******/ }
  721. /******/ for (i = 0; i < callbacks.length; i++) {
  722. /******/ cb = callbacks[i];
  723. /******/ try {
  724. /******/ cb(moduleOutdatedDependencies);
  725. /******/ } catch (err) {
  726. /******/ if (options.onErrored) {
  727. /******/ options.onErrored({
  728. /******/ type: "accept-errored",
  729. /******/ moduleId: moduleId,
  730. /******/ dependencyId: moduleOutdatedDependencies[i],
  731. /******/ error: err
  732. /******/ });
  733. /******/ }
  734. /******/ if (!options.ignoreErrored) {
  735. /******/ if (!error) error = err;
  736. /******/ }
  737. /******/ }
  738. /******/ }
  739. /******/ }
  740. /******/ }
  741. /******/ }
  742. /******/
  743. /******/ // Load self accepted modules
  744. /******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
  745. /******/ var item = outdatedSelfAcceptedModules[i];
  746. /******/ moduleId = item.module;
  747. /******/ hotCurrentParents = item.parents;
  748. /******/ hotCurrentChildModule = moduleId;
  749. /******/ try {
  750. /******/ __webpack_require__(moduleId);
  751. /******/ } catch (err) {
  752. /******/ if (typeof item.errorHandler === "function") {
  753. /******/ try {
  754. /******/ item.errorHandler(err);
  755. /******/ } catch (err2) {
  756. /******/ if (options.onErrored) {
  757. /******/ options.onErrored({
  758. /******/ type: "self-accept-error-handler-errored",
  759. /******/ moduleId: moduleId,
  760. /******/ error: err2,
  761. /******/ originalError: err
  762. /******/ });
  763. /******/ }
  764. /******/ if (!options.ignoreErrored) {
  765. /******/ if (!error) error = err2;
  766. /******/ }
  767. /******/ if (!error) error = err;
  768. /******/ }
  769. /******/ } else {
  770. /******/ if (options.onErrored) {
  771. /******/ options.onErrored({
  772. /******/ type: "self-accept-errored",
  773. /******/ moduleId: moduleId,
  774. /******/ error: err
  775. /******/ });
  776. /******/ }
  777. /******/ if (!options.ignoreErrored) {
  778. /******/ if (!error) error = err;
  779. /******/ }
  780. /******/ }
  781. /******/ }
  782. /******/ }
  783. /******/
  784. /******/ // handle errors in accept handlers and self accepted module load
  785. /******/ if (error) {
  786. /******/ hotSetStatus("fail");
  787. /******/ return Promise.reject(error);
  788. /******/ }
  789. /******/
  790. /******/ if (hotQueuedInvalidatedModules) {
  791. /******/ return hotApplyInternal(options).then(function(list) {
  792. /******/ outdatedModules.forEach(function(moduleId) {
  793. /******/ if (list.indexOf(moduleId) < 0) list.push(moduleId);
  794. /******/ });
  795. /******/ return list;
  796. /******/ });
  797. /******/ }
  798. /******/
  799. /******/ hotSetStatus("idle");
  800. /******/ return new Promise(function(resolve) {
  801. /******/ resolve(outdatedModules);
  802. /******/ });
  803. /******/ }
  804. /******/
  805. /******/ function hotApplyInvalidatedModules() {
  806. /******/ if (hotQueuedInvalidatedModules) {
  807. /******/ if (!hotUpdate) hotUpdate = {};
  808. /******/ hotQueuedInvalidatedModules.forEach(hotApplyInvalidatedModule);
  809. /******/ hotQueuedInvalidatedModules = undefined;
  810. /******/ return true;
  811. /******/ }
  812. /******/ }
  813. /******/
  814. /******/ function hotApplyInvalidatedModule(moduleId) {
  815. /******/ if (!Object.prototype.hasOwnProperty.call(hotUpdate, moduleId))
  816. /******/ hotUpdate[moduleId] = modules[moduleId];
  817. /******/ }
  818. /******/
  819. /******/ // The module cache
  820. /******/ var installedModules = {};
  821. /******/
  822. /******/ // object to store loaded and loading chunks
  823. /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
  824. /******/ // Promise = chunk loading, 0 = chunk loaded
  825. /******/ var installedChunks = {
  826. /******/ "main": 0
  827. /******/ };
  828. /******/
  829. /******/ var deferredModules = [];
  830. /******/
  831. /******/ // The require function
  832. /******/ function __webpack_require__(moduleId) {
  833. /******/
  834. /******/ // Check if module is in cache
  835. /******/ if(installedModules[moduleId]) {
  836. /******/ return installedModules[moduleId].exports;
  837. /******/ }
  838. /******/ // Create a new module (and put it into the cache)
  839. /******/ var module = installedModules[moduleId] = {
  840. /******/ i: moduleId,
  841. /******/ l: false,
  842. /******/ exports: {},
  843. /******/ hot: hotCreateModule(moduleId),
  844. /******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
  845. /******/ children: []
  846. /******/ };
  847. /******/
  848. /******/ // Execute the module function
  849. /******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
  850. /******/
  851. /******/ // Flag the module as loaded
  852. /******/ module.l = true;
  853. /******/
  854. /******/ // Return the exports of the module
  855. /******/ return module.exports;
  856. /******/ }
  857. /******/
  858. /******/
  859. /******/ // expose the modules object (__webpack_modules__)
  860. /******/ __webpack_require__.m = modules;
  861. /******/
  862. /******/ // expose the module cache
  863. /******/ __webpack_require__.c = installedModules;
  864. /******/
  865. /******/ // define getter function for harmony exports
  866. /******/ __webpack_require__.d = function(exports, name, getter) {
  867. /******/ if(!__webpack_require__.o(exports, name)) {
  868. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  869. /******/ }
  870. /******/ };
  871. /******/
  872. /******/ // define __esModule on exports
  873. /******/ __webpack_require__.r = function(exports) {
  874. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  875. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  876. /******/ }
  877. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  878. /******/ };
  879. /******/
  880. /******/ // create a fake namespace object
  881. /******/ // mode & 1: value is a module id, require it
  882. /******/ // mode & 2: merge all properties of value into the ns
  883. /******/ // mode & 4: return value when already ns object
  884. /******/ // mode & 8|1: behave like require
  885. /******/ __webpack_require__.t = function(value, mode) {
  886. /******/ if(mode & 1) value = __webpack_require__(value);
  887. /******/ if(mode & 8) return value;
  888. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  889. /******/ var ns = Object.create(null);
  890. /******/ __webpack_require__.r(ns);
  891. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  892. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  893. /******/ return ns;
  894. /******/ };
  895. /******/
  896. /******/ // getDefaultExport function for compatibility with non-harmony modules
  897. /******/ __webpack_require__.n = function(module) {
  898. /******/ var getter = module && module.__esModule ?
  899. /******/ function getDefault() { return module['default']; } :
  900. /******/ function getModuleExports() { return module; };
  901. /******/ __webpack_require__.d(getter, 'a', getter);
  902. /******/ return getter;
  903. /******/ };
  904. /******/
  905. /******/ // Object.prototype.hasOwnProperty.call
  906. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  907. /******/
  908. /******/ // __webpack_public_path__
  909. /******/ __webpack_require__.p = "";
  910. /******/
  911. /******/ // __webpack_hash__
  912. /******/ __webpack_require__.h = function() { return hotCurrentHash; };
  913. /******/
  914. /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
  915. /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
  916. /******/ jsonpArray.push = webpackJsonpCallback;
  917. /******/ jsonpArray = jsonpArray.slice();
  918. /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
  919. /******/ var parentJsonpFunction = oldJsonpFunction;
  920. /******/
  921. /******/
  922. /******/ // add entry module to deferred list
  923. /******/ deferredModules.push([0,"vendors~main"]);
  924. /******/ // run deferred modules when ready
  925. /******/ return checkDeferredModules();
  926. /******/ })
  927. /************************************************************************/
  928. /******/ ({
  929. /***/ "./src/app.js":
  930. /*!********************!*\
  931. !*** ./src/app.js ***!
  932. \********************/
  933. /*! no exports provided */
  934. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  935. "use strict";
  936. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var framework7_framework7_esm_bundle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! framework7/framework7.esm.bundle.js */ \"./node_modules/framework7/framework7.esm.bundle.js\");\n/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! chart.js/auto */ \"./node_modules/chart.js/auto/auto.esm.js\");\n/* harmony import */ var _chartutils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./chartutils.js */ \"./src/chartutils.js\");\n/* harmony import */ var framework7_css_framework7_bundle_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! framework7/css/framework7.bundle.css */ \"./node_modules/framework7/css/framework7.bundle.css\");\n/* harmony import */ var framework7_css_framework7_bundle_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(framework7_css_framework7_bundle_css__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _css_icons_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./css/icons.css */ \"./src/css/icons.css\");\n/* harmony import */ var _css_icons_css__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_css_icons_css__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _css_app_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./css/app.css */ \"./src/css/app.css\");\n/* harmony import */ var _css_app_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_css_app_css__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _routes_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./routes.js */ \"./src/routes.js\");\n/* harmony import */ var _tools_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tools.js */ \"./src/tools.js\");\n/* harmony import */ var sortablejs_modular_sortable_complete_esm_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! sortablejs/modular/sortable.complete.esm.js */ \"./node_modules/sortablejs/modular/sortable.complete.esm.js\");\n/* harmony import */ var _tr_en_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tr-en.js */ \"./src/tr-en.js\");\n// Import F7\n\n // Chart\n\n\nglobal.Chart = chart_js_auto__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n\nglobal.ChartUtils = _chartutils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nconsole.log(_chartutils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]); // Import F7 Styles\n\n // Import Icons and App Custom Styles\n\n\n // Import Routes\n\n // Import Tools\n\n\nglobal.tools = _tools_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; // Import Sortable\n\n\nglobal.Sortable = sortablejs_modular_sortable_complete_esm_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; // TR for arteries\n\nglobal.tr = [];\n\nglobal.tr['en'] = _tr_en_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; // Dom7\n\nglobal.$$ = framework7_framework7_esm_bundle_js__WEBPACK_IMPORTED_MODULE_0__[\"Dom7\"]; // Init Framework7\n\nglobal.app = new framework7_framework7_esm_bundle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n root: '#app',\n id: 'AppID',\n // App bundle ID\n name: \"M'AthCloud Clinical Trial Admin\",\n // App name\n theme: 'md',\n // MD\n dialog: {\n title: \"M'AthCloud Clinical Trial Admin\"\n },\n // Enable panel left visibility breakpoint\n panel: {\n leftBreakpoint: 960\n },\n popup: {\n closeByBackdropClick: false\n },\n on: {\n init: function init() {\n var that = this;\n setTimeout(function () {\n // Try reset token\n try {\n var password_token = _tools_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getQueryVariable('password_token');\n app.dialog.password(\"Please enter your new password\", \"Password\", function (newPassword1) {\n app.dialog.password(\"Please confirm your new password\", \"Password\", function (newPassword2) {\n if (newPassword1 != newPassword2) {\n app.dialog.alert(\"Please enter the same password twice.\");\n } else {\n // Save password\n var data = {\n token: password_token,\n newPassword: newPassword1,\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin_account/password/', data, function (data) {\n console.log('ct_admin/password', data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'password_strength':\n app.dialog.alert(\"Your password must contains a numeral, a lowercase and an uppercase and must at least be 8 characters long.\");\n break;\n\n case 'invalid_email':\n app.dialog.alert(\"Invalid email address.\");\n break;\n\n default:\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n location = app.data.config.appBaseURL;\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n }\n });\n });\n } catch (e) {\n // Try previous token\n if (localStorage.getItem('jwtToken') !== null) {\n setTimeout(function () {\n app.methods.go(localStorage.jwtToken);\n }, 0);\n } else {\n // Front page\n that.popup.open('#popup-front', true);\n setTimeout(function () {\n app.views.frontView.router.navigate({\n url: '/front-signin/'\n }, {\n ignoreCache: true,\n reloadCurrent: true\n });\n\n if (localStorage.getItem('message') !== null) {\n app.notification.create({\n icon: '<i class=\"icon material-icons\">info</i>',\n title: 'Notification',\n text: localStorage.message,\n closeTimeout: 10000,\n closeButton: true\n }).open(); // cleanup\n\n localStorage.removeItem('message');\n }\n }, 0);\n }\n }\n }, 0);\n },\n pageInit: function pageInit(e, page) {}\n },\n // App routes\n routes: _routes_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n // App root data\n data: function data() {\n var appLocation = location.protocol + '//' + location.hostname + ':' + location.port,\n apiLocation = location.protocol + '//' + location.hostname + ':' + 10302;\n\n if (location.hostname == 'cro.ipsocloud.com') {\n appLocation = 'https://cro.ipsocloud.com';\n apiLocation = 'https://api.ipsocloud.com';\n }\n\n console.log('Using API server at: ' + apiLocation);\n console.log('Using Web server at: ' + appLocation);\n return {\n config: {\n apiBaseURL: apiLocation + '/api/v1',\n storageBaseURL: apiLocation + '/storage',\n appBaseURL: appLocation\n },\n tokens: {\n jwt: '',\n api: ''\n },\n user: {\n email: null\n }\n };\n },\n // App root methods\n methods: {\n refreshToken: function refreshToken(data) {\n if (data.newToken) {\n app.data.tokens.jwt = data.newToken; // After the following setup all XHR requests will have additional 'Autorization' header\n\n app.request.setup({\n headers: {\n 'Authorization': 'JWT ' + app.data.tokens.jwt\n }\n }); // Save session\n\n localStorage.jwtToken = app.data.tokens.jwt;\n } else {\n console.log(\"refreshToken() no new token\");\n }\n },\n go: function go(token) {\n app.data.tokens.jwt = token; // After the following setup all XHR requests will have additional 'Autorization' header\n\n app.request.setup({\n headers: {\n 'Authorization': 'JWT ' + app.data.tokens.jwt\n }\n }); // Save session\n\n localStorage.jwtToken = app.data.tokens.jwt; // Load default content\n\n app.views.leftView.router.navigate({\n url: '/menu/'\n }, {\n ignoreCache: true,\n reloadCurrent: true\n });\n app.views.workspaceView.router.navigate({\n url: '/default/'\n });\n },\n signout: function signout(optionalMessage) {\n localStorage.removeItem('jwtToken');\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin_/signout/?apiKey=').then(function (data) {\n console.log(\"ct_admin/signout\", data);\n app.preloader.hide();\n app.data.tokens.jwt = ''; // After the following setup all XHR requests will NOT have additional 'Autorization' header\n\n app.request.setup({\n headers: {\n 'Authorization': ''\n }\n }); // Back to home\n\n if (optionalMessage) {\n localStorage.message = optionalMessage;\n }\n\n location.reload();\n }).catch(function (e) {\n console.log(e);\n app.preloader.hide();\n app.dialog.alert(\"Le serveur est indisponible.\");\n });\n },\n signin: function signin() {\n var username = $$('.login-screen-content [name=\"username\"]').val();\n var password = $$('.login-screen-content [name=\"password\"]').val();\n var store = $$('.login-screen-content [name=\"store\"]').is(\":checked\");\n console.log(store); // Check consistency\n\n if (username.trim() == '') {\n app.dialog.alert(\"Vous n'avez pas renseigné votre e-mail...\");\n return;\n }\n\n if (password.trim() == '') {\n app.dialog.alert(\"Vous n'avez pas renseigné votre mot-de-passe...\");\n return;\n } // \n\n\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin_/signin/' + username + '/' + password + '/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/signin\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'internal_error':\n app.dialog.alert(\"Nous ne pouvons pas créer ce compte, une erreur interne est survenue.\");\n break;\n\n case 'unknown':\n case 'bad_password':\n app.dialog.alert(\"Informations incorrectes. Vérifez les éléments que vous avez saisi.\");\n break;\n\n default:\n app.dialog.alert(\"Connexion échouée (\" + data.message + \").\");\n break;\n }\n } else {\n // store data\n if (store) {\n localStorage.username = username;\n localStorage.password = password;\n } else {\n localStorage.removeItem('username');\n localStorage.removeItem('password');\n } // go\n\n\n app.popup.close('#popup-front');\n app.methods.go(data.token);\n }\n }).catch(function (e) {\n console.log(e);\n app.preloader.hide();\n app.dialog.alert(\"Le serveur est indisponible.\");\n });\n }\n }\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/app.js?");
  937. /***/ }),
  938. /***/ "./src/chartutils.js":
  939. /*!***************************!*\
  940. !*** ./src/chartutils.js ***!
  941. \***************************/
  942. /*! exports provided: default */
  943. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  944. "use strict";
  945. eval("__webpack_require__.r(__webpack_exports__);\n// see: https://stackoverflow.com/questions/67210101/utils-package-in-chart-js\nvar COLORS = ['#4dc9f6', '#f67019', '#f53794', '#537bc4', '#acc236', '#166a8f', '#00a950', '#58595b', '#8549ba'];\nvar MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nvar CHART_COLORS = {\n red: 'rgb(255, 99, 132)',\n orange: 'rgb(255, 159, 64)',\n yellow: 'rgb(255, 205, 86)',\n green: 'rgb(75, 192, 192)',\n blue: 'rgb(54, 162, 235)',\n purple: 'rgb(153, 102, 255)',\n grey: 'rgb(201, 203, 207)'\n};\nvar CHART_COLORS_ALPHA = {\n red: 'rgba(255, 99, 132, 0.5)',\n blue: 'rgba(54, 162, 235, 0.5)'\n};\n\nfunction valueOrDefault(val, def) {\n return val ? val : def;\n}\n\nvar _seed = Date.now();\n\nfunction srand(seed) {\n _seed = seed;\n}\n\nfunction rand(min, max) {\n min = valueOrDefault(min, 0);\n max = valueOrDefault(max, 0);\n _seed = (_seed * 9301 + 49297) % 233280;\n return min + _seed / 233280 * (max - min);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n months: function months(config) {\n var cfg = config || {};\n var count = cfg.count || 12;\n var section = cfg.section;\n var values = [];\n var i, value;\n\n for (i = 0; i < count; ++i) {\n value = MONTHS[Math.ceil(i) % 12];\n values.push(value.substring(0, section));\n }\n\n return values;\n },\n colors: function colors() {\n return CHART_COLORS;\n },\n colorsAlpha: function colorsAlpha() {\n return CHART_COLORS_ALPHA;\n },\n color: function color(index) {\n return COLORS[index % COLORS.length];\n },\n numbers: function numbers(config) {\n var cfg = config || {};\n var min = valueOrDefault(cfg.min, 0);\n var max = valueOrDefault(cfg.max, 100);\n var from = valueOrDefault(cfg.from, []);\n var count = valueOrDefault(cfg.count, 8);\n var decimals = valueOrDefault(cfg.decimals, 0);\n var continuity = valueOrDefault(cfg.continuity, 1);\n var dfactor = Math.pow(10, decimals) || 0;\n var data = [];\n var i, value;\n\n for (i = 0; i < count; ++i) {\n value = (from[i] || 0) + rand(min, max);\n\n if (rand() <= continuity) {\n data.push(Math.round(dfactor * value) / dfactor);\n } else {\n data.push(null);\n }\n }\n\n return data;\n }\n});\n\n//# sourceURL=webpack:///./src/chartutils.js?");
  946. /***/ }),
  947. /***/ "./src/css/app.css":
  948. /*!*************************!*\
  949. !*** ./src/css/app.css ***!
  950. \*************************/
  951. /*! no static exports found */
  952. /***/ (function(module, exports, __webpack_require__) {
  953. eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./src/css/app.css?");
  954. /***/ }),
  955. /***/ "./src/css/icons.css":
  956. /*!***************************!*\
  957. !*** ./src/css/icons.css ***!
  958. \***************************/
  959. /*! no static exports found */
  960. /***/ (function(module, exports, __webpack_require__) {
  961. eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./src/css/icons.css?");
  962. /***/ }),
  963. /***/ "./src/pages/blank.f7.html":
  964. /*!*********************************!*\
  965. !*** ./src/pages/blank.f7.html ***!
  966. \*********************************/
  967. /*! exports provided: default */
  968. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  969. "use strict";
  970. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n methods: {\n test: function () {\n console.log('test');\n }\n },\n id: 'c4226cb0ed',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\r\\n <div class=\"page\">\\r\\n \\r\\n </div>\\r\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/blank.f7.html?");
  971. /***/ }),
  972. /***/ "./src/pages/centers.f7.html":
  973. /*!***********************************!*\
  974. !*** ./src/pages/centers.f7.html ***!
  975. \***********************************/
  976. /*! exports provided: default */
  977. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  978. "use strict";
  979. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n actionChange: function () {\n let idx = $$('select[name=\"centerIdx\"]').val();\n console.log(idx);\n if (idx == -1) {\n $$('#form-center-organisation')[0].reset();\n $$('#form-center-probe')[0].reset();\n $$('select[name=\"org_country\"]').val(221);\n $$('textarea[name=\"org_address\"]').text('');\n $$('input[name=\"org_ID\"]').val(0);\n $$('input[name=\"probe_ID\"]').val(0);\n } else {\n $$('input[name=\"org_ID\"]').val(this.center[idx].org_ID);\n $$('input[name=\"org_name\"]').val(this.center[idx].org_name);\n $$('input[name=\"org_name\"]').val(this.center[idx].org_name);\n $$('select[name=\"org_country\"]').val(this.center[idx].org_country);\n $$('input[name=\"org_zip\"]').val(this.center[idx].org_zip);\n $$('input[name=\"org_city\"]').val(this.center[idx].org_city);\n $$('textarea[name=\"org_address\"]').text(this.center[idx].org_address);\n $$('input[name=\"org_phone\"]').val(this.center[idx].org_phone);\n $$('input[name=\"probe_ID\"]').val(this.center[idx].probe_ID);\n $$('input[name=\"probe_name\"]').val(this.center[idx].probe_name);\n $$('input[name=\"probe_brand\"]').val(this.center[idx].probe_brand);\n $$('input[name=\"probe_year\"]').val(this.center[idx].probe_year);\n $$('input[name=\"probe_frequency\"]').val(this.center[idx].probe_frequency);\n }\n },\n add: function () {\n let organization = app.form.convertToData('#form-center-organisation');\n let probe = app.form.convertToData('#form-center-probe');\n if (probe.year == '' || parseInt(probe.year) <= 1990 || parseInt(probe.year) > new Date().getFullYear()) {\n app.dialog.alert('The year of the probe must be in the range from 1990 to now.');\n return;\n }\n if (probe.frequency == '' || parseInt(probe.frequency) < 1 || parseInt(probe.frequency) > 15) {\n app.dialog.alert('The frequency of the probe must be in the range from 1MHz to 15MHz.');\n return;\n }\n let idx = $$('select[name=\"centerIdx\"]').val();\n var postData = {\n apiKey: '',\n centerID: idx == -1 ? 0 : this.center[idx].centerID,\n organization: organization,\n probe: probe\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/centers/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/centers', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n app.views.workspaceView.router.navigate('/centers/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n },\n id: '6e2c6ad2d2',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Centers</div>\\n <div class=\"block block-strong\">\\n\\n <form class=\"list inline-labels no-hairlines-md\" id=\"form-center-organisation\" style=\"margin:0;\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Select action:</div>\\n <div class=\"item-input-wrap\">\\n <select name=\"centerIdx\" @change=\"actionChange\">\\n <option value=\"-1\" data-ID=\"0\">Create new center</option>\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.center, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(data_2 && data_2.index, ctx_2);\n r += '\" data-ID=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">Edit ';\n r += c(ctx_2.org_name, ctx_2);\n r += ' (using probe: ';\n r += c(ctx_2.probe_name, ctx_2);\n r += ')</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Organization settings</div>\\n <input type=\"hidden\" name=\"org_ID\" value=\"0\">\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Name <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_name\" placeholder=\"Center name\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Country <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <select name=\"org_country\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.countries, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_2, 'this.alpha2==\\'US\\'?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>';\n r += c(ctx_2.name_en, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Zip code <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_zip\" placeholder=\"Center zip code\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">City <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_city\" placeholder=\"Center city\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Address <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <textarea name=\"org_address\" class=\"resizable\" style=\"height: 96px\" placeholder=\"Center address\"></textarea>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Phone <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"tel\" name=\"org_phone\" placeholder=\"Center phone\">\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <form class=\"list inline-labels no-hairlines-md\" id=\"form-center-probe\" autocomplete=\"off\">\\n <ul>\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Ultrasound device settings</div>\\n <input type=\"hidden\" name=\"probe_ID\" value=\"0\">\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Name <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"probe_name\" placeholder=\"Center Ultrasound Device name\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Brand <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"probe_brand\" placeholder=\"Center Ultrasound Device brand\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Year</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"number\" name=\"probe_year\" placeholder=\"Center Ultrasound Device year\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray;\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Frequency <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"number\" name=\"probe_frequency\" placeholder=\"Center Ultrasound Device frequency\">\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form> \\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"add\">Save</button>\\n </div>\\n </div>\\n </div>\\n\\n </form>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n\n//# sourceURL=webpack:///./src/pages/centers.f7.html?");
  980. /***/ }),
  981. /***/ "./src/pages/cros.f7.html":
  982. /*!********************************!*\
  983. !*** ./src/pages/cros.f7.html ***!
  984. \********************************/
  985. /*! exports provided: default */
  986. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  987. "use strict";
  988. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n actionChange: function () {\n let idx = $$('select[name=\"userIdx\"]').val();\n console.log(idx);\n if (idx == -1) {\n $$('#form-user')[0].reset();\n $$('input[name=\"active\"]').prop('checked', true);\n } else {\n $$('input[name=\"email\"]').val(this.users[idx].email);\n $$('input[name=\"firstname\"]').val(this.users[idx].firstname);\n $$('input[name=\"lastname\"]').val(this.users[idx].lastname);\n $$('input[name=\"phone\"]').val(this.users[idx].phone);\n $$('input[name=\"active\"]').prop('checked', this.users[idx].active == 1 ? true : false);\n }\n },\n add: function () {\n let p = app.form.convertToData('#form-user');\n console.log(p);\n if (p.email == '' || p.firstname == '' || p.lastname == '' || p.phone == '') {\n app.dialog.alert('Please fill the form.');\n } else {\n let idx = $$('select[name=\"userIdx\"]').val();\n p.active = p.active.length ? 1 : 0;\n var postData = {\n apiKey: '',\n userID: idx == -1 ? 0 : this.users[idx].ID,\n user: p\n };\n console.log(postData);\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/cros/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/cros', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n if (parseInt(postData.userID) == 0) {\n var passwordLink = app.data.config.appBaseURL + '/?password_token=' + data.password_token;\n console.log('passwordLink', passwordLink);\n let message = 'Dear ' + p.lastname + ' ' + p.firstname + ',<br/><br/>Your CRO ADMINISTRATOR account has been created.<br>Please follow the link below in order to choose your password:<br/>##passwordLink<br/><br/>Thank you!';\n var data = {\n to: p.email,\n from: app.data.user.email,\n subject: 'Account validation',\n message: message.replace('##passwordLink', passwordLink),\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/mailer/send/', data, function (data) {\n console.log('mailer/send', data);\n app.preloader.hide();\n if (data.result == 'OK') {\n app.dialog.alert('E-mail sent to the additional administrator.');\n app.views.workspaceView.router.navigate('/cros/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n } else {\n app.dialog.alert('Mail error (' + data.message + ').');\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n } else {\n app.views.workspaceView.router.navigate('/cros/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n }\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n }\n },\n id: '3bfc06f46d',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">Additional Administrator</div>\\n <div class=\"block block-strong\">\\n <form class=\"list inline-labels no-hairlines-md\" id=\"form-user\" style=\"margin:0;\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Select action:</div>\\n <div class=\"item-input-wrap\">\\n <select name=\"userIdx\" @change=\"actionChange\">\\n <option value=\"-1\" data-ID=\"0\">Create new administrator</option>\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.users, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(data_2 && data_2.index, ctx_2);\n r += '\" data-ID=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">Edit ';\n r += c(ctx_2.firstname, ctx_2);\n r += ' ';\n r += c(ctx_2.lastname, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">E-mail <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"email\" name=\"email\" placeholder=\"E-mail\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Firstname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"firstname\" placeholder=\"Firstname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Lastname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"lastname\" placeholder=\"Lastname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Phone <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"tel\" name=\"phone\" placeholder=\"Phone number\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray;\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Active</div>\\n <div class=\"item-input-wrap\" style=\"display:flex; flex-shrink:1;\">\\n <label class=\"toggle toggle-init\">\\n <input name=\"active\" type=\"checkbox\" checked />\\n <span class=\"toggle-icon\"></span>\\n </label>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"add\">Save</button>\\n </div>\\n </div>\\n </div>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n\n//# sourceURL=webpack:///./src/pages/cros.f7.html?");
  989. /***/ }),
  990. /***/ "./src/pages/data-auditlog.f7.html":
  991. /*!*****************************************!*\
  992. !*** ./src/pages/data-auditlog.f7.html ***!
  993. \*****************************************/
  994. /*! exports provided: default */
  995. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  996. "use strict";
  997. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n methods: {\n download: function () {\n let start = $$('#settings-form-auditlog input[name=\"start\"]').val();\n let end = $$('#settings-form-auditlog input[name=\"end\"]').val();\n let postData = {\n apiKey: '',\n start: start,\n end: end\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/auditlog/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('admin/auditlog/', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n default:\n app.dialog.alert('It\\'s not working. Please check the logs.');\n break;\n }\n } else {\n const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data);\n const byteArrays = [];\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n const blob = new Blob(byteArrays, { type: 'text/plain' });\n return blob;\n };\n const blob = b64toBlob(data.data, 'text/plain');\n const blobUrl = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = blobUrl;\n a.setAttribute('download', 'auditlog_' + start + '_' + end + '.csv');\n a.setAttribute('class', 'link external');\n a.setAttribute('target', '_blank');\n a.click();\n window.URL.revokeObjectURL(a.href);\n document.body.removeChild(a);\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n },\n updateButtons: function () {\n let start = $$('#settings-form-auditlog input[name=\"start\"]').val();\n let end = $$('#settings-form-auditlog input[name=\"end\"]').val();\n $$('#dlButton').addClass('disabled');\n if (start != '' && end != '') {\n $$('#dlButton').removeClass('disabled');\n }\n }\n },\n id: '44d7bb2baf',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">Audit Log</div>\\n <div class=\"block block-strong\">\\n\\n <form class=\"list inline-labels no-hairlines-md\" id=\"settings-form-auditlog\" style=\"margin:0;\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Start date</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"date\" name=\"start\" placeholder=\"yyyy-MM-dd\" value=\"\" required validate @change=\"updateButtons\">\\n <span class=\"input-clear-button\"></span>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">End date</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"date\" name=\"end\" placeholder=\"yyyy-MM-dd\" value=\"\" required validate @change=\"updateButtons\">\\n <span class=\"input-clear-button\"></span>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button id=\"dlButton\" class=\"button button-fill disabled\" @click=\"download\">Download data (CSV)</button>\\n </div>\\n </div>\\n\\n </div>\\n\\n </div>\\n\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/data-auditlog.f7.html?");
  998. /***/ }),
  999. /***/ "./src/pages/data-ecrf.f7.html":
  1000. /*!*************************************!*\
  1001. !*** ./src/pages/data-ecrf.f7.html ***!
  1002. \*************************************/
  1003. /*! exports provided: default */
  1004. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1005. "use strict";
  1006. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n methods: {\n pdf: function () {\n this.download('pdf');\n },\n csv: function () {\n this.download('csv');\n },\n download: function (format) {\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/ecrf/?apiKey=', { apiKey: '' }, function (data) {\n app.methods.refreshToken(data);\n console.log('admin/ecrf', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n case 'empty':\n app.dialog.alert('No such Timepoint ID / Study Patient ID.');\n break;\n default:\n app.dialog.alert('It\\'s not working. Please check the logs.');\n break;\n }\n } else {\n $$('#result').html('<br/><br/>Your download is ready!<br/><br/>' + '<a href=\"' + app.data.config.storageBaseURL + '/' + data.csv + '\" class=\"link external\">CSV file</a><br/>' + '<a href=\"' + app.data.config.storageBaseURL + '/' + data.zip + '\" class=\"link external\">ZIP file</a><br/><br/>');\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n },\n id: '4e440ca09f',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">Data export</div>\\n <div class=\"block block-strong\">\\n\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"csv\">Download data (CSV) and images (ZIP)</button>\\n </div>\\n </div>\\n\\n <div id=\"result\" style=\"text-align: center; display: flex; flex-shrink: 1; flex-direction: column; width: 100%; justify-content: center; margin-top:16px;\">\\n </div>\\n\\n </div>\\n\\n </div>\\n\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/data-ecrf.f7.html?");
  1007. /***/ }),
  1008. /***/ "./src/pages/default.f7.html":
  1009. /*!***********************************!*\
  1010. !*** ./src/pages/default.f7.html ***!
  1011. \***********************************/
  1012. /*! exports provided: default */
  1013. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1014. "use strict";
  1015. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n methods: {\n test: function () {\n console.log('test');\n }\n },\n id: '28108827ab',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n \\n <div class=\"block\">\\n </div>\\n\\n </div>\\n\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/default.f7.html?");
  1016. /***/ }),
  1017. /***/ "./src/pages/front-signin.f7.html":
  1018. /*!****************************************!*\
  1019. !*** ./src/pages/front-signin.f7.html ***!
  1020. \****************************************/
  1021. /*! exports provided: default */
  1022. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1023. "use strict";
  1024. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n if (localStorage.getItem('username') !== null) {\n app.form.fillFromData('#login-form', {\n 'username': localStorage.getItem('username'),\n 'password': localStorage.getItem('password'),\n 'store': ['on']\n });\n }\n }\n },\n id: '8c9c94e1b5',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"navbar\" style=\"background-color: white;\">\\n <div class=\"navbar-inner\">\\n <div class=\"title sliding\"><img src=\"static/images/logo.png\" style=\"height:56px;\"></div>\\n <div class=\"right\" style=\"margin-right:16px;\">Clinical Trial Back-Office</div>\\n </div>\\n </div>\\n <div class=\"page-content login-screen-content\">\\n <div class=\"login-screen-title\">Welcome</div>\\n <form class=\"list\" id=\"login-form\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title item-label\">Email</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"email\" name=\"username\" placeholder=\"Your e-mail\" required validate>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title item-label\">Password</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"password\" name=\"password\" placeholder=\"Your password\" required validate>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Remember me</div>\\n <div class=\"item-after\">\\n <label class=\"toggle toggle-init\">\\n <input type=\"checkbox\" name=\"store\">\\n <span class=\"toggle-icon\"></span>\\n </label>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"center\">\\n <div class=\"block\">\\n <button class=\"button button-fill\" onclick=\"app.methods.signin();\">Signin</button>\\n </div>\\n </div>\\n </div>\\n </div>\\n\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/front-signin.f7.html?");
  1025. /***/ }),
  1026. /***/ "./src/pages/investigators.f7.html":
  1027. /*!*****************************************!*\
  1028. !*** ./src/pages/investigators.f7.html ***!
  1029. \*****************************************/
  1030. /*! exports provided: default */
  1031. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1032. "use strict";
  1033. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n actionChange: function () {\n let idx = $$('select[name=\"userIdx\"]').val();\n console.log(idx);\n console.log(this);\n if (idx == -1) {\n $$('#form-user')[0].reset();\n $$('input[name=\"active\"]').prop('checked', true);\n } else {\n $$('select[name=\"centerID\"]').val(this.users[idx].fk_center);\n $$('input[name=\"email\"]').val(this.users[idx].email);\n $$('input[name=\"firstname\"]').val(this.users[idx].firstname);\n $$('input[name=\"lastname\"]').val(this.users[idx].lastname);\n $$('input[name=\"phone\"]').val(this.users[idx].phone);\n $$('input[name=\"active\"]').prop('checked', this.users[idx].active == 1 ? true : false);\n }\n },\n add: function () {\n let p = app.form.convertToData('#form-user');\n if (p.email == '' || p.firstname == '' || p.lastname == '' || p.phone == '') {\n app.dialog.alert('Please fill the form.');\n } else if (!global.tools.validateEmail(p.email)) {\n app.dialog.alert('Invalid email.');\n } else {\n let idx = $$('select[name=\"userIdx\"]').val();\n p.active = p.active.length ? 1 : 0;\n var postData = {\n apiKey: '',\n userID: idx == -1 ? 0 : this.users[idx].ID,\n user: p,\n type: 'investigator'\n };\n console.log(postData);\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/users/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/users', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Please signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n if (parseInt(postData.userID) == 0) {\n var passwordLink = app.data.config.appBaseURL.replace('cro', 'www') + '/?password_token=' + data.password_token;\n console.log('passwordLink', passwordLink);\n let message = 'Dear ' + p.lastname + ' ' + p.firstname + ',<br/><br/>Your INVESTIGATOR account has been created.<br>Please follow the link below in order to choose your password:<br/>##passwordLink<br/><br/>Thank you!';\n var data = {\n to: p.email,\n from: app.data.user.email,\n subject: 'Account validation',\n message: message.replace('##passwordLink', passwordLink),\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/mailer/send/', data, function (data) {\n console.log('mailer/send', data);\n app.preloader.hide();\n if (data.result == 'OK') {\n app.dialog.alert('E-mail sent to the new investigator.');\n app.views.workspaceView.router.navigate('/investigators/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n } else {\n app.dialog.alert('Mail error (' + data.message + ').');\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n } else {\n app.views.workspaceView.router.navigate('/investigators/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n }\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n }\n },\n id: '78e3b575b5',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">';\n r += Template7Helpers.js.call(ctx_1, 'this.type==\\'reader\\'?\\'Readers\\':\\'Investigators\\'', {\n hash: {},\n data: data_1 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '</div>\\n <div class=\"block block-strong\">\\n <form class=\"list inline-labels no-hairlines-md\" id=\"form-user\" style=\"margin:0;\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Select action:</div>\\n <div class=\"item-input-wrap\">\\n <select name=\"userIdx\" @change=\"actionChange\">\\n <option value=\"-1\" data-ID=\"0\">Create new investigator</option>\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.users, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(data_2 && data_2.index, ctx_2);\n r += '\" data-ID=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">Edit ';\n r += c(ctx_2.firstname, ctx_2);\n r += ' ';\n r += c(ctx_2.lastname, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Organization settings</div>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Center <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <select name=\"centerID\" required validate>\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.organizations, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_2.center_ID, ctx_2);\n r += '\">';\n r += c(ctx_2.org_name, ctx_2);\n r += ' / ';\n r += c(ctx_2.probe_name, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Investigator settings</div>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">E-mail <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"email\" name=\"email\" placeholder=\"E-mail\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Firstname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"firstname\" placeholder=\"Firstname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Lastname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"lastname\" placeholder=\"Lastname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Phone <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"tel\" name=\"phone\" placeholder=\"Phone number\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray;\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Active</div>\\n <div class=\"item-input-wrap\" style=\"display:flex; flex-shrink:1;\">\\n <label class=\"toggle toggle-init\">\\n <input name=\"active\" type=\"checkbox\" checked />\\n <span class=\"toggle-icon\"></span>\\n </label>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"add\">Save</button>\\n </div>\\n </div>\\n </div>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/investigators.f7.html?");
  1034. /***/ }),
  1035. /***/ "./src/pages/menu.f7.html":
  1036. /*!********************************!*\
  1037. !*** ./src/pages/menu.f7.html ***!
  1038. \********************************/
  1039. /*! exports provided: default */
  1040. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1041. "use strict";
  1042. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n methods: {\n ctChange: function () {\n let ctID = $$('select[name=\"ctID\"]').val();\n console.log('ctID', ctID);\n app.views.leftView.router.navigate({ url: '/menu/' + ctID + '/' }, {\n ignoreCache: true,\n reloadCurrent: true\n });\n app.views.workspaceView.router.navigate({ url: '/default/' });\n },\n select(what) {\n $$('li').removeClass('menu-select');\n $$('#menu-' + what).addClass('menu-select');\n }\n },\n id: '6aab87be63',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\" style=\"background-color:white; border-right:1px solid #ddd;\">\\n\\n <div class=\"navbar\">\\n <div class=\"navbar-inner sliding\">\\n <div class=\"title\">';\n r += c(ctx_1.data.firstname, ctx_1);\n r += ' ';\n r += c(ctx_1.data.lastname, ctx_1);\n r += '</div>\\n </div>\\n </div>\\n\\n <div class=\"page-content\" style=\"position:relative;\">\\n\\n <div class=\"block-title\" style=\"font-size:16px; font-weight:600;\">Clinical trial settings</div>\\n <div class=\"list\">\\n <ul>\\n <li id=\"menu-settings\">\\n <a href=\"/settings/\" @click=\"select(\\'settings\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">General settings</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-centers\">\\n <a href=\"/centers/\" @click=\"select(\\'centers\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Center settings</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-cros\">\\n <a href=\"/cros/\" @click=\"select(\\'cros\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Administrators</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-investigator\">\\n <a href=\"/investigators/\" @click=\"select(\\'investigator\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Study investigators</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-reader\">\\n <a href=\"/readers/\" @click=\"select(\\'reader\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Study readers</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-pacs\">\\n <a href=\"/pacs/\" @click=\"select(\\'pacs\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">PACS settings</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n </ul>\\n </div>\\n\\n <div class=\"block-title\" style=\"font-size:16px; font-weight:600;\">Clinical trial statistics</div>\\n <div class=\"list\">\\n <ul>\\n <li id=\"menu-stats/overview\">\\n <a href=\"/stats/overview/\" @click=\"select(\\'stats/overview\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Overview</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n </ul>\\n </div>\\n\\n <div class=\"block-title\" style=\"font-size:16px; font-weight:600;\">Clinical trial data</div>\\n <div class=\"list\">\\n <ul>\\n <li id=\"menu-patients\">\\n <a href=\"/patients/';\n r += c(ctx_1.data.ID_center, ctx_1);\n r += '/\" @click=\"select(\\'patients\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Data management</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-data/ecrf\">\\n <a href=\"/data/ecrf/\" @click=\"select(\\'data/ecrf\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Data export</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-stats/investigator\">\\n <a href=\"/investigators/';\n r += c(ctx_1.data.ID_investigator, ctx_1);\n r += '/\" @click=\"select(\\'stats/investigator\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Investigators</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-stats/reader\">\\n <a href=\"/readers/';\n r += c(ctx_1.data.ID_reader, ctx_1);\n r += '/\" @click=\"select(\\'stats/reader\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Readers</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-stats/adjudication\">\\n <a href=\"/adjudication/\" @click=\"select(\\'stats/adjudication\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Adjudication</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n <li id=\"menu-data/auditlog\">\\n <a href=\"/data/auditlog/\" @click=\"select(\\'data/auditlog\\')\" class=\"item-link item-content panel-close\" data-view=\".view-workspace\" data-ignore-cache=\"true\" data-reload-current=\"true\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">Audit log</div>\\n <div class=\"item-after\"></div>\\n </div>\\n </a>\\n </li>\\n </ul>\\n </div>\\n\\n </div>\\n\\n <div class=\"toolbar toolbar-bottom\">\\n <div class=\"toolbar-inner center-content\">\\n <a href=\"#\" class=\"link\" onclick=\"app.methods.signout();\">Signout</a>\\n </div>\\n </div>\\n\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/menu.f7.html?");
  1043. /***/ }),
  1044. /***/ "./src/pages/not-found.f7.html":
  1045. /*!*************************************!*\
  1046. !*** ./src/pages/not-found.f7.html ***!
  1047. \*************************************/
  1048. /*! exports provided: default */
  1049. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1050. "use strict";
  1051. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n id: '783f0c1042',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"navbar\">\\n <div class=\"navbar-inner sliding\">\\n <div class=\"left\">\\n <a href=\"#\" class=\"link back\">\\n <i class=\"icon icon-back\"></i>\\n <span class=\"if-ios\">Back</span>\\n </a>\\n </div>\\n <div class=\"title\">Not found</div>\\n </div>\\n </div>\\n <div class=\"page-content\">\\n <div class=\"block block-strong\">\\n <p>Sorry</p>\\n <p>Requested content not found.</p>\\n </div>\\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/not-found.f7.html?");
  1052. /***/ }),
  1053. /***/ "./src/pages/pacs.f7.html":
  1054. /*!********************************!*\
  1055. !*** ./src/pages/pacs.f7.html ***!
  1056. \********************************/
  1057. /*! exports provided: default */
  1058. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1059. "use strict";
  1060. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n edit: function (ID) {\n for (let i = 0; i < this.pacs.length; i++) {\n if (this.pacs[i].ID == ID) {\n console.log(this.pacs[i]);\n $$('#settings-pacs input[name=\"PACSID\"]').val(this.pacs[i].ID);\n $$('#settings-pacs select[name=\"centerID\"]').val(this.pacs[i].data.centerID);\n $$('#settings-pacs input[name=\"callingAET\"]').val(this.pacs[i].data.callingAET);\n $$('#settings-pacs input[name=\"calledAET\"]').val(this.pacs[i].data.calledAET);\n $$('#settings-pacs input[name=\"serverAddress\"]').val(this.pacs[i].data.serverAddress);\n $$('#settings-pacs input[name=\"queryPort\"]').val(this.pacs[i].data.queryPort);\n $$('#settings-pacs input[name=\"recievePort\"]').val(this.pacs[i].data.recievePort);\n break;\n }\n }\n },\n test: function () {\n let postData = {\n apiKey: '',\n callingAET: $$('#settings-pacs input[name=\"callingAET\"]').val(),\n calledAET: $$('#settings-pacs input[name=\"calledAET\"]').val(),\n serverAddress: $$('#settings-pacs input[name=\"serverAddress\"]').val(),\n queryPort: $$('#settings-pacs input[name=\"queryPort\"]').val()\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/echo/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('admin/echo/', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n default:\n app.dialog.alert('It\\'s not working. Please check the logs.');\n break;\n }\n } else {\n app.dialog.alert('It\\'s working well so far!');\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n },\n save: function () {\n var postData = {\n apiKey: '',\n data: app.form.convertToData('#settings-pacs'),\n who: this.who\n };\n console.log(postData);\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/pacs/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/pacs', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Please signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n app.views.workspaceView.router.navigate('/pacs/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n },\n id: '19437f4eac',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">PACS settings</div>\\n <div class=\"block block-strong\">\\n <div id=\"settings-pacs\" class=\"list inline-labels no-hairlines-md\" style=\"margin: 0;\" autocomplete=\"off\">\\n <input type=\"hidden\" name=\"PACSID\" value=\"0\">\\n <ul>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Center</div>\\n <div class=\"item-input-wrap\">\\n <select placeholder=\"Please choose...\" name=\"centerID\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.centers, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">';\n r += c(ctx_2.org_name, ctx_2);\n r += ' / ';\n r += c(ctx_2.probe_name, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Calling AET</div>\\n <div class=\"item-input-wrap\">\\n <input name=\"callingAET\" type=\"text\" value=\"\" />\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" styl style=\"width: 150px;\"e=\"width: 150px;\">Called AET</div>\\n <div class=\"item-input-wrap\">\\n <input name=\"calledAET\" type=\"text\" value=\"\" />\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Server address</div>\\n <div class=\"item-input-wrap\">\\n <input name=\"serverAddress\" type=\"text\" value=\"\" />\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Query port</div>\\n <div class=\"item-input-wrap\">\\n <input name=\"queryPort\" type=\"number\" value=\"\" />\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Recieve port</div>\\n <div class=\"item-input-wrap\">\\n <input name=\"recievePort\" type=\"number\" value=\"\" />\\n </div>\\n </div>\\n </li>\\n <div class=\"row\" style=\"padding:0 56px 0px 56px; display:flex; flex-shrink:1; flex-direction: row;\">\\n <div>\\n <button class=\"button button-fill color-green\" @click=\"test\">Echo test</button>\\n </div>\\n <div>\\n <button class=\"button button-fill\" @click=\"save\">Save changes</button>\\n </div>\\n </div>\\n </ul>\\n </div>\\n </div>\\n\\n <div class=\"block-title\">Existing PACS</div>\\n <div class=\"block block-strong\">\\n <form class=\"list no-hairlines-md\" style=\"margin: 0;\" id=\"settings-existing-pacs\" autocomplete=\"off\">\\n <ul id=\"items\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.pacs, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <li>\\n <div class=\"item-content\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\">';\n r += c(ctx_2.data.serverAddress, ctx_2);\n r += ': ';\n r += c(ctx_2.data.callingAET, ctx_2);\n r += ' -> ';\n r += c(ctx_2.data.calledAET, ctx_2);\n r += '</div>\\n <div class=\"item-after\" style=\"align-items: center;\">\\n &nbsp;&nbsp;&nbsp;&nbsp;\\n <a class=\"button button-outline\" @click=\"edit(';\n r += c(ctx_2.ID, ctx_2);\n r += ')\">Edit</a>\\n </div>\\n </div>\\n </div>\\n </li>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </ul>\\n </form>\\n </div> \\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n\n//# sourceURL=webpack:///./src/pages/pacs.f7.html?");
  1061. /***/ }),
  1062. /***/ "./src/pages/patients.f7.html":
  1063. /*!************************************!*\
  1064. !*** ./src/pages/patients.f7.html ***!
  1065. \************************************/
  1066. /*! exports provided: default */
  1067. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1068. "use strict";
  1069. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n $$('#center-select').change(function () {\n console.log($$(this).val());\n app.views.workspaceView.router.navigate('/patients/' + $$(this).val() + '/', {\n ignoreCache: true,\n reloadCurrent: true\n });\n });\n $$('.reader-select').each(function (idx, obj) {\n $$(obj).parent().css({ 'background-color': $$(obj).val() == 'null' ? 'red' : 'lightgreen' });\n });\n $$('.reader-select').change(function () {\n console.log($$(this).data('visit'), $$(this).val());\n let postData = {\n apiKey: '',\n visitID: $$(this).data('visit'),\n readerID: $$(this).val()\n };\n $$(this).parent().css({ 'background-color': $$(this).val() == 'null' ? 'red' : 'lightgreen' });\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/reader/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/reader', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n default:\n app.dialog.alert('It\\'s not working. Please check the logs.');\n break;\n }\n } else {\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n });\n }\n },\n methods: {\n selectVisit: function (ID) {\n let that = this;\n $$('.patient-row').css({ 'background-color': 'unset' });\n $$('#visit-' + ID).css({ 'background-color': 'antiquewhite' });\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/visits/' + ID + '/?apiKey=').then(data => {\n app.methods.refreshToken(data);\n console.log('ct_admin/visits', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n let container = $$('#visits');\n container.html('');\n global;\n for (let i = 0; i < data.visits.length; i++) {\n let V = data.visits[i];\n let territory = V.area ? eval('global.tr[\"en\"].arteries.base.' + V.area) : '';\n container.append('<div class=\"block-title\" style=\"margin-left:0px;\">Timepoint ' + V.number + ' / ' + V.visitDate + ' / ' + territory + '</div>');\n let row = $$('<div style=\"display:flex; flex-shrink:1; width:100%; overflow-x: scroll;\">');\n for (let m = 0; m < V.media.length; m++) {\n let M = V.media[m];\n let location = V.area ? eval('global.tr[\"en\"].arteries.' + V.area + '.' + (M.side && M.side.length ? M.side + '.' : '') + M.location) + ' ' + M.incidence : '';\n let mediaTag = '';\n if (M.metrics.fps) {\n if (M.filename.indexOf('.dicom') === -1) {\n mediaTag = $$('<div style=\"display:flex; flex-shrink:1; flex-direction:column; align-items: center; position:relative;\"><span id=\"filename\" style=\"font-size:12px;\">' + M.filename + '</span><div id=\"media\"><video style=\"height:250px; padding:4px;\" src=\"' + app.data.config.storageBaseURL + '/media/' + V['ID'] + '/' + M.filename + '\"></video></div>' + location + '</div>');\n } else {\n mediaTag = $$('<div style=\"display:flex; flex-shrink:1; flex-direction:column; align-items: center; position:relative;\"><span id=\"filename\" style=\"font-size:12px;\">' + M.filename + '</span><div id=\"media\"><video style=\"height:250px; padding:4px;\" src=\"' + app.data.config.storageBaseURL + '/media/' + V['ID'] + '/' + M.filename.replace('.dicom', '.mp4') + '\"></video></div>' + location + '</div>');\n }\n } else {\n if (M.filename.indexOf('.dicom') === -1) {\n mediaTag = $$('<div style=\"display:flex; flex-shrink:1; flex-direction:column; align-items: center; position:relative;\"><span id=\"filename\" style=\"font-size:12px;\">' + M.filename + '</span><div id=\"media\"><img style=\"height:250px; padding:4px;\" src=\"' + app.data.config.storageBaseURL + '/media/' + V['ID'] + '/' + M.filename + '\"></div>' + location + '</div>');\n } else {\n mediaTag = $$('<div style=\"display:flex; flex-shrink:1; flex-direction:column; align-items: center; position:relative;\"><span id=\"filename\" style=\"font-size:12px;\">' + M.filename + '</span><div id=\"media\"><img style=\"height:250px; padding:4px;\" src=\"' + app.data.config.storageBaseURL + '/media/' + V['ID'] + '/' + M.filename.replace('.dicom', '.jpeg') + '\"></div>' + location + '</div>');\n }\n }\n mediaTag.attr('ID', 'mediaID_' + M.ID);\n mediaTag.attr('downloaded', false);\n row.append(mediaTag);\n let download = $$('<a href=\"#\" class=\"flex\" style=\"height:16px; align-items:center; justify-content:center; position:absolute; top:23px; left:4px; padding:4px; background-color:white; border-radius:50%;\"><img src=\"static/images/media_save.png\"></a>');\n download.on('click', function () {\n that.download(V['ID'], M.filename);\n mediaTag.attr('downloaded', true);\n });\n mediaTag.append(download);\n let browse = $$('<a href=\"#\" class=\"flex\" style=\"height:16px; align-items:center; justify-content:center; position:absolute; top:23px; right:4px; padding:4px; background-color:white; border-radius:50%;\"><img src=\"static/images/browse.png\" style=\"width:16px;\"></a>');\n browse.on('click', function () {\n if (mediaTag.attr('downloaded') == 'false') {\n app.dialog.alert('You shall download this media before replacing it.');\n return;\n }\n that.browse(V.ID, M.ID);\n });\n mediaTag.append(browse);\n }\n container.append(row);\n }\n }\n }).catch(e => {\n console.log('exception', e);\n app.dialog.alert('Server unavailable.');\n });\n },\n download: function (visitID, filename) {\n app.request.get(app.data.config.apiBaseURL + '/acquire/download/' + visitID + '/' + filename + '/?apiKey=', function (data) {\n console.log('acquire/download', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n default:\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data);\n const byteArrays = [];\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize);\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n };\n const blob = b64toBlob(data.base64, data.type);\n const blobUrl = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.style.display = 'none';\n document.body.appendChild(a);\n a.href = blobUrl;\n a.setAttribute('download', filename);\n a.setAttribute('class', 'link external');\n a.setAttribute('target', '_blank');\n a.click();\n window.URL.revokeObjectURL(a.href);\n document.body.removeChild(a);\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n },\n browse: function (visitID, mediaID) {\n var that = this;\n var input = document.createElement('input');\n input.type = 'file';\n input.onchange = e => {\n var file = e.target.files[0];\n let oldFilename = $$('#mediaID_' + mediaID + ' > #filename').text();\n if (oldFilename.split('.')[0] != file.name.split('.')[0]) {\n app.dialog.alert('You must replace this file by the same modified file (ie. filenames must be identical).');\n return;\n }\n var reader = new FileReader();\n reader.onload = readerEvent => {\n var content = readerEvent.target.result;\n let data = {\n visitID: visitID,\n type: file.type,\n data: content,\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/acquire/upload/', data, function (data) {\n console.log('acquire/upload', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('You have been disconnected because your session was inactive.');\n break;\n case 'invalid_media':\n app.dialog.alert('Invalid media file type.');\n break;\n default:\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n if (data.content) {\n content = data.content;\n }\n let elt = $$('#mediaID_' + mediaID + ' > div');\n console.log(elt);\n if (data.type == 'mp4') {\n elt.html('<video src=\"' + content + '\" style=\"height:250px; padding:4px;\" controls></video>');\n } else if (data.type == 'jpeg') {\n elt.html('<img src=\"' + content + '\" style=\"height:250px; padding:4px;\">');\n } else if (data.type == 'dicom') {\n if (content.indexOf('data:video/mp4') === 0) {\n elt.html('<video src=\"' + content + '\" style=\"height:250px; padding:4px;\" controls></video>');\n } else {\n elt.html('<img src=\"' + content + '\" style=\"height:250px; padding:4px;\">');\n }\n } else {\n app.dialog.alert('Invalid media file type.');\n return;\n }\n let postData = {\n visitID: visitID,\n mediaID: mediaID,\n filename: data.filename,\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/acquire/media/', postData, function (data) {\n console.log('acquire/media', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('You have been disconnected because your session was inactive.');\n break;\n case 'invalid_media':\n app.dialog.alert('Invalid media file type.');\n break;\n default:\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n $$('#mediaID_' + mediaID).attr('ID', 'mediaID_' + data.mediaID);\n $$('#mediaID_' + data.mediaID + ' > span').html(data.filename);\n $$('#mediaID_' + data.mediaID + ' > a').remove();\n let download = $$('<a href=\"#\" class=\"flex\" style=\"height:16px; align-items:center; justify-content:center; position:absolute; top:23px; left:4px; padding:4px; background-color:white; border-radius:50%;\"><img src=\"static/images/media_save.png\"></a>');\n download.on('click', function () {\n that.download(visitID, data.filename);\n });\n $$('#mediaID_' + data.mediaID).append(download);\n let browse = $$('<a href=\"#\" class=\"flex\" style=\"height:16px; align-items:center; justify-content:center; position:absolute; top:23px; right:4px; padding:4px; background-color:white; border-radius:50%;\"><img src=\"static/images/browse.png\" style=\"width:16px;\"></a>');\n browse.on('click', function () {\n that.browse(visitID, data.mediaID);\n });\n $$('#mediaID_' + data.mediaID).append(browse);\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n };\n reader.readAsDataURL(file);\n };\n input.click();\n }\n },\n id: 'dfc53da587',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">Time point anonymisation and Allocation to Readers</div>\\n <div class=\"block block-strong\">\\n\\n <div class=\"list no-hairlines-md\" style=\"margin:0;\">\\n <ul>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title item-label\">Select center:</div>\\n <div class=\"item-input-wrap input-dropdown-wrap\">\\n <select id=\"center-select\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.centers, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_2, '../ID_center==this.ID?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>';\n r += c(ctx_2.org_name, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </div>\\n\\n <div class=\"data-table\">\\n\\n <table>\\n <thead class=\"iimt-small-row\">\\n <tr>\\n <th class=\"label-cell\">Study Patient ID</th>\\n <th class=\"label-cell\">Timepoint ID</th>\\n <th class=\"label-cell\">Investigator</th>\\n <th class=\"label-cell\">Reader</th>\\n <th class=\"numeric-cell\" style=\"width:100px;\">Images</th>\\n <th class=\"numeric-cell\" style=\"width:100px;\">Videos</th>\\n <th class=\"label-cell\">Reading Date</th>\\n <th class=\"label-cell\">Completed</th>\\n </tr>\\n </thead>\\n <tbody class=\"iimt-small-row\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.visits, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <tr class=\"patient-row\" id=\"visit-';\n r += c(ctx_2.ID, ctx_2);\n r += '\" @click=\"selectVisit(';\n r += c(ctx_2.ID, ctx_2);\n r += ')\">\\n <td class=\"label-cell\">';\n r += c(ctx_2.ctPatientID, ctx_2);\n r += '</td>\\n <td class=\"label-cell\">';\n r += c(ctx_2.number, ctx_2);\n r += '</td>\\n <td class=\"label-cell\">';\n r += c(ctx_2.investigator, ctx_2);\n r += '</td>\\n <td class=\"label-cell item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-input-wrap input-dropdown-wrap\" style=\"align-items: center; display: flex; flex-shrink: 1;\">\\n <select class=\"reader-select\" data-visit=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">\\n <option value=\"null\" ';\n r += Template7Helpers.js.call(ctx_2, 'this.fk_reader==null?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>Select...</option>\\n ';\n r += Template7Helpers.each.call(ctx_2, ctx_1.readers, {\n hash: {},\n data: data_2 || {},\n fn: function (ctx_3, data_3) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_3.ID, ctx_3);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_3, '../fk_reader==this.ID?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_3 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [\n ctx_2,\n ctx_1\n ]\n });\n r += '>';\n r += c(ctx_3.lastname, ctx_3);\n r += ' ';\n r += c(ctx_3.firstname, ctx_3);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </td>\\n <td class=\"numeric-cell\" style=\"width:100px;\">';\n r += c(ctx_2.imageCount, ctx_2);\n r += '</td>\\n <td class=\"numeric-cell\" style=\"width:100px;\">';\n r += Template7Helpers.js.call(ctx_2, 'this.mediaCount-this.imageCount', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '</td>\\n <td class=\"label-cell\" style=\"background-color:';\n r += Template7Helpers.js.call(ctx_2, 'this.measureLastDate?\\'lightgreen\\':\\'red\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\">';\n r += Template7Helpers.js.call(ctx_2, 'this.measureLastDate?this.measureLastDate:\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '</td>\\n <td class=\"label-cell\" style=\"background-color:';\n r += Template7Helpers.js.call(ctx_2, 'this.completed?\\'lightgreen\\':\\'red\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\">';\n r += Template7Helpers.js.call(ctx_2, 'this.completed?this.completed:\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '</td>\\n </tr>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </tbody>\\n </table>\\n\\n </div>\\n\\n <div class=\"block block-strong\" id=\"visits\">\\n </div>\\n \\n </div>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/patients.f7.html?");
  1070. /***/ }),
  1071. /***/ "./src/pages/readers.f7.html":
  1072. /*!***********************************!*\
  1073. !*** ./src/pages/readers.f7.html ***!
  1074. \***********************************/
  1075. /*! exports provided: default */
  1076. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1077. "use strict";
  1078. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n actionChange: function () {\n let idx = $$('select[name=\"userIdx\"]').val();\n console.log(idx);\n console.log(this);\n if (idx == -1) {\n $$('#form-user')[0].reset();\n $$('input[name=\"active\"]').prop('checked', true);\n $$('select[name=\"org_country\"]').val(221);\n $$('textarea[name=\"org_address\"]').text('');\n $$('input[name=\"org_ID\"]').val(0);\n } else {\n $$('input[name=\"org_ID\"]').val(this.users[idx].org[0].ID);\n $$('input[name=\"org_name\"]').val(this.users[idx].org[0].name);\n $$('select[name=\"org_country\"]').val(this.users[idx].org[0].fk_country);\n $$('input[name=\"org_zip\"]').val(this.users[idx].org[0].zip);\n $$('input[name=\"org_city\"]').val(this.users[idx].org[0].city);\n $$('textarea[name=\"org_address\"]').text(this.users[idx].org[0].address);\n $$('input[name=\"org_phone\"]').val(this.users[idx].org[0].phone);\n $$('select[name=\"centerID\"]').val(this.users[idx].fk_center);\n $$('input[name=\"email\"]').val(this.users[idx].email);\n $$('input[name=\"firstname\"]').val(this.users[idx].firstname);\n $$('input[name=\"lastname\"]').val(this.users[idx].lastname);\n $$('input[name=\"phone\"]').val(this.users[idx].phone);\n $$('input[name=\"active\"]').prop('checked', this.users[idx].active == 1 ? true : false);\n }\n },\n add: function () {\n let p = app.form.convertToData('#form-user');\n if (p.email == '' || p.firstname == '' || p.lastname == '' || p.phone == '') {\n app.dialog.alert('Please fill the form.');\n } else if (!global.tools.validateEmail(p.email)) {\n app.dialog.alert('Invalid email.');\n } else {\n let idx = $$('select[name=\"userIdx\"]').val();\n p.active = p.active.length ? 1 : 0;\n var postData = {\n apiKey: '',\n userID: idx == -1 ? 0 : this.users[idx].ID,\n user: p,\n type: 'reader'\n };\n console.log(postData);\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/users/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/users', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Please signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n if (parseInt(postData.userID) == 0) {\n var passwordLink = app.data.config.appBaseURL.replace('cro', 'www') + '/?password_token=' + data.password_token;\n console.log('passwordLink', passwordLink);\n let message = 'Dear ' + p.lastname + ' ' + p.firstname + ',<br/><br/>Your READER account has been created.<br>Please follow the link below in order to choose your password:<br/>##passwordLink<br/><br/>Thank you!';\n var data = {\n to: p.email,\n from: app.data.user.email,\n subject: 'Account validation',\n message: message.replace('##passwordLink', passwordLink),\n apiKey: ''\n };\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/mailer/send/', data, function (data) {\n console.log('mailer/send', data);\n app.preloader.hide();\n if (data.result == 'OK') {\n app.dialog.alert('E-mail sent to the new reader.');\n app.views.workspaceView.router.navigate('/readers/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n } else {\n app.dialog.alert('Mail error (' + data.message + ').');\n }\n }, function (data) {\n console.log('error', data);\n }, 'json');\n } else {\n app.views.workspaceView.router.navigate('/readers/', {\n reloadCurrent: true,\n ignoreCache: true\n });\n }\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n }\n },\n id: '0260b94896',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">';\n r += Template7Helpers.js.call(ctx_1, 'this.type==\\'reader\\'?\\'Readers\\':\\'Investigators\\'', {\n hash: {},\n data: data_1 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '</div>\\n <div class=\"block block-strong\">\\n <form class=\"list inline-labels no-hairlines-md\" id=\"form-user\" style=\"margin:0;\" autocomplete=\"off\">\\n <ul>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Select action:</div>\\n <div class=\"item-input-wrap\">\\n <select name=\"userIdx\" @change=\"actionChange\">\\n <option value=\"-1\" data-ID=\"0\">Create new reader</option>\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.users, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(data_2 && data_2.index, ctx_2);\n r += '\" data-ID=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\">Edit ';\n r += c(ctx_2.firstname, ctx_2);\n r += ' ';\n r += c(ctx_2.lastname, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Organization settings</div>\\n <input type=\"hidden\" name=\"org_ID\" value=\"0\">\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Name <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_name\" placeholder=\"Name\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Country <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <select name=\"org_country\">\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.countries, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_2, 'this.alpha2==\\'US\\'?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>';\n r += c(ctx_2.name_en, ctx_2);\n r += '</option>\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\n </select>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Zip code <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_zip\" placeholder=\"Zip code\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">City <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"org_city\" placeholder=\"City\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Address <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <textarea name=\"org_address\" class=\"resizable\" style=\"height: 96px\" placeholder=\"Address\"></textarea>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Phone <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"tel\" name=\"org_phone\" placeholder=\"Phone\">\\n </div>\\n </div>\\n </li> \\n <div class=\"block-title\" style=\"font-size: 16px; font-weight: 600;\">Reader settings</div>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">E-mail <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"email\" name=\"email\" placeholder=\"E-mail\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Firstname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"firstname\" placeholder=\"Firstname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Lastname <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"lastname\" placeholder=\"Lastname\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Phone <span style=\"color:red\">*</span></div>\\n <div class=\"item-input-wrap\">\\n <input type=\"tel\" name=\"phone\" placeholder=\"Phone number\" value=\"\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input\" style=\"border-bottom: 1px solid lightgray;\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 150px;\">Active</div>\\n <div class=\"item-input-wrap\" style=\"display:flex; flex-shrink:1;\">\\n <label class=\"toggle toggle-init\">\\n <input name=\"active\" type=\"checkbox\" checked />\\n <span class=\"toggle-icon\"></span>\\n </label>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"add\">Save</button>\\n </div>\\n </div>\\n </div>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/readers.f7.html?");
  1079. /***/ }),
  1080. /***/ "./src/pages/settings.f7.html":
  1081. /*!************************************!*\
  1082. !*** ./src/pages/settings.f7.html ***!
  1083. \************************************/
  1084. /*! exports provided: default */
  1085. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1086. "use strict";
  1087. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {\n add: function () {\n let p = app.form.convertToData('#settings-form');\n if (p.center_name == '' || p.center_address == '' || p.center_zip == '' || p.center_city == '') {\n app.dialog.alert('Please fill the form.');\n } else {\n var postData = {\n apiKey: '',\n ct: p\n };\n console.log(postData);\n app.preloader.show();\n app.request.post(app.data.config.apiBaseURL + '/ct_admin/settings/?apiKey=', postData, function (data) {\n app.methods.refreshToken(data);\n console.log('ct_admin/settings', data);\n app.preloader.hide();\n if (data.result == 'ERROR') {\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n case 'internal_error':\n app.dialog.alert('Internal error.');\n break;\n }\n } else {\n console.log('OK');\n }\n }, function (data) {\n console.log('error', data);\n app.preloader.hide();\n app.dialog.alert('Server unavailable.');\n }, 'json');\n }\n }\n },\n id: '3721d19d8d',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\n <div class=\"page\">\\n <div class=\"page no-navbar\">\\n\\n <div class=\"page-content\">\\n\\n <div class=\"block-title\">Clinical trial settings</div>\\n <div class=\"block block-strong\">\\n <form class=\"list inline-labels no-hairlines-md\" id=\"settings-form\" style=\"margin:0;\" autocomplete=\"off\">\\n <!--li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Number of readers (max)</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"number\" placeholder=\"\" value=\"2\" disabled>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Number of investigators (max)</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"number\" placeholder=\"\" value=\"2\" disabled>\\n </div>\\n </div>\\n </li-->\\n <ul>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Cinical trial ID</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"number\" placeholder=\"Clinical trial UID\" value=\"';\n r += c(ctx_1.settings.number, ctx_1);\n r += '\">\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Clinical trial name</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"name\" placeholder=\"Clinical trial name\" value=\"';\n r += c(ctx_1.settings.name, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Starting start</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"date\" name=\"start\" placeholder=\"yyyy-MM-dd\" value=\"';\n r += c(ctx_1.settings.start, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Expected patient Number</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"number\" name=\"patient_expected\" placeholder=\"Expected patient count\" value=\"';\n r += c(ctx_1.settings.patient_expected, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Number of center involved</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"center_count\" placeholder=\"Number of centers\" value=\"';\n r += c(ctx_1.settings.center_count, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Inclusion duration (months)</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"inclusion_month\" placeholder=\"Inclusion duration\" value=\"';\n r += c(ctx_1.settings.inclusion_month, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Duration of Follow up</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"followup_month\" placeholder=\"Follow duration\" value=\"';\n r += c(ctx_1.settings.followup_month, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Visits per patient</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"visit_per_patient\" placeholder=\"Visits per patient\" value=\"';\n r += c(ctx_1.settings.visit_per_patient, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Interval between visits</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"visit_interval\" placeholder=\"Interval between visits\" value=\"';\n r += c(ctx_1.settings.visit_interval, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Images per visit</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"image_per_visit\" placeholder=\"Images per visit\" value=\"';\n r += c(ctx_1.settings.image_per_visit, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Videos per visit</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"video_per_visit\" placeholder=\"Videos per visit\" value=\"';\n r += c(ctx_1.settings.video_per_visit, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Number of Measures per Timepoint</div>\\n <div class=\"item-input-wrap\">\\n <input type=\"text\" name=\"measure_per_timepoint\" placeholder=\"Measures per timepoint\" value=\"';\n r += c(ctx_1.settings.measure_per_timepoint, ctx_1);\n r += '\" required validate>\\n <div class=\"item-input-info\">Required</div>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Additional comments</div>\\n <div class=\"item-input-wrap\">\\n <textarea name=\"comment\" placeholder=\"Comments\" value=\"';\n r += c(ctx_1.settings.comment, ctx_1);\n r += '\"></textarea>\\n </div>\\n </div>\\n </li>\\n <li class=\"item-content item-input item-input-with-info\">\\n <div class=\"item-inner\">\\n <div class=\"item-title\" style=\"width: 300px;\">Anonymization</div>\\n <div class=\"item-input-wrap\">\\n <div class=\"range-slider range-slider-init\" data-label=\"true\" data-scale=\"true\" data-scale-steps=\"20\" data-scale-sub-steps=\"5\">\\n <input name=\"anon_percent\" type=\"range\" min=\"0\" max=\"100\" step=\"1\" value=\"';\n r += c(ctx_1.settings.anon_percent, ctx_1);\n r += '\">\\n </div>\\n <div class=\"item-input-info\">Percentage of image height, starting at the top of the images.</div>\\n </div>\\n </div>\\n </li>\\n </ul>\\n </form>\\n <div class=\"row\" style=\"justify-content: center; margin-top:16px;\">\\n <div>\\n <button class=\"button button-fill\" @click=\"add\">Save</button>\\n </div>\\n </div>\\n </div>\\n\\n </form>\\n\\n </div>\\n \\n </div>\\n </div>\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/settings.f7.html?");
  1088. /***/ }),
  1089. /***/ "./src/pages/stats-adjudication.f7.html":
  1090. /*!**********************************************!*\
  1091. !*** ./src/pages/stats-adjudication.f7.html ***!
  1092. \**********************************************/
  1093. /*! exports provided: default */
  1094. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1095. "use strict";
  1096. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n }\n },\n methods: {},\n id: 'bc2de306b6',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\r\\n <div class=\"page\">\\r\\n <div class=\"page no-navbar\">\\r\\n\\r\\n <div class=\"page-content\">\\r\\n\\r\\n <div class=\"block-title\">Adjudication</div>\\r\\n <div class=\"block block-strong\">\\r\\n\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n\n//# sourceURL=webpack:///./src/pages/stats-adjudication.f7.html?");
  1097. /***/ }),
  1098. /***/ "./src/pages/stats-investigator.f7.html":
  1099. /*!**********************************************!*\
  1100. !*** ./src/pages/stats-investigator.f7.html ***!
  1101. \**********************************************/
  1102. /*! exports provided: default */
  1103. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1104. "use strict";
  1105. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n let that = this;\n $$('#investigator-select').change(function () {\n let ID = $$(this).val();\n that.setVisits(ID);\n });\n this.setVisits(this.ID);\n }\n },\n methods: {\n setVisits: function (ID) {\n console.log(ID);\n global;\n let that = this;\n let table = $$('.data-table tbody');\n table.html('');\n for (let i = 0; i < this.userData[ID].visits.length; i++) {\n let V = this.userData[ID].visits[i];\n let tr = $$('<tr class=\"patient-row\">' + '<td class=\"label-cell\">' + V['ctPatientID'] + '</td>' + '<td class=\"label-cell\">' + V['number'] + '</td>' + '<td class=\"label-cell\">' + V['visitDate'] + '</td>' + '<td class=\"numeric-cell\">' + V['imageCount'] + '</td>' + '<td class=\"numeric-cell\">' + (V['mediaCount'] - V['imageCount']) + '</td>' + '</tr>');\n table.append(tr);\n }\n }\n },\n id: 'c3719fbbee',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\r\\n <div class=\"page\">\\r\\n <div class=\"page no-navbar\">\\r\\n\\r\\n <div class=\"page-content\">\\r\\n\\r\\n <div class=\"block-title\">Statistics: Investigators</div>\\r\\n <div class=\"block block-strong\">\\r\\n\\r\\n <div class=\"list no-hairlines-md\" style=\"margin:0;\">\\r\\n <ul>\\r\\n <li class=\"item-content item-input\">\\r\\n <div class=\"item-inner\">\\r\\n <div class=\"item-title item-label\">Select investigator:</div>\\r\\n <div class=\"item-input-wrap input-dropdown-wrap\">\\r\\n <select id=\"investigator-select\">\\r\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.users, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\r\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_2, '../ID==this.ID?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>';\n r += c(ctx_2.firstname, ctx_2);\n r += ' ';\n r += c(ctx_2.lastname, ctx_2);\n r += '</option>\\r\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\r\\n </select>\\r\\n </div>\\r\\n </div>\\r\\n </li>\\r\\n </ul>\\r\\n </div>\\r\\n\\r\\n <div class=\"data-table\">\\r\\n <table>\\r\\n <thead class=\"iimt-small-row\">\\r\\n <tr>\\r\\n <th class=\"label-cell\">Study Patient ID</th>\\r\\n <th class=\"label-cell\">Timepoint ID</th>\\r\\n <th class=\"label-cell\">Visit Date</th>\\r\\n <th class=\"numeric-cell\">Nb Images</th>\\r\\n <th class=\"numeric-cell\">Nb Videos</th>\\r\\n </tr>\\r\\n </thead>\\r\\n <tbody class=\"iimt-small-row\">\\r\\n </tbody>\\r\\n </table>\\r\\n </div>\\r\\n\\r\\n <!--div class=\"block block-strong\" id=\"measures\">\\r\\n </div-->\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/stats-investigator.f7.html?");
  1106. /***/ }),
  1107. /***/ "./src/pages/stats-overview.f7.html":
  1108. /*!******************************************!*\
  1109. !*** ./src/pages/stats-overview.f7.html ***!
  1110. \******************************************/
  1111. /*! exports provided: default */
  1112. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1113. "use strict";
  1114. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n new global.Chart(document.getElementById('statsCenter').getContext('2d'), {\n type: 'pie',\n data: {\n labels: [\n 'Active',\n 'Inactive'\n ],\n datasets: [{\n data: [\n this.activeCenters,\n parseInt(this.settings.center_count) - this.activeCenters\n ],\n backgroundColor: [\n global.ChartUtils.colors().blue,\n global.ChartUtils.colors().red\n ]\n }]\n },\n options: {\n responsive: true,\n plugins: {\n legend: { position: 'top' },\n title: {\n display: true,\n text: 'Centers'\n }\n }\n }\n });\n new global.Chart(document.getElementById('statsPatient').getContext('2d'), {\n type: 'pie',\n data: {\n labels: [\n 'Included',\n 'Expected'\n ],\n datasets: [{\n data: [\n this.includedPatients,\n parseInt(this.settings.patient_expected) - this.includedPatients\n ],\n backgroundColor: [\n global.ChartUtils.colors().blue,\n global.ChartUtils.colors().red\n ]\n }]\n },\n options: {\n responsive: true,\n plugins: {\n legend: { position: 'top' },\n title: {\n display: true,\n text: 'Patients'\n }\n }\n }\n });\n new global.Chart(document.getElementById('statsVisit').getContext('2d'), {\n type: 'pie',\n data: {\n labels: [\n 'Completed',\n 'Not completed'\n ],\n datasets: [{\n data: [\n this.completedTimepoints,\n parseInt(this.settings.patient_expected) * parseInt(this.settings.visit_per_patient) - this.completedTimepoints\n ],\n backgroundColor: [\n global.ChartUtils.colors().blue,\n global.ChartUtils.colors().red\n ]\n }]\n },\n options: {\n responsive: true,\n plugins: {\n legend: { position: 'top' },\n title: {\n display: true,\n text: 'Timepoint'\n }\n }\n }\n });\n let labels = [];\n for (let i = 0; i < this.patientsTimepoints.length; i++) {\n labels.push(this.patientsTimepoints[i].m);\n }\n let patients = [];\n for (let i = 0; i < this.patientsTimepoints.length; i++) {\n patients.push(this.patientsTimepoints[i].patients);\n }\n let timepoints = [];\n for (let i = 0; i < this.patientsTimepoints.length; i++) {\n timepoints.push(this.patientsTimepoints[i].timepoints);\n }\n new global.Chart(document.getElementById('statsPatientVisit').getContext('2d'), {\n type: 'bar',\n data: {\n labels: labels,\n datasets: [\n {\n label: 'Patients',\n data: patients,\n borderColor: global.ChartUtils.colors().red,\n backgroundColor: global.ChartUtils.colorsAlpha().red\n },\n {\n label: 'Timepoint',\n data: timepoints,\n borderColor: global.ChartUtils.colors().blue,\n backgroundColor: global.ChartUtils.colorsAlpha().blue\n }\n ]\n },\n options: {\n responsive: true,\n elements: { bar: { borderWidth: 2 } },\n plugins: {\n legend: { position: 'top' },\n title: {\n display: true,\n text: 'Patients & timepoints numbers per month'\n }\n }\n }\n });\n labels = [];\n for (let i = 0; i < this.readersMeasures.length; i++) {\n labels.push(this.readersMeasures[i].m);\n }\n let readers = [];\n for (let i = 0; i < this.readersMeasures.length; i++) {\n readers.push(this.readersMeasures[i].readers);\n }\n let measures = [];\n for (let i = 0; i < this.readersMeasures.length; i++) {\n measures.push(this.readersMeasures[i].measures);\n }\n new global.Chart(document.getElementById('statsMeasures').getContext('2d'), {\n type: 'bar',\n data: {\n labels: labels,\n datasets: [\n {\n label: 'Readers',\n data: readers,\n borderColor: global.ChartUtils.colors().red,\n backgroundColor: global.ChartUtils.colorsAlpha().red\n },\n {\n label: 'Measures',\n data: measures,\n borderColor: global.ChartUtils.colors().blue,\n backgroundColor: global.ChartUtils.colorsAlpha().blue\n }\n ]\n },\n options: {\n responsive: true,\n elements: { bar: { borderWidth: 2 } },\n plugins: {\n legend: { position: 'top' },\n title: {\n display: true,\n text: 'Active readers & measures per month'\n }\n }\n }\n });\n }\n },\n methods: {\n test: function () {\n console.log('test');\n }\n },\n id: '1df5f9485f',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\r\\n <div class=\"page\">\\r\\n <div class=\"page no-navbar\">\\r\\n\\r\\n <div class=\"page-content\">\\r\\n\\r\\n <div class=\"block-title\">Statistics: Overview</div>\\r\\n <div class=\"block block-strong\" style=\"display:flex; flex-shrink:1; flex-direction:row;\">\\r\\n <div style=\"width: 33%;\">\\r\\n <canvas id=\"statsCenter\"></canvas>\\r\\n </div>\\r\\n <div style=\"width: 34%;\">\\r\\n <canvas id=\"statsPatient\"></canvas>\\r\\n </div>\\r\\n <div style=\"width: 33%;\">\\r\\n <canvas id=\"statsVisit\"></canvas>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\"block block-strong\">\\r\\n <canvas id=\"statsPatientVisit\"></canvas>\\r\\n </div>\\r\\n\\r\\n <div class=\"block block-strong\">\\r\\n <canvas id=\"statsMeasures\"></canvas>\\r\\n </div>\\r\\n\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/stats-overview.f7.html?");
  1115. /***/ }),
  1116. /***/ "./src/pages/stats-reader.f7.html":
  1117. /*!****************************************!*\
  1118. !*** ./src/pages/stats-reader.f7.html ***!
  1119. \****************************************/
  1120. /*! exports provided: default */
  1121. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1122. "use strict";
  1123. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var template7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! template7 */ \"./node_modules/template7/dist/template7.esm.js\");\n\n \n const Template7Helpers = template7__WEBPACK_IMPORTED_MODULE_0__[\"default\"].helpers;\n \n \n \n /* harmony default export */ __webpack_exports__[\"default\"] = ({\n on: {\n pageInit: function () {\n let that = this;\n $$('#reader-select').change(function () {\n let ID = $$(this).val();\n that.setVisits(ID);\n });\n this.setVisits(this.ID);\n }\n },\n methods: {\n setVisits: function (ID) {\n console.log(ID);\n global;\n let that = this;\n let table = $$('.data-table tbody');\n table.html('');\n for (let i = 0; i < this.userData[ID].visits.length; i++) {\n let V = this.userData[ID].visits[i];\n let tr = $$('<tr class=\"patient-row\">' + '<td class=\"label-cell\">' + V['ctPatientID'] + '</td>' + '<td class=\"label-cell\">' + V['number'] + '</td>' + '<td class=\"numeric-cell\">' + V['imageCount'] + '</td>' + '<td class=\"numeric-cell\">' + (V['mediaCount'] - V['imageCount']) + '</td>' + '<td class=\"label-cell\" style=\"background-color:' + (V['measureLastDate'] ? 'lightgreen' : 'red') + '\">' + (V['measureLastDate'] ? V['measureLastDate'] : '') + '</td>' + '<td class=\"label-cell\" style=\"background-color:' + (V['completed'] ? 'lightgreen' : 'red') + '\">' + (V['completed'] ? V['completed'] : '') + '</td>' + '</tr>');\n table.append(tr);\n tr.on('click', function () {\n $$('.patient-row').css({ 'background-color': 'unset' });\n tr.css({ 'background-color': 'antiquewhite' });\n $$('#measures').html('');\n for (let m = 0; m < V.media.length; m++) {\n let M = V.media[m];\n let location = V.area ? eval('global.tr[\"en\"].arteries.' + V.area + '.' + (M.side.length ? M.side + '.' : '') + M.location) + ' ' + M.incidence : '';\n let mediaInfos = M.metrics.width + 'x' + M.metrics.height + 'px' + ' / ' + parseFloat(M.metrics.pxwidth).toFixed(2) + 'x' + parseFloat(M.metrics.pxheight).toFixed(2) + 'mm' + (M.metrics.frameCount ? ' / ' + M.metrics.frameCount + ' frames @' + M.metrics.fps + 'fps' : '');\n $$('#measures').append('<div class=\"block-title\" style=\"margin-left:0px;\">' + location + ': ' + mediaInfos + '</div>');\n let row = $$('<div style=\"margin-left:16px;\">');\n let mHead = '';\n for (let ms = 0; ms < M.measure.length; ms++) {\n let mData = '';\n let MS = M.measure[ms];\n console.log(MS);\n let type = MS['type'];\n if (type == 'calibration') {\n row.append('<div style=\"font-weight:600; margin-bottom: 8px;\">' + type + ': <span style=\"font-weight: normal;\">' + parseFloat(MS.computation.distance).toFixed(0) + ' mm</span></div>');\n } else {\n row.append('<div style=\"font-weight:600;\">' + type + '</div>');\n }\n if (type == 'plaque') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">Area</th>' + '<th style=\"padding:0; font-size:10px;\">Plaque thickness</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.plaque_area).toFixed(1) + ' mm\\xB2</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.plaque_max_thickness).toFixed(2) + ' mm</td>';\n mData += '</tr>';\n } else if (type == 'area') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">Area</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.surface).toFixed(2) + ' mm\\xB2</td>';\n mData += '</tr>';\n } else if (type == 'thickness') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">Thickness</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.distance).toFixed(2) + ' mm</td>';\n mData += '</tr>';\n } else if (type == 'diameter') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">Diameter</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.distance).toFixed(2) + ' mm</td>';\n mData += '</tr>';\n } else if (type == 'plaque_thickness') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">Plaque thickness</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.distance).toFixed(2) + ' mm</td>';\n mData += '</tr>';\n } else if (type == 'imt') {\n mHead = '<tr>' + '<th style=\"padding:0; font-size:10px;\">IMT Mean</th>' + '<th style=\"padding:0; font-size:10px;\">Max</th>' + '<th style=\"padding:0; font-size:10px;\">Std dev</th>' + '<th style=\"padding:0; font-size:10px;\">QI</th>' + '<th style=\"padding:0; font-size:10px;\">Distance</th>' + '<th style=\"padding:0; font-size:10px;\">Points</th>' + '</tr>';\n mData += '<tr>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.imt_mean).toFixed(3) + ' mm</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.imt_max).toFixed(3) + ' mm</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.imt_stddev).toFixed(3) + ' mm</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.qualityIndex).toFixed(3) + '</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + parseFloat(MS.computation.distance).toFixed(3) + ' mm</td>';\n mData += '<td style=\"padding:0; font-size:14px;\">' + MS.computation.numberOfPoints + '</td>';\n mData += '</tr>';\n }\n row.append('<div class=\"data-table\"><table><thead class=\"iimt-small-row\">' + mHead + '</thead><tbody class=\"iimt-small-row\">' + mData + '</tbody></table></div>');\n }\n $$('#measures').append(row);\n }\n });\n }\n }\n },\n id: '7760fd1678',\n render() {\n return function (ctx_1, data_1, root) {\n function isArray(arr) {\n return Array.isArray(arr);\n }\n function isFunction(func) {\n return typeof func === 'function';\n }\n function c(val, ctx) {\n if (typeof val !== 'undefined' && val !== null) {\n if (isFunction(val)) {\n return val.call(ctx);\n } else\n return val;\n } else\n return '';\n }\n root = root || ctx_1 || {};\n var r = '';\n r += '\\r\\n <div class=\"page\">\\r\\n <div class=\"page no-navbar\">\\r\\n\\r\\n <div class=\"page-content\">\\r\\n\\r\\n <div class=\"block-title\">Monitoring of Readers\\' tasks</div>\\r\\n <div class=\"block block-strong\">\\r\\n\\r\\n <div class=\"list no-hairlines-md\" style=\"margin:0;\">\\r\\n <ul>\\r\\n <li class=\"item-content item-input\">\\r\\n <div class=\"item-inner\">\\r\\n <div class=\"item-title item-label\">Select reader:</div>\\r\\n <div class=\"item-input-wrap input-dropdown-wrap\">\\r\\n <select id=\"reader-select\">\\r\\n ';\n r += Template7Helpers.each.call(ctx_1, ctx_1.users, {\n hash: {},\n data: data_1 || {},\n fn: function (ctx_2, data_2) {\n var r = '';\n r += '\\r\\n <option value=\"';\n r += c(ctx_2.ID, ctx_2);\n r += '\" ';\n r += Template7Helpers.js.call(ctx_2, '../ID==this.ID?\\'selected\\':\\'\\'', {\n hash: {},\n data: data_2 || {},\n fn: function empty() {\n return '';\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '>';\n r += c(ctx_2.firstname, ctx_2);\n r += ' ';\n r += c(ctx_2.lastname, ctx_2);\n r += '</option>\\r\\n ';\n return r;\n },\n inverse: function empty() {\n return '';\n },\n root: root,\n parents: [ctx_1]\n });\n r += '\\r\\n </select>\\r\\n </div>\\r\\n </div>\\r\\n </li>\\r\\n </ul>\\r\\n </div>\\r\\n\\r\\n <div class=\"data-table\">\\r\\n <table>\\r\\n <thead class=\"iimt-small-row\">\\r\\n <tr>\\r\\n <th class=\"label-cell\">Study Patient ID</th>\\r\\n <th class=\"label-cell\">Timepoint ID</th>\\r\\n <th class=\"numeric-cell\">Nb Images</th>\\r\\n <th class=\"numeric-cell\">Nb Videos</th>\\r\\n <th class=\"label-cell\">Reading Date</th>\\r\\n <th class=\"label-cell\">Completed</th>\\r\\n </tr>\\r\\n </thead>\\r\\n <tbody class=\"iimt-small-row\">\\r\\n </tbody>\\r\\n </table>\\r\\n </div>\\r\\n\\r\\n <div class=\"block block-strong\" id=\"measures\">\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n';\n return r;\n }(this);\n },\n styleScoped: false\n});\n \n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/pages/stats-reader.f7.html?");
  1124. /***/ }),
  1125. /***/ "./src/routes.js":
  1126. /*!***********************!*\
  1127. !*** ./src/routes.js ***!
  1128. \***********************/
  1129. /*! exports provided: default */
  1130. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1131. "use strict";
  1132. eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _pages_blank_f7_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pages/blank.f7.html */ \"./src/pages/blank.f7.html\");\n/* harmony import */ var _pages_default_f7_html__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pages/default.f7.html */ \"./src/pages/default.f7.html\");\n/* harmony import */ var _pages_front_signin_f7_html__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pages/front-signin.f7.html */ \"./src/pages/front-signin.f7.html\");\n/* harmony import */ var _pages_menu_f7_html__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pages/menu.f7.html */ \"./src/pages/menu.f7.html\");\n/* harmony import */ var _pages_not_found_f7_html__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/not-found.f7.html */ \"./src/pages/not-found.f7.html\");\n/* harmony import */ var _pages_settings_f7_html__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pages/settings.f7.html */ \"./src/pages/settings.f7.html\");\n/* harmony import */ var _pages_investigators_f7_html__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pages/investigators.f7.html */ \"./src/pages/investigators.f7.html\");\n/* harmony import */ var _pages_readers_f7_html__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./pages/readers.f7.html */ \"./src/pages/readers.f7.html\");\n/* harmony import */ var _pages_cros_f7_html__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./pages/cros.f7.html */ \"./src/pages/cros.f7.html\");\n/* harmony import */ var _pages_centers_f7_html__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./pages/centers.f7.html */ \"./src/pages/centers.f7.html\");\n/* harmony import */ var _pages_stats_overview_f7_html__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./pages/stats-overview.f7.html */ \"./src/pages/stats-overview.f7.html\");\n/* harmony import */ var _pages_stats_investigator_f7_html__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./pages/stats-investigator.f7.html */ \"./src/pages/stats-investigator.f7.html\");\n/* harmony import */ var _pages_stats_reader_f7_html__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./pages/stats-reader.f7.html */ \"./src/pages/stats-reader.f7.html\");\n/* harmony import */ var _pages_stats_adjudication_f7_html__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./pages/stats-adjudication.f7.html */ \"./src/pages/stats-adjudication.f7.html\");\n/* harmony import */ var _pages_data_ecrf_f7_html__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./pages/data-ecrf.f7.html */ \"./src/pages/data-ecrf.f7.html\");\n/* harmony import */ var _pages_data_auditlog_f7_html__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./pages/data-auditlog.f7.html */ \"./src/pages/data-auditlog.f7.html\");\n/* harmony import */ var _pages_pacs_f7_html__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./pages/pacs.f7.html */ \"./src/pages/pacs.f7.html\");\n/* harmony import */ var _pages_patients_f7_html__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./pages/patients.f7.html */ \"./src/pages/patients.f7.html\");\n\n // Front pages\n\n // Main pages\n\n // Error page\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ([// Default page\n{\n path: '/',\n component: _pages_blank_f7_html__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n}, // Default page\n{\n path: '/default/',\n component: _pages_default_f7_html__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n}, // Front pages\n{\n path: '/front-signin/',\n component: _pages_front_signin_f7_html__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n}, // settings\n{\n path: '/settings/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/settings/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/settings\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_settings_f7_html__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // patients\n{\n path: '/patients/:ID_center/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/patients/' + routeTo.params.ID_center + '/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/patients\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_patients_f7_html__WEBPACK_IMPORTED_MODULE_17__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // PACS\n{\n path: '/pacs/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/pacs/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/pacs/\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_pacs_f7_html__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // investigators\n{\n path: '/investigators/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/users/investigator/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/users/investigator\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_investigators_f7_html__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // adjudication\n{\n path: '/adjudication/',\n component: _pages_stats_adjudication_f7_html__WEBPACK_IMPORTED_MODULE_13__[\"default\"]\n}, // readers\n{\n path: '/readers/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/users/reader/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/users/reader\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_readers_f7_html__WEBPACK_IMPORTED_MODULE_7__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // cros\n{\n path: '/cros/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/cros/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/cros\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_cros_f7_html__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // centers\n{\n path: '/centers/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/centers/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/centers\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_centers_f7_html__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // /stats/overview/\n{\n path: '/stats/overview/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/overview/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/overview\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_stats_overview_f7_html__WEBPACK_IMPORTED_MODULE_10__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // investigators\n{\n path: '/investigators/:ID/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/investigators/' + routeTo.params.ID + '/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/investigators\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_stats_investigator_f7_html__WEBPACK_IMPORTED_MODULE_11__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // /readers/\n{\n path: '/readers/:ID/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/readers/' + routeTo.params.ID + '/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data); // Process response\n\n console.log(\"ct_admin/readers\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_stats_reader_f7_html__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n }, {\n context: data\n });\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // /data/ecrf/\n{\n path: '/data/ecrf/',\n component: _pages_data_ecrf_f7_html__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n}, // /data/auditlog/\n{\n path: '/data/auditlog/',\n component: _pages_data_auditlog_f7_html__WEBPACK_IMPORTED_MODULE_15__[\"default\"]\n}, // menu\n{\n path: '/menu/',\n async: function async(routeTo, routeFrom, resolve, reject) {\n app.preloader.show();\n app.request.promise.json(app.data.config.apiBaseURL + '/ct_admin/profile/?apiKey=').then(function (data) {\n // Refresh token if needed\n app.methods.refreshToken(data);\n data.ctID = routeTo.params.ctID; // Process response\n\n console.log(\"ct_admin/profile\", data);\n app.preloader.hide();\n\n if (data.result == 'ERROR') {\n reject();\n\n switch (data.reason) {\n case 'denied':\n app.methods.signout('Access revoked. Pleas signin again.');\n break;\n\n case 'internal_error':\n app.dialog.alert(\"Internal error.\");\n break;\n }\n } else {\n // Resolve route to load page\n resolve({\n component: _pages_menu_f7_html__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n }, {\n context: {\n data: data\n }\n });\n global.app.data.user.email = data.email;\n }\n }).catch(function (e) {\n console.log('exception', e);\n reject();\n app.preloader.hide();\n app.dialog.alert(\"Server unavailable.\");\n });\n }\n}, // Error page\n{\n path: '(.*)',\n component: _pages_not_found_f7_html__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n}]);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./src/routes.js?");
  1133. /***/ }),
  1134. /***/ "./src/tools.js":
  1135. /*!**********************!*\
  1136. !*** ./src/tools.js ***!
  1137. \**********************/
  1138. /*! exports provided: default */
  1139. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1140. "use strict";
  1141. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n // Parse <value> in: http://server/?variable=value\n getQueryVariable: function getQueryVariable(variable) {\n var query = location.search.substring(1);\n var vars = query.split('&');\n\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n\n throw variable + ': not found';\n },\n // Trim string\n trim: function trim(str) {\n // Make sure we trim BOM and NBSP\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n return str.replace(rtrim, '');\n },\n uniqueid: function uniqueid() {\n // always start with a letter (for DOM friendlyness)\n var idstr = String.fromCharCode(Math.floor(Math.random() * 25 + 65));\n\n do {\n // between numbers and characters (48 is 0 and 90 is Z (42-48 = 90)\n var ascicode = Math.floor(Math.random() * 42 + 48);\n\n if (ascicode < 58 || ascicode > 64) {\n // exclude all chars between : (58) and @ (64)\n idstr += String.fromCharCode(ascicode);\n }\n } while (idstr.length < 32);\n\n return idstr;\n },\n validateEmail: function validateEmail(email) {\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n});\n\n//# sourceURL=webpack:///./src/tools.js?");
  1142. /***/ }),
  1143. /***/ "./src/tr-en.js":
  1144. /*!**********************!*\
  1145. !*** ./src/tr-en.js ***!
  1146. \**********************/
  1147. /*! exports provided: default */
  1148. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1149. "use strict";
  1150. eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n arteries: {\n base: {\n carotid: \"Carotid\",\n abdo: \"Abdominal\",\n mbsup: \"Up. Limbs\",\n mbinf: \"Low. Limbs\"\n },\n carotid: {\n left: {\n biffurcation: \"Left Carotid Bifurcation\",\n commune: \"Left Common Carotid Artery\",\n interne: \"Left Internal Carotid Artery\",\n subclaviere: \"Left Subclavian Artery\",\n tronc: \"Brachio Cephalic Arterial Trunk\",\n v0: \"Left V0 Vertebral Segment\",\n v1: \"Left V1 Vertebral Segment\",\n v2: \"Left V2 Vertebral Segment\",\n externe: \"Left External Carotid Artery\",\n linguale: \"Left Facial Artery\",\n thyroide: \"Left Superficial Temporal Artery\"\n },\n right: {\n biffurcation: \"Right Carotid Bifurcation\",\n commune: \"Right Common Carotid Artery\",\n interne: \"Right Internal Carotid Artery\",\n subclaviere: \"Right Subclavian Artery\",\n tronc: \"Brachio Cephalic Arterial Trunk\",\n v0: \"Right V0 Vertebral Segment\",\n v1: \"Right V1 Vertebral Segment\",\n v2: \"Right V2 Vertebral Segment\",\n externe: \"Right External Carotid Artery\",\n linguale: \"Right Facial Artery\",\n thyroide: \"Right Superficial Temporal Artery\"\n }\n },\n abdo: {\n hepatic: \"Hepatic Artery\",\n splenic: \"Splenic Artery\",\n hepaticpropre: \"Hepatic Artery Proper\",\n renaledroite: \"Right renal Artery\",\n renalegauche: \"Left renal Artery\",\n mesentericsup: \"Superior Mesenteric Artery\",\n mesentericinf: \"Inferior Mesenteric artery\",\n aorte: \"Aorta\"\n },\n mbsup: {\n left: {\n aradiale: \"Left Radial Artery\",\n ahumerale: \"Left Brachial Artery\",\n acubitale: \"Left Cubital Artery\",\n aaxillaire: \"Left Axillary Artery\",\n asubclav: \"Left Subclavian Artery\"\n },\n right: {\n aradiale: \"Right Radial Artery\",\n ahumerale: \"Right Brachial Artery\",\n acubitale: \"Right Cubital Artery\",\n aaxillaire: \"Right Axillary Artery\",\n asubclav: \"Right Subclavian Artery\"\n }\n },\n mbinf: {\n left: {\n aorteabdo: \"Abdominal Aorta\",\n ailiaque: \"Left Iliac Artery\",\n afemoralesup: \"Left External Iliac Artery\",\n afemoralesups: \"Left Deep Femoral Artery\",\n afemoralepro: \"Left Common Iliac Artery\",\n apoplitee: \"Left Popliteal Artery\",\n apoplitees: \"Left Common Femoral Artery\",\n atibialepost: \"Left Posterior Tibial Artery\"\n },\n right: {\n aorteabdo: \"Abdominal Aorta\",\n ailiaque: \"Right Iliac Artery\",\n afemoralesup: \"Right External Iliac Artery\",\n afemoralesups: \"Right Deep Femoral Artery\",\n afemoralepro: \"Right Common Iliac Artery\",\n apoplitee: \"Right Popliteal Artery\",\n apoplitees: \"Right Common Femoral Artery\",\n atibialepost: \"Right Posterior Tibial Artery\"\n }\n }\n }\n});\n\n//# sourceURL=webpack:///./src/tr-en.js?");
  1151. /***/ }),
  1152. /***/ 0:
  1153. /*!**************************!*\
  1154. !*** multi ./src/app.js ***!
  1155. \**************************/
  1156. /*! no static exports found */
  1157. /***/ (function(module, exports, __webpack_require__) {
  1158. eval("module.exports = __webpack_require__(/*! ./src/app.js */\"./src/app.js\");\n\n\n//# sourceURL=webpack:///multi_./src/app.js?");
  1159. /***/ })
  1160. /******/ });