diff --git a/modules/backend/assets/js/october.inputpreset.js b/modules/backend/assets/js/october.inputpreset.js
index 9ccc09d42..e392465ed 100644
--- a/modules/backend/assets/js/october.inputpreset.js
+++ b/modules/backend/assets/js/october.inputpreset.js
@@ -1,17 +1,18 @@
/*
- * An input preset converter.
+ * An input preset converter.
*
* The API allows to convert text entered into an element to an URL or file name value in another input element.
- *
+ *
* Supported data attributes:
* - data-input-preset: specifies a CSS selector for a source input element
- * - data-input-preset-closest-parent: optional, specifies a CSS selector for a closest common parent
+ * - data-input-preset-closest-parent: optional, specifies a CSS selector for a closest common parent
* for the source and destination input elements.
- * - data-input-preset-type: specifies the conversion type. Supported values are: URL, file.
+ * - data-input-preset-type: specifies the conversion type. Supported values are:
+ * url, file, slug, camel.
*
* Example:
*
*
* JavaScript API:
@@ -115,6 +116,12 @@
AZERBAIJANI_MAP
]
+ var removeList = [
+ "a", "an", "as", "at", "before", "but", "by", "for", "from", "is",
+ "in", "into", "like", "of", "off", "on", "onto", "per", "since",
+ "than", "the", "this", "that", "to", "up", "via", "with"
+ ]
+
var InputPreset = function (element, options) {
var $el = this.$el = $(element);
this.options = options || {};
@@ -124,7 +131,7 @@
if ($el.val().length)
return
- var parent = options.inputPresetClosestParent !== undefined ?
+ var parent = options.inputPresetClosestParent !== undefined ?
$el.closest(options.inputPresetClosestParent) :
undefined,
self = this;
@@ -166,6 +173,26 @@
}
}
+ function toCamel(slug, numChars) {
+
+ Downcoder.Initialize()
+ slug = slug.replace(Downcoder.regex, function(m) {
+ return Downcoder.map[m]
+ })
+
+ var regex = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi')
+ slug = slug.replace(regex, '')
+ slug = slug.toLowerCase()
+ slug = slug.replace(/(\b|-)\w/g, function(m) {
+ return m.toUpperCase();
+ });
+ slug = slug.replace(/[^-\w\s]/g, '')
+ slug = slug.replace(/^\s+|\s+$/g, '')
+ slug = slug.replace(/[-\s]+/g, '')
+ slug = slug.substr(0, 1).toLowerCase() + slug.substr(1);
+ return slug.substring(0, numChars)
+ }
+
function slugify(slug, numChars) {
Downcoder.Initialize()
@@ -173,11 +200,6 @@
return Downcoder.map[m]
})
- var removeList = [
- "a", "an", "as", "at", "before", "but", "by", "for", "from", "is",
- "in", "into", "like", "of", "off", "on", "onto", "per", "since",
- "than", "the", "this", "that", "to", "up", "via", "with"
- ]
var regex = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi')
slug = slug.replace(regex, '')
slug = slug.replace(/[^-\w\s]/g, '')
@@ -215,12 +237,16 @@
}
InputPreset.prototype.formatValue = function() {
- var value = slugify(this.$src.val())
+ if (this.options.inputPresetType == 'camel')
+ var value = toCamel(this.$src.val())
+ else {
+ var value = slugify(this.$src.val())
+ }
if (this.options.inputPresetType == 'url')
value = '/' + value
- return value.toLowerCase().replace(/\s/gi, "-")
+ return value.replace(/\s/gi, "-")
}
InputPreset.DEFAULTS = {