blob: 6a44fa8bb89ed1942c1d9626d14663f5351dc7e0 [file] [log] [blame]
Nils Diewald0e6992a2015-04-14 20:13:52 +00001/**
Nils Diewald4c221252015-04-21 20:19:25 +00002 * A new document criterion
Nils Diewald0e6992a2015-04-14 20:13:52 +00003 */
4
Nils Diewald0e6992a2015-04-14 20:13:52 +00005define([
Nils Diewald4c221252015-04-21 20:19:25 +00006 'vc/jsonld',
7 'vc/rewritelist',
Nils Diewaldf0c4f112015-05-05 12:56:59 +00008 'vc/stringval',
Nils Diewald4c221252015-04-21 20:19:25 +00009 'util'
Nils Diewaldf0c4f112015-05-05 12:56:59 +000010], function (jsonldClass, rewriteListClass, stringValClass) {
Nils Diewald1fcb2ad2015-04-20 19:19:18 +000011
Nils Diewald4c221252015-04-21 20:19:25 +000012 /*
13 var fieldMenu = menuClass.create([
Nils Diewald7148c6f2015-05-04 15:07:53 +000014 ['Titel', 'title', 'string'],
15 ['Untertitel', 'subTitle', 'string'],
16 ['Veröffentlichungsdatum', 'pubDate', 'date'],
17 ['Autor', 'author', 'string']
Nils Diewald4c221252015-04-21 20:19:25 +000018 ]);
19
20 fieldMenu.limit(5);
21 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000022
23 _validRegexMatchRE = new RegExp("^(?:eq|ne)$");
24
Nils Diewald4c221252015-04-21 20:19:25 +000025 var loc = KorAP.Locale;
26 loc.EMPTY = loc.EMPTY || '⋯';
Nils Diewald1fcb2ad2015-04-20 19:19:18 +000027
Nils Diewald0e6992a2015-04-14 20:13:52 +000028 return {
Nils Diewald4c221252015-04-21 20:19:25 +000029
30 // The JSON-LD type
Nils Diewald0e6992a2015-04-14 20:13:52 +000031 _ldType : "doc",
Nils Diewald4c221252015-04-21 20:19:25 +000032
33 // The object ... maybe not important
Nils Diewald0e6992a2015-04-14 20:13:52 +000034 _obj : function () { return '???'; /*KorAP.Doc*/ },
35
Nils Diewald4c221252015-04-21 20:19:25 +000036 /**
37 * Create a new document criterion
38 * by passing the parent object and a json construct.
39 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000040 create : function (parent, json) {
Nils Diewald4c221252015-04-21 20:19:25 +000041
42 // Create the object, inheriting from Json-LD class
Nils Diewald0e6992a2015-04-14 20:13:52 +000043 var obj = Object(jsonldClass).
Akrone4961b12017-05-10 21:04:46 +020044 create().
45 upgradeTo(this).
46 fromJson(json);
Nils Diewald4c221252015-04-21 20:19:25 +000047
48 // Bind the parent
Nils Diewald0e6992a2015-04-14 20:13:52 +000049 if (parent !== undefined)
Akrone4961b12017-05-10 21:04:46 +020050 obj._parent = parent;
Nils Diewald0e6992a2015-04-14 20:13:52 +000051
52 obj.__changed = true;
53 return obj;
54 },
55
Nils Diewald4c221252015-04-21 20:19:25 +000056 /**
57 * Update the elements content.
58 */
Nils Diewald0e6992a2015-04-14 20:13:52 +000059 update : function () {
60 if (this._element === undefined)
Akrone4961b12017-05-10 21:04:46 +020061 return this.element();
Nils Diewald0e6992a2015-04-14 20:13:52 +000062
63 // Get element
64 var e = this._element;
65
66 // Set ref - TODO: Cleanup!
67 e.refTo = this;
68
69 // Check if there is a change
70 if (this.__changed) {
71
Akrone4961b12017-05-10 21:04:46 +020072 // Was rewritten
73 if (this.rewrites() !== undefined) {
74 e.classList.add("rewritten");
75 };
Nils Diewald0e6992a2015-04-14 20:13:52 +000076
Akrone4961b12017-05-10 21:04:46 +020077 // Added key
78 this._keyE = document.createElement('span');
79 this._keyE.setAttribute('class', 'key');
Nils Diewald0e6992a2015-04-14 20:13:52 +000080
Akrone4961b12017-05-10 21:04:46 +020081 // Change key
82 this._keyE.addEventListener('click', this._changeKey.bind(this));
Nils Diewald0e6992a2015-04-14 20:13:52 +000083
Akrone4961b12017-05-10 21:04:46 +020084 if (this.key()) {
85 var k = this.key();
86 if (loc['VC_' + k] !== undefined)
87 k = loc['VC_' + k];
88 this._keyE.appendChild(document.createTextNode(k));
89 };
Nils Diewald4c221252015-04-21 20:19:25 +000090
Akrone4961b12017-05-10 21:04:46 +020091 // Added match operator
92 this._matchopE = document.createElement('span');
93 this._matchopE.setAttribute('data-type', this.type());
94 this._matchopE.setAttribute('class', 'match');
95 this._matchopE.appendChild(
96 document.createTextNode(this.matchop())
97 );
Nils Diewald0e6992a2015-04-14 20:13:52 +000098
Akrone4961b12017-05-10 21:04:46 +020099 // Change matchop
100 this._matchopE.addEventListener(
101 'click',
102 this._changeMatchop.bind(this)
103 );
Nils Diewald4c221252015-04-21 20:19:25 +0000104
Akrone4961b12017-05-10 21:04:46 +0200105 // Added value operator
106 this._valueE = document.createElement('span');
107 this._valueE.setAttribute('data-type', this.type());
108 this._valueE.setAttribute('class', 'value');
109 if (this.value()) {
110 this._valueE.appendChild(document.createTextNode(this.value()));
111 }
112 else {
113 this._valueE.appendChild(document.createTextNode(loc.EMPTY));
114 };
Nils Diewald4c221252015-04-21 20:19:25 +0000115
Akrone4961b12017-05-10 21:04:46 +0200116 // Change value
117 this._valueE.addEventListener(
118 'click',
119 this._changeValue.bind(this)
120 );
Nils Diewald4c221252015-04-21 20:19:25 +0000121
Nils Diewald0e6992a2015-04-14 20:13:52 +0000122
Akrone4961b12017-05-10 21:04:46 +0200123 // Remove all element children
124 _removeChildren(e);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000125
Akrone4961b12017-05-10 21:04:46 +0200126 // Add spans
127 e.appendChild(this._keyE);
128 e.appendChild(this._matchopE);
129 e.appendChild(this._valueE);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000130
Akrone4961b12017-05-10 21:04:46 +0200131 this.__changed = false;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000132 };
133
134 if (this._rewrites !== undefined) {
Akrone4961b12017-05-10 21:04:46 +0200135 e.appendChild(this._rewrites.element());
Nils Diewald0e6992a2015-04-14 20:13:52 +0000136 };
137
138 if (this._parent !== undefined) {
Akrone4961b12017-05-10 21:04:46 +0200139 // Set operators
140 var op = this.operators(
141 true,
142 true,
143 true
144 );
Nils Diewald0e6992a2015-04-14 20:13:52 +0000145
Akrone4961b12017-05-10 21:04:46 +0200146 // Append new operators
147 e.appendChild(op.element());
Nils Diewald0e6992a2015-04-14 20:13:52 +0000148 };
149
150 return e;
151 },
152
Nils Diewald4c221252015-04-21 20:19:25 +0000153
154 /**
155 * Get the associated element
156 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000157 element : function () {
158 if (this._element !== undefined)
Akrone4961b12017-05-10 21:04:46 +0200159 return this._element;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000160
161 this._element = document.createElement('div');
162 this._element.setAttribute('class', 'doc');
163
164 this.update();
165 return this._element;
166 },
167
Nils Diewald4c221252015-04-21 20:19:25 +0000168 /**
169 * Wrap a new operation around the doc element
170 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000171 wrap : function (op) {
172 var parent = this.parent();
Nils Diewald7c8ced22015-04-15 19:21:00 +0000173 var group = require('vc/docgroup').create(parent);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000174 group.operation(op);
175 group.append(this);
176 group.append();
177 return parent.replaceOperand(this, group).update();
178 },
179
Nils Diewald4c221252015-04-21 20:19:25 +0000180 /**
181 * Deserialize from json
182 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000183 fromJson : function (json) {
184 if (json === undefined)
Akrone4961b12017-05-10 21:04:46 +0200185 return this;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000186
187 if (json["@type"] === undefined) {
Akrone4961b12017-05-10 21:04:46 +0200188 KorAP.log(701, "JSON-LD group has no @type attribute");
189 return;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000190 };
191
192 if (json["value"] === undefined ||
Akrone4961b12017-05-10 21:04:46 +0200193 typeof json["value"] != 'string') {
194 KorAP.log(805, "Value is invalid");
195 return;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000196 };
197
198 // There is a defined key
199 if (json["key"] !== undefined &&
Akrone4961b12017-05-10 21:04:46 +0200200 typeof json["key"] === 'string') {
Nils Diewald0e6992a2015-04-14 20:13:52 +0000201
Akrone4961b12017-05-10 21:04:46 +0200202 // Set key
203 this.key(json["key"]);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000204
Akrone4961b12017-05-10 21:04:46 +0200205 // Set match operation
206 if (json["match"] !== undefined) {
207 if (typeof json["match"] === 'string') {
208 this.matchop(json["match"]);
209 }
210 else {
211 KorAP.log(802, "Match type is not supported by value type");
212 return;
213 };
214 };
Nils Diewald0e6992a2015-04-14 20:13:52 +0000215
Akrone4961b12017-05-10 21:04:46 +0200216 // Key is a string
217 if (json["type"] === undefined ||
218 json["type"] == "type:string") {
219 this.type("string");
Nils Diewald0e6992a2015-04-14 20:13:52 +0000220
Akrone4961b12017-05-10 21:04:46 +0200221 // Check match type
222 if (!KorAP._validStringMatchRE.test(this.matchop())) {
223 KorAP.log(802, "Match type is not supported by value type");
224 return;
225 };
Nils Diewald0e6992a2015-04-14 20:13:52 +0000226
Akrone4961b12017-05-10 21:04:46 +0200227 // Set string value
228 this.value(json["value"]);
229 }
Nils Diewald0e6992a2015-04-14 20:13:52 +0000230
Akrone4961b12017-05-10 21:04:46 +0200231 // Key is a date
232 else if (json["type"] === "type:date") {
233 this.type("date");
Nils Diewald0e6992a2015-04-14 20:13:52 +0000234
Akrone4961b12017-05-10 21:04:46 +0200235 if (json["value"] !== undefined &&
236 KorAP._validDateRE.test(json["value"])) {
Nils Diewald0e6992a2015-04-14 20:13:52 +0000237
Akrone4961b12017-05-10 21:04:46 +0200238 if (!KorAP._validDateMatchRE.test(this.matchop())) {
239 KorAP.log(802, "Match type is not supported by value type");
240 return;
241 };
Nils Diewald0e6992a2015-04-14 20:13:52 +0000242
Akrone4961b12017-05-10 21:04:46 +0200243 // Set value
244 this.value(json["value"]);
245 }
246 else {
247 KorAP.log(806, "Value is not a valid date string");
248 return;
249 };
250 }
Nils Diewald0e6992a2015-04-14 20:13:52 +0000251
Akrone4961b12017-05-10 21:04:46 +0200252 // Key is a regular expression
253 else if (json["type"] === "type:regex") {
254 this.type("regex");
Nils Diewald0e6992a2015-04-14 20:13:52 +0000255
Akrone4961b12017-05-10 21:04:46 +0200256 try {
Nils Diewald0e6992a2015-04-14 20:13:52 +0000257
Akrone4961b12017-05-10 21:04:46 +0200258 // Try to create a regular expression
259 var check = new RegExp(json["value"]);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000260
Akrone4961b12017-05-10 21:04:46 +0200261 if (!_validRegexMatchRE.test(this.matchop())) {
262 KorAP.log(802, "Match type is not supported by value type");
263 return;
264 };
Nils Diewald0e6992a2015-04-14 20:13:52 +0000265
Akrone4961b12017-05-10 21:04:46 +0200266 this.value(json["value"]);
267 }
Nils Diewald0e6992a2015-04-14 20:13:52 +0000268
Akrone4961b12017-05-10 21:04:46 +0200269 catch (e) {
270 KorAP.log(807, "Value is not a valid regular expression");
271 return;
272 };
273 this.type("regex");
274 }
Nils Diewald0e6992a2015-04-14 20:13:52 +0000275
Akrone4961b12017-05-10 21:04:46 +0200276 else {
277 KorAP.log(804, "Unknown value type");
278 return;
279 };
Nils Diewald0e6992a2015-04-14 20:13:52 +0000280 };
281
282 if (json["rewrites"] !== undefined) {
Akrone4961b12017-05-10 21:04:46 +0200283 this._rewrites = rewriteListClass.create(json["rewrites"]);
Nils Diewald0e6992a2015-04-14 20:13:52 +0000284 };
285
286 return this;
287 },
288
Nils Diewald4c221252015-04-21 20:19:25 +0000289 /**
290 * Get or set the key
291 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000292 key : function (value) {
293 if (arguments.length === 1) {
Akrone4961b12017-05-10 21:04:46 +0200294 this._key = value;
295 this._changed();
296 return this;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000297 };
298 return this._key;
299 },
300
Nils Diewald4c221252015-04-21 20:19:25 +0000301 // Click on the key, show me the menu
302 _changeKey : function (e) {
303 var menu = KorAP._vcKeyMenu;
304
305 // Insert menu
306 this._element.insertBefore(
Akrone4961b12017-05-10 21:04:46 +0200307 menu.element(),
308 this._keyE
Nils Diewald4c221252015-04-21 20:19:25 +0000309 );
310
311 // Release event
312 var that = this;
313 menu.released(function (key, type) {
Akrone4961b12017-05-10 21:04:46 +0200314 var doc = that.key(key).type(type);
Nils Diewald4c221252015-04-21 20:19:25 +0000315
Akrone4961b12017-05-10 21:04:46 +0200316 // This may not be compatible - then switch to default
317 doc.matchop(doc.matchop());
318 doc.value(doc.value());
Nils Diewald4c221252015-04-21 20:19:25 +0000319
Akrone4961b12017-05-10 21:04:46 +0200320 // Update the doc
321 doc.update();
Nils Diewald4c221252015-04-21 20:19:25 +0000322
Akrone4961b12017-05-10 21:04:46 +0200323 // hide!
324 this.hide();
Nils Diewald4c221252015-04-21 20:19:25 +0000325 });
326
327 // TODO: Highlight the old value!
328 menu.show();
329 menu.focus();
330 },
331
332 /**
333 * Get or set the match operator
334 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000335 matchop : function (match) {
336 if (arguments.length === 1) {
Akrone4961b12017-05-10 21:04:46 +0200337 var m = match.replace(/^match:/, '');
338 if (
339 (this._type === undefined)
340 ||
341 (
342 (this._type === 'string' || this._type === 'regex') &&
343 KorAP._validStringMatchRE.test(m)
344 )
345 ||
346 (this._type === 'date' && KorAP._validDateMatchRE.test(m))
347 ) {
348 this._matchop = m;
349 }
350 else {
351 this._matchop = "eq";
352 };
Nils Diewald4c221252015-04-21 20:19:25 +0000353
Akrone4961b12017-05-10 21:04:46 +0200354 this._changed();
355 return this;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000356 };
357 return this._matchop || "eq";
358 },
359
Nils Diewald4c221252015-04-21 20:19:25 +0000360
361 // Click on the match operator, show me the menu
362 _changeMatchop : function (e) {
363 var menu = KorAP._vcMatchopMenu[this.type()];
364
365 if (menu === undefined) {
Akrone4961b12017-05-10 21:04:46 +0200366 KorAP.log(0, "Unable to init menu for " + this.type());
367 return;
Nils Diewald4c221252015-04-21 20:19:25 +0000368 };
369
370 // Insert menu
371 this._element.insertBefore(
Akrone4961b12017-05-10 21:04:46 +0200372 menu.element(),
373 this._matchopE
Nils Diewald4c221252015-04-21 20:19:25 +0000374 );
375
376 // Release event
377 var that = this;
378 menu.released(function (mo) {
Akrone4961b12017-05-10 21:04:46 +0200379 that.matchop(mo).update();
380 this.hide();
Nils Diewald4c221252015-04-21 20:19:25 +0000381 });
382
383 menu.show();
384 menu.focus();
385 },
386
387
388 /**
389 * Get or set the type
390 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000391 type : function (type) {
392 if (arguments.length === 1) {
Akrone4961b12017-05-10 21:04:46 +0200393 this._type = type;
394 this._changed();
395 return this;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000396 };
397 return this._type || "string";
398 },
399
Nils Diewald4c221252015-04-21 20:19:25 +0000400
401 /**
402 * Get or set the value
403 */
Nils Diewald0e6992a2015-04-14 20:13:52 +0000404 value : function (value) {
405 if (arguments.length === 1) {
Akrone4961b12017-05-10 21:04:46 +0200406 if (this._type === 'date' && !KorAP._validDateRE.test(value)) {
407 delete this._value;
408 }
409 else {
410 this._value = value;
411 };
412 this._changed();
413 return this;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000414 };
415 return this._value;
416 },
417
Nils Diewald4c221252015-04-21 20:19:25 +0000418
419 // Click on the match operator, show me the menu
420 _changeValue : function (e) {
Nils Diewaldc4c4b832015-05-05 16:00:08 +0000421 var v = this.value();
422 var that = this;
Nils Diewald87507832015-05-01 23:36:41 +0000423
Nils Diewald7148c6f2015-05-04 15:07:53 +0000424 // Show datepicker
Nils Diewald87507832015-05-01 23:36:41 +0000425 if (this.type() === 'date') {
Akrone4961b12017-05-10 21:04:46 +0200426 var dp = KorAP._vcDatePicker;
427 dp.fromString(v)
Nils Diewald87507832015-05-01 23:36:41 +0000428
Akrone4961b12017-05-10 21:04:46 +0200429 // Todo: change this
430 dp.onclick(function (selected) {
Nils Diewald87507832015-05-01 23:36:41 +0000431
Akrone4961b12017-05-10 21:04:46 +0200432 // There are values selected
433 if (selected['year']) {
434 that.value(this.toString());
435 that.update();
436 return;
437 };
Nils Diewald87507832015-05-01 23:36:41 +0000438
Akrone4961b12017-05-10 21:04:46 +0200439 // Remove datepicker
440 that._element.removeChild(
441 dp.element()
442 );
443 });
Nils Diewald87507832015-05-01 23:36:41 +0000444
Akrone4961b12017-05-10 21:04:46 +0200445 // Get element of the date picker
446 var dpElem = dp.show();
Nils Diewald7148c6f2015-05-04 15:07:53 +0000447
Akrone4961b12017-05-10 21:04:46 +0200448 this._element.insertBefore(
449 dpElem,
450 this._valueE
451 );
Nils Diewald7148c6f2015-05-04 15:07:53 +0000452
Akrone4961b12017-05-10 21:04:46 +0200453 dpElem.focus();
454 /*
455 dpElem.addEventListener('blur', function (e) {
456 e.halt();
457
458 // Remove datepicker
459 // TODO: If focus is not set to string input
460 that._element.removeChild(this);
461 });
462 */
Nils Diewald87507832015-05-01 23:36:41 +0000463 }
464 else {
Akrone4961b12017-05-10 21:04:46 +0200465 var regex = this.type() === 'regex' ? true : false;
466 var str = stringValClass.create(this.value(), regex);
467 var strElem = str.element();
Nils Diewaldc4c4b832015-05-05 16:00:08 +0000468
Akrone4961b12017-05-10 21:04:46 +0200469 str.store = function (value, regex) {
470 that.value(value);
471 if (regex === true)
472 that.type('regex');
473 else
474 that.type('string');
475
476 that._element.removeChild(
477 this._element
478 );
479 that.update();
480 };
Nils Diewaldc4c4b832015-05-05 16:00:08 +0000481
Akrone4961b12017-05-10 21:04:46 +0200482 // Insert element
483 this._element.insertBefore(
484 strElem,
485 this._valueE
486 );
Nils Diewaldc4c4b832015-05-05 16:00:08 +0000487
Akrone4961b12017-05-10 21:04:46 +0200488 str.focus();
Nils Diewald87507832015-05-01 23:36:41 +0000489 };
Nils Diewald4c221252015-04-21 20:19:25 +0000490 },
491
492
Nils Diewald0e6992a2015-04-14 20:13:52 +0000493 rewrites : function () {
494 return this._rewrites;
495 },
496
497 _changed : function () {
498 this.__changed = true;
499
Akrone4961b12017-05-10 21:04:46 +0200500 /*
501 if (this._parent) {
502 };
503 */
Nils Diewald4347ee92015-05-04 20:32:48 +0000504
Nils Diewald0e6992a2015-04-14 20:13:52 +0000505 if (this._rewrites === undefined)
Akrone4961b12017-05-10 21:04:46 +0200506 return;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000507
508 delete this["_rewrites"];
509
510 if (this._element === undefined)
Akrone4961b12017-05-10 21:04:46 +0200511 return;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000512 this._element.classList.remove("rewritten");
513 },
514
Nils Diewald4c221252015-04-21 20:19:25 +0000515
Nils Diewald0e6992a2015-04-14 20:13:52 +0000516 toJson : function () {
517 if (!this.matchop() || !this.key())
Akrone4961b12017-05-10 21:04:46 +0200518 return {};
Nils Diewald0e6992a2015-04-14 20:13:52 +0000519
520 return {
Akrone4961b12017-05-10 21:04:46 +0200521 "@type" : "koral:" + this.ldType(),
522 "key" : this.key(),
523 "match" : "match:" + this.matchop(),
524 "value" : this.value() || '',
525 "type" : "type:" + this.type()
Nils Diewald0e6992a2015-04-14 20:13:52 +0000526 };
527 },
528
Nils Diewald4c221252015-04-21 20:19:25 +0000529
Nils Diewald0e6992a2015-04-14 20:13:52 +0000530 toQuery : function () {
531 if (!this.matchop() || !this.key())
Akrone4961b12017-05-10 21:04:46 +0200532 return "";
Nils Diewald0e6992a2015-04-14 20:13:52 +0000533
534 // Build doc string based on key
535 var string = this.key() + ' ';
536
537 // Add match operator
538 switch (this.matchop()) {
539 case "ne":
Akrone4961b12017-05-10 21:04:46 +0200540 string += '!=';
541 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000542 case "contains":
Akrone4961b12017-05-10 21:04:46 +0200543 string += '~';
544 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000545 case "excludes":
Akrone4961b12017-05-10 21:04:46 +0200546 string += '!~';
547 break;
Akron6a535d42015-08-26 20:16:58 +0200548 case "containsnot":
Akrone4961b12017-05-10 21:04:46 +0200549 string += '!~';
550 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000551 case "geq":
Akrone4961b12017-05-10 21:04:46 +0200552 string += 'since';
553 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000554 case "leq":
Akrone4961b12017-05-10 21:04:46 +0200555 string += 'until';
556 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000557 default:
Akrone4961b12017-05-10 21:04:46 +0200558 string += (this.type() == 'date') ? 'in' : '=';
559 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000560 };
561
562 string += ' ';
563
564 // Add value
565 switch (this.type()) {
566 case "date":
Akrone4961b12017-05-10 21:04:46 +0200567 return string + this.value();
568 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000569 case "regex":
Akron8778f5d2017-06-30 21:25:55 +0200570 return string + '/' + this.value().escapeRegex() + '/';
Akrone4961b12017-05-10 21:04:46 +0200571 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000572 case "string":
Akrone4961b12017-05-10 21:04:46 +0200573 return string + '"' + this.value().quote() + '"';
574 break;
Nils Diewald0e6992a2015-04-14 20:13:52 +0000575 };
576
577 return "";
578 }
579 };
580});