MDL-63303 theme_bootstrapbase: add message drawer

This commit is contained in:
Ryan Wyllie 2018-10-26 14:07:56 +08:00
parent 5005d8cfb4
commit 6f96c06374
19 changed files with 1451 additions and 5 deletions

View File

@ -15,7 +15,7 @@
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_covnersation_footer_content
@template core_message/message_drawer_view_conversation_footer_content
This template will render the footer content for the conversation page in
the message drawer.

View File

@ -256,7 +256,10 @@
padding-bottom: @baseFontSize * 1.5 !important;
}
.ml-0,
.mx-0 {
margin-left: 0;
}
.ml-1,
.mx-1 {
margin-left: @baseFontSize / 4 !important;
@ -273,6 +276,10 @@
.mx-4 {
margin-left: @baseFontSize * 1.5 !important;
}
.mr-0,
.mx-0 {
margin-right: 0;
}
.mr-1,
.mx-1 {
margin-right: @baseFontSize / 4 !important;
@ -289,6 +296,10 @@
.mx-4 {
margin-right: @baseFontSize * 1.5 !important;
}
.mb-0,
.my-0 {
margin-bottom: 0;
}
.mb-1,
.my-1 {
margin-bottom: @baseFontSize / 4 !important;
@ -305,6 +316,10 @@
.my-4 {
margin-bottom: @baseFontSize * 1.5 !important;
}
.mt-0,
.my-0 {
margin-top: 0;
}
.mt-1,
.my-1 {
margin-top: @baseFontSize / 4 !important;
@ -322,7 +337,6 @@
margin-top: @baseFontSize * 1.5 !important;
}
.ml-auto,
.mx-auto {
margin-left: auto !important;
@ -591,6 +605,7 @@
}
.list-group-item {
background-color: @white;
position: relative;
}
.list-group-item-action {
&:hover,
@ -616,3 +631,14 @@
}
}
.dir-rtl {
.dir-rtl-hide {
display: none;
}
}
.dir-ltr {
.dir-ltr-hide {
display: none;
}
}

View File

@ -1178,6 +1178,191 @@
}
}
@message-drawer-width: 320px;
.message-drawer {
position: fixed;
top: 0;
height: 100%;
right: 0;
width: @message-drawer-width;
z-index: 999;
background-color: @white;
box-shadow: -2px 2px 4px rgba(0, 0, 0, .08);
display: flex;
flex-direction: column;
@media (min-width: 980px) {
.drawer-top {
display: none;
}
height: ~"calc(100% - 42px)";
top: 42px;
}
.transition(all .2s ease-in-out);
&.hidden {
display: block;
right: @message-drawer-width * -1;
}
.header-container {
flex-shrink: 0;
}
.searchinput {
box-shadow: none;
width: 100%;
}
[data-region="confirm-dialogue-container"] {
box-sizing: border-box;
* {
box-sizing: border-box;
}
.btn-block {
margin-left: 0;
}
}
.body-container {
flex: 1;
overflow: hidden;
& > * {
position: absolute;
right: 0;
left: 0;
top: 0;
bottom: 0;
opacity: 1;
.transition(all .2s ease-in-out);
&.hidden {
display: block;
left: @message-drawer-width;
right: @message-drawer-width * -1;
opacity: 0;
visibility: hidden;
&.previous {
left: @message-drawer-width * -1;
right: @message-drawer-width;
}
}
}
}
.footer-container {
flex-shrink: 0;
overflow-x: hidden;
& > * {
max-height: 2000px;
opacity: 1;
.transition(all .2s ease-in-out);
&.hidden {
display: block;
max-height: 0;
opacity: 0;
padding: 0 !important; /* stylelint-disable-line declaration-no-important */
border: 0 !important; /* stylelint-disable-line declaration-no-important */
visibility: hidden;
transform: translate(@message-drawer-width);
transition: all .2s ease-in-out, max-height .2s .2s ease-in-out;
&.previous {
transform: translate(@message-drawer-width * -1);
}
}
}
}
.matchtext {
background-color: lighten(@blue, 40%);
color: @textColor;
height: 1.5rem;
}
.contact-status {
position: absolute;
left: 39px;
top: 39px;
width: 10px;
height: 10px;
border-radius: 50%;
&.online {
border: 1px solid @green;
background-color: @green;
}
}
a,
.btn-link {
text-decoration: none;
color: inherit;
}
.message {
p {
margin: 0;
}
}
.clickable {
cursor: pointer;
&:hover {
box-shadow: 2px 2px 10px 0 rgba(0, 0, 0, 0.05), 3px 3px 5px -2px rgba(0, 0, 0, .1), 1px 1px 5px 0 rgba(0, 0, 0, 0.03);
}
}
h6,
.h6 {
font-size: 14px;
font-weight: normal;
}
.overview-section-toggle {
.collapsed-icon-container {
display: none;
}
.expanded-icon-container {
display: inline-block;
}
&.collapsed {
.collapsed-icon-container {
display: inline-block;
}
.expanded-icon-container {
display: none;
}
}
}
.view-overview-body {
.section {
display: block;
&.expanded {
display: flex;
flex-direction: column;
}
}
}
.view-conversation {
.content-message-container {
img {
max-width: 100%;
}
}
}
}
@media (max-width: 480px) {
.messaging-area-container {
.messaging-area {

View File

@ -199,7 +199,7 @@
position: relative;
h3 {
margin-top: 0px;
margin-top: 0;
}
}

View File

@ -9094,6 +9094,163 @@ a.ygtvspacer:hover {
height: 500px;
}
}
.message-drawer {
position: fixed;
top: 0;
height: 100%;
right: 0;
width: 320px;
z-index: 999;
background-color: #fff;
box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.08);
display: flex;
flex-direction: column;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
@media (min-width: 980px) {
.message-drawer {
height: calc(100% - 42px);
top: 42px;
}
.message-drawer .drawer-top {
display: none;
}
}
.message-drawer.hidden {
display: block;
right: -320px;
}
.message-drawer .header-container {
flex-shrink: 0;
}
.message-drawer .searchinput {
box-shadow: none;
width: 100%;
}
.message-drawer [data-region="confirm-dialogue-container"] {
box-sizing: border-box;
}
.message-drawer [data-region="confirm-dialogue-container"] * {
box-sizing: border-box;
}
.message-drawer [data-region="confirm-dialogue-container"] .btn-block {
margin-left: 0;
}
.message-drawer .body-container {
flex: 1;
overflow: hidden;
}
.message-drawer .body-container > * {
position: absolute;
right: 0;
left: 0;
top: 0;
bottom: 0;
opacity: 1;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
.message-drawer .body-container > *.hidden {
display: block;
left: 320px;
right: -320px;
opacity: 0;
visibility: hidden;
}
.message-drawer .body-container > *.hidden.previous {
left: -320px;
right: 320px;
}
.message-drawer .footer-container {
flex-shrink: 0;
overflow-x: hidden;
}
.message-drawer .footer-container > * {
max-height: 2000px;
opacity: 1;
-webkit-transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
.message-drawer .footer-container > *.hidden {
display: block;
max-height: 0;
opacity: 0;
padding: 0 !important;
/* stylelint-disable-line declaration-no-important */
border: 0 !important;
/* stylelint-disable-line declaration-no-important */
visibility: hidden;
transform: translate(320px);
transition: all 0.2s ease-in-out, max-height 0.2s 0.2s ease-in-out;
}
.message-drawer .footer-container > *.hidden.previous {
transform: translate(-320px);
}
.message-drawer .matchtext {
background-color: #ade6fe;
color: #333;
height: 1.5rem;
}
.message-drawer .contact-status {
position: absolute;
left: 39px;
top: 39px;
width: 10px;
height: 10px;
border-radius: 50%;
}
.message-drawer .contact-status.online {
border: 1px solid #46a546;
background-color: #46a546;
}
.message-drawer a,
.message-drawer .btn-link {
text-decoration: none;
color: inherit;
}
.message-drawer .message p {
margin: 0;
}
.message-drawer .clickable {
cursor: pointer;
}
.message-drawer .clickable:hover {
box-shadow: 2px 2px 10px 0 rgba(0, 0, 0, 0.05), 3px 3px 5px -2px rgba(0, 0, 0, 0.1), 1px 1px 5px 0 rgba(0, 0, 0, 0.03);
}
.message-drawer h6,
.message-drawer .h6 {
font-size: 14px;
font-weight: normal;
}
.message-drawer .overview-section-toggle .collapsed-icon-container {
display: none;
}
.message-drawer .overview-section-toggle .expanded-icon-container {
display: inline-block;
}
.message-drawer .overview-section-toggle.collapsed .collapsed-icon-container {
display: inline-block;
}
.message-drawer .overview-section-toggle.collapsed .expanded-icon-container {
display: none;
}
.message-drawer .view-overview-body .section {
display: block;
}
.message-drawer .view-overview-body .section.expanded {
display: flex;
flex-direction: column;
}
.message-drawer .view-conversation .content-message-container img {
max-width: 100%;
}
@media (max-width: 480px) {
.messaging-area-container .messaging-area .messages-area.editing .messages-header {
height: 80px;
@ -9969,7 +10126,7 @@ body.path-question-type .mform fieldset.hidden {
border-color: rgba(0, 0, 0, 0.15);
}
.groupinfobox h3 {
margin-top: 0px;
margin-top: 0;
}
.groupinfobox .left {
padding: 10px;
@ -21881,6 +22038,10 @@ ul.indented-list {
.py-4 {
padding-bottom: 21px !important;
}
.ml-0,
.mx-0 {
margin-left: 0;
}
.ml-1,
.mx-1 {
margin-left: 3.5px !important;
@ -21897,6 +22058,10 @@ ul.indented-list {
.mx-4 {
margin-left: 21px !important;
}
.mr-0,
.mx-0 {
margin-right: 0;
}
.mr-1,
.mx-1 {
margin-right: 3.5px !important;
@ -21913,6 +22078,10 @@ ul.indented-list {
.mx-4 {
margin-right: 21px !important;
}
.mb-0,
.my-0 {
margin-bottom: 0;
}
.mb-1,
.my-1 {
margin-bottom: 3.5px !important;
@ -21929,6 +22098,10 @@ ul.indented-list {
.my-4 {
margin-bottom: 21px !important;
}
.mt-0,
.my-0 {
margin-top: 0;
}
.mt-1,
.my-1 {
margin-top: 3.5px !important;
@ -22165,6 +22338,7 @@ ul.indented-list {
}
.list-group-item {
background-color: #fff;
position: relative;
}
.list-group-item-action:hover,
.list-group-item-action:focus {
@ -22187,3 +22361,9 @@ ul.indented-list {
height: 24px !important;
width: 24px !important;
}
.dir-rtl .dir-rtl-hide {
display: none;
}
.dir-ltr .dir-ltr-hide {
display: none;
}

View File

@ -0,0 +1,93 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer
This template will render the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
Adding a "div.drawer-top" since bootstrapbase does not have a fixed navbar
for smaller screensizes.
Example context (json):
{}
}}
<div
id="message-drawer-{{uniqid}}"
class="message-drawer bg-light hidden"
aria-expanded="false"
aria-hidden="true"
data-region="message-drawer"
role="region"
>
<div class="drawer-top p-2 border-bottom bg-secondary text-right">
<a id="message-drawer-close-{{uniqid}}" class="" href="#">
{{#pix}} i/window_close, core, {{#str}} togglemessagemenu, message {{/str}} {{/pix}}
</a>
</div>
<div class="header-container position-relative" data-region="header-container">
{{> core_message/message_drawer_view_contacts_header }}
{{> core_message/message_drawer_view_conversation_header }}
{{> core_message/message_drawer_view_overview_header }}
{{> core_message/message_drawer_view_search_header }}
{{> core_message/message_drawer_view_settings_header }}
</div>
<div class="body-container position-relative" data-region="body-container">
{{> core_message/message_drawer_view_contact_body }}
{{> core_message/message_drawer_view_contacts_body }}
{{> core_message/message_drawer_view_conversation_body }}
{{> core_message/message_drawer_view_group_info_body }}
{{> core_message/message_drawer_view_overview_body }}
{{> core_message/message_drawer_view_search_body }}
{{> core_message/message_drawer_view_settings_body }}
</div>
<div class="footer-container position-relative" data-region="footer-container">
{{> core_message/message_drawer_view_conversation_footer }}
</div>
</div>
{{#js}}
require(
[
'jquery',
'core_message/message_drawer',
'core_message/message_popover'
],
function(
$,
MessageDrawer,
Popover
) {
var root = $('#message-drawer-{{uniqid}}');
MessageDrawer.init(root);
var toggle = $('#message-drawer-close-{{uniqid}}');
Popover.init(toggle);
});
{{/js}}

View File

@ -0,0 +1,40 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_icon_back
This template will render the back icon for the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing icon "i/previous" to "t/collapsed_rtl"
Example context (json):
{}
}}
<span class="dir-rtl-hide">{{#pix}} t/collapsed_rtl, core {{/pix}}</span>
<span class="dir-ltr-hide">{{#pix}} t/collapsed, core {{/pix}}</span>

View File

@ -0,0 +1,40 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_icon_forward
This template will render the forward icon for the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing icon "i/next" to "t/collapsed"
Example context (json):
{}
}}
<span class="dir-rtl-hide">{{#pix}} t/collapsed, core {{/pix}}</span>
<span class="dir-ltr-hide">{{#pix}} t/collapsed_rtl, core {{/pix}}</span>

View File

@ -0,0 +1,101 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_contacts_body
This template will render the body content of the contacts page in the
message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
adding ".m-0" to "ul.nav-pills"
adding ".w-50.text-center" to ".nav-item"
changing ".show" to ".in" in ".tab-pane"
Example context (json):
{}
}}
<div class="hidden h-100" aria-hidden="true" data-region="view-contacts" data-user-id="{{loggedinuser.id}}">
<div class="d-flex flex-column h-100">
<div class="p-3 border-bottom">
<ul class="nav nav-pills d-flex m-0" role="tablist">
<li class="nav-item w-50 align-self-stretch text-center active">
<a
id="contacts-tab-{{uniqid}}"
class="nav-link"
href="#contacts-tab-panel-{{uniqid}}"
data-toggle="tab"
data-action="show-contacts-section"
role="tab"
aria-controls="contacts-tab-panel-{{uniqid}}"
aria-selected="true"
>
{{#str}} contacts, core_message {{/str}}
</a>
</li>
<li class="nav-item w-50 text-center">
<a
id="requests-tab-{{uniqid}}"
class="nav-link"
href="#requests-tab-panel-{{uniqid}}"
data-toggle="tab"
data-action="show-requests-section"
role="tab"
aria-controls="requests-tab-panel-{{uniqid}}"
aria-selected="false"
>
{{#str}} requests {{/str}}
<span class="badge bg-primary ml-2 {{^contactrequestcount}}hidden{{/contactrequestcount}}" data-region="contact-request-count">
{{contactrequestcount}}
</span>
</a>
</li>
</ul>
</div>
<div class="tab-content d-flex flex-column">
{{< core_message/message_drawer_view_contacts_body_section_contacts }}
{{$rootclasses}}tab-pane fade in active h-100{{/rootclasses}}
{{$rootattributes}}
id="contacts-tab-panel-{{uniqid}}"
data-section="contacts"
role="tabpanel"
aria-labelledby="contacts-tab-{{uniqid}}"
{{/rootattributes}}
{{/ core_message/message_drawer_view_contacts_body_section_contacts }}
{{< core_message/message_drawer_view_contacts_body_section_requests }}
{{$rootclasses}}tab-pane fade h-100{{/rootclasses}}
{{$rootattributes}}
id="requests-tab-panel-{{uniqid}}"
data-section="requests"
role="tabpanel"
aria-labelledby="requests-tab-{{uniqid}}"
{{/rootattributes}}
{{/ core_message/message_drawer_view_contacts_body_section_requests }}
</div>
</div>
</div>

View File

@ -0,0 +1,74 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_body_message
This template will render a single message for the body of the conversation page
in the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing icon "i/unchecked" to "i/completion-manual-n"
Example context (json):
{}
}}
<div
class="message clickable d-flex flex-column p-2 {{#fromloggedinuser}}bg-secondary{{/fromloggedinuser}}{{^fromloggedinuser}}bg-white{{/fromloggedinuser}} rounded mb-2"
data-region="message"
data-message-id="{{id}}"
aria-checked="false"
role="checkbox"
tabindex="0"
>
<div class="d-flex align-items-center {{^fromloggedinuser}}pb-2{{/fromloggedinuser}}">
{{^fromloggedinuser}}
<div>
<img
class="rounded-circle"
src="{{{userfrom.profileimageurl}}}"
alt="{{userfrom.fullname}}"
aria-hidden="true"
style="height: 30px"
>
</div>
<div class="pl-2 pr-2">
<h6 class="text-truncate m-0">{{userfrom.fullname}}</h6>
</div>
{{/fromloggedinuser}}
<div
class="ml-auto small text-right text-muted"
style="flex-shrink: 0"
>
{{formattedtime}}
</div>
<span class="hidden ml-2 small text-primary" data-region="not-selected-icon">{{#pix}} i/completion-manual-n, core {{/pix}}</span>
<span class="hidden ml-2 small text-primary" data-region="selected-icon">{{#pix}} i/checked, core {{/pix}}</span>
</div>
<div>{{{text}}}</div>
</div>

View File

@ -0,0 +1,62 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_footer_content
This template will render the footer content for the conversation page in
the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
adding: ".m-0.flex-grow" to "textarea.form-control"
Example context (json):
{}
}}
<div class="d-flex mt-1">
<textarea
data-region="send-message-txt"
class="form-control bg-light m-0 flex-grow"
rows="3"
data-auto-rows
data-min-rows="3"
data-max-rows="5"
role="textbox"
aria-label="{{#str}} writeamessage, core_message {{/str}}"
placeholder="{{#str}} writeamessage, core_message {{/str}}"
style="resize: none"
></textarea>
<button
class="btn btn-link btn-icon icon-size-3 ml-1 mt-auto"
aria-label="{{#str}} sendmessage, core_message {{/str}}"
data-action="send-message"
>
<span data-region="send-icon-container">{{#pix}} i/sendmessage, core {{/pix}}</span>
<span class="hidden" data-region="loading-icon-container">{{> core/loading }}</span>
</button>
</div>

View File

@ -0,0 +1,53 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_footer_edit_mode
This template will render the foot while the conversation page is in edit mode
in the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing icon "i/delete" to "i/trash"
Example context (json):
{}
}}
<div class="d-flex p-3">
<button
class="btn btn-link btn-icon my-1 icon-size-4"
data-action="delete-selected-messages"
data-toggle="tooltip"
data-placement="top"
title="{{#str}} deleteselectedmessages, core_message {{/str}}"
>
<span data-region="icon-container">{{#pix}} i/trash, core {{/pix}}</span>
<span class="hidden" data-region="loading-icon-container">{{> core/loading }}</span>
<span class="sr-only">{{#str}} deleteselectedmessages, core_message {{/str}}</span>
</button>
</div>

View File

@ -0,0 +1,125 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_heeader_content
This template will render the header content of the conversation page in
the message message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
Changing the dropdown menu items from "div.dropdown-menu > a.dropdown-item"
to "ul.dropdown-menu > li > a.dropdown-item"
assigning the "data-action=" and ".hidden" to the "li" elements.
Example context (json):
{}
}}
<div class="d-flex align-items-center">
<div class="align-self-stretch" >
<a class="h-100 mr-2 d-flex align-items-center" href="#" data-route-back>
{{> core_message/message_drawer_icon_back }}
</a>
</div>
<div class="d-flex text-truncate">
<a class="d-flex text-truncate" href="#" data-action="view-contact">
{{#imageurl}}
<div class="d-flex align-items-center">
<img
class="rounded-circle"
src="{{{.}}}"
alt="{{name}}"
aria-hidden="true"
style="height: 38px"
>
</div>
{{/imageurl}}
<div class="w-100 text-truncate ml-2">
<div class="d-flex">
<strong class="m-0 text-truncate">{{name}}</strong>
<span class="{{^isfavourite}}hidden{{/isfavourite}} ml-1 text-primary" data-region="favourite-icon-container">
{{#pix}} i/star, core {{/pix}}
</span>
</div>
{{#showonlinestatus}}
<p class="m-0 font-weight-light text-truncate">
{{#isonline}}{{#str}} loggedin, core_message {{/str}}{{/isonline}}
{{^isonline}}{{#str}} loggedoff, core_message {{/str}}{{/isonline}}
</p>
{{/showonlinestatus}}
</div>
</a>
</div>
<div class="ml-auto dropdown">
<button class="btn btn-link btn-icon icon-size-3" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{#pix}} i/moremenu, core {{/pix}}
</button>
<ul class="dropdown-menu pull-right">
<li data-route="view-contact" data-route-param="{{userid}}">
<a class="dropdown-item" href="#" >
{{#str}} info, core_message {{/str}}
</a>
</li>
<li class="{{#isfavourite}}hidden{{/isfavourite}}" data-action="confirm-favourite">
<a class="dropdown-item" href="#" >
{{#str}} addtofavourites, core_message {{/str}}
</a>
</li>
<li class="{{^isfavourite}}hidden{{/isfavourite}}" data-action="confirm-unfavourite">
<a class="dropdown-item " href="#">
{{#str}} removefromfavourites, core_message {{/str}}
</a>
</li>
<li class="{{#isblocked}}hidden{{/isblocked}}" data-action="request-block">
<a class="dropdown-item" href="#">
{{#str}} blockuser, core_message {{/str}}
</a>
</li>
<li class="{{^isblocked}}hidden{{/isblocked}}" data-action="request-unblock">
<a class="dropdown-item" href="#">
{{#str}} unblockuser, core_message {{/str}}
</a>
</li>
<li data-action="request-delete-conversation">
<a class="dropdown-item" href="#">
{{#str}} deleteconversation, core_message {{/str}}
</a>
</li>
<li class="{{#iscontact}}hidden{{/iscontact}}" data-action="request-add-contact">
<a class="dropdown-item" href="#">
{{#str}} addtoyourcontacts, core_message {{/str}}
</a>
</li>
<li class="{{^iscontact}}hidden{{/iscontact}}" data-action="request-remove-contact">
<a class="dropdown-item" href="#">
{{#str}} removefromyourcontacts, core_message {{/str}}
</a>
</li>
</ul>
</div>
</div>

View File

@ -0,0 +1,76 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_heeader_content
This template will render the header content of the conversation page in
the message message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
Changing the dropdown menu items from "div.dropdown-menu > a.dropdown-item"
to "ul.dropdown-menu > li > a.dropdown-item"
assigning the "data-action=" and ".hidden" to the "li" elements.
Example context (json):
{}
}}
<div class="d-flex align-items-center">
<div class="align-self-stretch" >
<a class="h-100 mr-2 d-flex align-items-center" href="#" data-route-back>
{{> core_message/message_drawer_icon_back }}
</a>
</div>
<div class="d-flex text-truncate">
{{#imageurl}}
<div class="d-flex align-items-center">
<img
class="rounded-circle"
src="{{{.}}}"
alt="{{name}}"
aria-hidden="true"
style="height: 38px"
>
</div>
{{/imageurl}}
<div class="w-100 text-truncate ml-2">
<div class="d-flex">
<strong class="m-0 text-truncate">{{name}}</strong>
<span class="{{^isfavourite}}hidden{{/isfavourite}} ml-1 text-primary" data-region="favourite-icon-container">
{{#pix}} i/star, core {{/pix}}
</span>
</div>
{{#showonlinestatus}}
<p class="m-0 font-weight-light text-truncate">
{{#isonline}}{{#str}} loggedin, core_message {{/str}}{{/isonline}}
{{^isonline}}{{#str}} loggedoff, core_message {{/str}}{{/isonline}}
</p>
{{/showonlinestatus}}
</div>
</div>
</div>

View File

@ -0,0 +1,97 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_conversation_heeader_content
This template will render the header content of the conversation page in
the message message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
Changing the dropdown menu items from "div.dropdown-menu > a.dropdown-item"
to "ul.dropdown-menu > li > a.dropdown-item"
Example context (json):
{}
}}
<div class="d-flex align-items-center">
<div class="align-self-stretch" >
<a class="h-100 mr-2 d-flex align-items-center" href="#" data-route-back>
{{> core_message/message_drawer_icon_back }}
</a>
</div>
<div class="d-flex text-truncate">
<a class="d-flex text-truncate" href="#" data-action="view-group-info">
{{#imageurl}}
<div class="d-flex align-items-center">
<img
class="rounded-circle"
src="{{{.}}}"
alt="{{name}}"
aria-hidden="true"
style="height: 38px"
>
</div>
{{/imageurl}}
<div class="w-100 text-truncate ml-2">
<div class="d-flex">
<strong class="m-0 text-truncate">{{name}}</strong>
<span class="{{^isfavourite}}hidden{{/isfavourite}} ml-1 text-primary" data-region="favourite-icon-container">
{{#pix}} i/star, core {{/pix}}
</span>
</div>
<p class="m-0 text-truncate">{{subname}}</p>
<p class="m-0 font-weight-light text-truncate">
{{#str}} numparticipants, core_message, {{totalmembercount}} {{/str}}
</p>
</div>
</a>
</div>
<div class="ml-auto dropdown">
<button class="btn btn-link btn-icon icon-size-3" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{#pix}} i/moremenu, core {{/pix}}
</button>
<div class="dropdown-menu pull-right">
<li data-action="view-group-info">
<a class="dropdown-item" href="#">
{{#str}} groupinfo, core_message {{/str}}
</a>
</li>
<li class="{{#isfavourite}}hidden{{/isfavourite}}" data-action="confirm-favourite">
<a class="dropdown-item" href="#">
{{#str}} addtofavourites, core_message {{/str}}
</a>
</li>
<li class="{{^isfavourite}}hidden{{/isfavourite}}" data-action="confirm-unfavourite">
<a class="dropdown-item" href="#">
{{#str}} removefromfavourites, core_message {{/str}}
</a>
</li>
</div>
</div>
</div>

View File

@ -0,0 +1,70 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_group_info_body_content
This template will render the content for the body section of the group
info page in the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
Example context (json):
{}
}}
<a class="px-2 align-self-start" href="#" data-route-back>
{{> core_message/message_drawer_icon_back }}
</a>
<div class="px-2">
<div class="text-center">
{{#imageurl}}
<img
class="rounded-circle"
src="{{.}}"
aria-hidden="true"
alt="{{#str}} pictureof, moodle, {{name}} {{/str}}"
title="{{#str}} pictureof, moodle, {{name}} {{/str}}"
style="height: 100px; width: 100px"
>
{{/imageurl}}
</div>
<h3 class="mt-2 mb-0 text-center text-truncate">{{name}}</h3>
{{#subname}}<h4 class="mt-2 mb-0 text-center text-truncate">{{.}}</h4>{{/subname}}
</div>
<h3 class="border-bottom h6 mt-3 px-3 py-2 mb-0 font-weight-bold">{{#str}} participants, core_message {{/str}}</h3>
<div class="pt-1 bg-white" data-region="members-list-container" style="overflow-y: auto">
{{< core_message/message_drawer_lazy_load_list }}
{{$rootattributes}}
data-region="members-list"
{{/rootattributes}}
{{$emptymessage}}{{#str}} noparticipants, core_message {{/str}}{{/emptymessage}}
{{$placeholder}}
{{#placeholders}}
{{> core_message/message_drawer_view_group_info_participants_list_item_placeholder }}
{{/placeholders}}
{{/placeholder}}
{{/ core_message/message_drawer_lazy_load_list }}
</div>

View File

@ -0,0 +1,74 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_overview_header
This template will render the header for the overview page of the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing "div.input-group" to "div.input-prepend"
changing the "div.input-group-prepend > span" to "span.add-on"
addint ".searchinput" to "input.form-control"
Example context (json):
{}
}}
<div class="border-bottom px-2 py-3" aria-hidden="false" data-region="view-overview">
<div class="d-flex align-items-center">
<div class="input-prepend d-flex flex-grow m-0">
<span class="add-on bg-white pr-0">
{{#pix}} a/search, core {{/pix}}
</span>
<input
type="text"
class="form-control border-left-0 searchinput"
placeholder="{{#str}} search, core_search {{/str}}"
aria-label="{{#str}} search, core_search {{/str}}"
data-region="view-overview-search-input"
>
</div>
<div class="ml-2">
<a
href="#"
data-route="view-settings"
data-route-param="{{loggedinuser.id}}"
>
{{#pix}} t/edit, core {{/pix}}
</a>
</div>
</div>
<div class="text-right mt-3">
<a href="#" data-route="view-contacts">
{{#pix}} i/user, core {{/pix}}
{{#str}} contacts, core_message {{/str}}
<span class="badge bg-primary ml-2 {{^contactrequestcount}}hidden{{/contactrequestcount}}" data-region="contact-request-count">
{{contactrequestcount}}
</span>
</a>
</div>
</div>

View File

@ -0,0 +1,76 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_overview_section
This template is a base template to render a collapsible "section" on the
overview page of the message drawer, for example the messages section.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing icon "t/collapsedcaret" to "t/collapsed"
adding ".in" to ".show"
Example context (json):
{}
}}
<div
class="accordion-group section border-0"
data-region="{{$region}}{{/region}}"
>
<div id="{{$region}}{{/region}}-toggle" class="card-header p-0" data-region="toggle">
<button
class="btn btn-link w-100 text-left p-2 m-0 d-flex align-items-center overview-section-toggle {{^expanded}}collapsed{{/expanded}}"
data-toggle="collapse"
data-target="#{{$region}}{{/region}}-target"
aria-expanded="{{#expanded}}true{{/expanded}}{{^expanded}}false{{/expanded}}"
aria-controls="{{$region}}{{/region}}-target"
>
<span class="collapsed-icon-container">
{{#pix}} t/collapsed, core {{/pix}}
</span>
<span class="expanded-icon-container">
{{#pix}} t/expanded, core {{/pix}}
</span>
{{$title}}{{/title}} (<span data-region="section-total-count">{{count.total}}</span>)
<span class="hidden ml-2" data-region="loading-icon-container">
{{> core/loading }}
</span>
<span class="{{^count.unread}}hidden{{/count.unread}} badge badge-pill badge-primary ml-auto bg-primary" data-region="section-unread-count">
{{count.unread}}
</span>
</button>
</div>
{{< core_message/message_drawer_lazy_load_list }}
{{$rootclasses}}collapse border-bottom {{#expanded}}show in{{/expanded}}{{/rootclasses}}
{{$rootattributes}}
id="{{$region}}{{/region}}-target"
aria-labelledby="{{$region}}{{/region}}-toggle"
data-parent="#message-drawer-view-overview-container"
{{/rootattributes}}
{{/ core_message/message_drawer_lazy_load_list }}
</div>

View File

@ -0,0 +1,74 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_message/message_drawer_view_search_header
This template will render the header of the search page in the message drawer.
Classes required for JS:
* none
Data attributes required for JS:
* All data attributes are required
Context variables required for this template:
* userid The logged in user id
* urls The URLs for the popover
This is an overridden template
changing "div.input-group" to "div.input-append"
removing the "div.input-group-append"
changing "button.btn.btn-outline-secondary" to "button.btn.m0"
Example context (json):
{}
}}
<div class="hidden border-bottom px-2 py-3 view-search" aria-hidden="true" data-region="view-search">
<div class="d-flex align-items-center">
<a
class="mr-2 align-self-stretch d-flex align-items-center"
href="#"
data-route-back
data-action="cancel-search"
>
{{> core_message/message_drawer_icon_back }}
</a>
<div class="input-append m-0 d-flex flex-grow">
<input
type="text"
class="form-control border-right-0 searchinput"
placeholder="{{#str}} search, core_search {{/str}}"
aria-label="{{#str}} search, core_search {{/str}}"
data-region="search-input"
>
<button
class="btn m-0"
type="button"
data-action="search"
>
<span data-region="search-icon-container">
{{#pix}} a/search, core {{/pix}}
</span>
<span class="hidden" data-region="loading-icon-container">
{{> core/loading }}
</span>
</button>
</div>
</div>
</div>