Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
7bd17641
Commit
7bd17641
authored
Feb 06, 2018
by
Kushal Pandya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move to EE directory
parent
b9edd4e8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
201 additions
and
206 deletions
+201
-206
ee/app/assets/javascripts/filtered_search/filtered_search_token_keys_issues.js
...ipts/filtered_search/filtered_search_token_keys_issues.js
+9
-12
spec/javascripts/filtered_search/filtered_search_token_keys_issues_ee_spec.js
...tered_search/filtered_search_token_keys_issues_ee_spec.js
+0
-194
spec/javascripts/filtered_search/filtered_search_token_keys_issues_spec.js
...filtered_search/filtered_search_token_keys_issues_spec.js
+192
-0
No files found.
app/assets/javascripts/filtered_search/filtered_search_token_keys_issues_ee
.js
→
ee/app/assets/javascripts/filtered_search/filtered_search_token_keys_issues
.js
View file @
7bd17641
import
'
.
/filtered_search_token_keys
'
;
import
FilteredSearchTokenKeys
from
'
~/filtered_search
/filtered_search_token_keys
'
;
const
weightTokenKey
=
{
key
:
'
weight
'
,
...
...
@@ -26,7 +26,7 @@ const alternativeTokenKeys = [{
symbol
:
'
@
'
,
}];
class
FilteredSearchTokenKeysIssuesEE
extends
gl
.
FilteredSearchTokenKeys
{
export
default
class
FilteredSearchTokenKeysIssues
extends
FilteredSearchTokenKeys
{
static
init
(
availableFeatures
)
{
this
.
availableFeatures
=
availableFeatures
;
}
...
...
@@ -46,7 +46,7 @@ class FilteredSearchTokenKeysIssuesEE extends gl.FilteredSearchTokenKeys {
}
static
getKeys
()
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
EE
.
get
();
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
return
tokenKeys
.
map
(
i
=>
i
.
key
);
}
...
...
@@ -60,18 +60,18 @@ class FilteredSearchTokenKeysIssuesEE extends gl.FilteredSearchTokenKeys {
}
static
searchByKey
(
key
)
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
EE
.
get
();
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
return
tokenKeys
.
find
(
tokenKey
=>
tokenKey
.
key
===
key
)
||
null
;
}
static
searchBySymbol
(
symbol
)
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
EE
.
get
();
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
return
tokenKeys
.
find
(
tokenKey
=>
tokenKey
.
symbol
===
symbol
)
||
null
;
}
static
searchByKeyParam
(
keyParam
)
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
EE
.
get
();
const
alternatives
=
FilteredSearchTokenKeysIssues
EE
.
getAlternatives
();
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
alternatives
=
FilteredSearchTokenKeysIssues
.
getAlternatives
();
const
tokenKeysWithAlternative
=
tokenKeys
.
concat
(
alternatives
);
return
tokenKeysWithAlternative
.
find
((
tokenKey
)
=>
{
...
...
@@ -90,16 +90,13 @@ class FilteredSearchTokenKeysIssuesEE extends gl.FilteredSearchTokenKeys {
}
static
searchByConditionUrl
(
url
)
{
const
conditions
=
FilteredSearchTokenKeysIssues
EE
.
getConditions
();
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
return
conditions
.
find
(
condition
=>
condition
.
url
===
url
)
||
null
;
}
static
searchByConditionKeyValue
(
key
,
value
)
{
const
conditions
=
FilteredSearchTokenKeysIssues
EE
.
getConditions
();
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
return
conditions
.
find
(
condition
=>
condition
.
tokenKey
===
key
&&
condition
.
value
===
value
)
||
null
;
}
}
window
.
gl
=
window
.
gl
||
{};
gl
.
FilteredSearchTokenKeysIssuesEE
=
FilteredSearchTokenKeysIssuesEE
;
spec/javascripts/filtered_search/filtered_search_token_keys_issues_ee_spec.js
deleted
100644 → 0
View file @
b9edd4e8
import
'
~/filtered_search/filtered_search_token_keys_issues_ee
'
;
(()
=>
{
describe
(
'
Filtered Search Token Keys (Issues EE)
'
,
()
=>
{
const
weightTokenKey
=
{
key
:
'
weight
'
,
type
:
'
string
'
,
param
:
''
,
symbol
:
''
,
icon
:
'
balance-scale
'
,
tag
:
'
weight
'
,
};
describe
(
'
get
'
,
()
=>
{
let
tokenKeys
;
beforeEach
(()
=>
{
gl
.
FilteredSearchTokenKeysIssuesEE
.
init
({
multipleAssignees
:
true
,
});
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
});
it
(
'
should return tokenKeys
'
,
()
=>
{
expect
(
tokenKeys
!==
null
).
toBe
(
true
);
});
it
(
'
should return tokenKeys as an array
'
,
()
=>
{
expect
(
tokenKeys
instanceof
Array
).
toBe
(
true
);
});
it
(
'
should return weightTokenKey as part of tokenKeys
'
,
()
=>
{
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
expect
(
match
).
toEqual
(
weightTokenKey
);
});
it
(
'
should always return the same array
'
,
()
=>
{
const
tokenKeys2
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
expect
(
tokenKeys
).
toEqual
(
tokenKeys2
);
});
it
(
'
should return assignee as an array
'
,
()
=>
{
const
assignee
=
tokenKeys
.
find
(
tokenKey
=>
tokenKey
.
key
===
'
assignee
'
);
expect
(
assignee
.
type
).
toEqual
(
'
array
'
);
});
});
describe
(
'
getKeys
'
,
()
=>
{
it
(
'
should return keys
'
,
()
=>
{
const
getKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getKeys
();
const
keys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
().
map
(
i
=>
i
.
key
);
keys
.
forEach
((
key
,
i
)
=>
{
expect
(
key
).
toEqual
(
getKeys
[
i
]);
});
});
});
describe
(
'
getConditions
'
,
()
=>
{
let
conditions
;
beforeEach
(()
=>
{
conditions
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getConditions
();
});
it
(
'
should return conditions
'
,
()
=>
{
expect
(
conditions
!==
null
).
toBe
(
true
);
});
it
(
'
should return conditions as an array
'
,
()
=>
{
expect
(
conditions
instanceof
Array
).
toBe
(
true
);
});
it
(
'
should return weightConditions as part of conditions
'
,
()
=>
{
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
expect
(
weightConditions
.
length
).
toBe
(
2
);
});
});
describe
(
'
searchByKey
'
,
()
=>
{
it
(
'
should return null when key not found
'
,
()
=>
{
const
tokenKey
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKey
(
'
notakey
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by key
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKey
(
tokenKeys
[
0
].
key
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight key
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKey
(
weightTokenKey
.
key
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchBySymbol
'
,
()
=>
{
it
(
'
should return null when symbol not found
'
,
()
=>
{
const
tokenKey
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchBySymbol
(
'
notasymbol
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by symbol
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchBySymbol
(
tokenKeys
[
0
].
symbol
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight symbol
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchBySymbol
(
weightTokenKey
.
symbol
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchByKeyParam
'
,
()
=>
{
it
(
'
should return null when key param not found
'
,
()
=>
{
const
tokenKey
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKeyParam
(
'
notakeyparam
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by key param
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKeyParam
(
`
${
tokenKeys
[
0
].
key
}
_
${
tokenKeys
[
0
].
param
}
`
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return alternative tokenKey when found by key param
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getAlternatives
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKeyParam
(
`
${
tokenKeys
[
0
].
key
}
_
${
tokenKeys
[
0
].
param
}
`
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight key param
'
,
()
=>
{
const
tokenKeys
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByKeyParam
(
weightTokenKey
.
key
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchByConditionUrl
'
,
()
=>
{
it
(
'
should return null when condition url not found
'
,
()
=>
{
const
condition
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionUrl
(
null
);
expect
(
condition
===
null
).
toBe
(
true
);
});
it
(
'
should return condition when found by url
'
,
()
=>
{
const
conditions
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getConditions
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionUrl
(
conditions
[
0
].
url
);
expect
(
result
).
toBe
(
conditions
[
0
]);
});
it
(
'
should return weight condition when found by weight url
'
,
()
=>
{
const
conditions
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getConditions
();
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionUrl
(
weightConditions
[
0
].
url
);
expect
(
result
).
toBe
(
weightConditions
[
0
]);
});
});
describe
(
'
searchByConditionKeyValue
'
,
()
=>
{
it
(
'
should return null when condition tokenKey and value not found
'
,
()
=>
{
const
condition
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionKeyValue
(
null
,
null
);
expect
(
condition
===
null
).
toBe
(
true
);
});
it
(
'
should return condition when found by tokenKey and value
'
,
()
=>
{
const
conditions
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getConditions
();
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionKeyValue
(
conditions
[
0
].
tokenKey
,
conditions
[
0
].
value
);
expect
(
result
).
toEqual
(
conditions
[
0
]);
});
it
(
'
should return weight condition when found by weight tokenKey and value
'
,
()
=>
{
const
conditions
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
getConditions
();
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
const
result
=
gl
.
FilteredSearchTokenKeysIssuesEE
.
searchByConditionKeyValue
(
weightConditions
[
0
].
tokenKey
,
weightConditions
[
0
].
value
);
expect
(
result
).
toEqual
(
weightConditions
[
0
]);
});
});
});
})();
spec/javascripts/filtered_search/filtered_search_token_keys_issues_spec.js
0 → 100644
View file @
7bd17641
import
FilteredSearchTokenKeysIssues
from
'
ee/filtered_search/filtered_search_token_keys_issues
'
;
describe
(
'
Filtered Search Token Keys (Issues EE)
'
,
()
=>
{
const
weightTokenKey
=
{
key
:
'
weight
'
,
type
:
'
string
'
,
param
:
''
,
symbol
:
''
,
icon
:
'
balance-scale
'
,
tag
:
'
weight
'
,
};
describe
(
'
get
'
,
()
=>
{
let
tokenKeys
;
beforeEach
(()
=>
{
FilteredSearchTokenKeysIssues
.
init
({
multipleAssignees
:
true
,
});
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
});
it
(
'
should return tokenKeys
'
,
()
=>
{
expect
(
tokenKeys
!==
null
).
toBe
(
true
);
});
it
(
'
should return tokenKeys as an array
'
,
()
=>
{
expect
(
tokenKeys
instanceof
Array
).
toBe
(
true
);
});
it
(
'
should return weightTokenKey as part of tokenKeys
'
,
()
=>
{
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
expect
(
match
).
toEqual
(
weightTokenKey
);
});
it
(
'
should always return the same array
'
,
()
=>
{
const
tokenKeys2
=
FilteredSearchTokenKeysIssues
.
get
();
expect
(
tokenKeys
).
toEqual
(
tokenKeys2
);
});
it
(
'
should return assignee as an array
'
,
()
=>
{
const
assignee
=
tokenKeys
.
find
(
tokenKey
=>
tokenKey
.
key
===
'
assignee
'
);
expect
(
assignee
.
type
).
toEqual
(
'
array
'
);
});
});
describe
(
'
getKeys
'
,
()
=>
{
it
(
'
should return keys
'
,
()
=>
{
const
getKeys
=
FilteredSearchTokenKeysIssues
.
getKeys
();
const
keys
=
FilteredSearchTokenKeysIssues
.
get
().
map
(
i
=>
i
.
key
);
keys
.
forEach
((
key
,
i
)
=>
{
expect
(
key
).
toEqual
(
getKeys
[
i
]);
});
});
});
describe
(
'
getConditions
'
,
()
=>
{
let
conditions
;
beforeEach
(()
=>
{
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
});
it
(
'
should return conditions
'
,
()
=>
{
expect
(
conditions
!==
null
).
toBe
(
true
);
});
it
(
'
should return conditions as an array
'
,
()
=>
{
expect
(
conditions
instanceof
Array
).
toBe
(
true
);
});
it
(
'
should return weightConditions as part of conditions
'
,
()
=>
{
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
expect
(
weightConditions
.
length
).
toBe
(
2
);
});
});
describe
(
'
searchByKey
'
,
()
=>
{
it
(
'
should return null when key not found
'
,
()
=>
{
const
tokenKey
=
FilteredSearchTokenKeysIssues
.
searchByKey
(
'
notakey
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by key
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchByKey
(
tokenKeys
[
0
].
key
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight key
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
FilteredSearchTokenKeysIssues
.
searchByKey
(
weightTokenKey
.
key
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchBySymbol
'
,
()
=>
{
it
(
'
should return null when symbol not found
'
,
()
=>
{
const
tokenKey
=
FilteredSearchTokenKeysIssues
.
searchBySymbol
(
'
notasymbol
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by symbol
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchBySymbol
(
tokenKeys
[
0
].
symbol
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight symbol
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
FilteredSearchTokenKeysIssues
.
searchBySymbol
(
weightTokenKey
.
symbol
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchByKeyParam
'
,
()
=>
{
it
(
'
should return null when key param not found
'
,
()
=>
{
const
tokenKey
=
FilteredSearchTokenKeysIssues
.
searchByKeyParam
(
'
notakeyparam
'
);
expect
(
tokenKey
===
null
).
toBe
(
true
);
});
it
(
'
should return tokenKey when found by key param
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchByKeyParam
(
`
${
tokenKeys
[
0
].
key
}
_
${
tokenKeys
[
0
].
param
}
`
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return alternative tokenKey when found by key param
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
getAlternatives
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchByKeyParam
(
`
${
tokenKeys
[
0
].
key
}
_
${
tokenKeys
[
0
].
param
}
`
);
expect
(
result
).
toEqual
(
tokenKeys
[
0
]);
});
it
(
'
should return weight tokenKey when found by weight key param
'
,
()
=>
{
const
tokenKeys
=
FilteredSearchTokenKeysIssues
.
get
();
const
match
=
tokenKeys
.
find
(
tk
=>
tk
.
key
===
weightTokenKey
.
key
);
const
result
=
FilteredSearchTokenKeysIssues
.
searchByKeyParam
(
weightTokenKey
.
key
);
expect
(
result
).
toEqual
(
match
);
});
});
describe
(
'
searchByConditionUrl
'
,
()
=>
{
it
(
'
should return null when condition url not found
'
,
()
=>
{
const
condition
=
FilteredSearchTokenKeysIssues
.
searchByConditionUrl
(
null
);
expect
(
condition
===
null
).
toBe
(
true
);
});
it
(
'
should return condition when found by url
'
,
()
=>
{
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchByConditionUrl
(
conditions
[
0
].
url
);
expect
(
result
).
toBe
(
conditions
[
0
]);
});
it
(
'
should return weight condition when found by weight url
'
,
()
=>
{
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
const
result
=
FilteredSearchTokenKeysIssues
.
searchByConditionUrl
(
weightConditions
[
0
].
url
);
expect
(
result
).
toBe
(
weightConditions
[
0
]);
});
});
describe
(
'
searchByConditionKeyValue
'
,
()
=>
{
it
(
'
should return null when condition tokenKey and value not found
'
,
()
=>
{
const
condition
=
FilteredSearchTokenKeysIssues
.
searchByConditionKeyValue
(
null
,
null
);
expect
(
condition
===
null
).
toBe
(
true
);
});
it
(
'
should return condition when found by tokenKey and value
'
,
()
=>
{
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
const
result
=
FilteredSearchTokenKeysIssues
.
searchByConditionKeyValue
(
conditions
[
0
].
tokenKey
,
conditions
[
0
].
value
);
expect
(
result
).
toEqual
(
conditions
[
0
]);
});
it
(
'
should return weight condition when found by weight tokenKey and value
'
,
()
=>
{
const
conditions
=
FilteredSearchTokenKeysIssues
.
getConditions
();
const
weightConditions
=
conditions
.
filter
(
c
=>
c
.
tokenKey
===
'
weight
'
);
const
result
=
FilteredSearchTokenKeysIssues
.
searchByConditionKeyValue
(
weightConditions
[
0
].
tokenKey
,
weightConditions
[
0
].
value
);
expect
(
result
).
toEqual
(
weightConditions
[
0
]);
});
});
});
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