Commit 0150862f916e83bc156c043db9312bc63ce89310

Authored by fbormann
2 parents 19a6508d 2c630590

Merge branch 'refactoring' of https://github.com/amadeusproject/amadeuslms into refactoring

amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/green.sassc
No preview for this file type
amadeus/static/css/base/amadeus.css
@@ -1393,9 +1393,16 @@ div.dataTables_wrapper div.dataTables_paginate { @@ -1393,9 +1393,16 @@ div.dataTables_wrapper div.dataTables_paginate {
1393 1393
1394 .messages-container { 1394 .messages-container {
1395 height: 400px; 1395 height: 400px;
1396 - overflow-y: scroll;  
1397 border-top-width: 1px; 1396 border-top-width: 1px;
1398 border-top-style: solid; 1397 border-top-style: solid;
  1398 + line-height: 399px;
  1399 + overflow-y: scroll;
  1400 +}
  1401 +.messages-container .messages-list {
  1402 + display: inline-block;
  1403 + vertical-align: bottom;
  1404 + line-height: normal;
  1405 + width: 100%;
1399 } 1406 }
1400 1407
1401 .message-sender { 1408 .message-sender {
@@ -1438,4 +1445,36 @@ div.dataTables_wrapper div.dataTables_paginate { @@ -1438,4 +1445,36 @@ div.dataTables_wrapper div.dataTables_paginate {
1438 .talk-last_msg { 1445 .talk-last_msg {
1439 font-size: 14px; 1446 font-size: 14px;
1440 } 1447 }
  1448 +
  1449 +.message-view {
  1450 + border-top-width: 1px;
  1451 + border-top-style: solid;
  1452 +}
  1453 +
  1454 +.message-view img {
  1455 + margin-bottom: 10px;
  1456 +}
  1457 +
  1458 +.message-view .message-user {
  1459 + font-weight: 700;
  1460 + font-size: 16px;
  1461 +}
  1462 +
  1463 +.message-view .message-user .message-date {
  1464 + font-weight: normal;
  1465 + font-size: 12px;
  1466 +}
  1467 +
  1468 +.message-view .btn-group {
  1469 + margin-top: -5px;
  1470 + margin-bottom: 0px;
  1471 +}
  1472 +
  1473 +.message-view .btn-group .dropdown-menu a {
  1474 + cursor: pointer;
  1475 +}
  1476 +
  1477 +.message-view .btn-group .btn_menu i {
  1478 + font-size: 16px;
  1479 +}
1441 /* End Chat */ 1480 /* End Chat */
1442 \ No newline at end of file 1481 \ No newline at end of file
amadeus/static/css/themes/green.css
@@ -474,7 +474,7 @@ a.add-row { @@ -474,7 +474,7 @@ a.add-row {
474 .participant { 474 .participant {
475 border-color: #888; } 475 border-color: #888; }
476 476
477 -.participant .user-info h4, .modal_profile_sidebar h4 { 477 +.participant .user-info h4, .modal_profile_sidebar h4, .message-view .message-user {
478 color: #59b75c; } 478 color: #59b75c; }
479 479
480 .participant .user-info .status, .modal_profile_sidebar .status { 480 .participant .user-info .status, .modal_profile_sidebar .status {
@@ -504,6 +504,12 @@ a.add-row { @@ -504,6 +504,12 @@ a.add-row {
504 .talk-last_msg { 504 .talk-last_msg {
505 color: #888; } 505 color: #888; }
506 506
  507 +.message-view {
  508 + border-top-color: #cacaca; }
  509 +
  510 +.message-view .message-user .message-date {
  511 + color: #888; }
  512 +
507 @media(max-width: 768px) { 513 @media(max-width: 768px) {
508 .navbar .navbar-nav .dropdown .dropdown-menu li > a { 514 .navbar .navbar-nav .dropdown .dropdown-menu li > a {
509 color: #333333 !important; } 515 color: #333333 !important; }
amadeus/static/css/themes/green.css.map
1 { 1 {
2 "version": 3, 2 "version": 3,
3 -"mappings": "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", 3 +"mappings": "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",
4 "sources": ["green.sass"], 4 "sources": ["green.sass"],
5 "names": [], 5 "names": [],
6 "file": "green.css" 6 "file": "green.css"
amadeus/static/css/themes/green.sass
@@ -645,7 +645,7 @@ a.add-row @@ -645,7 +645,7 @@ a.add-row
645 .participant 645 .participant
646 border-color: #888 646 border-color: #888
647 647
648 -.participant .user-info h4, .modal_profile_sidebar h4 648 +.participant .user-info h4, .modal_profile_sidebar h4, .message-view .message-user
649 color: #59b75c 649 color: #59b75c
650 650
651 .participant .user-info .status, .modal_profile_sidebar .status 651 .participant .user-info .status, .modal_profile_sidebar .status
@@ -676,6 +676,12 @@ a.add-row @@ -676,6 +676,12 @@ a.add-row
676 .talk-last_msg 676 .talk-last_msg
677 color: #888 677 color: #888
678 678
  679 +.message-view
  680 + border-top-color: #cacaca
  681 +
  682 +.message-view .message-user .message-date
  683 + color: #888
  684 +
679 @media(max-width: 768px) 685 @media(max-width: 768px)
680 .navbar .navbar-nav .dropdown .dropdown-menu li > a 686 .navbar .navbar-nav .dropdown .dropdown-menu li > a
681 color: #333333 !important 687 color: #333333 !important
amadeus/static/js/chat.js
@@ -11,6 +11,14 @@ function getModalInfo(btn, space, space_type) { @@ -11,6 +11,14 @@ function getModalInfo(btn, space, space_type) {
11 $("#chat-modal-info").modal('show'); 11 $("#chat-modal-info").modal('show');
12 12
13 $.material.init(); 13 $.material.init();
  14 +
  15 + $('#chat-modal-info').on('shown.bs.modal', function () {
  16 + $(".messages-container").each(function () {
  17 + var height = $(this)[0].scrollHeight;
  18 +
  19 + $(this).animate({scrollTop: height}, 0);
  20 + });
  21 + });
14 } 22 }
15 }); 23 });
16 } 24 }
@@ -43,7 +51,13 @@ function setChatFormSubmit() { @@ -43,7 +51,13 @@ function setChatFormSubmit() {
43 dataType: "json", 51 dataType: "json",
44 async: false, 52 async: false,
45 success: function (data) { 53 success: function (data) {
46 - $('.messages-container').append(data.view); 54 + $('.messages-list').append(data.view);
  55 +
  56 + $(".messages-container").each(function () {
  57 + var height = $(this)[0].scrollHeight;
  58 +
  59 + $(this).animate({scrollTop: height}, 0);
  60 + });
47 61
48 $('#chat-modal-form').modal('hide'); 62 $('#chat-modal-form').modal('hide');
49 63
amadeus/static/js/jitsi.js 0 → 100644
@@ -0,0 +1,309 @@ @@ -0,0 +1,309 @@
  1 +! function(t, e) {
  2 + "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.JitsiMeetExternalAPI = e() : t.JitsiMeetExternalAPI = e()
  3 +}(this, function() {
  4 + return function(t) {
  5 + function e(i) {
  6 + if (n[i]) return n[i].exports;
  7 + var o = n[i] = {
  8 + exports: {},
  9 + id: i,
  10 + loaded: !1
  11 + };
  12 + return t[i].call(o.exports, o, o.exports, e), o.loaded = !0, o.exports
  13 + }
  14 + var n = {};
  15 + return e.m = t, e.c = n, e.p = "/libs/", e(0)
  16 + }([function(t, e, n) {
  17 + (function(e) {
  18 + "use strict";
  19 +
  20 + function i(t, e) {
  21 + t.send(e)
  22 + }
  23 +
  24 + function o(t, e) {
  25 + t.numberOfParticipants += e
  26 + }
  27 +
  28 + function r(t, e, n, i, o, r, s, f) {
  29 + if ((!n || n < l) && (n = l), (!i || i < h) && (i = h), this.parentNode = null, o) this.parentNode = o;
  30 + else {
  31 + var p = document.scripts[document.scripts.length - 1];
  32 + this.parentNode = p.parentNode
  33 + }
  34 + this.iframeHolder = this.parentNode.appendChild(document.createElement("div")), this.iframeHolder.id = "jitsiConference" + u, n && (this.iframeHolder.style.width = "100%"), i && (this.iframeHolder.style.height = "100%"), this.frameName = "jitsiConferenceFrame" + u, this.url = f ? "http" : "https://" + t + "/", e && (this.url += e), this.url += "#jitsi_meet_external_api_id=" + u;
  35 + var c;
  36 + if (r)
  37 + for (c in r) r.hasOwnProperty(c) && "string" == typeof c && (this.url += "&config." + c + "=" + r[c]);
  38 + if (s)
  39 + for (c in s) s.hasOwnProperty(c) && "string" == typeof c && (this.url += "&interfaceConfig." + c + "=" + s[c]);
  40 + this.frame = document.createElement("iframe"), this.frame.src = this.url, this.frame.name = this.frameName, this.frame.id = this.frameName, this.frame.width = "100%", this.frame.height = "100%", this.frame.setAttribute("allowFullScreen", "true"), this.frame = this.iframeHolder.appendChild(this.frame), this.postis = a({
  41 + window: this.frame.contentWindow,
  42 + scope: "jitsi_meet_external_api_" + u
  43 + }), this.eventHandlers = {}, this.postisListeners = {}, this.numberOfParticipants = 1, this._setupListeners(), u++
  44 + }
  45 + var s = n(3).getLogger(e),
  46 + a = n(4),
  47 + l = 790,
  48 + h = 300,
  49 + u = 0,
  50 + f = {
  51 + displayName: "display-name",
  52 + toggleAudio: "toggle-audio",
  53 + toggleVideo: "toggle-video",
  54 + toggleFilmStrip: "toggle-film-strip",
  55 + toggleChat: "toggle-chat",
  56 + toggleContactList: "toggle-contact-list",
  57 + toggleShareScreen: "toggle-share-screen",
  58 + hangup: "video-hangup",
  59 + email: "email",
  60 + avatarUrl: "avatar-url"
  61 + },
  62 + p = {
  63 + incomingMessage: "incoming-message",
  64 + outgoingMessage: "outgoing-message",
  65 + displayNameChange: "display-name-change",
  66 + participantJoined: "participant-joined",
  67 + participantLeft: "participant-left",
  68 + videoConferenceJoined: "video-conference-joined",
  69 + videoConferenceLeft: "video-conference-left",
  70 + readyToClose: "video-ready-to-close"
  71 + };
  72 + r.prototype.executeCommand = function(t) {
  73 + for (var e = arguments.length, n = Array(e > 1 ? e - 1 : 0), o = 1; o < e; o++) n[o - 1] = arguments[o];
  74 + return t in f ? void i(this.postis, {
  75 + method: f[t],
  76 + params: n
  77 + }) : void s.error("Not supported command name.")
  78 + }, r.prototype.executeCommands = function(t) {
  79 + for (var e in t) this.executeCommand(e, t[e])
  80 + }, r.prototype.addEventListeners = function(t) {
  81 + for (var e in t) this.addEventListener(e, t[e])
  82 + }, r.prototype.addEventListener = function(t, e) {
  83 + return t in p ? (this.postisListeners[t] || (this.postis.listen(p[t], function(e) {
  84 + t in this.eventHandlers && "function" == typeof this.eventHandlers[t] && this.eventHandlers[t].call(null, e)
  85 + }.bind(this)), this.postisListeners[t] = !0), void(this.eventHandlers[t] = e)) : void s.error("Not supported event name.")
  86 + }, r.prototype.removeEventListener = function(t) {
  87 + return t in this.eventHandlers ? void delete this.eventHandlers[t] : void s.error("The event " + t + " is not registered.")
  88 + }, r.prototype.removeEventListeners = function(t) {
  89 + for (var e = 0; e < t.length; e++) this.removeEventListener(t[e])
  90 + }, r.prototype.getNumberOfParticipants = function() {
  91 + return this.numberOfParticipants
  92 + }, r.prototype._setupListeners = function() {
  93 + this.postis.listen("participant-joined", o.bind(null, this, 1)), this.postis.listen("participant-left", o.bind(null, this, -1))
  94 + }, r.prototype.dispose = function() {
  95 + this.postis.destroy();
  96 + var t = document.getElementById(this.frameName);
  97 + t && (t.src = "about:blank");
  98 + var e = this;
  99 + window.setTimeout(function() {
  100 + e.iframeHolder.removeChild(e.frame), e.iframeHolder.parentNode.removeChild(e.iframeHolder)
  101 + }, 10)
  102 + }, t.exports = r
  103 + }).call(e, "modules/API/external/external_api.js")
  104 + }, function(t, e) {
  105 + function n() {
  106 + var t = {
  107 + methodName: "",
  108 + fileLocation: "",
  109 + line: null,
  110 + column: null
  111 + },
  112 + e = new Error,
  113 + n = e.stack ? e.stack.split("\n") : [];
  114 + if (!n || n.length < 1) return t;
  115 + var i = null;
  116 + return n[3] && (i = n[3].match(/\s*at\s*(.+?)\s*\((\S*)\s*:(\d*)\s*:(\d*)\)/)), !i || i.length <= 4 ? (0 === n[2].indexOf("log@") ? t.methodName = n[3].substr(0, n[3].indexOf("@")) : t.methodName = n[2].substr(0, n[2].indexOf("@")), t) : (t.methodName = i[1], t.fileLocation = i[2], t.line = i[3], t.column = i[4], t)
  117 + }
  118 +
  119 + function i() {
  120 + var t = arguments[0],
  121 + e = arguments[1],
  122 + i = Array.prototype.slice.call(arguments, 2);
  123 + if (!(r[e] < t.level))
  124 + for (var o = n(), a = s.concat(t.transports), l = 0; l < a.length; l++) {
  125 + var h = a[l],
  126 + u = h[e];
  127 + u && "function" == typeof u && u.bind(h, t.id ? "[" + t.id + "]" : "", "<" + o.methodName + ">: ").apply(h, i)
  128 + }
  129 + }
  130 +
  131 + function o(t, e, n, o) {
  132 + this.id = e, this.format = o, this.transports = n, this.transports || (this.transports = []), this.level = r[t];
  133 + for (var s = Object.keys(r), a = 0; a < s.length; a++) this[s[a]] = i.bind(null, this, s[a])
  134 + }
  135 + var r = {
  136 + trace: 0,
  137 + debug: 1,
  138 + info: 2,
  139 + log: 3,
  140 + warn: 4,
  141 + error: 5
  142 + };
  143 + o.consoleTransport = console;
  144 + var s = [o.consoleTransport];
  145 + o.addGlobalTransport = function(t) {
  146 + s.indexOf(t) === -1 && s.push(t)
  147 + }, o.removeGlobalTransport = function(t) {
  148 + var e = s.indexOf(t);
  149 + e !== -1 && s.splice(e, 1)
  150 + }, o.prototype.setLevel = function(t) {
  151 + this.level = r[t]
  152 + }, t.exports = o, o.levels = {
  153 + TRACE: "trace",
  154 + DEBUG: "debug",
  155 + INFO: "info",
  156 + LOG: "log",
  157 + WARN: "warn",
  158 + ERROR: "error"
  159 + }
  160 + }, function(t, e, n) {
  161 + function i(t, e) {
  162 + this.logStorage = t, this.stringifyObjects = !(!e || !e.stringifyObjects) && e.stringifyObjects, this.storeInterval = e && e.storeInterval ? e.storeInterval : 3e4, this.maxEntryLength = e && e.maxEntryLength ? e.maxEntryLength : 1e4, Object.keys(o.levels).forEach(function(t) {
  163 + var e = o.levels[t];
  164 + this[e] = function(t) {
  165 + this._log.apply(this, arguments)
  166 + }.bind(this, t)
  167 + }.bind(this)), this.storeLogsIntervalID = null, this.queue = [], this.totalLen = 0, this.outputCache = []
  168 + }
  169 + var o = n(1);
  170 + i.prototype.stringify = function(t) {
  171 + try {
  172 + return JSON.stringify(t)
  173 + } catch (t) {
  174 + return "[object with circular refs?]"
  175 + }
  176 + }, i.prototype.formatLogMessage = function(t) {
  177 + for (var e = "", n = 1, i = arguments.length; n < i; n++) {
  178 + var r = arguments[n];
  179 + !this.stringifyObjects && t !== o.levels.ERROR || "object" != typeof r || (r = this.stringify(r)), e += r, n != i - 1 && (e += " ")
  180 + }
  181 + return e.length ? e : null
  182 + }, i.prototype._log = function() {
  183 + var t = this.formatLogMessage.apply(this, arguments);
  184 + if (t) {
  185 + var e = this.queue.length ? this.queue[this.queue.length - 1] : void 0,
  186 + n = "object" == typeof e ? e.text : e;
  187 + n == t ? "object" == typeof e ? e.count += 1 : this.queue[this.queue.length - 1] = {
  188 + text: t,
  189 + count: 2
  190 + } : (this.queue.push(t), this.totalLen += t.length)
  191 + }
  192 + this.totalLen >= this.maxEntryLength && this._flush(!0, !0)
  193 + }, i.prototype.start = function() {
  194 + this._reschedulePublishInterval()
  195 + }, i.prototype._reschedulePublishInterval = function() {
  196 + this.storeLogsIntervalID && (window.clearTimeout(this.storeLogsIntervalID), this.storeLogsIntervalID = null), this.storeLogsIntervalID = window.setTimeout(this._flush.bind(this, !1, !0), this.storeInterval)
  197 + }, i.prototype.flush = function() {
  198 + this._flush(!1, !0)
  199 + }, i.prototype._flush = function(t, e) {
  200 + this.totalLen > 0 && (this.logStorage.isReady() || t) && (this.logStorage.isReady() ? (this.outputCache.length && (this.outputCache.forEach(function(t) {
  201 + this.logStorage.storeLogs(t)
  202 + }.bind(this)), this.outputCache = []), this.logStorage.storeLogs(this.queue)) : this.outputCache.push(this.queue), this.queue = [], this.totalLen = 0), e && this._reschedulePublishInterval()
  203 + }, i.prototype.stop = function() {
  204 + this._flush(!1, !1)
  205 + }, t.exports = i
  206 + }, function(t, e, n) {
  207 + var i = n(1),
  208 + o = n(2),
  209 + r = {},
  210 + s = [],
  211 + a = i.levels.TRACE;
  212 + t.exports = {
  213 + addGlobalTransport: function(t) {
  214 + i.addGlobalTransport(t)
  215 + },
  216 + removeGlobalTransport: function(t) {
  217 + i.removeGlobalTransport(t)
  218 + },
  219 + getLogger: function(t, e, n) {
  220 + var o = new i(a, t, e, n);
  221 + return t ? (r[t] = r[t] || [], r[t].push(o)) : s.push(o), o
  222 + },
  223 + setLogLevelById: function(t, e) {
  224 + for (var n = e ? r[e] || [] : s, i = 0; i < n.length; i++) n[i].setLevel(t)
  225 + },
  226 + setLogLevel: function(t) {
  227 + a = t;
  228 + for (var e = 0; e < s.length; e++) s[e].setLevel(t);
  229 + for (var n in r) {
  230 + var i = r[n] || [];
  231 + for (e = 0; e < i.length; e++) i[e].setLevel(t)
  232 + }
  233 + },
  234 + levels: i.levels,
  235 + LogCollector: o
  236 + }
  237 + }, function(t, e) {
  238 + function n(t) {
  239 + var e, n = t.scope,
  240 + i = t.window,
  241 + o = t.windowForEventListening || window,
  242 + r = {},
  243 + s = [],
  244 + a = {},
  245 + l = !1,
  246 + h = "__ready__",
  247 + u = function(t) {
  248 + var e;
  249 + try {
  250 + e = JSON.parse(t.data)
  251 + } catch (t) {
  252 + return
  253 + }
  254 + if (e.postis && e.scope === n) {
  255 + var i = r[e.method];
  256 + if (i)
  257 + for (var o = 0; o < i.length; o++) i[o].call(null, e.params);
  258 + else a[e.method] = a[e.method] || [], a[e.method].push(e.params)
  259 + }
  260 + };
  261 + o.addEventListener("message", u, !1);
  262 + var f = {
  263 + listen: function(t, e) {
  264 + r[t] = r[t] || [], r[t].push(e);
  265 + var n = a[t];
  266 + if (n)
  267 + for (var i = r[t], o = 0; o < i.length; o++)
  268 + for (var s = 0; s < n.length; s++) i[o].call(null, n[s]);
  269 + delete a[t]
  270 + },
  271 + send: function(t) {
  272 + var e = t.method;
  273 + (l || t.method === h) && i && "function" == typeof i.postMessage ? i.postMessage(JSON.stringify({
  274 + postis: !0,
  275 + scope: n,
  276 + method: e,
  277 + params: t.params
  278 + }), "*") : s.push(t)
  279 + },
  280 + ready: function(t) {
  281 + l ? t() : setTimeout(function() {
  282 + f.ready(t)
  283 + }, 50)
  284 + },
  285 + destroy: function(t) {
  286 + clearInterval(e), l = !1, o && "function" == typeof o.removeEventListener && o.removeEventListener("message", u), t && t()
  287 + }
  288 + },
  289 + p = +new Date + Math.random() + "";
  290 + return e = setInterval(function() {
  291 + f.send({
  292 + method: h,
  293 + params: p
  294 + })
  295 + }, 50), f.listen(h, function(t) {
  296 + if (t === p) {
  297 + clearInterval(e), l = !0;
  298 + for (var n = 0; n < s.length; n++) f.send(s[n]);
  299 + s = []
  300 + } else f.send({
  301 + method: h,
  302 + params: t
  303 + })
  304 + }), f
  305 + }
  306 + t.exports = n
  307 + }])
  308 +});
  309 +//# sourceMappingURL=external_api.min.map
chat/templates/chat/_list_messages.html 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +{% for talk_msg in messages reversed %}
  2 + {% include 'chat/_message.html' %}
  3 +{% endfor %}
0 \ No newline at end of file 4 \ No newline at end of file
chat/templates/chat/_message.html
1 -<div class="col-md-12">  
2 - <p>{{ talk_msg.user }}</p> 1 +<div class="col-md-12 message-view">
  2 + <h4 class="message-user">
  3 + {{ talk_msg.user }}
  4 + <span class="message-date">
  5 + ({{ talk_msg.create_date }})
  6 + </span>
  7 + <span class="btn-group pull-right">
  8 + <button class="btn btn-sm btn_menu btn_fav" onclick="favorite($(this))" data-url="" data-action="" data-toggle="tooltip" data-placement="top" title="">
  9 + <i class="fa fa-thumb-tack"></i>
  10 + </button>
  11 + </span>
  12 + </h4>
3 {% autoescape off %} 13 {% autoescape off %}
4 {{ talk_msg.text }} 14 {{ talk_msg.text }}
5 {% endautoescape %} 15 {% endautoescape %}
  16 +
  17 + {% if talk_msg.image %}
  18 + <img src="{{ talk_msg.image.url }}" class="img-responsive center-block" />
  19 + {% endif %}
6 </div> 20 </div>
7 \ No newline at end of file 21 \ No newline at end of file
chat/templates/chat/list.html
@@ -26,10 +26,10 @@ @@ -26,10 +26,10 @@
26 <div class="panel panel-default"> 26 <div class="panel panel-default">
27 <div class="panel-body"> 27 <div class="panel-body">
28 <div class="col-md-8"> 28 <div class="col-md-8">
29 - <form action="" method="GET" class="form-horizontal"> 29 + <form action="{% url 'chat:participants_general' %}" method="GET" class="form-horizontal">
30 <div class="form-group"> 30 <div class="form-group">
31 <div class="col-md-11 col-sm-11 col-xs-11"> 31 <div class="col-md-11 col-sm-11 col-xs-11">
32 - <input type="text" class="form-control" name="search" placeholder="{% trans 'Search...' %}" /> 32 + <input type="text" class="form-control" name="search" value="{{ search }}" placeholder="{% trans 'Search...' %}" />
33 </div> 33 </div>
34 <div class="col-md-1 col-sm-1 col-xs-1"> 34 <div class="col-md-1 col-sm-1 col-xs-1">
35 <button type="submit" class="btn btn-fab btn-fab-mini"> 35 <button type="submit" class="btn btn-fab btn-fab-mini">
chat/templates/chat/list_participants.html
@@ -28,10 +28,10 @@ @@ -28,10 +28,10 @@
28 <div class="panel panel-default"> 28 <div class="panel panel-default">
29 <div class="panel-body"> 29 <div class="panel-body">
30 <div class="col-md-8"> 30 <div class="col-md-8">
31 - <form action="" method="GET" class="form-horizontal"> 31 + <form action="{% url 'chat:participants_general' %}" method="GET" class="form-horizontal">
32 <div class="form-group"> 32 <div class="form-group">
33 <div class="col-md-11 col-sm-11 col-xs-11"> 33 <div class="col-md-11 col-sm-11 col-xs-11">
34 - <input type="text" class="form-control" name="search" placeholder="{% trans 'Search...' %}" /> 34 + <input type="text" class="form-control" name="search" value="{{ search }}" placeholder="{% trans 'Search...' %}" />
35 </div> 35 </div>
36 <div class="col-md-1 col-sm-1 col-xs-1"> 36 <div class="col-md-1 col-sm-1 col-xs-1">
37 <button type="submit" class="btn btn-fab btn-fab-mini"> 37 <button type="submit" class="btn btn-fab btn-fab-mini">
chat/templates/chat/talk.html
@@ -39,9 +39,9 @@ @@ -39,9 +39,9 @@
39 </div> 39 </div>
40 <div class="row-fluid"> 40 <div class="row-fluid">
41 <div class="messages-container"> 41 <div class="messages-container">
42 - {% for talk_msg in messages %}  
43 - {% include 'chat/_message.html' %}  
44 - {% endfor %} 42 + <div class="messages-list">
  43 + {% include 'chat/_list_messages.html' %}
  44 + </div>
45 </div> 45 </div>
46 </div> 46 </div>
47 </div> 47 </div>
@@ -60,4 +60,4 @@ @@ -60,4 +60,4 @@
60 </div> 60 </div>
61 </div> 61 </div>
62 </div> 62 </div>
63 -</div> 63 -</div>
  64 +</div>
64 \ No newline at end of file 65 \ No newline at end of file
@@ -60,8 +60,9 @@ class GeneralParticipants(LoginRequiredMixin, generic.ListView): @@ -60,8 +60,9 @@ class GeneralParticipants(LoginRequiredMixin, generic.ListView):
60 60
61 def get_queryset(self): 61 def get_queryset(self):
62 user = self.request.user 62 user = self.request.user
  63 + search = self.request.GET.get('search', '')
63 64
64 - users = User.objects.all().exclude(id = user.id).order_by('social_name','username') 65 + users = User.objects.filter(Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)).distinct().order_by('social_name','username').exclude(email = user.email)
65 66
66 self.totals['general'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__generaltalk__isnull = False).count() 67 self.totals['general'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__generaltalk__isnull = False).count()
67 self.totals['category'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__categorytalk__isnull = False).count() 68 self.totals['category'] = ChatVisualizations.objects.filter(user = user, viewed = False, message__talk__categorytalk__isnull = False).count()
@@ -74,6 +75,7 @@ class GeneralParticipants(LoginRequiredMixin, generic.ListView): @@ -74,6 +75,7 @@ class GeneralParticipants(LoginRequiredMixin, generic.ListView):
74 75
75 context['title'] = _('Messages - Participants') 76 context['title'] = _('Messages - Participants')
76 context['totals'] = self.totals 77 context['totals'] = self.totals
  78 + context['search'] = self.request.GET.get('search')
77 context['chat_menu_active'] = 'subjects_menu_active' 79 context['chat_menu_active'] = 'subjects_menu_active'
78 80
79 return context 81 return context
webconference/templates/webconference/jitsi.html 0 → 100644
@@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
  1 +<!DOCTYPE html>
  2 +{% load static i18n %}
  3 +<html>
  4 + <head>
  5 + <meta charset="utf-8">
  6 + <title>{% trans "Web Conference" %}</title>
  7 + <script type="text/javascript" src="{% static 'js/jquery-3.1.0.min.js' %}"></script>
  8 + <!-- <script src="https://meet.jit.si/external_api.js"></script> -->
  9 + <script src="{% static 'js/jitsi.js' %}"></script>
  10 + <style>
  11 + body, html, #jitsi, iframe{
  12 + margin-left: -1px;
  13 + margin-right: 0px;
  14 + margin-top: -2px;
  15 + margin-bottom: -1px;
  16 + padding: 0px;
  17 + width: 100%;
  18 + min-height: 100%;
  19 + height: 100%;
  20 + }
  21 + </style>
  22 + </head>
  23 + <body>
  24 + <div id="jitsi">
  25 +
  26 + </div>
  27 +
  28 + <script>
  29 + // code to start jitsi api
  30 + var domain = "meet.jit.si"; // domain that jitsi will itself connect
  31 + var room = "{{name_room}}"; // name of the room to be created
  32 + var width = $("body").width(); // width of the window to be created
  33 + var height = $("body").height(); // height of the window to be created
  34 + var html = document.getElementById("jitsi");
  35 + var api = new JitsiMeetExternalAPI(domain, room, width, height,html);
  36 + </script>
  37 +
  38 + </body>
  39 +</html>
webconference/templates/webconference/view.html
@@ -65,7 +65,7 @@ @@ -65,7 +65,7 @@
65 <!-- Button to join in web conference --> 65 <!-- Button to join in web conference -->
66 <div class="row"> 66 <div class="row">
67 <div class="text-center"> 67 <div class="text-center">
68 - <a href="#" class="btn btn-raised btn-success">{% trans "Participate" %}</a> 68 + <a href="{% url 'webconferences:conference' webconference.slug %}" class="btn btn-raised btn-success">{% trans "Participate" %}</a>
69 </div> 69 </div>
70 </div> 70 </div>
71 {% endif %} 71 {% endif %}
webconference/urls.py
1 from django.conf.urls import url 1 from django.conf.urls import url
2 from django.contrib.auth import views as auth_views 2 from django.contrib.auth import views as auth_views
  3 +from django.views.generic import TemplateView
3 4
4 from . import views 5 from . import views
5 6
@@ -9,4 +10,5 @@ urlpatterns = [ @@ -9,4 +10,5 @@ urlpatterns = [
9 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'), 10 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'),
10 url(r'^window_view/(?P<slug>[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), 11 url(r'^window_view/(?P<slug>[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'),
11 url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), 12 url(r'^view/(?P<slug>[\w_-]+)/$', views.InsideView.as_view(), name = 'view'),
  13 + url(r'^conference/(?P<slug>[\w_-]+)/$',views.Conference.as_view(), name = 'conference'),
12 ] 14 ]
webconference/views.py
@@ -65,6 +65,20 @@ class NewWindowView(LoginRequiredMixin, @@ -65,6 +65,20 @@ class NewWindowView(LoginRequiredMixin,
65 65
66 return context 66 return context
67 67
  68 +class Conference(LoginRequiredMixin,generic.TemplateView):
  69 +
  70 + login_url = reverse_lazy("users:login")
  71 + redirect_field_name = 'next'
  72 +
  73 + template_name = 'webconference/jitsi.html'
  74 +
  75 +
  76 + def get_context_data(self, **kwargs):
  77 + context = super(Conference, self).get_context_data(**kwargs)
  78 + context['name_room'] = kwargs.get('slug')
  79 + return context
  80 +
  81 +
68 class InsideView(LoginRequiredMixin, 82 class InsideView(LoginRequiredMixin,
69 # '''LogMixin,''' 83 # '''LogMixin,'''
70 generic.DetailView): 84 generic.DetailView):