8c4d90df07
Remove Android length warning Handle incoming long message attachments Show long download pending status in message bubble Fix the width of the smallest spinner Remove Android length warning from HTML templates
541 lines
19 KiB
HTML
541 lines
19 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<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">
|
|
<meta name="description" content="">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta http-equiv="Content-Security-Policy"
|
|
content="default-src 'none';
|
|
child-src 'self';
|
|
connect-src 'self' https: wss:;
|
|
font-src 'self';
|
|
form-action 'self';
|
|
frame-src 'none';
|
|
img-src 'self' blob: data:;
|
|
media-src 'self' blob:;
|
|
object-src 'none';
|
|
script-src 'self';
|
|
style-src 'self' 'unsafe-inline';"
|
|
>
|
|
<title>Signal</title>
|
|
<link href='images/icon_128.png' rel='shortcut icon'>
|
|
<link href="stylesheets/manifest.css" rel="stylesheet" type="text/css" />
|
|
|
|
<!--
|
|
When making changes to these templates, be sure to update test/index.html as well
|
|
-->
|
|
|
|
<script type='text/x-tmpl-mustache' id='app-loading-screen'>
|
|
<div class='content'>
|
|
<img src='images/icon_250.png' height='150'>
|
|
<div class='container'>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
</div>
|
|
<div class='message'>{{ message }}</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='conversation-loading-screen'>
|
|
<div class='content'>
|
|
<img src='images/icon_128.png'>
|
|
<div class='container'>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='two-column'>
|
|
<div class='gutter'>
|
|
<div class='network-status-container'></div>
|
|
<div class='left-pane-placeholder'></div>
|
|
</div>
|
|
<div class='conversation-stack'>
|
|
<div class='conversation placeholder'>
|
|
<div class='conversation-header'></div>
|
|
<div class='container'>
|
|
<div class='content'>
|
|
<img src='images/icon_128.png' />
|
|
<h3>{{ welcomeToSignal }}</h3>
|
|
<p>{{ selectAContact }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='lightbox-container'></div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='scroll-down-button-view'>
|
|
<button class='text module-scroll-down__button {{ buttonClass }}' alt='{{ moreBelow }}'>
|
|
<div class='module-scroll-down__icon'></div>
|
|
</button>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='last-seen-indicator-view'>
|
|
<div class='module-last-seen-indicator__bar'/>
|
|
<div class='module-last-seen-indicator__text'>
|
|
{{ unreadMessages }}
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='expired_alert'>
|
|
<a target='_blank' href='https://signal.org/download/'>
|
|
<button class='upgrade'>{{ upgrade }}</button>
|
|
</a>
|
|
{{ expiredWarning }}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='banner'>
|
|
<div class='body'>
|
|
<span class='icon warning'></span>
|
|
{{ message }}
|
|
<span class='icon dismiss'></span>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='toast'>
|
|
{{ toastMessage }}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='conversation'>
|
|
<div class='conversation-header'></div>
|
|
<div class='main panel'>
|
|
<div class='discussion-container'>
|
|
<div class='bar-container hide'>
|
|
<div class='bar active progress-bar-striped progress-bar'></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class='bottom-bar' id='footer'>
|
|
<div class='emoji-panel-container'></div>
|
|
<div class='attachment-list'></div>
|
|
<div class='compose'>
|
|
<form class='send clearfix file-input'>
|
|
<div class='flex'>
|
|
<button class='emoji'></button>
|
|
<textarea class='send-message' placeholder='{{ send-message }}' rows='1' dir='auto'></textarea>
|
|
<div class='capture-audio'>
|
|
<button class='microphone'></button>
|
|
</div>
|
|
<div class='choose-file'>
|
|
<button class='paperclip thumbnail'></button>
|
|
<input type='file' class='file-input' multiple='multiple'>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='message-list'>
|
|
<div class='messages'></div>
|
|
<div class='typing-container'></div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='recorder'>
|
|
<button class='finish'><span class='icon'></span></button>
|
|
<span class='time'>0:00</span>
|
|
<button class='close'><span class='icon'></span></button>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='confirmation-dialog'>
|
|
<div class="content">
|
|
<div class='message'>{{ message }}</div>
|
|
<div class='buttons'>
|
|
{{ #showCancel }}
|
|
<button class='cancel' tabindex='2'>{{ cancel }}</button>
|
|
{{ /showCancel }}
|
|
<button class='ok' tabindex='1'>{{ ok }}</button>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='identicon-svg'>
|
|
<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'>
|
|
<circle cx='50' cy='50' r='40' fill='{{ color }}' />
|
|
<text text-anchor='middle' fill='white' font-family='sans-serif' font-size='24px' x='50' y='50' baseline-shift='-8px'>
|
|
{{ content }}
|
|
</text>
|
|
</svg>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='phone-number'>
|
|
<div class='phone-input-form'>
|
|
<div class='number-container'>
|
|
<input type='tel' class='number' placeholder="Phone Number" />
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='file-size-modal'>
|
|
{{ file-size-warning }}
|
|
({{ limit }}{{ units }})
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='attachment-type-modal'>
|
|
Sorry, your attachment has a type, {{type}}, that is not currently supported.
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='group-member-list'>
|
|
<div class='container'>
|
|
{{ #summary }} <div class='summary'>{{ summary }}</div>{{ /summary }}
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='key-verification'>
|
|
<div class='container'>
|
|
{{ ^hasTheirKey }}
|
|
<div class='placeholder'>{{ theirKeyUnknown }}</div>
|
|
{{ /hasTheirKey }}
|
|
{{ #hasTheirKey }}
|
|
<label> {{ yourSafetyNumberWith }} </label>
|
|
<!--<div class='qr'></div>-->
|
|
<div class='key'>
|
|
{{ #chunks }} <span>{{ . }}</span> {{ /chunks }}
|
|
</div>
|
|
{{ /hasTheirKey }}
|
|
{{ verifyHelp }}
|
|
<p> {{> link_to_support }} </p>
|
|
<div class='summary'>
|
|
{{ #isVerified }}
|
|
<span class='icon verified'></span>
|
|
{{ /isVerified }}
|
|
{{ ^isVerified }}
|
|
<span class='icon shield'></span>
|
|
{{ /isVerified }}
|
|
{{ verifiedStatus }}
|
|
</div>
|
|
<div class='verify'>
|
|
<button class='verify grey'>
|
|
{{ verifyButton }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='clear-data'>
|
|
{{#isStep1}}
|
|
<div class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon alert-outline-red'></span>
|
|
<div class='header'>{{ header }}</div>
|
|
<div class='body-text-wide'>{{ body }}</div>
|
|
</div>
|
|
<div class='nav'>
|
|
<div>
|
|
<a class='button neutral cancel'>{{ cancelButton }}</a>
|
|
<a class='button destructive delete-all-data'>{{ deleteButton }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep1}}
|
|
{{#isStep2}}
|
|
<div id='step3' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon delete'></span>
|
|
<div class='header'>{{ deleting }}</div>
|
|
</div>
|
|
<div class='progress'>
|
|
<div class='bar-container'>
|
|
<div class='bar progress-bar progress-bar-striped active'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep2}}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='networkStatus'>
|
|
<div class='network-status-message'>
|
|
<h3>{{ message }}</h3>
|
|
<span>{{ instructions }}</span>
|
|
</div>
|
|
{{ #reconnectDurationAsSeconds }}
|
|
<div class="network-status-message">
|
|
{{ attemptingReconnectionMessage }}
|
|
</div>
|
|
{{/reconnectDurationAsSeconds }}
|
|
{{ #action }}
|
|
<div class="action">
|
|
<button class='small blue {{ buttonClass }}'>{{ action }}</button>
|
|
</div>
|
|
{{/action }}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='import-flow-template'>
|
|
{{#isStep2}}
|
|
<div id='step2' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon folder-outline'></span>
|
|
<div class='header'>{{ chooseHeader }}</div>
|
|
<div class='body-text'>{{ choose }}</div>
|
|
</div>
|
|
<div class='nav'>
|
|
<div>
|
|
<a class='button choose'>{{ chooseButton }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep2}}
|
|
{{#isStep3}}
|
|
<div id='step3' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon import'></span>
|
|
<div class='header'>{{ importingHeader }}</div>
|
|
</div>
|
|
<div class='progress'>
|
|
<div class='bar-container'>
|
|
<div class='bar progress-bar progress-bar-striped active'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep3}}
|
|
{{#isStep4}}
|
|
<div id='step4' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon check-circle-outline'></span>
|
|
<div class='header'>{{ completeHeader }}</div>
|
|
</div>
|
|
<div class='nav'>
|
|
{{#restartButton}}
|
|
<div>
|
|
<a class='button restart'>{{ restartButton }}</a>
|
|
</div>
|
|
{{/restartButton}}
|
|
{{#registerButton}}
|
|
<div>
|
|
<a class='button register'>{{ registerButton }}</a>
|
|
</div>
|
|
{{/registerButton}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep4}}
|
|
|
|
{{#isError}}
|
|
<div id='error' class='step'>
|
|
<div class='inner error-dialog clearfix'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon alert-outline'></span>
|
|
<div class='header'>{{ errorHeader }}</div>
|
|
<div class='body-text-wide'>
|
|
{{ errorMessageFirst }}
|
|
<p>{{ errorMessageSecond }}</p>
|
|
</div>
|
|
</div>
|
|
<div class='nav'>
|
|
<div>
|
|
<a class='button choose'>{{ chooseButton }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isError}}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='link-flow-template'>
|
|
{{#isStep3}}
|
|
<div id='step3' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<div class='header'>{{ linkYourPhone }}</div>
|
|
<div id="qr">
|
|
<div class='container'>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='nav'>
|
|
<div class='instructions'>
|
|
<div class='android'>
|
|
<div class='label'>
|
|
<span class='os-icon android'></span>
|
|
</div>
|
|
<div class='body'>
|
|
<div>→ {{ signalSettings }}</div>
|
|
<div>→ {{ linkedDevices }}</div>
|
|
<div>→ {{ androidFinalStep }}</div>
|
|
</div>
|
|
</div>
|
|
<div class='apple'>
|
|
<div class='label'>
|
|
<span class='os-icon apple'></span>
|
|
</div>
|
|
<div class='body'>
|
|
<div>→ {{ signalSettings }}</div>
|
|
<div>→ {{ linkedDevices }}</div>
|
|
<div>→ {{ appleFinalStep }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep3}}
|
|
{{#isStep4}}
|
|
<form id='link-phone'>
|
|
<div id='step4' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon lead-pencil'></span>
|
|
<div class='header'>{{ chooseName }}</div>
|
|
<div>
|
|
<input type='text' class='device-name' spellcheck='false' maxlength='50' />
|
|
</div>
|
|
</div>
|
|
|
|
<div class='nav'>
|
|
<div>
|
|
<a class='button finish'>{{ finishLinkingPhoneButton }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
{{/isStep4}}
|
|
{{#isStep5}}
|
|
<div id='step5' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon sync'></span>
|
|
<div class='header'>{{ syncing }}</div>
|
|
</div>
|
|
<div class='progress'>
|
|
<div class='bar-container'>
|
|
<div class='bar progress-bar progress-bar-striped active'></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isStep5}}
|
|
|
|
{{#isError}}
|
|
<div id='error' class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<span class='banner-icon alert-outline'></span>
|
|
<div class='header'>{{ errorHeader }}</div>
|
|
<div class='body'>{{ errorMessage }}</div>
|
|
</div>
|
|
<div class='nav'>
|
|
<a class='button try-again'>{{ errorButton }}</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{/isError}}
|
|
</script>
|
|
|
|
<script type='text/x-tmpl-mustache' id='standalone'>
|
|
<div class='step'>
|
|
<div class='inner'>
|
|
<div class='step-body'>
|
|
<img class='banner-image' src='images/icon_128.png' />
|
|
<div class='header'>Create your Signal Account</div>
|
|
<div id='phone-number-input'>
|
|
<div class='phone-input-form'>
|
|
<div id='number-container' class='number-container'>
|
|
<input type='tel' class='number' placeholder='Phone Number' />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class='clearfix'>
|
|
<a class='button' id='request-sms'>Send SMS</a>
|
|
<a class='link' id='request-voice' tabindex=-1>Call</a>
|
|
</div>
|
|
<input class='form-control' type='text' pattern='\s*[0-9]{3}-?[0-9]{3}\s*' title='Enter your 6-digit verification code. If you did not receive a code, click Call or Send SMS to request a new one' id='code' placeholder='Verification Code' autocomplete='off'>
|
|
<div id='error' class='collapse'></div>
|
|
<div id=status></div>
|
|
</div>
|
|
<div class='nav'>
|
|
<a class='button' id='verifyCode' data-loading-text='Please wait...'>Register</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</script>
|
|
|
|
<script type='text/javascript' src='js/components.js'></script>
|
|
<script type='text/javascript' src='js/reliable_trigger.js'></script>
|
|
<script type='text/javascript' src='js/database.js'></script>
|
|
<script type='text/javascript' src='js/storage.js'></script>
|
|
<script type='text/javascript' src='js/legacy_storage.js'></script>
|
|
<script type='text/javascript' src='js/signal_protocol_store.js'></script>
|
|
<script type='text/javascript' src='js/libtextsecure.js'></script>
|
|
|
|
<script type='text/javascript' src='js/focus_listener.js'></script>
|
|
<script type='text/javascript' src='js/notifications.js'></script>
|
|
<script type='text/javascript' src='js/delivery_receipts.js'></script>
|
|
<script type='text/javascript' src='js/read_receipts.js'></script>
|
|
<script type='text/javascript' src='js/read_syncs.js'></script>
|
|
<script type='text/javascript' src='js/libphonenumber-util.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/models/blockedNumbers.js'></script>
|
|
<script type='text/javascript' src='js/expiring_messages.js'></script>
|
|
|
|
<script type='text/javascript' src='js/chromium.js'></script>
|
|
<script type='text/javascript' src='js/registration.js'></script>
|
|
<script type='text/javascript' src='js/expire.js'></script>
|
|
<script type='text/javascript' src='js/conversation_controller.js'></script>
|
|
|
|
<script type='text/javascript' src='js/views/react_wrapper_view.js'></script>
|
|
<script type='text/javascript' src='js/views/whisper_view.js'></script>
|
|
<script type='text/javascript' src='js/views/last_seen_indicator_view.js'></script>
|
|
<script type='text/javascript' src='js/views/scroll_down_button_view.js'></script>
|
|
<script type='text/javascript' src='js/views/toast_view.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/contact_list_view.js'></script>
|
|
<script type='text/javascript' src='js/views/message_view.js'></script>
|
|
<script type='text/javascript' src='js/views/key_verification_view.js'></script>
|
|
<script type='text/javascript' src='js/views/message_list_view.js'></script>
|
|
<script type='text/javascript' src='js/views/group_member_list_view.js'></script>
|
|
<script type='text/javascript' src='js/views/recorder_view.js'></script>
|
|
<script type='text/javascript' src='js/views/conversation_view.js'></script>
|
|
<script type='text/javascript' src='js/views/inbox_view.js'></script>
|
|
<script type='text/javascript' src='js/views/network_status_view.js'></script>
|
|
<script type='text/javascript' src='js/views/confirmation_dialog_view.js'></script>
|
|
<script type='text/javascript' src='js/views/identicon_svg_view.js'></script>
|
|
<script type='text/javascript' src='js/views/install_view.js'></script>
|
|
<script type='text/javascript' src='js/views/banner_view.js'></script>
|
|
<script type="text/javascript" src="js/views/phone-input-view.js"></script>
|
|
<script type='text/javascript' src='js/views/standalone_registration_view.js'></script>
|
|
<script type='text/javascript' src='js/views/app_view.js'></script>
|
|
<script type='text/javascript' src='js/views/import_view.js'></script>
|
|
<script type='text/javascript' src='js/views/clear_data_view.js'></script>
|
|
|
|
<script type='text/javascript' src='js/wall_clock_listener.js'></script>
|
|
<script type='text/javascript' src='js/rotate_signed_prekey_listener.js'></script>
|
|
<script type='text/javascript' src='js/keychange_listener.js'></script>
|
|
</head>
|
|
<body>
|
|
<div class='app-loading-screen'>
|
|
<div class='content'>
|
|
<img src='images/icon_250.png' height='150'>
|
|
<div class='container'>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
<span class='dot'></span>
|
|
</div>
|
|
<div class='message'></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script type='text/javascript' src='js/background.js'></script>
|
|
</body>
|
|
</html>
|