git.fiddlerwoaroof.com
background.js
af0e348e
 function getCurrentTabUrl() {
   var queryInfo = {active: true, currentWindow: true};
   var d = $.Deferred();
 
   chrome.tabs.query(queryInfo, function(tabs) {
     var tab = tabs[0];
     var url = tab.url;
     console.assert(typeof url == 'string', 'tab.url should be a string');
     d.resolve(url, tab.title);
   });
   return d;
 }
 
 function getStoredCreds() {
   var d = $.Deferred();
   chrome.storage.sync.get({
     username: '',
     password: ''
   }, function (items) {
     d.resolve(items.username, items.password);
   });
   return d;
 }
 
 function authenticateMarrow() {
   var d = $.Deferred();
   getStoredCreds().done(function (username, password) {
     if (username === '') {
       renderStatus('Fail :(');
       return;
     }
     var postData = {"username":username,"password":password};
     return $.ajax('http://marrow.elangley.org/api/user/login?ak=1', {
       data: JSON.stringify(postData),
       contentType: 'application/json',
       type: 'POST',
       dataType: 'json'
     }).done(function(r) { d.resolve(username, r.ak); });
   });
   return d;
 }
 
 function postURL(url, title, username, ak) {
   var urlObj = JSON.stringify({"url": url, "title": title, "username": username, "ak": ak});
   var addUrl = 'http://marrow.elangley.org/api/bones/add';
   return $.ajax(addUrl, {
     data: urlObj,
     contentType: 'application/json',
     type: 'POST',
     dataType: 'json'
   });
 }
 
 var commandHandlers = {
   share_page: function() {
     var notification = chrome.notifications.create('share', {
       type: "progress",
       title: "Add to Marrow",
       message: "Posting",
       iconUrl: "marrow_app_128px.png"
     });
     authenticateMarrow().done(function(username, ak) {
       getCurrentTabUrl().done(function(url, title) {
         chrome.notifications.update('share', {progress: 50, message: "Posting '"+title+"'"});
         postURL(url, title, username, ak)
         .done(function() {
           chrome.notifications.update('share', {progress: 100});
         });
       });
     });
   }
 };
 
 chrome.commands.onCommand.addListener(function(command) {
   console.log('Command:' + command);
 
   if (commandHandlers[command] !== undefined) {
     commandHandlers[command]();
   }
 });