foxlog
7/27/2017 - 8:23 AM

jupyter notebook for drag and drop crack

jupyter notebook for drag and drop crack

 var create_dir = function(path) {
        var options = {type:'directory'};

        var data = JSON.stringify({
          ext: options.ext,
          type: options.type
        });
// Copyright (c) IPython-Contrib Team.
// Distributed under the terms of the Modified BSD License.

// Allow drag&drop of images into a notebook
// Tested with Firefox and Chrome

define([
    'base/js/namespace',
    'jquery',
	'base/js/utils',
    'services/config',
    "base/js/events"
], function(IPython, $, utils, configmod, events) {
    "use strict";

	var params = {
		subdirectory : '',
	};

    var base_url = utils.get_body_data("baseUrl");
    var config = new configmod.ConfigSection('notebook', {base_url: base_url});

    /* 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, msg) {
        var path = utils.url_path_join(utils.url_path_split(IPython.notebook.notebook_path)[0], params.subdirectory);
        // modified at 2017-07-27 by Alex for processing files
        //if (name == '') {
        //    name = uniqueid() + '.' + msg.match(/data:image\/(\S+);/)[1];
        //    }
        create_dir(path);
        var url = '//' + location.host + utils.url_path_join(base_url, 'api/contents', path, name);

        var img = msg.replace(/(^\S+,)/, ''); // strip header
        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 drag-and-drop failed.'); }
        };
        utils.promising_ajax(url, settings).then(
            function on_success (data, status, xhr) {
                var new_cell = IPython.notebook.insert_cell_below('markdown');
                var str = '['+ name +'](' + utils.url_path_join(params.subdirectory, name) + ')';
                new_cell.set_text(str);
                new_cell.execute();
            },
            function on_error (reason) {
                     console.log('Data transfer for drag-and-drop failed.');
                     alert('Please create files folder!');
            });
    };

    /* the dragover event needs to be canceled to allow firing the drop event */
    window.addEventListener('dragover', function(event){
        if (event.preventDefault) {
            event.preventDefault();
        }
    });

    /* allow dropping an image in notebook */
    window.addEventListener('drop', function(event){
        var cell = IPython.notebook.get_selected_cell();
        event.preventDefault();
        if(event.stopPropagation) {event.stopPropagation();}

            if (event.dataTransfer.items !== undefined) {
                /* Chrome here */
                var items = event.dataTransfer.items;
                for (var i = 0; i < items.length; i++) {
                    /* data coming from local file system, must be an image to allow dropping*/
                    var blob = items[i].getAsFile();
                    if (items[i].kind === 'file') {
                        var filename = blob.name;
                        var reader = new FileReader();
                        reader.onload = ( function(evt) {
                            send_to_server(filename, evt.target.result);
                            if(event.stopPropagation) {event.stopPropagation();}
                         } );
                        reader.readAsDataURL(blob);
                    } else {
                        console.log("Unsupported type for file:", blob.name);

                    }
                }
            } else {
                /* Firefox here */
                var files = event.dataTransfer.files;
                if (files.length == 0) {
                    var filename = event.dataTransfer.getData('application/x-moz-file-promise-dest-filename');
                    var data = event.dataTransfer.getData('text/plain');
                    if (filename.length == 0) {
                        url = "";
                        filename = '';
                    } else {
                        url = data;
                        data = "";
                    }
                    /* data coming from browser:
                     *   url  - image is given as an url
                     *   data - image is a base64 blob
                     */
                    //console.log("type:",url," name:", filename," path:", IPython.notebook.notebook_path," url:", url);
                    send_to_server(filename, data);
                    return;
                    }
                /* data coming from local file system, must be an image to allow dropping*/
                for (var i=0; i < files.length; i++) {
                    var blob = event.dataTransfer.files[0];
                    if (blob.type.indexOf('image/') !== -1) {
                        var filename = blob.name;
                        var url = event.view.location.origin;
                        var reader = new FileReader();
                            reader.onload = ( function(evt) {
                                //console.log("file"," name:", filename," path:", IPython.notebook.notebook_path," url:", url);
                                send_to_server(filename, evt.target.result);
                                event.preventDefault();
                                } );
                        reader.readAsDataURL(blob);
                    } else {
                        console.log("Unsupported type:", blob.type);
                    }

                }
        }
    });

    /*
     * make sure we do not drop images into a codemirror text field
     */
    var checktype = function(cm,event) {
        if (event.dataTransfer.items != undefined)
            {
            event.codemirrorIgnore = true;
            }
        var blob = event.dataTransfer.files[0];

        if (event.dataTransfer.files.length > 0 && blob.type.indexOf('image/') !== -1) {
            event.codemirrorIgnore = true;
            }
    };

    var create_cell = function (event,nbcell,nbindex) {
        var cell = nbcell.cell;
        if ((cell instanceof IPython.CodeCell)) {
            cell.code_mirror.on('drop', checktype);
        }
    };

    var cells = IPython.notebook.get_cells();
    for(var i in cells){
        var cell = cells[i];
        if ((cell instanceof IPython.CodeCell)) {
            cell.code_mirror.on('drop', checktype);
        }
    }

    var load_jupyter_extension = function() {
        events.on('create.Cell', create_cell);
		config.load();
		config.loaded
			.then(function () {
				$.extend(true, params, config.data.dragdrop); // update params
				if (params.subdirectory) {
					console.log('subdir:', params.subdirectory)
				}
			})
    };

	return {
		load_jupyter_extension : load_jupyter_extension,
		load_ipython_extension : load_jupyter_extension,
	};
});