Просмотр исходного кода

refactored modal dialog logic, added the new message IDs to all translation files and added the modal dialog to all bootstrap based templates (page gets the old JS input as a fallback)

El RIDO 9 лет назад
Родитель
Сommit
3f8d6a592b
15 измененных файлов с 165 добавлено и 71 удалено
  1. 1 0
      CHANGELOG.md
  2. 1 0
      CREDITS.md
  3. 5 5
      i18n/de.json
  4. 5 1
      i18n/fr.json
  5. 6 2
      i18n/it.json
  6. 5 1
      i18n/pl.json
  7. 5 1
      i18n/sl.json
  8. 5 1
      i18n/zh.json
  9. 65 35
      js/privatebin.js
  10. 16 1
      tpl/bootstrap-compact.php
  11. 1 1
      tpl/bootstrap-dark-page.php
  12. 16 1
      tpl/bootstrap-dark.php
  13. 16 1
      tpl/bootstrap-page.php
  14. 17 20
      tpl/bootstrap.php
  15. 1 1
      tpl/page.php

+ 1 - 0
CHANGELOG.md

@@ -2,6 +2,7 @@
 
 
   * **next (not yet released)**
   * **next (not yet released)**
     * ADDED: Translations for Italian
     * ADDED: Translations for Italian
+    * CHANGED: Using modal dialog to request password input instead of native JS input window (#69)
     * CHANGED: Suppressed referrer HTTP header sending when following links in a paste or comment (#96) and added additional HTTP headers for XSS mitigation (#91)
     * CHANGED: Suppressed referrer HTTP header sending when following links in a paste or comment (#96) and added additional HTTP headers for XSS mitigation (#91)
     * CHANGED: Updated random_compat and jQuery libraries
     * CHANGED: Updated random_compat and jQuery libraries
   * **1.0 (2016-08-25)**
   * **1.0 (2016-08-25)**

+ 1 - 0
CREDITS.md

@@ -20,6 +20,7 @@ Sébastien Sauvage - original idea and main developer
 * rugk - new logo/icons
 * rugk - new logo/icons
 * Sobak - PSR-4 and PSR-2 refactoring
 * Sobak - PSR-4 and PSR-2 refactoring
 * Nathaniel Olsen - jQuery upgrade
 * Nathaniel Olsen - jQuery upgrade
+* Alexander Demenshin - modal password dialog
 
 
 ## Translations
 ## Translations
 * Hexalyse - French
 * Hexalyse - French

+ 5 - 5
i18n/de.json

@@ -80,10 +80,6 @@
         ["Dieses Dokument läuft in einem Monat ab.", "Dieses Dokument läuft in %d Monaten ab."],
         ["Dieses Dokument läuft in einem Monat ab.", "Dieses Dokument läuft in %d Monaten ab."],
     "Please enter the password for this paste:":
     "Please enter the password for this paste:":
         "Bitte gib das Passwort für diesen Text ein:",
         "Bitte gib das Passwort für diesen Text ein:",
-    "Decrypt":
-        "Entschlüsseln",
-    "Enter password":
-        "Passwort eingeben",
     "Could not decrypt data (Wrong key?)":
     "Could not decrypt data (Wrong key?)":
         "Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)",
         "Konnte Daten nicht entschlüsseln (Falscher Schlüssel?)",
     "Could not delete the paste, it was not stored in burn after reading mode.":
     "Could not delete the paste, it was not stored in burn after reading mode.":
@@ -144,5 +140,9 @@
     "Editor": "Bearbeiten",
     "Editor": "Bearbeiten",
     "Preview": "Vorschau",
     "Preview": "Vorschau",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "Der PATH muss bei PrivateBin mit einem \"%s\" enden. Bitte passe Deinen PATH in Deiner index.php an."
+        "Der PATH muss bei PrivateBin mit einem \"%s\" enden. Bitte passe Deinen PATH in Deiner index.php an.",
+    "Decrypt":
+        "Entschlüsseln",
+    "Enter password":
+        "Passwort eingeben"
 }
 }

+ 5 - 1
i18n/fr.json

@@ -149,5 +149,9 @@
     "Editor": "Éditer",
     "Editor": "Éditer",
     "Preview": "Prévisualiser",
     "Preview": "Prévisualiser",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php."
+        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
+    "Decrypt":
+        "Decrypt",
+    "Enter password":
+        "Entrez le mot de passe"
 }
 }

+ 6 - 2
i18n/it.json

@@ -79,7 +79,7 @@
     "This document will expire in %d months.":
     "This document will expire in %d months.":
         ["Questo documento scadrà tra un mese.", "Questo documento scadrà in %d mesi."],
         ["Questo documento scadrà tra un mese.", "Questo documento scadrà in %d mesi."],
     "Please enter the password for this paste:":
     "Please enter the password for this paste:":
-        "Inserisci la passowrd per questo messaggio:",
+        "Inserisci la password per questo messaggio:",
     "Could not decrypt data (Wrong key?)":
     "Could not decrypt data (Wrong key?)":
         "Non riesco a decifrari i dati (Chiave errata?)",
         "Non riesco a decifrari i dati (Chiave errata?)",
     "Could not delete the paste, it was not stored in burn after reading mode.":
     "Could not delete the paste, it was not stored in burn after reading mode.":
@@ -140,5 +140,9 @@
     "Editor": "Editor",
     "Editor": "Editor",
     "Preview": "Preview",
     "Preview": "Preview",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "PrivateBin necessita che PATH termini con \"%s\". Aggiorna la variabile PATH nel tuo index.php."
+        "PrivateBin necessita che PATH termini con \"%s\". Aggiorna la variabile PATH nel tuo index.php.",
+    "Decrypt":
+        "Decrypt",
+    "Enter password":
+        "Inserisci la password"
 }
 }

+ 5 - 1
i18n/pl.json

@@ -140,5 +140,9 @@
     "Editor": "Edytować",
     "Editor": "Edytować",
     "Preview": "Zapowiedź",
     "Preview": "Zapowiedź",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php."
+        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
+    "Decrypt":
+        "Decrypt",
+    "Enter password":
+        "Wpisz hasło"
 }
 }

+ 5 - 1
i18n/sl.json

@@ -149,5 +149,9 @@
     "Editor": "Uredi",
     "Editor": "Uredi",
     "Preview": "Predogled",
     "Preview": "Predogled",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php."
+        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
+    "Decrypt":
+        "Decrypt",
+    "Enter password":
+        "Prosim vnesi geslo"
 }
 }

+ 5 - 1
i18n/zh.json

@@ -140,5 +140,9 @@
     "Editor": "編輯",
     "Editor": "編輯",
     "Preview": "預習",
     "Preview": "預習",
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
     "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.":
-        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php."
+        "PrivateBin requires the PATH to end in a \"%s\". Please update the PATH in your index.php.",
+    "Decrypt":
+        "Decrypt",
+    "Enter password":
+        "Enter password"
 }
 }

+ 65 - 35
js/privatebin.js

@@ -611,14 +611,26 @@ $(function() {
         },
         },
 
 
         /**
         /**
-         * ask the user for the password and return it
-         *
-         * @throws error when dialog canceled
-         * @return string password
+         * ask the user for the password and set it
          */
          */
         requestPassword: function()
         requestPassword: function()
         {
         {
-            $("#passwordModal").modal();
+            if (this.passwordModal.length == 0) {
+                var password = prompt(i18n._('Please enter the password for this paste:'), '');
+                if (password === null)
+                {
+                    throw 'password prompt canceled';
+                }
+                if (password.length === 0)
+                {
+                    this.requestPassword();
+                } else {
+                    this.passwordInput.val(password);
+                    this.displayMessages();
+                }
+            } else {
+                this.passwordModal.modal();
+            }
         },
         },
 
 
         /**
         /**
@@ -679,14 +691,15 @@ $(function() {
         /**
         /**
          * Show decrypted text in the display area, including discussion (if open)
          * Show decrypted text in the display area, including discussion (if open)
          *
          *
-         * @param string key : decryption key
-         * @param object paste : paste object including comments to display (items = array with keys ('data','meta')
+         * @param object paste (optional) object including comments to display (items = array with keys ('data','meta')
          */
          */
-        displayMessages: function(key, paste)
+        displayMessages: function(paste)
         {
         {
-            // Try to decrypt the paste.
+            paste = paste || $.parseJSON(this.cipherData.text());
+            var key = this.pageKey();
             var password = this.passwordInput.val();
             var password = this.passwordInput.val();
             if (!this.prettyPrint.hasClass('prettyprinted')) {
             if (!this.prettyPrint.hasClass('prettyprinted')) {
+                // Try to decrypt the paste.
                 try
                 try
                 {
                 {
                     if (paste.attachment)
                     if (paste.attachment)
@@ -696,7 +709,8 @@ $(function() {
                         {
                         {
                             if (password.length === 0)
                             if (password.length === 0)
                             {
                             {
-                                return this.requestPassword();
+                                this.requestPassword();
+                                return;
                             }
                             }
                             attachment = filter.decipher(key, password, paste.attachment);
                             attachment = filter.decipher(key, password, paste.attachment);
                         }
                         }
@@ -731,7 +745,8 @@ $(function() {
                     var cleartext = filter.decipher(key, password, paste.data);
                     var cleartext = filter.decipher(key, password, paste.data);
                     if (cleartext.length === 0 && password.length === 0 && !paste.attachment)
                     if (cleartext.length === 0 && password.length === 0 && !paste.attachment)
                     {
                     {
-                        return this.requestPassword();
+                        this.requestPassword();
+                        return;
                     }
                     }
                     if (cleartext.length === 0 && !paste.attachment)
                     if (cleartext.length === 0 && !paste.attachment)
                     {
                     {
@@ -932,7 +947,7 @@ $(function() {
                             {
                             {
                                 if (data.status === 0)
                                 if (data.status === 0)
                                 {
                                 {
-                                    privatebin.displayMessages(privatebin.pageKey(), data);
+                                    privatebin.displayMessages(data);
                                 }
                                 }
                                 else if (data.status === 1)
                                 else if (data.status === 1)
                                 {
                                 {
@@ -1151,7 +1166,7 @@ $(function() {
         /**
         /**
          * Put the screen in "Existing paste" mode.
          * Put the screen in "Existing paste" mode.
          *
          *
-         * @param boolean preview (optional) : tell if the preview tabs should be displayed, defaults to false.
+         * @param boolean preview (optional) tell if the preview tabs should be displayed, defaults to false.
          */
          */
         stateExistingPaste: function(preview)
         stateExistingPaste: function(preview)
         {
         {
@@ -1410,6 +1425,34 @@ $(function() {
             this.fileWrap.removeClass('hidden');
             this.fileWrap.removeClass('hidden');
         },
         },
 
 
+        /**
+         * Focus on the modal password dialog.
+         */
+        focusPasswordModal: function()
+        {
+            this.passwordDecrypt.focus();
+        },
+
+        /**
+         * Decrypt using the password from the modal dialog.
+         */
+        decryptPasswordModal: function()
+        {
+            this.passwordInput.val(this.passwordDecrypt.val());
+            this.displayMessages();
+        },
+
+        /**
+         * Submit a password in the modal dialog.
+         *
+         * @param Event event
+         */
+        submitPasswordModal: function(event)
+        {
+            event.preventDefault();
+            this.passwordModal.modal('hide');
+        },
+
         /**
         /**
          * Display an error message
          * Display an error message
          * (We use the same function for paste and reply to comments)
          * (We use the same function for paste and reply to comments)
@@ -1497,6 +1540,11 @@ $(function() {
 
 
             // page template drop down
             // page template drop down
             $('#language select option').click($.proxy(this.setLanguage, this));
             $('#language select option').click($.proxy(this.setLanguage, this));
+
+            // handle modal password request on decryption
+            this.passwordModal.on('shown.bs.modal', $.proxy(this.focusPasswordModal, this));
+            this.passwordModal.on('hidden.bs.modal', $.proxy(this.decryptPasswordModal, this));
+            this.passwordForm.submit($.proxy(this.submitPasswordModal, this));
         },
         },
 
 
         /**
         /**
@@ -1533,6 +1581,9 @@ $(function() {
             this.openDiscussion = $('#opendiscussion');
             this.openDiscussion = $('#opendiscussion');
             this.password = $('#password');
             this.password = $('#password');
             this.passwordInput = $('#passwordinput');
             this.passwordInput = $('#passwordinput');
+            this.passwordModal = $('#passwordmodal');
+            this.passwordForm = $('#passwordform');
+            this.passwordDecrypt = $('#passworddecrypt');
             this.pasteResult = $('#pasteresult');
             this.pasteResult = $('#pasteresult');
             this.prettyMessage = $('#prettymessage');
             this.prettyMessage = $('#prettymessage');
             this.prettyPrint = $('#prettyprint');
             this.prettyPrint = $('#prettyprint');
@@ -1563,30 +1614,9 @@ $(function() {
                     return;
                     return;
                 }
                 }
 
 
-                // List of messages to display.
-                var data = $.parseJSON(this.cipherData.text());
-
                 // Show proper elements on screen.
                 // Show proper elements on screen.
                 this.stateExistingPaste();
                 this.stateExistingPaste();
-
-                {
-                    // This part of code handles modal password request on decryption
-                    // Inside of event handler, "this" is something different... so we have to save it
-                    var self = this;
-                    $("#passwordModal").on('shown.bs.modal', function() {
-                        $("#decryptPassword").focus();
-                    });
-                    $("#passwordForm").submit(function(){
-                        $("#passwordModal").modal("hide");
-                        return false;
-                    });
-                    $("#passwordModal").on("hidden.bs.modal", function(){
-                        self.passwordInput.val($("#decryptPassword").val());
-                        self.displayMessages(self.pageKey(), data);
-                    });
-                }
-
-                this.displayMessages(this.pageKey(), data);
+                this.displayMessages();
             }
             }
             // Display error message from php code.
             // Display error message from php code.
             else if (this.errorMessage.text().length > 1)
             else if (this.errorMessage.text().length > 1)

+ 16 - 1
tpl/bootstrap-compact.php

@@ -52,7 +52,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-h/cw2lgocVvgjmYWShhbnz5nSzyUv4rVY1JgN7vmkZq8VJX9KVXPoC7oYX+YGFk+0FYw+c/uofVW9yyU5TJv+w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->
@@ -66,6 +66,21 @@ endif;
 		<meta name="theme-color" content="#ffe57e" />
 		<meta name="theme-color" content="#ffe57e" />
 	</head>
 	</head>
 	<body role="document" class="navbar-spacing">
 	<body role="document" class="navbar-spacing">
+		<div id="passwordmodal" class="modal fade" role="dialog">
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-body">
+						<form id="passwordform" role="form">
+							<div class="form-group">
+								<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
+								<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
+							</div>
+							<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
 		<nav class="navbar navbar-default navbar-fixed-top">
 		<nav class="navbar navbar-default navbar-fixed-top">
 			<div class="container">
 			<div class="container">
 				<div class="navbar-header">
 				<div class="navbar-header">

+ 1 - 1
tpl/bootstrap-dark-page.php

@@ -52,7 +52,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-h/cw2lgocVvgjmYWShhbnz5nSzyUv4rVY1JgN7vmkZq8VJX9KVXPoC7oYX+YGFk+0FYw+c/uofVW9yyU5TJv+w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->

+ 16 - 1
tpl/bootstrap-dark.php

@@ -52,7 +52,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-h/cw2lgocVvgjmYWShhbnz5nSzyUv4rVY1JgN7vmkZq8VJX9KVXPoC7oYX+YGFk+0FYw+c/uofVW9yyU5TJv+w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->
@@ -66,6 +66,21 @@ endif;
 		<meta name="theme-color" content="#ffe57e" />
 		<meta name="theme-color" content="#ffe57e" />
 	</head>
 	</head>
 	<body role="document">
 	<body role="document">
+		<div id="passwordmodal" class="modal fade" role="dialog">
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-body">
+						<form id="passwordform" role="form">
+							<div class="form-group">
+								<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
+								<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
+							</div>
+							<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
 		<nav class="navbar navbar-inverse navbar-static-top">
 		<nav class="navbar navbar-inverse navbar-static-top">
 			<div class="navbar-header">
 			<div class="navbar-header">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">

+ 16 - 1
tpl/bootstrap-page.php

@@ -52,7 +52,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-h/cw2lgocVvgjmYWShhbnz5nSzyUv4rVY1JgN7vmkZq8VJX9KVXPoC7oYX+YGFk+0FYw+c/uofVW9yyU5TJv+w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->
@@ -66,6 +66,21 @@ endif;
 		<meta name="theme-color" content="#ffe57e" />
 		<meta name="theme-color" content="#ffe57e" />
 	</head>
 	</head>
 	<body role="document">
 	<body role="document">
+		<div id="passwordmodal" class="modal fade" role="dialog">
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-body">
+						<form id="passwordform" role="form">
+							<div class="form-group">
+								<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
+								<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
+							</div>
+							<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
 		<nav class="navbar navbar-default navbar-static-top">
 		<nav class="navbar navbar-default navbar-static-top">
 			<div class="navbar-header">
 			<div class="navbar-header">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">

+ 17 - 20
tpl/bootstrap.php

@@ -52,7 +52,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-6NNTkh7KDhbUmY/iAB4wRgWtLQTuJjrfOp8Lawa9MqZrtNqGcMbWPjhkQn33RwGfO3+gHSrE19a9UWgG0ecc4w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->
@@ -66,25 +66,22 @@ endif;
 		<meta name="theme-color" content="#ffe57e" />
 		<meta name="theme-color" content="#ffe57e" />
 	</head>
 	</head>
 	<body role="document">
 	<body role="document">
-        <!-- Modal decryption password request -->
-        <div class="modal fade" id="passwordModal" role="dialog">
-          <div class="modal-dialog">
-            <!-- Modal content-->
-            <div class="modal-content">
-              <div class="modal-body">
-                <form role="form" id="passwordForm">
-                  <div class="form-group">
-                    <label for="decryptPassword"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
-                    <input type="password" class="form-control" id="decryptPassword" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
-                  </div>
-                  <button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
-                </form>
-              </div>
-            </div>
-          </div>
-        </div>
-
-        <nav class="navbar navbar-default navbar-static-top">
+		<div id="passwordmodal" class="modal fade" role="dialog">
+			<div class="modal-dialog">
+				<div class="modal-content">
+					<div class="modal-body">
+						<form id="passwordform" role="form">
+							<div class="form-group">
+								<label for="passworddecrypt"><span class="glyphicon glyphicon-eye-open"></span> <?php echo I18n::_('Please enter the password for this paste:') ?></label>
+								<input id="passworddecrypt" type="password" class="form-control" placeholder="<?php echo I18n::_('Enter password') ?>" autofocus>
+							</div>
+							<button type="submit" class="btn btn-success btn-block"><span class="glyphicon glyphicon-off"></span> <?php echo I18n::_('Decrypt') ?></button>
+						</form>
+					</div>
+				</div>
+			</div>
+		</div>
+		<nav class="navbar navbar-default navbar-static-top">
 			<div class="navbar-header">
 			<div class="navbar-header">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
 				<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
 					<span class="sr-only"><?php echo I18n::_('Toggle navigation'); ?></span>
 					<span class="sr-only"><?php echo I18n::_('Toggle navigation'); ?></span>

+ 1 - 1
tpl/page.php

@@ -47,7 +47,7 @@ if ($MARKDOWN):
 <?php
 <?php
 endif;
 endif;
 ?>
 ?>
-		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-h/cw2lgocVvgjmYWShhbnz5nSzyUv4rVY1JgN7vmkZq8VJX9KVXPoC7oYX+YGFk+0FYw+c/uofVW9yyU5TJv+w==" crossorigin="anonymous"></script>
+		<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-cQXLXYKNq6ecCb0lA9BSQ0urt16yDERYnT5vcjeE3UJb6W5PUjwN/jtVsGBoRzoGGEll+N3stvgIXGjkjaYj5g==" crossorigin="anonymous"></script>
 		<!--[if lt IE 10]>
 		<!--[if lt IE 10]>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
 		<![endif]-->
 		<![endif]-->