function useTexture(src) { var canvas = document.getElementById('myCanvas'); var img = new Image(); img.onload = function() { if (canvas.getContext) { var context = canvas.getContext('2d'); context.clearRect(0, 0, canvas.width, canvas.height); context.drawImage(img, 0, 0, canvas.width, canvas.height); canvas.parentNode._x3domNode.invalidateGLObject(); } }; img.src = src; } function mysql2Date(timestamp) { //function parses mysql datetime string and returns javascript Date object //input has to be in this format: 2007-06-05 15:26:02 var regex = /^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/; var parts = timestamp.replace(regex, "$1 $2 $3 $4 $5 $6").split(' '); return new Date(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]); } function Skin(id, name, img, type, author, license, uploaded, cape_compatible) { this.id = Number(id); this.name = name; this.type = type; this.author = author; var img = new Image(); img.className = 'Skin thumb'; //css klasse zuweisen fuers aussehen ;) img.src = "data:" + type + ";base64," + img; //das ist die data: url fuer die vorschau img.title = name; //als titel noch der dateiname. /*img.addEventListener('click', function() { useTexture(this.src); }, false);*/ this.img = img; this.license = license; this.uploaded = mysql2Date(uploaded); this.cape_compatible = (cape_compatible == 1) ? true : false; }; Skinlist = new Array(); function License(id, name, url, text, imgurl) { this.id = id; this.name = name; this.url = url; this.text = text; this.imgurl = imgurl; this.type = (text == '') ? "url" : "text"; } function uploadSkin(e) { e.preventDefault(); e.stopPropagation(); var author = this.author.value; var name = this.name.value; if (this.license.options[this.license.selectedIndex].defaultSelected) { alert("please select a license first!"); return false; } var license = this.license.value; var img = this.img.value; xhr.request(this.action, "author=" + author + "&name=" + name + "&license=" + license + "&img=" + img, uploaded); this.submit.disabled = true; //this.p.style.display=""; //console.log(this); return false; } function checkLicense(input) { if (input.options[input.selectedIndex].defaultSelected) { input.setCustomValidity('please chose a License from the list'); } else { // input is valid -- reset the error message input.setCustomValidity(''); } } function uploaded(http) { if (http.status == 200) { if (JSON.parse(http.responseText)) { var answer = JSON.parse(http.responseText); if (answer.success) { TINY.box.show({ html : 'Uploaded successfully!', animate : false, close : false, mask : false, boxid : 'success', autohide : 3, top : -14, right : -17 }); } else { alert("Error: " + answer.status_msg); } } else { alert("Something is wrong: the answer of the server is " + http.getResponseText()); } } else { alert("Something is wrong: the answer of the server is " + http.status + " " + http.statusText); } } function abort() { var childNode = this.parentNode; childNode.parentNode.removeChild(childNode); } /* ========================================================================== Drag & drop file handler ========================================================================== */ function handleFileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); var dateien = (this.id == 'skinlist') ? evt.dataTransfer.files : evt.target.files; // jenachdem ob ueber drag drop oder durchsuchen ausgewaehlt wurde. //in dateien sind jetzt alle dateien gespeichert die ausgewahlt wurden for (var i = 0, f; f = dateien[i]; i++) {//alle dateien nacheinander auslesen... if (!f.type.match('image.*')) {//fals was anderes als ein bild dabei sein sollte alert("ERROR!\n\n could not open the file " + f.name + " as an image"); continue; } var reader = new FileReader(); // wenn die datei geladen ist dann soll die gleich in ein img tag geschrieben werden reader.onload = (function(Datei) { return function(e) { // Vorschau bzw. thumbnail rendern var block = document.createElement('div'); block.className = "option"; var img = new Image(); img.className = 'thumb'; //css klasse zuweisen fuers aussehen ;) img.src = e.target.result; useTexture(e.target.result); //das ist die data:// url fuer die vorschau img.title = Datei.name; //als titel noch der dateiname. img.addEventListener('click', function() { useTexture(img.src); }, false); //bild ende var form = document.createElement('form'); form.action = "upload.php"; form.method = "get"; form.className = "upload"; form.addEventListener('submit', uploadSkin, false); form.addEventListener('reset', abort, false); var titel = document.createElement('label'); titel.innerHTML = "Name:
"; //titel Ende //var eigenschaften = document.createElement('span'); var author = document.createElement('label'); author.innerHTML = "Author: "; var license = document.createElement('label'); var licenseselect = document.createElement('select'); licenseselect.addEventListener('change', function(event) { event.preventDefault(); checkLicense(this); return false; }, true); licenseselect.name = "license"; //var br = document.createElement('br'); var NeuerEintrag = new Option("Please select your license", "0", true, true); licenseselect.options[licenseselect.length] = NeuerEintrag; for (index in Licenses) { var NeuerEintrag = new Option(Licenses[index].name, Licenses[index].id, false, false); licenseselect.options[licenseselect.length] = NeuerEintrag; } license.innerHTML += "License: "; license.insertBefore(licenseselect, null); licenseHelp = document.createElement('a'); licenseHelp.href = getHelpUrl('licenses'); licenseHelp.addEventListener('click', function(event) { event.preventDefault(); showHelp('licenses'); return false; }, true); licenseHelp.className = "actionlink"; licenseHelp.innerHTML = "help"; var mimeElem = document.createElement('label'); var className = (Datei.type == "image/png") ? "valid" : "invalid"; var toolTip = (Datei.type == "image/png") ? "image is a png file, good :)" : "the selected image is not a png file and not supported by minetest"; mimeElem.innerHTML = "Mime Type: "; var sizeElem = document.createElement('label'); var size = Datei.size / 1024; size = size.toFixed(2); var className = (size <= 5) ? "valid" : "invalid"; sizeElem.innerHTML += "Size: "; var resolutionElem = document.createElement('label'); var width = img.width; var height = img.height; var className = (width == 64 && height == 32) ? "valid" : "invalid"; var toolTip = (width == 64 && height == 32) ? "resolution is 64x32, good :-)" : "currently only 64x32 images are alowed. sorry."; resolutionElem.innerHTML += "Resolution: "; var imgElem = document.createElement('input'); imgElem.name = 'img'; imgElem.type = "hidden"; imgElem.value = img.src; var submitButtons = document.createElement('div'); submitButtons.innerHTML = ""; //Eigenschaften ende block.insertBefore(img, null); //das bild ins div schieben. form.insertBefore(titel, null); //titel einfügen form.insertBefore(author, null); form.insertBefore(document.createElement('br'), null); form.insertBefore(license, null); form.insertBefore(licenseHelp, null); form.insertBefore(document.createElement('br'), null); form.insertBefore(sizeElem, null); form.insertBefore(document.createElement('br'), null); form.insertBefore(resolutionElem, null); form.insertBefore(document.createElement('br'), null); form.insertBefore(mimeElem, null); form.insertBefore(document.createElement('br'), null); //form.insertBefore(resolutionElem, null); form.insertBefore(document.createElement('br'), null); form.insertBefore(imgElem, null); //form.insertBefore(document.createElement('br'), null); form.insertBefore(submitButtons, null); block.insertBefore(form, null); //zu guter letzt die Eigenschaften document.getElementById('skinlist').insertBefore(block, document.getElementById("dnd")); //anschliessend den block einfuegen checkLicense(licenseselect); }; })(f); reader.readAsDataURL(f); } } function handleDragOver(evt) { evt.stopPropagation(); evt.preventDefault(); evt.dataTransfer.dropEffect = 'copy'; } function initDragDrop() { // Event listener Eintragen var dropZone = document.getElementById('skinlist'); dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleFileSelect, false); document.getElementById('files').addEventListener('change', handleFileSelect, false); } document.addEventListener('DOMContentLoaded', initDragDrop, false); function makeTags(taglist) { // Make the list itself which is a