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

Auto-select paste URL

When creating a paste, we auto-select the resulting URL so that the user
only has to press CTRL+C to copy the link.
So you basically click "SEND" then press CTRL+C.

(cherry picked from commit 3feb4641c7892eeeaff2fe61c6e153919687b9c6)

Conflicts:
	css/zerobin.css
Sebastien SAUVAGE 13 лет назад
Родитель
Сommit
315c45ed0c
2 измененных файлов с 71 добавлено и 45 удалено
  1. 4 2
      css/zerobin.css
  2. 67 43
      js/zerobin.js

+ 4 - 2
css/zerobin.css

@@ -111,12 +111,14 @@ h3 {
 
 
 #pasteresult a { color: #fff; }
 #pasteresult a { color: #fff; }
 
 
-#pasteresult button { margin-left: 11px }
+#pasteresult button { margin-left: 11px; }
 
 
 #deletelink { float: right; }
 #deletelink { float: right; }
 
 
 #toolbar, #status { margin-bottom: 5px; }
 #toolbar, #status { margin-bottom: 5px; }
 
 
+#copyhint { color: #666; font-size: 0.85em; }
+
 button, .button, #expiration, #language {
 button, .button, #expiration, #language {
 	color: #fff;
 	color: #fff;
 	background-color: #323b47;
 	background-color: #323b47;
@@ -374,4 +376,4 @@ img.vizhash {
 	position: relative;
 	position: relative;
 	top: 2px;
 	top: 2px;
 	left: -3px;
 	left: -3px;
-}
+}

+ 67 - 43
js/zerobin.js

@@ -118,6 +118,7 @@ function decompress(data) {
 function zeroCipher(key, message) {
 function zeroCipher(key, message) {
     return sjcl.encrypt(key,compress(message));
     return sjcl.encrypt(key,compress(message));
 }
 }
+
 /**
 /**
  *  Decrypt message with key, then decompress.
  *  Decrypt message with key, then decompress.
  *
  *
@@ -288,22 +289,22 @@ function send_comment(parentid) {
                        };
                        };
 
 
     $.post(scriptLocation(), data_to_send, 'json')
     $.post(scriptLocation(), data_to_send, 'json')
-        .error(function() {
-            showError('Comment could not be sent (serveur error or not responding).');
-        })
-        .success(function(data) {
-            if (data.status == 0) {
-                showStatus('Comment posted.');
-                location.reload();
-            }
-            else if (data.status==1) {
-                showError('Could not post comment: '+data.message);
-            }
-            else {
-                showError('Could not post comment.');
-            }
-        });
-    }
+    .error(function() {
+        showError('Comment could not be sent (serveur error or not responding).');
+    })
+    .success(function(data) {
+        if (data.status == 0) {
+            showStatus('Comment posted.');
+            location.reload();
+        }
+        else if (data.status==1) {
+            showError('Could not post comment: '+data.message);
+        }
+        else {
+            showError('Could not post comment.');
+        }
+    });
+}
 
 
 /**
 /**
  *  Send a new paste to server
  *  Send a new paste to server
@@ -321,33 +322,56 @@ function send_data() {
                          opendiscussion: $('input#opendiscussion').is(':checked') ? 1 : 0
                          opendiscussion: $('input#opendiscussion').is(':checked') ? 1 : 0
                        };
                        };
     $.post(scriptLocation(), data_to_send, 'json')
     $.post(scriptLocation(), data_to_send, 'json')
-        .error(function() {
-            showError('Data could not be sent (serveur error or not responding).');
-        })
-        .success(function(data) {
-            if (data.status == 0) {
-                stateExistingPaste();
-                var url = scriptLocation() + "?" + data.id + '#' + randomkey;
-                var deleteUrl = scriptLocation() + "?pasteid=" + data.id + '&deletetoken=' + data.deletetoken;
-                showStatus('');
-
-                $('div#pastelink').html('Your paste is <a href="' + url + '">' + url + '</a>');
-                $('div#deletelink').html('<a href="' + deleteUrl + '">Delete link</a>');
-                $('div#pasteresult').show();
-
-                setElementText($('div#cleartext'), $('textarea#message').val());
-                setElementText($('pre#prettyprint'), $('textarea#message').val());
-                urls2links($('div#cleartext'));
-                showStatus('');
-                prettyPrint();
-            }
-            else if (data.status==1) {
-                showError('Could not create paste: '+data.message);
-            }
-            else {
-                showError('Could not create paste.');
-            }
-        });
+    .error(function() {
+        showError('Data could not be sent (serveur error or not responding).');
+    })
+    .success(function(data) {
+        if (data.status == 0) {
+            stateExistingPaste();
+            var url = scriptLocation() + "?" + data.id + '#' + randomkey;
+            var deleteUrl = scriptLocation() + "?pasteid=" + data.id + '&deletetoken=' + data.deletetoken;
+            showStatus('');
+
+            $('div#pastelink').html('Your paste is <a id="pasteurl" href="' + url + '">' + url + '</a> <span id="copyhint">(Hit CTRL+C to copy)</span>');
+            $('div#deletelink').html('<a href="' + deleteUrl + '">Delete link</a>');
+            $('div#pasteresult').show();
+            selectText('pasteurl'); // We pre-select the link so that the user only has to CTRL+C the link.
+
+            setElementText($('div#cleartext'), $('textarea#message').val());
+            setElementText($('pre#prettyprint'), $('textarea#message').val());
+            urls2links($('div#cleartext'));
+            showStatus('');
+            prettyPrint();
+        }
+        else if (data.status==1) {
+            showError('Could not create paste: '+data.message);
+        }
+        else {
+            showError('Could not create paste.');
+        }
+    });
+}
+
+/** Text range selection.
+ *  From: http://stackoverflow.com/questions/985272/jquery-selecting-text-in-an-element-akin-to-highlighting-with-your-mouse
+ *  @param string element : Indentifier of the element to select (id="").
+ */
+function selectText(element) {
+    var doc = document
+        , text = doc.getElementById(element)
+        , range, selection
+    ;    
+    if (doc.body.createTextRange) { //ms
+        range = doc.body.createTextRange();
+        range.moveToElementText(text);
+        range.select();
+    } else if (window.getSelection) { //all others
+        selection = window.getSelection();        
+        range = doc.createRange();
+        range.selectNodeContents(text);
+        selection.removeAllRanges();
+        selection.addRange(range);
+    }
 }
 }
 
 
 /**
 /**