A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

794 lines
81 KiB

  1. (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
  2. "use strict";
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. require("../model/AbstractModel");
  5. require("../model/UserModel");
  6. require("../view/AbstractView");
  7. require("../view/UserView");
  8. var ChatMessageViewModel_1 = require("../viewmodel/ChatMessageViewModel");
  9. var ChatController = /** @class */ (function () {
  10. function ChatController(model, view) {
  11. this._model = model;
  12. this._view = view;
  13. }
  14. Object.defineProperty(ChatController.prototype, "model", {
  15. /**
  16. * Getter model
  17. * @return {Model}
  18. */
  19. get: function () {
  20. return this._model;
  21. },
  22. /**
  23. * Setter model
  24. * @param {Model} value
  25. */
  26. set: function (value) {
  27. this._model = value;
  28. },
  29. enumerable: true,
  30. configurable: true
  31. });
  32. Object.defineProperty(ChatController.prototype, "view", {
  33. /**
  34. * Getter view
  35. * @return {View}
  36. */
  37. get: function () {
  38. return this._view;
  39. },
  40. /**
  41. * Setter view
  42. * @param {View} value
  43. */
  44. set: function (value) {
  45. this._view = value;
  46. },
  47. enumerable: true,
  48. configurable: true
  49. });
  50. /**
  51. * eventHandler
  52. */
  53. ChatController.prototype.eventHandler = function (vm) {
  54. this.model.someBusinessMethod(vm);
  55. };
  56. ChatController.prototype.test = function () {
  57. var chatMessageViewModels = [];
  58. var chatMessageViewModelMock = new ChatMessageViewModel_1.ChatMessageViewModel();
  59. chatMessageViewModelMock.fromUser = "user1";
  60. chatMessageViewModelMock.toUser = "user2";
  61. chatMessageViewModelMock.messageCipher = "";
  62. chatMessageViewModelMock.messageTime = new Date();
  63. chatMessageViewModels.push(chatMessageViewModelMock);
  64. };
  65. return ChatController;
  66. }());
  67. exports.ChatController = ChatController;
  68. },{"../model/AbstractModel":4,"../model/UserModel":7,"../view/AbstractView":12,"../view/UserView":14,"../viewmodel/ChatMessageViewModel":16}],2:[function(require,module,exports){
  69. "use strict";
  70. Object.defineProperty(exports, "__esModule", { value: true });
  71. require("../model/AbstractModel");
  72. require("../model/UserModel");
  73. require("../view/AbstractView");
  74. require("../view/UserView");
  75. var ActiveUserViewModel_1 = require("../viewmodel/ActiveUserViewModel");
  76. var UserController = /** @class */ (function () {
  77. function UserController(model, view) {
  78. this._model = model;
  79. this._view = view;
  80. }
  81. Object.defineProperty(UserController.prototype, "model", {
  82. /**
  83. * Getter model
  84. * @return {Model}
  85. */
  86. get: function () {
  87. return this._model;
  88. },
  89. /**
  90. * Setter model
  91. * @param {Model} value
  92. */
  93. set: function (value) {
  94. this._model = value;
  95. },
  96. enumerable: true,
  97. configurable: true
  98. });
  99. Object.defineProperty(UserController.prototype, "view", {
  100. /**
  101. * Getter view
  102. * @return {View}
  103. */
  104. get: function () {
  105. return this._view;
  106. },
  107. /**
  108. * Setter view
  109. * @param {View} value
  110. */
  111. set: function (value) {
  112. this._view = value;
  113. },
  114. enumerable: true,
  115. configurable: true
  116. });
  117. /**
  118. * eventHandler
  119. */
  120. UserController.prototype.eventHandler = function (vm) {
  121. this.model.someBusinessMethod(vm);
  122. };
  123. UserController.prototype.test = function () {
  124. var activeUsersMock = [];
  125. var activeUserViewModelMock = new ActiveUserViewModel_1.ActiveUserViewModel();
  126. activeUserViewModelMock.userName = "some user";
  127. activeUserViewModelMock.lastActive = "3 hrs ago";
  128. activeUserViewModelMock.online = true;
  129. activeUsersMock.push(activeUserViewModelMock);
  130. activeUserViewModelMock = new ActiveUserViewModel_1.ActiveUserViewModel();
  131. activeUserViewModelMock.lastActive = "3 hrs ago";
  132. activeUserViewModelMock.online = true;
  133. activeUserViewModelMock.userName = "some user 2";
  134. activeUsersMock.push(activeUserViewModelMock);
  135. this.eventHandler(activeUsersMock);
  136. };
  137. return UserController;
  138. }());
  139. exports.UserController = UserController;
  140. },{"../model/AbstractModel":4,"../model/UserModel":7,"../view/AbstractView":12,"../view/UserView":14,"../viewmodel/ActiveUserViewModel":15}],3:[function(require,module,exports){
  141. (function (global){
  142. "use strict";
  143. var __importDefault = (this && this.__importDefault) || function (mod) {
  144. return (mod && mod.__esModule) ? mod : { "default": mod };
  145. };
  146. Object.defineProperty(exports, "__esModule", { value: true });
  147. var UserModel_1 = require("./model/UserModel");
  148. var UserView_1 = require("./view/UserView");
  149. var UserController_1 = require("./controller/UserController");
  150. var loglevel_1 = __importDefault((typeof window !== "undefined" ? window['log'] : typeof global !== "undefined" ? global['log'] : null));
  151. var handlebars_1 = __importDefault((typeof window !== "undefined" ? window['Handlebars'] : typeof global !== "undefined" ? global['Handlebars'] : null));
  152. var markdown_it_1 = __importDefault((typeof window !== "undefined" ? window['markdownit'] : typeof global !== "undefined" ? global['markdownit'] : null));
  153. var ChatModel_1 = require("./model/ChatModel");
  154. var ChatView_1 = require("./view/ChatView");
  155. var ChatController_1 = require("./controller/ChatController");
  156. var JsonAPI_1 = require("./singleton/JsonAPI");
  157. var SJCLEncryptionService_1 = require("./service/SJCLEncryptionService");
  158. var LogLevelLoggerService_1 = require("./service/LogLevelLoggerService");
  159. // import { logger } from "./singleton/Logger";
  160. // var markdownit = require('markdown-it');
  161. var md = new markdown_it_1.default();
  162. var logger = new LogLevelLoggerService_1.LogLevelLogger();
  163. var userBox = document.getElementById('contacts-box');
  164. loglevel_1.default.setLevel("TRACE");
  165. var userModel = new UserModel_1.UserModel();
  166. // const userModel = ModelFactory.createModel("USER");
  167. // @ts-ignore: Argument of type 'HTMLElement | null' is not assignable to parameter of type 'HTMLElement'. Type 'null' is not assignable to type 'HTMLElement'.
  168. var userView = new UserView_1.UserView(userModel, userBox);
  169. // console.log(userBox);
  170. userModel.attach(userView);
  171. // userView.model
  172. var userController = new UserController_1.UserController(userModel, userView);
  173. userController.test();
  174. // userModel.someBusinessMethod(activeUsersMock);
  175. loglevel_1.default.info("hello");
  176. var chatModel = new ChatModel_1.ChatModel();
  177. // @ts-ignore: Argument of type 'HTMLElement | null' is not assignable to parameter of type 'HTMLElement'. Type 'null' is not assignable to type 'HTMLElement'.
  178. var chatView = new ChatView_1.ChatView(chatModel, userBox);
  179. var chatController = new ChatController_1.ChatController(chatModel, chatView);
  180. function someFunc(vm) {
  181. // log.info(vm);
  182. // logger.info(vm)
  183. }
  184. logger.info("test");
  185. // someFunc(activeUserViewModelMock);
  186. // @ts-ignore: Object is possibly 'null'.
  187. var source = document.getElementById("msg_container_template").innerHTML;
  188. var msgContainerTemplate = handlebars_1.default.compile(source);
  189. JsonAPI_1.JsonAPI.ActiveUsersGET;
  190. var encryptionService = new SJCLEncryptionService_1.SJCLEncryptionService();
  191. var ct = encryptionService.encrypt("password", "data");
  192. console.log(encryptionService.decrypt("password", ct));
  193. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  194. },{"./controller/ChatController":1,"./controller/UserController":2,"./model/ChatModel":5,"./model/UserModel":7,"./service/LogLevelLoggerService":8,"./service/SJCLEncryptionService":9,"./singleton/JsonAPI":10,"./view/ChatView":13,"./view/UserView":14}],4:[function(require,module,exports){
  195. "use strict";
  196. Object.defineProperty(exports, "__esModule", { value: true });
  197. },{}],5:[function(require,module,exports){
  198. "use strict";
  199. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  200. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  201. return new (P || (P = Promise))(function (resolve, reject) {
  202. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  203. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  204. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  205. step((generator = generator.apply(thisArg, _arguments || [])).next());
  206. });
  207. };
  208. var __generator = (this && this.__generator) || function (thisArg, body) {
  209. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  210. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  211. function verb(n) { return function (v) { return step([n, v]); }; }
  212. function step(op) {
  213. if (f) throw new TypeError("Generator is already executing.");
  214. while (_) try {
  215. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  216. if (y = 0, t) op = [op[0] & 2, t.value];
  217. switch (op[0]) {
  218. case 0: case 1: t = op; break;
  219. case 4: _.label++; return { value: op[1], done: false };
  220. case 5: _.label++; y = op[1]; op = [0]; continue;
  221. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  222. default:
  223. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  224. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  225. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  226. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  227. if (t[2]) _.ops.pop();
  228. _.trys.pop(); continue;
  229. }
  230. op = body.call(thisArg, _);
  231. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  232. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  233. }
  234. };
  235. Object.defineProperty(exports, "__esModule", { value: true });
  236. var FetchErrorHandler_1 = require("./FetchErrorHandler");
  237. var ChatModel = /** @class */ (function () {
  238. function ChatModel() {
  239. /**
  240. * @type {Observer[]} List of subscribers. In real life, the list of
  241. * subscribers can be stored more comprehensively (categorized by event
  242. * type, etc.).
  243. */
  244. this.observers = [];
  245. // @ts-ignore: Cannot find name 'hostAddress'.
  246. this.getActiveUsersUrl = "";
  247. }
  248. /**
  249. * The subscription management methods.
  250. */
  251. ChatModel.prototype.attach = function (observer) {
  252. console.log('Subject: Attached an observer.');
  253. this.observers.push(observer);
  254. };
  255. ChatModel.prototype.detach = function (observer) {
  256. var observerIndex = this.observers.indexOf(observer);
  257. this.observers.splice(observerIndex, 1);
  258. console.log('Subject: Detached an observer.');
  259. };
  260. /**
  261. * Trigger an update in each subscriber.
  262. */
  263. ChatModel.prototype.notify = function () {
  264. console.log('Subject: Notifying observers...');
  265. for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {
  266. var observer = _a[_i];
  267. observer.update(this.state);
  268. }
  269. };
  270. ChatModel.prototype.someBusinessMethod = function (activeuserList) {
  271. this.state = activeuserList;
  272. this.helperMethod();
  273. console.log("Subject: My state has just changed");
  274. console.log(activeuserList);
  275. this.notify();
  276. };
  277. /**
  278. * getActiveUsers
  279. */
  280. ChatModel.prototype.getActiveUsers = function () {
  281. var _this = this;
  282. this.getActiveUsersAjax(":")
  283. .then(function (data) {
  284. // // activeUsers = data;
  285. // sessionStorage.setItem('activeUsers', JSON.stringify(data));
  286. // console.log(sessionStorage.getItem('activeUsers'));
  287. console.log("Subject: received ajax active users");
  288. _this.state = data;
  289. _this.notify();
  290. });
  291. };
  292. ChatModel.prototype.getActiveUsersAjax = function (authToken2) {
  293. return __awaiter(this, void 0, void 0, function () {
  294. var headers, response, data;
  295. return __generator(this, function (_a) {
  296. switch (_a.label) {
  297. case 0:
  298. headers = new Headers();
  299. // headers.append('Authorization', basicAuthToken);
  300. headers.append('X-AUTH-TOKEN', authToken2);
  301. return [4 /*yield*/, fetch(this.getActiveUsersUrl, {
  302. method: 'GET',
  303. headers: headers
  304. })];
  305. case 1:
  306. response = _a.sent();
  307. console.log(response.clone());
  308. if (FetchErrorHandler_1.fetchErrorHandler(response.clone())) {
  309. return [2 /*return*/, null];
  310. }
  311. return [4 /*yield*/, response.json()];
  312. case 2:
  313. data = _a.sent();
  314. return [2 /*return*/, data];
  315. }
  316. });
  317. });
  318. };
  319. ChatModel.prototype.helperMethod = function () { };
  320. return ChatModel;
  321. }());
  322. exports.ChatModel = ChatModel;
  323. },{"./FetchErrorHandler":6}],6:[function(require,module,exports){
  324. "use strict";
  325. Object.defineProperty(exports, "__esModule", { value: true });
  326. function fetchErrorHandler(response) {
  327. // alertify.success('Current position : ' + alertify.get('notifier', 'position'));
  328. if (!response.ok) {
  329. return response.text().catch(function (err) {
  330. // the status was not ok and there is no json body
  331. // throw new Error(response.statusText);
  332. // window.alert(sprintf('Some error occured. Http code is %s', response.status));
  333. // alertify.error(sprintf('Some error occured. Http code is %s', response.status));
  334. return true;
  335. }).then(function (json) {
  336. // the status was not ok but there is a json body
  337. // throw new Error(json.error.message); // example error message returned by a REST API
  338. // window.alert(sprintf('Error: %s (Http code %s)', json, response.status));
  339. // alertify.error(sprintf('Some error occured. Http code is %s', response.status));
  340. console.log(json);
  341. return true;
  342. });
  343. }
  344. }
  345. exports.fetchErrorHandler = fetchErrorHandler;
  346. },{}],7:[function(require,module,exports){
  347. "use strict";
  348. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  349. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  350. return new (P || (P = Promise))(function (resolve, reject) {
  351. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  352. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  353. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  354. step((generator = generator.apply(thisArg, _arguments || [])).next());
  355. });
  356. };
  357. var __generator = (this && this.__generator) || function (thisArg, body) {
  358. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  359. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  360. function verb(n) { return function (v) { return step([n, v]); }; }
  361. function step(op) {
  362. if (f) throw new TypeError("Generator is already executing.");
  363. while (_) try {
  364. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  365. if (y = 0, t) op = [op[0] & 2, t.value];
  366. switch (op[0]) {
  367. case 0: case 1: t = op; break;
  368. case 4: _.label++; return { value: op[1], done: false };
  369. case 5: _.label++; y = op[1]; op = [0]; continue;
  370. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  371. default:
  372. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  373. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  374. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  375. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  376. if (t[2]) _.ops.pop();
  377. _.trys.pop(); continue;
  378. }
  379. op = body.call(thisArg, _);
  380. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  381. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  382. }
  383. };
  384. Object.defineProperty(exports, "__esModule", { value: true });
  385. var FetchErrorHandler_1 = require("./FetchErrorHandler");
  386. var UserModel = /** @class */ (function () {
  387. function UserModel() {
  388. /**
  389. * @type {Observer[]} List of subscribers. In real life, the list of
  390. * subscribers can be stored more comprehensively (categorized by event
  391. * type, etc.).
  392. */
  393. this.observers = [];
  394. // @ts-ignore: Cannot find name 'hostAddress'.
  395. this.getActiveUsersUrl = "";
  396. }
  397. /**
  398. * The subscription management methods.
  399. */
  400. UserModel.prototype.attach = function (observer) {
  401. console.log('Subject: Attached an observer.');
  402. this.observers.push(observer);
  403. };
  404. UserModel.prototype.detach = function (observer) {
  405. var observerIndex = this.observers.indexOf(observer);
  406. this.observers.splice(observerIndex, 1);
  407. console.log('Subject: Detached an observer.');
  408. };
  409. /**
  410. * Trigger an update in each subscriber.
  411. */
  412. UserModel.prototype.notify = function () {
  413. console.log('Subject: Notifying observers...');
  414. for (var _i = 0, _a = this.observers; _i < _a.length; _i++) {
  415. var observer = _a[_i];
  416. observer.update(this.state);
  417. }
  418. };
  419. UserModel.prototype.someBusinessMethod = function (activeuserList) {
  420. this.state = activeuserList;
  421. this.helperMethod();
  422. console.log("Subject: My state has just changed");
  423. console.log(activeuserList);
  424. this.notify();
  425. };
  426. /**
  427. * getActiveUsers
  428. */
  429. UserModel.prototype.getActiveUsers = function () {
  430. var _this = this;
  431. this.getActiveUsersAjax(":")
  432. .then(function (data) {
  433. // // activeUsers = data;
  434. // sessionStorage.setItem('activeUsers', JSON.stringify(data));
  435. // console.log(sessionStorage.getItem('activeUsers'));
  436. console.log("Subject: received ajax active users");
  437. _this.state = data;
  438. _this.notify();
  439. });
  440. };
  441. UserModel.prototype.getActiveUsersAjax = function (authToken2) {
  442. return __awaiter(this, void 0, void 0, function () {
  443. var headers, response, data;
  444. return __generator(this, function (_a) {
  445. switch (_a.label) {
  446. case 0:
  447. headers = new Headers();
  448. // headers.append('Authorization', basicAuthToken);
  449. headers.append('X-AUTH-TOKEN', authToken2);
  450. return [4 /*yield*/, fetch(this.getActiveUsersUrl, {
  451. method: 'GET',
  452. headers: headers
  453. })];
  454. case 1:
  455. response = _a.sent();
  456. console.log(response.clone());
  457. if (FetchErrorHandler_1.fetchErrorHandler(response.clone())) {
  458. return [2 /*return*/, null];
  459. }
  460. return [4 /*yield*/, response.json()];
  461. case 2:
  462. data = _a.sent();
  463. return [2 /*return*/, data];
  464. }
  465. });
  466. });
  467. };
  468. UserModel.prototype.helperMethod = function () { };
  469. return UserModel;
  470. }());
  471. exports.UserModel = UserModel;
  472. },{"./FetchErrorHandler":6}],8:[function(require,module,exports){
  473. (function (global){
  474. "use strict";
  475. var __importDefault = (this && this.__importDefault) || function (mod) {
  476. return (mod && mod.__esModule) ? mod : { "default": mod };
  477. };
  478. Object.defineProperty(exports, "__esModule", { value: true });
  479. var loglevel_1 = __importDefault((typeof window !== "undefined" ? window['log'] : typeof global !== "undefined" ? global['log'] : null));
  480. var LogLevelLogger = /** @class */ (function () {
  481. function LogLevelLogger() {
  482. loglevel_1.default.setLevel("DEBUG");
  483. }
  484. LogLevelLogger.prototype.info = function (message) {
  485. loglevel_1.default.info(message);
  486. };
  487. LogLevelLogger.prototype.warn = function (message) {
  488. loglevel_1.default.warn(message);
  489. };
  490. LogLevelLogger.prototype.error = function (message) {
  491. loglevel_1.default.error(message);
  492. };
  493. LogLevelLogger.prototype.debug = function (message) {
  494. loglevel_1.default.debug(message);
  495. };
  496. return LogLevelLogger;
  497. }());
  498. exports.LogLevelLogger = LogLevelLogger;
  499. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  500. },{}],9:[function(require,module,exports){
  501. (function (global){
  502. "use strict";
  503. var __importDefault = (this && this.__importDefault) || function (mod) {
  504. return (mod && mod.__esModule) ? mod : { "default": mod };
  505. };
  506. Object.defineProperty(exports, "__esModule", { value: true });
  507. var sjcl_1 = __importDefault((typeof window !== "undefined" ? window['sjcl'] : typeof global !== "undefined" ? global['sjcl'] : null));
  508. var SJCLEncryptionService = /** @class */ (function () {
  509. function SJCLEncryptionService() {
  510. this.params = { mode: "gcm", ts: 128, adata: "", iter: 10000 };
  511. }
  512. SJCLEncryptionService.prototype.encrypt = function (passphrase, plainText) {
  513. return sjcl_1.default.encrypt(passphrase, plainText, this.params);
  514. };
  515. SJCLEncryptionService.prototype.decrypt = function (passphrase, cipher) {
  516. return sjcl_1.default.decrypt(passphrase, cipher, undefined, undefined);
  517. };
  518. return SJCLEncryptionService;
  519. }());
  520. exports.SJCLEncryptionService = SJCLEncryptionService;
  521. }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
  522. },{}],10:[function(require,module,exports){
  523. "use strict";
  524. Object.defineProperty(exports, "__esModule", { value: true });
  525. var JsonAPI;
  526. (function (JsonAPI) {
  527. // @ts-ignore: Cannot find name 'hostAddress'.
  528. JsonAPI.ActiveUsersGET = "/api/chat/get/active-users/";
  529. })(JsonAPI = exports.JsonAPI || (exports.JsonAPI = {}));
  530. },{}],11:[function(require,module,exports){
  531. "use strict";
  532. Object.defineProperty(exports, "__esModule", { value: true });
  533. var TemplateFactory = /** @class */ (function () {
  534. function TemplateFactory() {
  535. }
  536. TemplateFactory.getTemplate = function () {
  537. // @ts-ignore: Object is possibly 'null'.
  538. var source = document.getElementById("user-contact-online-template").innerHTML;
  539. var msgContainerTemplate = Handlebars.compile(source);
  540. return msgContainerTemplate;
  541. };
  542. return TemplateFactory;
  543. }());
  544. exports.TemplateFactory = TemplateFactory;
  545. },{}],12:[function(require,module,exports){
  546. "use strict";
  547. Object.defineProperty(exports, "__esModule", { value: true });
  548. },{}],13:[function(require,module,exports){
  549. "use strict";
  550. Object.defineProperty(exports, "__esModule", { value: true });
  551. var TemplateFactory_1 = require("../template/TemplateFactory");
  552. var ChatView = /** @class */ (function () {
  553. // private userBoxes: any[] = [];
  554. function ChatView(model, element) {
  555. this._model = model;
  556. this._element = element;
  557. }
  558. Object.defineProperty(ChatView.prototype, "model", {
  559. /**
  560. * Getter model
  561. * @return {Model}
  562. */
  563. get: function () {
  564. return this._model;
  565. },
  566. enumerable: true,
  567. configurable: true
  568. });
  569. Object.defineProperty(ChatView.prototype, "element", {
  570. /**
  571. * Getter element
  572. * @return {any}
  573. */
  574. get: function () {
  575. return this._element;
  576. },
  577. enumerable: true,
  578. configurable: true
  579. });
  580. // /**
  581. // * Setter model
  582. // * @param {Model} value
  583. // */
  584. // public set model(value: Model) {
  585. // this._model = value;
  586. // }
  587. // /**
  588. // * Setter element
  589. // * @param {any} value
  590. // */
  591. // public set element(value: any) {
  592. // this._element = value;
  593. // }
  594. ChatView.prototype.update = function (data) {
  595. var template = TemplateFactory_1.TemplateFactory.getTemplate();
  596. var html = "";
  597. data.forEach(function (element) {
  598. html += template(element);
  599. });
  600. this.element.innerHTML = html;
  601. this.addUserCallBacks();
  602. console.log(this.element.innerHTML);
  603. };
  604. ChatView.prototype.helper = function () {
  605. };
  606. ChatView.prototype.addUserCallBacks = function () {
  607. var userBoxes = document.getElementsByClassName('user-box');
  608. for (var i = 0; i < userBoxes.length; i++) {
  609. var userBox = userBoxes[i];
  610. userBoxes[i].addEventListener('click', this.userCallBack.bind(this, userBox));
  611. }
  612. };
  613. ChatView.prototype.userCallBack = function (el) {
  614. var current = document.getElementsByClassName('user-box active');
  615. var passphrase = "";
  616. if (current.length > 0) {
  617. if (passphrase == '') {
  618. // alert('Please input passphrase')
  619. // alertify.error('Please enter a passphrase');
  620. // return;
  621. }
  622. current[0].className = current[0].className.replace(" active", "");
  623. }
  624. // Add the active class to the current/clicked button
  625. else if (current.length == 0) {
  626. var elem_1 = document.getElementById('passphrase-initial');
  627. passphrase = "";
  628. if (passphrase == '') {
  629. // // alert('Please input passphrase')
  630. // // alertify.error('Please enter a passphrase');
  631. // return;
  632. }
  633. // @ts-ignore: Object is possibly 'null'.
  634. document.getElementById('no-user-selected').hidden = true;
  635. // @ts-ignore: Object is possibly 'null'.
  636. document.getElementById('chat-card').hidden = false;
  637. // @ts-ignore: Object is possibly 'null'.
  638. elem_1.hidden = true;
  639. }
  640. // console.log(this.getElementsByClassName('to-user-span'));
  641. var elem = el.getElementsByClassName('to-user-span')[0];
  642. var userName = elem.innerText;
  643. // @ts-ignore: Object is possibly 'null'.
  644. document.getElementById('user-name-span').innerText = userName;
  645. // populateMessages(userName, passphrase);
  646. sessionStorage.setItem('selectedUser', userName);
  647. el.className += " active";
  648. };
  649. return ChatView;
  650. }());
  651. exports.ChatView = ChatView;
  652. },{"../template/TemplateFactory":11}],14:[function(require,module,exports){
  653. "use strict";
  654. Object.defineProperty(exports, "__esModule", { value: true });
  655. var TemplateFactory_1 = require("../template/TemplateFactory");
  656. var UserView = /** @class */ (function () {
  657. // private userBoxes: any[] = [];
  658. function UserView(model, element) {
  659. this._model = model;
  660. this._element = element;
  661. }
  662. Object.defineProperty(UserView.prototype, "model", {
  663. /**
  664. * Getter model
  665. * @return {Model}
  666. */
  667. get: function () {
  668. return this._model;
  669. },
  670. enumerable: true,
  671. configurable: true
  672. });
  673. Object.defineProperty(UserView.prototype, "element", {
  674. /**
  675. * Getter element
  676. * @return {any}
  677. */
  678. get: function () {
  679. return this._element;
  680. },
  681. enumerable: true,
  682. configurable: true
  683. });
  684. // /**
  685. // * Setter model
  686. // * @param {Model} value
  687. // */
  688. // public set model(value: Model) {
  689. // this._model = value;
  690. // }
  691. // /**
  692. // * Setter element
  693. // * @param {any} value
  694. // */
  695. // public set element(value: any) {
  696. // this._element = value;
  697. // }
  698. UserView.prototype.update = function (data) {
  699. var template = TemplateFactory_1.TemplateFactory.getTemplate();
  700. var html = "";
  701. data.forEach(function (element) {
  702. html += template(element);
  703. });
  704. this.element.innerHTML = html;
  705. this.addUserCallBacks();
  706. console.log(this.element.innerHTML);
  707. };
  708. UserView.prototype.helper = function () {
  709. };
  710. UserView.prototype.addUserCallBacks = function () {
  711. var userBoxes = document.getElementsByClassName('user-box');
  712. for (var i = 0; i < userBoxes.length; i++) {
  713. var userBox = userBoxes[i];
  714. userBoxes[i].addEventListener('click', this.userCallBack.bind(this, userBox));
  715. }
  716. };
  717. UserView.prototype.userCallBack = function (el) {
  718. var current = document.getElementsByClassName('user-box active');
  719. var passphrase = "";
  720. if (current.length > 0) {
  721. if (passphrase == '') {
  722. // alert('Please input passphrase')
  723. // alertify.error('Please enter a passphrase');
  724. // return;
  725. }
  726. current[0].className = current[0].className.replace(" active", "");
  727. }
  728. // Add the active class to the current/clicked button
  729. else if (current.length == 0) {
  730. var elem_1 = document.getElementById('passphrase-initial');
  731. passphrase = "";
  732. if (passphrase == '') {
  733. // // alert('Please input passphrase')
  734. // // alertify.error('Please enter a passphrase');
  735. // return;
  736. }
  737. // @ts-ignore: Object is possibly 'null'.
  738. document.getElementById('no-user-selected').hidden = true;
  739. // @ts-ignore: Object is possibly 'null'.
  740. document.getElementById('chat-card').hidden = false;
  741. // @ts-ignore: Object is possibly 'null'.
  742. elem_1.hidden = true;
  743. }
  744. // console.log(this.getElementsByClassName('to-user-span'));
  745. var elem = el.getElementsByClassName('to-user-span')[0];
  746. var userName = elem.innerText;
  747. // @ts-ignore: Object is possibly 'null'.
  748. document.getElementById('user-name-span').innerText = userName;
  749. // populateMessages(userName, passphrase);
  750. sessionStorage.setItem('selectedUser', userName);
  751. el.className += " active";
  752. };
  753. return UserView;
  754. }());
  755. exports.UserView = UserView;
  756. },{"../template/TemplateFactory":11}],15:[function(require,module,exports){
  757. "use strict";
  758. Object.defineProperty(exports, "__esModule", { value: true });
  759. var ActiveUserViewModel = /** @class */ (function () {
  760. function ActiveUserViewModel() {
  761. }
  762. return ActiveUserViewModel;
  763. }());
  764. exports.ActiveUserViewModel = ActiveUserViewModel;
  765. },{}],16:[function(require,module,exports){
  766. "use strict";
  767. Object.defineProperty(exports, "__esModule", { value: true });
  768. var ChatMessageViewModel = /** @class */ (function () {
  769. function ChatMessageViewModel() {
  770. }
  771. return ChatMessageViewModel;
  772. }());
  773. exports.ChatMessageViewModel = ChatMessageViewModel;
  774. },{}]},{},[3])
  775. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL3dhdGNoaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY29udHJvbGxlci9DaGF0Q29udHJvbGxlci50cyIsInNyYy9jb250cm9sbGVyL1VzZXJDb250cm9sbGVyLnRzIiwic3JjL21haW4udHMiLCJzcmMvbW9kZWwvQ2hhdE1vZGVsLnRzIiwic3JjL21vZGVsL0ZldGNoRXJyb3JIYW5kbGVyLnRzIiwic3JjL21vZGVsL1VzZXJNb2RlbC50cyIsInNyYy9zZXJ2aWNlL0xvZ0xldmVsTG9nZ2VyU2VydmljZS50cyIsInNyYy9zZXJ2aWNlL1NKQ0xFbmNyeXB0aW9uU2VydmljZS50cyIsInNyYy9zaW5nbGV0b24vSnNvbkFQSS50cyIsInNyYy90ZW1wbGF0ZS9UZW1wbGF0ZUZhY3RvcnkudHMiLCJzcmMvdmlldy9DaGF0Vmlldy50cyIsInNyYy92aWV3L1VzZXJWaWV3LnRzIiwic3JjL3ZpZXdtb2RlbC9BY3RpdmVVc2VyVmlld01vZGVsLnRzIiwic3JjL3ZpZXdtb2RlbC9DaGF0TWVzc2FnZVZpZXdNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0FDQ0Esa0NBQStCO0FBQy9CLDhCQUEyQjtBQUMzQixnQ0FBNkI7QUFDN0IsNEJBQXlCO0FBR3pCLDBFQUF5RTtBQUV6RTtJQUtJLHdCQUFZLEtBQVksRUFBRSxJQUFVO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFNRCxzQkFBVyxpQ0FBSztRQUpoQjs7O1dBR0c7YUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDO1FBVUQ7OztXQUdHO2FBQ0gsVUFBaUIsS0FBWTtZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUss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