|
780 | 780 | if (arguments[0] === "evenodd" || arguments[1] === "evenodd") {
|
781 | 781 | element.setAttribute("fill-rule", "evenodd");
|
782 | 782 | }
|
783 |
| - |
784 |
| - this.__applyStyleToCurrentElement("fill"); |
785 |
| - this.__applyTransform(element, "fill"); |
786 | 783 | };
|
787 | 784 |
|
788 | 785 | /**
|
789 | 786 | * Sets the stroke property on the current element
|
790 | 787 | */
|
791 | 788 | ctx.prototype.stroke = function () {
|
792 | 789 | var element = getOrCreateElementToApplyStyleTo.call(this, "stroke", "fill");
|
793 |
| - |
794 |
| - this.__applyStyleToCurrentElement("stroke"); |
795 |
| - this.__applyTransform(element, "stroke"); |
796 | 790 | };
|
797 | 791 |
|
798 | 792 | function getOrCreateElementToApplyStyleTo(paint1, paint2) {
|
799 | 793 | var element = this.__currentElement;
|
800 | 794 | var matrixString = this.__currentMatrix.toString();
|
801 | 795 |
|
802 |
| - var currentPath = this.__currentDefaultPath; |
| 796 | + var currentPath = this.__currentDefaultPath; |
803 | 797 | var group = this.__closestGroupOrSvg();
|
804 | 798 | var extras = group.__extras || (group.__extras = {})
|
805 | 799 |
|
806 |
| - var isPath = element.nodeName === "path"; |
807 |
| - if (extras[paint1] || extras[paint2] && extras.matrixString !== matrixString) { |
| 800 | + var isPath = element.nodeName === "path"; |
| 801 | + if (extras[paint1] || extras[paint2] && extras.matrixString !== matrixString) { |
808 | 802 | var pathHasNotChanged = currentPath === extras.currentPath;
|
809 | 803 | if (pathHasNotChanged) {
|
810 | 804 | if (isPath) {
|
|
826 | 820 | extras.currentPath = currentPath;
|
827 | 821 | extras.matrixString = matrixString;
|
828 | 822 |
|
| 823 | + this.__applyStyleToCurrentElement(paint1); |
| 824 | + this.__applyTransform(element, paint1); |
| 825 | + |
829 | 826 | return element;
|
830 | 827 | };
|
831 | 828 |
|
| 829 | + function hashString(string) { |
| 830 | + /** https://github.com/darkskyapp/string-hash **/ |
| 831 | + let hash = 5381; |
| 832 | + let i = string.length; |
| 833 | + while (i) hash = (hash * 33) ^ string.charCodeAt(--i); |
| 834 | + return hash >>> 0; |
| 835 | + }; |
| 836 | + |
832 | 837 | function convertPathToDef(group, id) {
|
833 | 838 | var element = this.__currentElement;
|
834 | 839 |
|
835 |
| - /** Create <path> <def> **/ |
836 |
| - var id = group.__extras.id = randomString(this.__ids); |
837 |
| - var link = this.__createElement("path"); |
838 |
| - link.setAttribute("id", id); |
839 |
| - link.setAttribute("d", element.getAttribute("d")); |
840 |
| - this.__defs.appendChild(link); |
| 840 | + /** Create <path> in <defs> **/ |
| 841 | + var extras = group.__extras |
| 842 | + var id = extras.id |
| 843 | + if (!id) { |
| 844 | + id = extras.id = `path-${hashString(extras.currentPath)}`; |
| 845 | + var link = this.__createElement("path"); |
| 846 | + link.setAttribute("id", id); |
| 847 | + link.setAttribute("d", element.getAttribute("d")); |
| 848 | + this.__defs.appendChild(link); |
| 849 | + } |
841 | 850 |
|
842 | 851 | /** Convert previous <path> to <use> **/
|
843 | 852 | if (element.nodeName === "path") {
|
|
0 commit comments