jupyter notebook for chrome clipboard crack
Last active
April 11, 2018 05:40
-
-
Save BadUncleX/877333052c43963e03bbbb8f0618a5c9 to your computer and use it in GitHub Desktop.
jupyter notebook for chrome clipboard crack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// add system clipboard functionality with chrome | |
// works with images and notebook cells (MIME-type 'notebook-cell/json') | |
define([ | |
'base/js/namespace', | |
'jquery', | |
'base/js/utils', | |
'base/js/events' | |
], function(IPython, $, utils, events) { | |
"use strict"; | |
if (window.chrome === undefined) return; | |
/* http://stackoverflow.com/questions/3231459/create-unique-id-with-javascript */ | |
function uniqueid() { | |
// always start with a letter (for DOM friendlyness) | |
var idstr = String.fromCharCode(Math.floor((Math.random() * 25) + 65)); | |
do { | |
// between numbers and characters (48 is 0 and 90 is Z (42-48 = 90) | |
var ascicode = Math.floor((Math.random() * 42) + 48); | |
if (ascicode < 58 || ascicode > 64) { | |
// exclude all chars between : (58) and @ (64) | |
idstr += String.fromCharCode(ascicode); | |
} | |
} while (idstr.length < 32); | |
return (idstr); | |
} | |
var create_dir = function(path) { | |
var options = {type:'directory'}; | |
var data = JSON.stringify({ | |
ext: options.ext, | |
type: options.type | |
}); | |
var settings = { | |
processData : false, | |
type : "PUT", | |
data: data, | |
contentType: 'application/json', | |
dataType : "json" | |
}; | |
utils.promising_ajax(IPython.contents.api_url(path), settings); | |
}; | |
var send_to_server = function (name, path, msg) { | |
if (name == '') { | |
name = uniqueid() + '.' + msg.match(/data:image\/(\S+);/)[1]; | |
} | |
var path = path.substring(0, path.lastIndexOf('/')) + '/'; | |
create_dir(path+'images') | |
if (path === '/') path = ''; | |
// modified at 2017-07-27 by Alex add 'images/' | |
var url = '//' + location.host + '/api/contents/' + path + 'images/' + name; | |
var img = msg.replace(/(^\S+,)/, ''); // strip header | |
console.log("send_to_server:", url, img); | |
var data = {'name': name, 'format': 'base64', 'content': img, 'type': 'file'}; | |
var settings = { | |
processData: false, | |
cache: false, | |
type: "PUT", | |
dataType: "json", | |
data: JSON.stringify(data), | |
headers: {'Content-Type': 'text/plain'}, | |
async: false, | |
error : function() {console.log('Data transfer for copy-paste has failed.'); | |
} | |
}; | |
utils.promising_ajax(url, settings).then( | |
function on_success (data, status, xhr) { | |
var new_cell = IPython.notebook.insert_cell_below('markdown'); | |
// modified at 2017-07-27 by Alex add 'images/' | |
var str = '<img src="images/' + name + '"/>'; | |
new_cell.set_text(str); | |
new_cell.execute(); | |
}, | |
function on_error (reason) { | |
console.log('Data transfer for copy-paste has failed.'); | |
alert('Upload failed! Please create images folder for pictures!'); | |
}); | |
}; | |
/** | |
* Initialize extension | |
*/ | |
var load_ipython_extension = function() { | |
/* | |
* override clipboard 'paste' and insert new cell from json data in clipboard | |
*/ | |
window.addEventListener('paste', function (event) { | |
var cell = IPython.notebook.get_selected_cell(); | |
if (cell.mode == "command") { | |
var items = event.clipboardData.items; | |
for (var i = 0; i < items.length; i++) { | |
if (items[i].type == 'notebook-cell/json') { | |
event.preventDefault(); | |
/* json data adds a new notebook cell */ | |
var data = event.clipboardData.getData('notebook-cell/json').split("\n").filter(Boolean); | |
for (var i = 0; i < data.length; i++) { | |
var ix = data.length - 1 - i; | |
var new_cell_data = JSON.parse(data[ix]); | |
var new_cell = IPython.notebook.insert_cell_below(new_cell_data.cell_type); | |
new_cell.fromJSON(new_cell_data); | |
if (new_cell.cell_type === "markdown") { | |
new_cell.execute(); | |
}; | |
} | |
} else if (items[i].type.indexOf('image/') !== -1) { | |
event.preventDefault(); | |
/* images are transferred to the server as file and linked to */ | |
var blob = items[i].getAsFile(); | |
var reader = new FileReader(); | |
reader.onload = ( function (evt) { | |
var filename = ''; | |
send_to_server(filename, IPython.notebook.notebook_path, evt.target.result); | |
event.preventDefault(); | |
} ); | |
reader.readAsDataURL(blob); | |
} | |
} | |
} | |
}); | |
/* | |
* override clipboard 'copy' and copy current cell as json and text to clipboard | |
*/ | |
window.addEventListener('copy', function (event) { | |
var cell = IPython.notebook.get_selected_cell(); | |
if (cell.mode == "command") { | |
var sel = window.getSelection(); | |
if (sel.type == "Range") return; | |
/* default: copy marked text */ | |
event.preventDefault(); | |
var json = ""; | |
var text = ""; | |
var selected_cells = IPython.notebook.get_selected_cells(); | |
for (var i in selected_cells) { | |
var j = selected_cells[i].toJSON(); | |
json += JSON.stringify(j) + '\n'; | |
text += selected_cells[i].code_mirror.getValue() + '\n'; | |
} | |
/* copy cell as json and cell contents as text */ | |
event.clipboardData.setData('notebook-cell/json', json); | |
event.clipboardData.setData("Text", text); | |
} | |
}); | |
/* | |
* override clipboard 'cut' and copy current cell as json and text to clipboard | |
*/ | |
window.addEventListener('cut', function (event) { | |
var cell = IPython.notebook.get_selected_cell(); | |
if (cell.mode == "command") { | |
var sel = window.getSelection(); | |
if (sel.type == "Range") return; | |
/* default: copy marked text */ | |
event.preventDefault(); | |
var json = ""; | |
var text = ""; | |
var selected_cells = IPython.notebook.get_selected_cells(); | |
for (var i in selected_cells) { | |
var j = selected_cells[i].toJSON(); | |
json += JSON.stringify(j) + '\n'; | |
text += selected_cells[i].code_mirror.getValue() + '\n'; | |
IPython.notebook.delete_cell(IPython.notebook.find_cell_index(selected_cells[i])); | |
} | |
/* copy cell as json and cell contents as text */ | |
event.clipboardData.setData('notebook-cell/json', json); | |
event.clipboardData.setData("Text", text); | |
} | |
}); | |
}; | |
var extension = { | |
load_ipython_extension : load_ipython_extension | |
}; | |
return extension; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment