1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-09-28 23:10:46 +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 Render this widget into the DOM
*/ */
DropZoneWidget.prototype.render = function(parent,nextSibling) { DropZoneWidget.prototype.render = function(parent,nextSibling) {
var self = this; var domNode;
// Remember parent // Remember parent
this.parentDomNode = parent; this.parentDomNode = parent;
// Compute attributes and execute state // Compute attributes and execute state
this.computeAttributes(); this.computeAttributes();
this.execute(); this.execute();
// Create element // Create element
var domNode = this.document.createElement("div"); domNode = this.document.createElement("div");
domNode.className = "tc-dropzone"; domNode.className = "tc-dropzone";
// Add event handlers // Add event handlers
$tw.utils.addEventListeners(domNode,[ $tw.utils.addEventListeners(domNode,[
@ -119,20 +119,27 @@ DropZoneWidget.prototype.handleDropEvent = function(event) {
}; };
DropZoneWidget.prototype.importData = function(dataTransfer) { DropZoneWidget.prototype.importData = function(dataTransfer) {
var data, dataType, origin, t, tiddlerFields, title;
// Try each provided data type in turn // 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) { if(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {
// Get the data // Get the data
var dataType = this.importDataTypes[t]; dataType = this.importDataTypes[t];
var data = dataTransfer.getData(dataType.type); data = dataTransfer.getData(dataType.type);
// Import the tiddlers in the data // Import the tiddlers in the data
if(data !== "" && data !== null) { if(data !== "" && data !== null) {
if($tw.log.IMPORT) { if($tw.log.IMPORT) {
console.log("Importing data type '" + dataType.type + "', data: '" + data + "'") console.log("Importing data type '" + dataType.type + "', data: '" + data + "'")
} }
var tiddlerFields = dataType.convertToFields(data); tiddlerFields = dataType.convertToFields(data);
if(!tiddlerFields.title) { title = tiddlerFields.title;
if(!title) {
tiddlerFields.title = this.wiki.generateNewTitle("Untitled"); 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])}); this.dispatchEvent({type: "tm-import-tiddlers", param: JSON.stringify([tiddlerFields])});
return; return;

View File

@ -153,7 +153,7 @@ LinkWidget.prototype.handleDragStartEvent = function(event) {
} }
// Then the data // Then the data
dataTransfer.clearData(); dataTransfer.clearData();
var jsonData = this.wiki.getTiddlerAsJson(this.to), var jsonData = this.wiki.getTiddlerAsJson(this.to,true),
textData = this.wiki.getTiddlerText(this.to,""), textData = this.wiki.getTiddlerText(this.to,""),
title = (new RegExp("^" + $tw.config.textPrimitives.wikiLink + "$","mg")).exec(this.to) ? this.to : "[[" + this.to + "]]"; title = (new RegExp("^" + $tw.config.textPrimitives.wikiLink + "$","mg")).exec(this.to) ? this.to : "[[" + this.to + "]]";
// IE doesn't like these content types // 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 Retrieve a tiddler as a JSON string of the fields
*/ */
exports.getTiddlerAsJson = function(title) { exports.getTiddlerAsJson = function(title,exporting) {
var tiddler = this.getTiddler(title); var fields = Object.create(null),
tiddler = this.getTiddler(title);
if(tiddler) { if(tiddler) {
var fields = Object.create(null);
$tw.utils.each(tiddler.fields,function(value,name) { $tw.utils.each(tiddler.fields,function(value,name) {
fields[name] = tiddler.getFieldString(name); fields[name] = tiddler.getFieldString(name);
}); });
return JSON.stringify(fields);
} else { } else {
return JSON.stringify({title: title}); fields["title"] = title;
} }
if(exporting) {
fields["_origin"] = window.location.href;
}
return JSON.stringify(fields);
}; };
/* /*