diff --git a/modules/backend/widgets/Filter.php b/modules/backend/widgets/Filter.php
index 15a85f5d9..4049b152c 100644
--- a/modules/backend/widgets/Filter.php
+++ b/modules/backend/widgets/Filter.php
@@ -142,6 +142,7 @@ class Filter extends WidgetBase
}
break;
+
case 'numberrange':
if ($scope->value && is_array($scope->value) && count($scope->value) === 2 &&
$scope->value[0] &&
@@ -157,6 +158,12 @@ class Filter extends WidgetBase
$params['max'] = $max ? $max : null;
}
+ break;
+
+ case 'text':
+ $params['value'] = $scope->value;
+ $params['size'] = array_get($scope->config, 'size', 10);
+
break;
}
@@ -238,7 +245,7 @@ class Filter extends WidgetBase
$this->setScopeValue($scope, $number);
break;
- case 'numberrange':
+ case 'numberrange':
$numbers = $this->numbersFromAjax(post('options.numbers'));
if (!empty($numbers)) {
@@ -252,6 +259,19 @@ class Filter extends WidgetBase
$this->setScopeValue($scope, $numbers);
break;
+
+ case 'text':
+ $values = post('options.value');
+
+ if (!is_null($values) && $values !== '') {
+ list($value) = $values;
+ }
+ else {
+ $value = null;
+ }
+
+ $this->setScopeValue($scope, $value);
+ break;
}
/*
@@ -705,6 +725,25 @@ class Filter extends WidgetBase
break;
+ case 'text':
+ /*
+ * Condition
+ */
+ if ($scopeConditions = $scope->conditions) {
+ $query->whereRaw(DbDongle::parse(strtr($scopeConditions, [
+ ':value' => Db::getPdo()->quote($scope->value),
+ ])));
+ }
+
+ /*
+ * Scope
+ */
+ elseif ($scopeMethod = $scope->scope) {
+ $query->$scopeMethod($scope->value);
+ }
+
+ break;
+
default:
$value = is_array($scope->value) ? array_keys($scope->value) : $scope->value;
diff --git a/modules/backend/widgets/filter/partials/_scope_text.htm b/modules/backend/widgets/filter/partials/_scope_text.htm
new file mode 100644
index 000000000..c7e31ee19
--- /dev/null
+++ b/modules/backend/widgets/filter/partials/_scope_text.htm
@@ -0,0 +1,15 @@
+
+
+
\ No newline at end of file
diff --git a/modules/system/assets/ui/less/filter.less b/modules/system/assets/ui/less/filter.less
index 9d41ab111..071ed0658 100644
--- a/modules/system/assets/ui/less/filter.less
+++ b/modules/system/assets/ui/less/filter.less
@@ -86,6 +86,31 @@
}
}
+ &.text {
+ padding: 0 10px;
+
+ &, label {
+ margin: 0;
+ }
+
+ .form-control {
+ display: inline;
+ width: auto;
+ height: 30px;
+ margin-left: 10px;
+ }
+
+ &:after {
+ content: '';
+ }
+
+ .loading-indicator {
+ top: -2px;
+ right: 7px;
+ left: auto;
+ }
+ }
+
&:hover, &.active {
&, &.custom-checkbox label {
color: @color-filter-text-active;
diff --git a/modules/system/assets/ui/storm.css b/modules/system/assets/ui/storm.css
index 9fe8b1163..4f7bb79d7 100644
--- a/modules/system/assets/ui/storm.css
+++ b/modules/system/assets/ui/storm.css
@@ -2881,6 +2881,11 @@ ul.autocomplete.dropdown-menu.inspector-autocomplete li a{padding:5px 12px;white
.control-filter > .filter-scope.checkbox,.control-filter > .filter-scope.checkbox label{margin-bottom:0}
.control-filter > .filter-scope.checkbox label{padding-left:25px}
.control-filter > .filter-scope.checkbox:after{content:''}
+.control-filter > .filter-scope.text{padding:0 10px}
+.control-filter > .filter-scope.text,.control-filter > .filter-scope.text label{margin:0}
+.control-filter > .filter-scope.text .form-control{display:inline;width:auto;height:30px;margin-left:10px}
+.control-filter > .filter-scope.text:after{content:''}
+.control-filter > .filter-scope.text .loading-indicator{top:-2px;right:7px;left:auto}
.control-filter > .filter-scope:hover,.control-filter > .filter-scope.active,.control-filter > .filter-scope:hover.custom-checkbox label,.control-filter > .filter-scope.active.custom-checkbox label{color:#000000}
.control-filter > .filter-scope:hover .filter-label,.control-filter > .filter-scope.active .filter-label{color:#000000}
.control-filter > .filter-scope:hover.active .filter-setting,.control-filter > .filter-scope.active.active .filter-setting{background-color:#5f9a4c}