diff options
Diffstat (limited to 'tlrobinson/JSON Diff.html')
-rw-r--r-- | tlrobinson/JSON Diff.html | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/tlrobinson/JSON Diff.html b/tlrobinson/JSON Diff.html new file mode 100644 index 0000000..ea178cc --- /dev/null +++ b/tlrobinson/JSON Diff.html @@ -0,0 +1,287 @@ +<html><head> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"> + <title>JSON Diff</title> + <link rel="stylesheet" href="JSON%20Diff_files/master.css" type="text/css" media="screen" title="no title" charset="utf-8"> + <script src="JSON%20Diff_files/a.js" defer="defer" async="" type="text/javascript"></script><script type="text/javascript" charset="utf-8"> + // 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. + var jsonBoxA, jsonBoxB; + + var HashStore = { + load : function(callback) { + if (window.location.hash) { + try { + var hashObject = JSON.parse(decodeURIComponent(window.location.hash.slice(1))); + callback && callback(hashObject.d); + return; + } catch (e) { + console.log() + } + } + callback && callback(null); + }, + sync : function(object) { + var hashObject = { d : object }; + window.location.hash = "#" + encodeURIComponent(JSON.stringify(hashObject)); + } + }; + + function init() { + document.addEventListener("click", clickHandler, false); + + jsonBoxA = document.getElementById("jsonA"); + jsonBoxB = document.getElementById("jsonB"); + + HashStore.load(function(data) { + if (data) { + jsonBoxA.value = data.a; + jsonBoxB.value = data.b; + } + }); + + startCompare(); + } + + function swapBoxes() { + var tmp = jsonBoxA.value; + jsonBoxA.value = jsonBoxB.value; + jsonBoxB.value = tmp; + } + + function clearBoxes() { + jsonBoxA.value = ""; + jsonBoxB.value = ""; + } + + function startCompare() { + var aValue = jsonBoxA.value; + var bValue = jsonBoxB.value; + + var objA, objB; + try { + objA = JSON.parse(aValue); + jsonBoxA.style.backgroundColor = ""; + } catch(e) { + jsonBoxA.style.backgroundColor = "rgba(255,0,0,0.5)"; + } + try { + objB = JSON.parse(bValue); + jsonBoxB.style.backgroundColor = ""; + } catch(e) { + jsonBoxB.style.backgroundColor = "rgba(255,0,0,0.5)"; + } + + HashStore.sync({ + a : aValue, + b : bValue + }); + + results = document.getElementById("results"); + removeAllChildren(results); + + compareTree(objA, objB, "root", results); + } + + function compareTree(a, b, name, results) { + var typeA = typeofReal(a); + var typeB = typeofReal(b); + + var typeSpanA = document.createElement("span"); + typeSpanA.appendChild(document.createTextNode("("+typeA+")")) + typeSpanA.setAttribute("class", "typeName"); + + var typeSpanB = document.createElement("span"); + typeSpanB.appendChild(document.createTextNode("("+typeB+")")) + typeSpanB.setAttribute("class", "typeName"); + + var aString = (typeA === "object" || typeA === "array") ? "" : String(a) + " "; + var bString = (typeB === "object" || typeB === "array") ? "" : String(b) + " "; + + var leafNode = document.createElement("span"); + leafNode.appendChild(document.createTextNode(name)); + if (a === undefined) { + leafNode.setAttribute("class", "added"); + leafNode.appendChild(document.createTextNode(": " + bString)); + leafNode.appendChild(typeSpanB); + } + else if (b === undefined) { + leafNode.setAttribute("class", "removed"); + leafNode.appendChild(document.createTextNode(": " + aString)); + leafNode.appendChild(typeSpanA); + } + else if (typeA !== typeB || (typeA !== "object" && typeA !== "array" && a !== b)) { + leafNode.setAttribute("class", "changed"); + leafNode.appendChild(document.createTextNode(": " + aString)); + leafNode.appendChild(typeSpanA); + leafNode.appendChild(document.createTextNode(" => "+ bString)); + leafNode.appendChild(typeSpanB); + } + else { + leafNode.appendChild(document.createTextNode(": " + aString)); + leafNode.appendChild(typeSpanA); + } + + if (typeA === "object" || typeA === "array" || typeB === "object" || typeB === "array") { + var keys = []; + for (var i in a) { + if (a.hasOwnProperty(i)) { + keys.push(i); + } + } + for (var i in b) { + if (b.hasOwnProperty(i)) { + keys.push(i); + } + } + keys.sort(); + + var listNode = document.createElement("ul"); + listNode.appendChild(leafNode); + + for (var i = 0; i < keys.length; i++) { + if (keys[i] === keys[i-1]) { + continue; + } + var li = document.createElement("li"); + listNode.appendChild(li); + + compareTree(a && a[keys[i]], b && b[keys[i]], keys[i], li); + } + results.appendChild(listNode); + } + else { + results.appendChild(leafNode); + } + } + + function removeAllChildren(node) { + var child; + while (child = node.lastChild) { + node.removeChild(child); + } + } + + function isArray(value) { + return value && typeof value === "object" && value.constructor === Array; + } + function typeofReal(value) { + return isArray(value) ? "array" : typeof value; + } + + function clickHandler(e) { + var e = e || window.event; + if (e.target.nodeName.toUpperCase() === "UL") { + if (e.target.getAttribute("closed") === "yes") + e.target.setAttribute("closed", "no"); + else + e.target.setAttribute("closed", "yes"); + } + } + </script> +<script charset="UTF-8" async="" src="JSON%20Diff_files/thread.js"></script><link href="JSON%20Diff_files/defaults.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="JSON%20Diff_files/disqus.js"></script><script src="JSON%20Diff_files/ga.js" async="" type="text/javascript"></script><link href="JSON%20Diff_files/t_c4ca4238a0b923820dcc509a6f75849b.css" type="text/css" rel="stylesheet"><script charset="UTF-8" async="" src="JSON%20Diff_files/t_c4ca4238a0b923820dcc509a6f75849b.js"></script></head> +<body onload="init();"> + <h2>JSON Diff</h2> + <div class="contentbox" id="instructions"> + <ul> + <li>Paste some JSON in each of the text fields. Click "Compare" to see the diff.</li> + <li>Changed portions are displayed in <span class="changed">yellow</span>. Additions are displayed in <span class="added">green</span>. Deletions are displayed in <span class="removed">red</span>.</li> + <li>It also works as a JSON viewer. Click the disclosure triangles to display/hide portions of the JSON.</li> + <li>Invalid JSON is indicated by the text fields turning red.</li> + <li>Swap the contents of the text areas by clicking "Swap". Clear them by clicking "Clear".</li> + </ul> + </div> + <div class="contentbox" id="inputs"> + <textarea id="jsonA"></textarea> + <textarea id="jsonB"></textarea> + <input value="Compare" id="compare" onclick="startCompare();" type="button"> + <input value="Swap" id="swap" onclick="swapBoxes();" type="button"> + <input value="Clear" id="clear" onclick="clearBoxes();" type="button"> + </div> + <div class="contentbox" id="results"><ul><span>root: <span class="typeName">(object)</span></span><li><ul><span>content: <span class="typeName">(array)</span></span><li><ul><span>0: <span class="typeName">(object)</span></span><li><span>align: center <span class="typeName">(string)</span></span></li><li><ul><span>content: <span class="typeName">(array)</span></span><li><ul><span>0: <span class="typeName">(object)</span></span><li><span>content: And please, feel free to send us your feedback and comments to <span class="typeName">(string)</span></span></li><li><ul><span>style: <span class="typeName">(object)</span></span><li><span>bold: 2 <span class="typeName">(number)</span></span></li><li><span>color: FFFFFF <span class="typeName">(string)</span></span></li><li><span class="removed">fontFamily: Arial <span class="typeName">(string)</span></span></li><li><span>italic: 2 <span class="typeName">(number)</span></span></li><li><span class="added">name: Arial <span class="typeName">(string)</span></span></li><li><span>size: 20 <span class="typeName">(number)</span></span></li><li><span class="changed">underline: 1 <span class="typeName">(number)</span> => 2 <span class="typeName">(number)</span></span></li></ul></li></ul></li><li><ul><span>1: <span class="typeName">(object)</span></span><li><span class="changed">content: hello world <span class="typeName">(string)</span> => foo <span class="typeName">(string)</span></span></li><li><ul><span>style: <span class="typeName">(object)</span></span><li><span>bold: 2 <span class="typeName">(number)</span></span></li><li><span class="changed">color: 4DC3FF <span class="typeName">(string)</span> => 4DC2FF <span class="typeName">(string)</span></span></li><li><span class="removed">fontFamily: Arial <span class="typeName">(string)</span></span></li><li><span>italic: 2 <span class="typeName">(number)</span></span></li><li><span class="added">name: Arial <span class="typeName">(string)</span></span></li><li><span>size: 20 <span class="typeName">(number)</span></span></li><li><span class="changed">underline: 1 <span class="typeName">(number)</span> => 2 <span class="typeName">(number)</span></span></li></ul></li></ul></li><li><ul><span>2: <span class="typeName">(object)</span></span><li><span>content: , or just by clicking on the <span class="typeName">(string)</span></span></li><li><ul><span>style: <span class="typeName">(object)</span></span><li><span>bold: 2 <span class="typeName">(number)</span></span></li><li><span>color: FFFFFF <span class="typeName">(string)</span></span></li><li><span class="removed">fontFamily: Arial <span class="typeName">(string)</span></span></li><li><span>italic: 2 <span class="typeName">(number)</span></span></li><li><span class="added">name: Arial <span class="typeName">(string)</span></span></li><li><span>size: 20 <span class="typeName">(number)</span></span></li><li><span class="changed">underline: 1 <span class="typeName">(number)</span> => 2 <span class="typeName">(number)</span></span></li></ul></li></ul></li><li><ul><span>3: <span class="typeName">(object)</span></span><li><span>content: feedback <span class="typeName">(string)</span></span></li><li><ul><span>style: <span class="typeName">(object)</span></span><li><span>bold: 2 <span class="typeName">(number)</span></span></li><li><span class="changed">color: 4DC3FF <span class="typeName">(string)</span> => 4DC2FF <span class="typeName">(string)</span></span></li><li><span class="removed">fontFamily: Arial <span class="typeName">(string)</span></span></li><li><span>italic: 2 <span class="typeName">(number)</span></span></li><li><span class="added">name: Arial <span class="typeName">(string)</span></span></li><li><span>size: 20 <span class="typeName">(number)</span></span></li><li><span class="changed">underline: 1 <span class="typeName">(number)</span> => 2 <span class="typeName">(number)</span></span></li></ul></li></ul></li><li><ul><span class="added">4: <span class="typeName">(object)</span></span><li><span class="added">content: button up above. <span class="typeName">(string)</span></span></li><li><ul><span class="added">style: <span class="typeName">(object)</span></span><li><span class="added">bold: 2 <span class="typeName">(number)</span></span></li><li><span class="added">color: FFFFFF <span class="typeName">(string)</span></span></li><li><span class="added">italic: 2 <span class="typeName">(number)</span></span></li><li><span class="added">name: Arial <span class="typeName">(string)</span></span></li><li><span class="added">size: 20 <span class="typeName">(number)</span></span></li><li><span class="added">underline: 2 <span class="typeName">(number)</span></span></li></ul></li></ul></li></ul></li><li><span>depth: 0 <span class="typeName">(number)</span></span></li><li><span>list: false <span class="typeName">(boolean)</span></span></li><li><span>ordered: false <span class="typeName">(boolean)</span></span></li></ul></li></ul></li><li><span>format: example <span class="typeName">(string)</span></span></li><li><span class="changed">version: 3 <span class="typeName">(number)</span> => 3.1 <span class="typeName">(number)</span></span></li></ul></div> + <div class="contentbox" id="issues"> + <h3>About</h3> + <p>JSON Diff is a simple way to visualize and compare <a href="http://json.org/">JSON</a>.</p> + <h3>Known Issues</h3> + <ul> + <li>Diff algorithm not very intelligent when dealing with arrays</li> + <li>Probably doesn't work in IE</li> + </ul> + </div> + + <h3><a name="comment">comment</a> <a href="#top">^</a></h3> + +<div id="disqus_thread"><div style="display: none;" id="dsq-content-stub"><img alt="DISQUS" src="data:image/png;base64,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" height="17" width="71"><img alt="..." src="data:image/gif;base64,R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWswaXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA" style="margin: 0pt 0pt 3px 5px;" height="11" width="16"></div><div class="clearfix" style="display: block;" id="dsq-content"> <div id="dsq-global-toolbar" class="dsq-clearfix"> <ul class="dsq-global-toolbar-right dsq-clearfix"> <li class="dsq-messages"> <div id="dsq-messagesx-toolbar-icon" class=" dsq-dropdown-tab dsq-toolbar-item dsq-clearfix" onclick="DISQUS.dtpl.actions.fire('messagesx.toggleBar'); return false;"> <a href="#" class="dsq-message-count dsq-toolbar-label" id="dsq-messagesx-count">0</a> </div> <div id="dsq-messagesx-toolbar-dropdown" class="dsq-dropdown"> <h4>Notifications</h4> <ul class="dsq-inbox" id="dsq-messagesx-inbox"> <li id="dsq-inbox-no-messages">You have no messages</li> </ul> </div> <div id="dsq-alert" class="dsq-alert dsq-alert-hidden"> <div class="dsq-alert-notch"></div> <p>You've received a new rank!</p> </div> </li> <li class="dsq-community-box"> <a href="#" class="dsq-toolbar-item dsq-tt" onclick="DISQUS.dtpl.actions.fire('community.show'); return false" title="Expand Community Box"><span class="dsq-toolbar-icon"></span></a> </li> <li class="dsq-global-toolbar-dropdown-container"> <div id="dsq-toolbar-dropdown"> <a href="#" onclick="return false" class="dsq-toolbar-logo dsq-toolbar-item dsq-clearfix"><span class="dsq-toolbar-icon">Disqus</span></a> <div id="dsq-toolbar-dropdown-wrap" style="display: none"> <ul class="dsq-clearfix"> <li class="dsq-editprofile-link"><a href="#" onclick="return DISQUS.dtpl.actions.fire('user.remoteAccountSettings');"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Settings</span></a></li> <li class="dsq-logout-link"><a href="http://disqus.com/logout/?ctkn=8d7fc9bdfc23e61c412c738fc2d7ba57"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">Logout</span></a></li> <li class="dsq-about-link"><a href="http://disqus.com/" target="_blank"><span class="dsq-toolbar-icon"></span><span class="dsq-toolbar-label">About Disqus</span></a></li> </ul> </div> </div> </li> </ul> <ul class="dsq-global-toolbar-left dsq-clearfix"> <li class="dsq-like-thread"> <a href="#" id="dsq-like-thread-button" class="dsq-toolbar-item dsq-clearfix dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', 1); return false;" title="I like this page"> <span class="dsq-toolbar-icon"></span> <span class="dsq-toolbar-label">Like</span> </a> </li> <li class="dsq-dislike-thread"> <a href="#" id="dsq-dislike-thread-button" class="dsq-toolbar-item dsq-clearfix dsq-tt" onclick="DISQUS.dtpl.actions.fire('thread.vote', -1); return false" title="I don't like this page"> <span class="dsq-toolbar-icon">Dislike</span> </a> </li> <li class="dsq-like-panel"> <ul class="dsq-like-faces dsq-clearfix"> <li class="dsq-tt" title="Apphacker"><a href="http://disqus.com/twitter-20687908/" onclick="return DISQUS.dtpl.actions.fire('profile.show', null, 'twitter-20687908', false); return false"><img src="JSON%20Diff_files/avatar32_002.jpg"></a></li> <li class="dsq-like-activity"> and 13 others liked this. </li> </ul> </li> </ul> </div> <div id="dsq-like-tooltip"> <div id="dsq-share-step-1" class="dsq-share-step"> <h3>Glad you liked it. Would you like to share?</h3> <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-facebook" value="Facebook" type="checkbox"><label for="dsq-share-thread-facebook"><span class="dsq-facebook">Facebook</span></label></p> <p class="dsq-tooltip-checkbox"><input id="dsq-share-thread-twitter" value="Twitter" type="checkbox"><label for="dsq-share-thread-twitter"><span class="dsq-twitter">Twitter</span></label></p> <ul id="dsq-tooltip-actions"> <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share'); return false" class="dsq-primary-action">Share</a></li> <li><a href="#" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false" class="dsq-secondary-action">No thanks</a></li> </ul> </div> <div id="dsq-share-step-2" class="dsq-share-step" style="display:none !important"> <p>Sharing this page …</p> </div> <div id="dsq-share-step-3" class="dsq-share-step" style="display:none !important"> <p>Thanks! <a href="#" class="dsq-tooltip-decline" onclick="DISQUS.dtpl.actions.fire('thread.share.cancel'); return false">Close</a></p> </div> </div> <div id="dsq-new-post" class="dsq-post-area"> <h3>Add New Comment</h3> <div style="clear:both"></div> <div class="dsq-request-user-info"> <!-- If authenticated --> <a href="http://disqus.com/logout/?ctkn=8d7fc9bdfc23e61c412c738fc2d7ba57" class="dsq-request-user-logout">Logout</a> <table> <tbody><tr> <td rowspan="2" class="dsq-header-avatar"> <a href="http://disqus.com/openid-9667/" onclick="return DISQUS.dtpl.actions.fire('profile.show', null, 'openid-9667'); return false"> <img src="JSON%20Diff_files/avatar92.jpg" class="dsq-request-user-avatar" height="48" width="48"> </a> </td> <td class="dsq-request-user-name"> <a href="http://disqus.com/openid-9667/" onclick="return DISQUS.dtpl.actions.fire('profile.show', null, 'openid-9667'); return false">Matěj Cepl</a> </td> </tr> <tr> <td class="dsq-request-user-stats"> <span class="dsq-request-user-stat dsq-request-user-stat-comments"> <big>16</big> <span id="dsq-request-user-stats-comments"> comments </span> </span> <span class="dsq-request-user-stat dsq-request-user-stat-points"> <big>5</big> <span id="dsq-request-user-stats-points"> likes received </span> </span> </td> </tr> </tbody></table></div> <div id="dsq-form-area"> <div class="dsq-textarea"> <div style="height: auto;" class="dsq-textarea-wrapper" id="dsq-textarea-wrapper"> <!-- filled dynamically --> <iframe style="position: relative; top: 0px; height: 58px;" src="JSON%20Diff_files/reply.html" id="easyXDM_DISQUS_net_default9901_provider" name="easyXDM_DISQUS_net_default9901_provider" frameborder="0" scrolling="no"></iframe></div> </div> <div id="dsq-media-preview" class="dsq-media-preview" style="display:none"> </div> <div class="dsq-post-footer"> <div class="dsq-attach-media"> <div class="dsq-attach-media-container"> <span>Image</span> <!-- filled dynamically --> <iframe src="JSON%20Diff_files/upload.html" id="easyXDM_DISQUS_net_default9902_provider" name="easyXDM_DISQUS_net_default9902_provider" frameborder="0" scrolling="no"></iframe></div> </div> <div class="dsq-sharing-options dsq-tt" style="display:none;" title="Toggle to share your comment"></div> <button type="button" class="dsq-button" id="dsq-post-button" onclick="DISQUS.dtpl.actions.fire('comments.send', null, this);"> <span> Post as Matěj Cepl </span> </button> </div> <div style="clear:both"></div> </div> </div> <div id="dsq-comments-title"> <h3> Showing <span id="dsq-num-posts">9</span> comments </h3> </div> <div class="dsq-options"> <span class="dsq-item-sort"> Sort by <select id="dsq-sort-select" onchange="DISQUS.dtpl.actions.fire('thread.sort', this.value);"> <option value="hot" selected="selected">Popular now</option> <option value="best">Best rating</option> <option value="newest">Newest first</option> <option value="oldest">Oldest first</option> </select> </span> <span class="dsq-subscribe-email"> <img src="JSON%20Diff_files/email.png" alt=""> <span id="dsq-subscribe"> <a href="#" onclick="return DISQUS.dtpl.actions.fire('thread.subscribe');">Subscribe by email</a> </span> <span class="dsq-subscribe-rss"> <img src="JSON%20Diff_files/bullet-feed.png" alt=""> <a href="http://tlrobinson.disqus.com/thread_80/latest.rss">Subscribe by RSS</a> </span> </span> </div> <ul id="dsq-comments"> <div id="comment-160387487"></div><li id="dsq-comment-160387487" style="margin-left:0px;" class="dsq-comment dsq-even "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-160387487" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-160387487" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-160387487" class="dsq-header-avatar"> <a id="dsq-avatar-160387487" class="dsq-avatar dsq-tt" title="Expand 278777851's profile" href="http://disqus.com/guest/272a3d7fead0893ea5a7f5ddb4491a15/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 160387487, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-160387487" class="dsq-comment-cite"> <span id="dsq-author-user-160387487">278777851</span> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-160387487" onclick="DISQUS.dtpl.actions.fire('comments.permalink',160387487);" title="Link to comment by 278777851">7 months ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 160387487);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-160387487" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-160387487"> <div class="dsq-comment-text" id="dsq-comment-text-160387487"> {<br> "events": {<br> "list": [<br> {<br> "eventObject": {<br> "@type": "contactlist",<br> "contacts": [<br> {<br> "uri": "tel:+491728881002",<br> "self": "true",<br> "state": "active" <br> },<br> {<br> "uri": "<a rel="nofollow">sip:491728881001@mns.ericsson....</a>",<br> "state": "active" <br> },<br> {<br> "uri": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>",<br> "self": "true",<br> "state": "active" <br> },<br> {<br> "uri": "<a rel="nofollow">sip:491728881003@mns.ericsson....</a>",<br> "state": "active" <br> },<br> {<br> "uri": "tel:+491728881000",<br> "state": "pending" <br> } <br> ] <br> },<br> "id": "1b25ae4c-8589-4080-ae4f-3b5e2700fe50",<br> "destination": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>" <br> },<br> {<br> "eventObject": {<br> "@type": "presencelist",<br> "userPresences": [<br> {<br> "entity": "tel:+491728881002",<br> "services": [<br> <br> ],<br> "self": "true" <br> },<br> {<br> "entity": "<a rel="nofollow">sip:491728881001@mns.ericsson....</a>",<br> "services": [<br> <br> ] <br> },<br> {<br> "entity": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>",<br> "services": [<br> <br> ],<br> "self": "true" <br> },<br> {<br> "entity": "<a rel="nofollow">sip:491728881003@mns.ericsson....</a>",<br> "services": [<br> <br> ] <br> } <br> ] <br> },<br> "id": "4076e6c9-341d-4e87-9ce4-1aff56a2865b",<br> "destination": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>" <br> },<br> {<br> "eventObject": {<br> "@type": "message",<br> "from": "<a rel="nofollow">sip:491728881001@mns.ericsson....</a>",<br> "to": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>",<br> "contentType": "text/plain",<br> "subject": "testing IM",<br> "body": "Allo world",<br> "type": "message" <br> },<br> "id": "250a597b-80af-46ac-8783-4965fd014b79",<br> "destination": "<a rel="nofollow">sip:491728881002@mns.ericsson....</a>" <br> } <br> ] <br> }<br>} </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-160387487"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-160387487" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 160387487, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-160387487" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 160387487);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-160387487" onclick="DISQUS.dtpl.actions.fire('comments.reply', 160387487, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-160387487"></div> <div id="comment-96253169"></div><li id="dsq-comment-96253169" style="margin-left:0px;" class="dsq-comment dsq-odd "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-96253169" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-96253169" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-96253169" class="dsq-header-avatar"> <a id="dsq-avatar-96253169" class="dsq-avatar dsq-tt" title="Expand Alex Gorbatchev's profile" href="http://disqus.com/alexg/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 96253169, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-96253169" class="dsq-comment-cite"> <a id="dsq-author-user-96253169" href="http://alexgorbatchev.com/" target="_blank" rel="nofollow">Alex Gorbatchev</a> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-96253169" onclick="DISQUS.dtpl.actions.fire('comments.permalink',96253169);" title="Link to comment by Alex Gorbatchev">11 months ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 96253169);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-96253169" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-96253169"> <div class="dsq-comment-text" id="dsq-comment-text-96253169"> what's the license for this code? </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-96253169"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-96253169" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 96253169, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-96253169" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 96253169);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-96253169" onclick="DISQUS.dtpl.actions.fire('comments.reply', 96253169, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-96253169"></div> <div id="comment-95514712"></div><li id="dsq-comment-95514712" style="margin-left:0px;" class="dsq-comment dsq-even "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-95514712" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-95514712" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-95514712" class="dsq-header-avatar"> <a id="dsq-avatar-95514712" class="dsq-avatar dsq-tt" title="Expand OriginalSyn's profile" href="http://disqus.com/openid-44817/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 95514712, null);"> <img src="JSON%20Diff_files/avatar32.jpg" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-95514712" class="dsq-comment-cite"> <a id="dsq-author-user-95514712" href="http://original.syn.myopenid.com/" target="_blank" rel="nofollow">OriginalSyn</a> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-95514712" onclick="DISQUS.dtpl.actions.fire('comments.permalink',95514712);" title="Link to comment by OriginalSyn">11 months ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 95514712);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-95514712" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-95514712"> <div class="dsq-comment-text" id="dsq-comment-text-95514712"> + This breaks if the value of a property is null, typeof null === +'object', so it will attempt recurse until the stack limit is exceeded <br><br>One way to fix it is to do that following:<br><br>if (typeA === "object" || typeA === "array" || typeB === "object" || typeB === "array")<br><br>to <br><br>if + ((typeA === "object" && a !== null) || typeA === "array" || +(typeB === "object" && b !== null) || typeB === "array") </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-95514712"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-95514712" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 95514712, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-95514712" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 95514712);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-95514712" onclick="DISQUS.dtpl.actions.fire('comments.reply', 95514712, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-95514712"></div> <div id="comment-91292128"></div><li id="dsq-comment-91292128" style="margin-left:0px;" class="dsq-comment dsq-odd dsq-comment-is-parent"> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-91292128" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-91292128" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-91292128" class="dsq-header-avatar"> <a id="dsq-avatar-91292128" class="dsq-avatar dsq-tt" title="Expand nils's profile" href="http://disqus.com/guest/513d79940a586a121c7a740ffbc6efd7/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 91292128, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-91292128" class="dsq-comment-cite"> <a id="dsq-author-user-91292128" href="http://blog.srvme.de/" target="_blank" rel="nofollow">nils</a> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-91292128" onclick="DISQUS.dtpl.actions.fire('comments.permalink',91292128);" title="Link to comment by nils">11 months ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 91292128);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-91292128" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-91292128"> <div class="dsq-comment-text" id="dsq-comment-text-91292128"> the for loop over variables in a object is not that good:<br><a href="http://erik.eae.net/archives/2005/06/06/22.13.54/" rel="nofollow">http://erik.eae.net/archives/2...</a><br><br>when using prototype you have to replace in your script:<br>var keys = [];<br>for (var i in a) keys.push(i);<br>for (var i in b) keys.push(i);<br>keys.sort();<br><br>by:<br><br>var keys = [];<br>for (var i in a) if(a.hasOwnProperty(i)) keys.push(i);<br>for (var i in b) if(b.hasOwnProperty(i)) keys.push(i);<br>keys.sort(); </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-91292128"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-91292128" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 91292128, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-91292128" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 91292128);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-91292128" onclick="DISQUS.dtpl.actions.fire('comments.reply', 91292128, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-91292128"></div> <div id="comment-91325696"></div><li id="dsq-comment-91325696" style="margin-left:30px;" class="dsq-comment dsq-comment child dsq-depth-1 dsq-parent-is-91292128 special dsq-special dsq-moderator dsq-even "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-91325696" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-91325696" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-91325696" class="dsq-header-avatar"> <a id="dsq-avatar-91325696" class="dsq-avatar dsq-tt" title="Expand tlrobinson's profile" href="http://disqus.com/tlrobinson/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 91325696, null);"> <img src="JSON%20Diff_files/avatar32_003.jpg" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-91325696" class="dsq-comment-cite"> <a id="dsq-author-user-91325696" href="http://tlrobinson.net/" target="_blank" rel="nofollow">tlrobinson</a> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-91325696" onclick="DISQUS.dtpl.actions.fire('comments.permalink',91325696);" title="Link to comment by tlrobinson">11 months ago</a> </span><a onclick="DISQUS.dtpl.actions.fire('comments.showParent',91292128); return false" href="#comment-91292128" title="Jump to comment" class="dsq-reply-link">in reply to nils</a> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 91325696);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-91325696" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-91325696"> <div class="dsq-comment-text" id="dsq-comment-text-91325696"> + That's true, if something modifies Object.prototype, which +nothing in this page does, thus the check isn't necessary in this case. + </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-91325696"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-91325696" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 91325696, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-91325696" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 91325696);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-91325696" onclick="DISQUS.dtpl.actions.fire('comments.reply', 91325696, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-91325696"></div> <div id="comment-88878316"></div><li id="dsq-comment-88878316" style="margin-left:0px;" class="dsq-comment dsq-odd "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-88878316" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-88878316" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-88878316" class="dsq-header-avatar"> <a id="dsq-avatar-88878316" class="dsq-avatar dsq-tt" title="Expand james swanson's profile" href="http://disqus.com/twitter-14184379/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 88878316, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-88878316" class="dsq-comment-cite"> <a id="dsq-author-user-88878316" href="http://twitter.com/jswanson" target="_blank" rel="nofollow">james swanson</a> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-88878316" onclick="DISQUS.dtpl.actions.fire('comments.permalink',88878316);" title="Link to comment by james swanson">11 months ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 88878316);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-88878316" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-88878316"> <div class="dsq-comment-text" id="dsq-comment-text-88878316"> Awesome tool. Saved me a lot of time.<br><br>Suggestion: little summary section to list total adds, removes, and changes. </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-88878316"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-88878316" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 88878316, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-88878316" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 88878316);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-88878316" onclick="DISQUS.dtpl.actions.fire('comments.reply', 88878316, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-88878316"></div> <div id="comment-82309743"></div><li id="dsq-comment-82309743" style="margin-left:0px;" class="dsq-comment dsq-even "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-82309743" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-82309743" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-82309743" class="dsq-header-avatar"> <a id="dsq-avatar-82309743" class="dsq-avatar dsq-tt" title="Expand Pravin Chikhale1's profile" href="http://disqus.com/guest/f579b9b40478b96e98bb4ec9058446ef/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 82309743, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-82309743" class="dsq-comment-cite"> <span id="dsq-author-user-82309743">Pravin Chikhale1</span> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-82309743" onclick="DISQUS.dtpl.actions.fire('comments.permalink',82309743);" title="Link to comment by Pravin Chikhale1">1 year ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 82309743);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-82309743" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-82309743"> <div class="dsq-comment-text" id="dsq-comment-text-82309743"> Really COOL!!! :) </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-82309743"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-82309743" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 82309743, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-82309743" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 82309743);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-82309743" onclick="DISQUS.dtpl.actions.fire('comments.reply', 82309743, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-82309743"></div> <div id="comment-48183174"></div><li id="dsq-comment-48183174" style="margin-left:0px;" class="dsq-comment dsq-odd "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-48183174" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-48183174" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-48183174" class="dsq-header-avatar"> <a id="dsq-avatar-48183174" class="dsq-avatar dsq-tt" title="Expand hurricane flow's profile" href="http://disqus.com/guest/81d6aa4a3fb7dccd07ca625b23e5c3ff/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 48183174, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-48183174" class="dsq-comment-cite"> <span id="dsq-author-user-48183174">hurricane flow</span> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-48183174" onclick="DISQUS.dtpl.actions.fire('comments.permalink',48183174);" title="Link to comment by hurricane flow">1 year ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 48183174);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-48183174" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-48183174"> <div class="dsq-comment-text" id="dsq-comment-text-48183174"> awesome solution! </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-48183174"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-48183174" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 48183174, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-48183174" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 48183174);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-48183174" onclick="DISQUS.dtpl.actions.fire('comments.reply', 48183174, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-48183174"></div> <div id="comment-33449360"></div><li id="dsq-comment-33449360" style="margin-left:0px;" class="dsq-comment dsq-even "> <!-- placeholder for collapsed comment block (inserted dynamically later) --> <div id="dsq-collapsed-comment-33449360" class="dsq-collapsed-comment"></div> <div class="dsq-full-comment"> <!-- wraps header, body, footer --> <div id="dsq-comment-header-33449360" class="dsq-comment-header"> <table> <tbody><tr> <td id="dsq-header-avatar-33449360" class="dsq-header-avatar"> <a id="dsq-avatar-33449360" class="dsq-avatar dsq-tt" title="Expand PragueExpat's profile" href="http://disqus.com/guest/c1278b3f4006256da691743ce4bcfc50/" onclick="return DISQUS.dtpl.actions.fire('profile.show', 33449360, null);"> <img src="JSON%20Diff_files/noavatar32.png" class="" alt="" height="32" width="32"> </a> </td> <td class="dsq-comment-header-meta"> <div class="dsq-comment-header-meta-wrapper"> <cite id="dsq-cite-33449360" class="dsq-comment-cite"> <span id="dsq-author-user-33449360">PragueExpat</span> <img src="JSON%20Diff_files/moderator.png" class="dsq-moderator-star" alt="Moderator" title="Moderator" height="14" width="15"> </cite> <span class="dsq-comment-header-time"> <a href="#comment-33449360" onclick="DISQUS.dtpl.actions.fire('comments.permalink',33449360);" title="Link to comment by PragueExpat">1 year ago</a> </span> <a class="dsq-comment-hide-thread" href="#" onclick="return DISQUS.dtpl.actions.fire('comments.collapse', this, 33449360);" title="Collapse thread"></a> </div> </td> </tr> </tbody></table> </div> <div id="dsq-comment-body-33449360" class="dsq-comment-body"> <div class="dsq-comment-message" id="dsq-comment-message-33449360"> <div class="dsq-comment-text" id="dsq-comment-text-33449360"> Thanks for this tool. It is extremely helpful. </div> </div> </div> <div class="dsq-comment-footer" id="dsq-comment-footer-33449360"> <div class="dsq-comment-footer-left"> <a href="#" id="dsq-post-report-33449360" class="dsq-post-report" onclick="return DISQUS.dtpl.actions.fire('comments.report', 33449360, false);">Flag</a> </div> <div class="dsq-comment-footer-right"> <span class="dsq-comment-buttons"> <span id="dsq-like-33449360" class="dsq-like"> <button type="button" class="dsq-button-small " data-vote="0" onclick="DISQUS.dtpl.actions.fire('comments.like', this, 33449360);"> Like </button> </span> <span class="dsq-comment-footer-reply" id="dsq-comment-footer-reply-33449360" onclick="DISQUS.dtpl.actions.fire('comments.reply', 33449360, this);"> <button type="button" class="dsq-button-small">Reply</button> <button type="button" class="dsq-comment-footer-reply-tab">Reply</button> <span></span> </span> </span> </div> <!-- /comment-footer-right --> </div> <!-- /comment-footer --> </div> <!-- dsq-full-comment --></li><div id="dsq-append-post-33449360"></div> </ul> <div id="dsq-pagination" class="dsq-pagination"> </div> </div><div> </div></div> +<script type="text/javascript" charset="utf-8"> + var disqus_developer = true; +</script> +<script type="text/javascript" src="JSON%20Diff_files/embed.js"></script> +<noscript><p><a href="http://tlrobinson.disqus.com/?url=ref">View the forum thread.</a></p></noscript> +<div id="footer"> + <p> + +<a href="http://news.ycombinator.com/" onclick="window.location='http://news.ycombinator.com/submitlink?u='+encodeURIComponent(document.location)+'&t='+encodeURIComponent(document.title); return false"> + <img alt="Submit to Reddit" src="JSON%20Diff_files/badge-hn.png" height="15" width="80"> +</a> + +<a href="http://www.reddit.com/submit" onclick="window.location='http://www.reddit.com/submit?url='+encodeURIComponent(document.location)+'&title='+encodeURIComponent(document.title); return false"> + <img alt="Submit to Hacker News" src="JSON%20Diff_files/badge-reddit.png" height="15" width="80"> +</a> + +<a href="http://ycombinator.com/"> + <img alt="Y Combinator" src="JSON%20Diff_files/badge-yc.png" height="15" width="80"> +</a> + +<a href="http://catb.org/%7Eesr/faqs/hacker-howto.html#what_is"> + <img alt="How To Become A Hacker" src="JSON%20Diff_files/hacker.png" height="15" width="80"> +</a> + +<!-- <a href="http://www.dreamhost.com/green.cgi"> + <img alt="Green Web Hosting! This site hosted by DreamHost." src="https://secure.newdream.net/green3.gif" height="15" width="80"> +</a> --> + +<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/us/"> + <img alt="Creative Commons License" src="JSON%20Diff_files/badge-cc-by-nc.png" height="15" width="80"> +</a> + +<a href="http://validator.w3.org/check?uri=referer"> + <img alt="Valid HTML 4.01 Strict" src="JSON%20Diff_files/badge-w3c.png" height="15" width="80"> +</a> + + +<!-- <script type="text/javascript" src="http://www.cornify.com/js/cornify.js"></script> +<a href="#" onclick="cornify_add();return false;"><img src="http://www.cornify.com/assets/cornify.gif" width="61" height="16" border="0" alt="Cornify"></a> --> + +<br> +<br> + +<iframe src="JSON%20Diff_files/like.html" allowtransparency="true" style="border: 1px none; overflow: hidden; width: 450px;" frameborder="0" scrolling="no"> +</iframe> </p> + <p> + © 2006-2010 Thomas Robinson. <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/us/">Some rights reserved</a>. </p> +</div> +<script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-1520701-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga); + })(); +</script> + +<script type="text/javascript"> var mp_protocol = (('https:' == document.location.protocol) ? 'https://' : 'http://'); document.write(unescape('%3Cscript src="' + mp_protocol + 'api.mixpanel.com/site_media/js/api/mixpanel.js" type="text/javascript"%3E%3C/script%3E')); </script><script src="JSON%20Diff_files/mixpanel.js" type="text/javascript"></script> <script type="text/javascript"> try { var mpmetrics = new MixpanelLib('3889b1fe2f191cc24ce4c542efeffd2e'); } catch(err) { null_fn = function () {}; var mpmetrics = { track: null_fn, track_funnel: null_fn, register: null_fn, register_once: null_fn, register_funnel: null_fn }; } </script> + + + +<iframe src="JSON%20Diff_files/def.html" style="position: absolute; top: -2000px; left: 0px;" id="easyXDM_DISQUS_net_default9900_provider" name="easyXDM_DISQUS_net_default9900_provider" frameborder="0"></iframe></body></html>
\ No newline at end of file |