index.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. if (!data.ok) {
  17. // TODO(knorton): Error
  18. return;
  19. }
  20. var route = data.route,
  21. url = route.url || '';
  22. $('#url').val(url).focus();
  23. });
  24. }
  25. var showLink = function(name) {
  26. var cmp = $('#cmp'),
  27. lnk = location.origin + '/' + name;
  28. var a = $(document.createElement('a'))
  29. .attr('href', lnk)
  30. .text(lnk)
  31. .appendTo(cmp.text(''));
  32. cmp.css('transform', 'scaleY(1)');
  33. getSelection().setBaseAndExtent(a.get(0), 0, a.get(0), 1);
  34. };
  35. var form = $('form').on('submit', function(e) {
  36. e.preventDefault();
  37. var name = nameFrom(location.pathname),
  38. url = $('#url').val().trim();
  39. $.ajax({
  40. type: 'POST',
  41. url : '/api/url/' + name,
  42. data : JSON.stringify({ url : url }),
  43. dataType : 'json'
  44. }).always(function(data, txt, xhr) {
  45. if (!data.ok) {
  46. return;
  47. }
  48. var route = data.route;
  49. if (!route) {
  50. // deleted
  51. }
  52. var url = route.url || '',
  53. name = route.name || '';
  54. if (url) {
  55. history.replaceState({}, null, '/edit/' + name);
  56. showLink(name);
  57. }
  58. });
  59. });
  60. $('#cls').on('click', function(e) {
  61. $('#url').val('');
  62. $('form').submit();
  63. });
  64. window.addEventListener('resize', resize);
  65. resize();
  66. load();
  67. })();