Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
minerva
core
Commits
8e5b88e1
Commit
8e5b88e1
authored
Dec 17, 2018
by
Piotr Gawron
Browse files
12.1.3 into master
parent
9684a25b
Pipeline
#7919
passed with stage
in 11 minutes and 1 second
Changes
36
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
.gitlab-ci.yml
View file @
8e5b88e1
...
...
@@ -278,7 +278,7 @@ test_install_debian_package:
-
echo "PUT $debian_file /docker/incoming" | sftp -o StrictHostKeyChecking=no user@debian-repo
-
ssh root@debian-repo /usr/local/sbin/reprepro-import
-
apt-add-repository "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main"
-
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
-
apt-key adv
--no-tty
--keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
-
apt-add-repository "deb http://debian-repo/ unstable main"
-
apt-get update
# auto accept oracle license
...
...
CHANGELOG
View file @
8e5b88e1
minerva
(
12.2.0
~
alpha
.0
)
stable
;
urgency
=
medium
*
Bug
fix
:
export
to
CellDesigner
align
inhibition
reaction
properly
*
Bug
fix
:
export
/
import
to
/
from
SBML
handles
Heterodimer
Association
*
Bug
fix
:
export
/
import
to
/
from
SBML
handles
Heterodimer
Association
reaction
properly
*
Small
improvement
:
export
to
SBML
includes
unit
factors
minerva
(
12.1.3
)
stable
;
urgency
=
medium
*
Bug
fix
:
add
project
button
is
disabled
when
user
has
no
privileges
*
Bug
fix
:
projectId
was
missing
in
the
edit
window
*
Bug
fix
:
user
could
provide
invalid
mesh
ID
that
caused
errors
when
browsing
map
*
Bug
fix
:
user
created
from
LDAP
connection
doesn
't have a password
stored in the database
-- Piotr Gawron <piotr.gawron@uni.lu> Fri, 14 Dec 2018 14:00:00 +0200
minerva (12.1.2) stable; urgency=medium
* Bug fix: vmh annotations should be properly matching id entered in the input
* Bug fix: opacity was not working when highliting objects in plugins
* Bug fix: integer configurtion options (like SMTP_PORT) are properly
validated before saving
* Bug fix: inside of reaction box wasn'
t
properly
aligned
*
Bug
fix
:
too
long
data
overlay
name
disturbed
size
of
the
map
div
and
interaction
with
the
map
*
Bug
fix
:
search
for
some
drugs
resulted
in
internal
server
error
*
Bug
fix
:
LDAP
login
is
case
insensitive
*
Bug
fix
:
adding
user
could
end
up
with
error
in
the
frontend
--
Piotr
Gawron
<
piotr
.
gawron
@
uni
.
lu
>
Wed
,
12
Dec
2018
16
:
00
:
00
+
0200
minerva
(
12.1.1
)
stable
;
urgency
=
medium
*
Bug
fix
:
lineWidth
in
data
overlays
was
ignored
...
...
annotation/src/main/java/lcsb/mapviewer/annotation/services/ChEMBLParser.java
View file @
8e5b88e1
...
...
@@ -156,6 +156,9 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
throw
new
InvalidArgumentException
(
"Target must be of a type: "
+
MiriamType
.
CHEMBL_TARGET
+
". But found: "
+
md
.
getDataType
());
}
if
(
md
.
getResource
().
isEmpty
())
{
throw
new
InvalidArgumentException
(
"Invalid target id"
+
md
);
}
try
{
Target
target
=
new
Target
();
target
.
setSource
(
md
);
...
...
@@ -264,13 +267,13 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
}
/**
* R
E
turns list of targes for given drug.
* R
e
turns list of targe
t
s for given drug.
*
* @param drugId
* identifier of a drug for which targets are looked
* @throws DrugSearchException
* thrown when there are problems with connection to ChEMBL database
* @return list of targes for given drug
* @return list of targe
t
s for given drug
*/
List
<
Target
>
getTargetsByDrugId
(
MiriamData
drugId
)
throws
DrugSearchException
{
if
(!
MiriamType
.
CHEMBL_COMPOUND
.
equals
(
drugId
.
getDataType
()))
{
...
...
@@ -278,8 +281,8 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
}
List
<
Target
>
targets
=
new
ArrayList
<>();
try
{
String
page
=
getWebPageContent
(
TARGET_MECHANISM_BY_DRUG_ID_API_URL
+
drugId
.
getResource
()
);
String
url
=
TARGET_MECHANISM_BY_DRUG_ID_API_URL
+
drugId
.
getResource
();
String
page
=
getWebPageContent
(
url
);
Document
document
=
getXmlDocumentFromString
(
page
);
Node
response
=
getNode
(
"response"
,
document
);
...
...
@@ -290,14 +293,17 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
if
(
node
.
getNodeType
()
==
Node
.
ELEMENT_NODE
)
{
if
(
node
.
getNodeName
().
equalsIgnoreCase
(
"mechanism"
))
{
Node
chemblTargetIdNode
=
getNode
(
"target_chembl_id"
,
node
);
MiriamData
targetMiriam
=
new
MiriamData
(
MiriamType
.
CHEMBL_TARGET
,
chemblTargetIdNode
.
getTextContent
());
String
chemblTargetId
=
chemblTargetIdNode
.
getTextContent
();
if
(
chemblTargetId
!=
null
&&
!
chemblTargetId
.
isEmpty
())
{
MiriamData
targetMiriam
=
new
MiriamData
(
MiriamType
.
CHEMBL_TARGET
,
chemblTargetId
);
Target
target
=
getTargetFromId
(
targetMiriam
);
Node
referenceNode
=
getNode
(
"mechanism_refs"
,
node
);
Target
target
=
getTargetFromId
(
targetMiriam
);
Node
referenceNode
=
getNode
(
"mechanism_refs"
,
node
);
Set
<
MiriamData
>
references
=
parseReferences
(
referenceNode
);
target
.
addReferences
(
references
);
targets
.
add
(
target
);
Set
<
MiriamData
>
references
=
parseReferences
(
referenceNode
);
target
.
addReferences
(
references
);
targets
.
add
(
target
);
}
}
}
}
...
...
@@ -327,7 +333,7 @@ public class ChEMBLParser extends DrugAnnotation implements IExternalService {
Node
typeNode
=
super
.
getNode
(
"ref_type"
,
node
);
if
(
"PubMed"
.
equalsIgnoreCase
(
typeNode
.
getTextContent
()))
{
Node
idNode
=
super
.
getNode
(
"ref_id"
,
node
);
String
id
=
idNode
.
getTextContent
();
String
id
=
idNode
.
getTextContent
()
.
trim
()
;
result
.
add
(
new
MiriamData
(
MiriamType
.
PUBMED
,
id
));
}
}
else
{
...
...
annotation/src/main/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParser.java
View file @
8e5b88e1
...
...
@@ -305,13 +305,8 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi
* @return list of drug {@link Target} parsed from input string
*/
List
<
Target
>
getTargetsForDrug
(
String
page
)
throws
DrugSearchException
{
List
<
Target
>
result
=
new
ArrayList
<>();
try
{
int
pageStart
;
Target
target
=
new
Target
();
target
.
setType
(
TargetType
.
SINGLE_PROTEIN
);
pageStart
=
page
.
indexOf
(
"bond-list-container targets"
);
int
pageStart
=
page
.
indexOf
(
"bond-list-container targets"
);
int
end
=
page
.
indexOf
(
"bond-list-container enzymes"
);
if
(
end
<
0
)
{
...
...
@@ -328,28 +323,35 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi
}
}
while
(
pageStart
>
0
&&
pageStart
<
end
)
{
int
targetStart
=
page
.
indexOf
(
"Details</a>"
,
pageStart
);
if
(
targetStart
<
0
)
{
break
;
}
int
nextTargetStart
=
page
.
indexOf
(
"Details</a>"
,
targetStart
+
1
);
if
(
nextTargetStart
<
0
)
{
nextTargetStart
=
end
;
}
target
=
parseTarget
(
page
.
substring
(
targetStart
,
nextTargetStart
));
if
(
target
!=
null
)
{
result
.
add
(
target
);
}
pageStart
=
nextTargetStart
;
}
List
<
Target
>
result
=
extractTargetsFromPageContent
(
page
,
pageStart
,
end
);
return
result
;
}
catch
(
TaxonomySearchException
e
)
{
throw
new
DrugSearchException
(
"Problem with finidng information about organism"
,
e
);
}
catch
(
UniprotSearchException
e
)
{
throw
new
DrugSearchException
(
"Problem with finidng information about protein"
,
e
);
}
}
List
<
Target
>
extractTargetsFromPageContent
(
String
page
,
int
pageStart
,
int
end
)
throws
UniprotSearchException
,
TaxonomySearchException
{
List
<
Target
>
result
=
new
ArrayList
<>();
while
(
pageStart
>
0
&&
pageStart
<
end
)
{
int
targetStart
=
page
.
indexOf
(
"Details</a>"
,
pageStart
);
if
(
targetStart
<
0
||
targetStart
>
end
)
{
break
;
}
int
nextTargetStart
=
page
.
indexOf
(
"Details</a>"
,
targetStart
+
1
);
if
(
nextTargetStart
<
0
)
{
nextTargetStart
=
end
;
}
Target
target
=
parseTarget
(
page
.
substring
(
targetStart
,
nextTargetStart
));
if
(
target
!=
null
)
{
result
.
add
(
target
);
}
pageStart
=
nextTargetStart
;
}
return
result
;
}
...
...
@@ -743,7 +745,7 @@ public class DrugbankHTMLParser extends DrugAnnotation implements IExternalServi
* Sometimes when we search for targets drugbank returns something similar to
* the target and we need to filter it out (here is an example for TF targets:
* https://www.drugbank.ca/unearth/q?utf8=%E2%9C%93&searcher=targets&query=TF)
*
*
* @param page - target webpage content
* @param hgncTarget - HGNC identifier that should match the target
* @return
...
...
annotation/src/main/java/lcsb/mapviewer/annotation/services/MeSHParser.java
View file @
8e5b88e1
...
...
@@ -110,6 +110,9 @@ public class MeSHParser extends CachableInterface implements IExternalService {
if
(
meshID
==
null
||
meshID
.
getResource
()
==
null
)
{
throw
new
InvalidArgumentException
(
"mesh cannot be null "
);
}
if
(
meshID
.
getResource
().
indexOf
(
" "
)
>=
0
)
{
return
null
;
}
MeSH
mesh
=
null
;
// look for Mesh in the cache
...
...
annotation/src/test/java/lcsb/mapviewer/annotation/services/ChEMBLParserTest.java
View file @
8e5b88e1
...
...
@@ -1102,6 +1102,19 @@ public class ChEMBLParserTest extends AnnotationTestFunctions {
}
}
@Test
public
void
testParseReferencesWithSpecInId
()
throws
Exception
{
try
{
Node
node
=
super
.
getXmlDocumentFromFile
(
"testFiles/chembl/references_with_space.xml"
);
Set
<
MiriamData
>
references
=
chemblParser
.
parseReferences
(
node
.
getFirstChild
());
assertEquals
(
1
,
references
.
size
());
assertFalse
(
references
.
iterator
().
next
().
getResource
().
contains
(
" "
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
e
;
}
}
@Test
public
void
testGetDrugByInvalidDrugId
()
throws
Exception
{
try
{
...
...
annotation/src/test/java/lcsb/mapviewer/annotation/services/DrugbankHTMLParserTest.java
View file @
8e5b88e1
...
...
@@ -780,5 +780,22 @@ public class DrugbankHTMLParserTest extends AnnotationTestFunctions {
}
}
@Test
public
void
testExtractTargetsFromPageContent
()
throws
Exception
{
try
{
String
pageContent
=
" Details</a>blablablablabla Details</a>"
;
List
<
Target
>
result
=
drugBankHTMLParser
.
extractTargetsFromPageContent
(
pageContent
,
2
,
3
);
assertEquals
(
0
,
result
.
size
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
e
;
}
}
}
annotation/src/test/java/lcsb/mapviewer/annotation/services/MeSHParserTest.java
View file @
8e5b88e1
...
...
@@ -110,6 +110,18 @@ public class MeSHParserTest extends AnnotationTestFunctions {
}
}
@Test
public
void
testIsValidWithSpace
()
throws
Exception
{
try
{
MiriamData
meshID
=
new
MiriamData
(
MiriamType
.
MESH_2012
,
"some disease"
);
assertFalse
(
meshParser
.
isValidMeshId
(
meshID
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
e
;
}
}
@Test
public
void
testGetInvalidMesh
()
throws
Exception
{
try
{
...
...
annotation/src/test/java/lcsb/mapviewer/annotation/services/annotators/ReconAnnotatorTest.java
View file @
8e5b88e1
...
...
@@ -190,6 +190,21 @@ public class ReconAnnotatorTest extends AnnotationTestFunctions {
}
}
@Test
public
void
testAnnotatingForOxygen
()
throws
Exception
{
try
{
SimpleMolecule
molecule
=
new
SimpleMolecule
(
"id"
);
molecule
.
setName
(
"o2"
);
reconAnnotator
.
annotateElement
(
molecule
);
assertTrue
(
molecule
.
getMiriamData
().
size
()
>
0
);
assertEquals
(
0
,
getWarnings
().
size
());
assertEquals
(
"O2"
,
molecule
.
getFormula
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
e
;
}
}
@Test
public
void
testAnnotatingWithWhitespace
()
throws
Exception
{
try
{
...
...
annotation/testFiles/chembl/references_with_space.xml
0 → 100644
View file @
8e5b88e1
<mechanism_refs>
<mechanism>
<ref_id>
18540918
</ref_id>
<ref_type>
PubMed
</ref_type>
<ref_url>
http://europepmc.org/abstract/MED/18540918
</ref_url>
</mechanism>
</mechanism_refs>
\ No newline at end of file
converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverter.java
View file @
8e5b88e1
...
...
@@ -161,6 +161,9 @@ public class ReactionConverter extends BioEntityConverter<Reaction> {
// draw rect border
graphics
.
draw
(
rect
);
// unrotate the graphics
graphics
.
rotate
(-
angle
,
pointX
,
pointY
);
// draw text inside rect
Font
tmpFont
=
graphics
.
getFont
();
graphics
.
setFont
(
descFont
);
...
...
@@ -182,8 +185,6 @@ public class ReactionConverter extends BioEntityConverter<Reaction> {
graphics
.
draw
(
path
);
}
// unrotate the graphics
graphics
.
rotate
(-
angle
,
pointX
,
pointY
);
}
}
...
...
converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/bioEntity/reaction/ReactionConverterTest.java
View file @
8e5b88e1
...
...
@@ -2,6 +2,9 @@ package lcsb.mapviewer.converter.graphics.bioEntity.reaction;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
mockito
.
ArgumentMatchers
.
nullable
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Matchers
.
anyDouble
;
import
static
org
.
mockito
.
Matchers
.
anyInt
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
...
...
@@ -20,9 +23,11 @@ import org.apache.commons.io.output.ByteArrayOutputStream;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.mockito.InOrder
;
import
org.mockito.Mockito
;
import
lcsb.mapviewer.commands.ColorExtractor
;
import
lcsb.mapviewer.common.geometry.PointTransformation
;
import
lcsb.mapviewer.converter.graphics.ConverterParams
;
import
lcsb.mapviewer.converter.graphics.GraphicsTestFunctions
;
import
lcsb.mapviewer.model.graphics.PolylineData
;
...
...
@@ -36,6 +41,8 @@ import lcsb.mapviewer.model.map.reaction.Product;
import
lcsb.mapviewer.model.map.reaction.Reactant
;
import
lcsb.mapviewer.model.map.reaction.Reaction
;
import
lcsb.mapviewer.model.map.reaction.SplitOperator
;
import
lcsb.mapviewer.model.map.reaction.type.KnownTransitionOmittedReaction
;
import
lcsb.mapviewer.model.map.reaction.type.UnknownTransitionReaction
;
import
lcsb.mapviewer.model.map.species.GenericProtein
;
public
class
ReactionConverterTest
extends
GraphicsTestFunctions
{
...
...
@@ -391,4 +398,53 @@ public class ReactionConverterTest extends GraphicsTestFunctions {
}
}
private
Reaction
createUnknownTransitionReaction
(
double
angle
)
{
PointTransformation
pt
=
new
PointTransformation
();
Reaction
result
=
new
UnknownTransitionReaction
();
Point2D
center
=
new
Point2D
.
Double
(
100
,
90
);
Point2D
reactantCenter
=
new
Point2D
.
Double
(
10
,
90
);
Point2D
productCenter
=
new
Point2D
.
Double
(
200
,
90
);
Point2D
reactantEnd
=
new
Point2D
.
Double
(
90
,
90
);
Point2D
productEnd
=
new
Point2D
.
Double
(
110
,
90
);
Reactant
reactant
=
new
Reactant
(
new
GenericProtein
(
"s2"
));
reactant
.
setLine
(
new
PolylineData
(
pt
.
rotatePoint
(
reactantEnd
,
angle
,
center
),
pt
.
rotatePoint
(
reactantCenter
,
angle
,
center
)));
reactant
.
getLine
().
setWidth
(
1.0
);
Product
product
=
new
Product
(
new
GenericProtein
(
"s3"
));
product
.
setLine
(
new
PolylineData
(
pt
.
rotatePoint
(
productCenter
,
angle
,
center
),
pt
.
rotatePoint
(
productEnd
,
angle
,
center
)));
product
.
getLine
().
setWidth
(
1.0
);
result
.
addProduct
(
product
);
result
.
addReactant
(
reactant
);
return
result
;
}
@Test
public
void
testDrawReactionWithRectangle
()
throws
Exception
{
try
{
for
(
double
angle
=
0.0
;
angle
<=
Math
.
PI
*
2
;
angle
+=
0.1
)
{
Graphics2D
graphics
=
createGraphicsMock
();
ReactionConverter
rc
=
new
ReactionConverter
(
colorExtractor
);
Reaction
reaction
=
createUnknownTransitionReaction
(
angle
);
rc
.
draw
(
reaction
,
graphics
,
new
ConverterParams
().
sbgnFormat
(
false
));
InOrder
inOrder
=
Mockito
.
inOrder
(
graphics
);
inOrder
.
verify
(
graphics
).
rotate
(
anyDouble
(),
anyDouble
(),
anyDouble
());
inOrder
.
verify
(
graphics
).
rotate
(
anyDouble
(),
anyDouble
(),
anyDouble
());
inOrder
.
verify
(
graphics
).
drawString
(
any
(
String
.
class
),
anyInt
(),
anyInt
());
}
}
catch
(
Exception
e
)
{
throw
e
;
}
}
}
frontend-js/src/main/css/global.css
View file @
8e5b88e1
...
...
@@ -465,6 +465,7 @@ table.minerva-window-drug-table td {
.minerva-left-panel
{
position
:
relative
;
flex
:
0
0
357px
;
max-width
:
357px
;
border
:
none
;
background-color
:
#ffffff
;
height
:
100%
;
...
...
frontend-js/src/main/js/GuiConnector.js
View file @
8e5b88e1
...
...
@@ -229,7 +229,7 @@ GuiConnector.prototype.hideProcessing = function () {
/**
*
* @param {string} error
* @param {string
|Error
} error
* @param {boolean} [redirectIfSecurityError]
*/
GuiConnector
.
prototype
.
alert
=
function
(
error
,
redirectIfSecurityError
)
{
...
...
frontend-js/src/main/js/ServerConnector.js
View file @
8e5b88e1
...
...
@@ -1796,7 +1796,12 @@ ServerConnector.login = function (login, password) {
}
else
{
params
.
login
=
"
anonymous
"
;
}
return
self
.
sendPostRequest
(
self
.
loginUrl
(),
params
).
then
(
function
()
{
return
self
.
sendPostRequest
(
self
.
loginUrl
(),
params
).
then
(
function
(
content
)
{
var
data
=
JSON
.
parse
(
content
);
if
(
data
[
"
login
"
]
!==
undefined
)
{
params
.
login
=
data
[
"
login
"
];
}
console
.
log
(
params
.
login
);
self
.
getSessionData
().
setLogin
(
params
.
login
);
return
Promise
.
resolve
(
self
.
getSessionData
().
getToken
());
},
function
(
error
)
{
...
...
frontend-js/src/main/js/gui/admin/AddProjectDialog.js
View file @
8e5b88e1
...
...
@@ -254,7 +254,7 @@ AddProjectDialog.prototype.createGeneralTabContent = function () {
inputName
:
"
project-annotate-automatically
"
,
elements
:
[
showAnnotatorsButton
],
help
:
'
If this checkbox is checked, elements of the uploaded map will be automatically annotated using built in
'
+
'
annotators. Behavior of the annotators can be configured by clicking the Advanced button.
'
'
annotators. Behavior of the annotators can be configured by clicking the Advanced button.
'
}));
table
.
appendChild
(
self
.
createCheckboxRow
({
labelName
:
"
Verify manual annotations:
"
,
...
...
@@ -262,36 +262,46 @@ AddProjectDialog.prototype.createGeneralTabContent = function () {
inputName
:
"
project-verify-annotations
"
,
elements
:
[
showValidatorsButton
],
help
:
'
If this checkbox is checked, elements and interactions of the uploaded map will be scanned for existing
'
+
'
annotations; if present these existing annotations will be validated against a set of rules. Verification rules
'
+
'
can be configured by clicking the Advanced button.
'
'
annotations; if present these existing annotations will be validated against a set of rules. Verification rules
'
+
'
can be configured by clicking the Advanced button.
'
}));
table
.
appendChild
(
self
.
createCheckboxRow
({
labelName
:
"
Cache data:
"
,
defaultValue
:
false
,
inputName
:
"
project-cache-data
"
,
help
:
'
If this checkbox is checked, all hyperlinks in the project resolved by MIRIAM repository (e.g. cross-links
'
+
'
to external bioinformatics databases) are resolved and cached.
'
'
to external bioinformatics databases) are resolved and cached.
'
}));
table
.
appendChild
(
self
.
createCheckboxRow
({
labelName
:
"
Auto margin:
"
,
defaultValue
:
true
,
inputName
:
"
project-auto-margin
"
,
help
:
'
If this checkbox is checked, upon generation of the graphics, empty spaces surrounding elements and
'
+
'
interactions will be cropped.
'
'
interactions will be cropped.
'
}));
table
.
appendChild
(
self
.
createCheckboxRow
({
labelName
:
"
Display as SBGN:
"
,
defaultValue
:
false
,
inputName
:
"
project-sbgn-visualization
"
,
help
:
'
If this checkbox is checked, the uploaded model will be displayed in SBGN format, instead of default
'
+
'
CellDesigner format.
'
'
CellDesigner format.
'
}));
table
.
appendChild
(
self
.
createCheckboxRow
({
labelName
:
"
Custom semantic zooming contains multiple overlays:
"
,
defaultValue
:
false
,
inputName
:
"
project-semantic-zooming-contains-multiple-overlays
"
inputName
:
"
project-semantic-zooming-contains-multiple-overlays
"
,
help
:
"
Check this checkbox to display each semantic zoom level in the General Overlays
"
}));
$
(
"
[name='project-semantic-zooming']
"
,
table
).
change
(
function
()
{
var
disable
=
!
$
(
"
[name='project-semantic-zooming']
"
,
table
).
is
(
"
:checked
"
);
$
(
"
[name='project-semantic-zooming-contains-multiple-overlays']
"
,
table
).
prop
(
"
disabled
"
,
disable
);
if
(
disable
)
{
$
(
"
[name='project-semantic-zooming-contains-multiple-overlays']
"
,
table
).
prop
(
"
checked
"
,
false
);
}
});
$
(
"
[name='project-semantic-zooming-contains-multiple-overlays']
"
,
table
).
prop
(
"
disabled
"
,
!
$
(
"
[name='project-semantic-zooming']
"
,
table
).
is
(
"
:checked
"
));
var
saveProjectButton
=
Functions
.
createElement
({
type
:
"
button
"
,
name
:
"
saveProject
"
,
...
...
frontend-js/src/main/js/gui/admin/EditProjectDialog.js
View file @
8e5b88e1
...
...
@@ -10,6 +10,8 @@ var CommentsTab = require('./CommentsAdminPanel');
var
GuiConnector
=
require
(
'
../../GuiConnector
'
);
var
PrivilegeType
=
require
(
'
../../map/data/PrivilegeType
'
);
var
ValidationError
=
require
(
"
../../ValidationError
"
);
var
HttpStatus
=
require
(
'
http-status-codes
'
);
var
NetworkError
=
require
(
'
../../NetworkError
'
);
var
Functions
=
require
(
'
../../Functions
'
);
// noinspection JSUnusedLocalSymbols
...
...
@@ -256,7 +258,14 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
return
self
.
callListeners
(
"
onSave
"
);
}).
then
(
function
()
{
return
self
.
close
();
}).
catch
(
GuiConnector
.
alert
);
}).
catch
(
function
(
error
)
{
if
((
error
instanceof
NetworkError
&&
error
.
statusCode
===
HttpStatus
.
BAD_REQUEST
))
{
GuiConnector
.
alert
(
error
.
content
.
reason
);
}
else
{
GuiConnector
.
alert
(
error
);
}
});
},
xss
:
false
});
...
...
@@ -543,7 +552,7 @@ EditProjectDialog.prototype.refresh = function () {
var
element
=
self
.
getElement
();
var
project
=
self
.
getProject
();
$
(
"
[name='projectName']
"
,
element
).
val
(
xss
(
project
.
getName
()));
$
(
"
[name='projectId']
"
,
element
).
val
(
project
.
getProjectId
());
$
(
"
[name='projectId']
"
,
element
).
html
(
xss
(
project
.
getProjectId
())
)
;
$
(
"
[name='projectVersion']
"
,
element
).
val
(
xss
(
project
.
getVersion
()));
var
disease
=
""
;
...
...
frontend-js/src/main/js/gui/admin/EditUserDialog.js
View file @
8e5b88e1
...
...
@@ -693,7 +693,10 @@ EditUserDialog.prototype.getSurname = function () {
*/
EditUserDialog
.
prototype
.
close
=
function
()
{
var
self
=
this
;
$
(
self
.
getElement
()).
dialog
(
"
close
"
);
if
(
$
(
self
.
getElement
()).
hasClass
(
"
ui-dialog-content
"
))
{
//close it only if it wasn't destroyed
$
(
self
.
getElement
()).
dialog
(
"
close
"
);
}
};
/**
...
...
frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
View file @
8e5b88e1
...
...
@@ -187,6 +187,12 @@ MapsAdminPanel.prototype.init = function () {
var
self
=
this
;
return
self
.
getServerConnector
().
getProjects
().
then
(
function
(
projects
)
{
return
self
.
setProjects
(
projects
);
}).
then
(
function
()
{
return
self
.
getServerConnector
().
getLoggedUser
();
}).
then
(
function
(
user
)
{
var
configuration
=
self
.
getConfiguration
();
var
canAddProject
=
user
.
hasPrivilege
(
configuration
.
getPrivilegeType
(
PrivilegeType
.
PROJECT_MANAGEMENT
));
$
(
"
[name='addProject']
"
,
self
.
getElement
()).
attr
(
"
disabled
"
,
!
canAddProject
);
});
};
...
...
frontend-js/src/main/js/gui/admin/UsersAdminPanel.js
View file @
8e5b88e1
...
...
@@ -69,7 +69,7 @@ UsersAdminPanel.prototype._createMenuRow = function () {
var
addUserButton
=
Functions
.
createElement
({
type
:
"
button
"
,
name
:
"
add
Project
"
,
name
:
"
add
User
"
,