site.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. function setAlbums(albums) {
  2. var dAlbums = document.getElementById('albums');
  3. dAlbums.innerHTML = '';
  4. Array.prototype.forEach.call(albums, function(alb, i){
  5. var a = addAlbumDom(dAlbums, alb);
  6. a.addEventListener('click', function() {
  7. jsonGET('/api/albums/' + alb.id + '/', function (alb) {
  8. startGallery(alb.photos);
  9. });
  10. });
  11. });
  12. }
  13. function setIncoming(albums, parent) {
  14. parent.innerHTML = '';
  15. Array.prototype.forEach.call(albums, function(alb, i){
  16. var div = appendElement(parent, 'div', null, 'incoming-album');
  17. var a = addAlbumDom(div, alb);
  18. a.addEventListener('click', function(e) {
  19. e.preventDefault();
  20. startGallery(alb.photos);
  21. });
  22. 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>');
  23. form[0].value = alb.title;
  24. form[1].value = alb.dest;
  25. form.addEventListener('submit', function (e) {
  26. e.preventDefault();
  27. form[2].disabled = true;
  28. var paths = Array.prototype.map.call(alb.photos, function(p) {return p.path});
  29. var data = JSON.stringify({name: form[0].value,
  30. dest: form[1].value,
  31. paths: paths});
  32. jsonPOST('/api/incoming/import/', data, function(resp) {
  33. alert('Added album ' + resp.id);
  34. div.innerHTML = '';
  35. }, function(err, req) {
  36. alert(err);
  37. form[2].disabled = false;
  38. });
  39. });
  40. });
  41. }
  42. function startGallery(items, index) {
  43. var pswpElement = document.querySelectorAll('.pswp')[0];
  44. var options = {
  45. index: index || 0
  46. };
  47. // Initializes and opens PhotoSwipe
  48. var gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
  49. gallery.init();
  50. return gallery;
  51. }
  52. function addAlbumDom(parent, alb) {
  53. var a = appendElement(parent, 'a');
  54. var img = appendElement(a, 'img');
  55. img.src = alb.cover.src;
  56. if (alb.title) {
  57. var fig = appendElement(a, 'figure');
  58. fig.textContent = alb.title;
  59. };
  60. return a;
  61. }
  62. function appendElement(parent, tag, id, className, innerHTML) {
  63. var el = document.createElement(tag);
  64. if (id) el.id = id;
  65. if (className) el.className = className;
  66. if (innerHTML) el.innerHTML = innerHTML;
  67. parent.appendChild(el);
  68. return el;
  69. }
  70. function xdr(url, method, data, callback, errback) {
  71. var req;
  72. if (!callback)
  73. callback = function(){};
  74. if (!errback)
  75. errback = function(){};
  76. if(XMLHttpRequest && ('withCredentials' in (req = new XMLHttpRequest()))) {
  77. req.open(method, url, true);
  78. req.withCredentials = "true";
  79. req.onerror = errback;
  80. req.onreadystatechange = function() {
  81. if (req.readyState === 4) {
  82. if (req.status >= 200 && req.status < 400) {
  83. callback(req.responseText);
  84. } else {
  85. errback(new Error('Response returned with non-OK status'), req);
  86. }
  87. }
  88. };
  89. req.setRequestHeader("Accept", "application/json");
  90. if (data)
  91. req.setRequestHeader("Content-type", "application/json");
  92. req.send(data);
  93. } else if(XDomainRequest) {
  94. var reqUrl = url;
  95. if (url.indexOf('http:') === 0) {
  96. reqUrl = url.substr(5);
  97. }
  98. else if (url.indexOf('https:') === 0) {
  99. reqUrl = url.substr(6);
  100. }
  101. req = new XDomainRequest();
  102. req.open(method, reqUrl);
  103. req.onerror = function(err) { errback(err, req); };
  104. req.onload = function() {
  105. callback(req.responseText);
  106. };
  107. req.ontimeout = function() {};
  108. req.onprogress = function() {};
  109. req.timeout = 0;
  110. req.send(data);
  111. } else {
  112. errback(new Error('CORS not supported'));
  113. }
  114. };
  115. function jsonGET(url, callback, errback){
  116. xdr(url, 'GET', null, function(data){
  117. callback(JSON.parse(data));
  118. }, errback);
  119. }
  120. function jsonPOST(url, data, callback, errback){
  121. xdr(url, 'POST', data, function(data){
  122. callback(JSON.parse(data));
  123. }, errback);
  124. }