1
0
mirror of https://github.com/Tygs/0bin.git synced 2023-08-10 21:13:00 +03:00
0bin/static/js/behavior.js

167 lines
4.3 KiB
JavaScript
Raw Normal View History

2012-04-26 13:38:55 +04:00
;
2012-04-26 23:04:36 +04:00
2012-04-24 22:15:38 +04:00
// Start random number generator seeding ASAP
sjcl.random.startCollectors();
zerobin = {
2012-04-26 23:04:36 +04:00
encrypt: function(key, content) {
return sjcl.encrypt(key, lzw.compress(content));
},
decrypt: function(key, content) {
return lzw.decompress(sjcl.decrypt(key, content));
},
make_key: function() {
2012-04-26 17:26:58 +04:00
return sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0);
},
/**
Check for data uri support by trying to insert a 1x1px image.
You can pass optional callbacks: "yes" for success, "no" for no support.
Default behavior is to add data-uri or no-data-uri as a class in the body
*/
support_data_uri: function(yes, no){
var data = new Image();
var yes = yes || function(){ document.body.className += " data-uri"; };
var no = no || function(){ document.body.className += " no-data-uri"; };
data.onload = data.onerror = function(){
if(this.width + this.height != 2){no()} else {yes()}
}
data.src = "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";
},
get_date: function(){
var date = new Date();
return date.getDate()+"-"+(date.getMonth()+1)+"-"+date.getFullYear();
},
get_time: function(){
var date = new Date();
return date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
},
support_localstorage: function(){
if (localStorage){
return true;
}else{
return false;
}
},
store_paste: function(url){
if (zerobin.support_localstorage){
var date = new Date();
var paste = zerobin.get_date()+" "+zerobin.get_time()+";"+url;
if (localStorage.length > 19)
void removeItem(localStorage.length);
localStorage.setItem(localStorage.length, paste);
}
},
get_pastes: function(){
if (zerobin.support_localstorage){
var date = new Date();
var pastes = '';
var key = '';
for (i=0; i<=localStorage.length-1; i++)
{
key = localStorage.key(i);
if (localStorage.getItem(key).split(';')[0].split(' ')[0] == zerobin.get_date()){
var display_date = localStorage.getItem(key).split(';')[0].split(' ')[1];
}else{
var display_date = zerobin.get_date();
}
pastes = pastes + '<li><a class="items" href="' + localStorage.getItem(key).split(';')[1] + '">' + display_date + '</a></li>';
}
if (!pastes){
return '<i class="grey">Your previous pastes will be saved in your browser <a href="http://www.w3.org/TR/webstorage/">localStorage</a>.</i>';
}
return pastes;
}else{
return 'Sorry your browser does not support LocalStorage, We cannot display your previous pastes.';
}
2012-04-26 23:04:36 +04:00
}
};
2012-04-26 13:38:55 +04:00
document.documentElement.className += " no-data-uri";
2012-04-26 17:26:58 +04:00
$(function(){
2012-04-26 13:38:55 +04:00
var language = null;
2012-04-28 16:50:48 +04:00
$('button[type=submit]').live("click", function(e){
2012-04-26 13:38:55 +04:00
e.preventDefault();
var paste = $('textarea').val();
if (paste.trim()) {
var expiration = $('#expiration').val();
2012-04-26 17:26:58 +04:00
var key = zerobin.make_key();
var data = {content: zerobin.encrypt(key, paste), expiration: expiration}
2012-04-24 22:15:38 +04:00
2012-04-26 13:38:55 +04:00
$.post('/paste/create', data)
.error(function(error) {
2012-04-26 13:38:55 +04:00
alert('Paste could not be saved. Please try again later.');
})
.success(function(data) {
var paste_url = '/paste/' + data['paste'] + '#' + key;
window.location = (paste_url);
zerobin.store_paste(paste_url);
2012-04-26 13:38:55 +04:00
});
}
2012-04-24 22:15:38 +04:00
2012-04-26 13:38:55 +04:00
});
2012-04-24 22:15:38 +04:00
2012-04-26 17:26:58 +04:00
var content = $('#paste-content').text().trim();
var key = window.location.hash.substring(1);
if (content && key) {
try {
$('#paste-content').text(zerobin.decrypt(key, content));
prettyPrint();
2012-04-26 17:26:58 +04:00
} catch(err) {
alert('Could not decrypt data (Wrong key ?)');
}
}
2012-04-24 22:15:38 +04:00
/* expiration flip/flop */
$('.paste-option select').live('change', function(){
var value = $(this).val();
$('.paste-option select').val(value);
});
/* Resize Textarea content */
$('#content').elastic();
2012-04-28 15:25:43 +04:00
/* Display bottom paste option buttons when needed */
2012-04-28 15:25:43 +04:00
if($('#content').height() < 600 ){
$('.paste-option.bottom').remove();
}
2012-04-28 14:51:30 +04:00
$('#content').live('keyup change', function(){
if($('#content').height() < 600 ){
$('.paste-option.down').remove();
}
else {
if ($('.paste-option').length == 1) {
$('.paste-option').clone().addClass('down').appendTo('form.well');
}
}
});
/* Display previous pastes */
$('.previous-pastes .items').html(zerobin.get_pastes());
});