Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jio-main
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Hardik Juneja
jio-main
Commits
9d099782
Commit
9d099782
authored
Jul 05, 2013
by
Tristan Cavelier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
complex_queries.js updated
parent
5dbd4ad1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
70 additions
and
21 deletions
+70
-21
complex_queries.js
complex_queries.js
+70
-21
No files found.
complex_queries.js
View file @
9d099782
...
@@ -31,8 +31,6 @@ var complex_queries;
...
@@ -31,8 +31,6 @@ var complex_queries;
/**
/**
* Parse a text request to a json query object tree
* Parse a text request to a json query object tree
*
*
* @method parseStringToObject
* @static
* @param {String} string The string to parse
* @param {String} string The string to parse
* @return {Object} The json query tree
* @return {Object} The json query tree
*/
*/
...
@@ -737,6 +735,8 @@ function stringEscapeRegexpCharacters(string) {
...
@@ -737,6 +735,8 @@ function stringEscapeRegexpCharacters(string) {
if
(
typeof
string
===
"
string
"
)
{
if
(
typeof
string
===
"
string
"
)
{
return
string
.
replace
(
/
([\\\.\$\[\]\(\)\{\}\^\?\*\+\-])
/g
,
"
\\
$1
"
);
return
string
.
replace
(
/
([\\\.\$\[\]\(\)\{\}\^\?\*\+\-])
/g
,
"
\\
$1
"
);
}
}
throw
new
TypeError
(
"
complex_queries.stringEscapeRegexpCharacters():
"
+
"
Argument no 1 is not of type 'string'
"
);
}
}
_export
(
"
stringEscapeRegexpCharacters
"
,
stringEscapeRegexpCharacters
);
_export
(
"
stringEscapeRegexpCharacters
"
,
stringEscapeRegexpCharacters
);
...
@@ -754,9 +754,13 @@ function sortFunction(key, way) {
...
@@ -754,9 +754,13 @@ function sortFunction(key, way) {
return
a
[
key
]
<
b
[
key
]
?
1
:
a
[
key
]
>
b
[
key
]
?
-
1
:
0
;
return
a
[
key
]
<
b
[
key
]
?
1
:
a
[
key
]
>
b
[
key
]
?
-
1
:
0
;
};
};
}
}
return
function
(
a
,
b
)
{
if
(
way
===
'
ascending
'
)
{
return
a
[
key
]
>
b
[
key
]
?
1
:
a
[
key
]
<
b
[
key
]
?
-
1
:
0
;
return
function
(
a
,
b
)
{
};
return
a
[
key
]
>
b
[
key
]
?
1
:
a
[
key
]
<
b
[
key
]
?
-
1
:
0
;
};
}
throw
new
TypeError
(
"
complex_queries.sortFunction():
"
+
"
Argument 2 must be 'ascending' or 'descending'
"
);
}
}
/**
/**
...
@@ -768,7 +772,7 @@ function sortFunction(key, way) {
...
@@ -768,7 +772,7 @@ function sortFunction(key, way) {
*/
*/
function
deepClone
(
object
)
{
function
deepClone
(
object
)
{
var
i
,
cloned
;
var
i
,
cloned
;
if
(
Object
.
prototype
.
toString
.
call
(
object
)
===
"
[object Array]
"
)
{
if
(
Array
.
isArray
(
object
)
)
{
cloned
=
[];
cloned
=
[];
for
(
i
=
0
;
i
<
object
.
length
;
i
+=
1
)
{
for
(
i
=
0
;
i
<
object
.
length
;
i
+=
1
)
{
cloned
[
i
]
=
deepClone
(
object
[
i
]);
cloned
[
i
]
=
deepClone
(
object
[
i
]);
...
@@ -791,10 +795,20 @@ function deepClone(object) {
...
@@ -791,10 +795,20 @@ function deepClone(object) {
* Inherits the prototype methods from one constructor into another. The
* Inherits the prototype methods from one constructor into another. The
* prototype of `constructor` will be set to a new object created from
* prototype of `constructor` will be set to a new object created from
* `superConstructor`.
* `superConstructor`.
*
* @param {Function} constructor The constructor which inherits the super one
* @param {Function} superConstructor The super constructor
*/
*/
function
inherits
(
constructor
,
superConstructor
)
{
function
inherits
(
constructor
,
superConstructor
)
{
constructor
.
super_
=
superConstructor
;
constructor
.
super_
=
superConstructor
;
constructor
.
prototype
=
Object
.
create
(
superConstructor
.
prototype
,
{});
constructor
.
prototype
=
Object
.
create
(
superConstructor
.
prototype
,
{
"
constructor
"
:
{
"
configurable
"
:
true
,
"
enumerable
"
:
false
,
"
writable
"
:
true
,
"
value
"
:
constructor
}
});
}
}
/**
/**
...
@@ -806,8 +820,6 @@ function emptyFunction() {}
...
@@ -806,8 +820,6 @@ function emptyFunction() {}
* Filter a list of items, modifying them to select only wanted keys. If
* Filter a list of items, modifying them to select only wanted keys. If
* `clone` is true, then the method will act on a cloned list.
* `clone` is true, then the method will act on a cloned list.
*
*
* @method select
* @static
* @param {Array} select_option Key list to keep
* @param {Array} select_option Key list to keep
* @param {Array} list The item list to filter
* @param {Array} list The item list to filter
* @param {Boolean} [clone=false] If true, modifies a clone of the list
* @param {Boolean} [clone=false] If true, modifies a clone of the list
...
@@ -815,7 +827,15 @@ function emptyFunction() {}
...
@@ -815,7 +827,15 @@ function emptyFunction() {}
*/
*/
function
select
(
select_option
,
list
,
clone
)
{
function
select
(
select_option
,
list
,
clone
)
{
var
i
,
j
,
new_item
;
var
i
,
j
,
new_item
;
if
(
clone
)
{
if
(
!
Array
.
isArray
(
select_option
))
{
throw
new
TypeError
(
"
complex_queries.select():
"
+
"
Argument 1 is not of type Array
"
);
}
if
(
!
Array
.
isArray
(
list
))
{
throw
new
TypeError
(
"
complex_queries.select():
"
+
"
Argument 2 is not of type Array
"
);
}
if
(
clone
===
true
)
{
list
=
deepClone
(
list
);
list
=
deepClone
(
list
);
}
}
for
(
i
=
0
;
i
<
list
.
length
;
i
+=
1
)
{
for
(
i
=
0
;
i
<
list
.
length
;
i
+=
1
)
{
...
@@ -839,8 +859,6 @@ _export('select', select);
...
@@ -839,8 +859,6 @@ _export('select', select);
* Sort a list of items, according to keys and directions. If `clone` is true,
* Sort a list of items, according to keys and directions. If `clone` is true,
* then the method will act on a cloned list.
* then the method will act on a cloned list.
*
*
* @method sortOn
* @static
* @param {Array} sort_on_option List of couples [key, direction]
* @param {Array} sort_on_option List of couples [key, direction]
* @param {Array} list The item list to sort
* @param {Array} list The item list to sort
* @param {Boolean} [clone=false] If true, modifies a clone of the list
* @param {Boolean} [clone=false] If true, modifies a clone of the list
...
@@ -848,6 +866,10 @@ _export('select', select);
...
@@ -848,6 +866,10 @@ _export('select', select);
*/
*/
function
sortOn
(
sort_on_option
,
list
,
clone
)
{
function
sortOn
(
sort_on_option
,
list
,
clone
)
{
var
sort_index
;
var
sort_index
;
if
(
!
Array
.
isArray
(
sort_on_option
))
{
throw
new
TypeError
(
"
complex_queries.sortOn():
"
+
"
Argument 1 is not of type 'array'
"
);
}
if
(
clone
)
{
if
(
clone
)
{
list
=
deepClone
(
list
);
list
=
deepClone
(
list
);
}
}
...
@@ -867,14 +889,20 @@ _export('sortOn', sortOn);
...
@@ -867,14 +889,20 @@ _export('sortOn', sortOn);
* Limit a list of items, according to index and length. If `clone` is true,
* Limit a list of items, according to index and length. If `clone` is true,
* then the method will act on a cloned list.
* then the method will act on a cloned list.
*
*
* @method limit
* @static
* @param {Array} limit_option A couple [from, length]
* @param {Array} limit_option A couple [from, length]
* @param {Array} list The item list to limit
* @param {Array} list The item list to limit
* @param {Boolean} [clone=false] If true, modifies a clone of the list
* @param {Boolean} [clone=false] If true, modifies a clone of the list
* @return {Array} The filtered list
* @return {Array} The filtered list
*/
*/
function
limit
(
limit_option
,
list
,
clone
)
{
function
limit
(
limit_option
,
list
,
clone
)
{
if
(
!
Array
.
isArray
(
limit_option
))
{
throw
new
TypeError
(
"
complex_queries.limit():
"
+
"
Argument 1 is not of type 'array'
"
);
}
if
(
!
Array
.
isArray
(
list
))
{
throw
new
TypeError
(
"
complex_queries.limit():
"
+
"
Argument 2 is not of type 'array'
"
);
}
if
(
clone
)
{
if
(
clone
)
{
list
=
deepClone
(
list
);
list
=
deepClone
(
list
);
}
}
...
@@ -890,15 +918,25 @@ _export('limit', limit);
...
@@ -890,15 +918,25 @@ _export('limit', limit);
/**
/**
* Convert a search text to a regexp.
* Convert a search text to a regexp.
*
*
* @method convertStringToRegExp
* @static
* @param {String} string The string to convert
* @param {String} string The string to convert
* @param {String} [wildcard_character=undefined] The wildcard chararter
* @param {String} [wildcard_character=undefined] The wildcard chararter
* @return {RegExp} The search text regexp
* @return {RegExp} The search text regexp
*/
*/
function
convertStringToRegExp
(
string
,
wildcard_character
)
{
function
convertStringToRegExp
(
string
,
wildcard_character
)
{
if
(
typeof
string
!==
'
string
'
)
{
throw
new
TypeError
(
"
complex_queries.convertStringToRegExp():
"
+
"
Argument 1 is not of type 'string'
"
);
}
if
(
wildcard_character
===
undefined
||
wildcard_character
===
null
||
wildcard_character
===
''
)
{
return
new
RegExp
(
"
^
"
+
stringEscapeRegexpCharacters
(
string
)
+
"
$
"
);
}
if
(
typeof
wildcard_character
!==
'
string
'
||
wildcard_character
.
length
>
1
)
{
throw
new
TypeError
(
"
complex_queries.convertStringToRegExp():
"
+
"
Optional argument 2 must be a string of length <= 1
"
);
}
return
new
RegExp
(
"
^
"
+
stringEscapeRegexpCharacters
(
string
).
replace
(
return
new
RegExp
(
"
^
"
+
stringEscapeRegexpCharacters
(
string
).
replace
(
stringEscapeRegexpCharacters
(
wildcard_character
),
new
RegExp
(
stringEscapeRegexpCharacters
(
wildcard_character
),
'
g
'
),
'
.*
'
'
.*
'
)
+
"
$
"
);
)
+
"
$
"
);
}
}
...
@@ -939,7 +977,8 @@ QueryFactory.create = function (object) {
...
@@ -939,7 +977,8 @@ QueryFactory.create = function (object) {
query_class_dict
[
object
.
type
])
{
query_class_dict
[
object
.
type
])
{
return
new
query_class_dict
[
object
.
type
](
object
);
return
new
query_class_dict
[
object
.
type
](
object
);
}
}
return
null
;
throw
new
TypeError
(
"
QueryFactory.create():
"
+
"
Argument 1 is not a search text or a parsable object
"
);
};
};
_export
(
"
QueryFactory
"
,
QueryFactory
);
_export
(
"
QueryFactory
"
,
QueryFactory
);
...
@@ -994,7 +1033,6 @@ function Query() {
...
@@ -994,7 +1033,6 @@ function Query() {
this
.
onParseEnd
=
emptyFunction
;
this
.
onParseEnd
=
emptyFunction
;
}
}
Query
.
prototype
.
constructor
=
Query
;
/**
/**
* Filter the item list with matching item only
* Filter the item list with matching item only
...
@@ -1011,6 +1049,19 @@ Query.prototype.constructor = Query;
...
@@ -1011,6 +1049,19 @@ Query.prototype.constructor = Query;
*/
*/
Query
.
prototype
.
exec
=
function
(
item_list
,
option
)
{
Query
.
prototype
.
exec
=
function
(
item_list
,
option
)
{
var
i
=
0
;
var
i
=
0
;
if
(
!
Array
.
isArray
(
item_list
))
{
throw
new
TypeError
(
"
Query().exec(): Argument 1 is not of type 'array'
"
);
}
if
(
option
===
undefined
)
{
option
=
{};
}
if
(
typeof
option
!==
'
object
'
)
{
throw
new
TypeError
(
"
Query().exec():
"
+
"
Optional argument 2 is not of type 'object'
"
);
}
if
(
option
.
wildcard_character
===
undefined
)
{
option
.
wildcard_character
=
'
%
'
;
}
while
(
i
<
item_list
.
length
)
{
while
(
i
<
item_list
.
length
)
{
if
(
!
this
.
match
(
item_list
[
i
],
option
.
wildcard_character
))
{
if
(
!
this
.
match
(
item_list
[
i
],
option
.
wildcard_character
))
{
item_list
.
splice
(
i
,
1
);
item_list
.
splice
(
i
,
1
);
...
@@ -1148,7 +1199,6 @@ function SimpleQuery(spec) {
...
@@ -1148,7 +1199,6 @@ function SimpleQuery(spec) {
}
}
inherits
(
SimpleQuery
,
Query
);
inherits
(
SimpleQuery
,
Query
);
SimpleQuery
.
prototype
.
constructor
=
SimpleQuery
;
/**
/**
* #crossLink "Query/match:method"
* #crossLink "Query/match:method"
...
@@ -1306,7 +1356,6 @@ function ComplexQuery(spec) {
...
@@ -1306,7 +1356,6 @@ function ComplexQuery(spec) {
}
}
inherits
(
ComplexQuery
,
Query
);
inherits
(
ComplexQuery
,
Query
);
ComplexQuery
.
prototype
.
constructor
=
ComplexQuery
;
/**
/**
* #crossLink "Query/match:method"
* #crossLink "Query/match:method"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment