4a401f07f3
ReplayableErrors make it easy for the frontend to handle identity key errors by wrapping the necessary steps into one convenient little replay() callback function. The frontend remains agnostic to what those steps are. It just calls replay() once the user has acknowledged the key change. The protocol layer is responsible for registering the callbacks needed by the IncomingIdentityKeyError and OutgoingIdentityKeyError.
170 lines
8.5 KiB
HTML
170 lines
8.5 KiB
HTML
<!DOCTYPE html>
|
|
<html class='no-js' lang='en'>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<meta content='width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0' name='viewport'>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<title>
|
|
Signal for Chrome
|
|
</title>
|
|
<meta name="description" content="">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link href='/favicon.ico' rel='shortcut icon'>
|
|
<link href="/stylesheets/normalize.css" rel="stylesheet" type="text/css" />
|
|
<link href="/stylesheets/manifest.css" rel="stylesheet" type="text/css" />
|
|
<link href="/components/bootstrap-tagsinput/dist/bootstrap-tagsinput.css" rel="stylesheet" type="text/css" />
|
|
<link href="/stylesheets/index.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body class='signal index' data-name="curve25519" data-tools="pnacl" data-configs="Debug Release" data-path="nacl/pnacl/{config}">
|
|
<div class='title-bar' id='header'>
|
|
<a href id='new-message'>New message</a>
|
|
<a href id='new-group'>New group</a>
|
|
</div>
|
|
<div class='notifications'>
|
|
<div class='notification info'>
|
|
</div>
|
|
</div>
|
|
<div id='gutter' class='gutter'>
|
|
<div class='search'>
|
|
<form>
|
|
<input name='contact_search' placeholder='Search' type='search'>
|
|
</form>
|
|
</div>
|
|
<div id='contacts'></div>
|
|
</div>
|
|
<script type='text/x-tmpl-mustache' id='conversation'>
|
|
<div class='discussion-container'></div>
|
|
<div class='send-message-area'>
|
|
<div class='message-composer'>
|
|
<form class='send'>
|
|
<input class='send-message' rows='6' type='textarea'>
|
|
<div class='attachments'>
|
|
<input type='file' name='files[]' multiple class='file-input'>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class='extension-details'>
|
|
<ul>
|
|
<li>Signal for Chrome</li>
|
|
<li><a href="https://github.com/whispersystems">Version 0.1</a></li>
|
|
<li>by <a href="http://whispersystems.org">Open Whisper Systems</a></li>
|
|
<li><a href="http://support.whispersystems.org/">Need Help?</a></li>
|
|
</ul>
|
|
<button class='destroy'>Delete this conversation</button>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
<script type='text/x-tmpl-mustache' id='message'>
|
|
<div class='sender'>{{ sender }}</div>
|
|
<img class='avatar' src='{{ contact_avatar }}'>
|
|
<div class='bubble bubble_context {{ bubble_class }}'>
|
|
<ul class='volley'>
|
|
<li class='message'>
|
|
{{ message }}
|
|
<div class='attachments'></div>
|
|
<span class='timestamp'>{{ timestamp }}</span>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</script>
|
|
<script type='text/x-tmpl-mustache' id='contact'>
|
|
<div class='avatar' style='background-image: url({{ contact_avatar }});'></div>
|
|
<div class='contact-details'>
|
|
<h3>
|
|
{{ contact_name }}
|
|
</h3>
|
|
<p class='last-message'>
|
|
{{ last_message }}
|
|
</p>
|
|
<span class='last-timestamp'>
|
|
{{ last_message_timestamp }}
|
|
</span>
|
|
</div>
|
|
</script>
|
|
<script type='text/x-tmpl-mustache' id='new-message-form'>
|
|
<form class='send message'>
|
|
<input type='text' name='number' class='number' placeholder='Phone number'>
|
|
<div class='send-message-area'>
|
|
<div class='message-composer'>
|
|
<input name='message' class='send-message' rows='6' type='textarea'>
|
|
<div class='attachments'>
|
|
<input type='file' name='files[]' multiple class='file-input'>
|
|
</div>
|
|
<input type='submit'>
|
|
</div>
|
|
<div class='extension-details'>
|
|
<ul>
|
|
<li>Signal for Chrome</li>
|
|
<li><a href="https://github.com/whispersystems">Version 0.1</a></li>
|
|
<li>by <a href="http://whispersystems.org">Open Whisper Systems</a></li>
|
|
<li><a href="http://support.whispersystems.org/">Need Help?</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</script>
|
|
<script type='text/x-tmpl-mustache' id='new-group-form'>
|
|
<form class='send group'>
|
|
<div><input name='name' class='name' placeholder='Group Name'></div>
|
|
<div><input name='numbers' class='numbers' data-role=tagsinput></div>
|
|
<div class='send-message-area'>
|
|
<div class='message-composer'>
|
|
<input class='send-message' rows='6' type='textarea'>
|
|
<div class='attachments'> Add Files </div>
|
|
<input type='submit'>
|
|
</div>
|
|
<div class='extension-details'>
|
|
<ul>
|
|
<li>Signal for Chrome</li>
|
|
<li><a href="https://github.com/whispersystems">Version 0.1</a></li>
|
|
<li>by <a href="http://whispersystems.org">Open Whisper Systems</a></li>
|
|
<li><a href="http://support.whispersystems.org/">Need Help?</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</script>
|
|
<script type="text/javascript" src="js/components.js"></script>
|
|
<script type="text/javascript" src="js/database.js"></script>
|
|
|
|
<script type="text/javascript" src="components/bootstrap-tagsinput/dist/bootstrap-tagsinput.js"></script>
|
|
|
|
<script type="text/javascript" src="js/protobufs.js"></script>
|
|
<script type="text/javascript" src="js/curve25519_compiled.js"></script>
|
|
<script type="text/javascript" src="js/nativeclient.js"></script>
|
|
<script type="text/javascript" src="js/websocket.js"></script>
|
|
<script type="text/javascript" src="js/websocket-resources.js"></script>
|
|
<script type="text/javascript" src="js/helpers.js"></script>
|
|
<script type="text/javascript" src="js/errors.js"></script>
|
|
<script type="text/javascript" src="js/stringview.js"></script>
|
|
<script type="text/javascript" src="js/storage.js"></script>
|
|
<script type="text/javascript" src="js/storage/devices.js"></script>
|
|
<script type="text/javascript" src="js/storage/groups.js"></script>
|
|
<script type="text/javascript" src="js/libphonenumber-util.js"></script>
|
|
|
|
<script type="text/javascript" src="js/webcrypto.js"></script>
|
|
<script type="text/javascript" src="js/crypto.js"></script>
|
|
<script type="text/javascript" src="js/protocol.js"></script>
|
|
|
|
<script type="text/javascript" src="js/models/messages.js"></script>
|
|
<script type="text/javascript" src="js/models/conversations.js"></script>
|
|
<script type="text/javascript" src="js/api.js"></script>
|
|
<script type="text/javascript" src="js/sendmessage.js"></script>
|
|
|
|
<script type="text/javascript" src="js/chromium.js"></script>
|
|
<script type="text/javascript" src="js/views/notifications.js"></script>
|
|
<script type="text/javascript" src="js/views/file_input_view.js"></script>
|
|
<script type="text/javascript" src="js/views/list_view.js"></script>
|
|
<script type="text/javascript" src="js/views/message_view.js"></script>
|
|
<script type="text/javascript" src="js/views/message_list_view.js"></script>
|
|
<script type="text/javascript" src="js/views/conversation_list_item_view.js"></script>
|
|
<script type="text/javascript" src="js/views/conversation_list_view.js"></script>
|
|
<script type="text/javascript" src="js/views/conversation_view.js"></script>
|
|
<script type="text/javascript" src="js/views/new_conversation_view.js"></script>
|
|
<script type="text/javascript" src="js/views/new_group_view.js"></script>
|
|
<script type="text/javascript" src="js/views/inbox_view.js"></script>
|
|
<script type="text/javascript" src="js/index.js"></script>
|
|
<div id="listener"></div>
|
|
<div id="log"></div>
|
|
</body>
|
|
</html>
|