From f38fd982aabe8a91ab5361135bf827f85b60cbdb Mon Sep 17 00:00:00 2001 From: Simon Eisenmann Date: Tue, 8 Jul 2014 19:57:13 +0200 Subject: [PATCH] Implemented pictures for session. --- src/styles/components/_buddylist.scss | 25 +++++---- static/css/main.min.css | 2 +- static/js/filters/buddyimagesrc.js | 64 +++++++++-------------- static/js/services/buddylist.js | 74 +++++---------------------- static/js/services/buddypicture.js | 69 +++++++++++++++++++++++++ static/js/services/services.js | 3 ++ static/partials/buddy.html | 2 +- static/partials/buddyactions.html | 13 +++-- 8 files changed, 138 insertions(+), 114 deletions(-) create mode 100644 static/js/services/buddypicture.js diff --git a/src/styles/components/_buddylist.scss b/src/styles/components/_buddylist.scss index 6175a476..7ecf6813 100644 --- a/src/styles/components/_buddylist.scss +++ b/src/styles/components/_buddylist.scss @@ -154,6 +154,7 @@ .#{$fa-css-prefix} { color: $actioncolor2; line-height: 46px; + font-size: 3em; } img { bottom: 0; @@ -172,6 +173,7 @@ margin-right:4px; .#{$fa-css-prefix} { line-height: 30px; + font-size: 2em; } } .buddy1 { @@ -201,9 +203,10 @@ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - display: inline-block; - width:174px; text-align:left; + vertical-align:middle; + display: inline-block; + width: 132px; } } @@ -220,28 +223,32 @@ transition-duration: .3s; white-space: nowrap; z-index: 5; - .#{$fa-css-prefix} { - font-size: 1.5em; - pointer-events: none; + > .btn { + width: 42px; + height: 40px; + padding: 0px; + text-align: center; + font-size: 2em; } } .buddy .buddysessions { margin-top: 56px; max-height:0px; + margin-bottom: 10px; transition-property: max-height; transition-duration: 1s; transition-delay: .1s; ul { padding-top: 10px; - margin-left: 14px; + margin: 0 10px 0 14px; padding-left: 0px; border-left: 1px dotted $bordercolor; } ul li { - margin-bottom: 1px; - margin-top: 1px; - margin-left: -4px; + margin-bottom: 4px; + margin-top: 2px; + margin-left: 0px; list-style-type: none; } .currentsession .buddy3 { diff --git a/static/css/main.min.css b/static/css/main.min.css index 7047585b..189a43d6 100644 --- a/static/css/main.min.css +++ b/static/css/main.min.css @@ -36,4 +36,4 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * - *//*! HiDPI v2.0.1 | MIT License | git.io/hidpi */.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 239px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 240px) and (max-width: 479px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 480px) and (max-width: 767px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.dialog-header-error{background-color:#d2322d}.dialog-header-wait{background-color:#428bca}.dialog-header-notify{background-color:#eee}.dialog-header-confirm{background-color:#eee}.dialog-header-error span,.dialog-header-error h4,.dialog-header-wait span,.dialog-header-wait h4{color:#fff}.modal-content{overflow:hidden}.modal-backdrop.in{opacity:0.2}html,body{-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#e5e5e5;height:100%}body{margin:0;max-height:100%;max-width:100%;overflow:hidden;padding:0}a{cursor:pointer}#background{background:url("../img/bg-tiles.jpg") repeat;bottom:0;left:0;position:fixed;right:0;top:0;z-index:0}@media (-webkit-min-device-pixel-ratio: 1.3), (min-resolution: 1.3dppx){#background{background-image:url("../img/bg-tiles_x2.jpg");-webkit-background-size:198px 200px;background-size:198px 200px}}.help-block{color:#737373}.dialog-header-notify,.dialog-header-confirm{background-color:#eee}#loader{background:url("../img/logo.svg") no-repeat center;-webkit-background-size:contain;background-size:contain;bottom:15%;left:15%;max-width:200px;max-height:150px;margin:auto;opacity:1;pointer-events:none;position:fixed;right:15%;top:15%;z-index:20000;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.5s;transition-duration:.5s}#loader.done{opacity:0}#loader>div{color:#ddd;display:block;font-size:2em;left:0;margin:0 auto;right:0;position:absolute;bottom:0px;margin-bottom:-40px;text-align:center;text-shadow:0 0 5px black}#loader .loader-message{font-size:0.5em}.mainview{bottom:0;display:none;left:150px;position:absolute;right:0;top:45px}.withChat .mainview,.withBuddylist .mainview{right:260px}.withBuddylist.withChat .mainview{right:520px}#page{bottom:0;left:0;position:absolute;right:0;top:44px}.welcome{color:#aaa;font-size:1.1em;margin-top:80px;text-shadow:0 0 5px black;max-width:600px;min-height:160px;padding-left:160px;padding-right:0px;position:relative}@media (max-width: 700px){.welcome{padding-left:0px;margin:0 10px}}.welcome h1{text-align:center;white-space:nowrap}@media (max-width: 700px){.welcome h1{white-space:normal}}.welcome .welcome-container{max-width:450px;margin:0 auto}.welcome .welcome-logo{position:absolute;left:0px;top:0px;bottom:0px;width:140px;background:url("../img/logo.svg") no-repeat left;-webkit-background-size:contain;background-size:contain}@media (max-width: 700px){.welcome .welcome-logo{position:relative;margin:0 auto;height:70px;width:70px;margin-top:30px}}.welcome .welcome-input{position:relative}.welcome .welcome-input input{padding-right:105px}.welcome .welcome-input-buttons{text-shadow:none;position:absolute;top:6px;right:8px}.welcome .welcome-input-buttons a{padding-right:.5em;color:black}[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none}.nicescroll::-webkit-scrollbar{background-color:#e5e5e5;border:solid transparent;height:8px;width:8px}.nicescroll::-webkit-scrollbar:hover{background-color:#e5e5e5;border-left:1px solid rgba(0,0,0,0.12);border-right:1px solid rgba(0,0,0,0.12)}.nicescroll::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2)}.nicescroll::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,0.4)}.fadetogglecontainer>div{position:absolute;width:100%}.animate-show.ng-hide-add{opacity:1;display:block !important;-webkit-transition:all linear 0.5s;transition:all linear 0.5s}.animate-show.ng-hide-add.ng-hide-add-active{opacity:0}.animate-show.ng-hide-remove{opacity:0;display:block !important;-webkit-transition:all linear 0.5s;transition:all linear 0.5s}.animate-show.ng-hide-remove.ng-hide-remove-active{opacity:1}.overlaybar{background:rgba(0,0,0,0.2);color:#ccc;min-height:36px;padding:3px 8px 0 30px;position:absolute;text-shadow:0 0 5px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.overlaybar:hover{background:rgba(0,0,0,0.5)}.overlaybar .btn{text-shadow:none}.overlaybar .btn-link{text-shadow:0 0 5px black}.overlaybar .form-group>*{float:left;padding-top:0}.overlaybar input[type="radio"],.overlaybar input[type="checkbox"]{margin-top:2px}.overlaybar label{padding-top:6px !important}.overlaybar.notvisible{background:transparent;pointer-events:none}.overlaybar.notvisible:hover{background:transparent}.overlaybar.notvisible .overlaybar-content{display:none}.overlaybar.notvisible .overlaybar-overlay{display:block}.overlaybar .overlaybar-button{color:#ccc;display:block;font-size:20px;top:0px;left:3px;opacity:.7;padding:4px 6px;position:absolute;pointer-events:auto;vertical-align:middle;z-index:15}.overlaybar .overlaybar-content{display:inline-block;margin-left:.5em;margin-bottom:0;max-width:60%}.overlaybar .overlaybar-content>*{padding-right:.5em}.overlaybar .overlaybar-content .input-group{max-width:160px}.overlaybar .overlaybar-overlay{display:none;margin-left:.5em;opacity:.7;padding-top:2px;text-align:left}#rightslide{bottom:0;left:0;pointer-events:none;position:absolute;right:-260px;top:44px;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;z-index:5}.withBuddylist #rightslide{right:0}#rightslide .rightslidepane{height:100%;position:relative;width:100%}#bar{left:0;min-height:44px;position:fixed;right:0;top:0;z-index:5}.bar{background:#f5f5f5;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,0.2);box-shadow:0 2px 10px 0 rgba(0,0,0,0.2);color:#262626;font:bold 1em/40px "Helvetica Neue",Helvetica,Arial,sans-serif;height:3.38462em;text-align:center;touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (max-width: 700px){.bar{z-index:40;-webkit-box-shadow:none;box-shadow:none}}.bar .btn{position:relative}.bar .left{bottom:0;left:0;top:0;padding-left:12px;position:absolute}.bar .left .logo{background:url("../img/logo-small.png") no-repeat;-webkit-background-size:100%;background-size:100%;display:inline-block;color:black;height:32px;font:normal 11px/11px "Helvetica Neue",Helvetica,Arial,sans-serif;text-align:left;width:90px;vertical-align:middle}.bar .left .logo span{font-style:italic;left:38px;position:relative;top:26px}.bar .left .logo span a{color:#222}.bar .middle{background-color:#f5f5f5;display:inline-block;font-weight:bold;min-height:44px;padding:0 1em;position:relative;margin-left:-70px;z-index:5}@media (max-width: 700px){.bar .middle{display:block;margin-left:0px;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.bar .middle .userpicture{border-radius:2px;display:inline-block;height:46px;margin:-5px .5em 0 .5em;width:46px}@media (max-width: 700px){.bar .middle .userpicture{display:none}}@media (max-width: 700px){.bar .middle.status-connected,.bar .middle.status-conference{max-width:100%;left:0;position:absolute;right:0}}@media (max-width: 700px){.bar .middle.status-connecting,.bar .middle.status-closed,.bar .middle.status-reconnecting,.bar .middle.status-error,.bar .middle.status-ringing{border-bottom:1px solid #ccc;max-width:100%;min-height:45px}}@media (max-width: 700px){.bar .middle.status-connecting .actions,.bar .middle.status-closed .actions,.bar .middle.status-reconnecting .actions,.bar .middle.status-error .actions,.bar .middle.status-ringing .actions{display:block;padding:.2em 0 .8em 0}}.bar .right{bottom:1px;padding-right:8px;position:absolute;right:0;top:1px}.bar .right .badge{background-color:#84b819;border:1px solid white;font-size:.4em;position:absolute;right:0;top:2px}.bar .right .btn{background:transparent;border-color:transparent;color:rgba(0,0,0,0.3);display:inline-block;height:42px;font:24px/40px "Helvetica Neue",Helvetica,Arial,sans-serif;margin-left:-4px;padding:0;text-align:center;width:42px}.bar .right .btn:focus{border:none;outline:none;-webkit-box-shadow:0;box-shadow:0}.bar .right .btn:hover{background-color:none;border-color:#ccc;color:rgba(0,0,0,0.4)}.bar .right .btn.active{background-color:none;border-color:#ccc;color:rgba(0,0,0,0.4)}.bar .right .btn.active.amutebtn{background-color:#db4f39;border-color:#db4f39;color:white}.bar .right .btn.active.aenablebtn{background-color:#84b819;border-color:#84b819;color:white}@-webkit-keyframes shakeityeah{0%{-webkit-transform:translate(2px, 1px) rotate(0deg);transform:translate(2px, 1px) rotate(0deg)}2%{-webkit-transform:translate(-1px, -2px) rotate(-1deg);transform:translate(-1px, -2px) rotate(-1deg)}4%{-webkit-transform:translate(-3px, 0px) rotate(1deg);transform:translate(-3px, 0px) rotate(1deg)}8%{-webkit-transform:translate(0px, 2px) rotate(0deg);transform:translate(0px, 2px) rotate(0deg)}10%{-webkit-transform:translate(1px, -1px) rotate(1deg);transform:translate(1px, -1px) rotate(1deg)}12%{-webkit-transform:translate(-1px, 2px) rotate(-1deg);transform:translate(-1px, 2px) rotate(-1deg)}14%{-webkit-transform:translate(-3px, 1px) rotate(0deg);transform:translate(-3px, 1px) rotate(0deg)}16%{-webkit-transform:translate(2px, 1px) rotate(-1deg);transform:translate(2px, 1px) rotate(-1deg)}18%{-webkit-transform:translate(-1px, -1px) rotate(1deg);transform:translate(-1px, -1px) rotate(1deg)}20%{-webkit-transform:translate(2px, 2px) rotate(0deg);transform:translate(2px, 2px) rotate(0deg)}22%{-webkit-transform:translate(1px, -2px) rotate(-1deg);transform:translate(1px, -2px) rotate(-1deg)}24%{-webkit-transform:translate(0px, 0px) rotate(0deg);transform:translate(0px, 0px) rotate(0deg)}}@keyframes shakeityeah{0%{-webkit-transform:translate(2px, 1px) rotate(0deg);transform:translate(2px, 1px) rotate(0deg)}2%{-webkit-transform:translate(-1px, -2px) rotate(-1deg);transform:translate(-1px, -2px) rotate(-1deg)}4%{-webkit-transform:translate(-3px, 0px) rotate(1deg);transform:translate(-3px, 0px) rotate(1deg)}8%{-webkit-transform:translate(0px, 2px) rotate(0deg);transform:translate(0px, 2px) rotate(0deg)}10%{-webkit-transform:translate(1px, -1px) rotate(1deg);transform:translate(1px, -1px) rotate(1deg)}12%{-webkit-transform:translate(-1px, 2px) rotate(-1deg);transform:translate(-1px, 2px) rotate(-1deg)}14%{-webkit-transform:translate(-3px, 1px) rotate(0deg);transform:translate(-3px, 1px) rotate(0deg)}16%{-webkit-transform:translate(2px, 1px) rotate(-1deg);transform:translate(2px, 1px) rotate(-1deg)}18%{-webkit-transform:translate(-1px, -1px) rotate(1deg);transform:translate(-1px, -1px) rotate(1deg)}20%{-webkit-transform:translate(2px, 2px) rotate(0deg);transform:translate(2px, 2px) rotate(0deg)}22%{-webkit-transform:translate(1px, -2px) rotate(-1deg);transform:translate(1px, -2px) rotate(-1deg)}24%{-webkit-transform:translate(0px, 0px) rotate(0deg);transform:translate(0px, 0px) rotate(0deg)}}.btn-shakeityeah{-webkit-animation-name:shakeityeah;animation-name:shakeityeah;-webkit-animation-duration:4.0s;animation-duration:4.0s;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}#buddylist{bottom:0;position:absolute;right:0;top:0;width:285px;z-index:50}#buddylist:before{background:#f5f5f5;border-left:1px solid #ccc;border-top:1px solid #ccc;border-bottom:1px solid #ccc;border-top-left-radius:6px;border-bottom-left-radius:6px;bottom:0;color:rgba(0,0,0,0.3);content:"\f100";cursor:pointer;display:none;font-family:FontAwesome;font-size:1.8em;height:55px;left:0;line-height:55px;margin:auto;pointer-events:auto;position:absolute;text-align:center;top:0;width:25px}.withBuddylist #buddylist:before{content:"\f101"}.withBuddylistAutoHide #buddylist:before{display:block}.buddylist{background:#f5f5f5;border-top:1px solid #ccc;bottom:0;left:25px;overflow-x:hidden;overflow-y:auto;pointer-events:auto;position:absolute;right:0;top:0}.buddylist.loading .buddylistloading{display:block}.buddylist.empty .buddylistempty{display:block}.buddylist .buddycontainer{pointer-events:auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.buddylist .buddylistloading,.buddylist .buddylistempty{bottom:0;color:#b3b3b3;display:none;font-size:1.4em;height:2em;left:0;margin:auto;padding:.4em;position:absolute;right:0;text-align:center;top:0}.buddy{background:#fff;border-bottom:1px solid #ccc;cursor:pointer;display:block;font-size:13px;min-height:66px;overflow:hidden;position:relative;text-align:left;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.buddy:hover{background:#f5f5f5}.buddy.withSubline .buddy1,.buddy.contact .buddy1{top:15px}.buddy.withSubline .buddy2,.buddy.contact .buddy2{display:block}.buddy.hovered .buddyactions{right:0}.buddy .fa.contact:before{content:"\f006"}.buddy.contact .fa.contact:before{content:"\f005"}.buddy .buddyPicture{background:#84b819;border-radius:2px;float:left;height:46px;margin:10px;overflow:hidden;position:relative;text-align:center;width:46px}.buddy .buddyPicture .fa{color:#009534;line-height:46px}.buddy .buddyPicture img{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.buddy .buddyPictureSmall{margin:0px;margin-left:-4px;height:30px;width:30px;margin-right:4px}.buddy .buddyPictureSmall .fa{line-height:30px}.buddy .buddy1{color:#262626;font-weight:bold;font-size:14px;height:28px;left:65px;position:absolute;overflow:hidden;right:4px;text-overflow:ellipsis;top:24px;white-space:nowrap}.buddy .buddy2{color:rgba(0,0,0,0.5);left:65px;overflow:hidden;position:absolute;right:0px;top:33px;white-space:nowrap;display:none}.buddy .buddy3{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:inline-block;width:174px;text-align:left}.buddy .buddyactions{background:rgba(255,255,255,0.5);height:66px;line-height:66px;position:absolute;right:-125px;padding:0 10px;text-align:right;top:0px;-webkit-transition-property:right;transition-property:right;-webkit-transition-duration:.3s;transition-duration:.3s;white-space:nowrap;z-index:5}.buddy .buddyactions .fa{font-size:1.5em;pointer-events:none}.buddy .buddysessions{margin-top:56px;max-height:0px;-webkit-transition-property:max-height;transition-property:max-height;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:.1s;transition-delay:.1s}.buddy .buddysessions ul{padding-top:10px;margin-left:14px;padding-left:0px;border-left:1px dotted #ccc}.buddy .buddysessions ul li{margin-bottom:1px;margin-top:1px;margin-left:-4px;list-style-type:none}.buddy .buddysessions .currentsession .buddy3{font-weight:bold}.buddy.hovered .buddysessions{max-height:999px}.buddyPicture .picture{display:block;margin-bottom:5px}.buddyPicture .videoPicture{margin-bottom:4px}.buddyPicture .videoPicture .videoPictureVideo{background-color:black;overflow:hidden;position:relative}.buddyPicture .videoPicture video{object-fit:cover}.buddyPicture .videoFlash{position:absolute;left:0px;right:0px;top:0px;bottom:0px;background-color:white;border:1px dotted #ccc;visibility:hidden;z-index:5}.buddyPicture .videoFlash.flash{visibility:visible}.buddyPicture .preview{left:0;position:absolute;top:0}.buddyPicture .preview.previewPicture{position:relative}.buddyPicture .btn-takePicture,.buddyPicture .btn-retakePicture{left:0px;right:0px;position:absolute;top:50%;margin:0 auto;max-width:40%}.buddyPicture .btn-retakePicture{visibility:hidden}.buddyPicture .videoPictureVideo:hover .btn-retakePicture{visibility:visible}.buddyPicture .countdownPicture{color:#f5f5f5;font-size:45px;left:0px;right:0px;position:absolute;top:75px;margin:0 auto;text-align:center;text-shadow:0 0 5px black;opacity:0.8}#settings{border-top:1px solid #ccc;bottom:0;padding-right:20px;position:fixed;right:-520px;top:44px;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;width:520px;z-index:50}#settings.show{right:0}@media only screen and (max-width: 630px){#settings.show{background:#fff;left:0;width:auto}}@media only screen and (max-width: 630px){#settings.show .form-actions{bottom:0;height:60px;left:0;margin-bottom:0;padding:6px 0 6px 120px;position:fixed;right:0}}.settings{background:#fff;bottom:0;left:0;overflow-x:hidden;overflow-y:auto;padding:10px;position:absolute;right:0;top:0}.settings .version{color:#ccc;font-size:10px;position:absolute;right:10px;top:10px}@media only screen and (max-width: 630px){.settings .form-horizontal .controls{margin-left:110px}}@media only screen and (max-width: 630px){.settings .form-horizontal .control-label{width:100px;word-wrap:break-word}}@media only screen and (max-width: 630px){.settings{padding-bottom:10px}}#chat{bottom:0px;-webkit-perspective:1000;perspective:1000;pointer-events:none;position:absolute;right:260px;top:0px;width:260px;z-index:45}.withChat #chat .chatcontainer{left:0}.withChat .chatpane.flip{-webkit-transform:rotateY(360deg);-ms-transform:rotateY(360deg);transform:rotateY(360deg)}.withChat.withChatMaximized #chat{left:0;width:auto}.withChat.withChatMaximized #chat .chatcontainer{width:auto}.chatcontainer{background:#e7e7e7;bottom:0;left:260px;overflow:hidden;position:absolute;right:0;top:0;width:260px}.showchatlist .chatpane{right:100%}.showchatlist .chatlist{left:0}.chatlist{background:#e7e7e7;bottom:0;left:100%;position:absolute;top:0;width:100%}.chatlist .list-group{margin-top:-1px;margin-bottom:-1px;max-height:100%;overflow-x:hidden;overflow-y:auto}.chatlist .list-group-item{border-right:none;border-left:none;border-radius:0;padding-right:70px;position:relative;min-height:51px;line-height:26px}.chatlist .list-group-item.newmessage{-webkit-animation:newmessage 1s ease -0.3s infinite;animation:newmessage 1s ease -0.3s infinite}.chatlist .list-group-item.disabled{color:#aaa}.chatlist .list-group-item:hover button{display:inline}.chatlist .list-group-item .fa-lg{display:inline-block;text-align:center;width:18px}.chatlist .list-group-item .badge{background:#84b819;border:1px solid white;position:absolute;right:50px;top:14px}.chatlist .list-group-item button{display:none;position:absolute;right:10px}.chatpane{-webkit-backface-visibility:hidden;backface-visibility:hidden;bottom:0;position:absolute;right:0;top:0;width:100%}.chat{background:#e7e7e7;display:none;bottom:0;left:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.chat.active.visible{display:block}.chatbody{border-right:1px solid #ccc;bottom:-1px;left:0;position:absolute;right:0;top:36px}@media (max-height: 210px){.chatbody{border-top:1px solid #ccc;top:0px}}.chatheader{background:#f5f5f5;border-top:1px solid #ccc;border-bottom:1px solid #ccc;border-right:1px solid #ccc;height:36px;left:0;line-height:34px;padding:0 4px 0 8px;position:absolute;right:0;top:0}.chatheader .chatstatusicon{cursor:pointer;display:block;font-size:1.4em;height:36px;left:0;position:absolute;text-align:center;top:0;width:36px}.chatheader .chatheadertitle{display:inline;padding-left:28px}.chatheader .ctrl{color:rgba(0,0,0,0.3);position:absolute;right:1px;top:0}.chatheader .ctrl .fa{cursor:pointer;padding:6px}.chatheader span{display:inline-block;max-width:60%;overflow:hidden;pointer-events:none;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}@media (max-height: 210px){.chatheader{display:none}}.chat .outputbox{bottom:75px;left:0;position:absolute;right:0;top:0}@media (max-height: 210px){.chat .outputbox{bottom:45px}}.chat .output{height:100%;overflow-x:hidden;overflow-y:auto;padding:0.4em 0}.chat .output>i{clear:both;color:#aaa;display:block;font-size:.8em;padding:6px 0;text-align:center}.chat .output>i.p2p{font-weight:bold;padding:6px 0}.chat.with_pictures .message.is_self{padding-right:54px}.chat.with_pictures .message.is_self .timestamp{right:58px}.chat.with_pictures .message.is_remote{padding-left:58px}.chat .message{background:#fff;border:1px solid #e5e5ef;border-radius:6px;clear:both;display:block;margin:0 4px 2px 20px;padding:8px;position:relative;word-wrap:break-word}.chat .message ul{list-style-type:none;margin:0;padding-left:0}.chat .message li{line-height:1.1em;margin:4px 0;padding-left:1.2em;position:relative}.chat .message li:before{color:#ccc;content:'\f075';font-family:FontAwesome;left:0;position:absolute;text-align:center;width:12px}.chat .message .timestamp{color:#aaa;font-size:.8em;position:absolute;right:8px;text-align:right;top:8px}.chat .message .timestamp-space{width:40px;height:10px;float:right}.chat .message strong{display:block;padding-bottom:2px;margin-right:40px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat .message.is_self li:before{color:#ccc;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.chat .message li.unread:before{content:"\f0eb";color:#fe9a2e}.chat .message li.sending:before{content:"\f0ec";color:#ccc}.chat .message li.sent:before{content:"\f003";color:#5882fa}.chat .message li.delivered:before{content:"\f019";color:#5882fa}.chat .message li.received:before{content:"\f06e";color:#84b819}.chat .message li.read:before{content:"\f00c";color:#ccc}.chat .message.is_self .buddyPicture{left:auto;right:4px}.chat .message .buddyPicture{background:#84b819;border-radius:2px;height:46px;left:4px;overflow:hidden;position:absolute;text-align:center;top:4px;width:46px}.chat .message .buddyPicture .fa{color:#009534;line-height:46px}.chat .message .buddyPicture img{display:block;bottom:0;left:0;right:0;position:absolute;top:0}.chat .message:before,.chat .message:after{border-style:solid;content:"";display:block;position:absolute;width:0}.chat .message.is_remote{background:#fff}.chat .message.is_remote:before{border-width:10px 17px 10px 0;border-color:transparent #fff;bottom:auto;left:-16px;top:4px}.chat .message.is_remote:after{border-width:9px 15px 9px 0;border-color:transparent #fff;bottom:auto;left:-15px;top:5px}.chat .message.is_self{background:#fff;margin-right:20px;margin-left:4px;padding-right:0}.chat .message.is_self:before{border-width:10px 0 10px 17px;border-color:transparent #fff;bottom:auto;right:-16px;top:4px}.chat .message.is_self:after{border-width:9px 0 9px 15px;border-color:transparent #fff;bottom:auto;right:-15px;top:5px}.chat .chatbodybottom{background:#e7e7e7;bottom:1px;left:0;margin:0 auto;position:absolute;right:0}@media (max-height: 210px){.chat .chatbodybottom{height:auto}}.chat .typinghint{padding:0 6px 0 6px;white-space:nowrap;overflow:hidden;font-size:.8em;color:#aaa;height:14px}@media (max-height: 210px){.chat .typinghint{display:none}}.chat .inputbox{position:relative}.chat .inputbox .btn{position:absolute;right:6px;top:1px;padding:.5em 1em;display:none}.chat .inputbox>div{border-top:1px solid #ccc}@media (max-height: 210px){.chat .inputbox{height:auto}}.chat .input{border-radius:0;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;display:block;height:54px;max-height:54px;margin:0;resize:none;width:100%}.chat .input:active,.chat .input:focus{border-color:#66afe9}@media (max-height: 210px){.chat .input{max-height:2.5em}}@-webkit-keyframes newmessage{0%{background-color:#84b819}50%{background-color:#f5f5f5}100%{background-color:#84b819}}@keyframes newmessage{0%{background-color:#84b819}50%{background-color:#f5f5f5}100%{background-color:#84b819}}.chat.newmessage .chatheadertitle:after{content:"***";position:absolute;right:32px;top:2px}.chat.newmessage .chatheader{-webkit-animation:newmessage 1s ease -0.3s infinite;animation:newmessage 1s ease -0.3s infinite}#help{bottom:10px;color:#aaa;font-size:1.1em;left:0;margin:0 auto;position:absolute;right:0;text-shadow:0 0 5px black;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;top:80px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:350px}.withChat #help,.withBuddylist #help{right:260px}.withChat.withBuddylist #help,.withSettings #help{right:520px}#help>div{margin:0 10px}#help .help-subline{color:#888;padding:20px 0}@media only screen and (max-width: 400px){#help{display:none}}@media only screen and (min-width: 400px) and (max-width: 1020px){#help{font-size:1em;width:250px}}#audiolevel{left:0;margin:0 auto;position:fixed;right:0;top:38px;width:400px;z-index:6}#audiolevel .audio-level{background:#84b819;background:gradient(linear, left top, left bottom, color-stop(0%, #84b819), color-stop(50%, #a1d54f), color-stop(51%, #80c217), color-stop(100%, #7cbc0a));background:-webkit-gradient(linear, left top, left bottom, from(#84b819), color-stop(50%, #a1d54f), color-stop(51%, #80c217), to(#7cbc0a));background:-webkit-linear-gradient(top, #84b819 0%, #a1d54f 50%, #80c217 51%, #7cbc0a 100%);background:linear-gradient(to bottom, #84b819 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);border-radius:0 0 2px 2px;height:4px;left:0;margin:0 auto;position:absolute;right:0;-webkit-transition:width .05s ease-in-out;transition:width .05s ease-in-out;width:0}.file-info{background:#fff;border:1px solid #ddd;border-radius:4px;padding:1em;position:relative;text-align:center;max-width:170px}.file-info>div{position:relative;z-index:3}.file-info .file-info-bg{bottom:0;left:41px;right:0;overflow:hidden;position:absolute;top:-17px;z-index:2}.file-info .file-info-bg .fa{color:#eee;font-size:20em}.file-info .actions{left:50%;margin-left:10px;position:absolute;text-align:left;top:14px}.is_remote .file-info{background:#fff;border:1px solid #ddd}.is_remote .file-info .file-info-bg .fa{color:#eee;font-size:20em}.file-info-name{font-size:1.1em;margin:.2em 0;min-width:140px;padding:0 .2em}.file-info-size{font-size:.8em;height:20px;position:relative}.file-info-size>span{display:block;left:0;margin:0 auto;padding:3px;position:absolute;text-shadow:1px 1px 1px white;top:0px;right:0;z-index:5}.file-info-size>div{bottom:0;-webkit-box-shadow:none !important;box-shadow:none !important;left:0;position:absolute;top:0;width:0;z-index:0}.file-info-size>div.progress-bar{opacity:.5}.file-info-size>div.progress-bar.download{opacity:1;z-index:1}.file-info-speed{bottom:8px;font-size:.8em;left:0;position:absolute;right:0;text-align:center}.file-info.uploader .file-info-speed{bottom:6px}.file-info.uploader .actions{margin-left:30px;opacity:0}.file-info.uploader .anim{margin-left:0}.file-info.uploader .hovercontrol:hover .anim{margin-left:-50px}.file-info.uploader .hovercontrol:hover .actions{margin-left:0;opacity:1}.file-info.uploader .hovercontrol>div{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.file-info.downloader .anim{margin-left:-40px}.file-info.downloader .file-info-size{margin-bottom:10px}.file-info.downloading .file-info-size{border-color:#ddd}#audiovideo{border-top:1px solid #ccc;bottom:0;left:0;position:absolute;right:0;top:44px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#audiovideo.fullscreen{background:black !important;bottom:0 !important;left:0 !important;top:0 !important;right:0 !important}#audiovideo.fullscreen .remoteVideo .peerActions{display:none}@media only screen and (max-width: 590px){#audiovideo{right:0}}@media only screen and (max-width: 630px){.mainScreenshare #audiovideo{display:none}}.withChat #audiovideo,.withBuddylist #audiovideo{right:260px}.withBuddylist.withChat #audiovideo{right:520px}.audiovideo{bottom:0;left:0;position:absolute;top:0;right:0}.audiovideo.active{-webkit-perspective:1000;perspective:1000}.audiovideo.active:hover .overlayActions{opacity:.3}.audiovideo.active .overlayActions:hover{opacity:.6}.audiovideo.active .audiovideoBase{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.audiovideo .audiovideoBase{position:relative;width:100%;height:100%;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-duration:2s;transition-duration:2s;-webkit-transform:rotateY(0deg);-ms-transform:rotateY(0deg);transform:rotateY(0deg);z-index:2}.audiovideo .localContainer{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1);z-index:2}.audiovideo video{object-fit:contain}.audiovideo .remoteContainer{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg);z-index:2}.audiovideo .miniContainer{bottom:2px;max-height:18%;opacity:0;position:absolute;right:2px;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1);-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.5s;transition-duration:.5s}.audiovideo .miniContainer.visible{opacity:1}.audiovideo .miniVideo{display:block;max-height:100%;max-width:100%}.audiovideo .localVideo{background:rgba(0,0,0,0.4);display:block;max-height:100%;opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s;width:100%}.audiovideo .remoteVideos{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s}.audiovideo .remoteVideos video{display:block;height:100%;width:100%}.audiovideo .remoteVideo{background:rgba(0,0,0,0.4);display:inline-block;max-height:100%;max-width:100%;overflow:hidden;position:relative;vertical-align:bottom;visibility:hidden;width:100%}.audiovideo .remoteVideo.withvideo{visibility:visible}.audiovideo .remoteVideo.onlyaudio{background:#666;visibility:visible}.audiovideo .remoteVideo .onlyaudio{color:rgba(255,255,255,0.3);display:none;font-size:80px;left:0;margin-top:-40px;pointer-events:auto;position:absolute;right:0;text-align:center;top:45%}.audiovideo .remoteVideo.onlyaudio video{display:none}.audiovideo .remoteVideo.onlyaudio .onlyaudio{display:block}.audiovideo .remoteVideo .peerActions{bottom:5%;left:40px;opacity:0;pointer-events:auto;position:absolute;right:40px;text-align:center;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.2s;transition-duration:.2s;z-index:10}.audiovideo .remoteVideo .peerActions:hover{opacity:.5}.audiovideo .remoteVideo .peerActions i{font-size:3vw}.audiovideo .remoteVideo .peerLabel{bottom:4%;color:white;left:4%;font-size:2.5vw;max-width:30%;opacity:.7;overflow:hidden;padding:4px;position:absolute;text-overflow:ellipsis;text-shadow:0 0 4px black;white-space:nowrap;z-index:8}.audiovideo .overlayActions{background:rgba(0,0,0,0.9);bottom:0;height:70px;left:0;margin:auto 0;opacity:0;padding:3px 0;position:absolute;top:0;width:40px;z-index:5}.audiovideo .overlayActions button{color:#ccc;cursor:pointer;display:block;outline:0;text-shadow:0 0 5px black;width:40px}.remoteVideo.talking .peerLabel{color:#84b819}.remoteVideo .peerLabel{-webkit-transition:color 500ms ease-out;transition:color 500ms ease-out}.remoteVideo .overlayLogo{background:url(../img/logo-overlay.png) no-repeat center;-webkit-background-size:100%;background-size:100%;height:20%;max-height:40px;max-width:111px;opacity:.5;pointer-events:none;position:absolute;right:4%;top:4%;width:20%;z-index:2}.miniContainer.talking video{border:1px solid #84b819}.miniContainer video{border:1px solid transparent}.renderer-smally{width:150px}.renderer-smally .remoteVideos{padding-bottom:85px}.renderer-smally .remoteVideo .peerLabel{font-size:.9em;font-weight:bold}.renderer-smally .remoteVideo .peerActions i{font-size:1em}.renderer-smally .miniContainer{bottom:0;height:85px;left:0;max-height:none;right:0}.renderer-conferencekiosk .remoteVideos{background:rgba(0,0,0,0.4);bottom:2px;min-height:108px;pointer-events:auto;text-align:center;top:auto;white-space:nowrap}.renderer-conferencekiosk .remoteVideos>div{cursor:pointer;height:108px;width:192px}.renderer-conferencekiosk .remoteVideos .overlayLogo{display:none}.renderer-conferencekiosk .remoteVideos .peerLabel,.renderer-conferencekiosk .remoteVideos .peerActions i{font-size:1.1em}.renderer-conferencekiosk .remoteVideos .peerLabel{background:rgba(0,0,0,0.9)}.renderer-conferencekiosk .miniContainer{height:108px;max-height:none;width:192px}.renderer-conferencekiosk .bigVideo{bottom:112px;left:0;margin:auto;opacity:0;position:absolute;right:0;top:2px;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s}.renderer-conferencekiosk .bigVideo video{width:100%;height:100%}.screenshare{bottom:0;left:0;position:absolute;right:0;top:0}.mainScreenshare #screenshare{display:block}.screensharepane{background:black;bottom:0;left:0;overflow:auto;position:absolute;right:0;top:0}.screensharepane .remotescreen{position:relative}.screensharepane video{max-height:99%;width:100%}.remotesize .screensharepane video{max-height:none;width:auto}.screenshare .overlaybar{bottom:0;left:0;right:0}#roombar{left:0;min-width:260px;position:absolute;right:0;top:44px;z-index:4}#roombar .roombar{left:0;position:absolute;right:0;top:0}.fa.email{color:#aaa}.fa.facebook{color:#45619d}.fa.google{color:#dd4b39}.fa.twitter{color:#00aced}.fa.xing{color:#fff}.modal{overflow-y:auto} + *//*! HiDPI v2.0.1 | MIT License | git.io/hidpi */.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-webkit-box-shadow:0 0 12px #999999;box-shadow:0 0 12px #999999;color:#ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-webkit-box-shadow:0 0 12px #000000;box-shadow:0 0 12px #000000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}@media all and (max-width: 239px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 240px) and (max-width: 479px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 480px) and (max-width: 767px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.dialog-header-error{background-color:#d2322d}.dialog-header-wait{background-color:#428bca}.dialog-header-notify{background-color:#eee}.dialog-header-confirm{background-color:#eee}.dialog-header-error span,.dialog-header-error h4,.dialog-header-wait span,.dialog-header-wait h4{color:#fff}.modal-content{overflow:hidden}.modal-backdrop.in{opacity:0.2}html,body{-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#e5e5e5;height:100%}body{margin:0;max-height:100%;max-width:100%;overflow:hidden;padding:0}a{cursor:pointer}#background{background:url("../img/bg-tiles.jpg") repeat;bottom:0;left:0;position:fixed;right:0;top:0;z-index:0}@media (-webkit-min-device-pixel-ratio: 1.3), (min-resolution: 1.3dppx){#background{background-image:url("../img/bg-tiles_x2.jpg");-webkit-background-size:198px 200px;background-size:198px 200px}}.help-block{color:#737373}.dialog-header-notify,.dialog-header-confirm{background-color:#eee}#loader{background:url("../img/logo.svg") no-repeat center;-webkit-background-size:contain;background-size:contain;bottom:15%;left:15%;max-width:200px;max-height:150px;margin:auto;opacity:1;pointer-events:none;position:fixed;right:15%;top:15%;z-index:20000;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.5s;transition-duration:.5s}#loader.done{opacity:0}#loader>div{color:#ddd;display:block;font-size:2em;left:0;margin:0 auto;right:0;position:absolute;bottom:0px;margin-bottom:-40px;text-align:center;text-shadow:0 0 5px black}#loader .loader-message{font-size:0.5em}.mainview{bottom:0;display:none;left:150px;position:absolute;right:0;top:45px}.withChat .mainview,.withBuddylist .mainview{right:260px}.withBuddylist.withChat .mainview{right:520px}#page{bottom:0;left:0;position:absolute;right:0;top:44px}.welcome{color:#aaa;font-size:1.1em;margin-top:80px;text-shadow:0 0 5px black;max-width:600px;min-height:160px;padding-left:160px;padding-right:0px;position:relative}@media (max-width: 700px){.welcome{padding-left:0px;margin:0 10px}}.welcome h1{text-align:center;white-space:nowrap}@media (max-width: 700px){.welcome h1{white-space:normal}}.welcome .welcome-container{max-width:450px;margin:0 auto}.welcome .welcome-logo{position:absolute;left:0px;top:0px;bottom:0px;width:140px;background:url("../img/logo.svg") no-repeat left;-webkit-background-size:contain;background-size:contain}@media (max-width: 700px){.welcome .welcome-logo{position:relative;margin:0 auto;height:70px;width:70px;margin-top:30px}}.welcome .welcome-input{position:relative}.welcome .welcome-input input{padding-right:105px}.welcome .welcome-input-buttons{text-shadow:none;position:absolute;top:6px;right:8px}.welcome .welcome-input-buttons a{padding-right:.5em;color:black}[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none}.nicescroll::-webkit-scrollbar{background-color:#e5e5e5;border:solid transparent;height:8px;width:8px}.nicescroll::-webkit-scrollbar:hover{background-color:#e5e5e5;border-left:1px solid rgba(0,0,0,0.12);border-right:1px solid rgba(0,0,0,0.12)}.nicescroll::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.2)}.nicescroll::-webkit-scrollbar-thumb:active{background:rgba(0,0,0,0.4)}.fadetogglecontainer>div{position:absolute;width:100%}.animate-show.ng-hide-add{opacity:1;display:block !important;-webkit-transition:all linear 0.5s;transition:all linear 0.5s}.animate-show.ng-hide-add.ng-hide-add-active{opacity:0}.animate-show.ng-hide-remove{opacity:0;display:block !important;-webkit-transition:all linear 0.5s;transition:all linear 0.5s}.animate-show.ng-hide-remove.ng-hide-remove-active{opacity:1}.overlaybar{background:rgba(0,0,0,0.2);color:#ccc;min-height:36px;padding:3px 8px 0 30px;position:absolute;text-shadow:0 0 5px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.overlaybar:hover{background:rgba(0,0,0,0.5)}.overlaybar .btn{text-shadow:none}.overlaybar .btn-link{text-shadow:0 0 5px black}.overlaybar .form-group>*{float:left;padding-top:0}.overlaybar input[type="radio"],.overlaybar input[type="checkbox"]{margin-top:2px}.overlaybar label{padding-top:6px !important}.overlaybar.notvisible{background:transparent;pointer-events:none}.overlaybar.notvisible:hover{background:transparent}.overlaybar.notvisible .overlaybar-content{display:none}.overlaybar.notvisible .overlaybar-overlay{display:block}.overlaybar .overlaybar-button{color:#ccc;display:block;font-size:20px;top:0px;left:3px;opacity:.7;padding:4px 6px;position:absolute;pointer-events:auto;vertical-align:middle;z-index:15}.overlaybar .overlaybar-content{display:inline-block;margin-left:.5em;margin-bottom:0;max-width:60%}.overlaybar .overlaybar-content>*{padding-right:.5em}.overlaybar .overlaybar-content .input-group{max-width:160px}.overlaybar .overlaybar-overlay{display:none;margin-left:.5em;opacity:.7;padding-top:2px;text-align:left}#rightslide{bottom:0;left:0;pointer-events:none;position:absolute;right:-260px;top:44px;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;z-index:5}.withBuddylist #rightslide{right:0}#rightslide .rightslidepane{height:100%;position:relative;width:100%}#bar{left:0;min-height:44px;position:fixed;right:0;top:0;z-index:5}.bar{background:#f5f5f5;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,0.2);box-shadow:0 2px 10px 0 rgba(0,0,0,0.2);color:#262626;font:bold 1em/40px "Helvetica Neue",Helvetica,Arial,sans-serif;height:3.38462em;text-align:center;touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (max-width: 700px){.bar{z-index:40;-webkit-box-shadow:none;box-shadow:none}}.bar .btn{position:relative}.bar .left{bottom:0;left:0;top:0;padding-left:12px;position:absolute}.bar .left .logo{background:url("../img/logo-small.png") no-repeat;-webkit-background-size:100%;background-size:100%;display:inline-block;color:black;height:32px;font:normal 11px/11px "Helvetica Neue",Helvetica,Arial,sans-serif;text-align:left;width:90px;vertical-align:middle}.bar .left .logo span{font-style:italic;left:38px;position:relative;top:26px}.bar .left .logo span a{color:#222}.bar .middle{background-color:#f5f5f5;display:inline-block;font-weight:bold;min-height:44px;padding:0 1em;position:relative;margin-left:-70px;z-index:5}@media (max-width: 700px){.bar .middle{display:block;margin-left:0px;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.bar .middle .userpicture{border-radius:2px;display:inline-block;height:46px;margin:-5px .5em 0 .5em;width:46px}@media (max-width: 700px){.bar .middle .userpicture{display:none}}@media (max-width: 700px){.bar .middle.status-connected,.bar .middle.status-conference{max-width:100%;left:0;position:absolute;right:0}}@media (max-width: 700px){.bar .middle.status-connecting,.bar .middle.status-closed,.bar .middle.status-reconnecting,.bar .middle.status-error,.bar .middle.status-ringing{border-bottom:1px solid #ccc;max-width:100%;min-height:45px}}@media (max-width: 700px){.bar .middle.status-connecting .actions,.bar .middle.status-closed .actions,.bar .middle.status-reconnecting .actions,.bar .middle.status-error .actions,.bar .middle.status-ringing .actions{display:block;padding:.2em 0 .8em 0}}.bar .right{bottom:1px;padding-right:8px;position:absolute;right:0;top:1px}.bar .right .badge{background-color:#84b819;border:1px solid white;font-size:.4em;position:absolute;right:0;top:2px}.bar .right .btn{background:transparent;border-color:transparent;color:rgba(0,0,0,0.3);display:inline-block;height:42px;font:24px/40px "Helvetica Neue",Helvetica,Arial,sans-serif;margin-left:-4px;padding:0;text-align:center;width:42px}.bar .right .btn:focus{border:none;outline:none;-webkit-box-shadow:0;box-shadow:0}.bar .right .btn:hover{background-color:none;border-color:#ccc;color:rgba(0,0,0,0.4)}.bar .right .btn.active{background-color:none;border-color:#ccc;color:rgba(0,0,0,0.4)}.bar .right .btn.active.amutebtn{background-color:#db4f39;border-color:#db4f39;color:white}.bar .right .btn.active.aenablebtn{background-color:#84b819;border-color:#84b819;color:white}@-webkit-keyframes shakeityeah{0%{-webkit-transform:translate(2px, 1px) rotate(0deg);transform:translate(2px, 1px) rotate(0deg)}2%{-webkit-transform:translate(-1px, -2px) rotate(-1deg);transform:translate(-1px, -2px) rotate(-1deg)}4%{-webkit-transform:translate(-3px, 0px) rotate(1deg);transform:translate(-3px, 0px) rotate(1deg)}8%{-webkit-transform:translate(0px, 2px) rotate(0deg);transform:translate(0px, 2px) rotate(0deg)}10%{-webkit-transform:translate(1px, -1px) rotate(1deg);transform:translate(1px, -1px) rotate(1deg)}12%{-webkit-transform:translate(-1px, 2px) rotate(-1deg);transform:translate(-1px, 2px) rotate(-1deg)}14%{-webkit-transform:translate(-3px, 1px) rotate(0deg);transform:translate(-3px, 1px) rotate(0deg)}16%{-webkit-transform:translate(2px, 1px) rotate(-1deg);transform:translate(2px, 1px) rotate(-1deg)}18%{-webkit-transform:translate(-1px, -1px) rotate(1deg);transform:translate(-1px, -1px) rotate(1deg)}20%{-webkit-transform:translate(2px, 2px) rotate(0deg);transform:translate(2px, 2px) rotate(0deg)}22%{-webkit-transform:translate(1px, -2px) rotate(-1deg);transform:translate(1px, -2px) rotate(-1deg)}24%{-webkit-transform:translate(0px, 0px) rotate(0deg);transform:translate(0px, 0px) rotate(0deg)}}@keyframes shakeityeah{0%{-webkit-transform:translate(2px, 1px) rotate(0deg);transform:translate(2px, 1px) rotate(0deg)}2%{-webkit-transform:translate(-1px, -2px) rotate(-1deg);transform:translate(-1px, -2px) rotate(-1deg)}4%{-webkit-transform:translate(-3px, 0px) rotate(1deg);transform:translate(-3px, 0px) rotate(1deg)}8%{-webkit-transform:translate(0px, 2px) rotate(0deg);transform:translate(0px, 2px) rotate(0deg)}10%{-webkit-transform:translate(1px, -1px) rotate(1deg);transform:translate(1px, -1px) rotate(1deg)}12%{-webkit-transform:translate(-1px, 2px) rotate(-1deg);transform:translate(-1px, 2px) rotate(-1deg)}14%{-webkit-transform:translate(-3px, 1px) rotate(0deg);transform:translate(-3px, 1px) rotate(0deg)}16%{-webkit-transform:translate(2px, 1px) rotate(-1deg);transform:translate(2px, 1px) rotate(-1deg)}18%{-webkit-transform:translate(-1px, -1px) rotate(1deg);transform:translate(-1px, -1px) rotate(1deg)}20%{-webkit-transform:translate(2px, 2px) rotate(0deg);transform:translate(2px, 2px) rotate(0deg)}22%{-webkit-transform:translate(1px, -2px) rotate(-1deg);transform:translate(1px, -2px) rotate(-1deg)}24%{-webkit-transform:translate(0px, 0px) rotate(0deg);transform:translate(0px, 0px) rotate(0deg)}}.btn-shakeityeah{-webkit-animation-name:shakeityeah;animation-name:shakeityeah;-webkit-animation-duration:4.0s;animation-duration:4.0s;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}#buddylist{bottom:0;position:absolute;right:0;top:0;width:285px;z-index:50}#buddylist:before{background:#f5f5f5;border-left:1px solid #ccc;border-top:1px solid #ccc;border-bottom:1px solid #ccc;border-top-left-radius:6px;border-bottom-left-radius:6px;bottom:0;color:rgba(0,0,0,0.3);content:"\f100";cursor:pointer;display:none;font-family:FontAwesome;font-size:1.8em;height:55px;left:0;line-height:55px;margin:auto;pointer-events:auto;position:absolute;text-align:center;top:0;width:25px}.withBuddylist #buddylist:before{content:"\f101"}.withBuddylistAutoHide #buddylist:before{display:block}.buddylist{background:#f5f5f5;border-top:1px solid #ccc;bottom:0;left:25px;overflow-x:hidden;overflow-y:auto;pointer-events:auto;position:absolute;right:0;top:0}.buddylist.loading .buddylistloading{display:block}.buddylist.empty .buddylistempty{display:block}.buddylist .buddycontainer{pointer-events:auto;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.buddylist .buddylistloading,.buddylist .buddylistempty{bottom:0;color:#b3b3b3;display:none;font-size:1.4em;height:2em;left:0;margin:auto;padding:.4em;position:absolute;right:0;text-align:center;top:0}.buddy{background:#fff;border-bottom:1px solid #ccc;cursor:pointer;display:block;font-size:13px;min-height:66px;overflow:hidden;position:relative;text-align:left;width:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.buddy:hover{background:#f5f5f5}.buddy.withSubline .buddy1,.buddy.contact .buddy1{top:15px}.buddy.withSubline .buddy2,.buddy.contact .buddy2{display:block}.buddy.hovered .buddyactions{right:0}.buddy .fa.contact:before{content:"\f006"}.buddy.contact .fa.contact:before{content:"\f005"}.buddy .buddyPicture{background:#84b819;border-radius:2px;float:left;height:46px;margin:10px;overflow:hidden;position:relative;text-align:center;width:46px}.buddy .buddyPicture .fa{color:#009534;line-height:46px;font-size:3em}.buddy .buddyPicture img{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.buddy .buddyPictureSmall{margin:0px;margin-left:-4px;height:30px;width:30px;margin-right:4px}.buddy .buddyPictureSmall .fa{line-height:30px;font-size:2em}.buddy .buddy1{color:#262626;font-weight:bold;font-size:14px;height:28px;left:65px;position:absolute;overflow:hidden;right:4px;text-overflow:ellipsis;top:24px;white-space:nowrap}.buddy .buddy2{color:rgba(0,0,0,0.5);left:65px;overflow:hidden;position:absolute;right:0px;top:33px;white-space:nowrap;display:none}.buddy .buddy3{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:left;vertical-align:middle;display:inline-block;width:132px}.buddy .buddyactions{background:rgba(255,255,255,0.5);height:66px;line-height:66px;position:absolute;right:-125px;padding:0 10px;text-align:right;top:0px;-webkit-transition-property:right;transition-property:right;-webkit-transition-duration:.3s;transition-duration:.3s;white-space:nowrap;z-index:5}.buddy .buddyactions>.btn{width:42px;height:40px;padding:0px;text-align:center;font-size:2em}.buddy .buddysessions{margin-top:56px;max-height:0px;margin-bottom:10px;-webkit-transition-property:max-height;transition-property:max-height;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:.1s;transition-delay:.1s}.buddy .buddysessions ul{padding-top:10px;margin:0 10px 0 14px;padding-left:0px;border-left:1px dotted #ccc}.buddy .buddysessions ul li{margin-bottom:4px;margin-top:2px;margin-left:0px;list-style-type:none}.buddy .buddysessions .currentsession .buddy3{font-weight:bold}.buddy.hovered .buddysessions{max-height:999px}.buddyPicture .picture{display:block;margin-bottom:5px}.buddyPicture .videoPicture{margin-bottom:4px}.buddyPicture .videoPicture .videoPictureVideo{background-color:black;overflow:hidden;position:relative}.buddyPicture .videoPicture video{object-fit:cover}.buddyPicture .videoFlash{position:absolute;left:0px;right:0px;top:0px;bottom:0px;background-color:white;border:1px dotted #ccc;visibility:hidden;z-index:5}.buddyPicture .videoFlash.flash{visibility:visible}.buddyPicture .preview{left:0;position:absolute;top:0}.buddyPicture .preview.previewPicture{position:relative}.buddyPicture .btn-takePicture,.buddyPicture .btn-retakePicture{left:0px;right:0px;position:absolute;top:50%;margin:0 auto;max-width:40%}.buddyPicture .btn-retakePicture{visibility:hidden}.buddyPicture .videoPictureVideo:hover .btn-retakePicture{visibility:visible}.buddyPicture .countdownPicture{color:#f5f5f5;font-size:45px;left:0px;right:0px;position:absolute;top:75px;margin:0 auto;text-align:center;text-shadow:0 0 5px black;opacity:0.8}#settings{border-top:1px solid #ccc;bottom:0;padding-right:20px;position:fixed;right:-520px;top:44px;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;width:520px;z-index:50}#settings.show{right:0}@media only screen and (max-width: 630px){#settings.show{background:#fff;left:0;width:auto}}@media only screen and (max-width: 630px){#settings.show .form-actions{bottom:0;height:60px;left:0;margin-bottom:0;padding:6px 0 6px 120px;position:fixed;right:0}}.settings{background:#fff;bottom:0;left:0;overflow-x:hidden;overflow-y:auto;padding:10px;position:absolute;right:0;top:0}.settings .version{color:#ccc;font-size:10px;position:absolute;right:10px;top:10px}@media only screen and (max-width: 630px){.settings .form-horizontal .controls{margin-left:110px}}@media only screen and (max-width: 630px){.settings .form-horizontal .control-label{width:100px;word-wrap:break-word}}@media only screen and (max-width: 630px){.settings{padding-bottom:10px}}#chat{bottom:0px;-webkit-perspective:1000;perspective:1000;pointer-events:none;position:absolute;right:260px;top:0px;width:260px;z-index:45}.withChat #chat .chatcontainer{left:0}.withChat .chatpane.flip{-webkit-transform:rotateY(360deg);-ms-transform:rotateY(360deg);transform:rotateY(360deg)}.withChat.withChatMaximized #chat{left:0;width:auto}.withChat.withChatMaximized #chat .chatcontainer{width:auto}.chatcontainer{background:#e7e7e7;bottom:0;left:260px;overflow:hidden;position:absolute;right:0;top:0;width:260px}.showchatlist .chatpane{right:100%}.showchatlist .chatlist{left:0}.chatlist{background:#e7e7e7;bottom:0;left:100%;position:absolute;top:0;width:100%}.chatlist .list-group{margin-top:-1px;margin-bottom:-1px;max-height:100%;overflow-x:hidden;overflow-y:auto}.chatlist .list-group-item{border-right:none;border-left:none;border-radius:0;padding-right:70px;position:relative;min-height:51px;line-height:26px}.chatlist .list-group-item.newmessage{-webkit-animation:newmessage 1s ease -0.3s infinite;animation:newmessage 1s ease -0.3s infinite}.chatlist .list-group-item.disabled{color:#aaa}.chatlist .list-group-item:hover button{display:inline}.chatlist .list-group-item .fa-lg{display:inline-block;text-align:center;width:18px}.chatlist .list-group-item .badge{background:#84b819;border:1px solid white;position:absolute;right:50px;top:14px}.chatlist .list-group-item button{display:none;position:absolute;right:10px}.chatpane{-webkit-backface-visibility:hidden;backface-visibility:hidden;bottom:0;position:absolute;right:0;top:0;width:100%}.chat{background:#e7e7e7;display:none;bottom:0;left:0;overflow:hidden;pointer-events:auto;position:absolute;right:0;top:0}.chat.active.visible{display:block}.chatbody{border-right:1px solid #ccc;bottom:-1px;left:0;position:absolute;right:0;top:36px}@media (max-height: 210px){.chatbody{border-top:1px solid #ccc;top:0px}}.chatheader{background:#f5f5f5;border-top:1px solid #ccc;border-bottom:1px solid #ccc;border-right:1px solid #ccc;height:36px;left:0;line-height:34px;padding:0 4px 0 8px;position:absolute;right:0;top:0}.chatheader .chatstatusicon{cursor:pointer;display:block;font-size:1.4em;height:36px;left:0;position:absolute;text-align:center;top:0;width:36px}.chatheader .chatheadertitle{display:inline;padding-left:28px}.chatheader .ctrl{color:rgba(0,0,0,0.3);position:absolute;right:1px;top:0}.chatheader .ctrl .fa{cursor:pointer;padding:6px}.chatheader span{display:inline-block;max-width:60%;overflow:hidden;pointer-events:none;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}@media (max-height: 210px){.chatheader{display:none}}.chat .outputbox{bottom:75px;left:0;position:absolute;right:0;top:0}@media (max-height: 210px){.chat .outputbox{bottom:45px}}.chat .output{height:100%;overflow-x:hidden;overflow-y:auto;padding:0.4em 0}.chat .output>i{clear:both;color:#aaa;display:block;font-size:.8em;padding:6px 0;text-align:center}.chat .output>i.p2p{font-weight:bold;padding:6px 0}.chat.with_pictures .message.is_self{padding-right:54px}.chat.with_pictures .message.is_self .timestamp{right:58px}.chat.with_pictures .message.is_remote{padding-left:58px}.chat .message{background:#fff;border:1px solid #e5e5ef;border-radius:6px;clear:both;display:block;margin:0 4px 2px 20px;padding:8px;position:relative;word-wrap:break-word}.chat .message ul{list-style-type:none;margin:0;padding-left:0}.chat .message li{line-height:1.1em;margin:4px 0;padding-left:1.2em;position:relative}.chat .message li:before{color:#ccc;content:'\f075';font-family:FontAwesome;left:0;position:absolute;text-align:center;width:12px}.chat .message .timestamp{color:#aaa;font-size:.8em;position:absolute;right:8px;text-align:right;top:8px}.chat .message .timestamp-space{width:40px;height:10px;float:right}.chat .message strong{display:block;padding-bottom:2px;margin-right:40px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat .message.is_self li:before{color:#ccc;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.chat .message li.unread:before{content:"\f0eb";color:#fe9a2e}.chat .message li.sending:before{content:"\f0ec";color:#ccc}.chat .message li.sent:before{content:"\f003";color:#5882fa}.chat .message li.delivered:before{content:"\f019";color:#5882fa}.chat .message li.received:before{content:"\f06e";color:#84b819}.chat .message li.read:before{content:"\f00c";color:#ccc}.chat .message.is_self .buddyPicture{left:auto;right:4px}.chat .message .buddyPicture{background:#84b819;border-radius:2px;height:46px;left:4px;overflow:hidden;position:absolute;text-align:center;top:4px;width:46px}.chat .message .buddyPicture .fa{color:#009534;line-height:46px}.chat .message .buddyPicture img{display:block;bottom:0;left:0;right:0;position:absolute;top:0}.chat .message:before,.chat .message:after{border-style:solid;content:"";display:block;position:absolute;width:0}.chat .message.is_remote{background:#fff}.chat .message.is_remote:before{border-width:10px 17px 10px 0;border-color:transparent #fff;bottom:auto;left:-16px;top:4px}.chat .message.is_remote:after{border-width:9px 15px 9px 0;border-color:transparent #fff;bottom:auto;left:-15px;top:5px}.chat .message.is_self{background:#fff;margin-right:20px;margin-left:4px;padding-right:0}.chat .message.is_self:before{border-width:10px 0 10px 17px;border-color:transparent #fff;bottom:auto;right:-16px;top:4px}.chat .message.is_self:after{border-width:9px 0 9px 15px;border-color:transparent #fff;bottom:auto;right:-15px;top:5px}.chat .chatbodybottom{background:#e7e7e7;bottom:1px;left:0;margin:0 auto;position:absolute;right:0}@media (max-height: 210px){.chat .chatbodybottom{height:auto}}.chat .typinghint{padding:0 6px 0 6px;white-space:nowrap;overflow:hidden;font-size:.8em;color:#aaa;height:14px}@media (max-height: 210px){.chat .typinghint{display:none}}.chat .inputbox{position:relative}.chat .inputbox .btn{position:absolute;right:6px;top:1px;padding:.5em 1em;display:none}.chat .inputbox>div{border-top:1px solid #ccc}@media (max-height: 210px){.chat .inputbox{height:auto}}.chat .input{border-radius:0;border-color:transparent;-webkit-box-shadow:none;box-shadow:none;display:block;height:54px;max-height:54px;margin:0;resize:none;width:100%}.chat .input:active,.chat .input:focus{border-color:#66afe9}@media (max-height: 210px){.chat .input{max-height:2.5em}}@-webkit-keyframes newmessage{0%{background-color:#84b819}50%{background-color:#f5f5f5}100%{background-color:#84b819}}@keyframes newmessage{0%{background-color:#84b819}50%{background-color:#f5f5f5}100%{background-color:#84b819}}.chat.newmessage .chatheadertitle:after{content:"***";position:absolute;right:32px;top:2px}.chat.newmessage .chatheader{-webkit-animation:newmessage 1s ease -0.3s infinite;animation:newmessage 1s ease -0.3s infinite}#help{bottom:10px;color:#aaa;font-size:1.1em;left:0;margin:0 auto;position:absolute;right:0;text-shadow:0 0 5px black;-webkit-transition:right 200ms ease-in-out;transition:right 200ms ease-in-out;top:80px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:350px}.withChat #help,.withBuddylist #help{right:260px}.withChat.withBuddylist #help,.withSettings #help{right:520px}#help>div{margin:0 10px}#help .help-subline{color:#888;padding:20px 0}@media only screen and (max-width: 400px){#help{display:none}}@media only screen and (min-width: 400px) and (max-width: 1020px){#help{font-size:1em;width:250px}}#audiolevel{left:0;margin:0 auto;position:fixed;right:0;top:38px;width:400px;z-index:6}#audiolevel .audio-level{background:#84b819;background:gradient(linear, left top, left bottom, color-stop(0%, #84b819), color-stop(50%, #a1d54f), color-stop(51%, #80c217), color-stop(100%, #7cbc0a));background:-webkit-gradient(linear, left top, left bottom, from(#84b819), color-stop(50%, #a1d54f), color-stop(51%, #80c217), to(#7cbc0a));background:-webkit-linear-gradient(top, #84b819 0%, #a1d54f 50%, #80c217 51%, #7cbc0a 100%);background:linear-gradient(to bottom, #84b819 0%,#a1d54f 50%,#80c217 51%,#7cbc0a 100%);border-radius:0 0 2px 2px;height:4px;left:0;margin:0 auto;position:absolute;right:0;-webkit-transition:width .05s ease-in-out;transition:width .05s ease-in-out;width:0}.file-info{background:#fff;border:1px solid #ddd;border-radius:4px;padding:1em;position:relative;text-align:center;max-width:170px}.file-info>div{position:relative;z-index:3}.file-info .file-info-bg{bottom:0;left:41px;right:0;overflow:hidden;position:absolute;top:-17px;z-index:2}.file-info .file-info-bg .fa{color:#eee;font-size:20em}.file-info .actions{left:50%;margin-left:10px;position:absolute;text-align:left;top:14px}.is_remote .file-info{background:#fff;border:1px solid #ddd}.is_remote .file-info .file-info-bg .fa{color:#eee;font-size:20em}.file-info-name{font-size:1.1em;margin:.2em 0;min-width:140px;padding:0 .2em}.file-info-size{font-size:.8em;height:20px;position:relative}.file-info-size>span{display:block;left:0;margin:0 auto;padding:3px;position:absolute;text-shadow:1px 1px 1px white;top:0px;right:0;z-index:5}.file-info-size>div{bottom:0;-webkit-box-shadow:none !important;box-shadow:none !important;left:0;position:absolute;top:0;width:0;z-index:0}.file-info-size>div.progress-bar{opacity:.5}.file-info-size>div.progress-bar.download{opacity:1;z-index:1}.file-info-speed{bottom:8px;font-size:.8em;left:0;position:absolute;right:0;text-align:center}.file-info.uploader .file-info-speed{bottom:6px}.file-info.uploader .actions{margin-left:30px;opacity:0}.file-info.uploader .anim{margin-left:0}.file-info.uploader .hovercontrol:hover .anim{margin-left:-50px}.file-info.uploader .hovercontrol:hover .actions{margin-left:0;opacity:1}.file-info.uploader .hovercontrol>div{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.file-info.downloader .anim{margin-left:-40px}.file-info.downloader .file-info-size{margin-bottom:10px}.file-info.downloading .file-info-size{border-color:#ddd}#audiovideo{border-top:1px solid #ccc;bottom:0;left:0;position:absolute;right:0;top:44px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#audiovideo.fullscreen{background:black !important;bottom:0 !important;left:0 !important;top:0 !important;right:0 !important}#audiovideo.fullscreen .remoteVideo .peerActions{display:none}@media only screen and (max-width: 590px){#audiovideo{right:0}}@media only screen and (max-width: 630px){.mainScreenshare #audiovideo{display:none}}.withChat #audiovideo,.withBuddylist #audiovideo{right:260px}.withBuddylist.withChat #audiovideo{right:520px}.audiovideo{bottom:0;left:0;position:absolute;top:0;right:0}.audiovideo.active{-webkit-perspective:1000;perspective:1000}.audiovideo.active:hover .overlayActions{opacity:.3}.audiovideo.active .overlayActions:hover{opacity:.6}.audiovideo.active .audiovideoBase{-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg)}.audiovideo .audiovideoBase{position:relative;width:100%;height:100%;-webkit-transition-property:-webkit-transform;transition-property:transform;-webkit-transition-duration:2s;transition-duration:2s;-webkit-transform:rotateY(0deg);-ms-transform:rotateY(0deg);transform:rotateY(0deg);z-index:2}.audiovideo .localContainer{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1);z-index:2}.audiovideo video{object-fit:contain}.audiovideo .remoteContainer{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0;-webkit-transform:rotateY(180deg);-ms-transform:rotateY(180deg);transform:rotateY(180deg);z-index:2}.audiovideo .miniContainer{bottom:2px;max-height:18%;opacity:0;position:absolute;right:2px;-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1);-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.5s;transition-duration:.5s}.audiovideo .miniContainer.visible{opacity:1}.audiovideo .miniVideo{display:block;max-height:100%;max-width:100%}.audiovideo .localVideo{background:rgba(0,0,0,0.4);display:block;max-height:100%;opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s;width:100%}.audiovideo .remoteVideos{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s}.audiovideo .remoteVideos video{display:block;height:100%;width:100%}.audiovideo .remoteVideo{background:rgba(0,0,0,0.4);display:inline-block;max-height:100%;max-width:100%;overflow:hidden;position:relative;vertical-align:bottom;visibility:hidden;width:100%}.audiovideo .remoteVideo.withvideo{visibility:visible}.audiovideo .remoteVideo.onlyaudio{background:#666;visibility:visible}.audiovideo .remoteVideo .onlyaudio{color:rgba(255,255,255,0.3);display:none;font-size:80px;left:0;margin-top:-40px;pointer-events:auto;position:absolute;right:0;text-align:center;top:45%}.audiovideo .remoteVideo.onlyaudio video{display:none}.audiovideo .remoteVideo.onlyaudio .onlyaudio{display:block}.audiovideo .remoteVideo .peerActions{bottom:5%;left:40px;opacity:0;pointer-events:auto;position:absolute;right:40px;text-align:center;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:.2s;transition-duration:.2s;z-index:10}.audiovideo .remoteVideo .peerActions:hover{opacity:.5}.audiovideo .remoteVideo .peerActions i{font-size:3vw}.audiovideo .remoteVideo .peerLabel{bottom:4%;color:white;left:4%;font-size:2.5vw;max-width:30%;opacity:.7;overflow:hidden;padding:4px;position:absolute;text-overflow:ellipsis;text-shadow:0 0 4px black;white-space:nowrap;z-index:8}.audiovideo .overlayActions{background:rgba(0,0,0,0.9);bottom:0;height:70px;left:0;margin:auto 0;opacity:0;padding:3px 0;position:absolute;top:0;width:40px;z-index:5}.audiovideo .overlayActions button{color:#ccc;cursor:pointer;display:block;outline:0;text-shadow:0 0 5px black;width:40px}.remoteVideo.talking .peerLabel{color:#84b819}.remoteVideo .peerLabel{-webkit-transition:color 500ms ease-out;transition:color 500ms ease-out}.remoteVideo .overlayLogo{background:url(../img/logo-overlay.png) no-repeat center;-webkit-background-size:100%;background-size:100%;height:20%;max-height:40px;max-width:111px;opacity:.5;pointer-events:none;position:absolute;right:4%;top:4%;width:20%;z-index:2}.miniContainer.talking video{border:1px solid #84b819}.miniContainer video{border:1px solid transparent}.renderer-smally{width:150px}.renderer-smally .remoteVideos{padding-bottom:85px}.renderer-smally .remoteVideo .peerLabel{font-size:.9em;font-weight:bold}.renderer-smally .remoteVideo .peerActions i{font-size:1em}.renderer-smally .miniContainer{bottom:0;height:85px;left:0;max-height:none;right:0}.renderer-conferencekiosk .remoteVideos{background:rgba(0,0,0,0.4);bottom:2px;min-height:108px;pointer-events:auto;text-align:center;top:auto;white-space:nowrap}.renderer-conferencekiosk .remoteVideos>div{cursor:pointer;height:108px;width:192px}.renderer-conferencekiosk .remoteVideos .overlayLogo{display:none}.renderer-conferencekiosk .remoteVideos .peerLabel,.renderer-conferencekiosk .remoteVideos .peerActions i{font-size:1.1em}.renderer-conferencekiosk .remoteVideos .peerLabel{background:rgba(0,0,0,0.9)}.renderer-conferencekiosk .miniContainer{height:108px;max-height:none;width:192px}.renderer-conferencekiosk .bigVideo{bottom:112px;left:0;margin:auto;opacity:0;position:absolute;right:0;top:2px;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-duration:2s;transition-duration:2s}.renderer-conferencekiosk .bigVideo video{width:100%;height:100%}.screenshare{bottom:0;left:0;position:absolute;right:0;top:0}.mainScreenshare #screenshare{display:block}.screensharepane{background:black;bottom:0;left:0;overflow:auto;position:absolute;right:0;top:0}.screensharepane .remotescreen{position:relative}.screensharepane video{max-height:99%;width:100%}.remotesize .screensharepane video{max-height:none;width:auto}.screenshare .overlaybar{bottom:0;left:0;right:0}#roombar{left:0;min-width:260px;position:absolute;right:0;top:44px;z-index:4}#roombar .roombar{left:0;position:absolute;right:0;top:0}.fa.email{color:#aaa}.fa.facebook{color:#45619d}.fa.google{color:#dd4b39}.fa.twitter{color:#00aced}.fa.xing{color:#fff}.modal{overflow-y:auto} diff --git a/static/js/filters/buddyimagesrc.js b/static/js/filters/buddyimagesrc.js index a3a9ec3f..a0e311b6 100644 --- a/static/js/filters/buddyimagesrc.js +++ b/static/js/filters/buddyimagesrc.js @@ -20,33 +20,6 @@ */ define(["underscore"], function(_) { - // Simple function which converts data urls to blobs, both base64 or not. - var dataURLToBlob = (function() { - var is_base64 = ";base64,"; - return function(dataURL) { - var parts, ct; - if (dataURL.indexOf(is_base64) === -1) { - // No base64. - parts = dataURL.split(","); - ct = parts[0].split(":")[1]; - return new Blob([parts[1]], { - type: ct - }); - } - parts = dataURL.split(is_base64); - ct = parts[0].split(":")[1]; - var data = window.atob(parts[1]); - var length = data.length; - var buffer = new Uint8Array(length); - for (var i = 0; i < length; i++) { - buffer[i] = data.charCodeAt(i); - } - return new Blob([buffer], { - type: ct - }); - }; - }()); - // Create URLs for blobs. var blobToObjectURL = function(blob) { return URL.createObjectURL(blob); @@ -57,7 +30,7 @@ define(["underscore"], function(_) { }; // buddyImageSrc - return ["buddyData", "appData", function(buddyData, appData) { + return ["buddyData", "buddyPicture", "appData", function(buddyData, buddyPicture, appData) { // Cache created blob urls. var urls = {}; @@ -75,24 +48,35 @@ define(["underscore"], function(_) { }); }, 5000); - return function(id) { + return function(id, display) { - var scope = buddyData.lookup(id, false, true); - if (scope) { - var display = scope.display; - if (display) { + if (typeof(display) === "undefined") { + var scope = buddyData.lookup(id, false, true); + if (scope) { + display = scope.display; + } + } + if (display) { + if (display.buddyPictureLocalUrl) { + return display.buddyPictureLocalUrl; + } else if (display.buddyPicture) { + var url = urls[id]; + if (url) { + revokeURL(id, url); + } + // No existing data. Check if service does find something. + buddyPicture.update(display); if (display.buddyPictureLocalUrl) { return display.buddyPictureLocalUrl; - } else if (display.buddyPicture) { - var url = urls[id]; - if (url) { - revokeURL(id, url); - } - // New data -> new url. - var blob = dataURLToBlob(display.buddyPicture); + } + // Check if we should handle it as blob. + url = display.buddyPicture; + if (url.indexOf("data:") === 0) { + var blob = buddyPicture.toBlob(null, url); url = display.buddyPictureLocalUrl = urls[id] = blobToObjectURL(blob); return url; } + return null; } } else { var data = appData.get(); diff --git a/static/js/services/buddylist.js b/static/js/services/buddylist.js index 4ba1969b..3f773298 100644 --- a/static/js/services/buddylist.js +++ b/static/js/services/buddylist.js @@ -129,7 +129,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! }; // buddyList - return ["$window", "$compile", "playSound", "buddyData", "buddySession", "fastScroll", "mediaStream", "animationFrame", "$q", function($window, $compile, playSound, buddyData, buddySession, fastScroll, mediaStream, animationFrame, $q) { + return ["$window", "$compile", "playSound", "buddyData", "buddySession", "buddyPicture", "fastScroll", "mediaStream", "animationFrame", "$q", function($window, $compile, playSound, buddyData, buddySession, buddyPicture, fastScroll, mediaStream, animationFrame, $q) { var buddyTemplate = $compile(templateBuddy); var buddyActions = $compile(templateBuddyActions); @@ -378,55 +378,6 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! }; - Buddylist.prototype.updateBuddyPicture = function(status) { - - url = status.buddyPicture; - if (!url) { - return; - } - - if (url.indexOf("img:") === 0) { - status.buddyPicture = status.buddyPictureLocalUrl = mediaStream.url.buddy(url.substr(4)); - } - - }; - - Buddylist.prototype.dumpBuddyPictureToBlob = function(scope, data) { - - if (!data) { - data = this.dumpBuddyPictureToString(scope); - if (!data) { - return null; - } - } - // NOTE(longsleep): toBlob is not widely supported narf .. - // see: https://code.google.com/p/chromium/issues/detail?id=67587 - var parts = data.match(/data:([^;]*)(;base64)?,([0-9A-Za-z+\/]+)/); - var binStr = atob(parts[3]); - var buf = new ArrayBuffer(binStr.length); - var view = new Uint8Array(buf); - for (var i = 0; i < view.length; i++) { - view[i] = binStr.charCodeAt(i); - } - return new Blob([view], {'type': parts[1]}); - - }; - - Buddylist.prototype.dumpBuddyPictureToString = function(scope) { - - var img = scope.element.find(".buddyPicture img").get(0); - if (img) { - var canvas = $window.document.createElement("canvas"); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0); - return canvas.toDataURL("image/jpeg"); - } - return null; - - }; - Buddylist.prototype.setDisplay = function(id, scope, data, queueName) { var status = data.Status; @@ -434,8 +385,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! // Set display.name. display.displayName = status.displayName; // Set display.picture. - display.buddyPicture = status.buddyPicture; - this.updateBuddyPicture(display); + buddyPicture.update(display, status.buddyPicture); // Set display subline. this.updateSubline(display, status.message); // Add to render queue when no element exists. @@ -473,11 +423,9 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! } // Update display picture. if (contact) { - display.buddyPicture = contact.buddyPicture || status.buddyPicture || null; - this.updateBuddyPicture(display); + buddyPicture.update(display, contact.buddyPicture || status.buddyPicture || null); } else if (status.buddyPicture) { - display.buddyPicture = status.buddyPicture || null; - this.updateBuddyPicture(display); + buddyPicture.update(display, status.buddyPicture || null); } }; @@ -640,7 +588,7 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! delete status.message; // Convert buddy image. if (status.buddyPicture) { - var img = this.dumpBuddyPictureToString(scope); + var img = buddyPicture.toString(scope.element.find(".buddyPicture img").get(0)); if (img) { status.buddyPicture = img; } else { @@ -684,10 +632,16 @@ define(['underscore', 'modernizr', 'avltree', 'text!partials/buddy.html', 'text! Buddylist.prototype.click = function(buddyElement, target) { - //console.log("click handler", buddyElement, target); - var action = $(target).data("action"); + var be = buddyElement.get(0); + // Traverse up to find click action. + var action; + do { + action = $(target).data("action"); + target = $(target).parent().get(0); + } while (!action && target && target !== be); + + // Make call the default action. if (!action) { - // Make call the default action. action = "chat"; } diff --git a/static/js/services/buddypicture.js b/static/js/services/buddypicture.js new file mode 100644 index 00000000..42613619 --- /dev/null +++ b/static/js/services/buddypicture.js @@ -0,0 +1,69 @@ +/* + * Spreed WebRTC. + * Copyright (C) 2013-2014 struktur AG + * + * This file is part of Spreed WebRTC. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + + define(['underscore'], function(underscore) { + + // buddyPicture + return ["mediaStream", "$window", function(mediaStream, $window) { + + var buddyPicture = { + + update: function(data, url) { + + if (typeof(url) !== "undefined") { + data.buddyPicture = url; + } else { + url = data.buddyPicture; + } + if (!url) { + return; + } + + if (url.indexOf("img:") === 0) { + data.buddyPicture = data.buddyPictureLocalUrl = mediaStream.url.buddy(url.substr(4)); + } + + }, + + toString: function(img, mime_type) { + + if (img) { + if (typeof(mime_type) === "undefined") { + mime_type = "image/jpeg"; + } + var canvas = $window.document.createElement("canvas"); + canvas.width = img.width; + canvas.height = img.height; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); + return canvas.toDataURL(mime_type); + } + return null; + + } + + }; + + return buddyPicture; + + }]; + + }); \ No newline at end of file diff --git a/static/js/services/services.js b/static/js/services/services.js index c95a5205..a724ba14 100644 --- a/static/js/services/services.js +++ b/static/js/services/services.js @@ -28,6 +28,7 @@ define([ 'services/appdata', 'services/buddydata', 'services/buddylist', + 'services/buddypicture', 'services/enrichmessage', 'services/safemessage', 'services/alertify', @@ -56,6 +57,7 @@ mediaStream, appData, buddyData, buddyList, +buddyPicture, enrichMessage, safeMessage, alertify, @@ -86,6 +88,7 @@ animationFrame) { appData: appData, buddyData: buddyData, buddyList: buddyList, + buddyPicture: buddyPicture, enrichMessage: enrichMessage, safeMessage: safeMessage, alertify: alertify, diff --git a/static/partials/buddy.html b/static/partials/buddy.html index dffad982..aae97805 100644 --- a/static/partials/buddy.html +++ b/static/partials/buddy.html @@ -1,5 +1,5 @@
-
+
{{session.Id|displayName}}
({{session.count}}) {{display.subline}}
diff --git a/static/partials/buddyactions.html b/static/partials/buddyactions.html index 73237df0..dd869009 100644 --- a/static/partials/buddyactions.html +++ b/static/partials/buddyactions.html @@ -1,11 +1,18 @@
- - + +