| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- function setAlbums(albums) {
- var dAlbums = document.getElementById('albums');
- dAlbums.innerHTML = '';
- Array.prototype.forEach.call(albums, function(alb, i){
- var a = addAlbumDom(dAlbums, alb);
- a.addEventListener('click', function() {
- jsonGET('/api/albums/' + alb.id + '/', function (alb) {
- startGallery(alb.photos);
- });
- });
- });
- }
- function setIncoming(albums, parent) {
- parent.innerHTML = '';
- Array.prototype.forEach.call(albums, function(alb, i){
- var div = appendElement(parent, 'div', null, 'incoming-album');
- var a = addAlbumDom(div, alb);
- a.addEventListener('click', function(e) {
- e.preventDefault();
- startGallery(alb.photos);
- });
- var form = appendElement(div, 'form', null, null, '<div><p><label>Title</label><input type="text"/></p><p><label>Path</label><input type="text"/></p><p><input type="submit" value="Import"/></p>');
- form[0].value = alb.title;
- form[1].value = alb.dest;
- form.addEventListener('submit', function (e) {
- e.preventDefault();
- form[2].disabled = true;
- var paths = Array.prototype.map.call(alb.photos, function(p) {return p.path});
- var data = JSON.stringify({name: form[0].value,
- dest: form[1].value,
- paths: paths});
- jsonPOST('/api/incoming/import/', data, function(resp) {
- alert('Added album ' + resp.id);
- div.innerHTML = '';
- }, function(err, req) {
- alert(err);
- form[2].disabled = false;
- });
- });
- });
- }
- function startGallery(items, index) {
- var pswpElement = document.querySelectorAll('.pswp')[0];
- var options = {
- index: index || 0
- };
- // Initializes and opens PhotoSwipe
- var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
- gallery.init();
- return gallery;
- }
- function addAlbumDom(parent, alb) {
- var a = appendElement(parent, 'a');
- var img = appendElement(a, 'img');
- img.src = alb.cover.src;
- if (alb.title) {
- var fig = appendElement(a, 'figure');
- fig.textContent = alb.title;
- };
- return a;
- }
- function appendElement(parent, tag, id, className, innerHTML) {
- var el = document.createElement(tag);
- if (id) el.id = id;
- if (className) el.className = className;
- if (innerHTML) el.innerHTML = innerHTML;
- parent.appendChild(el);
- return el;
- }
- function xdr(url, method, data, callback, errback) {
- var req;
- if (!callback)
- callback = function(){};
- if (!errback)
- errback = function(){};
- if(XMLHttpRequest && ('withCredentials' in (req = new XMLHttpRequest()))) {
- req.open(method, url, true);
- req.withCredentials = "true";
- req.onerror = errback;
- req.onreadystatechange = function() {
- if (req.readyState === 4) {
- if (req.status >= 200 && req.status < 400) {
- callback(req.responseText);
- } else {
- errback(new Error('Response returned with non-OK status'), req);
- }
- }
- };
- req.setRequestHeader("Accept", "application/json");
- if (data)
- req.setRequestHeader("Content-type", "application/json");
- req.send(data);
- } else if(XDomainRequest) {
- var reqUrl = url;
- if (url.indexOf('http:') === 0) {
- reqUrl = url.substr(5);
- }
- else if (url.indexOf('https:') === 0) {
- reqUrl = url.substr(6);
- }
- req = new XDomainRequest();
- req.open(method, reqUrl);
- req.onerror = function(err) { errback(err, req); };
- req.onload = function() {
- callback(req.responseText);
- };
- req.ontimeout = function() {};
- req.onprogress = function() {};
- req.timeout = 0;
- req.send(data);
- } else {
- errback(new Error('CORS not supported'));
- }
- };
- function jsonGET(url, callback, errback){
- xdr(url, 'GET', null, function(data){
- callback(JSON.parse(data));
- }, errback);
- }
- function jsonPOST(url, data, callback, errback){
- xdr(url, 'POST', data, function(data){
- callback(JSON.parse(data));
- }, errback);
- }
|