Adjust alignment of remote video menu

This commit is contained in:
Ilya Daynatovich 2016-10-27 16:09:27 +03:00
parent 2fe69d409b
commit d84d0b65ca
4 changed files with 152 additions and 97 deletions

View File

@ -59,11 +59,11 @@
left: 0; left: 0;
} }
@mixin absoluteAligning($sizeX, $sizeY) { @mixin absoluteAligning() {
top: 50%; top: 50%;
left: 50%; left: 50%;
position: absolute; position: absolute;
@include transform(translate(-#{$sizeX / 2}, -#{$sizeY / 2})) @include transform(translate(-50%, -50%))
} }
@mixin transform($func) { @mixin transform($func) {

View File

@ -1,57 +1,69 @@
/*Initialize*/ /**
ul.popupmenu { * Initialize
**/
.popupmenu {
padding: 0; padding: 0;
margin: 2px 0; margin: 2px 0;
bottom: 0; bottom: 0;
width: 100px; width: 100px;
height: auto; height: auto;
}
ul.popupmenu li { &:first-child {
list-style-type: none; margin-top: 2px;
text-align: left; }
}
ul.popupmenu li:hover { &__item {
background-color: $popupMenuSelectedItemBackground; list-style-type: none;
} text-align: left;
height: 35px;
/*Link Appearance*/ &:hover {
ul.popupmenu li a { background-color: $popupMenuSelectedItemBackground;
display: block; }
text-decoration: none; }
color: #fff;
padding: 5px;
font-size: 9pt;
width: 100%;
cursor: hand;
}
ul.popupmenu li a i.icon-kick { // Link Appearance
font-size: 8pt; &__link {
} display: block;
box-sizing: border-box;
text-decoration: none;
color: #fff;
padding: 5px;
height: 100%;
font-size: 9pt;
width: 100%;
cursor: hand;
ul.popupmenu li a span { &.disabled {
display: inline-block; color: gray !important;
width: 20px; pointer-events: none;
height: 16px; }
text-align: center; }
}
ul.popupmenu li a div { &__text {
display: inline-block; display: inline-block;
line-height: 25px; vertical-align: middle;
} }
ul.popupmenu li a i { &__icon {
line-height: 25px; vertical-align: middle;
position: relative;
display: inline-block;
width: 20px;
height: 100%;
text-align: center;
> * {
@include absoluteAligning();
}
}
.icon-kick {
font-size: 8pt;
}
} }
span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover { span.remotevideomenu:hover ul.popupmenu, ul.popupmenu:hover {
display:block !important; display:block !important;
} }
a.disabled {
color: gray !important;
pointer-events: none;
}

View File

@ -472,7 +472,7 @@
.userAvatar { .userAvatar {
@include circle(60px); @include circle(60px);
@include absoluteAligning(60px, 60px); @include absoluteAligning();
} }
.sharedVideoAvatar { .sharedVideoAvatar {

View File

@ -109,76 +109,119 @@ RemoteVideo.prototype._initPopupMenu = function (popupMenuElement) {
* @private * @private
*/ */
RemoteVideo.prototype._generatePopupContent = function () { RemoteVideo.prototype._generatePopupContent = function () {
var popupmenuElement = document.createElement('ul'); let popupmenuElement = document.createElement('ul');
popupmenuElement.className = 'popupmenu'; popupmenuElement.className = 'popupmenu';
popupmenuElement.id = `remote_popupmenu_${this.id}`; popupmenuElement.id = `remote_popupmenu_${this.id}`;
var muteMenuItem = document.createElement('li'); let muteTranslationKey;
var muteLinkItem = document.createElement('a'); let muteClassName;
var mutedIndicator = "<i class='icon-mic-disabled'></i>";
var doMuteHTML = mutedIndicator +
" <div data-i18n='videothumbnail.domute'></div>";
var mutedHTML = mutedIndicator +
" <div data-i18n='videothumbnail.muted'></div>";
muteLinkItem.id = "mutelink_" + this.id;
if (this.isAudioMuted) { if (this.isAudioMuted) {
muteLinkItem.innerHTML = mutedHTML; muteTranslationKey = 'videothumbnail.muted';
muteLinkItem.className = 'mutelink disabled'; muteClassName = 'mutelink disabled';
} } else {
else { muteTranslationKey = 'videothumbnail.domute';
muteLinkItem.innerHTML = doMuteHTML; muteClassName = 'mutelink';
muteLinkItem.className = 'mutelink';
} }
// Delegate event to the document. let muteHandler = this._muteHandler.bind(this);
$(document).on("click", "#mutelink_" + this.id, () => { let kickHandler = this._kickHandler.bind(this);
if (this.isAudioMuted)
return;
RemoteVideo.showMuteParticipantDialog().then(reason => { let menuItems = [
if(reason === MUTED_DIALOG_BUTTON_VALUES.muted) { {
this.emitter.emit(UIEvents.REMOTE_AUDIO_MUTED, this.id); id: 'mutelink_' + this.id,
handler: muteHandler,
icon: 'icon-mic-disabled',
text: {
className: muteClassName,
data: {
i18n: muteTranslationKey
}
} }
}).catch(e => { }, {
//currently shouldn't be called id: 'ejectlink_' + this.id,
console.error(e); handler: kickHandler,
}); icon: 'icon-kick',
text: {
data: {
i18n: 'videothumbnail.kick'
}
}
}
];
this.popover.forceHide(); menuItems.forEach(el => {
let menuItem = this._generatePopupMenuItem(el);
popupmenuElement.appendChild(menuItem);
}); });
muteMenuItem.appendChild(muteLinkItem);
popupmenuElement.appendChild(muteMenuItem);
var ejectIndicator = "<i style='float:left;' class='icon-kick'></i>";
var ejectMenuItem = document.createElement('li');
var ejectLinkItem = document.createElement('a');
var ejectText = "<div data-i18n='videothumbnail.kick'></div>";
ejectLinkItem.className = 'ejectlink';
ejectLinkItem.innerHTML = ejectIndicator + ' ' + ejectText;
ejectLinkItem.id = "ejectlink_" + this.id;
$(document).on("click", "#ejectlink_" + this.id, function(){
this.emitter.emit(UIEvents.USER_KICKED, this.id);
this.popover.forceHide();
}.bind(this));
ejectMenuItem.appendChild(ejectLinkItem);
popupmenuElement.appendChild(ejectMenuItem);
APP.translation.translateElement($(popupmenuElement)); APP.translation.translateElement($(popupmenuElement));
return popupmenuElement; return popupmenuElement;
}; };
RemoteVideo.prototype._muteHandler = function () {
if (this.isAudioMuted)
return;
RemoteVideo.showMuteParticipantDialog().then(reason => {
if(reason === MUTED_DIALOG_BUTTON_VALUES.muted) {
this.emitter.emit(UIEvents.REMOTE_AUDIO_MUTED, this.id);
}
}).catch(e => {
//currently shouldn't be called
console.error(e);
});
this.popover.forceHide();
};
RemoteVideo.prototype._kickHandler = function () {
this.emitter.emit(UIEvents.USER_KICKED, this.id);
this.popover.forceHide();
};
RemoteVideo.prototype._generatePopupMenuItem = function (opts = {}) {
let {
id,
handler,
icon,
text
} = opts;
handler = handler || $.noop;
let menuItem = document.createElement('li');
menuItem.className = 'popupmenu__item';
let linkItem = document.createElement('a');
linkItem.className = 'popupmenu__link';
if (icon) {
let indicator = document.createElement('span');
indicator.className = 'popupmenu__icon';
indicator.innerHTML = `<i class="${icon}"></i>`;
linkItem.appendChild(indicator);
}
let textContent = document.createElement('span');
textContent.className = 'popupmenu__text';
let dataKeys = Object.keys(text.data);
dataKeys.forEach(key => {
textContent.dataset[key] = text.data[key];
});
textContent.className += ` ${text.className}` || '';
linkItem.appendChild(textContent);
linkItem.id = id;
// Delegate event to the document.
$(document).on("click", `#${id}`, handler);
menuItem.appendChild(linkItem);
return menuItem;
};
/** /**
* Updates the remote video menu. * Updates the remote video menu.
* *