Author: nmartin Date: Tue Mar 24 19:24:21 2009 New Revision: 12766 Log: initial import click2dial applet OS X only :( Added: freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/ freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/README.txt freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/click2dial.zip (contents, props changed) freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/linkify.user.js Added: freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/README.txt ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/README.txt Tue Mar 24 19:24:21 2009 @@ -0,0 +1,48 @@ +README + +Client Side Click2Dial + +============================================================== +Copyright (c) 2009 Nik Martin + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +The original author of this work, Nik Martin, must be credited +as the original author of this work. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + +============================================================== + +Setup: + +Unzip Click2Dial.zip. + +Inside fs_dial.app, edit COntents/Resources/fsdial.py to set up your server information and phone number + +Import linkify.user.js into greasemonkey (http://www.greasespot.net/) + +Double Click fs_dial.app to register it as the handler for dial:// urls + +The greasemonkey script will linkify any text on a web page that looks like a phone number. +You can edit the reg-ex inside the greasemonkey script to match different types of numbers. + +The fsdial.py script assumes you have a default context, and outbound calls should go to this context \ No newline at end of file Added: freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/click2dial.zip ============================================================================== Binary file. No diff available. Added: freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/linkify.user.js ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/nmartin/fs_client_side_click2dial/linkify.user.js Tue Mar 24 19:24:21 2009 @@ -0,0 +1,78 @@ +// FreeSWITCH Dial Linkify +// Author: Nik Martin +// License: MIT +// +//This script was taken from another script here: http://userscripts.org/scripts/show/1003 +// +// Matches these patterns: +// 800-555-1212 +// (800) 555-1212 +// (800)555-1212 +// 8005551212 +// Weak since it does any 10+ digit number +// 800.555.1212 +// Tested with: +// www.yellowpages.com +// local.google.com +// a9.com +// +// International calling sure would be neat +// ==UserScript== +// @name FreeSWITCH Dial Linkify +// @namespace +// @description Looks for phone numbers in pages and makes hyperlinks out of them. When clicking on the link, FS will connect your phone to the number you clicked +// @include * +// ==/UserScript== + +(function () { + +//this is the test to see if the number looks like a phone number or not + const trackRegex = /(\+\d\d?)?[\-\s\/\.]?[\(]?(\d){2,4}[\)]?[\-\s\/\.]?\d\d\d[\-\s\/\.]?(\d){3,5}\b/ig; + + function trackUrl(t) { + return "dial://org.FreeSWITCH.Dialer?number=" + String(t).replace(/[\(\)\- \.]/g, ""); + } + + // tags we will scan looking for un-hyperlinked urls + var allowedParents = [ + "abbr", "acronym", "address", "applet", "b", "bdo", "big", "blockquote", "body", + "caption", "center", "cite", "code", "dd", "del", "div", "dfn", "dt", "em", + "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6", "i", "iframe", + "ins", "kdb", "li", "object", "nobr", "pre", "p", "q", "samp", "small", "span", "strike", + "s", "strong", "sub", "sup", "td", "th", "tt", "u", "var" + ]; + + var xpath = "//text()[(parent::" + allowedParents.join(" or parent::") + ")" + + //" and contains(translate(., 'HTTP', 'http'), 'http') + " + + "]"; + + var candidates = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); + + //var t0 = new Date().getTime(); + for (var cand = null, i = 0; (cand = candidates.snapshotItem(i)); i++) { + if (trackRegex.test(cand.nodeValue)) { + var span = document.createElement("span"); + var source = cand.nodeValue; + + cand.parentNode.replaceChild(span, cand); + + trackRegex.lastIndex = 0; + for (var match = null, lastLastIndex = 0; (match = trackRegex.exec(source)); ) { + span.appendChild(document.createTextNode(source.substring(lastLastIndex, match.index))); + + var a = document.createElement("a"); + a.setAttribute("href", trackUrl(match[0])); + a.appendChild(document.createTextNode(match[0])); + span.appendChild(a); + + lastLastIndex = trackRegex.lastIndex; + } + + span.appendChild(document.createTextNode(source.substring(lastLastIndex))); + span.normalize(); + } + } + // var t1 = new Date().getTime(); + // alert("X-Lite Dial linkify took " + ((t1 - t0) / 1000) + " seconds"); + +})();