From c79f445f451b2305a2d340de5ec539c78a76a284 Mon Sep 17 00:00:00 2001 From: Julian Shapiro Date: Fri, 8 Aug 2014 11:04:54 -0700 Subject: [PATCH] 1.1.1 Support for older versions of jQuery. JSON additions. --- bower.json | 7 ++++--- component.json | 5 +++-- jquery.blast.js | 14 ++++++++++---- jquery.blast.min.js | 4 ++-- package.json | 19 ++++++++++++------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/bower.json b/bower.json index 0a3d474..0783bcc 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { - "name": "blast", - "version": "1.1.0", + "name": "blast-text", + "version": "1.1.1", "homepage": "http://julian.com/research/blast", "authors": [{ "name" : "Julian Shapiro", @@ -15,6 +15,7 @@ "search", "animation", "jquery", + "zepto", "character", "word", "sentence" @@ -33,4 +34,4 @@ "type" : "git", "url" : "http://github.com/julianshapiro/velocity.git" } -} +} \ No newline at end of file diff --git a/component.json b/component.json index d18a502..325f899 100644 --- a/component.json +++ b/component.json @@ -1,7 +1,7 @@ { "name": "blast", "repository": "julianshapiro/blast", - "version": "1.1.0", + "version": "1.1.1", "description": "Blast text apart to make it manipulable.", "keywords": [ "text", @@ -10,6 +10,7 @@ "search", "animation", "jquery", + "zepto", "character", "word", "sentence" @@ -22,4 +23,4 @@ "dependencies": { "jquery/jquery": "*" } -} +} \ No newline at end of file diff --git a/jquery.blast.js b/jquery.blast.js index 160ee01..1ec253f 100644 --- a/jquery.blast.js +++ b/jquery.blast.js @@ -4,7 +4,7 @@ /*! * Blast.js: Blast text apart to make it manipulable. -* @version 1.1.0 +* @version 1.1.1 * @dependency Works with both jQuery and Zepto. * @docs julian.com/research/blast * @license Copyright 2014 Julian Shapiro. MIT License: http://en.wikipedia.org/wiki/MIT_License @@ -230,7 +230,7 @@ ***********************/ /* Ensure that the opts.delimiter search variable is a non-empty string. */ - if (opts.search.length && ($.type(opts.search) === "string" || $.type(opts.search) === "number")) { + if (opts.search.length && (typeof opts.search === "string" || /^\d/.test(parseFloat(opts.search)))) { /* Since the search is performed as a Regex (see below), we escape the string's Regex meta-characters. */ opts.delimiter = opts.search.toString().replace(/[-[\]{,}(.)*+?|^$\\\/]/g, "\\$&"); @@ -242,7 +242,7 @@ delimiterRegex = new RegExp("(?:^|[^-" + characterRanges.latinLetters + "])(" + opts.delimiter + "('s)?)(?![-" + characterRanges.latinLetters + "])", "i"); } else { /* Normalize the string's case for the delimiter switch check below. */ - if ($.type(opts.delimiter) === "string") { + if (typeof opts.delimiter === "string") { opts.delimiter = opts.delimiter.toLowerCase(); } @@ -397,7 +397,6 @@ $this .removeClass(NAME + "-root") - .data(NAME, undefined) .removeAttr("aria-label") .find("." + NAME) .each(function () { @@ -419,6 +418,13 @@ } }); + /* Zepto core doesn't include cache-based $.data(), so we mimic data-attr removal by setting it to undefined. */ + if (window.Zepto) { + $this.data(NAME, undefined); + } else { + $this.removeData(NAME); + } + if (opts.debug) { console.log(NAME + ": Reversed Blast" + ($this.attr("id") ? " on #" + $this.attr("id") + "." : ".") + (skippedDescendantRoot ? " Skipped reversal on the children of one or more descendant root elements." : "")); console.timeEnd("blast reversal"); diff --git a/jquery.blast.min.js b/jquery.blast.min.js index 311aef5..56ff289 100644 --- a/jquery.blast.min.js +++ b/jquery.blast.min.js @@ -1,8 +1,8 @@ /*! * Blast.js: Blast text apart to make it manipulable. -* @version 1.1.0 +* @version 1.1.1 * @dependency Works with both jQuery and Zepto. * @docs julian.com/research/blast * @license Copyright 2014 Julian Shapiro. MIT License: http://en.wikipedia.org/wiki/MIT_License */ -!function($,e,t,a){var n=function(){if(t.documentMode)return t.documentMode;for(var e=7;e>0;e--){var n=t.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return n=null,e;n=null}return a}(),r=e.console||{log:function(){},time:function(){}},i="blast",s={latinPunctuation:"–—′’'“″„\"(«.…¡¿′’'”″“\")».…!?",latinLetters:"\\u0041-\\u005A\\u0061-\\u007A\\u00C0-\\u017F\\u0100-\\u01FF\\u0180-\\u027F"},l={abbreviations:new RegExp("[^"+s.latinLetters+"](e\\.g\\.)|(i\\.e\\.)|(mr\\.)|(mrs\\.)|(ms\\.)|(dr\\.)|(prof\\.)|(esq\\.)|(sr\\.)|(jr\\.)[^"+s.latinLetters+"]","ig"),innerWordPeriod:new RegExp("["+s.latinLetters+"].["+s.latinLetters+"]","ig"),onlyContainsPunctuation:new RegExp("[^"+s.latinPunctuation+"]"),adjoinedPunctuation:new RegExp("^["+s.latinPunctuation+"]+|["+s.latinPunctuation+"]+$","g"),skippedElements:/(script|style|select|textarea)/i,hasPluginClass:new RegExp("(^| )"+i+"( |$)","gi")};$.fn[i]=function(e){function d(e){return e.replace(l.abbreviations,function(e){return e.replace(/\./g,"{{46}}")}).replace(l.innerWordPeriod,function(e){return e.replace(/\./g,"{{46}}")})}function o(e){return e.replace(/{{(\d{1,3})}}/g,function(e,t){return String.fromCharCode(t)})}function c(e,a){var n=t.createElement(a.tag);if(n.className=i,a.customClass&&(n.className+=" "+a.customClass,a.generateIndexID&&(n.id=a.customClass+"-"+p.blastedIndex)),a.generateValueClass===!0&&!a.search&&("character"===a.delimiter||"word"===a.delimiter)){var r,s=e.data;"word"===a.delimiter&&l.onlyContainsPunctuation.test(s)&&(s=s.replace(l.adjoinedPunctuation,"")),r=i+"-"+a.delimiter.toLowerCase()+"-"+s.toLowerCase(),n.className+=" "+r}return a.aria&&n.setAttribute("aria-hidden","true"),n.appendChild(e.cloneNode(!1)),n}function u(e,t){var a=-1,n=0;if(3===e.nodeType&&e.data.length){if(p.nodeBeginning&&(e.data=t.search||"sentence"!==t.delimiter?o(e.data):d(e.data),p.nodeBeginning=!1),a=e.data.search(h),-1!==a){var r=e.data.match(h),i=r[0],s=r[1]||!1;p.blastedIndex++,""===i?a++:s&&s!==i&&(a+=i.indexOf(s),i=s);var g=e.splitText(a);g.splitText(i.length),n=1,t.search||"sentence"!==t.delimiter||(g.data=o(g.data));var m=c(g,t,p.blastedIndex);g.parentNode.replaceChild(m,g),p.wrappers.push(m)}}else if(1===e.nodeType&&e.hasChildNodes()&&!l.skippedElements.test(e.tagName)&&!l.hasPluginClass.test(e.className))for(var f=0;f=n&&t.firstChild.nodeName,t.replaceChild(this.firstChild,this),t.normalize()}}),t.debug&&(r.log(i+": Reversed Blast"+(e.attr("id")?" on #"+e.attr("id")+".":".")+(s?" Skipped reversal on the children of one or more descendant root elements.":"")),r.timeEnd("blast reversal"))}var m=$.extend({},$.fn[i].defaults,e),h,p={};if(!m.search.length||"string"!==$.type(m.search)&&"number"!==$.type(m.search))switch("string"===$.type(m.delimiter)&&(m.delimiter=m.delimiter.toLowerCase()),m.delimiter){case"letter":case"char":case"character":h=/(\S)/;break;case"word":h=/\s*(\S+)\s*/;break;case"sentence":h=/(?=\S)(([.]{2,})?[^!?]+?([.…!?]+|(?=\s+$)|$)(\s*[′’'”″“")»]+)*)/;break;case"element":h=/(?=\S)([\S\s]*\S)/;break;default:if(!(m.delimiter instanceof RegExp))return r.log(i+": Unrecognized delimiter, empty search string, or invalid custom Regex. Aborting."),!0;h=m.delimiter}else m.delimiter=m.search.toString().replace(/[-[\]{,}(.)*+?|^$\\\/]/g,"\\$&"),h=new RegExp("(?:^|[^-"+s.latinLetters+"])("+m.delimiter+"('s)?)(?![-"+s.latinLetters+"])","i");if(this.each(function(){var n=$(this),s=n.text();if(e!==!1){p={blastedIndex:0,nodeBeginning:!1,wrappers:[]},n.data(i)===a||"search"===n.data(i)&&m.search!==!1||(g(n,m),m.debug&&r.log(i+": Removed element's existing Blast call.")),n.data(i,m.search!==!1?"search":m.delimiter),m.aria&&n.attr("aria-label",s),m.stripHTMLTags&&n.html(s);try{t.createElement(m.tag)}catch(l){m.tag="span",m.debug&&r.log(i+": Invalid tag supplied. Defaulting to span.")}n.addClass(i+"-root"),m.debug&&r.time(i),u(this,m),m.debug&&r.timeEnd(i)}else e===!1&&n.data(i)!==a&&g(n,m);m.debug&&$.each(p.wrappers,function(e,t){r.log(i+" ["+m.delimiter+"] "+this.outerHTML),this.style.backgroundColor=e%2?"#f12185":"#075d9a"})}),e!==!1&&m.returnGenerated===!0){var f=$().add(p.wrappers);return f.prevObject=this,f.context=this.context,f}return this},$.fn.blast.defaults={returnGenerated:!0,delimiter:"word",tag:"span",search:!1,customClass:"",generateIndexID:!1,generateValueClass:!1,stripHTMLTags:!1,aria:!0,debug:!1}}(window.jQuery||window.Zepto,window,document); \ No newline at end of file +!function($,e,t,a){var n=function(){if(t.documentMode)return t.documentMode;for(var e=7;e>0;e--){var n=t.createElement("div");if(n.innerHTML="",n.getElementsByTagName("span").length)return n=null,e;n=null}return a}(),r=e.console||{log:function(){},time:function(){}},i="blast",s={latinPunctuation:"–—′’'“″„\"(«.…¡¿′’'”″“\")».…!?",latinLetters:"\\u0041-\\u005A\\u0061-\\u007A\\u00C0-\\u017F\\u0100-\\u01FF\\u0180-\\u027F"},l={abbreviations:new RegExp("[^"+s.latinLetters+"](e\\.g\\.)|(i\\.e\\.)|(mr\\.)|(mrs\\.)|(ms\\.)|(dr\\.)|(prof\\.)|(esq\\.)|(sr\\.)|(jr\\.)[^"+s.latinLetters+"]","ig"),innerWordPeriod:new RegExp("["+s.latinLetters+"].["+s.latinLetters+"]","ig"),onlyContainsPunctuation:new RegExp("[^"+s.latinPunctuation+"]"),adjoinedPunctuation:new RegExp("^["+s.latinPunctuation+"]+|["+s.latinPunctuation+"]+$","g"),skippedElements:/(script|style|select|textarea)/i,hasPluginClass:new RegExp("(^| )"+i+"( |$)","gi")};$.fn[i]=function(d){function o(e){return e.replace(l.abbreviations,function(e){return e.replace(/\./g,"{{46}}")}).replace(l.innerWordPeriod,function(e){return e.replace(/\./g,"{{46}}")})}function c(e){return e.replace(/{{(\d{1,3})}}/g,function(e,t){return String.fromCharCode(t)})}function u(e,a){var n=t.createElement(a.tag);if(n.className=i,a.customClass&&(n.className+=" "+a.customClass,a.generateIndexID&&(n.id=a.customClass+"-"+f.blastedIndex)),a.generateValueClass===!0&&!a.search&&("character"===a.delimiter||"word"===a.delimiter)){var r,s=e.data;"word"===a.delimiter&&l.onlyContainsPunctuation.test(s)&&(s=s.replace(l.adjoinedPunctuation,"")),r=i+"-"+a.delimiter.toLowerCase()+"-"+s.toLowerCase(),n.className+=" "+r}return a.aria&&n.setAttribute("aria-hidden","true"),n.appendChild(e.cloneNode(!1)),n}function g(e,t){var a=-1,n=0;if(3===e.nodeType&&e.data.length){if(f.nodeBeginning&&(e.data=t.search||"sentence"!==t.delimiter?c(e.data):o(e.data),f.nodeBeginning=!1),a=e.data.search(p),-1!==a){var r=e.data.match(p),i=r[0],s=r[1]||!1;f.blastedIndex++,""===i?a++:s&&s!==i&&(a+=i.indexOf(s),i=s);var d=e.splitText(a);d.splitText(i.length),n=1,t.search||"sentence"!==t.delimiter||(d.data=c(d.data));var m=u(d,t,f.blastedIndex);d.parentNode.replaceChild(m,d),f.wrappers.push(m)}}else if(1===e.nodeType&&e.hasChildNodes()&&!l.skippedElements.test(e.tagName)&&!l.hasPluginClass.test(e.className))for(var h=0;h=n&&t.firstChild.nodeName,t.replaceChild(this.firstChild,this),t.normalize()}}),e.Zepto?t.data(i,a):t.removeData(i),s.debug&&(r.log(i+": Reversed Blast"+(t.attr("id")?" on #"+t.attr("id")+".":".")+(l?" Skipped reversal on the children of one or more descendant root elements.":"")),r.timeEnd("blast reversal"))}var h=$.extend({},$.fn[i].defaults,d),p,f={};if(h.search.length&&("string"==typeof h.search||/^\d/.test(parseFloat(h.search))))h.delimiter=h.search.toString().replace(/[-[\]{,}(.)*+?|^$\\\/]/g,"\\$&"),p=new RegExp("(?:^|[^-"+s.latinLetters+"])("+h.delimiter+"('s)?)(?![-"+s.latinLetters+"])","i");else switch("string"==typeof h.delimiter&&(h.delimiter=h.delimiter.toLowerCase()),h.delimiter){case"letter":case"char":case"character":p=/(\S)/;break;case"word":p=/\s*(\S+)\s*/;break;case"sentence":p=/(?=\S)(([.]{2,})?[^!?]+?([.…!?]+|(?=\s+$)|$)(\s*[′’'”″“")»]+)*)/;break;case"element":p=/(?=\S)([\S\s]*\S)/;break;default:if(!(h.delimiter instanceof RegExp))return r.log(i+": Unrecognized delimiter, empty search string, or invalid custom Regex. Aborting."),!0;p=h.delimiter}if(this.each(function(){var e=$(this),n=e.text();if(d!==!1){f={blastedIndex:0,nodeBeginning:!1,wrappers:[]},e.data(i)===a||"search"===e.data(i)&&h.search!==!1||(m(e,h),h.debug&&r.log(i+": Removed element's existing Blast call.")),e.data(i,h.search!==!1?"search":h.delimiter),h.aria&&e.attr("aria-label",n),h.stripHTMLTags&&e.html(n);try{t.createElement(h.tag)}catch(s){h.tag="span",h.debug&&r.log(i+": Invalid tag supplied. Defaulting to span.")}e.addClass(i+"-root"),h.debug&&r.time(i),g(this,h),h.debug&&r.timeEnd(i)}else d===!1&&e.data(i)!==a&&m(e,h);h.debug&&$.each(f.wrappers,function(e,t){r.log(i+" ["+h.delimiter+"] "+this.outerHTML),this.style.backgroundColor=e%2?"#f12185":"#075d9a"})}),d!==!1&&h.returnGenerated===!0){var b=$().add(f.wrappers);return b.prevObject=this,b.context=this.context,b}return this},$.fn.blast.defaults={returnGenerated:!0,delimiter:"word",tag:"span",search:!1,customClass:"",generateIndexID:!1,generateValueClass:!1,stripHTMLTags:!1,aria:!0,debug:!1}}(window.jQuery||window.Zepto,window,document); \ No newline at end of file diff --git a/package.json b/package.json index 9ff0b2c..8d25768 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,17 @@ { - "name": "blast", - "version": "1.1.0", + "name": "blast-text", + "version": "1.1.1", "description": "Blast text apart to make it manipulable.", "homepage": "http://julian.com/research/blast", "license": "MIT", - "author": "Julian Shapiro (http://julian.com)", - "main": "jquery.velocity.js", + "authors": [ + { + "name": "Julian Shapiro", + "url": "http://julian.com/" + } + ], + "main": "jquery.blast.js", "repository": "julianshapiro/blast", - "private": true, "keywords": [ "text", "parse", @@ -15,6 +19,7 @@ "search", "animation", "jquery", + "zepto", "character", "word", "sentence" @@ -24,6 +29,6 @@ "jquery.blast.min.js" ], "dependencies": { - "jquery": ">= 1.4.3" + "jquery": ">= 1.3.0" } -} +} \ No newline at end of file