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 uploadSkin(e){ e.preventDefault(); e.stopPropagation(); var author = this.author.value; var name = this.name.value; var license = this.license.value; var img = this.img.value; xhr.request(this.action,"author="+author+"&name="+name+"&license="+license+"&img="+img,uploaded); //alert("hi "+this.name.value+",n thanks that you want to upload your skin. but the upload function is not ready atm.") return false//stoping browswer todo something } function uploaded(http){ if(http.status == 200){ if(JSON.parse(http.responseText)){ var answer = JSON.parse(http.responseText) if(answer.success){ alert("uploaded successfull"); } 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("tFEHLER!nn Die Datei "+f.name+" kann nicht als Bild geöffnet werden!"); 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 ; //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.addEventListener('submit', uploadSkin, false); form.addEventListener('reset', abort, false); var titel = document.createElement('span'); titel.innerHTML = "Name:
"; //titel Ende var eigenschaften = document.createElement('span'); eigenschaften.innerHTML = "Author:
"+ "License:
"+ "Mime Type: "+ Datei.type+"
"+ "Size: "+Datei.size/1024+" Kb
"+ ""+ ""; //Eigenschaften ende block.insertBefore(img,null); //das bild ins div schieben. form.insertBefore(titel, null); //titel einfügen form.insertBefore(eigenschaften, null);//zu guter letzt die Eigenschaften block.insertBefore(form, null);//zu guter letzt die Eigenschaften document.getElementById('skinlist').insertBefore(block, document.getElementById("dnd")); //anschliessend den block einfuegen }; })(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); /* ========================================================================== load skins and write them ========================================================================== */ function clearList(){ copy = document.getElementById('dnd').outerHTML; document.getElementById('skinlist').innerHTML = copy; } function getSkins(page){ xhr.request("getskins.php",page,gotSkins); } function gotSkins(http){ if(http.status == 200){ if(JSON.parse(http.responseText)){ var answer = JSON.parse(http.responseText) var i = 0; while(answer[i]){ var block = document.createElement('div'); block.className = "option" var img = new Image(); img.className= 'thumb'; //css klasse zuweisen fuers aussehen ;) img.src = "data:"+answer[i].type+";base64,"+answer[i].img ; //das ist die data: url fuer die vorschau img.title = answer[i].name; //als titel noch der dateiname. img.addEventListener('click', function () {useTexture(this.src)}, false); //bild ende var titel = document.createElement('span'); titel.innerHTML = "Name: "+answer[i].name+"
"; //titel Ende var eigenschaften = document.createElement('span'); eigenschaften.innerHTML = "Author: "+answer[i].author+"
"+ "License: "+answer[i].license+"
"+ "Uploaded at: "+dateFormat(answer[i].uploaded)+"
"+ "
"; //Eigenschaften ende block.insertBefore(img,null); //das bild ins div schieben. block.insertBefore(titel, null) block.insertBefore(eigenschaften, null);//zu guter letzt die Eigenschaften document.getElementById('skinlist').insertBefore(block, null); //anschliesend den block einfuegen i++ } if(answer.length < 1){ alert("noting found matching you filter!") } else{ useTexture("data:"+answer[0].type+";base64,"+answer[0].img); } } else{ alert("Something is wrong: the status of http is: "+http.getResponseText()) } } else{ alert("Something is wrong: the answer of the server is "+http.status+" "+http.statusText) } } //document.addEventListener("DOMContentLoaded", function(){ getSkins(1) }, false); /* ========================================================================== read the anchor ========================================================================== */ function anchor(){ if(string != location.hash){ onAnchorChange(); string = location.hash; } checkAnchor = setTimeout(anchor, delay); } string = null; delay = 100; checkAnchor = null;//setTimeout(anchor, delay); document.addEventListener("DOMContentLoaded", anchor, false); function onAnchorChange(){ var string = location.hash; if(string.indexOf('#!searchAuthor:') != -1){ cmd = string.split(':'); clearList(); getSkins("page=1&search=Author&Author="+cmd[1]); document.getElementById('filter').value = cmd[1]; document.getElementById('filtertype').selectedIndex = 1; //alert("the feature 'find more from Author'("+cmd[1]+") comming soon!") } else if(string.indexOf('#!') != -1){ cmd = string.split('!'); obj = parseQuery(cmd[1]) console.debug(obj); clearList(); var get = "" if(obj.page) get += "page="+obj.page+"&"; if(obj.filtertype && obj.filter){ get += "filtertype="+obj.filtertype+"&filter="+obj.filter+"&"; document.getElementById('filter').value = obj.filter; switch(obj.filtertype){ case "Author": document.getElementById('filtertype').selectedIndex = 1; break; case "License": document.getElementById('filtertype').selectedIndex = 2; break; case "Id": document.getElementById('filtertype').selectedIndex = 3; break; case "Name": document.getElementById('filtertype').selectedIndex = 4; break; default:document.getElementById('filtertype').selectedIndex = 0;break; } } getSkins(get); } else{ clearList(); getSkins("page=1"); document.getElementById('filter').value = ''; document.getElementById('filtertype').selectedIndex = 0; } } function parseQuery(qstr) { var query = {}; var a = qstr.split(','); for (var i in a) { var b = a[i].split(':'); query[decodeURIComponent(b[0])] = decodeURIComponent(b[1]); } return query; } /* ========================================================================== download ========================================================================== */ function download(id){ window.open('/download.php?id='+id,'_blank') //alert("the function 'download button' comming soon! use rightclick and 'save image' instead"); } /* ========================================================================== toolbar functions ========================================================================== */ function resetView(){ document.getElementById('3dprev').runtime.resetView(); } function getScreenshot(){ screenshot = document.getElementById('3dprev').runtime.getScreenshot(); window.open(screenshot,'_blank',"width=512,height=512") } function dateFormat(mysqldate){ var date = Date.createFromMysql(mysqldate); console.debug(date); return mysqldate; //todo! shuld output something like "just now" or "today at 17:30" or "12.12.12" } Date.createFromMysql = function(mysql_string) { if(typeof mysql_string === 'string') { var t = mysql_string.split(/[- :]/); //when t[3], t[4] and t[5] are missing they defaults to zero return new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0); } return null; }