1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

add item flyouts

This commit is contained in:
Luke Pulverenti 2015-05-14 22:16:57 -04:00
parent ce35317652
commit 4b2be0b97a
16 changed files with 478 additions and 409 deletions

View file

@ -309,7 +309,6 @@
setImageIntoElement(elem, localUrl);
}).fail(onFail);
};
}
@ -458,245 +457,6 @@
};
}
function indexedDbWebpImageStore() {
var self = this;
openDb().done(function (db) {
self._db = db;
window.ImageStore = self;
});
self.addImageToDatabase = function (blob, key) {
console.log("addImageToDatabase");
// Open a transaction to the database
var transaction = self.db().transaction([imagesStoreName], "readwrite");
// Put the blob into the dabase
var put = transaction.objectStore(imagesStoreName).put(blob, key);
};
self.db = function () {
return self._db;
};
self.get = function (key) {
var deferred = DeferredBuilder.Deferred();
var transaction = self.db().transaction([imagesStoreName], "readonly");
// Open a transaction to the database
var getRequest = transaction.objectStore(imagesStoreName).get(key);
getRequest.onsuccess = function (event) {
var imgFile = event.target.result;
if (imgFile) {
deferred.resolveWith(null, [imgFile]);
} else {
deferred.reject();
}
};
getRequest.onerror = function () {
deferred.reject();
};
return deferred.promise();
};
self.getImageUrl = function (originalUrl) {
console.log('getImageUrl:' + originalUrl);
var key = CryptoJS.SHA1(originalUrl).toString();
var deferred = DeferredBuilder.Deferred();
self.get(key).done(function (url) {
deferred.resolveWith(null, [url]);
}).fail(function () {
self.downloadImage(originalUrl, key).done(function () {
self.get(key).done(function (url) {
deferred.resolveWith(null, [url]);
}).fail(function () {
deferred.reject();
});
}).fail(function () {
deferred.reject();
});
});
return deferred.promise();
};
self.downloadImage = function (url, key) {
var deferred = DeferredBuilder.Deferred();
console.log('downloadImage:' + url);
// Create XHR
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
// Set the responseType to blob
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
console.log("Image retrieved");
try {
self.addImageToDatabase(this.response, key);
deferred.resolve();
} catch (err) {
console.log("Error adding image to database");
deferred.reject();
}
} else {
deferred.reject();
}
}, false);
// Send XHR
xhr.send();
return deferred.promise();
};
function decode(data, elem) {
console.log('decoding webp');
var WebPImage = { width: { value: 0 }, height: { value: 0 } }
var decoder = new WebPDecoder();
//Config, you can set all arguments or what you need, nothing no objeect
var config = decoder.WebPDecoderConfig;
var output_buffer = config.j;
var bitstream = config.input;
if (!decoder.WebPInitDecoderConfig(config)) {
throw new Error("Library version mismatch!\n");
}
var StatusCode = decoder.VP8StatusCode;
var status = decoder.WebPGetFeatures(data, data.length, bitstream);
if (status != 0) {
console.log('error');
}
var mode = decoder.WEBP_CSP_MODE;
output_buffer.J = 4;
status = decoder.WebPDecode(data, data.length, config);
var ok = (status == 0);
if (!ok) {
throw new Error("Decoding of %s failed.\n");
}
drawIntoElement(output_buffer, elem);
}
function drawIntoElement(output_buffer, elem) {
console.log('drawing canvas');
var bitmap = output_buffer.c.RGBA.ma;
var canvas = document.createElement("canvas");
var biHeight = output_buffer.height; var biWidth = output_buffer.width;
canvas.height = biHeight;
canvas.width = biWidth;
var context = canvas.getContext('2d');
var output = context.createImageData(canvas.width, canvas.height);
var outputData = output.data;
for (var h = 0; h < biHeight; h++) {
for (var w = 0; w < biWidth; w++) {
outputData[0 + w * 4 + (biWidth * 4) * h] = bitmap[1 + w * 4 + (biWidth * 4) * h];
outputData[1 + w * 4 + (biWidth * 4) * h] = bitmap[2 + w * 4 + (biWidth * 4) * h];
outputData[2 + w * 4 + (biWidth * 4) * h] = bitmap[3 + w * 4 + (biWidth * 4) * h];
outputData[3 + w * 4 + (biWidth * 4) * h] = bitmap[0 + w * 4 + (biWidth * 4) * h];
};
}
context.putImageData(output, 0, 0);
elem.appendChild(canvas);
}
self.setImageInto = function (elem, url) {
if (url.indexOf('format=webp') == -1 || elem.tagName != 'DIV') {
setImageIntoElement(elem, url);
return;
}
// Create XHR
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
// Set the responseType to blob
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
console.log("Image retrieved");
try {
var arr = new Uint8Array(this.response);
//// Convert the int array to a binary string
//// We have to use apply() as we are converting an *array*
//// and String.fromCharCode() takes one or more single values, not
//// an array.
//var raw = String.fromCharCode.apply(null, arr);
//// This works!!!
//var b64 = btoa(raw);
//var dataURL = "data:image/jpeg;base64," + b64;
console.log(url);
decode(arr, elem);
} catch (err) {
console.log("Error adding image to database");
}
} else {
}
}, false);
// Send XHR
xhr.send();
};
}
function simpleImageStore() {
var self = this;