vietnamese
This commit is contained in:
@@ -30,4 +30,24 @@
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul class="list active">
|
||||
<li onclick="Account_ajaxOmemoBackup()">
|
||||
<span class="primary icon gray">
|
||||
<i class="material-symbols">key</i>
|
||||
</span>
|
||||
<div>
|
||||
<p class="line">{{ __('account.omemo_backup') }}</p>
|
||||
<p class="line">{{ __('account.omemo_backup_text') }}</p>
|
||||
</div>
|
||||
</li>
|
||||
<li onclick="Account_ajaxOmemoRestore()">
|
||||
<span class="primary icon gray">
|
||||
<i class="material-symbols">settings_backup_restore</i>
|
||||
</span>
|
||||
<div>
|
||||
<p class="line">{{ __('account.omemo_restore') }}</p>
|
||||
<p class="line">{{ __('account.omemo_restore_text') }}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<section>
|
||||
<h3>{{ __('account.omemo_backup') }}</h3>
|
||||
<br />
|
||||
<h4 class="gray">{{ __('account.omemo_backup_explain') }}</h4>
|
||||
|
||||
<form name="omemo_backup" onsubmit="return false;"
|
||||
data-notsame="{{ __('account.password_not_same') }}">
|
||||
<div>
|
||||
<input type="password" name="password" autocomplete="new-password"
|
||||
placeholder="{{ __('account.omemo_password_hint') }}"/>
|
||||
<label>{{ __('account.password') }}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="password" name="password_confirmation" autocomplete="new-password"
|
||||
placeholder="{{ __('account.omemo_password_hint') }}"/>
|
||||
<label>{{ __('account.password_confirmation') }}</label>
|
||||
</div>
|
||||
</form>
|
||||
<p class="error" id="omemo_backup_error"></p>
|
||||
</section>
|
||||
<footer>
|
||||
<button onclick="Dialog_ajaxClear()" class="button flat">
|
||||
{{ __('button.cancel') }}
|
||||
</button>
|
||||
<button onclick="Account.omemoBackup()" class="button flat color oppose">
|
||||
{{ __('account.omemo_download') }}
|
||||
</button>
|
||||
</footer>
|
||||
@@ -0,0 +1,29 @@
|
||||
<section>
|
||||
<h3>{{ __('account.omemo_restore') }}</h3>
|
||||
<br />
|
||||
<h4 class="gray">{{ __('account.omemo_restore_explain') }}</h4>
|
||||
|
||||
<form name="omemo_restore" onsubmit="return false;"
|
||||
data-nofile="{{ __('account.omemo_no_file') }}"
|
||||
data-invalid="{{ __('account.omemo_invalid') }}"
|
||||
data-otheraccount="{{ __('account.omemo_other_account') }}"
|
||||
data-wrongpassword="{{ __('account.omemo_wrong_password') }}">
|
||||
<div>
|
||||
<input type="file" name="file" accept=".json,application/json"/>
|
||||
<label>{{ __('account.omemo_file') }}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="password" name="password" autocomplete="current-password"/>
|
||||
<label>{{ __('account.password') }}</label>
|
||||
</div>
|
||||
</form>
|
||||
<p class="error" id="omemo_backup_error"></p>
|
||||
</section>
|
||||
<footer>
|
||||
<button onclick="Dialog_ajaxClear()" class="button flat">
|
||||
{{ __('button.cancel') }}
|
||||
</button>
|
||||
<button onclick="Account.omemoRestore()" class="button flat color red">
|
||||
{{ __('account.omemo_restore_button') }}
|
||||
</button>
|
||||
</footer>
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
<form name="password">
|
||||
<div>
|
||||
<input type="password" placeholder="Choose a nice password" name="password"/>
|
||||
<input type="password" placeholder="{{ __('account.password_placeholder') }}" name="password"/>
|
||||
<label>{{ __('account.password') }}</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="password" placeholder="Type your password again" name="password_confirmation"/>
|
||||
<input type="password" placeholder="{{ __('account.password_again') }}" name="password_confirmation"/>
|
||||
<label>{{ __('account.password_confirmation') }}</label>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
<span class="control icon active" onclick="ChatActions_ajaxShowSearchDialog('{{ jid|echapJS }}', true)">
|
||||
<i class="material-symbols">manage_search</i>
|
||||
</span>
|
||||
<span class="control icon active files_button" onclick="ChatActions_ajaxShowFiles('{{ jid|echapJS }}', true)" title="{{ __('chatactions.files') }}">
|
||||
<i class="material-symbols">perm_media</i>
|
||||
</span>
|
||||
|
||||
{% if conference.group and conference.connected and conference.muji.count == 0 %}
|
||||
<span class="control icon active divided {% if in_call %}disabled{% endif %}" onclick="Visio_ajaxGetMujiLobby('{{ jid|echapJS }}', true, false);">
|
||||
@@ -112,6 +115,14 @@
|
||||
</ul>
|
||||
|
||||
<ul class="list context_menu thin active">
|
||||
<li class="files_menu" onclick="ChatActions_ajaxShowFiles('{{ jid|echapJS }}', true)">
|
||||
<span class="primary icon gray">
|
||||
<i class="material-symbols">perm_media</i>
|
||||
</span>
|
||||
<div>
|
||||
<p class="line">{{ __('chatactions.files') }}</p>
|
||||
</div>
|
||||
</li>
|
||||
{% if conference.role == 'moderator' or conference.affiliation == 'owner' %}
|
||||
<li class="subheader">
|
||||
<div>
|
||||
@@ -209,6 +220,9 @@
|
||||
<span class="control icon active" onclick="ChatActions_ajaxShowSearchDialog('{{ jid|echapJS }}')">
|
||||
<i class="material-symbols">manage_search</i>
|
||||
</span>
|
||||
<span class="control icon active files_button" onclick="ChatActions_ajaxShowFiles('{{ jid|echapJS }}', false)" title="{{ __('chatactions.files') }}">
|
||||
<i class="material-symbols">perm_media</i>
|
||||
</span>
|
||||
|
||||
{% if not in_call %}
|
||||
{% if call_audio %}
|
||||
@@ -266,6 +280,14 @@
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="list context_menu active">
|
||||
<li class="files_menu" onclick="ChatActions_ajaxShowFiles('{{ contact.id|echapJS }}', false)">
|
||||
<span class="primary icon gray">
|
||||
<i class="material-symbols">perm_media</i>
|
||||
</span>
|
||||
<div>
|
||||
<p class="line">{{ __('chatactions.files') }}</p>
|
||||
</div>
|
||||
</li>
|
||||
<li onclick="ChatActions_ajaxGetContact('{{ contact.id|echapJS }}')">
|
||||
<span class="primary icon gray">
|
||||
<i class="material-symbols">person</i>
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<section id="chat_files">
|
||||
<header>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<div>
|
||||
<p>{{ __('chatactions.files') }}</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="tabs wide">
|
||||
{% for tab in ["images", "videos", "recordings", "files"] %}
|
||||
<li class="{% if loop.first %}active{% endif %}" data-tab="{{ tab }}" onclick="ChatActions.filesTab('{{ tab }}')">
|
||||
<a href="#" onclick="event.preventDefault()">{{ __('chatactions.files_' ~ tab) }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<div class="files_tab" data-tab="images">
|
||||
<ul class="files_grid" data-list="images">
|
||||
{% for f in images %}
|
||||
<li data-published="{{ f.published }}">
|
||||
<img src="{{ f.thumb }}" alt="{{ f.name }}" title="{{ f.date }}" loading="lazy"
|
||||
onclick="Preview_ajaxHttpShow('{{ f.url|echapJS }}', {{ f.mid }})"/>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% for tab, list, icon in [["videos", videos, "movie"], ["recordings", recordings, "mic"], ["files", files, "description"]] %}
|
||||
<div class="files_tab hide" data-tab="{{ tab }}">
|
||||
<ul class="list active divided" data-list="{{ tab }}" data-icon="{{ icon }}">
|
||||
{% for f in list %}
|
||||
<li data-published="{{ f.published }}">
|
||||
<span class="primary icon gray"><i class="material-symbols">{{ icon }}</i></span>
|
||||
<span class="control icon active gray" title="{{ __('chatactions.files_message') }}"
|
||||
onclick="event.stopPropagation(); Chat_ajaxGetMessageContext('{{ jid|echapJS }}', {{ f.mid }}); Drawer.clear()">
|
||||
<i class="material-symbols">chat</i>
|
||||
</span>
|
||||
<div onclick="window.open('{{ f.url|echapJS }}', '_blank', 'noopener')">
|
||||
<p class="line">{{ f.name }}</p>
|
||||
{% if tab == "recordings" %}
|
||||
<audio controls preload="none" src="{{ f.url }}" onclick="event.stopPropagation()"></audio>
|
||||
{% endif %}
|
||||
<p class="line">{% if f.size %}{{ f.size }} · {% endif %}{{ f.date }}</p>
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="placeholder files_empty">
|
||||
<i class="material-symbols">perm_media</i>
|
||||
<h4>{{ __('chatactions.files_empty') }}</h4>
|
||||
</div>
|
||||
</section>
|
||||
@@ -7,7 +7,7 @@
|
||||
<span class="resource {{ color }}">{{ message.resource }}</span>
|
||||
{% endif %}
|
||||
{% if message.encrypted %}
|
||||
<p class="encrypted">{% if message.retracted %}{{ __('message.retracted') }}{% else %}{{ __('message.encrypted') }}{% endif %} <i class="material-symbols fill">lock</i></p>
|
||||
<p class="encrypted" data-mid="{{ message.mid }}">{% if message.retracted %}{{ __('message.retracted') }}{% else %}{{ __('message.encrypted') }}{% endif %} <i class="material-symbols fill">lock</i></p>
|
||||
{% elif message.retracted %}
|
||||
<p class="retracted">{{ __('message.retracted') }} <i class="material-symbols">delete</i></p>
|
||||
{% elif picture %}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<form name="search" onsubmit="return false;">
|
||||
<div>
|
||||
<input name="keyword" autocomplete="off"
|
||||
placeholder="{{ __('button.search') }}" oninput="ChatActions_ajaxSearchMessages('{{ jid|echapJS }}', this.value, {% if muc %}true{% else %}false{% endif %});" type="text">
|
||||
placeholder="{{ __('button.search') }}" oninput="ChatActions.search('{{ jid|echapJS }}', this.value, {% if muc %}true{% else %}false{% endif %});" type="text">
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user