index.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. (function() {
  2. var resize = function() {
  3. var rect = form.get(0).getBoundingClientRect();
  4. form.css('margin-top', window.innerHeight/3 - rect.height/2);
  5. };
  6. var nameFrom = function(uri) {
  7. var parts = uri.substring(1).split('/');
  8. return parts[1];
  9. };
  10. var load = function() {
  11. var name = nameFrom(location.pathname);
  12. $.ajax({
  13. url: '/api/url/' + name,
  14. dataType: 'json'
  15. }).always(function(data) {
  16. var url = data.url || '';
  17. $('#url').val(url)
  18. .focus();
  19. });
  20. }
  21. var showLink = function(name) {
  22. var cmp = $('#cmp'),
  23. lnk = location.origin + '/' + name;
  24. var a = $(document.createElement('a'))
  25. .attr('href', lnk)
  26. .text(lnk)
  27. .appendTo(cmp.text(''));
  28. cmp.css('transform', 'scaleY(1)');
  29. getSelection().setBaseAndExtent(a.get(0), 0, a.get(0), 1);
  30. };
  31. var form = $('form').on('submit', function(e) {
  32. e.preventDefault();
  33. var name = nameFrom(location.pathname),
  34. url = $('#url').val().trim();
  35. if (!url) {
  36. return;
  37. }
  38. $.ajax({
  39. type: 'POST',
  40. url : '/api/url/' + name,
  41. data : JSON.stringify({ url : url }),
  42. dataType : 'json'
  43. }).success(function(data) {
  44. var url = data.url || '';
  45. if (url) {
  46. history.replaceState({}, null, '/edit/' + data.name);
  47. showLink(data.name);
  48. }
  49. });
  50. });
  51. window.addEventListener('resize', resize);
  52. resize();
  53. load();
  54. })();