parent
5842d7e49d
commit
687d51e0aa
@ -1,36 +1,46 @@ |
||||
<template name="permissions"> |
||||
<div class="permissions-manager"> |
||||
<section class="permissions-manager page-container page-home page-static page-list"> |
||||
{{#if hasPermission}} |
||||
<a href="{{pathFor "admin-permissions-new"}}" class="button primary new-role">{{_ "New_role"}}</a> |
||||
<table border="1" class="permission-grid secondary-background-color"> |
||||
<thead class="content-background-color"> |
||||
<tr> |
||||
<th class="border-component-color"> </th> |
||||
{{#each role}} |
||||
{{# header sectionName=pageTitle}} |
||||
<div class="rc-header__section-button"> |
||||
<a href="{{pathFor"admin-permissions-new"}}" class="rc-button rc-button--primary new-role">{{_ "New_role"}}</a> |
||||
</div> |
||||
{{/header}} |
||||
|
||||
<div class="content"> |
||||
<table border="1" class="permission-grid secondary-background-color"> |
||||
<thead class="content-background-color"> |
||||
<tr> |
||||
<th class="border-component-color"> </th> |
||||
{{#each role}} |
||||
<th class="border-component-color" title="{{description}}"> |
||||
<a href="{{pathFor "admin-permissions-edit" name=_id}}"> |
||||
{{_id}} |
||||
<i class="icon-edit"></i> |
||||
</a> |
||||
</th> |
||||
{{/each}} |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{{#each permission}} |
||||
{{/each}} |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
{{#each permission}} |
||||
<tr class="admin-table-row"> |
||||
<td class="permission-name border-component-color" title="{{_ permissionDescription}}">{{_ permissionName}}<br>[{{_id}}]</td> |
||||
{{#each role}} |
||||
<td class="border-component-color"> |
||||
<input type="checkbox" name="perm[{{_id}}][{{../_id}}]" class="role-permission" value="1" checked="{{granted ../roles}}" data-role="{{_id}}" data-permission="{{../_id}}"> |
||||
</td> |
||||
<td class="border-component-color"> |
||||
<input type="checkbox" name="perm[{{_id}}][{{../_id}}]" class="role-permission" value="1" checked="{{granted ../roles}}" data-role="{{_id}}" data-permission="{{../_id}}"> |
||||
</td> |
||||
{{/each}} |
||||
</tr> |
||||
{{/each}} |
||||
</tbody> |
||||
</table> |
||||
{{/each}} |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
{{else}} |
||||
{{_ "Not_authorized"}} |
||||
<div class="content"> |
||||
{{#if i18nPageTitle}} {{> header sectionName=i18nPageTitle}} {{else}} {{> header sectionName=pageTitle}} {{/if}} |
||||
{{_ "Not_authorized"}} |
||||
</div> |
||||
{{/if}} |
||||
</div> |
||||
</section> |
||||
</template> |
||||
|
@ -0,0 +1,81 @@ |
||||
<template name="headerRoom"> |
||||
<header class="rc-header rc-header--room" > |
||||
<div class="rc-header__wrap"> |
||||
|
||||
<div class="rc-header__block rc-header--burger"> |
||||
{{> burger}} |
||||
</div> |
||||
|
||||
<div class="rc-header__block rc-header__favorite"> |
||||
<a href="#favorite" class="rc-header__toggle-favorite {{state}}">{{> icon block="rc-header__icon" icon="star"}}</a> |
||||
</div> |
||||
|
||||
<!-- TODO: fix it style and helper --> |
||||
{{#if tokenAccessChannel}} |
||||
<i class="icon-tokenpass" aria-label="{{_ "Tokenpass_Channel_Label"}}"></i> |
||||
{{/if}} |
||||
|
||||
{{#if encryptedChannel}} |
||||
<i class="icon-key" aria-label="{{_ "Encrypted_Channel_Label"}}"></i> |
||||
{{/if}} |
||||
<div class="rc-header__content rc-header__block"> |
||||
{{#if isDirect}} |
||||
<div class="rc-header__block"> |
||||
<div class="rc-header__image"> |
||||
{{> avatar username=avatarBackground}} |
||||
</div> |
||||
</div> |
||||
{{/if}} |
||||
|
||||
<div class="rc-header__data"> |
||||
{{#unless secondaryName}} |
||||
<div class="rc-header__name">{{> icon block="rc-header__icon" icon=channelIcon}}{{roomName}}</div> |
||||
{{else}} |
||||
<div class="rc-header__name">{{roomName}} <div class="rc-header__username">@{{secondaryName}}</div></div> |
||||
{{/unless}} |
||||
|
||||
{{#if isDirect}} |
||||
<span class="rc-header__status"> |
||||
<div class="rc-header__status-bullet rc-header__status-bullet--{{userStatus}}" title="{{_ userStatus}}"></div> |
||||
<div class="rc-header__visual-status">{{_ userStatus}}</div> |
||||
</span> |
||||
{{else}} |
||||
{{#if roomTopic}}<span class="rc-header__topic">{{{roomTopic}}}</span>{{/if}} |
||||
{{/if}} |
||||
</div> |
||||
|
||||
{{#if sentimentSmile}} |
||||
<span class="sentiment">{{sentimentSmile}}</span> |
||||
{{/if}} |
||||
{{#if isTranslated}} |
||||
<i class="icon-language" aria-label="{{_ "Translated"}}"></i> |
||||
{{/if}} |
||||
</div> |
||||
|
||||
{{#if isSection}} |
||||
<span class="rc-header__block">{{_ sectionName}}</span> |
||||
{{/if}} |
||||
|
||||
{{#if Template.contentBlock}} |
||||
{{> Template.contentBlock}} |
||||
{{/if}} |
||||
|
||||
{{#unless isChannel}} |
||||
{{# unless hideHelp}} |
||||
<div class="rc-header__section-help"></div> |
||||
{{/unless}} |
||||
{{/unless}} |
||||
|
||||
{{#with toolbarButtons}} |
||||
<div class="iframe-toolbar"> |
||||
{{#each buttons}} |
||||
<button class="{{id}}"> |
||||
{{#if icon}}<i class="{{icon}}"></i>{{/if}} |
||||
{{label}} |
||||
</button> |
||||
{{/each}} |
||||
</div> |
||||
{{/with}} |
||||
</div> |
||||
</header> |
||||
</template> |
@ -0,0 +1,170 @@ |
||||
import { Meteor } from 'meteor/meteor'; |
||||
import { Session } from 'meteor/session'; |
||||
import { Template } from 'meteor/templating'; |
||||
import { t, roomTypes, handleError } from 'meteor/rocketchat:utils'; |
||||
import { TabBar, fireGlobalEvent } from 'meteor/rocketchat:ui-utils'; |
||||
import { ChatSubscription, Rooms } from 'meteor/rocketchat:models'; |
||||
import { settings } from 'meteor/rocketchat:settings'; |
||||
|
||||
const isSubscribed = (_id) => ChatSubscription.find({ rid: _id }).count() > 0; |
||||
|
||||
const favoritesEnabled = () => settings.get('Favorite_Rooms'); |
||||
|
||||
Template.headerRoom.helpers({ |
||||
back() { |
||||
return Template.instance().data.back; |
||||
}, |
||||
avatarBackground() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
if (!roomData) { return ''; } |
||||
return roomTypes.getSecondaryRoomName(roomData.t, roomData) || roomTypes.getRoomName(roomData.t, roomData); |
||||
}, |
||||
buttons() { |
||||
return TabBar.getButtons(); |
||||
}, |
||||
|
||||
isTranslated() { |
||||
const sub = ChatSubscription.findOne({ rid: this._id }, { fields: { autoTranslate: 1, autoTranslateLanguage: 1 } }); |
||||
return settings.get('AutoTranslate_Enabled') && ((sub != null ? sub.autoTranslate : undefined) === true) && (sub.autoTranslateLanguage != null); |
||||
}, |
||||
|
||||
state() { |
||||
const sub = ChatSubscription.findOne({ rid: this._id }, { fields: { f: 1 } }); |
||||
if (((sub != null ? sub.f : undefined) != null) && sub.f && favoritesEnabled()) { return ' favorite-room'; } |
||||
return 'empty'; |
||||
}, |
||||
|
||||
favoriteLabel() { |
||||
const sub = ChatSubscription.findOne({ rid: this._id }, { fields: { f: 1 } }); |
||||
if (((sub != null ? sub.f : undefined) != null) && sub.f && favoritesEnabled()) { return 'Unfavorite'; } |
||||
return 'Favorite'; |
||||
}, |
||||
|
||||
isDirect() { |
||||
return Rooms.findOne(this._id).t === 'd'; |
||||
}, |
||||
|
||||
roomName() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
if (!roomData) { return ''; } |
||||
|
||||
return roomTypes.getRoomName(roomData.t, roomData); |
||||
}, |
||||
|
||||
secondaryName() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
if (!roomData) { return ''; } |
||||
|
||||
return roomTypes.getSecondaryRoomName(roomData.t, roomData); |
||||
}, |
||||
|
||||
roomTopic() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
if (!roomData || !roomData.topic) { return ''; } |
||||
|
||||
let roomTopic = RocketChat.Markdown.parse(roomData.topic); |
||||
|
||||
// ' to apostrophe (') for emojis such as :')
|
||||
roomTopic = roomTopic.replace(/'/g, '\''); |
||||
|
||||
Object.keys(RocketChat.emoji.packages).forEach((emojiPackage) => { |
||||
roomTopic = RocketChat.emoji.packages[emojiPackage].render(roomTopic); |
||||
}); |
||||
|
||||
// apostrophe (') back to '
|
||||
roomTopic = roomTopic.replace(/\'/g, '''); |
||||
|
||||
return roomTopic; |
||||
}, |
||||
|
||||
channelIcon() { |
||||
const roomType = Rooms.findOne(this._id).t; |
||||
switch (roomType) { |
||||
case 'd': |
||||
return 'at'; |
||||
case 'p': |
||||
return 'lock'; |
||||
case 'c': |
||||
return 'hashtag'; |
||||
case 'l': |
||||
return 'livechat'; |
||||
default: |
||||
return roomTypes.getIcon(roomType); |
||||
} |
||||
}, |
||||
|
||||
roomIcon() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
if (!(roomData != null ? roomData.t : undefined)) { return ''; } |
||||
|
||||
return roomTypes.getIcon(roomData != null ? roomData.t : undefined); |
||||
}, |
||||
|
||||
tokenAccessChannel() { |
||||
return Template.instance().hasTokenpass.get(); |
||||
}, |
||||
|
||||
encryptedChannel() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
return roomData && roomData.encrypted; |
||||
}, |
||||
|
||||
userStatus() { |
||||
const roomData = Session.get(`roomData${ this._id }`); |
||||
return roomTypes.getUserStatus(roomData.t, this._id) || t('offline'); |
||||
}, |
||||
|
||||
showToggleFavorite() { |
||||
if (isSubscribed(this._id) && favoritesEnabled()) { return true; } |
||||
}, |
||||
|
||||
fixedHeight() { |
||||
return Template.instance().data.fixedHeight; |
||||
}, |
||||
|
||||
fullpage() { |
||||
return Template.instance().data.fullpage; |
||||
}, |
||||
|
||||
isChannel() { |
||||
return Template.instance().currentChannel != null; |
||||
}, |
||||
|
||||
isSection() { |
||||
return Template.instance().data.sectionName != null; |
||||
}, |
||||
}); |
||||
|
||||
Template.headerRoom.events({ |
||||
'click .iframe-toolbar .js-iframe-action'(e) { |
||||
fireGlobalEvent('click-toolbar-button', { id: this.id }); |
||||
e.currentTarget.querySelector('button').blur(); |
||||
return false; |
||||
}, |
||||
|
||||
'click .rc-header__toggle-favorite'(event) { |
||||
event.stopPropagation(); |
||||
event.preventDefault(); |
||||
return Meteor.call( |
||||
'toggleFavorite', |
||||
this._id, |
||||
!$(event.currentTarget).hasClass('favorite-room'), |
||||
(err) => err && handleError(err) |
||||
); |
||||
}, |
||||
|
||||
'click .edit-room-title'(event) { |
||||
event.preventDefault(); |
||||
Session.set('editRoomTitle', true); |
||||
$('.rc-header').addClass('visible'); |
||||
return Meteor.setTimeout(() => |
||||
$('#room-title-field') |
||||
.focus() |
||||
.select(), |
||||
10); |
||||
}, |
||||
}); |
||||
|
||||
Template.header.onCreated(function() { |
||||
this.currentChannel = (this.data && this.data._id && Rooms.findOne(this.data._id)) || undefined; |
||||
}); |
Loading…
Reference in new issue