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;
}
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,left:-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;
//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');
var author = document.createElement('lable');
author.innerHTML = "Author: ";
var license = document.createElement('lable');
var licenseselect = document.createElement('select');
licenseselect.name = "license";
//var br = document.createElement('br');
for(index in Licenses){
var NeuerEintrag = new Option(Licenses[index].name, Licenses[index].id, false, true);
licenseselect.options[licenseselect.length] = NeuerEintrag;
}
license.innerHTML +="License:";
license.insertBefore(licenseselect, null);
license.innerHTML +="{helplink}";
eigenschaften.insertBefore(author, null);
eigenschaften.insertBefore(document.createElement('br'), null);
eigenschaften.insertBefore(license, null);
eigenschaften.insertBefore(document.createElement('br'), null);
eigenschaften.innerHTML += "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) {
copy = document.getElementById('dnd').outerHTML;
document.getElementById('skinlist').innerHTML = copy+"Loading. Please wait...";
xhr.request("getskins.php", page, gotSkins);
}
function gotSkins(http) {
if (http.status == 200) {
if (JSON.parse(http.responseText)) {
var answer = JSON.parse(http.responseText);
if(answer.success){
clearList();
var elem = document.getElementById("page");
for (var i = 1; i <= answer.pages; i++) {
var option = new Option(i, i);
elem.options[i - 1] = option;
}
document.getElementById("max_pages").value = answer.pages;
elem.selectedIndex = answer.page - 1;
if (answer.page >1) {
var block = document.createElement('div');
var string = location.hash;
if (string.indexOf('#!') != -1) {
cmd = string.split('!');
var obj = parseQuery(cmd[1]);
obj.page = answer.page-1;
var str = decodeQuery(obj);
}
else{
var str = "page:"+ (answer.page+1);
}
block.innerHTML = "go back to page "+(answer.page-1)+" ";
block.className = "option";
document.getElementById('skinlist').insertBefore(block, null);
}
var i = 0;
while (answer.data[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.data[i].type + ";base64," + answer.data[i].img;
//das ist die data: url fuer die vorschau
img.title = answer.data[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.data[i].name + "
";
titel.className = "autor";
//titel Ende
var eigenschaften = document.createElement('span');
eigenschaften.innerHTML = "
" +
"Author: " + answer.data[i].author + "
" + "License: " + answer.data[i].license + "
" + "Uploaded at: " + dateFormat(answer.data[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.page < answer.pages) {
var block = document.createElement('div');
var string = location.hash;
if (string.indexOf('#!') != -1) {
cmd = string.split('!');
var obj = parseQuery(cmd[1]);
obj.page = answer.page+1;
var str = decodeQuery(obj);
}
else{
var str = "page:"+ (answer.page+1);
}
block.innerHTML = "End of page "+ answer.page + ".
continue on the next page ";
block.className = "option";
document.getElementById('skinlist').insertBefore(block, null);
} ;
if (answer.data.length < 1) {
alert("noting found matching your filter!");
} else {
useTexture("data:" + answer.data[0].type + ";base64," + answer.data[0].img);
}
}
else {
TINY.box.show({html:'
'+answer.status_msg+'
"+ location.protocol +"//"+ location.hostname + location.pathname + "#!page:1,filtertype:Id,filter:" + id; TINY.box.show({html:html}); } function report(id) { TINY.box.show({url:"reportSkin.php",post:"id="+id}); } function submitReport(form) { TINY.box.fill("reportSkin.php",1,"id="+form.id.value+"&text="+form.text.value+"&topic="+form.topic.value); return false; } function resetReport(form) { TINY.box.hide(); return false; } /* ========================================================================== 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" } function goPage(page){ hashobj.page = page; hashmodified(); } 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; }; /* ========================================================================== licenses functions ========================================================================== */ var Licenses = new Array(); function getLicenses(){ xhr.request("api/get.json.php?licenses", null, gotLicenses); } function gotLicenses(http){ Licenses = JSON.parse(http.responseText).licenses; //console.debug(Licenses); } function getLicenseById(id){ for(var element in Licenses){ if(Licenses[element].id==id) return Licenses[element]; } return undefined; } function showLicenseInfo(id){ var license = getLicenseById(id); if(license.type == "url"){ TINY.box.show({iframe:license.url,boxid:'frameless',width:900,height:600,fixed:false,maskid:'bluemask',maskopacity:40}); }else{ TINY.box.show({html:license.text,boxid:'frameless',width:750,height:450,fixed:false,maskid:'bluemask',maskopacity:40}); } } getLicenses();