Anton Shestakov <av6@dwimlabs.net>, Tue, 19 Jun 2018 19:09:58 +0800
templates: jQuery 3.3.1
index.html
Permissions: -rw-r--r--
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.2/css/uikit.min.css" integrity="sha384-r4ORcdkoM5V/H9qDH2HFG5RXRMUP9E9d9+pxyHVjY2SDzmI/ybe4XZdGpr2TWV1u" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.2/css/components/form-advanced.min.css" integrity="sha384-Ts4hPFVppMb/meQL+7OLUh/caztwveY1U4xXfQXtfgzGKeYBmahbDRSNUTdy3erD" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.2/css/components/progress.min.css" integrity="sha384-qgXVfbHioMtCK8iM6ZIVtQ1irvB4VMZ3uebLrEOyE/2tCEIeeZ73ytGNuSWnTRiQ" crossorigin="anonymous"> <link rel="stylesheet" href="/css/tram-im.css"> <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js" integrity="sha384-FZY+KSLVXVyc1qAlqH9oCx1JEOlQh6iXfw3o2n3Iy32qGjXmUPWT9I0Z9e9wxYe3" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js" integrity="sha384-NNt9ocJfZhIg2c5PbM5G2a3tTaeXhEfqCHWHNB7htzaWKn8MwFkzVyGdzLA8QMX7" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/rivets/0.8.1/rivets.bundled.min.js" integrity="sha384-KIB/b1UL6HC6He/9mc3AYNV0GjyVXGWnwqbSo3hoD6BOYi+XPtqjLtZ99Mevz4I4" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js" integrity="sha384-MV8AwEgYXLMw5ZPj4763CSPk+tYGoUZGdwr/+EfkAZ1Dl2rGHxOMpQ1IW7VtyUPn" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.2/js/uikit.min.js" integrity="sha384-hZYxVK59j24BQl9werQkqsAxOZ9Xs3yaaQxtYIOcsqLxjX2/aTWQMUvXEV8DCOcq" crossorigin="anonymous"></script> <script src="/vendor/strophejs/strophe.min.js"></script> <script src="/vendor/strophejs-plugins/disco/strophe.disco.js"></script> <script src="/vendor/strophejs-plugins/ping/strophe.ping.js"></script> <script src="/vendor/strophejs-plugins/register/strophe.register.js"></script> <script src="/vendor/strophejs-plugins/roster/strophe.roster.js"></script> <script src="/vendor/strophejs-plugins/vcard/strophe.vcard.js"></script> <script src="/vendor/webrtc-adapter-1.0.4.js"></script> <div class="uk-progress uk-progress-mini page-progress" data-app="progress" rv-hide="model:progress | eq undefined"> <div class="uk-progress-bar" rv-style-width="model:progress | percent"></div> <div class="smart-container" data-step="noscript"> <p class="uk-text-center">This page needs JavaScript to work.
</p> <small>It uses resources from code.jquery.com and cdnjs.cloudflare.com.
</small> <div class="smart-container uk-hidden" data-step="login"> <div class="uk-form uk-form-horizontal" data-form="connect"> <div class="uk-form-row"> <label for="username" class="uk-form-label">Username
</label> <div class="uk-form-controls"> <input id="username" type="text" class="uk-width-1-1" required autofocus rv-value="form:username" rv-class-uk-form-danger="form:username-errors"> <div class="uk-text-danger" rv-each-error="form:username-errors">{ error }
</div> <div class="uk-form-row"> <label for="password" class="uk-form-label">Password
</label> <div class="uk-form-controls"> <input id="password" type="password" class="uk-width-1-1" required rv-value="form:password" rv-class-uk-form-danger="form:password-errors"> <div class="uk-text-danger" rv-each-error="form:password-errors">{ error }
</div> <div class="uk-form-row"> <div class="uk-form-controls"> <div class="uk-alert uk-alert-danger" rv-each-error="form:auth-errors">{ error }
</div> <button type="button" class="uk-button uk-button-primary" rv-on-click="connect"> <i class="uk-icon-sign-in"></i> Log in
<a class="uk-float-right uk-button uk-button-link" href="/register.html">Register
</a> $('[data-step="noscript"]').addClass('uk-hidden'); <div class="has-sidebar full-height uk-flex uk-flex-column uk-hidden" data-step="main"> <div class="sidebar" data-app="sidebar" rv-class-mini="model:sidebar/minified"> <ul class="uk-nav uk-nav-offcanvas uk-text-nowrap"> <li class="uk-text-center"> <a rv-on-click="view.minify"> <i class="uk-icon-chevron-right" rv-if="model:sidebar/minified"></i> <i class="uk-icon-chevron-left" rv-unless="model:sidebar/minified"></i> <li class="uk-nav-divider"></li> <li rv-class-uk-active="model:show | eq 'chat'"> <a data-show="chat" rv-on-click="view.show"> <div class="status-pip" rv-style="'chat' | fn view.getPipColor"></div> <span class="label">Ready to chat
</span> <li rv-class-uk-active="model:show | eq 'online'"> <a data-show="online" rv-on-click="view.show"> <div class="status-pip" rv-style="'online' | fn view.getPipColor"></div> <span class="label">Online
</span> <li rv-class-uk-active="model:show | eq 'away'"> <a data-show="away" rv-on-click="view.show"> <div class="status-pip" rv-style="'away' | fn view.getPipColor"></div> <span class="label">Away
</span> <li rv-class-uk-active="model:show | eq 'xa'"> <a data-show="xa" rv-on-click="view.show"> <div class="status-pip" rv-style="'xa' | fn view.getPipColor"></div> <span class="label">Gone
</span> <li class="uk-nav-divider"></li> <a data-uk-modal="{target:'#settings-modal'}"> <i class="uk-icon-cog fixed-width"></i> <span class="label">Settings
</span> <a data-uk-modal="{target:'#profile-modal'}"> <i class="uk-icon-info-circle fixed-width"></i> <span class="label">Profile
</span> <li class="uk-nav-divider"></li> <a rv-on-click="view.disconnect"> <i class="uk-icon-sign-out fixed-width"></i> <span class="label">Log out
</span> <div class="uk-flex-item-none" data-app="calls"></div> <div class="uk-grid uk-flex-item-auto main-grid"> <div class="uk-width-xlarge-1-4 uk-width-large-1-3 uk-width-medium-1-2 uk-flex uk-flex-column contact-list-block"> <ul class="uk-list uk-flex-item-auto contact-list" data-app="contacts"></ul> <div class="uk-form uk-flex-item-none input-group separate"> <input id="new-contact" type="text" value="" placeholder="add a contact" required> <span class="input-group-button"> <button type="button" class="uk-button uk-button-success" data-add-button> <i class="uk-icon-user-plus"></i> <div class="uk-width-xlarge-3-4 uk-width-large-2-3 uk-width-medium-1-2 uk-flex uk-flex-column"> <div class="uk-flex-item-auto message-area" data-app="logs"></div> <div class="uk-form uk-flex-item-none input-group separate uk-hidden" data-form="send"> <input id="msg" type="text" value="" placeholder="send a message" required> <span class="input-group-button"> <button class="uk-button uk-button-primary" data-send-button> <i class="uk-icon-paper-plane"></i> <div id="settings-modal" class="uk-modal"> <div class="uk-modal-dialog"> <button type="button" class="uk-modal-close uk-close"></button> <div class="uk-modal-header"><h2>Settings
</h2></div> <div class="uk-form" data-app="settings"> <div class="uk-form-row"> <input type="checkbox" rv-checked="settings:chatstates"> Send chat state notifications (XEP-0085)
<div class="uk-modal-footer" data-app="server-info"> Server: { server:name } { server:version } on { server:os }
Message carbons (XEP-0280):
<span class="uk-text-success" rv-if="server:carbons">enabled
</span> <span class="uk-text-danger" rv-unless="server:carbons">not supported
</span> Client state indication (XEP-0352):
<span class="uk-text-success" rv-if="server:csi">enabled
</span> <span class="uk-text-danger" rv-unless="server:csi">not supported
</span> <div id="profile-modal" class="uk-modal"> <div class="uk-modal-dialog"> <button type="button" class="uk-modal-close uk-close"></button> <div class="uk-modal-header"><h2>Profile
</h2></div> <dd>{ contact:profile:fullname }
</dd> <dd>{ contact:profile:nickname }
</dd> <dd><img rv-if="contact:profile:avatar/url" rv-src="contact:profile:avatar/url"></dd> <div class="uk-text-right"> <button class="uk-button uk-button-danger uk-modal-close" data-unregister-button>Remove account
</button> <script type="text/template" id="video-block-template"> <div class="video-block"> <video class="remote" autoplay></video> <video class="local" autoplay muted></video> <div class="buttons uk-text-center"> <button type="button" class="uk-button uk-button-success autofade" data-mute-cam rv-if="call:local/stream" rv-hide="call:local/video/muted"> <i class="uk-icon-eye"></i> <button type="button" class="uk-button uk-button-danger" data-unmute-cam rv-if="call:local/stream" rv-show="call:local/video/muted"> <i class="uk-icon-eye-slash"></i> <button type="button" class="uk-button uk-button-success autofade" data-mute-mic rv-if="call:local/stream" rv-hide="call:local/audio/muted"> <i class="uk-icon-microphone"></i> <button type="button" class="uk-button uk-button-danger" data-unmute-mic rv-if="call:local/stream" rv-show="call:local/audio/muted"> <i class="uk-icon-microphone-slash"></i> <button type="button" class="uk-button uk-button-success autofade" data-mute-audio rv-if="call:remote/stream" rv-hide="call:remote/audio/muted"> <i class="uk-icon-volume-up"></i> <button type="button" class="uk-button uk-button-danger" data-unmute-audio rv-if="call:remote/stream" rv-show="call:remote/audio/muted"> <i class="uk-icon-volume-off"></i> <button type="button" class="uk-button uk-button-danger autofade" data-hang-up> <i class="uk-icon-phone"></i> <script type="text/template" id="avatar-template"> <img class="avatar" rv-if="contact:profile:avatar/url" rv-src="contact:profile:avatar/url"> <div class="avatar" rv-unless="contact:profile:avatar/url" rv-style="contact:bjid | dumb-hash | fn view.getColors"> { contact:profile:d/handle | first-letter } <script type="text/template" id="message-template"> <div class="message" rv-data-id="message:id"> <div class="splitter" rv-if="message:d/split"></div> <div class="column avatar-column" rv-class-uk-invisible="message:d/fold"></div> <div class="column text-column"> <div rv-hide="message:d/fold"> <strong rv-if="message:contact:profile:d/handle">{ message:contact:profile:d/handle }</strong> <strong rv-unless="message:contact:profile:d/handle">{ message:from }</strong> <div rv-class="message:cls"> <span class="uk-float-right uk-text-muted"> <i class="uk-icon-pencil" rv-if="message:corrected" title="Edited (XEP-0308)"></i> <i class="uk-icon-files-o" rv-if="message:carbon" title="Carbon (XEP-0280)"></i> rv-datetime="message:d/mstamp | iso-date" rv-title="message:d/mstamp | format-date 'HH:mm:ss'"> { message:d/mstamp | from-now } <div rv-unless="message:html">{ message:text }</div> <div class="xhtml-body" rv-if="message:html" rv-html="message:html"></div> <script type="text/template" id="contact-template"> <li class="contact" rv-class-active="contact:active" rv-data-jid="contact:jid" rv-style="contact:show | fn view.getBorderColor"> <div class="column avatar-column"> <div class="status-pip" rv-title="contact:show" rv-style="contact:show | fn view.getPipColor"></div> <div class="uk-badge uk-badge-notification uk-badge-warning" rv-if="contact:d/unread">{ contact:d/unread }</div> <div class="column uk-width-1-1"> <div class="uk-text-bold">{ contact:profile:d/handle }</div> <div class="uk-text-nowrap"> <span>{ contact:status }</span> <span rv-hide="contact:type | eq 'self'">{ contact:chatstate | only 'composing' }</span> <div class="column uk-text-nowrap"> <i class="uk-icon-phone calling-icon" rv-if="contact:d/actions | has 'wait'"></i> <button type="button" class="uk-button" data-call="av" rv-if="contact:d/actions | has 'call'"> <i class="uk-icon-video-camera"></i> <button type="button" class="uk-button" data-call="a" rv-if="contact:d/actions | has 'call'"> <i class="uk-icon-phone"></i> <button type="button" class="uk-button uk-button-success" data-accept="av" rv-if="contact:d/actions | has 'accept'"> <i class="uk-icon-video-camera"></i> <button type="button" class="uk-button uk-button-success" data-accept="a" rv-if="contact:d/actions | has 'accept'"> <i class="uk-icon-phone"></i> <button type="button" class="uk-button uk-button-danger" data-decline rv-if="contact:d/actions | has 'decline'"> <i class="uk-icon-times"></i> <button type="button" class="uk-button uk-button-danger" data-hang-up rv-if="contact:d/actions | has 'hang-up'"> <i class="uk-icon-phone"></i> Hang up <button type="button" class="uk-button" data-chat> <i class="uk-icon-comments-o"></i> <div class="uk-button-dropdown" data-uk-dropdown="{mode:'click',pos:'bottom-right'}" rv-if="contact:d/actions | has 'remove'"> <button class="uk-button"><i class="uk-icon-caret-down"></i></button> <div class="uk-dropdown uk-dropdown-small"> <ul class="uk-nav uk-nav-dropdown"> <li><a data-remove rv-if="contact:d/actions | has 'remove'">Remove</a></li> <div class="uk-text-center"> <button type="button" class="uk-button uk-button-success" data-authorize rv-if="contact:d/actions | has 'authorize'"> <i class="uk-icon-plus"></i> Authorize <button type="button" class="uk-button uk-button-danger" data-unauthorize rv-if="model:d/actions | has 'unauthorize'"> <i class="uk-icon-times"></i> Decline <script type="text/template" id="chat-template"> <script src='/js/tram.js'></script> <script src='/js/rivets.js'></script> <script src='/js/xmpp.js'></script> <script src='/js/webrtc.js'></script> <script src='/js/contacts.js'></script> <script src='/js/messages.js'></script> <script src='/js/calls.js'></script> <script src='/js/favicon.js'></script> <script src='/js/sidebar.js'></script> <script src='/js/progress.js'></script> <script src='/js/forms.js'></script> <script src='/config.js'></script> <script src='/js/index.js'></script> $('[data-step="login"]').removeClass('uk-hidden');