1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-06-16 10:29:54 +00:00

prevents drag and drop import in same window

fixes #592

Introduces and preserves **_origin** field when using drag-and-drop —
bad idea? discard? different field name?

demo http://592.tiddlyspot.com
This commit is contained in:
Tobias Beer 2015-02-09 23:49:04 +01:00
parent d340277cb2
commit 09afa8297a
3 changed files with 23 additions and 13 deletions

View File

@ -27,14 +27,14 @@ DropZoneWidget.prototype = new Widget();
Render this widget into the DOM
*/
DropZoneWidget.prototype.render = function(parent,nextSibling) {
var self = this;
var domNode;
// Remember parent
this.parentDomNode = parent;
// Compute attributes and execute state
this.computeAttributes();
this.execute();
// Create element
var domNode = this.document.createElement("div");
domNode = this.document.createElement("div");
domNode.className = "tc-dropzone";
// Add event handlers
$tw.utils.addEventListeners(domNode,[
@ -119,20 +119,27 @@ DropZoneWidget.prototype.handleDropEvent = function(event) {
};
DropZoneWidget.prototype.importData = function(dataTransfer) {
var data, dataType, origin, t, tiddlerFields, title;
// Try each provided data type in turn
for(var t=0; t<this.importDataTypes.length; t++) {
for(t=0; t<this.importDataTypes.length; t++) {
if(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {
// Get the data
var dataType = this.importDataTypes[t];
var data = dataTransfer.getData(dataType.type);
dataType = this.importDataTypes[t];
data = dataTransfer.getData(dataType.type);
// Import the tiddlers in the data
if(data !== "" && data !== null) {
if($tw.log.IMPORT) {
console.log("Importing data type '" + dataType.type + "', data: '" + data + "'")
}
var tiddlerFields = dataType.convertToFields(data);
if(!tiddlerFields.title) {
tiddlerFields = dataType.convertToFields(data);
title = tiddlerFields.title;
if(!title) {
tiddlerFields.title = this.wiki.generateNewTitle("Untitled");
} else {
origin = tiddlerFields["_origin"];
if(origin && origin === window.location.href && $tw.wiki.getTiddler(title)) {
return false;
}
}
this.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify([tiddlerFields])});
return;

View File

@ -153,7 +153,7 @@ LinkWidget.prototype.handleDragStartEvent = function(event) {
}
// Then the data
dataTransfer.clearData();
var jsonData = this.wiki.getTiddlerAsJson(this.to),
var jsonData = this.wiki.getTiddlerAsJson(this.to,true),
textData = this.wiki.getTiddlerText(this.to,""),
title = (new RegExp("^" + $tw.config.textPrimitives.wikiLink + "$","mg")).exec(this.to) ? this.to : "[[" + this.to + "]]";
// IE doesn't like these content types

View File

@ -594,17 +594,20 @@ exports.getSubTiddler = function(title,subTiddlerTitle) {
/*
Retrieve a tiddler as a JSON string of the fields
*/
exports.getTiddlerAsJson = function(title) {
var tiddler = this.getTiddler(title);
exports.getTiddlerAsJson = function(title,exporting) {
var fields = Object.create(null),
tiddler = this.getTiddler(title);
if(tiddler) {
var fields = Object.create(null);
$tw.utils.each(tiddler.fields,function(value,name) {
fields[name] = tiddler.getFieldString(name);
});
return JSON.stringify(fields);
} else {
return JSON.stringify({title: title});
fields["title"] = title;
}
if(exporting) {
fields["_origin"] = window.location.href;
}
return JSON.stringify(fields);
};
/*