LinkedIn Remove Contact

By Mohamed Mansour Last update Mar 16, 2012 — Installed 614 times.
// ==UserScript==
// @name           LinkedIn Remove Contact
// @namespace      com.mohamedmansour.linkedin.removecontacts
// @description    Removes Contact from LinkedIn Easily
// @version        1.0
// @include        http://*.linkedin.com/profile/view?id=*
// @include        https://*.linkedin.com/profile/view?id=*
// ==/UserScript==

var CONNECTIONS_SERVICE_URL = 'http://www.linkedin.com/connections';
var CSRF_SERVICE_URL = CONNECTIONS_SERVICE_URL + '?displayBreakConnections';
var CSRF_TOKEN_PATTERN = '<input type="hidden" name="csrfToken" value="(ajax:\\d+)">';
var PROFILE_CONTAINER_SELECTOR = '.profile-actions-secondary';
var INVITE_SELECTOR = 'a[name="inviteLink"]';

function getCSRFToken(callback) {
  GM_xmlhttpRequest({
    method: 'GET',
    url: CSRF_SERVICE_URL,
    onload: function(response) {
      var csrfMatch = response.responseText.match(CSRF_TOKEN_PATTERN);
      if (csrfMatch) {
        callback(csrfMatch[1]);
      }
      else {
        callback(false);
      }
    }
  });
}

function removeConnections(ids, callback) {
  getCSRFToken(function(token) {
    if (!token) {
      callback(false);
      return;
    }

    var formData = new FormData();
    formData.append('csrfToken', token);
    ids.forEach(function(id, idx) {
      formData.append('connectionChooser', id);
    });
    formData.append('breakConnections', 'Remove Connections');

    GM_xmlhttpRequest({
      method: 'POST',
      url: CONNECTIONS_SERVICE_URL,
      data: formData,
      onload: function(response) {
        callback(true);
      }
    });
  });
}

function getQueryParametersObject() {
  var query = location.search.substr(1);
  var data = query.split('&');
  var result = {};
  for(var i = 0; i < data.length; i++) {
    var item = data[i].split('=');
    result[item[0]] = item[1];
  }
  return result;
}

function removeConnectionClicked(e) {
  var profileID = queryObject.id;
  e.target.innerText = 'Removing connection ...';
  e.target.onclick = function() {return false;};
  e.target.style.cursor = 'wait';
  removeConnections([profileID], function(status) {
    if (status) {
      window.location.reload();
    }
    else {
      alert('Something went wrong removing connection.');
    }
  });
  return false;
}

function renderRemoveConnectionLink() {
  var inviteSelector = document.querySelector(INVITE_SELECTOR);
  if (inviteSelector && inviteSelector.innerText.trim() === 'Connect') {
    return;
  }

  var profileDOM = document.querySelector(PROFILE_CONTAINER_SELECTOR);

  var removeConnectionDOM = document.createElement('a');
  removeConnectionDOM.innerText = 'Remove Connection';
  removeConnectionDOM.href = '#';
  removeConnectionDOM.onclick = removeConnectionClicked;

  var aboutDOM = document.createElement('a');
  aboutDOM.innerText = '  (?)';
  aboutDOM.setAttribute('target', '_blank');
  aboutDOM.setAttribute('href', 'http://mohamedmansour.com/chrome/linkedin-remove/');
  
  var listDOM = document.createElement('li');
  listDOM.appendChild(removeConnectionDOM);
  listDOM.appendChild(aboutDOM);

  profileDOM.appendChild(listDOM);
}


// Do not run in iframes
if (window.top === window.self) {
  var queryObject = getQueryParametersObject();
  renderRemoveConnectionLink();
}