Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 79bb6ef

Browse files
committed
Lib: Add setScale function
1 parent b5331e3 commit 79bb6ef

File tree

2 files changed

+73
-6
lines changed

2 files changed

+73
-6
lines changed

src/lib/index.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,42 @@ lib.setTranslate = function(element, x, y) {
483483
return transform;
484484
};
485485

486+
lib.getScale = function(element) {
487+
488+
var re = /(\bscale\()(\d*\.?\d*)([^\d]*)(\d*\.?\d*)([^\d]*)(.*)/,
489+
getter = element.attr ? 'attr' : 'getAttribute',
490+
transform = element[getter]('transform') || '';
491+
492+
var translate = transform.replace(re, function(match, p1, p2, p3, p4) {
493+
return [p2, p4].join(' ');
494+
})
495+
.split(' ');
496+
497+
return {
498+
x: +translate[0] || 1,
499+
y: +translate[1] || 1
500+
};
501+
};
502+
503+
lib.setScale = function(element, x, y) {
504+
505+
var re = /(\bscale\(.*?\);?)/,
506+
getter = element.attr ? 'attr' : 'getAttribute',
507+
setter = element.attr ? 'attr' : 'setAttribute',
508+
transform = element[getter]('transform') || '';
509+
510+
x = x || 1;
511+
y = y || 1;
512+
513+
transform = transform.replace(re, '').trim();
514+
transform += ' scale(' + x + ', ' + y + ')';
515+
transform = transform.trim();
516+
517+
element[setter]('transform', transform);
518+
519+
return transform;
520+
};
521+
486522
lib.isIE = function() {
487523
return typeof window.navigator.msSaveBlob !== 'undefined';
488524
};

test/jasmine/tests/lib_test.js

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -858,9 +858,6 @@ describe('Test lib.js:', function() {
858858
Lib.setTranslate(el, 10, 20);
859859
expect(el.getAttribute('transform')).toBe('translate(10, 20)');
860860

861-
Lib.setTranslate(el, 30, 40);
862-
expect(el.getAttribute('transform')).toBe('translate(30, 40)');
863-
864861
Lib.setTranslate(el);
865862
expect(el.getAttribute('transform')).toBe('translate(0, 0)');
866863

@@ -875,9 +872,6 @@ describe('Test lib.js:', function() {
875872
Lib.setTranslate(el, 5);
876873
expect(el.attr('transform')).toBe('translate(5, 0)');
877874

878-
Lib.setTranslate(el, 10, 20);
879-
expect(el.attr('transform')).toBe('translate(10, 20)');
880-
881875
Lib.setTranslate(el, 30, 40);
882876
expect(el.attr('transform')).toBe('translate(30, 40)');
883877

@@ -890,6 +884,43 @@ describe('Test lib.js:', function() {
890884
});
891885
});
892886

887+
describe('setScale', function() {
888+
889+
it('should work with regular DOM elements', function() {
890+
var el = document.createElement('div');
891+
892+
Lib.setScale(el, 5);
893+
expect(el.getAttribute('transform')).toBe('scale(5, 1)');
894+
895+
Lib.setScale(el, 30, 40);
896+
expect(el.getAttribute('transform')).toBe('scale(30, 40)');
897+
898+
Lib.setScale(el);
899+
expect(el.getAttribute('transform')).toBe('scale(1, 1)');
900+
901+
el.setAttribute('transform', 'scale(1, 1); rotate(30)');
902+
Lib.setScale(el, 30, 40);
903+
expect(el.getAttribute('transform')).toBe('rotate(30) scale(30, 40)');
904+
});
905+
906+
it('should work with d3 elements', function() {
907+
var el = d3.select(document.createElement('div'));
908+
909+
Lib.setScale(el, 5);
910+
expect(el.attr('transform')).toBe('scale(5, 1)');
911+
912+
Lib.setScale(el, 30, 40);
913+
expect(el.attr('transform')).toBe('scale(30, 40)');
914+
915+
Lib.setScale(el);
916+
expect(el.attr('transform')).toBe('scale(1, 1)');
917+
918+
el.attr('transform', 'scale(0, 0); rotate(30)');
919+
Lib.setScale(el, 30, 40);
920+
expect(el.attr('transform')).toBe('rotate(30) scale(30, 40)');
921+
});
922+
});
923+
893924
describe('pushUnique', function() {
894925

895926
beforeEach(function() {

0 commit comments

Comments
 (0)