diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/mail/static/src/xml | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/mail/static/src/xml')
| -rw-r--r-- | addons/mail/static/src/xml/activity.xml | 130 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/activity_view.xml | 93 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/composer.xml | 20 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/many2one_avatar_user.xml | 12 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/systray.xml | 61 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/text_emojis.xml | 18 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/thread.xml | 102 | ||||
| -rw-r--r-- | addons/mail/static/src/xml/web_kanban_activity.xml | 114 |
8 files changed, 550 insertions, 0 deletions
diff --git a/addons/mail/static/src/xml/activity.xml b/addons/mail/static/src/xml/activity.xml new file mode 100644 index 00000000..487eb210 --- /dev/null +++ b/addons/mail/static/src/xml/activity.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + <t t-name="mail.activity_items"> + <div class="o_thread_date_separator o_border_dashed" data-toggle="collapse" data-target="#o_chatter_planned_activities"> + <a role="button" class="o_thread_date btn"> + <i class="fa fa-fw fa-caret-down"/> + Planned activities + <small class="o_chatter_planned_activities_summary ml8"> + <span class="badge rounded-circle badge-danger"><t t-esc="nbOverdueActivities"/></span> + <span class="badge rounded-circle badge-warning"><t t-esc="nbTodayActivities"/></span> + <span class="badge rounded-circle badge-success"><t t-esc="nbPlannedActivities"/></span> + </small> + </a> + </div> + <div id="o_chatter_planned_activities" class="collapse show"> + <t t-foreach="activities" t-as="activity"> + <div class="o_thread_message" style="margin-bottom: 10px"> + <div class="o_thread_message_sidebar"> + <div class="o_avatar_stack"> + <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_128') : ''}" class="o_thread_message_avatar rounded-circle mb8" t-att-title="activity.user_id[1]" t-att-alt="activity.user_id[1]"/> + <i t-att-class="'o_avatar_icon fa ' + activity.icon + ' bg-' + (activity.state == 'planned'? 'success' : (activity.state == 'today'? 'warning' : 'danger')) + '-full'" + t-att-title="activity.activity_type_id[1]"/> + </div> + </div> + <div class="o_thread_message_core"> + <div class="o_mail_info text-muted"> + <strong><span t-attf-class="o_activity_date o_activity_color_#{activity.state}"><t t-esc="activity.label_delay" /></span></strong>: + <strong t-if="activity.summary" class="o_activity_summary"> “<t t-esc="activity.summary"/>”</strong> + <strong t-if="!activity.summary"> <t t-esc="activity.activity_type_id[1]" /></strong> + <em> for </em> + <t t-esc="activity.user_id[1]" /> + <a class="btn btn-link btn-info text-muted collapsed o_activity_info ml4" role="button" data-toggle="collapse" t-attf-data-target="#o_chatter_activity_info_#{activity.id}"> + <i class="fa fa-info-circle" role="img" aria-label="Info" title="Info"></i> + </a> + <div class="o_thread_message_collapse collapse" t-attf-id="o_chatter_activity_info_#{activity.id}"> + <dl class="dl-horizontal"> + <dt>Activity type</dt> + <dd class="mb8"> + <t t-esc="activity.activity_type_id[1]"/> + </dd> + <dt>Created on</dt> + <dd class="mb8"> + <t t-esc="activity.create_date.format(datetimeFormat)"/> + by + <img t-attf-src="/web/image#{activity.create_uid[0] >= 0 ? ('/res.users/' + activity.create_uid[0] + '/image_128') : ''}" + height="18" width="18" + class="o_object_fit_cover rounded-circle mr4" + t-att-title="activity.create_uid[1]" + t-att-alt="activity.create_uid[1]"/> + <b><t t-esc="activity.create_uid[1]"/></b> + </dd> + <dt>Assigned to</dt> + <dd class="mb8"> + <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_128') : ''}" height="18" width="18" class="o_object_fit_cover rounded-circle mr4" t-att-title="activity.user_id[1]" t-att-alt="activity.user_id[1]"/> + <b><t t-esc="activity.user_id[1]"/></b> + <em>, due on </em><span t-attf-class="o_activity_color_#{activity.state}"><t t-esc="activity.date_deadline.format(dateFormat)"/></span> + </dd> + </dl> + </div> + </div> + <div t-if="activity.note" t-attf-class="o_thread_message_#{activity.activity_decoration ? activity.activity_decoration : 'note'} #{activity.activity_decoration ? 'alert alert-' + activity.activity_decoration : ''}"> + <t t-raw="activity.note"/> + </div> + <t t-if="activity.mail_template_ids && activity.mail_template_ids.length > 0"> + <div class="mt16" t-att-data-activity-id="activity.id" t-att-data-previous-activity-type-id="activity.activity_type_id[0]"> + <t t-foreach="activity.mail_template_ids" t-as="mail_template"> + <div> + <i class="fa fa-envelope-o" aria-label="Mail" title="Mail" role="img"></i> + <span t-esc="mail_template.name"/>: + <span class="o_activity_template_preview" t-att-data-template-id="mail_template.id">Preview</span> + <span class="text-muted">or</span> + <span class="o_activity_template_send" t-att-data-template-id="mail_template.id">Send Now</span> + </div> + </t> + </div> + </t> + <div class="o_thread_message_tools btn-group"> + <t t-call="mail.activity_thread_message_tools"/> + </div> + </div> + </div> + </t> + </div> + </t> + <t t-name="mail.activity_thread_message_tools"> + <div t-if="activity.can_write" class="o_thread_message_tools btn-group"> + <span t-if="activity.activity_category !== 'upload_file'" class="o_mark_as_done" data-toggle="popover" t-att-data-activity-id="activity.id" t-att-data-force-next-activity="activity.force_next" t-att-data-previous-activity-type-id="activity.activity_type_id[0]"> + <a role="button" href="#" class="btn btn-link btn-success text-muted o_activity_link mr8"> + <i class="fa fa-check"/> Mark Done </a> + </span> + <span t-if="activity.activity_category === 'upload_file'" class="o_mark_as_done_upload_file" t-att-data-activity-id="activity.id" t-att-data-force-next-activity="activity.force_next" t-att-data-previous-activity-type-id="activity.activity_type_id[0]" t-att-data-fileupload-id="activity.fileuploadID"> + <a role="button" href="#" class="btn btn-link btn-success text-muted o_activity_link mr8"> + <i class="fa fa-upload"/> Upload Document </a> + </span> + <span t-if="activity.activity_category === 'upload_file'" class="d-none"> + <t t-call="HiddenInputFile"> + <t t-set="fileupload_id" t-value="activity.fileuploadID"/> + <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> + <input type="hidden" name="model" t-att-value="activity.res_model"/> + <input type="hidden" name="id" t-att-value="activity.res_id"/> + </t> + </span> + <a role="button" href="#" class="btn btn-link btn-secondary text-muted o_edit_activity o_activity_link" t-att-data-activity-id="activity.id"> + <i class="fa fa-pencil"/> Edit + </a> + <a role="button" href="#" class="btn btn-link btn-danger text-muted o_unlink_activity o_activity_link" t-att-data-activity-id="activity.id"> + <i class="fa fa-times"/> Cancel + </a> + </div> + </t> + <t t-name="mail.activity_feedback_form"> + <div> + <textarea class="form-control" rows="3" id="activity_feedback" placeholder="Write Feedback"/> + <div class="mt8"> + <t t-if="!force_next"> + <button type="button" class="btn btn-sm btn-primary o_activity_popover_done_next" t-att-data-previous-activity-type-id="previous_activity_type_id"> + Done & Schedule Next</button> + <button type="button" class="btn btn-sm btn-primary o_activity_popover_done"> + Done</button> + <button type="button" class="btn btn-sm btn-link o_activity_popover_discard"> + Discard</button> + </t> + <t t-else=""> + <button type="button" class="btn btn-sm btn-primary o_activity_popover_done_next"> + Done & Launch Next</button> + </t> + </div> + </div> + </t> +</templates> diff --git a/addons/mail/static/src/xml/activity_view.xml b/addons/mail/static/src/xml/activity_view.xml new file mode 100644 index 00000000..c40d6d73 --- /dev/null +++ b/addons/mail/static/src/xml/activity_view.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + +<t t-name="mail.ActivityViewHeader" owl="1"> + <thead> + <tr> + <th></th> + <th t-foreach="props.activity_types" t-as="type" t-key="type[0]" + class="o_activity_type_cell" t-attf-class="{{ activeFilter.activityTypeId === type[0] ? 'o_activity_filter_' + activeFilter.state : '' }}" + t-att-data-activity-type-id="type[0]" t-attf-width="{{100/props.activity_types.length}}%"> + <div> + <span t-esc="type[1]"/> + <span t-if="type[2].length > 0" class="dropdown pull-right"> + <i class="fa fa-ellipsis-v fa-fw" data-toggle="dropdown"/> + <div class="dropdown-menu"> + <t t-foreach="type[2]" t-as="template" t-key="template.id"> + <div title="This action will send an email." + class="o_template_element o_send_mail_template" + t-att-data-activity-type-id="type[0]" + t-att-data-template-id="template.id" + t-on-click="_onSendMailTemplateClicked"> + <i class="fa fa-envelope fa-fw"/> <t t-esc="template.name"/> + </div> + </t> + </div> + </span> + </div> + <KanbanColumnProgressBarAdapter Component="widgetComponents.KanbanColumnProgressBar" + widgetArgs="[getProgressBarOptions(type[0]), getProgressBarColumnState(type[0])]" + t-if="activityTypeIds.includes(type[0])" + t-on-set-progress-bar-state="_onSetProgressBarState"/> + <div t-else="" class="mt24"/> + </th> + </tr> + </thead> +</t> + +<t t-name="mail.ActivityViewBody" owl="1"> + <tbody> + <t t-foreach="activityResIds" t-as="resId" t-key="resId"> + <t t-call="mail.ActivityViewRow"/> + </t> + </tbody> +</t> + +<t t-name="mail.ActivityViewRow" owl="1"> + <tr class="o_data_row" t-att-data-res-id="resId"> + <t t-set="record" t-value="props.data.find(data => data.res_id === resId)"/> + <td t-attf-class="{{ activeFilter.resIds.includes(resId) ? 'o_activity_filter_' + activeFilter.state : '' }}"> + <ActivityRecordAdapter Component="widgetComponents.ActivityRecord" + widgetArgs="[record, { qweb: qweb }]"/> + </td> + <t t-foreach="props.activity_types" t-as="type" t-key="type[0]"> + <t t-call="mail.ActivityViewCell"/> + </t> + </tr> +</t> + +<t t-name="mail.ActivityViewCell" owl="1"> + <t t-set="activityGroup" t-value="props.grouped_activities[resId] and props.grouped_activities[resId][type[0]] or {count: 0, ids: [], state: false}"/> + <td t-if="activityGroup.state" t-att-data-res-id="resId" t-att-data-activity-type-id="type[0]" + t-attf-class="o_activity_summary_cell {{activityGroup.state}} {{ activeFilter.resIds.includes(resId) ? 'o_activity_filter_' + activeFilter.state : '' }}"> + <ActivityCellAdapter Component="widgetComponents.ActivityCell" + widgetArgs="['activity_ids', props.getKanbanActivityData(activityGroup, resId)]"/> + </td> + <td t-else="" t-att-data-res-id="resId" t-att-data-activity-type-id="type[0]" + class="o_activity_summary_cell o_activity_empty_cell" + t-attf-class="{{ activeFilter.resIds.includes(resId) ? 'o_activity_filter_' + activeFilter.state : '' }}" + t-on-click.prevent.stop="_onEmptyCellClicked"> + <i title="Create" class="text-center fa fa-plus"/> + </td> +</t> + +<t t-name="mail.ActivityViewFooter" owl="1"> + <tfoot> + <tr class="o_data_row"> + <td class="o_record_selector p-3" t-on-click.prevent.stop="trigger('schedule_activity')"> + <span class="fa fa-plus pr-2"/><span>Schedule activity</span> + </td> + </tr> + </tfoot> +</t> + +<div t-name="mail.ActivityRenderer" class="o_activity_view" owl="1"> + <t t-if="!props.activity_types.length" t-call="web.NoContentHelper"/> + <table t-else="" class="table-bordered mb-5"> + <t t-call="mail.ActivityViewHeader"/> + <t t-call="mail.ActivityViewBody"/> + <t t-call="mail.ActivityViewFooter"/> + </table> +</div> + +</templates> diff --git a/addons/mail/static/src/xml/composer.xml b/addons/mail/static/src/xml/composer.xml new file mode 100644 index 00000000..49c0a3bf --- /dev/null +++ b/addons/mail/static/src/xml/composer.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + + <div t-name="mail.legacy.Composer.emojis" class="o_mail_emoji_container"> + <t t-foreach="emojis" t-as="emoji"> + <span t-att-data-emoji="emoji.sources[0]" class="o_mail_emoji" t-att-title="emoji.description" t-att-aria-label="emoji.description"> + <t t-raw="emoji.unicode"/> + </span> + </t> + </div> + + <t t-name="FieldMany2ManyTagsEmail" t-extend="FieldMany2ManyTag"> + <t t-jquery="[t-attf-class*=badge]" t-operation="replace"> + <div t-attf-class="badge badge-pill dropdown o_tag_color_0 #{el.email.indexOf('@') < 0 ? 'o_tag_error' : ''}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id" t-attf-title="Tag color: #{colornames[color]}"> + <span class="o_badge_text" t-att-title="el.email"><t t-esc="el.display_name"/></span> + <a t-if="!readonly" href="#" class="fa fa-times o_delete" title="Delete" aria-label="Delete"/> + </div> + </t> + </t> +</templates> diff --git a/addons/mail/static/src/xml/many2one_avatar_user.xml b/addons/mail/static/src/xml/many2one_avatar_user.xml new file mode 100644 index 00000000..3ef845fd --- /dev/null +++ b/addons/mail/static/src/xml/many2one_avatar_user.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + + <!-- MailMany2OneAvatar: do not display the display_name in kanban views --> + <t t-name="mail.KanbanMany2OneAvatarUser" t-extend="web.Many2OneAvatar"> + <t t-jquery="img" t-operation="attributes"> + <attribute name="t-att-title">value</attribute> + </t> + <t t-jquery="span" t-operation="replace"/> + </t> + +</templates> diff --git a/addons/mail/static/src/xml/systray.xml b/addons/mail/static/src/xml/systray.xml new file mode 100644 index 00000000..b9612e13 --- /dev/null +++ b/addons/mail/static/src/xml/systray.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates> + + <!-- + @param {mail.systray.ActivityMenu} widget + @param {Object[]} widget.activities + --> + <t t-name="mail.systray.ActivityMenu.Previews"> + <t t-set="activities" t-value="widget._activities"/> + <t t-if="_.isEmpty(activities)"> + <div class="dropdown-item-text text-center o_no_activity"> + <span>No activities planned.</span> + </div> + </t> + <t t-foreach="activities" t-as="activity"> + <div class="o_mail_preview o_systray_activity" t-att-data-res_model="activity.model" t-att-data-model_name="activity.name" t-att-data-domain="activity.domain" data-filter='my'> + <div t-if="activity.icon" class="o_mail_preview_image o_mail_preview_app"> + <img t-att-src="activity.icon" alt="Activity"/> + </div> + <div class="o_preview_info"> + <div class="o_preview_title"> + <span class="o_preview_name"> + <t t-esc="activity.name"/> + </span> + <div t-if="activity.actions" class="o_mail_activity_action_buttons"> + <t t-foreach="activity.actions" t-as="action"> + <button type="button" + t-att-title="action.name" + t-att-class="'o_mail_activity_action btn btn-link fa ' + action.icon" + t-att-data-action_xmlid="action.action_xmlid" + t-att-data-res_model="activity.model" + t-att-data-model_name="activity.name" + t-att-data-domain="activity.domain"> + </button> + </t> + </div> + </div> + <div t-if="activity and activity.type == 'activity'"> + <button t-if="activity.overdue_count" type="button" class="btn btn-link o_activity_filter_button mr16" t-att-data-res_model="activity.model" t-att-data-model_name="activity.name" data-filter='overdue'><t t-esc="activity.overdue_count"/> Late </button> + <span t-if="!activity.overdue_count" class="o_no_activity mr16">0 Late </span> + <button t-if="activity.today_count" type="button" class="btn btn-link o_activity_filter_button mr16" t-att-data-res_model="activity.model" t-att-data-model_name="activity.name" data-filter='today'> <t t-esc="activity.today_count"/> Today </button> + <span t-if="!activity.today_count" class="o_no_activity mr16">0 Today </span> + <button t-if="activity.planned_count" type="button" class="btn btn-link o_activity_filter_button float-right" t-att-data-res_model="activity.model" t-att-data-model_name="activity.name" data-filter='upcoming_all'> <t t-esc="activity.planned_count"/> Future </button> + <span t-if="!activity.planned_count" class="o_no_activity float-right">0 Future</span> + </div> + </div> + </div> + </t> + </t> + + <t t-name="mail.systray.ActivityMenu"> + <li class="o_mail_systray_item"> + <a class="dropdown-toggle o-no-caret" data-toggle="dropdown" data-display="static" aria-expanded="false" title="Activities" href="#" role="button"> + <i class="fa fa-clock-o" role="img" aria-label="Activities"/> <span class="o_notification_counter badge badge-pill"/> + </a> + <div class="o_mail_systray_dropdown dropdown-menu dropdown-menu-right" role="menu"> + <div class="o_mail_systray_dropdown_items"/> + </div> + </li> + </t> +</templates> diff --git a/addons/mail/static/src/xml/text_emojis.xml b/addons/mail/static/src/xml/text_emojis.xml new file mode 100644 index 00000000..4f333ba9 --- /dev/null +++ b/addons/mail/static/src/xml/text_emojis.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + <div t-name="mail.EmojisDropdown" class="o_mail_emojis_dropdown o_mail_add_emoji dropdown position-relative"> + <button class="btn btn-block dropdown-toggle px-3 py-1" + type="button" + data-toggle="dropdown" + aria-haspopup="true" + aria-expanded="false" + title="Add an emoji"> + <i class="fa fa-smile-o"/> + </button> + <div class="dropdown-menu dropdown-menu-right border-0 p-2" style="width: 406px"> + <t t-call="mail.legacy.Composer.emojis"> + <t t-set="emojis" t-value="widget.emojis"></t> + </t> + </div> + </div> +</templates> diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml new file mode 100644 index 00000000..5a3205ed --- /dev/null +++ b/addons/mail/static/src/xml/thread.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + + <!-- + extends the debug mode menu to allow access to the attachment list view of the current record. + --> + <t t-extend="WebClient.DebugManager.View"> + <t t-jquery="a[data-action='get_metadata']" t-operation="after"> + <a role="menuitem" href="#" data-action="getMailMessages" class="dropdown-item">Manage Messages</a> + </t> + </t> + <!-- + @param {mail.DocumentViewer} widget + --> + <t t-name="DocumentViewer.Content"> + <div class="o_viewer_content"> + <t t-set="model" t-value="widget.modelName"/> + <div class="o_viewer-header"> + <span class="o_image_caption"> + <i class="fa fa-picture-o mr8" t-if="widget.activeAttachment.fileType == 'image'" role="img" aria-label="Image" title="Image"/> + <i class="fa fa-file-text mr8" t-if="widget.activeAttachment.fileType == 'application/pdf'" role="img" aria-label="PDF file" title="PDF file"/> + <i class="fa fa-video-camera mr8" t-if="widget.activeAttachment.fileType == 'video'" role="img" aria-label="Video" title="Video"/> + <t t-esc="widget.activeAttachment.name"/> + <a role="button" href="#" class="o_download_btn ml8 small" data-toggle="tooltip" data-placement="right" title="Download"><i class="fa fa-fw fa-download" role="img" aria-label="Download"/></a> + </span> + <a role="button" class="o_close_btn float-right" href="#" aria-label="Close" title="Close">×</a> + </div> + <div class="o_viewer_img_wrapper"> + <div class="o_viewer_zoomer"> + <t t-if="widget.activeAttachment.fileType === 'image'"> + <div class="o_loading_img text-center"> + <i class="fa fa-circle-o-notch fa-spin text-gray-light fa-3x fa-fw" role="img" aria-label="Loading" title="Loading"/> + </div> + <t t-set="unique" t-value="widget.activeAttachment.checksum ? widget.activeAttachment.checksum.slice(-8) : ''"/> + <img class="o_viewer_img" t-attf-src="/web/image/#{widget.activeAttachment.id}?unique=#{unique}&model=#{model}" alt="Viewer"/> + </t> + <iframe t-if="widget.activeAttachment.fileType == 'application/pdf'" class="mt32 o_viewer_pdf" t-attf-src="/web/static/lib/pdfjs/web/viewer.html?file=/web/content/#{widget.activeAttachment.id}?model%3D#{model}%26filename%3D#{window.encodeURIComponent(widget.activeAttachment.name)}" /> + <iframe t-if="(widget.activeAttachment.fileType || '').indexOf('text') !== -1" class="mt32 o_viewer_text" t-attf-src="/web/content/#{widget.activeAttachment.id}?model=#{model}" /> + <iframe t-if="widget.activeAttachment.fileType == 'youtu'" class="mt32 o_viewer_text" allow="autoplay; encrypted-media" width="560" height="315" t-attf-src="https://www.youtube.com/embed/#{widget.activeAttachment.youtube}"/> + <video t-if="widget.activeAttachment.fileType == 'video'" class="o_viewer_video" controls="controls"> + <source t-attf-src="/web/image/#{widget.activeAttachment.id}?model=#{model}" t-att-data-type="widget.activeAttachment.mimetype"/> + </video> + </div> + </div> + <div t-if="widget.activeAttachment.fileType == 'image'" class="o_viewer_toolbar btn-toolbar" role="toolbar"> + <div class="btn-group" role="group"> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_in" data-toggle="tooltip" title="Zoom In"><i class="fa fa-fw fa-plus" role="img" aria-label="Zoom In"/></a> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_reset disabled" data-toggle="tooltip" title="Reset Zoom"><i class="fa fa-fw fa-search" role="img" aria-label="Reset Zoom"/></a> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_out disabled" data-toggle="tooltip" title="Zoom Out"><i class="fa fa-fw fa-minus" role="img" aria-label="Zoom Out"/></a> + </div> + <div class="btn-group" role="group"> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_rotate" data-toggle="tooltip" title="Rotate"><i class="fa fa-fw fa-repeat" role="img" aria-label="Rotate"/></a> + </div> + <div class="btn-group" role="group"> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_print_btn" data-toggle="tooltip" title="Print"><i class="fa fa-fw fa-print" role="img" aria-label="Print"/></a> + <a role="button" href="#" class="o_viewer_toolbar_btn btn o_download_btn" data-toggle="tooltip" title="Download"><i class="fa fa-fw fa-download" role="img" aria-label="Download"/></a> + </div> + </div> + </div> + </t> + + <!-- + @param {mail.DocumentViewer} widget + --> + <t t-name="DocumentViewer"> + <div class="modal o_modal_fullscreen" tabindex="-1" data-keyboard="false" role="dialog"> + <t class="o_document_viewer_content_call" t-call="DocumentViewer.Content"/> + + <t t-if="widget.attachment.length !== 1"> + <a class="arrow arrow-left move_previous" href="#"> + <span class="fa fa-chevron-left" role="img" aria-label="Previous" title="Previous"/> + </a> + <a class="arrow arrow-right move_next" href="#"> + <span class="fa fa-chevron-right" role="img" aria-label="Next" title="Next"/> + </a> + </t> + </div> + </t> + + <!-- + @param {string} src + --> + <t t-name="PrintImage"> + <html> + <head> + <script> + function onload_img() { + setTimeout('print_img()', 10); + } + function print_img() { + window.print(); + window.close(); + } + </script> + </head> + <body onload='onload_img()'> + <img t-att-src='src' alt=""/> + </body> + </html> + </t> + +</templates> diff --git a/addons/mail/static/src/xml/web_kanban_activity.xml b/addons/mail/static/src/xml/web_kanban_activity.xml new file mode 100644 index 00000000..e6d82e37 --- /dev/null +++ b/addons/mail/static/src/xml/web_kanban_activity.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8"?> +<templates xml:space="preserve"> + +<t t-name="mail.KanbanActivity"> + <div class="o_kanban_inline_block dropdown o_mail_activity"> + <a class="dropdown-toggle o-no-caret o_activity_btn" data-toggle="dropdown" role="button"> + <!-- span classes are generated dynamically (see _render) --> + <span t-att-title="widget.selection[widget.activityState]" role="img" t-att-aria-label="widget.selection[widget.activity_state]"/> + </a> + <div class="dropdown-menu o_activity" role="menu"/> + </div> +</t> + +<t t-name="mail.ListActivity" t-extend="mail.KanbanActivity"> + <t t-jquery=".o_mail_activity" t-operation="append"> + <span class="o_activity_summary"/> + </t> +</t> + +<t t-name="mail.KanbanActivityLoading"> + <div class="dropdown-item text-center o_no_activity"> + <span class="fa fa-spinner fa-spin fa-2x" role="img" aria-label="Loading..." title="Loading..."/> + </div> +</t> + +<t t-name="mail.KanbanActivityDropdown"> + <span role="menuitem" t-if="_.isEmpty(records)" class="dropdown-item-text text-center o_no_activity"> + <i>Schedule activities to help you get things done.</i> + </span> + <div t-else="" aria-haspopup="true" role="menu" class="o_activity_log_container dropdown-item bg-100 p-0"> + <ul class="o_activity_log list-group list-group-flush mb-2" role="menu"> + <t t-foreach="_.keys(records)" t-as="key"> + <t t-set="logs" t-value="records[key]" /> + <t t-set="contextual_class" t-value="key == 'planned' ? 'success' : (key == 'today' ? 'warning' : 'danger') "/> + + <li role="menuitem" t-attf-class="o_activity_label list-group-item list-group-item list-group-item-light d-flex justify-content-between align-items-center o_activity_color_{{key}} {{!key_first ? 'mt-2' : ''}}"> + <strong><t t-esc="selection[key]"/></strong> + <span t-attf-class="badge badge-pill badge-{{contextual_class}} border-0 mr-0"><t t-esc="logs.length"/></span> + </li> + <t t-foreach="logs" t-as="log"> + <t t-set="edit_class" t-value="'o_edit_activity'"/> + <t t-if="log.force_next"> + <t t-set="edit_class" t-value=""/> + </t> + <t class="activities_list_group_item"> + <t t-call="mail.activities-list-group-item"/> + </t> + <li t-attf-id="o_activity_form_{{log.id}}" class="o_activity_form list-group-item border-top-0 py-0 mb-2 collapse"></li> + </t> + </t> + </ul> + </div> + <div class="dropdown-divider m-0"/> + <div role="menuitem" class="o_schedule_activity dropdown-header p-0 text-center"> + <button class="btn btn-secondary btn-block p-3"> + <i class="fa fa-plus fa-fw"></i><strong>Schedule an activity</strong> + </button> + </div> +</t> + +<t t-name="mail.activities-list-group-item"> + <li t-attf-class="list-group-item o_log_activity d-flex #{log_last ? 'border-bottom' : ''}" role="menuitem"> + <div t-attf-class="o_activity_title o_log_activity #{edit_class}" t-att-data-activity-id="log.id"> + <div t-attf-class="o_activity_title_entry o_mail_activity {{! log.force_next ? 'align-items-center' : 'mb-1'}}"> + <span t-attf-class="fa #{log.icon ? log.icon : 'fa-bell' } fa-fw mr-2 text-center text-muted" role="img" aria-label="Log" title="Log"/> + <strong class="text-dark o_activity_summary"><t t-esc="log.title_action or log.summary or log.activity_type_id[1]"/></strong> + <button t-if="! log.force_next and log.can_write" class="btn btn-sm btn-link py-0 o_edit_button"><i class="fa fa-pencil"/></button> + </div> + <div class="o_activity_title_entry mt-1" t-if="log.state != 'today'"> + <span class="fa fa-clock-o fa-fw mr-2 text-center text-muted" role="img" aria-label="Deadline" title="Deadline"/> + <small t-if="log.user_id[0] !== session.uid and log.mail_template_ids" class="mr-1"><t t-esc="log.user_id[1]"/> -</small> + <small t-att-title="log.date_deadline"><t t-esc="log.label_delay" /></small> + </div> + <t t-if="log.mail_template_ids"> + <div t-foreach="log.mail_template_ids" t-as="mail_template" class="o_activity_title_entry mt-2" t-att-data-activity-id="log.id" t-att-data-force-next-activity="log.force_next" t-att-data-previous-activity-type-id="log.activity_type_id[0]"> + <i class="fa fa-envelope-o fa-fw mr-2 text-center text-muted" aria-label="Mail" title="Mail" role="img"></i> + <small> + <div class="mb-1" t-esc="mail_template.name + ':'"/> + <a class="o_activity_template_preview" t-att-data-template-id="mail_template.id" href="#"><b>Preview</b></a> + <small>or</small> + <a class="o_activity_template_send" t-att-data-template-id="mail_template.id" href="#"><b>Send Now</b></a> + </small> + </div> + </t> + </div> + <div t-if="log.can_write" class="flex-grow-1 text-right"> + <t t-if="log.activity_category === 'upload_file'"> + <a t-att-data-force-next-activity="log.force_next" + t-att-data-previous-activity-type-id="log.activity_type_id[0]" + t-att-data-activity-id="log.id" + class="o_mark_as_done_upload_file o_activity_link o_activity_link_kanban fa fa-upload" + title="Upload file" role="img" t-att-data-fileupload-id="log.fileuploadID"/> + <span class="d-none"> + <t t-call="HiddenInputFile"> + <t t-set="fileupload_id" t-value="log.fileuploadID"/> + <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> + <input type="hidden" name="model" t-att-value="log.res_model"/> + <input type="hidden" name="id" t-att-value="log.res_id"/> + </t> + </span> + </t> + <t t-else=""> + <a t-att-data-force-next-activity="log.force_next" + t-att-data-previous-activity-type-id="log.activity_type_id[0]" + t-att-data-activity-id="log.id" + t-attf-href="#o_mark_done_form{{log.id}}" + class="o_mark_as_done o_activity_link o_activity_link_kanban fa fa-check-circle" + data-toggle="collapse" title="Mark as done" role="img" aria-label="Mark as done"/> + </t> + </div> + </li> +</t> + +</templates> |
