11( function ( $ ) { // jscs:ignore validateLineBreaks
22
3- if ( 'undefined' !== typeof ( wp ) ) {
4- if ( 'undefined' !== typeof ( wp . customize ) ) {
5- wp . customize . bind ( 'preview-ready' , function ( ) {
6- wp . customize . preview . bind ( 'update-inline-css' , function ( object ) {
7- var data = {
8- 'action' : object . action ,
9- 'args' : object . data ,
10- 'id' : object . id
11- } ;
12-
13- jQuery . ajax ( {
14- dataType : 'json' ,
15- type : 'POST' ,
16- url : WPUrls . ajaxurl ,
17- data : data ,
18- complete : function ( json ) {
19- var sufix = object . action + object . id ;
20- var style = $ ( '#shapely-style-' + sufix ) ;
21-
22- if ( ! style . length ) {
23- style = $ ( 'head' ) . append ( '<style type="text/css" id="shapely-style-' + sufix + '" />' ) . find ( '#shapely-style-' + sufix ) ;
24- }
25-
26- style . html ( json . responseText ) ;
27- }
28- } ) ;
29- } ) ;
30- } ) ;
31- }
32- }
33-
34- } ) ( jQuery ) ;
3+ var api = wp . customize ;
4+
5+ api . shapelyLogoDimension = api . Control . extend ( {
6+
7+ ready : function ( ) {
8+ var control = this ,
9+ dimensions ;
10+ control . logo = api . control ( 'custom_logo' ) ;
11+ control . values = control . setting ( ) ;
12+ dimensions = control . container . find ( '.shapely-dimension' ) ;
13+ control . widthElement = $ ( dimensions [ 0 ] ) ;
14+ control . heightElement = $ ( dimensions [ 1 ] ) ;
15+
16+ if ( ! control . values ) {
17+ control . respectRatio = 1 ;
18+ } else {
19+ control . respectRatio = control . values . ratio ;
20+ }
21+
22+ if ( undefined != control . logo . params . attachment ) {
23+ control . hasLogo = true ;
24+ control . logoWidth = control . logo . params . attachment . width ;
25+ control . logoHeight = control . logo . params . attachment . height ;
26+ } else {
27+ control . hasLogo = false ;
28+ control . toggle ( false ) ;
29+ }
30+
31+ control . logo . setting . bind ( 'change' , function ( ) {
32+ control . updateLogo ( ) ;
33+ } ) ;
34+
35+ control . widthElement . keyup ( function ( ) {
36+ if ( control . respectRatio && control . hasLogo ) {
37+ control . calculateRatio ( 'width' ) ;
38+ control . shapelyInterval = setInterval ( control . updateControl , 1000 , control ) ;
39+ }
40+ } ) ;
41+
42+ control . heightElement . keyup ( function ( ) {
43+ if ( control . respectRatio && control . hasLogo ) {
44+ control . calculateRatio ( 'height' ) ;
45+ control . shapelyInterval = setInterval ( control . updateControl , 1000 , control ) ;
46+ }
47+ } ) ;
48+
49+ control . container . find ( '.ratio input' ) . change ( function ( ) {
50+ var values = control . setting ( ) ;
51+
52+ if ( ! values ) {
53+ values = { } ;
54+ }
55+
56+ if ( $ ( this ) . is ( ':checked' ) ) {
57+ control . respectRatio = 1 ;
58+ values . ratio = 1 ;
59+ } else {
60+ control . respectRatio = 0 ;
61+ values . ratio = 0 ;
62+ }
63+
64+ control . setting ( { } ) ;
65+ control . setting ( values ) ;
66+ } ) ;
67+
68+ } ,
69+
70+ updateLogo : function ( ) {
71+ var control = this ,
72+ values = control . setting ( ) ;
73+ if ( undefined != control . logo . params . attachment ) {
74+
75+ control . logoWidth = control . logo . params . attachment . width ;
76+ control . logoHeight = control . logo . params . attachment . height ;
77+
78+ if ( ! values ) {
79+ values = {
80+ 'width' : control . logoWidth ,
81+ 'height' : control . logoHeight ,
82+ 'ratio' : 1
83+ } ;
84+ } else {
85+ values . width = control . logoWidth ;
86+ values . height = control . logoHeight ;
87+ }
88+
89+ control . widthElement . val ( control . logoWidth ) ;
90+ control . heightElement . val ( control . logoHeight ) ;
91+
92+ control . setting ( { } ) ;
93+ control . setting ( values ) ;
94+
95+ control . toggle ( true ) ;
96+ } else {
97+ control . toggle ( false ) ;
98+ }
99+ } ,
100+
101+ calculateRatio : function ( keep ) {
102+ var control = this ,
103+ aux ;
104+
105+ if ( 'width' == keep ) {
106+ aux = control . logoHeight * control . widthElement . val ( ) / control . logoWidth ;
107+ control . heightElement . val ( parseFloat ( aux ) . toFixed ( 2 ) ) ;
108+ } else if ( 'height' == keep ) {
109+ aux = control . logoWidth * control . heightElement . val ( ) / control . logoHeight ;
110+ control . widthElement . val ( parseFloat ( aux ) . toFixed ( 2 ) ) ;
111+ }
112+
113+ clearInterval ( control . shapelyInterval ) ;
114+ } ,
115+
116+ updateControl : function ( control ) {
117+ var values = control . setting ( ) ;
118+
119+ if ( ! values ) {
120+ values = {
121+ 'width' : control . widthElement . val ( ) ,
122+ 'height' : control . heightElement . val ( ) ,
123+ 'ratio' : 1
124+ } ;
125+ } else {
126+ values . width = control . widthElement . val ( ) ;
127+ values . height = control . heightElement . val ( ) ;
128+ }
129+ control . setting ( { } ) ;
130+ control . setting ( values ) ;
131+ clearInterval ( control . shapelyInterval ) ;
132+ }
133+
134+ } ) ;
135+
136+ // Extend epsilon button constructor
137+ $ . extend ( api . controlConstructor , {
138+ 'shapely-logo-dimension' : api . shapelyLogoDimension ,
139+ } ) ;
140+
141+ } ) ( jQuery ) ;
0 commit comments