| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- (function() {
- var $frm = $('form'),
- $cmp = $('#cmp'),
- $cls = $('#cls'),
- $url = $('#url'),
- copyKey = navigator.userAgent.indexOf('Macintosh') >= 0 ? '⌘-C' : 'Ctrl-C',
- lastUrl;
- var $e = function(name) {
- return $(document.createElement(name));
- };
- var resize = function() {
- var rect = $frm.get(0).getBoundingClientRect();
- $frm.css('margin-top', window.innerHeight/3 - rect.height/2);
- };
- var nameFrom = function(uri) {
- var parts = uri.substring(1).split('/');
- return parts[1];
- };
- var load = function() {
- var name = nameFrom(location.pathname);
- $.ajax({
- url: '/api/url/' + name,
- dataType: 'json'
- }).always(function(data) {
- if (!data.ok) {
- showError(data.error);
- return;
- }
- var route = data.route,
- url = route && route.url || '';
- $url.val(url).focus();
- urlDidChange();
- });
- }
- var showLink = function(name) {
- var lnk = location.origin + '/' + name;
- $cmp.text('')
- .removeClass('fuck')
- .addClass('link');
- var a = $(document.createElement('a'))
- .attr('href', lnk)
- .text(lnk)
- .appendTo($cmp);
- var h = $(document.createElement('span'))
- .addClass('hnt')
- .text(copyKey)
- .appendTo($cmp);
- $cmp.css('transform', 'scaleY(1)');
- getSelection().setBaseAndExtent(a.get(0), 0, a.get(0), 1);
- };
- var showError = function(message) {
- $cmp.text('')
- .removeClass('link')
- .addClass('fuck');
- $e('span').text('ERROR: ' + message)
- .appendTo($cmp);
- $cmp.css('transform', 'scaleY(1)');
- };
- var hideDrawer = function() {
- $cmp.css('transform', 'scaleY(0)');
- };
- var urlDidChange = function() {
- var url = $url.val().trim();
- if (url == lastUrl) {
- return;
- }
- lastUrl = url;
- hideDrawer();
- if (url) {
- $cls.fadeIn(200);
- } else {
- $cls.fadeOut(200);
- }
- };
- $frm.on('submit', function(e) {
- e.preventDefault();
- var name = nameFrom(location.pathname),
- url = $url.val().trim();
- $.ajax({
- type: 'POST',
- url : '/api/url/' + name,
- data : JSON.stringify({ url : url }),
- dataType : 'json'
- }).always(function(data) {
- if (!data.ok) {
- showError(data.error);
- return;
- }
- var route = data.route;
- if (!route) {
- hideDrawer();
- return;
- }
- var url = route.url || '',
- name = route.name || '';
- if (url) {
- history.replaceState({}, null, '/edit/' + name);
- showLink(name);
- }
- });
- });
- $url.on('keydown', urlDidChange)
- .on('paste', urlDidChange)
- .on('change', urlDidChange);
- $cls.on('click', function(e) {
- $url.val('');
- $frm.submit();
- urlDidChange();
- });
- window.addEventListener('resize', resize);
- resize();
- urlDidChange();
- load();
- })();
|