/** * Class Applier module for Rangy. * Adds, removes and toggles classes on Ranges and Selections * * Part of Rangy, a cross-browser JavaScript range and selection library * http://code.google.com/p/rangy/ * * Depends on Rangy core. * * Copyright 2013, Tim Down * Licensed under the MIT license. * Version: 1.3alpha.804 * Build date: 8 December 2013 */ rangy.createModule("ClassApplier",["WrappedSelection"],function(a,b){function g(a,b){for(var c in a)if(a.hasOwnProperty(c)&&b(c,a[c])===!1)return!1;return!0}function h(a){return a.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function i(a,b){return a.className&&(new RegExp("(?:^|\\s)"+b+"(?:\\s|$)")).test(a.className)}function j(a,b){a.className?i(a,b)||(a.className+=" "+b):a.className=b}function l(a){return a.split(/\s+/).sort().join(" ")}function m(a){return l(a.className)}function n(a,b){return m(a)==m(b)}function o(a,b,c,d,e){var f=a.node,g=a.offset,h=f,i=g;f==d&&g>e&&++i,f==b&&(g==c||g==c+1)&&(h=d,i+=e-c),f==b&&g>c+1&&--i,a.node=h,a.offset=i}function p(a,b,c){a.node==b&&a.offset>c&&--a.offset}function q(a,b,d,e){d==-1&&(d=b.childNodes.length);var f=a.parentNode,g=c.getNodeIndex(a);for(var h=0,i;i=e[h++];)o(i,f,g,b,d);b.childNodes.length==d?b.appendChild(a):b.insertBefore(a,b.childNodes[d])}function r(a,b){var d=a.parentNode,e=c.getNodeIndex(a);for(var f=0,g;g=b[f++];)p(g,d,e);a.parentNode.removeChild(a)}function s(a,b,c,d,e){var f,g=[];while(f=a.firstChild)q(f,b,c++,e),g.push(f);return d&&a.parentNode.removeChild(a),g}function t(a,b){return s(a,a.parentNode,c.getNodeIndex(a),!0,b)}function u(a,b){var c=a.cloneRange();c.selectNodeContents(b);var d=c.intersection(a),e=d?d.toString():"";return c.detach(),e!=""}function v(a){var b=a.getNodes([3]),c=0,d;while((d=b[c])&&!u(a,d))++c;var e=b.length-1;while((d=b[e])&&!u(a,d))--e;return b.slice(c,e+1)}function w(a,b){if(a.attributes.length!=b.attributes.length)return!1;for(var c=0,d=a.attributes.length,e,f,g;c0&&b1){var d=[],e=0,f,g;for(var h=0,i=b.length,j,k;h0){g.removeChild(f),g.hasChildNodes()||g.parentNode.removeChild(g);if(a)for(j=0;k=a[j++];)k.node==f&&(k.node=c,k.offset+=e)}d[h]=f.data,e+=f.data.length}c.data=d.join("")}return c.data},getLength:function(){var a=this.textNodes.length,b=0;while(a--)b+=this.textNodes[a].length;return b},toString:function(){var a=[];for(var b=0,c=this.textNodes.length;b