15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The background page is asking us to find an address on the page. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (window == top) { 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.extension.onRequest.addListener(function(req, sender, sendResponse) { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendResponse(findAddress()); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Search the text nodes for a US-style mailing address. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Return null if none is found. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var findAddress = function() { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var found; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var re = /(\d+\s+[':.,\s\w]*,\s*[A-Za-z]+\s*\d{5}(-\d{4})?)/m; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var node = document.body; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var done = false; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!done) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done = true; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < node.childNodes.length; ++i) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var child = node.childNodes[i]; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (child.textContent.match(re)) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = child; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found = node; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) done = false; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (found) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var text = ""; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (found.childNodes.length) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < found.childNodes.length; ++i) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text += found.childNodes[i].textContent + " "; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text = found.textContent; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var match = re.exec(text); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (match && match.length) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log("found: " + match[0]); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var trim = /\s{2,}/g; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return match[0].replace(trim, " "); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log("bad initial match: " + found.textContent); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log("no match in: " + text); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return null; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53