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
6df0f0af
Commit
6df0f0af
authored
Jul 22, 2019
by
Piotr Gawron
Browse files
list of plugins is automatically reloaded on refresh page
parent
73a7b0b4
Pipeline
#11959
passed with stage
in 13 minutes and 44 seconds
Changes
6
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
CHANGELOG
View file @
6df0f0af
minerva
(
13.1.2
)
stable
;
urgency
=
medium
*
Bug
fix
:
Information
about
problematic
zip
file
is
more
specific
(#
865
)
*
Bug
fix
:
Url
didn
't contain list of opened plugins and they weren'
t
reload
automatically
on
refresh
(#
866
)
--
Piotr
Gawron
<
piotr
.
gawron
@
uni
.
lu
>
Mon
,
22
Jul
2019
17
:
00
:
00
+
0200
...
...
frontend-js/src/main/js/ServerConnector.js
View file @
6df0f0af
...
...
@@ -1320,6 +1320,19 @@ ServerConnector.getPluginsData = function () {
});
};
/**
*
* @param {string} hash
* @returns {Promise<PluginData>}
*/
ServerConnector
.
getPluginData
=
function
(
hash
)
{
var
self
=
this
;
return
self
.
sendGetRequest
(
self
.
getPluginUrl
({
hash
:
hash
})).
then
(
function
(
content
)
{
var
data
=
JSON
.
parse
(
content
);
return
new
PluginData
(
data
);
}).
catch
(
self
.
processNetworkError
);
};
/**
*
* @param {Object} params
...
...
frontend-js/src/main/js/minerva.js
View file @
6df0f0af
...
...
@@ -278,13 +278,13 @@ function initGlobals(params) {
if
(
global
.
ServerConnector
===
undefined
)
{
global
.
ServerConnector
=
ServerConnector
;
if
(
params
.
isDebug
())
{
logger
.
level
=
"
debug
"
;
logger
.
level
=
"
debug
"
;
}
else
{
logger
.
level
=
"
info
"
;
logger
.
level
=
"
info
"
;
}
GuiConnector
.
init
();
if
(
GuiConnector
.
getParams
[
'
debug
'
]
!==
undefined
)
{
logger
.
level
=
"
debug
"
;
logger
.
level
=
"
debug
"
;
}
}
else
{
logger
.
warn
(
"
global ServerConnector found
"
);
...
...
@@ -584,6 +584,18 @@ function create(params) {
for
(
var
i
=
0
;
i
<
params
.
getPlugins
().
length
;
i
++
)
{
promises
.
push
(
leftPanel
.
getPluginManager
().
addPlugin
(
params
.
getPlugins
()[
i
]))
}
if
(
GuiConnector
.
getParams
[
'
plugins
'
]
!==
undefined
)
{
var
hashes
=
GuiConnector
.
getParams
[
'
plugins
'
].
split
(
"
,
"
);
for
(
i
=
0
;
i
<
hashes
.
length
;
i
++
)
{
promises
.
push
(
ServerConnector
.
getPluginData
(
hashes
[
i
]).
then
(
function
(
plugin
)
{
if
(
plugin
!==
null
)
{
return
leftPanel
.
getPluginManager
().
addPlugin
({
url
:
plugin
.
getUrls
()[
0
]});
}
else
{
GuiConnector
.
warn
(
"
Plugin list contains invalid object.
"
);
}
}))
}
}
return
Promise
.
all
(
promises
);
}).
then
(
function
()
{
return
ServerConnector
.
getLoggedUser
();
...
...
@@ -674,7 +686,7 @@ function createLoginDiv(configuration) {
className
:
"
minerva-login-caps-lock-warning
"
,
content
:
"
Warning: Caps lock is on
"
}));
GuiConnector
.
addListener
(
"
onCapsLockChange
"
,
function
(
e
){
GuiConnector
.
addListener
(
"
onCapsLockChange
"
,
function
(
e
)
{
if
(
e
.
arg
)
{
$
(
"
.minerva-login-caps-lock-warning
"
).
css
(
"
display
"
,
"
block
"
);
}
else
{
...
...
frontend-js/src/main/js/plugin/Plugin.js
View file @
6df0f0af
...
...
@@ -39,6 +39,12 @@ var pluginId = 0;
function
Plugin
(
options
)
{
ObjectWithListeners
.
call
(
this
);
var
self
=
this
;
/**
*
* @type {string}
* @private
*/
self
.
_hash
=
''
;
self
.
setOptions
(
options
);
self
.
registerListenerType
(
"
onUnload
"
);
self
.
registerListenerType
(
"
onResize
"
);
...
...
@@ -162,6 +168,7 @@ Plugin.prototype.load = function () {
version
:
self
.
getVersion
()
}));
}).
then
(
function
()
{
self
.
_hash
=
hash
;
if
(
error
)
{
return
Promise
.
reject
(
error
);
}
...
...
@@ -243,6 +250,14 @@ Plugin.prototype.getName = function () {
return
this
.
getLoadedPluginData
().
getName
();
};
/**
*
* @returns {string}
*/
Plugin
.
prototype
.
getHash
=
function
()
{
return
this
.
_hash
;
};
/**
*
* @returns {string}
...
...
frontend-js/src/main/js/plugin/PluginManager.js
View file @
6df0f0af
...
...
@@ -27,6 +27,10 @@ var Functions = require('../Functions');
function
PluginManager
(
options
)
{
AbstractGuiElement
.
call
(
this
,
options
);
var
self
=
this
;
/**
* @type Plugin[]
*/
self
.
_plugins
=
[];
self
.
_pluginOnResizeHandlers
=
{};
...
...
@@ -132,6 +136,7 @@ PluginManager.prototype.addPlugin = function (options) {
}
}
}).
then
(
function
()
{
GuiConnector
.
setUrlParam
(
"
plugins
"
,
self
.
_getLoadedPluginsAsHashList
());
return
plugin
;
}).
catch
(
function
(
e
)
{
return
plugin
.
unload
().
then
(
function
()
{
...
...
@@ -149,6 +154,26 @@ PluginManager.prototype.isValidUrl = function (url) {
return
isUrl
(
url
);
};
/**
*
* @return {string}
* @private
*/
PluginManager
.
prototype
.
_getLoadedPluginsAsHashList
=
function
()
{
var
self
=
this
;
var
hashes
=
''
;
for
(
var
i
=
0
;
i
<
self
.
_plugins
.
length
;
i
++
)
{
if
(
hashes
!==
''
)
{
hashes
+=
"
,
"
;
}
hashes
+=
self
.
_plugins
[
i
].
getHash
();
}
if
(
hashes
===
''
)
{
hashes
=
undefined
;
}
return
hashes
;
};
/**
*
* @returns {Promise|PromiseLike}
...
...
@@ -193,6 +218,7 @@ PluginManager.prototype.removePlugin = function (plugin) {
}
GuiConnector
.
removeWindowResizeEvent
(
self
.
_pluginOnResizeHandlers
[
plugin
.
getPluginId
()]);
return
plugin
.
unload
().
then
(
function
()
{
GuiConnector
.
setUrlParam
(
"
plugins
"
,
self
.
_getLoadedPluginsAsHashList
());
if
(
self
.
_plugins
.
length
===
0
)
{
$
(
self
.
getElement
()).
hide
();
return
self
.
getMap
().
getMapCanvas
().
triggerListeners
(
"
resize
"
);
...
...
frontend-js/src/test/js/plugin/PluginManager-test.js
View file @
6df0f0af
...
...
@@ -6,6 +6,8 @@ var Plugin = require('../../../main/js/plugin/Plugin');
var
PluginManager
=
require
(
'
../../../main/js/plugin/PluginManager
'
);
var
ProxyAccessPlugin
=
require
(
'
./ProxyAccessPlugin
'
);
var
GuiConnector
=
require
(
'
../../../main/js/GuiConnector
'
);
var
logger
=
require
(
'
../logger
'
);
var
chai
=
require
(
'
chai
'
);
var
assert
=
chai
.
assert
;
...
...
@@ -45,6 +47,12 @@ describe('PluginManager', function () {
assert
.
equal
(
1
,
manager
.
getPlugins
().
length
);
});
});
it
(
'
check url
'
,
function
()
{
var
manager
=
createPluginManager
();
return
manager
.
addPlugin
({
url
:
"
./testFiles/plugin/empty.js
"
}).
then
(
function
()
{
assert
.
ok
(
GuiConnector
.
getParams
[
'
plugins
'
]);
});
});
it
(
'
with min width
'
,
function
()
{
var
manager
=
createPluginManager
();
return
manager
.
addPlugin
({
url
:
"
./testFiles/plugin/min-width.js
"
}).
then
(
function
()
{
...
...
@@ -125,6 +133,16 @@ describe('PluginManager', function () {
assert
.
equal
(
-
1
,
testDiv
.
innerHTML
.
indexOf
(
"
tab-pane
"
));
});
});
it
(
'
check url
'
,
function
()
{
var
manager
=
createPluginManager
();
return
manager
.
addPlugin
({
url
:
"
./testFiles/plugin/empty.js
"
}).
then
(
function
(
plugin
)
{
return
manager
.
removePlugin
(
plugin
);
}).
then
(
function
()
{
assert
.
notOk
(
GuiConnector
.
getParams
[
'
plugins
'
]);
});
});
it
(
'
removing non existing plugin
'
,
function
()
{
var
manager
=
createPluginManager
();
var
plugin
=
new
Plugin
({
url
:
"
testFiles/plugin/empty.js
"
});
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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