Laura Médioni <laura.medioni@logilab.fr> [Mon, 28 Apr 2014 14:11:23 +0200] rev 9966
[CWEP002] Add schema finalization checks for computed attributes
``finalize_computed_attributes`` essentially checks that computed attributes
types match with the type declaration of the attribute.
Related to #3546717.
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 16 Jun 2014 10:08:32 +0200] rev 9965
[CWEP002] Account for attribute formula in schema bootstrap
This isn't enough to have computed attribute support, it is only in order not to
crash when yams 0.40 is used.
Related to #3546717.
Sylvain Thénault <sylvain.thenault@logilab.fr> [Thu, 28 Aug 2014 07:44:29 +0200] rev 9964
[CWEP002 migration] support sync_schema_props_perms for computed relations
Laura Médioni <laura.medioni@logilab.fr> [Thu, 28 Aug 2014 08:02:15 +0200] rev 9963
[CWEP002 migration] support add_relation_type for computed relations
Related to #3546717.
Laura Médioni <laura.medioni@logilab.fr> [Thu, 28 Aug 2014 07:55:33 +0200] rev 9962
[CWEP002 migration] support drop_relation_type for computed relations
Related to #3546717.
Laura Médioni <laura.medioni@logilab.fr> [Thu, 28 Aug 2014 07:49:31 +0200] rev 9961
[CWEP002 migration] properly raise exception on (add|drop)_relation_definition for computed relation
Related to #3546717
Laura Médioni <laura.medioni@logilab.fr> [Fri, 27 Jun 2014 12:00:17 +0200] rev 9960
[hooks] do not abuse of inheritance for CWRType hooks
Just copy the selector to ease readability.
Laura Médioni <laura.medioni@logilab.fr> [Mon, 16 Jun 2014 10:08:18 +0200] rev 9959
[schema serial] add some comments
Laura Médioni <laura.medioni@logilab.fr> [Mon, 16 Jun 2014 10:07:57 +0200] rev 9958
[schema] define full_rql on RQLExpression class
without it, we may have an error while displaying error which occured during
some expression initialization because this attribute is not yet defined while
used in the __str__ method.
Laura Médioni <laura.medioni@logilab.fr> [Fri, 29 Aug 2014 07:44:13 +0200] rev 9957
[schema] properly raise BadSchemaDefinition
when some expression mains variables may not be guessed
Lea Capgen <lea.capgen@logilab.fr> [Thu, 28 Aug 2014 18:29:14 +0200] rev 9956
[CWEP002] properly handle serialization of computed relations
We now:
* have CWComputedRelation in the bootstrap schema to store computed relations
* properly serialize/deserialize it
* test first if the database has been migrated and contains the related table
Related to #3546717
[jcr: adjust unittest_querier to pass with the added entity type]
Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 27 Jun 2014 16:11:53 +0200] rev 9955
[CWEP002] Plug the computed relation rewriter in the querier
Related to #3546717.
Sylvain Thénault <sylvain.thenault@logilab.fr> [Thu, 13 Feb 2014 13:58:28 +0100] rev 9954
[CWEP002] refactor rql read security checking
Split 'check_read_perms' into 'check_relations_perms' which checks relations
'read' permissions and 'get_local_checks' which build dictionary of local
security checks (rql expression) for variables.
This allows to check relations 'read' permissions earlier in the process and so
to prepare insertion of the rql rewriter: we want to check permissions of the
computed relation, not permissions of relations introduced by the associated
rule, to conform to the CWEP.
Related to #3546717
Sylvain Thénault <sylvain.thenault@logilab.fr> [Mon, 16 Jun 2014 10:22:24 +0200] rev 9953
[CWEP002] introduce RQLRelationRewriter
Refactor existing RQLRewriter for later reuse of rewriting relation as specified
by CWEP002. Work is different because we simply want to replace a relation by
another rql snippet and we don't have to bother with EXISTS, subqueries and all.
This rewriter is not yet plugged into the querier.
Depends on yams 0.40 API.
Related to #3546717
Lea Capgen <lea.capgen@logilab.fr>, Sylvain Thénault <sylvain.thenault@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr> [Fri, 12 Sep 2014 14:46:11 +0200] rev 9952
[CWEP002] Add schema finalization checks for computed relations (rules)
Related to #3546717
Rémi Cardona <remi.cardona@logilab.fr> [Fri, 12 Sep 2014 14:10:03 +0200] rev 9951
[schema] add utility function to build a CubicWebSchema from a namespace
Will be useful for testing computed attributes and relations.
Sylvain Thénault <sylvain.thenault@logilab.fr> [Thu, 28 Aug 2014 18:12:28 +0200] rev 9950
Fix test migration crash waiting to happen due to inferred relations
Avoid crashing when a relation definition which is already known (due to
being inferred) gets explicitly added. As explained in a comment, this
would deserve more thinking, but at least this fixes a test failure with
computed relations.
Sylvain Thénault <sylvain.thenault@logilab.fr> [Thu, 28 Aug 2014 07:42:10 +0200] rev 9949
fix typo in syncschema hooks
Julien Cristau <julien.cristau@logilab.fr> [Tue, 16 Sep 2014 18:01:51 +0200] rev 9948
[test] Make test_undo_api less random
The order in which hooks are run is not predictable if they have the
same 'order' attribute, which is the case for SetOwnershipHook and
SetInitialStateHook. So don't assume in_state will be set before
created_by.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 17 Sep 2014 13:43:31 +0200] rev 9947
merge 3.17.17 into 3.18 branch
Christophe de Vienne <christophe@unlish.com> [Wed, 10 Sep 2014 21:28:33 +0200] rev 9946
[wsgi] Fix unicode decoding in POST
The application/x-www-form-urlencoded sent by firefox or chrome is utf-8
encoded BEFORE being urlencoded.
Hence, decoding must urldecode THEN decode the utf-8 string, and not the
other way around.
Christophe de Vienne <christophe@unlish.com> [Thu, 21 Aug 2014 22:42:48 +0200] rev 9945
[wsgi] add the --debug / -D option to the wsgi command
Christophe de Vienne <christophe@unlish.com> [Mon, 08 Sep 2014 10:55:30 +0200] rev 9944
[wsgi] Fix multiple variables reading in params
Closes #4306081
Christophe de Vienne <christophe@unlish.com> [Tue, 02 Sep 2014 13:00:47 +0200] rev 9943
[wsgi] Set self.vreg
Closes #4306049
Christophe de Vienne <christophe@unlish.com> [Tue, 02 Sep 2014 10:31:13 +0200] rev 9942
[wsgi] Add missing import
Closes #4305988
Christophe de Vienne <christophe@unlish.com> [Tue, 02 Sep 2014 10:30:28 +0200] rev 9941
[wsgi] Fix https detection
- 'HTTPS' is not part of wsgi, it is a CGI variable. The right wsgi variable
is 'wsgi.url_scheme'
- Force https if url starts with '/https/' (and remove the prefix from the
path.
Closes #4305985
Christophe de Vienne <christophe@unlish.com> [Thu, 24 Jul 2014 20:57:14 +0200] rev 9940
[wsgi] Re-set the request content after calling the inherited constructor.
Closes #4191813
Christophe de Vienne <christophe@unlish.com> [Thu, 24 Jul 2014 20:53:21 +0200] rev 9939
[wsgi] Honor the 'CONTENT_TYPE' wsgi variable
See http://legacy.python.org/dev/peps/pep-0333/#environ-variables
Closes #4191812
Aurelien Campeas <aurelien.campeas@logilab.fr> [Wed, 17 Sep 2014 10:31:50 +0200] rev 9938
Added tag cubicweb-version-3.17.17, cubicweb-debian-version-3.17.17-1, cubicweb-centos-version-3.17.17-1 for changeset 57e9d1c70512
Aurelien Campeas <aurelien.campeas@logilab.fr> [Tue, 16 Sep 2014 18:39:07 +0200] rev 9937
[pkg] prepare 3.17.17
Julien Cristau <julien.cristau@logilab.fr> [Tue, 29 Jul 2014 16:26:09 +0200] rev 9936
[web/headers] don't list a request header twice in "Vary"
Julien Cristau <julien.cristau@logilab.fr> [Mon, 28 Jul 2014 17:22:49 +0200] rev 9935
[test] silence a few more deprecation warnings in unittest_hooks
self.session → cnx.
Julien Cristau <julien.cristau@logilab.fr> [Fri, 25 Jul 2014 16:24:44 +0200] rev 9934
[session] call rollback in Connection.__exit__
If we just free the cnxset and clear the Connection, we're missing the
pending operation's rollback_event callbacks, which may be needed for
cleanup.
Julien Cristau <julien.cristau@logilab.fr> [Thu, 24 Jul 2014 14:52:16 +0200] rev 9933
[devtools] pre_setup_database takes a Connection, not a Session
Aurelien Campeas <aurelien.campeas@logilab.fr> [Tue, 03 Jun 2014 18:00:53 +0200] rev 9932
[source/native] cPickle is available in all supported pythons
Aurelien Campeas <aurelien.campeas@logilab.fr> [Tue, 22 Jul 2014 18:16:23 +0200] rev 9931
devtools: deprecate .req_from_url
Which uses .request()
And instead provide .admin_request_from_url, which
is a context manager yielding the request.
Christophe de Vienne <christophe@unlish.com> [Tue, 17 Jun 2014 11:14:20 +0200] rev 9930
[tests] Add a webtest based TestCase class
Closes #4002134
Christophe de Vienne <christophe@unlish.com> [Tue, 17 Jun 2014 11:53:35 +0200] rev 9929
[tests] Move 'anonymous_allowed' property from CubicWebServerTC to CubicWebTC
The effective set of the property on the config is now done later that before,
ie at the end of CubicWebTC.init_config instead of before.
It is believed not to have an impact on the test suites that uses
`anonymous_allowed`.
Related to #4002134
David Douard <david.douard@logilab.fr> [Tue, 02 Sep 2014 12:22:18 +0200] rev 9928
[compat] Remove imports of "any" and "all" from lgc (closes #4306044)
They're builtin since python 2.5.
Florent Cayré <florent.cayre@logilab.fr> [Tue, 26 Aug 2014 10:12:09 +0200] rev 9927
[css] Remove the `div` tag specification of the pendingDelete css rule
The HTML tag was changed by e2f96b16c3bd from a div to a span without
changing the css rule accordingly.
Closes #4285248.
Alain Leufroy <alain.leufroy@logilab.fr> [Wed, 21 May 2014 16:14:17 +0200] rev 9926
[cwvreg] cleanup the event manager when reloading modules
Closes #3848995
The event manager callbacks are not cleaned during reloading.
So the callback defined in the reloaded module appears twice (old and new
version). This may cause problem when the old version is called.
Julien Cristau <julien.cristau@logilab.fr> [Thu, 12 Jun 2014 12:28:10 +0200] rev 9925
[test] Add missing attribute 'add' permission in test schema
Silences yams warning.
Florent Cayré <florent.cayre@gmail.com> [Thu, 01 May 2014 23:35:56 +0200] rev 9924
[facet html] Add surrounding div with "facetBody" class to "has_text" facet.
This makes its html structure consistent with the other facets
and fixes both css and a javascript behaviour (hide the facet body
when clicking on its title).
Closes #3797501.
Julien Cristau <julien.cristau@logilab.fr> [Fri, 13 Jun 2014 11:00:41 +0200] rev 9923
[cwctl] don't prompt for cube options in automatic mode
Closes #3984223
Julien Cristau <julien.cristau@logilab.fr> [Fri, 13 Jun 2014 11:21:45 +0200] rev 9922
[serverctl] fix default value for db-init config-level
Otherwise cubicweb-ctl db-init --automatic complains that "--automatic
and --config-level should not be used together" when they weren't.
Closes #3984336
Rémi Cardona <remi.cardona@logilab.fr> [Thu, 05 Jun 2014 17:41:14 +0200] rev 9921
[web] Return useful error messages when exceptions arise in ajax controllers (closes #3932503)
The call to super() in RemoteCallException passes 'reason' all the way to
python's Exception.__init__() which is then stored in Exception.args. This way,
CubicWebPublisher.ajax_error_handler() gets a useful error message when calling
unicode(exc).
The change to uilib is just to prepend the exception type name. Just a small
improvement.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 23 Jul 2014 19:42:42 +0200] rev 9920
[test] Fix test breakage uncovered by previous changeset
Now that Binary.__eq__ doesn't always return true, this test started
failing. CWAttribute.defaultval is zpickled, and the description_format
attribute is a String, meaning unicode, so adjust the expected test
result.
Julien Cristau <julien.cristau@logilab.fr> [Tue, 08 Jul 2014 11:33:32 +0200] rev 9919
[etwist] use more specific REQUEST_ENTITY_TOO_LARGE instead of BAD_REQUEST
When a request body exceeds the configured limit, return 413 to the
client instead of a generic 400.
Julien Cristau <julien.cristau@logilab.fr> [Tue, 08 Jul 2014 10:34:50 +0200] rev 9918
[entities, view] delete dead code
The auto_unwrap_bw_compat metaclass calls unwrap_adapter_compat, which
was removed in changeset 697a8181ba30 "remove 3.9 bw compat". So this
can't possibly work anymore, meaning we can get rid of it.
Julien Cristau <julien.cristau@logilab.fr> [Fri, 04 Jul 2014 14:37:08 +0200] rev 9917
[book] stop talking about the hg `forest` extension
Julien Cristau <julien.cristau@logilab.fr> [Fri, 04 Jul 2014 14:28:26 +0200] rev 9916
[book] update sections about dependencies
This is probably incomplete, but it's a start.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 23 Jul 2014 16:24:17 +0200] rev 9915
[web/component] move unicode() call around
Makes Aurélien happier.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 23 Jul 2014 12:07:50 +0200] rev 9914
[web/js] replace callAddOrDeleteThenReload with more generic callAjaxFuncThenReload
That's going to be a more useful replacement for callUserCallbackThenReload.
Closes #4178566.
Julien Cristau <julien.cristau@logilab.fr> [Tue, 22 Jul 2014 17:45:38 +0200] rev 9913
[hooks/syncsession] try to remove cnx vs session confusion
Julien Cristau <julien.cristau@logilab.fr> [Tue, 22 Jul 2014 17:22:23 +0200] rev 9912
Fix Binary.__eq__ (closes #4172701)
Due to a typo we always returned true, which was unhelpful.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 16:35:02 +0200] rev 9911
[dataimport] stop ignoring errors on flush
That can only result in database corruption.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 16:31:34 +0200] rev 9910
[dataimport] don't commit on flush
Changeset 26cdfc6dd6f8 introduced this confusion for no apparent reason,
and it doesn't make much sense.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 15:35:28 +0200] rev 9909
[test] Add test for dataimport's RQLObjectStore
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 16:00:21 +0200] rev 9908
[dataimport] Stop swallowing errors from commit/flush
Silent DB corruption is not OK.
Also drop comment from ObjectStore.commit that I don't understand.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 15:59:34 +0200] rev 9907
[dataimport] Update RQLObjectStore to Connection API
Take a connection instead of a session. Don't play games with set_cnxset.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 15:51:58 +0200] rev 9906
[dataimport] remove _rql heresy
1) ObjectStore knows nothing about rql, it just drops it on the floor
2) RQLObjectStore has a session, it can run rql that way
3) setting an object's "_rql" attribute is not a reasonable user-facing
interface
Also drop _commit attribute from base ObjectStore, it doesn't use it.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 09 Jul 2014 15:40:50 +0200] rev 9905
[dataimport] remove dead code
The only caller of ObjectStore._put is ObjectStore.create_entity, which
RQLObjectStore overrides (and doesn't call up).
Alain Leufroy <alain.leufroy@logilab.fr> [Tue, 03 Jun 2014 12:41:06 +0200] rev 9904
[dataimport] do not use sys.exit() to raise missing argument error
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 17:51:45 +0200] rev 9903
[dataimport] _create_copyfrom_buffer: add the tests
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 15:53:09 +0200] rev 9902
[dataimport] _create_copyfrom_buffer: do not ignore columns if data is a list
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 17:52:43 +0200] rev 9901
[dataimport] _create_copyfrom_buffer: fix datetime converter + add time converter
Include second and microsecond in the output instead of dropping them on the
floor. The time zone is not supported for now, though.
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 15:45:35 +0200] rev 9900
[dataimport] _create_copyfrom_buffer: raise ValueError if conversion cannot be performed
If the conversion fails, there is no reason to continue execution. One should
notify the error.
Continuing after a misconverted data could corrupt the database.
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 13:50:15 +0200] rev 9899
[dataimport] _create_copyfrom_buffer: fix separator check in string converter
The empty string is a valid replace_sep.
Related to #3845572
Alain Leufroy <alain.leufroy@logilab.fr> [Mon, 02 Jun 2014 13:50:15 +0200] rev 9898
[dataimport] _create_copyfrom_buffer: put converters into a list
Cleans up the code to avoid a succession of ifs.
Related to #3845572
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 17:35:25 +0200] rev 9897
merge 3.19.3 into 3.20 branch
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 16:44:44 +0200] rev 9896
Added tag cubicweb-version-3.19.3, cubicweb-debian-version-3.19.3-1, cubicweb-centos-version-3.19.3-1 for changeset 37f7c60f89f1
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 16:16:53 +0200] rev 9895
[pkg] prepare 3.19.3
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 16:14:58 +0200] rev 9894
merge from 3.18 branch
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 16:11:41 +0200] rev 9893
merge 3.17.16 into 3.18 branch
Rémi Cardona <remi.cardona@logilab.fr> [Thu, 17 Jul 2014 11:08:56 +0200] rev 9892
Remove uses of logilab.common.compat.{all,any}
They're just aliases to the builtin ones on python 2.5+. If anyone needs
convincing:
>>> from logilab.common import compat
>>> compat.any
<built-in function any>
>>> compat.all
<built-in function all>
Aurelien Campeas <aurelien.campeas@logilab.fr> [Wed, 09 Jul 2014 15:44:09 +0200] rev 9891
remove references to global environment variable APYCOT_ROOT
Julien Cristau <julien.cristau@logilab.fr> [Wed, 02 Jul 2014 11:37:57 +0200] rev 9890
Add warning messages when enabling remote pickle-based repository access
Warn when starting a pyro or zmq-only repo, or when one of these access
methods is enabled. Closes #2919295
Julien Cristau <julien.cristau@logilab.fr> [Fri, 18 Jul 2014 12:23:01 +0200] rev 9889
[web] Fix expiry of anonymous sessions (closes #4154479)
Things like:
try:
foo
except:
bar
else:
baz
doesn't work very well if you expect baz to run even in the exception
case. Plus, session.cnx.check() is a dbapi remnant, so drop it and just
look at session.mtime.
Julien Cristau <julien.cristau@logilab.fr> [Wed, 16 Jul 2014 17:20:55 +0200] rev 9888
[hooks/syncschema] avoid altering a dropped table
If the constraint's rdef is being removed, CWConstraintDelOp doesn't
need to do anything. Otherwise it may try to alter a removed
table/column. Closes #4154549
Florent Cayré <florent.cayre@logilab.fr> [Thu, 12 Jun 2014 09:59:55 +0200] rev 9887
[js] fix name error
Alain Leufroy <alain.leufroy@logilab.fr> [Tue, 03 Jun 2014 12:37:54 +0200] rev 9886
[devtools] improve error message when postgresql tools are missing
By default in at least Debian, some pg tools are not present in the
PATH. Or they may not be installed. But the tests tools expects them
to be in the PATH, and give an unhelpful 'No such file or directory'
backtrace if they're not found. To help devs using the pg tests we
improve the error message.
Rémi Cardona <remi.cardona@logilab.fr> [Fri, 11 Jul 2014 17:13:32 +0200] rev 9885
[server] Replace non portable strftime formatter (closes #4132161)
Aurelien Campeas <aurelien.campeas@logilab.fr> [Thu, 12 Jun 2014 12:15:18 +0200] rev 9884
[web/request] use a picklable Counter object for tab index counters
Related to #1381328.
Julien Cristau <julien.cristau@logilab.fr> [Tue, 15 Jul 2014 18:07:31 +0200] rev 9883
[web/auth] The auth retriever's authenticated() callback takes a session, not a cnx
We don't have a cnx at that point.
Julien Cristau <julien.cristau@logilab.fr> [Fri, 11 Jul 2014 16:44:42 +0200] rev 9882
[test] Fix the query-log-file test
Testing this functionality in a CubicWebTC is awkward because the
wrapping happens in handle_request, which tests basically bypass (they
call core_handle directly, and do their own magic for linking the
request with a cnx). The test method worked when ran on its own, but
not together with the rest of the test class. So use a CubicWebServerTC
instead, which goes through the whole stack.
Julien Cristau <julien.cristau@logilab.fr> [Fri, 11 Jul 2014 13:48:07 +0200] rev 9881
[doc/book] spelling fixes in security tutorial
Julien Cristau <julien.cristau@logilab.fr> [Fri, 11 Jul 2014 13:15:11 +0200] rev 9880
[doc/book] spelling fixes in "testing" chapter
Aurelien Campeas <aurelien.campeas@logilab.fr> [Wed, 11 Jun 2014 16:54:31 +0200] rev 9879
[datafeed sources] finish the session -> cnx switch
Related to #3933480.
Aurelien Campeas <aurelien.campeas@logilab.fr> [Fri, 06 Jun 2014 15:56:24 +0200] rev 9878
[doc/book] update examples, using the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr> [Wed, 11 Jun 2014 17:20:18 +0200] rev 9877
[test/entities] use the new connection api
Julien Cristau <julien.cristau@logilab.fr> [Wed, 02 Jul 2014 12:52:50 +0200] rev 9876
[web] restore query logging functionality (closes #3972561)
The query-log-file option stopped working when the web stack was moved
from dbapi to repoapi.
Julien Cristau <julien.cristau@logilab.fr> [Tue, 17 Jun 2014 12:03:30 +0200] rev 9875
[cwctl] make cubicweb-ctl versions lighter (closes #4002158)
Set config.quick_start to avoid unnecessary appobjects and schema
loading.
Aurelien Campeas <aurelien.campeas@logilab.fr> [Tue, 08 Jul 2014 14:02:43 +0200] rev 9874
Added tag cubicweb-version-3.17.16, cubicweb-debian-version-3.17.16-1, cubicweb-centos-version-3.17.16-1 for changeset a979d1594af6
Sylvain Thénault <sylvain.thenault@logilab.fr> [Mon, 23 Sep 2013 14:55:56 +0200] rev 9873
[forms] consider inline creation form information as linkto info. Closes #3161121
Aurelien Campeas <aurelien.campeas@logilab.fr> [Mon, 07 Jul 2014 19:28:30 +0200] rev 9872
[pkg] prepare 3.17.16
Rémi Cardona <remi.cardona@logilab.fr> [Mon, 02 Jun 2014 12:37:52 +0200] rev 9871
[reledit] Fix reledit icons jumpiness (closes #4106867)
Introduce an "invisible" class (copied verbatim from Bootstrap) that
only sets the "visibility" property. "display: none" is the reason for
the whole jumpiness as it actually detaches the element from the
rendered layout. "visibility: hidden" only makes it transparent while
keeping its original box properties (width, height, etc).