User:BrandonXLF/ParameterSpacing.js

/*** Parameter spacing ***/

// Utility to easily manager parameter spacing around the equal sign // Documentation at en:w:User:BrandonXLF/ParameterSpacing // By en:w:User:BrandonXLF

$.when(mw.loader.using('oojs-ui'), $.ready).then(function {	$(mw.util.addPortletLink('p-tb', '#', 'Parameter spacing')).click(function(e) { var extra = new OO.ui.CheckboxInputWidget({				selected: true			}), pre = new OO.ui.NumberInputWidget({				input: {					value: 1				},

}),			post = new OO.ui.NumberInputWidget({ input: { value: 1, min: 0 },

}),			expand = new OO.ui.MultilineTextInputWidget({ multiline: true, autosize: true, rows: 10, maxRows: 30 });

e.preventDefault; expand.$element.css({fontFamily: 'monospace, monospace'});

function ParameterSpacingDialog(config) { ParameterSpacingDialog.super.call(this, config); }

OO.inheritClass(ParameterSpacingDialog, OO.ui.ProcessDialog);

ParameterSpacingDialog.static.name = 'paramspacing'; ParameterSpacingDialog.static.title = 'Parameter spacing'; ParameterSpacingDialog.static.actions = [ {label: 'Close', flags: ['safe', 'close']}, {label: 'Run', flags: ['primary', 'progressive'], action: 'run'} ];

ParameterSpacingDialog.prototype.initialize = function { ParameterSpacingDialog.super.prototype.initialize.apply(this, arguments);

this.content = new OO.ui.PanelLayout({				padded: true,				expanded: false			});

this.content.$element.append(				(new OO.ui.FieldLayout(extra, {label: 'Equalize equal signs', align: 'left'})).$element,				(new OO.ui.FieldLayout(pre, {label: 'Spaces before equal sign', align: 'left'})).$element,				(new OO.ui.FieldLayout(post, {label: 'Spaces after equal sign', align: 'left'})).$element,				(new OO.ui.FieldLayout(expand, {align: 'top'})).$element			);

this.$body.append(this.content.$element); };

ParameterSpacingDialog.prototype.getActionProcess = function(action) { return new OO.ui.Process(function {				if (!action) return this.close.closed;

var val = expand.getValue, max = 0;

val.replace(/(.*?\|.*?)( *)(=.*)( *)/g, function(m, m1) {					if (m1.length > max) max = m1.length;					return m;				});

val = val.replace(/(.*?\|.*?)( *)=( *)(.*)/g, function(m, m1, m2, m3, m4) {					return m1 +					' '.repeat(Math.max(0, (extra.isSelected ? max - m1.length : 0) + pre.getNumericValue)) +					'=' +					' '.repeat(Math.max(0, post.getNumericValue)) +					m4;				});

expand.setValue(val); }, this);		};

ParameterSpacingDialog.prototype.getBodyHeight = function { this.content.resetScroll; return this.content.$element.outerHeight(true); };

var dialog = new ParameterSpacingDialog({			size: 'large'		});

OO.ui.getWindowManager.addWindows([dialog]); OO.ui.getWindowManager.openWindow(dialog);

expand.on('change', function {			dialog.updateSize;		}); }); });