From 6195ca185dbb55a4554ed68cb5c277feed335fee Mon Sep 17 00:00:00 2001 From: Bruno Leonardo Michels Date: Wed, 9 May 2018 16:05:01 -0300 Subject: [PATCH 1/5] Fix iOS emojis --- dist/circletype.min.js | 4 ++-- src/utils/splitNode.js | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dist/circletype.min.js b/dist/circletype.min.js index 7a4f467..7b4887e 100644 --- a/dist/circletype.min.js +++ b/dist/circletype.min.js @@ -1,8 +1,8 @@ /*! * circletype 2.2.0 * A JavaScript library that lets you curve type on the web. - * Copyright © 2014-2017 Peter Hrynkow + * Copyright © 2014-2018 Peter Hrynkow * Licensed MIT * https://github.com/peterhry/CircleType#readme */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CircleType=e():t.CircleType=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=Math.PI/180;e.default=function(t){return t*n}},function(t,e,i){"use strict";var n=i(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n);t.exports=r.default},function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,h.default)(e,y(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e);return t.innerText.trim().split("").map(function(t){var e=i.cloneNode();return e.insertAdjacentHTML("afterbegin"," "===t?" ":t),e})}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t*(1-Math.cos((0,r.default)(e/2)))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return 2*t*Math.sin((0,r.default)(e/2))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t.reduce(function(t,i){var n=i.width,o=(0,r.default)(n/e);return{"θ":t.θ+o,rotations:t.rotations.concat([t.θ+o/2])}},{"θ":0,rotations:[]})}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=180/Math.PI;e.default=function(t){return t*n}}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CircleType=e():t.CircleType=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=Math.PI/180;e.default=function(t){return t*n}},function(t,e,i){"use strict";var n=i(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n);t.exports=r.default},function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,d.default)(e,y(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e),n=t.innerText.trim(),r=[],o=!0,u=!1,a=void 0;try{for(var s,f=n[Symbol.iterator]();!(o=(s=f.next()).done);o=!0){var l=s.value,c=i.cloneNode();c.insertAdjacentHTML("afterbegin"," "===l?" ":l),r.push(c)}}catch(t){u=!0,a=t}finally{try{!o&&f.return&&f.return()}finally{if(u)throw a}}return r}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t*(1-Math.cos((0,r.default)(e/2)))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return 2*t*Math.sin((0,r.default)(e/2))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t.reduce(function(t,i){var n=i.width,o=(0,r.default)(n/e);return{"θ":t.θ+o,rotations:t.rotations.concat([t.θ+o/2])}},{"θ":0,rotations:[]})}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=180/Math.PI;e.default=function(t){return t*n}}])}); \ No newline at end of file diff --git a/src/utils/splitNode.js b/src/utils/splitNode.js index ffb53b4..e17316d 100644 --- a/src/utils/splitNode.js +++ b/src/utils/splitNode.js @@ -10,11 +10,17 @@ export default (node, wrapper = 'span') => { const wrapperElement = document.createElement(wrapper); - return node.innerText.trim().split('').map(char => { + const trimmedText = node.innerText.trim(); + const elements = []; + + // eslint-disable-next-line + for (const char of trimmedText) { const parent = wrapperElement.cloneNode(); parent.insertAdjacentHTML('afterbegin', char === ' ' ? ' ' : char); - return parent; - }); + elements.push(parent); + } + + return elements; }; From 5d73aae41a448a6f6279d1201b38e1ea321ccaba Mon Sep 17 00:00:00 2001 From: Bruno Leonardo Michels Date: Wed, 9 May 2018 20:22:37 -0300 Subject: [PATCH 2/5] Fix edge case iOS emotes --- src/utils/splitNode.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/utils/splitNode.js b/src/utils/splitNode.js index e17316d..ecacf8c 100644 --- a/src/utils/splitNode.js +++ b/src/utils/splitNode.js @@ -11,10 +11,24 @@ export default (node, wrapper = 'span') => { const wrapperElement = document.createElement(wrapper); const trimmedText = node.innerText.trim(); + + const chars = []; + // eslint-disable-next-line + for (let i = 0; i < str.length - 1; ++i) { + const char = str[i]; + + if (str[i + 1].charCodeAt(0) === 65039) { + char += str[i + 1]; + i++; + } + + chars.push(char); + } + const elements = []; // eslint-disable-next-line - for (const char of trimmedText) { + for (const char of chars) { const parent = wrapperElement.cloneNode(); parent.insertAdjacentHTML('afterbegin', char === ' ' ? ' ' : char); From b21f78db7702f353048b34138e48efc102d8b0b0 Mon Sep 17 00:00:00 2001 From: Bruno Leonardo Michels Date: Wed, 9 May 2018 20:28:16 -0300 Subject: [PATCH 3/5] Fix --- src/utils/splitNode.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/utils/splitNode.js b/src/utils/splitNode.js index ecacf8c..6b078bf 100644 --- a/src/utils/splitNode.js +++ b/src/utils/splitNode.js @@ -14,12 +14,12 @@ export default (node, wrapper = 'span') => { const chars = []; // eslint-disable-next-line - for (let i = 0; i < str.length - 1; ++i) { - const char = str[i]; + for (let i = 0; i < trimmedText.length; i++) { + let char = trimmedText[i]; - if (str[i + 1].charCodeAt(0) === 65039) { - char += str[i + 1]; - i++; + if (trimmedText[i + 1] && trimmedText[i + 1].charCodeAt(0) === 65039) { + char += trimmedText[i + 1]; + i += 1; } chars.push(char); From b62665f299b48f07a4477f768e388b3ee244bd89 Mon Sep 17 00:00:00 2001 From: Bruno Leonardo Michels Date: Wed, 9 May 2018 20:29:25 -0300 Subject: [PATCH 4/5] Add min file --- dist/circletype.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/circletype.min.js b/dist/circletype.min.js index 7b4887e..068aca2 100644 --- a/dist/circletype.min.js +++ b/dist/circletype.min.js @@ -5,4 +5,4 @@ * Licensed MIT * https://github.com/peterhry/CircleType#readme */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CircleType=e():t.CircleType=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=Math.PI/180;e.default=function(t){return t*n}},function(t,e,i){"use strict";var n=i(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n);t.exports=r.default},function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,d.default)(e,y(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e),n=t.innerText.trim(),r=[],o=!0,u=!1,a=void 0;try{for(var s,f=n[Symbol.iterator]();!(o=(s=f.next()).done);o=!0){var l=s.value,c=i.cloneNode();c.insertAdjacentHTML("afterbegin"," "===l?" ":l),r.push(c)}}catch(t){u=!0,a=t}finally{try{!o&&f.return&&f.return()}finally{if(u)throw a}}return r}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t*(1-Math.cos((0,r.default)(e/2)))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return 2*t*Math.sin((0,r.default)(e/2))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t.reduce(function(t,i){var n=i.width,o=(0,r.default)(n/e);return{"θ":t.θ+o,rotations:t.rotations.concat([t.θ+o/2])}},{"θ":0,rotations:[]})}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=180/Math.PI;e.default=function(t){return t*n}}])}); \ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CircleType=e():t.CircleType=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=Math.PI/180;e.default=function(t){return t*n}},function(t,e,i){"use strict";var n=i(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n);t.exports=r.default},function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,d.default)(e,y(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e),n=t.innerText.trim(),r=[],o=0;o Date: Thu, 10 May 2018 12:35:09 -0300 Subject: [PATCH 5/5] Fix iOS emojis --- dist/circletype.min.js | 2 +- src/utils/splitNode.js | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/dist/circletype.min.js b/dist/circletype.min.js index 068aca2..7d5d999 100644 --- a/dist/circletype.min.js +++ b/dist/circletype.min.js @@ -5,4 +5,4 @@ * Licensed MIT * https://github.com/peterhry/CircleType#readme */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.CircleType=e():t.CircleType=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var r=i[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=Math.PI/180;e.default=function(t){return t*n}},function(t,e,i){"use strict";var n=i(2),r=function(t){return t&&t.__esModule?t:{default:t}}(n);t.exports=r.default},function(t,e,i){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,d.default)(e,y(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e),n=t.innerText.trim(),r=[],o=0;o180?(0,c.default)(e,s):(0,c.default)(o,s)+this._lineHeight;this.container.style.height=f/this._fontSize+"em"}if(this._forceWidth){var l=(0,d.default)(e,m(180,s));this.container.style.width=l/this._fontSize+"em"}return this}}]),t}();e.default=g},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=t.getBoundingClientRect();return{height:e.height,left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:e.width}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"span",i=document.createElement(e),n=t.innerText.trim(),r=[],o=!0,u=!1,a=void 0;try{for(var s,f=n[Symbol.iterator]();!(o=(s=f.next()).done);o=!0){var l=s.value;65039===l.charCodeAt(0)?r[r.length-1]+=l:r.push(l)}}catch(t){u=!0,a=t}finally{try{!o&&f.return&&f.return()}finally{if(u)throw a}}var c=[],h=!0,d=!1,_=void 0;try{for(var v,p=r[Symbol.iterator]();!(h=(v=p.next()).done);h=!0){var y=v.value,m=i.cloneNode();m.insertAdjacentHTML("afterbegin"," "===y?" ":y),c.push(m)}}catch(t){d=!0,_=t}finally{try{!h&&p.return&&p.return()}finally{if(d)throw _}}return c}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t*(1-Math.cos((0,r.default)(e/2)))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return 2*t*Math.sin((0,r.default)(e/2))}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),r=function(t){return t&&t.__esModule?t:{default:t}}(n);e.default=function(t,e){return t.reduce(function(t,i){var n=i.width,o=(0,r.default)(n/e);return{"θ":t.θ+o,rotations:t.rotations.concat([t.θ+o/2])}},{"θ":0,rotations:[]})}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=180/Math.PI;e.default=function(t){return t*n}}])}); \ No newline at end of file diff --git a/src/utils/splitNode.js b/src/utils/splitNode.js index 6b078bf..c61bed7 100644 --- a/src/utils/splitNode.js +++ b/src/utils/splitNode.js @@ -14,15 +14,12 @@ export default (node, wrapper = 'span') => { const chars = []; // eslint-disable-next-line - for (let i = 0; i < trimmedText.length; i++) { - let char = trimmedText[i]; - - if (trimmedText[i + 1] && trimmedText[i + 1].charCodeAt(0) === 65039) { - char += trimmedText[i + 1]; - i += 1; + for (const char of trimmedText) { + if (char.charCodeAt(0) === 65039) { + chars[chars.length - 1] += char; + } else { + chars.push(char); } - - chars.push(char); } const elements = [];