gethue
Version:
Hue is an Open source SQL Query Editor for Databases/Warehouses
111 lines (101 loc) • 3.46 kB
JavaScript
// Licensed to Cloudera, Inc. under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. Cloudera, Inc. licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import $ from 'jquery';
import huePubSub from '../utils/huePubSub';
const hueDrop = () => {
let draggableMeta = {};
huePubSub.subscribe('draggable.text.meta', meta => {
draggableMeta = meta;
});
return {
fromAssist: function (element, callback) {
if (typeof element === 'function' && !(element instanceof $)) {
callback = element;
}
if (typeof element === 'string') {
element = $(element);
}
if (element.length > 0) {
element.droppable({
accept: '.draggableText',
drop: function (e, ui) {
if (callback) {
callback({
text: ui.helper.text(),
meta: draggableMeta
});
}
}
});
} else {
console.warn('hueDrop.fromAssist could not be attached to the element');
}
},
fromDesktop: function (element, callback, method) {
if (window.FileReader) {
if (typeof element === 'function' && !(element instanceof $)) {
callback = element;
}
if (typeof element === 'string') {
element = $(element);
}
const handleFileSelect = e => {
e.stopPropagation();
e.preventDefault();
const dt = e.dataTransfer;
const files = dt.files;
for (let i = 0, f; (f = files[i]); i++) {
const reader = new FileReader();
reader.onload = (function (file) {
return function (e) {
callback(e.target.result);
};
})(f);
switch (method) {
case 'arrayBuffer':
reader.readAsArrayBuffer(f);
break;
case 'binaryString':
reader.readAsBinaryString(f);
break;
case 'dataURL':
reader.readAsDataURL(f);
break;
default:
reader.readAsText(f);
}
}
};
const handleDragOver = e => {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = 'copy';
};
if (element.length > 0) {
element[0].addEventListener('dragover', handleDragOver, false);
element[0].addEventListener('drop', handleFileSelect, false);
} else {
console.warn('hueDrop.fromDesktop could not be attached to the element');
}
} else {
console.warn(
'FileReader is not supported by your browser. Please consider upgrading to fully experience Hue!'
);
}
}
};
};
export default hueDrop;