Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marius-wieschollek/passwords-webextension.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/NextSearch/Condition/ConditionBuilder.js')
-rw-r--r--src/js/NextSearch/Condition/ConditionBuilder.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/js/NextSearch/Condition/ConditionBuilder.js b/src/js/NextSearch/Condition/ConditionBuilder.js
new file mode 100644
index 0000000..02d8d51
--- /dev/null
+++ b/src/js/NextSearch/Condition/ConditionBuilder.js
@@ -0,0 +1,79 @@
+import FieldBuilder from '@js/NextSearch/Field/FieldBuilder';
+import AndCondition from '@js/NextSearch/Condition/AndCondition';
+import OrCondition from '@js/NextSearch/Condition/OrCondition';
+import XorCondition from '@js/NextSearch/Condition/XorCondition';
+
+export default class ConditionBuilder {
+
+ /**
+ *
+ * @param {AbstractSearchCondition} condition
+ */
+ constructor(condition) {
+ this._condition = condition;
+ }
+
+ /**
+ *
+ * @param {(String|Function)} [param]
+ * @returns {FieldBuilder|ConditionBuilder}
+ */
+ where(param) {
+ if(typeof param === 'string') {
+ return new FieldBuilder(param, this._condition, this);
+ } else if(typeof param === 'function') {
+ param(this);
+ }
+
+ return this;
+ }
+
+ /**
+ *
+ * @param {(String|Function)} [param]
+ * @returns {FieldBuilder|ConditionBuilder}
+ */
+ and(param) {
+ return this._createCondition(param, AndCondition);
+ }
+
+ /**
+ *
+ * @param {(String|Function)} [param]
+ * @returns {FieldBuilder|ConditionBuilder}
+ */
+ or(param) {
+ return this._createCondition(param, OrCondition);
+ }
+
+ /**
+ *
+ * @param {(String|Function)} [param]
+ * @returns {FieldBuilder|ConditionBuilder}
+ */
+ xor(param) {
+ return this._createCondition(param, XorCondition);
+ }
+
+ /**
+ *
+ * @param param
+ * @param conditionClass
+ * @returns {FieldBuilder|ConditionBuilder}
+ * @private
+ */
+ _createCondition(param, conditionClass) {
+ let condition = new conditionClass(),
+ builder = new ConditionBuilder(condition);
+
+ this._condition.add(condition);
+ if(typeof param === 'string') {
+ return builder.where(param);
+ } else if(typeof param === 'function') {
+ param(builder);
+ return this;
+ }
+
+ return builder;
+ }
+} \ No newline at end of file