Redux Framework - Version 3.6.16

Version Description

  • Fixed: WordPress 5.3.1 compatibility. Also added the new @redux account to the plugin.
Download this release

Release Info

Developer dovyp
Plugin Icon 128x128 Redux Framework
Version 3.6.16
Comparing to
See all releases

Code changes from version 3.6.15 to 3.6.16

.gitattributes ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Directories
2
+ /.wordpress-org export-ignore
3
+ /.github export-ignore
4
+ /.tx export-ignore
5
+ /bin export-ignore
6
+ /codestyles export-ignore
7
+
8
+ # Files
9
+ /.gitattributes export-ignore
10
+ /.gitignore export-ignore
11
+ /.travis.yml export-ignore
12
+ /ISSUE_TEMPLATE export-ignore
13
+ /CONTRIBUTING.md export-ignore
.jshintrc CHANGED
@@ -3,7 +3,7 @@
3
  "immed": true,
4
  "noarg": true,
5
  "onevar": true,
6
-
7
  "browser": true,
8
 
9
  "globals": {
3
  "immed": true,
4
  "noarg": true,
5
  "onevar": true,
6
+ "validthis": true,
7
  "browser": true,
8
 
9
  "globals": {
CODE_OF_CONDUCT.md ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6
+
7
+ ## Our Standards
8
+
9
+ Examples of behavior that contributes to creating a positive environment include:
10
+
11
+ * Using welcoming and inclusive language
12
+ * Being respectful of differing viewpoints and experiences
13
+ * Gracefully accepting constructive criticism
14
+ * Focusing on what is best for the community
15
+ * Showing empathy towards other community members
16
+
17
+ Examples of unacceptable behavior by participants include:
18
+
19
+ * The use of sexualized language or imagery and unwelcome sexual attention or advances
20
+ * Trolling, insulting/derogatory comments, and personal or political attacks
21
+ * Public or private harassment
22
+ * Publishing others' private information, such as a physical or electronic address, without explicit permission
23
+ * Other conduct which could reasonably be considered inappropriate in a professional setting
24
+
25
+ ## Our Responsibilities
26
+
27
+ Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28
+
29
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30
+
31
+ ## Scope
32
+
33
+ This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34
+
35
+ ## Enforcement
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at support@redux.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38
+
39
+ Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40
+
41
+ ## Attribution
42
+
43
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44
+
45
+ [homepage]: http://contributor-covenant.org
46
+ [version]: http://contributor-covenant.org/version/1/4/
README.md CHANGED
@@ -1,4 +1,4 @@
1
- ## Redux Options Framework [![WordPress plugin](https://img.shields.io/wordpress/plugin/v/redux-framework.svg?maxAge=2592000)](https://wordpress.org/plugins/redux-framework) [![WordPress](https://img.shields.io/wordpress/v/redux-framework.svg?maxAge=2592000)](https://wordpress.org/download/) [![Build Status](https://travis-ci.org/reduxframework/redux-framework.png?branch=master)](https://travis-ci.org/reduxframework/redux-framework) [![Built with Grunt](https://cdn.gruntjs.com/builtwith.png)](http://gruntjs.com/) [![Slack](https://redux-slackin.herokuapp.com/badge.svg)](https://redux-slackin.herokuapp.com)
2
 
3
  [Get it in the WordPress plugin repo](https://wordpress.org/plugins/redux-framework/)
4
 
@@ -8,6 +8,18 @@
8
 
9
  WordPress options framework which uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API"), Custom Error/Validation Handling, Custom Field/Validation Types, and import/export functionality.
10
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  ## Posting Guidelines for issues and questions ##
12
  When using our Issue Tracker, you may ask questions where you may be a bit lost or need help understanding the documentation. If, however, you find a bug we require you to read and provide the information contained in our [Contributing Guidelines](https://github.com/ReduxFramework/redux-framework/blob/master/CONTRIBUTING.md). If you do not provide this information, we will request it before we can support you.
13
 
1
+ ## Redux Options Framework [![WordPress plugin](https://img.shields.io/wordpress/plugin/v/redux-framework.svg?maxAge=3600)](https://wordpress.org/plugins/redux-framework) [![WordPress](https://img.shields.io/wordpress/v/redux-framework.svg?maxAge=3600)](https://wordpress.org/download/) [![Build Status](https://travis-ci.org/reduxframework/redux-framework.png?branch=master)](https://travis-ci.org/reduxframework/redux-framework) [![Slack](https://redux-slackin.herokuapp.com/badge.svg)](https://redux-slackin.herokuapp.com)
2
 
3
  [Get it in the WordPress plugin repo](https://wordpress.org/plugins/redux-framework/)
4
 
8
 
9
  WordPress options framework which uses the [WordPress Settings API](http://codex.wordpress.org/Settings_API "WordPress Settings API"), Custom Error/Validation Handling, Custom Field/Validation Types, and import/export functionality.
10
 
11
+ ## REDUX v4 BETA NOW PUBLIC AND READY FOR TESTING!
12
+
13
+ The public beta for Redux v4 is now available! You can find it here: https://github.com/reduxframework/redux-framework-4
14
+
15
+ A couple of things.
16
+
17
+ 1. Please review carefully the READ ME text posted on the repository. That information is very important and may answer many questions ahead of time.
18
+
19
+ 2. Please do NOT post issues about Redux v4 in THIS repo. Please use the issue tracker via the link above.
20
+
21
+ Have fun!
22
+
23
  ## Posting Guidelines for issues and questions ##
24
  When using our Issue Tracker, you may ask questions where you may be a bit lost or need help understanding the documentation. If, however, you find a bug we require you to read and provide the information contained in our [Contributing Guidelines](https://github.com/ReduxFramework/redux-framework/blob/master/CONTRIBUTING.md). If you do not provide this information, we will request it before we can support you.
25
 
ReduxCore/framework.php CHANGED
@@ -69,7 +69,7 @@
69
  // Please update the build number with each push, no matter how small.
70
  // This will make for easier support when we ask users what version they are using.
71
 
72
- public static $_version = '3.6.15';
73
  public static $_dir;
74
  public static $_url;
75
  public static $_upload_dir;
69
  // Please update the build number with each push, no matter how small.
70
  // This will make for easier support when we ask users what version they are using.
71
 
72
+ public static $_version = '3.6.16';
73
  public static $_dir;
74
  public static $_url;
75
  public static $_upload_dir;
ReduxCore/inc/fields/spinner/vendor/spinner_custom.js CHANGED
@@ -1,389 +1,372 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  (function( a, b ) {
2
- var c = "ui-state-active", d = "ui-state-hover", e = "ui-state-disabled", f = a.ui.keyCode, g = f.UP, h = f.DOWN, i = f.RIGHT, j = f.LEFT, k = f.PAGE_UP, l = f.PAGE_DOWN, m = f.HOME, n = f.END, o = a.browser.msie, p = a.browser.mozilla ? "DOMMouseScroll" : "mousewheel", q = ".uispinner", r = [g, h, i, j, k, l, m, n, f.BACKSPACE, f.DELETE, f.TAB], s;
3
- a.widget(
4
- "ui.spinner", {
5
- options: {
6
- min: null,
7
- max: null,
8
- allowNull: false,
9
- group: "",
10
- point: ".",
11
- prefix: "",
12
- suffix: "",
13
- places: null,
14
- defaultStep: 1,
15
- largeStep: 10,
16
- mouseWheel: true,
17
- increment: "slow",
18
- className: null,
19
- showOn: "always",
20
- width: 95,
21
- upIconClass: "ui-icon-triangle-1-n",
22
- downIconClass: "ui-icon-triangle-1-s",
23
- format: function( a, b ) {
24
- var c = this, d = /(\d+)(\d{3})/, e = (isNaN( a ) ? 0 : Math.abs( a )).toFixed( b ) + "";
25
- for ( e = e.replace( ".", c.point ); d.test( e ) && c.group; e = e.replace(
26
- d, "$1" + c.group + "$2"
27
- ) ) {
28
- }
29
- return (a < 0 ? "-" : "") + c.prefix + e + c.suffix
30
- },
31
- parse: function( a ) {
32
- var b = this;
33
- if ( b.group == "." ) a = a.replace( ".", "" );
34
- if ( b.point != "." ) a = a.replace( b.point, "." );
35
- return parseFloat( a.replace( /[^0-9\-\.]/g, "" ) )
36
- }
37
- }, _create: function() {
38
- var a = this, b = a.element, c = b.attr( "type" );
39
- if ( !b.is( "input" ) || c != "text" && c != "number" ) {
40
- console.error( "Invalid target for ui.spinner" );
41
- return
42
- }
43
- a._procOptions( true );
44
- a._createButtons( b );
45
- if ( !b.is( ":enabled" ) ) a.disable()
46
- }, _createButtons: function( b ) {
47
- function R() {
48
- if ( L ) {
49
- a( this ).removeClass( c );
50
- p._stopSpin();
51
- L = false
52
- }
53
- return false
54
- }
55
 
56
- function Q() {
57
- if ( !t.disabled ) {
58
- var b = p.element[0], d = this === C ? 1 : -1;
59
- b.focus();
60
- b.select();
61
- a( this ).addClass( c );
62
- L = true;
63
- p._startSpin( d )
64
- }
65
- return false
66
- }
67
 
68
- function P( a ) {
69
- function b() {
70
- G = 0;
71
- a()
72
- }
73
 
74
- if ( G ) {
75
- if ( a === H )return;
76
- clearTimeout( G )
77
- }
78
- H = a;
79
- G = setTimeout( b, 100 )
80
- }
81
 
82
- function O( a, b ) {
83
- if ( K )return false;
84
- var c = String.fromCharCode( b || a ), d = p.options;
85
- if ( c >= "0" && c <= "9" || c == "-" )return false;
86
- if ( p.places > 0 && c == d.point || c == d.group )return false;
87
- return true
88
- }
89
 
90
- function N( a ) {
91
- for ( var b = 0; b < r.length; b++ )if ( r[b] == a )return true;
92
- return false
93
- }
94
 
95
- function e( a ) {
96
- return a == "auto" ? 0 : parseInt( a )
97
- }
98
 
99
- var p = this, t = p.options, u = t.className, v = t.width, w = t.showOn, x = a.support.boxModel, y = b.outerHeight(), z = p.oMargin = e(
100
- b.css( "margin-right" )
101
- ), A = p.wrapper = b.wrap( '<span class="spinner-wrpr" />' ).css(
102
- {
103
- width: (p.oWidth = x ? b.width() : b.outerWidth()) - v,
104
- marginRight: "30px",
105
- marginLeft: "30px",
106
- textAlign: "center",
107
- "float": "none",
108
- marginTop: 0
109
- }
110
- ).after( '<span class="ui-spinner ui-widget"></span>' ).next(), B = p.btnContainer = a(
111
- '<div class="ui-spinner-buttons">' + '<div class="ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr"><span class="ui-icon ' + t.upIconClass + '"> </span></div>' + '<div class="ui-spinner-down ui-spinner-button ui-state-default ui-corner-br"><span class="ui-icon ' + t.downIconClass + '"> </span></div>' + "</div>"
112
- ), C, D, E, F, G, H, I, J, K, L, M = b[0].dir == "rtl";
113
- if ( u ) A.addClass( u );
114
- A.append( B.css( {height: y, left: 0, top: 0} ) );
115
- E = p.buttons = B.find( ".ui-spinner-button" );
116
- E.css( {width: "30px", height: y - (x ? E.outerHeight() - E.height() : 0)} );
117
- E.eq( 0 ).css( {right: "0"} );
118
- E.eq( 1 ).css( {left: "0"} );
119
- C = E[0];
120
- D = E[1];
121
- F = E.find( ".ui-icon" );
122
- B.width( "105px" );
123
- if ( w != "always" ) B.css( "opacity", 0 );
124
- if ( w == "hover" || w == "both" ) E.add( b ).bind(
125
- "mouseenter" + q, function() {
126
- P(
127
- function() {
128
- I = true;
129
- if ( !p.focused || w == "hover" ) p.showButtons()
130
- }
131
- )
132
- }
133
- ).bind(
134
- "mouseleave" + q, function S() {
135
- P(
136
- function() {
137
- I = false;
138
- if ( !p.focused || w == "hover" ) p.hideButtons()
139
- }
140
- )
141
- }
142
- );
143
- E.hover(
144
- function() {
145
- p.buttons.removeClass( d );
146
- if ( !t.disabled ) a( this ).addClass( d )
147
- }, function() {
148
- a( this ).removeClass( d )
149
- }
150
- ).mousedown( Q ).mouseup( R ).mouseout( R );
151
- if ( o ) E.dblclick(
152
- function() {
153
- if ( !t.disabled ) {
154
- p._change();
155
- p._doSpin( (this === C ? 1 : -1) * t.step )
156
- }
157
- return false
158
- }
159
- ).bind(
160
- "selectstart", function() {
161
- return false
162
- }
163
- );
164
- b.bind(
165
- "keydown" + q, function( b ) {
166
- var d, e, f, o = b.keyCode;
167
- if ( b.ctrl || b.alt )return true;
168
- if ( N( o ) ) K = true;
169
- if ( J )return false;
170
- switch ( o ) {
171
- case g:
172
- case k:
173
- d = 1;
174
- e = o == k;
175
- break;
176
- case h:
177
- case l:
178
- d = -1;
179
- e = o == l;
180
- break;
181
- case i:
182
- case j:
183
- d = o == i ^ M ? 1 : -1;
184
- break;
185
- case m:
186
- f = p.options.min;
187
- if ( f != null ) p._setValue( f );
188
- return false;
189
- case n:
190
- f = p.options.max;
191
- f = p.options.max;
192
- if ( f != null ) p._setValue( f );
193
- return false
194
- }
195
- if ( d ) {
196
- if ( !J && !t.disabled ) {
197
- keyDir = d;
198
- a( d > 0 ? C : D ).addClass( c );
199
- J = true;
200
- p._startSpin( d, e )
201
- }
202
- return false
203
- }
204
- }
205
- ).bind(
206
- "keyup" + q, function( a ) {
207
- if ( a.ctrl || a.alt )return true;
208
- if ( N( f ) ) K = false;
209
- switch ( a.keyCode ) {
210
- case g:
211
- case i:
212
- case k:
213
- case h:
214
- case j:
215
- case l:
216
- E.removeClass( c );
217
- p._stopSpin();
218
- J = false;
219
- return false
220
- }
221
- }
222
- ).bind(
223
- "keypress" + q, function( a ) {
224
- if ( O( a.keyCode, a.charCode ) )return false
225
- }
226
- ).bind(
227
- "change" + q, function() {
228
- p._change()
229
- }
230
- ).bind(
231
- "focus" + q, function() {
232
- function a() {
233
- p.element.select()
234
- }
235
 
236
- o ? a() : setTimeout( a, 0 );
237
- p.focused = true;
238
- s = p;
239
- if ( !I && (w == "focus" || w == "both") ) p.showButtons()
240
- }
241
- ).bind(
242
- "blur" + q, function() {
243
- p.focused = false;
244
- if ( !I && (w == "focus" || w == "both") ) p.hideButtons()
245
- }
246
- )
247
- }, _procOptions: function( a ) {
248
- var b = this, c = b.element, d = b.options, e = d.min, f = d.max, g = d.step, h = d.places, i = -1, j;
249
- if ( d.increment == "slow" ) d.increment = [{count: 1, mult: 1, delay: 250}, {
250
- count: 3,
251
- mult: 1,
252
- delay: 100
253
- }, {count: 0, mult: 1, delay: 50}]; else if ( d.increment == "fast" ) d.increment = [{
254
- count: 1,
255
- mult: 1,
256
- delay: 250
257
- }, {count: 19, mult: 1, delay: 100}, {count: 80, mult: 1, delay: 20}, {
258
- count: 100,
259
- mult: 10,
260
- delay: 20
261
- }, {count: 0, mult: 100, delay: 20}];
262
- if ( e == null && (j = c.attr( "min" )) != null ) e = parseFloat( j );
263
- if ( f == null && (j = c.attr( "max" )) != null ) f = parseFloat( j );
264
- if ( !g && (j = c.attr( "step" )) != null )if ( j != "any" ) {
265
- g = parseFloat( j );
266
- d.largeStep *= g
267
- }
268
- d.step = g = g || d.defaultStep;
269
- if ( h == null && (j = g + "").indexOf( "." ) != -1 ) h = j.length - j.indexOf( "." ) - 1;
270
- b.places = h;
271
- if ( f != null && e != null ) {
272
- if ( e > f ) e = f;
273
- i = Math.max( Math.max( i, d.format( f, h, c ).length ), d.format( e, h, c ).length )
274
- }
275
- if ( a ) b.inputMaxLength = c[0].maxLength;
276
- j = b.inputMaxLength;
277
- if ( j > 0 ) {
278
- i = i > 0 ? Math.min( j, i ) : j;
279
- j = Math.pow( 10, i ) - 1;
280
- if ( f == null || f > j ) f = j;
281
- j = -(j + 1) / 10 + 1;
282
- if ( e == null || e < j ) e = j
283
- }
284
- if ( i > 0 ) c.attr( "maxlength", i );
285
- d.min = e;
286
- d.max = f;
287
- b._change();
288
- c.unbind( p + q );
289
- if ( d.mouseWheel ) c.bind( p + q, b._mouseWheel )
290
- }, _mouseWheel: function( b ) {
291
- var c = a.data( this, "spinner" );
292
- if ( !c.options.disabled && c.focused && s === c ) {
293
- c._change();
294
- c._doSpin( ((b.wheelDelta || -b.detail) > 0 ? 1 : -1) * c.options.step );
295
- return false
296
- }
297
- }, _setTimer: function( a, b, c ) {
298
- function e() {
299
- d._spin( b, c )
300
- }
301
 
302
- var d = this;
303
- d._stopSpin();
304
- d.timer = setInterval( e, a )
305
- }, _stopSpin: function() {
306
- if ( this.timer ) {
307
- clearInterval( this.timer );
308
- this.timer = 0
309
- }
310
- }, _startSpin: function( a, b ) {
311
- var c = this, d = c.options, e = d.increment;
312
- c._change();
313
- c._doSpin( a * (b ? c.options.largeStep : c.options.step) );
314
- if ( e && e.length > 0 ) {
315
- c.counter = 0;
316
- c.incCounter = 0;
317
- c._setTimer( e[0].delay, a, b )
318
- }
319
- }, _spin: function( a, b ) {
320
- var c = this, d = c.options.increment, e = d[c.incCounter];
321
- c._doSpin( a * e.mult * (b ? c.options.largeStep : c.options.step) );
322
- c.counter++;
323
- if ( c.counter > e.count && c.incCounter < d.length - 1 ) {
324
- c.counter = 0;
325
- e = d[++c.incCounter];
326
- c._setTimer( e.delay, a, b )
327
- }
328
- }, _doSpin: function( a ) {
329
- var b = this, c = b.curvalue;
330
- if ( c == null ) c = (a > 0 ? b.options.min : b.options.max) || 0;
331
- b._setValue( c + a )
332
- }, _parseValue: function() {
333
- var a = this.element.val();
334
- return a ? this.options.parse( a, this.element ) : null
335
- }, _validate: function( a ) {
336
- var b = this.options, c = b.min, d = b.max;
337
- if ( a == null && !b.allowNull ) a = this.curvalue != null ? this.curvalue : c || d || 0;
338
- if ( d != null && a > d )return d; else if ( c != null && a < c )return c; else return a
339
- }, _change: function() {
340
- var a = this, b = a._parseValue(), c = a.options.min, d = a.options.max;
341
- if ( !a.selfChange ) {
342
- if ( isNaN( b ) ) b = a.curvalue;
343
- a._setValue( b, true )
344
- }
345
- }, _setOption: function( b, c ) {
346
- a.Widget.prototype._setOption.call( this, b, c );
347
- this._procOptions()
348
- }, increment: function() {
349
- this._doSpin( this.options.step )
350
- }, decrement: function() {
351
- this._doSpin( -this.options.step )
352
- }, showButtons: function( a ) {
353
- var b = this.btnContainer.stop();
354
- if ( a ) b.css( "opacity", 1 ); else b.fadeTo( "fast", 1 )
355
- }, hideButtons: function( a ) {
356
- var b = this.btnContainer.stop();
357
- if ( a ) b.css( "opacity", 0 ); else b.fadeTo( "fast", 0 );
358
- this.buttons.removeClass( d )
359
- }, _setValue: function( a, b ) {
360
- var c = this;
361
- c.curvalue = a = c._validate( a );
362
- c.element.val( a != null ? c.options.format( a, c.places, c.element ) : "" );
363
- if ( !b ) {
364
- c.selfChange = true;
365
- c.element.change();
366
- c.selfChange = false
367
- }
368
- }, value: function( a ) {
369
- if ( arguments.length ) {
370
- this._setValue( a );
371
- return this.element
372
- }
373
- return this.curvalue
374
- }, enable: function() {
375
- this.buttons.removeClass( e );
376
- this.element[0].disabled = false;
377
- a.Widget.prototype.enable.call( this )
378
- }, disable: function() {
379
- this.buttons.addClass( e ).removeClass( d );
380
- this.element[0].disabled = true;
381
- a.Widget.prototype.disable.call( this )
382
- }, destroy: function( b ) {
383
- this.wrapper.remove();
384
- this.element.unbind( q ).css( {width: this.oWidth, marginRight: this.oMargin} );
385
- a.Widget.prototype.destroy.call( this )
386
- }
387
- }
388
- )
389
- })( jQuery )
1
+ jQuery.uaMatch = function( ua ) {
2
+ ua = ua.toLowerCase();
3
+ var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
4
+ /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
5
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
6
+ /(msie) ([\w.]+)/.exec( ua ) ||
7
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || [];
8
+ return {
9
+ browser: match[ 1 ] || "",
10
+ version: match[ 2 ] || "0"
11
+ };
12
+ };
13
+
14
  (function( a, b ) {
15
+ var c = 'ui-state-active', d = 'ui-state-hover', e = 'ui-state-disabled', f = a.ui.keyCode, g = f.UP, h = f.DOWN,
16
+ i = f.RIGHT, j = f.LEFT, k = f.PAGE_UP, l = f.PAGE_DOWN, m = f.HOME, n = f.END, o = a.uaMatch.msie,
17
+ p = a.uaMatch.mozilla ? 'DOMMouseScroll' : 'mousewheel', q = '.uispinner',
18
+ r = [g, h, i, j, k, l, m, n, f.BACKSPACE, f.DELETE, f.TAB], s;
19
+ a.widget( 'ui.spinner', {
20
+ options: {
21
+ min: null,
22
+ max: null,
23
+ allowNull: false,
24
+ group: '',
25
+ point: '.',
26
+ prefix: '',
27
+ suffix: '',
28
+ places: null,
29
+ defaultStep: 1,
30
+ largeStep: 10,
31
+ mouseWheel: true,
32
+ increment: 'slow',
33
+ className: null,
34
+ showOn: 'always',
35
+ width: 95,
36
+ upIconClass: 'ui-icon-triangle-1-n',
37
+ downIconClass: 'ui-icon-triangle-1-s',
38
+ format: function( a, b ) {
39
+ var c = this, d = /(\d+)(\d{3})/, e = (isNaN( a ) ? 0 : Math.abs( a )).toFixed( b ) + '';
40
+ for ( e = e.replace( '.', c.point ); d.test( e ) && c.group; e = e.replace( d, '$1' + c.group + '$2' ) ) {
41
+ }
42
+ return (a < 0 ? '-' : '') + c.prefix + e + c.suffix;
43
+ },
44
+ parse: function( a ) {
45
+ var b = this;
46
+ if ( b.group == '.' ) a = a.replace( '.', '' );
47
+ if ( b.point != '.' ) a = a.replace( b.point, '.' );
48
+ return parseFloat( a.replace( /[^0-9\-\.]/g, '' ) );
49
+ }
50
+ }, _create: function() {
51
+ var a = this, b = a.element, c = b.attr( 'type' );
52
+ if ( ! b.is( 'input' ) || c != 'text' && c != 'number' ) {
53
+ console.error( 'Invalid target for ui.spinner' );
54
+ return;
55
+ }
56
+ a._procOptions( true );
57
+ a._createButtons( b );
58
+ if ( ! b.is( ':enabled' ) ) a.disable();
59
+ }, _createButtons: function( b ) {
60
+ function R() {
61
+ if ( L ) {
62
+ a( this ).removeClass( c );
63
+ p._stopSpin();
64
+ L = false;
65
+ }
66
+ return false;
67
+ }
68
 
69
+ function Q() {
70
+ if ( ! t.disabled ) {
71
+ var b = p.element[0], d = this === C ? 1 : - 1;
72
+ b.focus();
73
+ b.select();
74
+ a( this ).addClass( c );
75
+ L = true;
76
+ p._startSpin( d );
77
+ }
78
+ return false;
79
+ }
80
 
81
+ function P( a ) {
82
+ function b() {
83
+ G = 0;
84
+ a();
85
+ }
86
 
87
+ if ( G ) {
88
+ if ( a === H ) return;
89
+ clearTimeout( G );
90
+ }
91
+ H = a;
92
+ G = setTimeout( b, 100 );
93
+ }
94
 
95
+ function O( a, b ) {
96
+ if ( K ) return false;
97
+ var c = String.fromCharCode( b || a ), d = p.options;
98
+ if ( c >= '0' && c <= '9' || c == '-' ) return false;
99
+ if ( p.places > 0 && c == d.point || c == d.group ) return false;
100
+ return true;
101
+ }
102
 
103
+ function N( a ) {
104
+ for ( var b = 0; b < r.length; b ++ ) if ( r[b] == a ) return true;
105
+ return false;
106
+ }
107
 
108
+ function e( a ) {
109
+ return a == 'auto' ? 0 : parseInt( a );
110
+ }
111
 
112
+ var p = this,
113
+ t = p.options,
114
+ u = t.className,
115
+ v = t.width,
116
+ w = t.showOn,
117
+ y = b.outerHeight(),
118
+ z = p.oMargin = e( b.css( 'margin-right' ) ),
119
+ A = p.wrapper = b.wrap( '<span class="spinner-wrpr" />' ).css( {
120
+ width: (p.oWidth = b.outerWidth()) - v,
121
+ marginRight: '30px',
122
+ marginLeft: '30px',
123
+ textAlign: 'center',
124
+ 'float': 'none',
125
+ marginTop: 0
126
+ } ).after( '<span class="ui-spinner ui-widget"></span>' ).next(),
127
+ B = p.btnContainer = a( '<div class="ui-spinner-buttons">' + '<div class="ui-spinner-up ui-spinner-button ui-state-default ui-corner-tr"><span class="ui-icon ' + t.upIconClass + '"> </span></div>' + '<div class="ui-spinner-down ui-spinner-button ui-state-default ui-corner-br"><span class="ui-icon ' + t.downIconClass + '"> </span></div>' + '</div>' ),
128
+ C, D, E, F, G, H, I, J, K, L, M = b[0].dir == 'rtl';
129
+ if ( u ) A.addClass( u );
130
+ A.append( B.css( {height: y, left: 0, top: 0} ) );
131
+ E = p.buttons = B.find( '.ui-spinner-button' );
132
+ E.css( {width: '30px', height: y - (0)} );
133
+ E.eq( 0 ).css( {right: '0'} );
134
+ E.eq( 1 ).css( {left: '0'} );
135
+ C = E[0];
136
+ D = E[1];
137
+ F = E.find( '.ui-icon' );
138
+ B.width( '105px' );
139
+ if ( w != 'always' ) B.css( 'opacity', 0 );
140
+ if ( w == 'hover' || w == 'both' ) E.add( b ).bind( 'mouseenter' + q, function() {
141
+ P( function() {
142
+ I = true;
143
+ if ( ! p.focused || w == 'hover' ) p.showButtons();
144
+ } );
145
+ } ).bind( 'mouseleave' + q, function S() {
146
+ P( function() {
147
+ I = false;
148
+ if ( ! p.focused || w == 'hover' ) p.hideButtons();
149
+ } );
150
+ } );
151
+ E.hover( function() {
152
+ p.buttons.removeClass( d );
153
+ if ( ! t.disabled ) a( this ).addClass( d );
154
+ }, function() {
155
+ a( this ).removeClass( d );
156
+ } ).mousedown( Q ).mouseup( R ).mouseout( R );
157
+ if ( o ) E.dblclick( function() {
158
+ if ( ! t.disabled ) {
159
+ p._change();
160
+ p._doSpin( (this === C ? 1 : - 1) * t.step );
161
+ }
162
+ return false;
163
+ } ).bind( 'selectstart', function() {
164
+ return false;
165
+ } );
166
+ b.bind( 'keydown' + q, function( b ) {
167
+ var d, e, f, o = b.keyCode;
168
+ if ( b.ctrl || b.alt ) return true;
169
+ if ( N( o ) ) K = true;
170
+ if ( J ) return false;
171
+ switch ( o ) {
172
+ case g:
173
+ case k:
174
+ d = 1;
175
+ e = o == k;
176
+ break;
177
+ case h:
178
+ case l:
179
+ d = - 1;
180
+ e = o == l;
181
+ break;
182
+ case i:
183
+ case j:
184
+ d = o == i ^ M ? 1 : - 1;
185
+ break;
186
+ case m:
187
+ f = p.options.min;
188
+ if ( f != null ) p._setValue( f );
189
+ return false;
190
+ case n:
191
+ f = p.options.max;
192
+ f = p.options.max;
193
+ if ( f != null ) p._setValue( f );
194
+ return false;
195
+ }
196
+ if ( d ) {
197
+ if ( ! J && ! t.disabled ) {
198
+ keyDir = d;
199
+ a( d > 0 ? C : D ).addClass( c );
200
+ J = true;
201
+ p._startSpin( d, e );
202
+ }
203
+ return false;
204
+ }
205
+ } ).bind( 'keyup' + q, function( a ) {
206
+ if ( a.ctrl || a.alt ) return true;
207
+ if ( N( f ) ) K = false;
208
+ switch ( a.keyCode ) {
209
+ case g:
210
+ case i:
211
+ case k:
212
+ case h:
213
+ case j:
214
+ case l:
215
+ E.removeClass( c );
216
+ p._stopSpin();
217
+ J = false;
218
+ return false;
219
+ }
220
+ } ).bind( 'keypress' + q, function( a ) {
221
+ if ( O( a.keyCode, a.charCode ) ) return false;
222
+ } ).bind( 'change' + q, function() {
223
+ p._change();
224
+ } ).bind( 'focus' + q, function() {
225
+ function a() {
226
+ p.element.select();
227
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
 
229
+ o ? a() : setTimeout( a, 0 );
230
+ p.focused = true;
231
+ s = p;
232
+ if ( ! I && (w == 'focus' || w == 'both') ) p.showButtons();
233
+ } ).bind( 'blur' + q, function() {
234
+ p.focused = false;
235
+ if ( ! I && (w == 'focus' || w == 'both') ) p.hideButtons();
236
+ } );
237
+ }, _procOptions: function( a ) {
238
+ var b = this, c = b.element, d = b.options, e = d.min, f = d.max, g = d.step, h = d.places, i = - 1, j;
239
+ if ( d.increment == 'slow' ) d.increment = [{count: 1, mult: 1, delay: 250}, {
240
+ count: 3, mult: 1, delay: 100
241
+ }, {count: 0, mult: 1, delay: 50}]; else if ( d.increment == 'fast' ) d.increment = [{
242
+ count: 1, mult: 1, delay: 250
243
+ }, {count: 19, mult: 1, delay: 100}, {count: 80, mult: 1, delay: 20}, {
244
+ count: 100, mult: 10, delay: 20
245
+ }, {count: 0, mult: 100, delay: 20}];
246
+ if ( e == null && (j = c.attr( 'min' )) != null ) e = parseFloat( j );
247
+ if ( f == null && (j = c.attr( 'max' )) != null ) f = parseFloat( j );
248
+ if ( ! g && (j = c.attr( 'step' )) != null ) if ( j != 'any' ) {
249
+ g = parseFloat( j );
250
+ d.largeStep *= g;
251
+ }
252
+ d.step = g = g || d.defaultStep;
253
+ if ( h == null && (j = g + '').indexOf( '.' ) != - 1 ) h = j.length - j.indexOf( '.' ) - 1;
254
+ b.places = h;
255
+ if ( f != null && e != null ) {
256
+ if ( e > f ) e = f;
257
+ i = Math.max( Math.max( i, d.format( f, h, c ).length ), d.format( e, h, c ).length );
258
+ }
259
+ if ( a ) b.inputMaxLength = c[0].maxLength;
260
+ j = b.inputMaxLength;
261
+ if ( j > 0 ) {
262
+ i = i > 0 ? Math.min( j, i ) : j;
263
+ j = Math.pow( 10, i ) - 1;
264
+ if ( f == null || f > j ) f = j;
265
+ j = - (j + 1) / 10 + 1;
266
+ if ( e == null || e < j ) e = j;
267
+ }
268
+ if ( i > 0 ) c.attr( 'maxlength', i );
269
+ d.min = e;
270
+ d.max = f;
271
+ b._change();
272
+ c.unbind( p + q );
273
+ if ( d.mouseWheel ) c.bind( p + q, b._mouseWheel );
274
+ }, _mouseWheel: function( b ) {
275
+ var c = a.data( this, 'spinner' );
276
+ if ( ! c.options.disabled && c.focused && s === c ) {
277
+ c._change();
278
+ c._doSpin( ((b.wheelDelta || - b.detail) > 0 ? 1 : - 1) * c.options.step );
279
+ return false;
280
+ }
281
+ }, _setTimer: function( a, b, c ) {
282
+ function e() {
283
+ d._spin( b, c );
284
+ }
 
 
 
 
 
 
 
 
 
285
 
286
+ var d = this;
287
+ d._stopSpin();
288
+ d.timer = setInterval( e, a );
289
+ }, _stopSpin: function() {
290
+ if ( this.timer ) {
291
+ clearInterval( this.timer );
292
+ this.timer = 0;
293
+ }
294
+ }, _startSpin: function( a, b ) {
295
+ var c = this, d = c.options, e = d.increment;
296
+ c._change();
297
+ c._doSpin( a * (b ? c.options.largeStep : c.options.step) );
298
+ if ( e && e.length > 0 ) {
299
+ c.counter = 0;
300
+ c.incCounter = 0;
301
+ c._setTimer( e[0].delay, a, b );
302
+ }
303
+ }, _spin: function( a, b ) {
304
+ var c = this, d = c.options.increment, e = d[c.incCounter];
305
+ c._doSpin( a * e.mult * (b ? c.options.largeStep : c.options.step) );
306
+ c.counter ++;
307
+ if ( c.counter > e.count && c.incCounter < d.length - 1 ) {
308
+ c.counter = 0;
309
+ e = d[++ c.incCounter];
310
+ c._setTimer( e.delay, a, b );
311
+ }
312
+ }, _doSpin: function( a ) {
313
+ var b = this, c = b.curvalue;
314
+ if ( c == null ) c = (a > 0 ? b.options.min : b.options.max) || 0;
315
+ b._setValue( c + a );
316
+ }, _parseValue: function() {
317
+ var a = this.element.val();
318
+ return a ? this.options.parse( a, this.element ) : null;
319
+ }, _validate: function( a ) {
320
+ var b = this.options, c = b.min, d = b.max;
321
+ if ( a == null && ! b.allowNull ) a = this.curvalue != null ? this.curvalue : c || d || 0;
322
+ if ( d != null && a > d ) return d; else if ( c != null && a < c ) return c; else return a;
323
+ }, _change: function() {
324
+ var a = this, b = a._parseValue(), c = a.options.min, d = a.options.max;
325
+ if ( ! a.selfChange ) {
326
+ if ( isNaN( b ) ) b = a.curvalue;
327
+ a._setValue( b, true );
328
+ }
329
+ }, _setOption: function( b, c ) {
330
+ a.Widget.prototype._setOption.call( this, b, c );
331
+ this._procOptions();
332
+ }, increment: function() {
333
+ this._doSpin( this.options.step );
334
+ }, decrement: function() {
335
+ this._doSpin( - this.options.step );
336
+ }, showButtons: function( a ) {
337
+ var b = this.btnContainer.stop();
338
+ if ( a ) b.css( 'opacity', 1 ); else b.fadeTo( 'fast', 1 );
339
+ }, hideButtons: function( a ) {
340
+ var b = this.btnContainer.stop();
341
+ if ( a ) b.css( 'opacity', 0 ); else b.fadeTo( 'fast', 0 );
342
+ this.buttons.removeClass( d );
343
+ }, _setValue: function( a, b ) {
344
+ var c = this;
345
+ c.curvalue = a = c._validate( a );
346
+ c.element.val( a != null ? c.options.format( a, c.places, c.element ) : '' );
347
+ if ( ! b ) {
348
+ c.selfChange = true;
349
+ c.element.change();
350
+ c.selfChange = false;
351
+ }
352
+ }, value: function( a ) {
353
+ if ( arguments.length ) {
354
+ this._setValue( a );
355
+ return this.element;
356
+ }
357
+ return this.curvalue;
358
+ }, enable: function() {
359
+ this.buttons.removeClass( e );
360
+ this.element[0].disabled = false;
361
+ a.Widget.prototype.enable.call( this );
362
+ }, disable: function() {
363
+ this.buttons.addClass( e ).removeClass( d );
364
+ this.element[0].disabled = true;
365
+ a.Widget.prototype.disable.call( this );
366
+ }, destroy: function( b ) {
367
+ this.wrapper.remove();
368
+ this.element.unbind( q ).css( {width: this.oWidth, marginRight: this.oMargin} );
369
+ a.Widget.prototype.destroy.call( this );
370
+ }
371
+ } );
372
+ })( jQuery );
 
class.redux-plugin.php CHANGED
@@ -26,7 +26,7 @@
26
  * @since 3.0.0
27
  */
28
 
29
- const VERSION = '3.6.15';
30
 
31
  /**
32
  * @access protected
26
  * @since 3.0.0
27
  */
28
 
29
+ const VERSION = '3.6.16';
30
 
31
  /**
32
  * @access protected
composer.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "redux-framework/redux-framework",
3
- "version": "3.6.15",
4
  "authors": [
5
  {
6
  "name": "Team Redux"
1
  {
2
  "name": "redux-framework/redux-framework",
3
+ "version": "3.6.16",
4
  "authors": [
5
  {
6
  "name": "Team Redux"
package.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "redux-framework",
3
- "version": "3.6.15",
4
  "title": "ReduxFramework",
5
  "description": "Redux is a simple, truly extensible options framework for WordPress themes and plugins.",
6
  "main": "Gruntfile.js",
@@ -36,7 +36,7 @@
36
  "grunt-scss-lint": "^0.5.0",
37
  "grunt-shell": "^2.1.0",
38
  "grunt-wp-i18n": "^1.0.2",
39
- "lodash": "^4.17.11",
40
  "minimatch": "^3.0.4",
41
  "recess": "^1.1.9",
42
  "shelljs": "^0.8.2"
1
  {
2
  "name": "redux-framework",
3
+ "version": "3.6.16",
4
  "title": "ReduxFramework",
5
  "description": "Redux is a simple, truly extensible options framework for WordPress themes and plugins.",
6
  "main": "Gruntfile.js",
36
  "grunt-scss-lint": "^0.5.0",
37
  "grunt-shell": "^2.1.0",
38
  "grunt-wp-i18n": "^1.0.2",
39
+ "lodash": "^4.17.13",
40
  "minimatch": "^3.0.4",
41
  "recess": "^1.1.9",
42
  "shelljs": "^0.8.2"
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Redux Framework ===
2
- Contributors: dovyp, kprovance
3
- Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=MMFMHWUPKHKPW
4
  Tags: admin, admin interface, options, theme options, plugin options, options framework, settings, web fonts, google fonts
5
  Requires at least: 3.5.1
6
- Tested up to: 5.0
7
- Stable tag: 3.6.15
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -114,29 +114,32 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
114
  1. This is the demo mode of Redux Framework. Activate it and you will find a fully-functional admin panel that you can play with. On the Plugins page, beneath the description and an activated Redux Framework, you will find a Demo Mode link. Click that link to activate or deactivate the sample-config file Redux ships with. Don't take our word for it, check out our online demo and try Redux without installing a thing! [**http://demo.reduxframework.com/wp-admin/**](http://demo.reduxframework.com/wp-admin/)
115
 
116
  == Changelog ==
117
- ## 3.6.15
 
 
 
118
  * Fixed: Redux API setSections would hang up when several sections with no ID share the same title.
119
 
120
- ## 3.6.14
121
  * Fixed: #3583: Import failing when max_input_vars exceeded. Function moved to ajax_save to avoid this issue.
122
 
123
- ## 3.6.13
124
  * Skipping. I'm superstitious! - kp
125
 
126
- ## 3.6.12.2
127
  * Fixed: #3586: Database not saving properly in 'network' mode. Thanks @Tofandel.
128
  * Fixed: #3584: Improved fox for #3580. Thanks @Enchiridion.
129
 
130
- ## 3.6.12.1
131
  * Fixed: #3580 - 'tax_query' array in args for WordPress data arg throwing a string conversation error.
132
 
133
- ## 3.6.12
134
  * Fixed: #3577 - Added isset to REMOTE_ADDR check to prevent error.
135
 
136
- ## 3.6.11
137
  * Fixed: #3561, #3562 - Not all selectors in async typography were properly formed, causing them not to render properly on screen.
138
 
139
- ## 3.6.10
140
  * Updated Google font update.
141
  * Updated: #3447 - Updated RTL CSS. Thanks @Abolfazlrt.
142
  * Fixed: Duplicate ID warnings.
@@ -149,11 +152,11 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
149
  add_filter ("redux/extension/customizer/dir", $dir)
150
  add_filter ("redux/extension/customizer/url", $url)
151
 
152
- ## 3.6.9
153
  * Fixed: Bypassing a WP bug where the gallery field would show a spinner on first open with no selected images.
154
  * Fixed: #3512 - Image select in tile mode not highlighting default.
155
 
156
- ## 3.6.8
157
  * Fixed: Error in AJAX save due to incorrect object reference in redux.js.
158
  * Fixed: Removed unused set_transient in welcome routine. It was causing slow queries.
159
  * Updated: Google Font update.
@@ -162,7 +165,7 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
162
  * Fixed: #3429 - Select2 Sortable needed jQuery Sortable dependency.
163
  * Fixed: Admin noticies when multiple instances of Redux running not displaying per panel.
164
 
165
- ## 3.6.7.7
166
  * Fixed: Filesystem path correction.
167
  * Fixed: #3414: Incorrect classname causing an error on load, via the filesystem API.
168
  * Fixed: #3413 - Restored old code allowing non array value for mode. This is for backward compatibility
@@ -175,7 +178,7 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
175
  full path to default image.
176
  * Updated: Google Fonts.
177
 
178
- ## 3.6.6
179
  * Misspelled class name is system info compiler causing System Status to fail.
180
  * #3359 - Responsive issue on option panel. Too much blank space on panel in smartphone mode.
181
  * #2914, #3356 - Default image_select preset image not selected. This was originally by design. Now it's a thing.
@@ -185,7 +188,7 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
185
  * Modified: #3321 - Font subset in typography not rendering on IE and Edge (Seriously? People still use those?)
186
  * Modified: PHP7 compatibility.
187
 
188
- ## 3.6.5
189
  * Modified: #3321 - Font subset in typography not rendering on IE and Edge (Seriously? People still use those?)
190
  * Fixed: #3293 - Required not liking/hiding fields with switch default of 'false'.
191
  * Fixed: Remove leftover var_dump from the core.
@@ -201,7 +204,7 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
201
  * Fixed: Default data not saving correctly in sorter field.
202
 
203
 
204
- ## 3.6.4
205
  * Modified: Changed gitignore file to exclude sublime text files.
206
  * Fixed: #2966 - Translation bug. Identified and fixed by @iiandrade. Thanks!
207
  * Modified: Generated all CSS map files to get rid of Chrome warnings.
@@ -217,19 +220,19 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
217
  * Fixed: #3186 - Multi text field not removing single field when clicking "Remove".
218
  * Fixed: #3180, #2641 - Button set multi mode saving incorrectly. Please check your code for a possible backward compatibility issue when using this mode. The foreach() function with an empty() check must now be used, versus individual array keys as only selected options are saved to the database.
219
 
220
- ## 3.6.3
221
  * Modified: Change customizer hover styles to match WP 4.7.
222
  * Modified: #3169 - print_r of wpdb queries in dev_mode removed.
223
  * Fixed: #3159 - Support for SVG in gallery media selection.
224
  * Fixed: #3158 - PHP warning for _validate_values function when extensions installed on PHP7.
225
 
226
- ## 3.6.2
227
  * Fixed: #3105 - link_color output failing due to PHP error.
228
  * Fixed: #3103 - WP 4.6 forces new default date format, breaking date validation.
229
  * Fixed: Typography subsets error due to typo.
230
  * Fixed: Extra dead files on WP.org repo. Bah SVN.
231
 
232
- ## 3.6.1
233
  * Removed Empty PHP file from editor field.
234
  * Modified: Replaced class primary function name in browser.php to __construct for PHP7 compatibility.
235
  * Fixed: #3051 - Color_RBGA field RGBA value outputting zeros when color is left blank.
@@ -247,10 +250,10 @@ That's because the real FAQ section is on our site! Please visit [http://docs.re
247
  * Fixed: Deleted old deleted files stuck in our WP.org SVN repo.
248
 
249
 
250
- ## 3.6.0.2
251
  * Fixed Outdated customizer.min.js on wp.org causing customizer failure.
252
 
253
- ## 3.6.0.1
254
  * Fixed Outdated redux.min.js on wp.org causing option panel failure.
255
  * Fixed: #2936 - Border field outputting px with blank value.
256
  * Fixed: Resolved Theme-Check php shortcode false notice.
1
  === Redux Framework ===
2
+ Contributors: dovyp, redux
3
+ Donate link: http://paypal.me/reduxframework
4
  Tags: admin, admin interface, options, theme options, plugin options, options framework, settings, web fonts, google fonts
5
  Requires at least: 3.5.1
6
+ Tested up to: 5.3.1
7
+ Stable tag: 3.6.16
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
114
  1. This is the demo mode of Redux Framework. Activate it and you will find a fully-functional admin panel that you can play with. On the Plugins page, beneath the description and an activated Redux Framework, you will find a Demo Mode link. Click that link to activate or deactivate the sample-config file Redux ships with. Don't take our word for it, check out our online demo and try Redux without installing a thing! [**http://demo.reduxframework.com/wp-admin/**](http://demo.reduxframework.com/wp-admin/)
115
 
116
  == Changelog ==
117
+ = 3.6.16 =
118
+ * Fixed: WordPress 5.3.1 compatibility. Also added the new @redux account to the plugin.
119
+
120
+ = 3.6.15 =
121
  * Fixed: Redux API setSections would hang up when several sections with no ID share the same title.
122
 
123
+ = 3.6.14 =
124
  * Fixed: #3583: Import failing when max_input_vars exceeded. Function moved to ajax_save to avoid this issue.
125
 
126
+ = 3.6.13 =
127
  * Skipping. I'm superstitious! - kp
128
 
129
+ = 3.6.12.2 =
130
  * Fixed: #3586: Database not saving properly in 'network' mode. Thanks @Tofandel.
131
  * Fixed: #3584: Improved fox for #3580. Thanks @Enchiridion.
132
 
133
+ = 3.6.12.1 =
134
  * Fixed: #3580 - 'tax_query' array in args for WordPress data arg throwing a string conversation error.
135
 
136
+ = 3.6.12 =
137
  * Fixed: #3577 - Added isset to REMOTE_ADDR check to prevent error.
138
 
139
+ = 3.6.11 =
140
  * Fixed: #3561, #3562 - Not all selectors in async typography were properly formed, causing them not to render properly on screen.
141
 
142
+ = 3.6.10 =
143
  * Updated Google font update.
144
  * Updated: #3447 - Updated RTL CSS. Thanks @Abolfazlrt.
145
  * Fixed: Duplicate ID warnings.
152
  add_filter ("redux/extension/customizer/dir", $dir)
153
  add_filter ("redux/extension/customizer/url", $url)
154
 
155
+ = 3.6.9 =
156
  * Fixed: Bypassing a WP bug where the gallery field would show a spinner on first open with no selected images.
157
  * Fixed: #3512 - Image select in tile mode not highlighting default.
158
 
159
+ = 3.6.8 =
160
  * Fixed: Error in AJAX save due to incorrect object reference in redux.js.
161
  * Fixed: Removed unused set_transient in welcome routine. It was causing slow queries.
162
  * Updated: Google Font update.
165
  * Fixed: #3429 - Select2 Sortable needed jQuery Sortable dependency.
166
  * Fixed: Admin noticies when multiple instances of Redux running not displaying per panel.
167
 
168
+ = 3.6.7.7 =
169
  * Fixed: Filesystem path correction.
170
  * Fixed: #3414: Incorrect classname causing an error on load, via the filesystem API.
171
  * Fixed: #3413 - Restored old code allowing non array value for mode. This is for backward compatibility
178
  full path to default image.
179
  * Updated: Google Fonts.
180
 
181
+ = 3.6.6 =
182
  * Misspelled class name is system info compiler causing System Status to fail.
183
  * #3359 - Responsive issue on option panel. Too much blank space on panel in smartphone mode.
184
  * #2914, #3356 - Default image_select preset image not selected. This was originally by design. Now it's a thing.
188
  * Modified: #3321 - Font subset in typography not rendering on IE and Edge (Seriously? People still use those?)
189
  * Modified: PHP7 compatibility.
190
 
191
+ = 3.6.5 =
192
  * Modified: #3321 - Font subset in typography not rendering on IE and Edge (Seriously? People still use those?)
193
  * Fixed: #3293 - Required not liking/hiding fields with switch default of 'false'.
194
  * Fixed: Remove leftover var_dump from the core.
204
  * Fixed: Default data not saving correctly in sorter field.
205
 
206
 
207
+ = 3.6.4 =
208
  * Modified: Changed gitignore file to exclude sublime text files.
209
  * Fixed: #2966 - Translation bug. Identified and fixed by @iiandrade. Thanks!
210
  * Modified: Generated all CSS map files to get rid of Chrome warnings.
220
  * Fixed: #3186 - Multi text field not removing single field when clicking "Remove".
221
  * Fixed: #3180, #2641 - Button set multi mode saving incorrectly. Please check your code for a possible backward compatibility issue when using this mode. The foreach() function with an empty() check must now be used, versus individual array keys as only selected options are saved to the database.
222
 
223
+ = 3.6.3 =
224
  * Modified: Change customizer hover styles to match WP 4.7.
225
  * Modified: #3169 - print_r of wpdb queries in dev_mode removed.
226
  * Fixed: #3159 - Support for SVG in gallery media selection.
227
  * Fixed: #3158 - PHP warning for _validate_values function when extensions installed on PHP7.
228
 
229
+ = 3.6.2 =
230
  * Fixed: #3105 - link_color output failing due to PHP error.
231
  * Fixed: #3103 - WP 4.6 forces new default date format, breaking date validation.
232
  * Fixed: Typography subsets error due to typo.
233
  * Fixed: Extra dead files on WP.org repo. Bah SVN.
234
 
235
+ = 3.6.1 =
236
  * Removed Empty PHP file from editor field.
237
  * Modified: Replaced class primary function name in browser.php to __construct for PHP7 compatibility.
238
  * Fixed: #3051 - Color_RBGA field RGBA value outputting zeros when color is left blank.
250
  * Fixed: Deleted old deleted files stuck in our WP.org SVN repo.
251
 
252
 
253
+ = 3.6.0.2 =
254
  * Fixed Outdated customizer.min.js on wp.org causing customizer failure.
255
 
256
+ = 3.6.0.1 =
257
  * Fixed Outdated redux.min.js on wp.org causing option panel failure.
258
  * Fixed: #2936 - Border field outputting px with blank value.
259
  * Fixed: Resolved Theme-Check php shortcode false notice.
redux-framework.php CHANGED
@@ -12,7 +12,7 @@
12
  * Description: Redux is a simple, truly extensible options framework for WordPress themes and plugins.
13
  * Author: Team Redux
14
  * Author URI: http://reduxframework.com
15
- * Version: 3.6.15
16
  * Text Domain: redux-framework
17
  * License: GPL2+
18
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
12
  * Description: Redux is a simple, truly extensible options framework for WordPress themes and plugins.
13
  * Author: Team Redux
14
  * Author URI: http://reduxframework.com
15
+ * Version: 3.6.16
16
  * Text Domain: redux-framework
17
  * License: GPL2+
18
  * License URI: http://www.gnu.org/licenses/gpl-3.0.txt
sample/sample-config.php CHANGED
@@ -115,7 +115,7 @@
115
  // Force your panel to always open to a specific tab (by id)
116
  'page_icon' => 'icon-themes',
117
  // Icon displayed in the admin panel next to your menu_title
118
- 'page_slug' => '',
119
  // Page slug used to denote the panel, will be based off page title then menu title then opt_name if not provided
120
  'save_defaults' => true,
121
  // On load save the defaults to DB before user clicks save or not
115
  // Force your panel to always open to a specific tab (by id)
116
  'page_icon' => 'icon-themes',
117
  // Icon displayed in the admin panel next to your menu_title
118
+ 'page_slug' => 'redux_demo',
119
  // Page slug used to denote the panel, will be based off page title then menu title then opt_name if not provided
120
  'save_defaults' => true,
121
  // On load save the defaults to DB before user clicks save or not