├── .buildkite └── pipeline.yml ├── .builds └── alpine.yml ├── .circleci └── config.yml ├── .codeclimate.yml ├── .cruft.json ├── .editorconfig ├── .eslintrc.js ├── .gitchangelog.rc ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CHANGES.rst ├── CONTRIBUTING.md ├── LICENSE.txt ├── Makefile ├── README.rst ├── TODO.md ├── Vagrantfile ├── conftest.py ├── demo ├── __init__.py ├── app.py ├── config.py └── wsgi.py ├── docs ├── Makefile ├── _themes │ ├── LICENSE │ ├── README │ ├── flask │ │ ├── layout.html │ │ ├── relations.html │ │ ├── static │ │ │ ├── flasky.css_t │ │ │ └── small_flask.css │ │ └── theme.conf │ └── flask_theme_support.py ├── api.rst ├── changelog.rst ├── coding-standard.rst ├── conf.py ├── contributing.rst ├── credits.rst ├── exts │ ├── __init__.py │ └── intersphinx_flask_ext.py ├── flaskstyle.sty ├── images │ └── abilian-logo-baseline.png ├── index.rst ├── installing.rst ├── introduction.rst ├── inventories │ └── babel.inv └── logo.pdf ├── etc ├── 00README.txt ├── babel.cfg ├── provision.sh ├── pylintrc ├── requirements.txt └── vagrant_test.sh ├── noxfile.py ├── package.json ├── poetry.lock ├── pyproject.toml ├── setup.cfg ├── setup.py ├── src └── abilian │ ├── __init__.py │ ├── app.py │ ├── cli │ ├── __init__.py │ ├── base.py │ ├── config.py │ └── indexing.py │ ├── config.py │ ├── core │ ├── __init__.py │ ├── celery.py │ ├── default_logging.yml │ ├── entities.py │ ├── extensions │ │ ├── __init__.py │ │ ├── csrf.py │ │ ├── jinjaext.py │ │ ├── login.py │ │ ├── redis.py │ │ └── upstream_info.py │ ├── logging.py │ ├── models │ │ ├── __init__.py │ │ ├── attachment.py │ │ ├── base.py │ │ ├── blob.py │ │ ├── comment.py │ │ ├── owned.py │ │ ├── subjects.py │ │ ├── tag.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_blob.py │ │ │ ├── test_comment.py │ │ │ └── test_subject.py │ ├── signals.py │ ├── singleton.py │ ├── sqlalchemy.py │ ├── tests │ │ ├── __init__.py │ │ ├── dummy.py │ │ ├── test_entities.py │ │ ├── test_permissions.py │ │ ├── test_sa_extensions.py │ │ ├── test_singleton.py │ │ └── test_utils.py │ └── util.py │ ├── i18n.py │ ├── services │ ├── __init__.py │ ├── activity │ │ ├── __init__.py │ │ ├── models.py │ │ ├── service.py │ │ └── tests.py │ ├── antivirus │ │ ├── __init__.py │ │ └── service.py │ ├── audit │ │ ├── __init__.py │ │ ├── models.py │ │ ├── service.py │ │ └── tests.py │ ├── auth │ │ ├── __init__.py │ │ ├── models.py │ │ ├── service.py │ │ ├── templates │ │ │ └── login │ │ │ │ ├── email │ │ │ │ ├── password_reset_instructions.fr.txt │ │ │ │ └── password_reset_instructions.txt │ │ │ │ ├── forgotten_password.html │ │ │ │ ├── login.html │ │ │ │ ├── password_reset.fr.html │ │ │ │ └── password_reset.html │ │ ├── tests.py │ │ └── views.py │ ├── base.py │ ├── conversion │ │ ├── __init__.py │ │ ├── cache.py │ │ ├── dummy_files │ │ │ ├── mugshot.jpg │ │ │ ├── onepage.pdf │ │ │ ├── picture.jpg │ │ │ ├── rammstein.pdf │ │ │ ├── test.doc │ │ │ ├── test.docx │ │ │ ├── test.odt │ │ │ └── test.xls │ │ ├── exceptions.py │ │ ├── handlers.py │ │ ├── service.py │ │ ├── tests.py │ │ └── util.py │ ├── image │ │ ├── __init__.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── cat.jpg │ │ │ └── test_image.py │ ├── indexing │ │ ├── __init__.py │ │ ├── adapter.py │ │ ├── debug_toolbar.py │ │ ├── schema.py │ │ ├── service.py │ │ └── tests │ │ │ ├── test_adapter.py │ │ │ ├── test_schema.py │ │ │ └── test_service.py │ ├── preferences │ │ ├── __init__.py │ │ ├── models.py │ │ ├── panel.py │ │ ├── service.py │ │ └── tests.py │ ├── repository │ │ ├── __init__.py │ │ ├── service.py │ │ ├── test_repository.py │ │ └── test_session_repository.py │ ├── security │ │ ├── __init__.py │ │ ├── debug_toolbar.py │ │ ├── models.py │ │ ├── service.py │ │ └── tests.py │ ├── settings │ │ ├── __init__.py │ │ ├── models.py │ │ ├── service.py │ │ └── tests.py │ ├── tagging │ │ ├── __init__.py │ │ ├── models.py │ │ └── service.py │ ├── viewtracker │ │ ├── __init__.py │ │ ├── models.py │ │ └── service.py │ └── vocabularies │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── forms.py │ │ ├── models.py │ │ ├── service.py │ │ ├── templates │ │ └── admin │ │ │ ├── macros │ │ │ └── vocabularies.html │ │ │ └── vocabularies.html │ │ └── tests.py │ ├── testing │ ├── __init__.py │ ├── fixtures.py │ ├── util.py │ └── validation.py │ ├── translations │ ├── de_DE │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── en │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── es │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── es_ES │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── fr_FR │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── id_ID │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── it_IT │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── messages.pot │ ├── nl │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── nl_NL │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── pt_BR │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── pt_PT │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── tr_TR │ │ └── LC_MESSAGES │ │ │ └── messages.po │ ├── zh_CN │ │ └── LC_MESSAGES │ │ │ └── messages.po │ └── zh_TW │ │ └── LC_MESSAGES │ │ └── messages.po │ └── web │ ├── __init__.py │ ├── action.py │ ├── admin │ ├── __init__.py │ ├── extension.py │ ├── panel.py │ ├── panels │ │ ├── __init__.py │ │ ├── audit.py │ │ ├── dashboard.py │ │ ├── groups │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ └── views.py │ │ ├── impersonate.py │ │ ├── login_sessions.py │ │ ├── settings.py │ │ ├── sysinfo.py │ │ └── users │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ └── views.py │ ├── templates │ │ └── admin │ │ │ ├── _base.html │ │ │ ├── _macros.html │ │ │ ├── audit.html │ │ │ ├── dashboard.html │ │ │ ├── group_view.html │ │ │ ├── groups.html │ │ │ ├── login_sessions.html │ │ │ ├── settings.html │ │ │ ├── settings_session_lifetime.html │ │ │ ├── sysinfo.html │ │ │ └── users.html │ └── test_views.py │ ├── assets │ ├── __init__.py │ ├── filters.py │ └── mixin.py │ ├── attachments │ ├── __init__.py │ ├── extension.py │ ├── forms.py │ └── views.py │ ├── blueprints.py │ ├── comments │ ├── __init__.py │ ├── extension.py │ ├── forms.py │ └── views.py │ ├── coreviews │ ├── __init__.py │ └── users.py │ ├── csrf.py │ ├── errors.py │ ├── filters.py │ ├── forms │ ├── __init__.py │ ├── fields.py │ ├── filters.py │ ├── form.py │ ├── permissions.py │ ├── tests.py │ ├── util.py │ ├── validators.py │ └── widgets.py │ ├── frontend.py │ ├── hooks.py │ ├── http.py │ ├── jinja.py │ ├── nav.py │ ├── preferences │ ├── __init__.py │ ├── tests │ │ ├── avatar-colormap.png │ │ └── test_user_preferences.py │ └── user.py │ ├── resources │ ├── bootbox │ │ └── bootbox.js │ ├── bootstrap-datepicker │ │ ├── css │ │ │ └── datepicker.css │ │ ├── js │ │ │ ├── bootstrap-datepicker.js │ │ │ └── locales │ │ │ │ ├── bootstrap-datepicker.ar.js │ │ │ │ ├── bootstrap-datepicker.bg.js │ │ │ │ ├── bootstrap-datepicker.ca.js │ │ │ │ ├── bootstrap-datepicker.cs.js │ │ │ │ ├── bootstrap-datepicker.cy.js │ │ │ │ ├── bootstrap-datepicker.da.js │ │ │ │ ├── bootstrap-datepicker.de.js │ │ │ │ ├── bootstrap-datepicker.el.js │ │ │ │ ├── bootstrap-datepicker.es.js │ │ │ │ ├── bootstrap-datepicker.et.js │ │ │ │ ├── bootstrap-datepicker.fi.js │ │ │ │ ├── bootstrap-datepicker.fr.js │ │ │ │ ├── bootstrap-datepicker.gl.js │ │ │ │ ├── bootstrap-datepicker.he.js │ │ │ │ ├── bootstrap-datepicker.hr.js │ │ │ │ ├── bootstrap-datepicker.hu.js │ │ │ │ ├── bootstrap-datepicker.id.js │ │ │ │ ├── bootstrap-datepicker.is.js │ │ │ │ ├── bootstrap-datepicker.it.js │ │ │ │ ├── bootstrap-datepicker.ja.js │ │ │ │ ├── bootstrap-datepicker.ka.js │ │ │ │ ├── bootstrap-datepicker.kr.js │ │ │ │ ├── bootstrap-datepicker.lt.js │ │ │ │ ├── bootstrap-datepicker.lv.js │ │ │ │ ├── bootstrap-datepicker.mk.js │ │ │ │ ├── bootstrap-datepicker.ms.js │ │ │ │ ├── bootstrap-datepicker.nb.js │ │ │ │ ├── bootstrap-datepicker.nl-BE.js │ │ │ │ ├── bootstrap-datepicker.nl.js │ │ │ │ ├── bootstrap-datepicker.no.js │ │ │ │ ├── bootstrap-datepicker.pl.js │ │ │ │ ├── bootstrap-datepicker.pt-BR.js │ │ │ │ ├── bootstrap-datepicker.pt.js │ │ │ │ ├── bootstrap-datepicker.ro.js │ │ │ │ ├── bootstrap-datepicker.rs-latin.js │ │ │ │ ├── bootstrap-datepicker.rs.js │ │ │ │ ├── bootstrap-datepicker.ru.js │ │ │ │ ├── bootstrap-datepicker.sk.js │ │ │ │ ├── bootstrap-datepicker.sl.js │ │ │ │ ├── bootstrap-datepicker.sq.js │ │ │ │ ├── bootstrap-datepicker.sv.js │ │ │ │ ├── bootstrap-datepicker.sw.js │ │ │ │ ├── bootstrap-datepicker.th.js │ │ │ │ ├── bootstrap-datepicker.tr.js │ │ │ │ ├── bootstrap-datepicker.ua.js │ │ │ │ ├── bootstrap-datepicker.uk.js │ │ │ │ ├── bootstrap-datepicker.zh-CN.js │ │ │ │ └── bootstrap-datepicker.zh-TW.js │ │ └── less │ │ │ └── datepicker.less │ ├── bootstrap-switch │ │ ├── LICENSE │ │ ├── bootstrap-switch.js │ │ └── less │ │ │ └── bootstrap3 │ │ │ └── bootstrap-switch.less │ ├── bootstrap-timepicker │ │ ├── css │ │ │ ├── bootstrap-timepicker.css │ │ │ └── bootstrap-timepicker.min.css │ │ ├── js │ │ │ ├── bootstrap-timepicker.js │ │ │ └── bootstrap-timepicker.min.js │ │ └── less │ │ │ └── timepicker.less │ ├── bootstrap │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ └── npm.js │ │ └── less │ │ │ ├── .csscomb.json │ │ │ ├── .csslintrc │ │ │ ├── alerts.less │ │ │ ├── badges.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicons.less │ │ │ ├── grid.less │ │ │ ├── input-groups.less │ │ │ ├── jumbotron.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ ├── alerts.less │ │ │ ├── background-variant.less │ │ │ ├── border-radius.less │ │ │ ├── buttons.less │ │ │ ├── center-block.less │ │ │ ├── clearfix.less │ │ │ ├── forms.less │ │ │ ├── gradients.less │ │ │ ├── grid-framework.less │ │ │ ├── grid.less │ │ │ ├── hide-text.less │ │ │ ├── image.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── nav-divider.less │ │ │ ├── nav-vertical-align.less │ │ │ ├── opacity.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── progress-bar.less │ │ │ ├── reset-filter.less │ │ │ ├── resize.less │ │ │ ├── responsive-visibility.less │ │ │ ├── size.less │ │ │ ├── tab-focus.less │ │ │ ├── table-row.less │ │ │ ├── text-emphasis.less │ │ │ ├── text-overflow.less │ │ │ └── vendor-prefixes.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── normalize.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── popovers.less │ │ │ ├── print.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive-embed.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── tables.less │ │ │ ├── theme.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ ├── ckeditor │ │ ├── CHANGES.md │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── adapters │ │ │ └── jquery.js │ │ ├── build-config.js │ │ ├── ckeditor.js │ │ ├── config.js │ │ ├── contents.css │ │ ├── lang │ │ │ ├── af.js │ │ │ ├── ar.js │ │ │ ├── bg.js │ │ │ ├── bn.js │ │ │ ├── bs.js │ │ │ ├── ca.js │ │ │ ├── cs.js │ │ │ ├── cy.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── el.js │ │ │ ├── en-au.js │ │ │ ├── en-ca.js │ │ │ ├── en-gb.js │ │ │ ├── en.js │ │ │ ├── eo.js │ │ │ ├── es.js │ │ │ ├── et.js │ │ │ ├── eu.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fo.js │ │ │ ├── fr-ca.js │ │ │ ├── fr.js │ │ │ ├── gl.js │ │ │ ├── gu.js │ │ │ ├── he.js │ │ │ ├── hi.js │ │ │ ├── hr.js │ │ │ ├── hu.js │ │ │ ├── id.js │ │ │ ├── is.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── ka.js │ │ │ ├── km.js │ │ │ ├── ko.js │ │ │ ├── ku.js │ │ │ ├── lt.js │ │ │ ├── lv.js │ │ │ ├── mk.js │ │ │ ├── mn.js │ │ │ ├── ms.js │ │ │ ├── nb.js │ │ │ ├── nl.js │ │ │ ├── no.js │ │ │ ├── pl.js │ │ │ ├── pt-br.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru.js │ │ │ ├── si.js │ │ │ ├── sk.js │ │ │ ├── sl.js │ │ │ ├── sq.js │ │ │ ├── sr-latn.js │ │ │ ├── sr.js │ │ │ ├── sv.js │ │ │ ├── th.js │ │ │ ├── tr.js │ │ │ ├── tt.js │ │ │ ├── ug.js │ │ │ ├── uk.js │ │ │ ├── vi.js │ │ │ ├── zh-cn.js │ │ │ └── zh.js │ │ ├── plugins │ │ │ ├── a11yhelp │ │ │ │ └── dialogs │ │ │ │ │ ├── a11yhelp.js │ │ │ │ │ └── lang │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fo.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── gu.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── mn.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tt.js │ │ │ │ │ ├── ug.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ ├── about │ │ │ │ └── dialogs │ │ │ │ │ ├── about.js │ │ │ │ │ ├── hidpi │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ └── logo_ckeditor.png │ │ │ ├── autolink │ │ │ │ └── plugin.js │ │ │ ├── bootstrapVisibility │ │ │ │ ├── CHANGELOG.txt │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── lang │ │ │ │ │ ├── en.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── it.js │ │ │ │ │ └── ru.js │ │ │ │ └── plugin.js │ │ │ ├── clipboard │ │ │ │ └── dialogs │ │ │ │ │ └── paste.js │ │ │ ├── colordialog │ │ │ │ └── dialogs │ │ │ │ │ └── colordialog.js │ │ │ ├── dialog │ │ │ │ └── dialogDefinition.js │ │ │ ├── div │ │ │ │ └── dialogs │ │ │ │ │ └── div.js │ │ │ ├── find │ │ │ │ └── dialogs │ │ │ │ │ └── find.js │ │ │ ├── flash │ │ │ │ ├── dialogs │ │ │ │ │ └── flash.js │ │ │ │ └── images │ │ │ │ │ └── placeholder.png │ │ │ ├── forms │ │ │ │ ├── dialogs │ │ │ │ │ ├── button.js │ │ │ │ │ ├── checkbox.js │ │ │ │ │ ├── form.js │ │ │ │ │ ├── hiddenfield.js │ │ │ │ │ ├── radio.js │ │ │ │ │ ├── select.js │ │ │ │ │ ├── textarea.js │ │ │ │ │ └── textfield.js │ │ │ │ └── images │ │ │ │ │ └── hiddenfield.gif │ │ │ ├── icons.png │ │ │ ├── icons_hidpi.png │ │ │ ├── iframe │ │ │ │ ├── dialogs │ │ │ │ │ └── iframe.js │ │ │ │ └── images │ │ │ │ │ └── placeholder.png │ │ │ ├── image │ │ │ │ ├── dialogs │ │ │ │ │ └── image.js │ │ │ │ └── images │ │ │ │ │ └── noimage.png │ │ │ ├── link │ │ │ │ ├── dialogs │ │ │ │ │ ├── anchor.js │ │ │ │ │ └── link.js │ │ │ │ └── images │ │ │ │ │ ├── anchor.png │ │ │ │ │ └── hidpi │ │ │ │ │ └── anchor.png │ │ │ ├── liststyle │ │ │ │ └── dialogs │ │ │ │ │ └── liststyle.js │ │ │ ├── magicline │ │ │ │ └── images │ │ │ │ │ ├── hidpi │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ └── icon.png │ │ │ │ │ ├── icon-rtl.png │ │ │ │ │ └── icon.png │ │ │ ├── pagebreak │ │ │ │ └── images │ │ │ │ │ └── pagebreak.gif │ │ │ ├── pastefromword │ │ │ │ └── filter │ │ │ │ │ └── default.js │ │ │ ├── preview │ │ │ │ └── preview.html │ │ │ ├── scayt │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ └── dialogs │ │ │ │ │ ├── options.js │ │ │ │ │ └── toolbar.css │ │ │ ├── showblocks │ │ │ │ └── images │ │ │ │ │ ├── block_address.png │ │ │ │ │ ├── block_blockquote.png │ │ │ │ │ ├── block_div.png │ │ │ │ │ ├── block_h1.png │ │ │ │ │ ├── block_h2.png │ │ │ │ │ ├── block_h3.png │ │ │ │ │ ├── block_h4.png │ │ │ │ │ ├── block_h5.png │ │ │ │ │ ├── block_h6.png │ │ │ │ │ ├── block_p.png │ │ │ │ │ └── block_pre.png │ │ │ ├── smiley │ │ │ │ ├── dialogs │ │ │ │ │ └── smiley.js │ │ │ │ └── images │ │ │ │ │ ├── angel_smile.gif │ │ │ │ │ ├── angel_smile.png │ │ │ │ │ ├── angry_smile.gif │ │ │ │ │ ├── angry_smile.png │ │ │ │ │ ├── broken_heart.gif │ │ │ │ │ ├── broken_heart.png │ │ │ │ │ ├── confused_smile.gif │ │ │ │ │ ├── confused_smile.png │ │ │ │ │ ├── cry_smile.gif │ │ │ │ │ ├── cry_smile.png │ │ │ │ │ ├── devil_smile.gif │ │ │ │ │ ├── devil_smile.png │ │ │ │ │ ├── embaressed_smile.gif │ │ │ │ │ ├── embarrassed_smile.gif │ │ │ │ │ ├── embarrassed_smile.png │ │ │ │ │ ├── envelope.gif │ │ │ │ │ ├── envelope.png │ │ │ │ │ ├── heart.gif │ │ │ │ │ ├── heart.png │ │ │ │ │ ├── kiss.gif │ │ │ │ │ ├── kiss.png │ │ │ │ │ ├── lightbulb.gif │ │ │ │ │ ├── lightbulb.png │ │ │ │ │ ├── omg_smile.gif │ │ │ │ │ ├── omg_smile.png │ │ │ │ │ ├── regular_smile.gif │ │ │ │ │ ├── regular_smile.png │ │ │ │ │ ├── sad_smile.gif │ │ │ │ │ ├── sad_smile.png │ │ │ │ │ ├── shades_smile.gif │ │ │ │ │ ├── shades_smile.png │ │ │ │ │ ├── teeth_smile.gif │ │ │ │ │ ├── teeth_smile.png │ │ │ │ │ ├── thumbs_down.gif │ │ │ │ │ ├── thumbs_down.png │ │ │ │ │ ├── thumbs_up.gif │ │ │ │ │ ├── thumbs_up.png │ │ │ │ │ ├── tongue_smile.gif │ │ │ │ │ ├── tongue_smile.png │ │ │ │ │ ├── tounge_smile.gif │ │ │ │ │ ├── whatchutalkingabout_smile.gif │ │ │ │ │ ├── whatchutalkingabout_smile.png │ │ │ │ │ ├── wink_smile.gif │ │ │ │ │ └── wink_smile.png │ │ │ ├── specialchar │ │ │ │ └── dialogs │ │ │ │ │ ├── lang │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── no.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tt.js │ │ │ │ │ ├── ug.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh.js │ │ │ │ │ └── specialchar.js │ │ │ ├── table │ │ │ │ └── dialogs │ │ │ │ │ └── table.js │ │ │ ├── tabletools │ │ │ │ └── dialogs │ │ │ │ │ └── tableCell.js │ │ │ ├── templates │ │ │ │ ├── dialogs │ │ │ │ │ ├── templates.css │ │ │ │ │ └── templates.js │ │ │ │ └── templates │ │ │ │ │ ├── default.js │ │ │ │ │ └── images │ │ │ │ │ ├── template1.gif │ │ │ │ │ ├── template2.gif │ │ │ │ │ └── template3.gif │ │ │ └── wsc │ │ │ │ ├── LICENSE.md │ │ │ │ ├── README.md │ │ │ │ └── dialogs │ │ │ │ ├── ciframe.html │ │ │ │ ├── tmpFrameset.html │ │ │ │ ├── wsc.css │ │ │ │ ├── wsc.js │ │ │ │ └── wsc_ie.js │ │ ├── samples │ │ │ ├── css │ │ │ │ └── samples.css │ │ │ ├── img │ │ │ │ ├── github-top.png │ │ │ │ ├── header-bg.png │ │ │ │ ├── header-separator.png │ │ │ │ ├── logo.png │ │ │ │ └── navigation-tip.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── sample.js │ │ │ │ └── sf.js │ │ │ ├── old │ │ │ │ ├── ajax.html │ │ │ │ ├── api.html │ │ │ │ ├── appendto.html │ │ │ │ ├── assets │ │ │ │ │ ├── inlineall │ │ │ │ │ │ └── logo.png │ │ │ │ │ ├── outputxhtml │ │ │ │ │ │ └── outputxhtml.css │ │ │ │ │ ├── posteddata.php │ │ │ │ │ ├── sample.jpg │ │ │ │ │ └── uilanguages │ │ │ │ │ │ └── languages.js │ │ │ │ ├── datafiltering.html │ │ │ │ ├── dialog │ │ │ │ │ ├── assets │ │ │ │ │ │ └── my_dialog.js │ │ │ │ │ └── dialog.html │ │ │ │ ├── divreplace.html │ │ │ │ ├── enterkey │ │ │ │ │ └── enterkey.html │ │ │ │ ├── htmlwriter │ │ │ │ │ ├── assets │ │ │ │ │ │ └── outputforflash │ │ │ │ │ │ │ ├── outputforflash.fla │ │ │ │ │ │ │ ├── outputforflash.swf │ │ │ │ │ │ │ └── swfobject.js │ │ │ │ │ ├── outputforflash.html │ │ │ │ │ └── outputhtml.html │ │ │ │ ├── index.html │ │ │ │ ├── inlineall.html │ │ │ │ ├── inlinebycode.html │ │ │ │ ├── inlinetextarea.html │ │ │ │ ├── jquery.html │ │ │ │ ├── magicline │ │ │ │ │ └── magicline.html │ │ │ │ ├── readonly.html │ │ │ │ ├── replacebyclass.html │ │ │ │ ├── replacebycode.html │ │ │ │ ├── sample.css │ │ │ │ ├── sample.js │ │ │ │ ├── sample_posteddata.php │ │ │ │ ├── tabindex.html │ │ │ │ ├── toolbar │ │ │ │ │ └── toolbar.html │ │ │ │ ├── uicolor.html │ │ │ │ ├── uilanguages.html │ │ │ │ ├── wysiwygarea │ │ │ │ │ └── fullpage.html │ │ │ │ └── xhtmlstyle.html │ │ │ └── toolbarconfigurator │ │ │ │ ├── css │ │ │ │ └── fontello.css │ │ │ │ ├── font │ │ │ │ ├── LICENSE.txt │ │ │ │ ├── config.json │ │ │ │ ├── fontello.eot │ │ │ │ ├── fontello.svg │ │ │ │ ├── fontello.ttf │ │ │ │ └── fontello.woff │ │ │ │ ├── index.html │ │ │ │ ├── js │ │ │ │ ├── abstracttoolbarmodifier.js │ │ │ │ ├── fulltoolbareditor.js │ │ │ │ ├── toolbarmodifier.js │ │ │ │ └── toolbartextmodifier.js │ │ │ │ └── lib │ │ │ │ └── codemirror │ │ │ │ ├── LICENSE │ │ │ │ ├── codemirror.css │ │ │ │ ├── codemirror.js │ │ │ │ ├── javascript.js │ │ │ │ ├── neo.css │ │ │ │ ├── show-hint.css │ │ │ │ └── show-hint.js │ │ ├── skins │ │ │ └── moono │ │ │ │ ├── dialog.css │ │ │ │ ├── dialog_ie.css │ │ │ │ ├── dialog_ie7.css │ │ │ │ ├── dialog_ie8.css │ │ │ │ ├── dialog_iequirks.css │ │ │ │ ├── editor.css │ │ │ │ ├── editor_gecko.css │ │ │ │ ├── editor_ie.css │ │ │ │ ├── editor_ie7.css │ │ │ │ ├── editor_ie8.css │ │ │ │ ├── editor_iequirks.css │ │ │ │ ├── icons.png │ │ │ │ ├── icons_hidpi.png │ │ │ │ ├── images │ │ │ │ ├── arrow.png │ │ │ │ ├── close.png │ │ │ │ ├── hidpi │ │ │ │ │ ├── close.png │ │ │ │ │ ├── lock-open.png │ │ │ │ │ ├── lock.png │ │ │ │ │ └── refresh.png │ │ │ │ ├── lock-open.png │ │ │ │ ├── lock.png │ │ │ │ ├── refresh.png │ │ │ │ └── spinner.gif │ │ │ │ └── readme.md │ │ └── styles.js │ ├── datatables │ │ ├── css │ │ │ ├── jquery.dataTables.css │ │ │ └── jquery.dataTables_themeroller.css │ │ ├── images │ │ │ ├── Sorting icons.psd │ │ │ ├── back_disabled.png │ │ │ ├── back_enabled.png │ │ │ ├── back_enabled_hover.png │ │ │ ├── favicon.ico │ │ │ ├── forward_disabled.png │ │ │ ├── forward_enabled.png │ │ │ ├── forward_enabled_hover.png │ │ │ ├── sort_asc.png │ │ │ ├── sort_asc_disabled.png │ │ │ ├── sort_both.png │ │ │ ├── sort_desc.png │ │ │ └── sort_desc_disabled.png │ │ └── js │ │ │ ├── jquery.dataTables.js │ │ │ └── jquery.dataTables.min.js │ ├── fileapi │ │ ├── FileAPI.flash.camera.swf │ │ ├── FileAPI.flash.image.swf │ │ ├── FileAPI.flash.swf │ │ ├── FileAPI.html5.js │ │ ├── FileAPI.html5.min.js │ │ ├── FileAPI.js │ │ ├── FileAPI.min.js │ │ ├── LICENSE │ │ └── plugins │ │ │ ├── FileAPI.exif.js │ │ │ ├── FileAPI.id3.js │ │ │ ├── caman.full.min.js │ │ │ └── caman.min.js │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── highlightjs │ │ ├── default.min.css │ │ └── highlight.min.js │ ├── img │ │ ├── abilian.png │ │ ├── avatar-default.png │ │ ├── logo-abilian-32x32.png │ │ └── logo-abilian.png │ ├── jquery │ │ └── js │ │ │ ├── jquery-1.11.3.js │ │ │ └── jquery-migrate-1.2.1.js │ ├── js │ │ ├── abilian-namespace.js │ │ ├── abilian.js │ │ ├── datatables-advanced-search.js │ │ ├── datatables-setup.js │ │ └── widgets │ │ │ ├── base.js │ │ │ ├── delete.js │ │ │ ├── dynamic-row.js │ │ │ ├── file.js │ │ │ ├── image.js │ │ │ ├── richtext.js │ │ │ ├── select2.js │ │ │ └── tags.js │ ├── less │ │ ├── abilian.less │ │ ├── activities.less │ │ ├── admin.less │ │ ├── attachments.less │ │ ├── comments.less │ │ ├── compat.less │ │ ├── datatables.less │ │ ├── form.less │ │ ├── layout.less │ │ ├── models.less │ │ ├── navbar.less │ │ ├── print.less │ │ ├── search.less │ │ ├── user.less │ │ └── variables.less │ ├── nvd3 │ │ ├── cdn.txt │ │ ├── d3.min.js │ │ ├── nv.d3.css │ │ └── nv.d3.js │ ├── requirejs │ │ ├── domReady.js │ │ └── require.js │ ├── select2 │ │ ├── CONTRIBUTING.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── component.json │ │ ├── composer.json │ │ ├── package.json │ │ ├── release.sh │ │ ├── select2-bootstrap.css │ │ ├── select2-spinner.gif │ │ ├── select2.css │ │ ├── select2.jquery.json │ │ ├── select2.js │ │ ├── select2.min.js │ │ ├── select2.png │ │ ├── select2_locale_ar.js │ │ ├── select2_locale_az.js │ │ ├── select2_locale_bg.js │ │ ├── select2_locale_ca.js │ │ ├── select2_locale_cs.js │ │ ├── select2_locale_da.js │ │ ├── select2_locale_de.js │ │ ├── select2_locale_el.js │ │ ├── select2_locale_en.js.template │ │ ├── select2_locale_es.js │ │ ├── select2_locale_et.js │ │ ├── select2_locale_eu.js │ │ ├── select2_locale_fa.js │ │ ├── select2_locale_fi.js │ │ ├── select2_locale_fr.js │ │ ├── select2_locale_gl.js │ │ ├── select2_locale_he.js │ │ ├── select2_locale_hr.js │ │ ├── select2_locale_hu.js │ │ ├── select2_locale_id.js │ │ ├── select2_locale_is.js │ │ ├── select2_locale_it.js │ │ ├── select2_locale_ja.js │ │ ├── select2_locale_ka.js │ │ ├── select2_locale_ko.js │ │ ├── select2_locale_lt.js │ │ ├── select2_locale_lv.js │ │ ├── select2_locale_mk.js │ │ ├── select2_locale_ms.js │ │ ├── select2_locale_nb.js │ │ ├── select2_locale_nl.js │ │ ├── select2_locale_pl.js │ │ ├── select2_locale_pt-BR.js │ │ ├── select2_locale_pt-PT.js │ │ ├── select2_locale_ro.js │ │ ├── select2_locale_rs.js │ │ ├── select2_locale_ru.js │ │ ├── select2_locale_sk.js │ │ ├── select2_locale_sv.js │ │ ├── select2_locale_th.js │ │ ├── select2_locale_tr.js │ │ ├── select2_locale_ug-CN.js │ │ ├── select2_locale_uk.js │ │ ├── select2_locale_vi.js │ │ ├── select2_locale_zh-CN.js │ │ ├── select2_locale_zh-TW.js │ │ └── select2x2.png │ └── typeahead │ │ ├── hogan-2.0.0.js │ │ ├── typeahead.js │ │ ├── typeahead.js-bootstrap.css │ │ ├── typeahead.js-bootstrap.less │ │ └── typeahead.min.js │ ├── search │ ├── __init__.py │ ├── criterion.py │ ├── templates │ │ └── search │ │ │ ├── _base.html │ │ │ └── search.html │ └── views.py │ ├── setupwizard │ ├── __init__.py │ └── templates │ │ └── setupwizard │ │ ├── _base.html │ │ ├── _wizard.html │ │ ├── done.html │ │ ├── finalize.html │ │ ├── step_admin_account.html │ │ ├── step_db.html │ │ ├── step_redis.html │ │ └── step_site_info.html │ ├── tags │ ├── __init__.py │ ├── admin.py │ ├── criterion.py │ ├── extension.py │ ├── forms.py │ ├── templates │ │ └── admin │ │ │ ├── tags.html │ │ │ └── tags_ns.html │ └── views.py │ ├── templates │ ├── abilian_base.html │ ├── abilian_init.js │ ├── base.html │ ├── breadcrumbs.html │ ├── debug_panels │ │ ├── actions_panel.html │ │ ├── indexing_panel.html │ │ ├── security_info_panel.html │ │ └── signals_panel.html │ ├── default │ │ ├── avatar.svg │ │ ├── list_view.html │ │ ├── object_edit.html │ │ ├── object_view.html │ │ └── single_view.html │ ├── error403.html │ ├── error404.html │ ├── error500.html │ ├── flash-messages.html │ ├── index.html │ ├── macros.html │ ├── macros │ │ ├── activity.html │ │ ├── attachment.html │ │ ├── attachment_default.html │ │ ├── audit.html │ │ ├── box.html │ │ ├── buttons.html │ │ ├── comment.html │ │ ├── form.html │ │ ├── recent.html │ │ ├── table.html │ │ ├── tag.html │ │ └── user.html │ ├── navbar.html │ ├── preferences │ │ ├── _base.html │ │ └── user.html │ └── widgets │ │ ├── fieldlist.html │ │ ├── fieldlist_view.html │ │ ├── file_input.html │ │ ├── frontend_action_delete_confim.html │ │ ├── horizontal_table.html │ │ ├── image_input.html │ │ ├── model_fieldlist.html │ │ ├── model_widget_edit.html │ │ ├── model_widget_view.html │ │ ├── render_ajax_table.html │ │ ├── render_for_edit.html │ │ ├── render_single.html │ │ ├── render_table.html │ │ ├── richtext.html │ │ ├── select2ajax.html │ │ ├── tabular_fieldlist_widget.html │ │ └── timepicker.html │ ├── tests │ ├── __init__.py │ ├── test_actions.py │ ├── test_filters.py │ ├── test_icons.py │ ├── test_login.py │ ├── test_validators.py │ └── test_widgets.py │ ├── tools │ ├── __init__.py │ └── debug_toolbar.py │ ├── uploads │ ├── __init__.py │ ├── extension.py │ └── views.py │ ├── util.py │ └── views │ ├── __init__.py │ ├── base.py │ ├── files.py │ ├── images.py │ ├── object.py │ ├── registry.py │ └── tests │ └── test_registry.py ├── tests ├── __init__.py ├── integration │ ├── __init__.py │ ├── test_frontend.py │ └── test_search.py ├── test_i18n.py └── test_id_generator.py ├── tox.ini ├── wsgi.py └── yarn.lock /.builds/alpine.yml: -------------------------------------------------------------------------------- 1 | image: alpine/latest 2 | packages: 3 | - py3-tox 4 | - curl 5 | - gcc 6 | - python3-dev 7 | - libffi-dev 8 | - musl-dev 9 | - openssl-dev 10 | - postgresql-dev 11 | - libxslt-dev 12 | - libjpeg-turbo-dev 13 | - poppler-utils 14 | - nodejs-dev 15 | - npm 16 | 17 | sources: 18 | - https://github.com/abilian/abilian-core 19 | 20 | tasks: 21 | - test-py38: | 22 | sudo npm install -g less 23 | cd abilian-core 24 | tox -e py38 25 | - lint: | 26 | cd abilian-core 27 | tox -e lint 28 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | --- 2 | engines: 3 | csslint: 4 | enabled: true 5 | duplication: 6 | enabled: true 7 | config: 8 | languages: 9 | - javascript 10 | - python 11 | eslint: 12 | enabled: true 13 | fixme: 14 | enabled: true 15 | radon: 16 | enabled: true 17 | ratings: 18 | paths: 19 | - "**.css" 20 | - "**.js" 21 | - "**.jsx" 22 | - "**.py" 23 | exclude_paths: 24 | - .tox/ 25 | - abilian/web/resources/ 26 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 4 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | charset = utf-8 11 | end_of_line = lf 12 | 13 | [*.js] 14 | indent_size = 2 15 | 16 | [*.html] 17 | indent_size = 2 18 | 19 | [*.bat] 20 | indent_style = tab 21 | end_of_line = crlf 22 | 23 | [Makefile] 24 | indent_style = tab 25 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | // See: https://github.com/prettier/eslint-config-prettier 4 | extends: ["prettier", "plugin:requirejs/recommended"], 5 | // required to lint *.vue files 6 | plugins: ["html", "requirejs"], 7 | env: { 8 | browser: true, 9 | es6: true, 10 | }, 11 | // add your custom rules here 12 | rules: { 13 | semi: ["error", "always"], 14 | curly: "error", 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /.gitchangelog.rc: -------------------------------------------------------------------------------- 1 | tag_filter_regexp = r'^v?[0-9]+\.[0-9]+(\.[0-9]+)?$' 2 | 3 | ignore_regexps = [ 4 | r'[Dd]eps', 5 | r'@minor', r'!minor', 6 | r'@cosmetic', r'!cosmetic', 7 | r'@refactor', r'!refactor', 8 | r'@wip', r'!wip', 9 | r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[p|P]kg:', 10 | r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[d|D]ev:', 11 | r'^(.{3,3}\s*:)?\s*[fF]irst commit.?\s*$', 12 | r'^$', ## ignore commits with empty messages 13 | ] 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .tox 3 | .dox 4 | .travis-solo 5 | .DS_Store 6 | .coverage 7 | .vagrant 8 | .cache 9 | .coveralls.yml 10 | .ropeproject 11 | .mypy_cache 12 | .venv 13 | *,cover 14 | 15 | sandbox 16 | instance 17 | node_modules 18 | env 19 | whoosh* 20 | abilian.db 21 | tmp 22 | cache 23 | dist 24 | tests/cache 25 | tests/tmp 26 | tests/extra_files 27 | maxid.data 28 | results 29 | build 30 | MANIFEST 31 | docs/_build 32 | htmlcov 33 | junit-py27.xml 34 | 35 | abilian/static/misc* 36 | abilian/static/.webassets-cache 37 | abilian/static/gen 38 | abilian/static/placeholders 39 | 40 | *.pyc 41 | *.egg 42 | *.egg-info 43 | *.swp 44 | *.prof 45 | *.stats 46 | *.mo 47 | .cov2emacs.log 48 | /.eggs/ 49 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | ## Python 3 & deps upgrades 4 | 5 | - [] Fix test on Python 3.9 6 | 7 | - [] Upgrade Flask-WTF to 0.13 and fix metaclass error + csrf_token issues 8 | - [] Ugrade flask-sqlalchemy and other SQLA releated deps 9 | - [] Fix SQLA warnings 10 | - [] Fix all tests (including skipped ones) under Python 3.6 11 | - [] Fix issue w/ WTForms 2.2 12 | 13 | - [x] Fix issues reported by `pylint --py3k` 14 | 15 | ## Testing & QA 16 | 17 | - [] Add hypothesis tests 18 | 19 | - [x] Finish "classless" unit testing refactor 20 | - [x] Install `pytest-randomly` and fix errors 21 | - [x] Fix all JS issues detected by ESlint and enable check on CI 22 | 23 | ## Project management & CI 24 | 25 | - [x] Switch to Poetry 26 | 27 | ## Other 28 | 29 | See: 30 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | Vagrant.configure("2") do |config| 5 | # config.vm.box = "hashicorp/bionic64" 6 | 7 | # config.vm.provider :virtualbox do |vb| 8 | # vb.memory = 1024 9 | # vb.cpus = 2 10 | # end 11 | 12 | config.vm.provider "docker" do |d| 13 | d.image = "ubuntu/bionic" 14 | end 15 | 16 | config.vm.provision :shell, path: "etc/provision.sh" 17 | end 18 | -------------------------------------------------------------------------------- /conftest.py: -------------------------------------------------------------------------------- 1 | """Configuration and injectable fixtures for Pytest. 2 | 3 | Supposed to replace the too-complex current UnitTest-based testing 4 | framework. 5 | 6 | DI and functions over complex inheritance hierarchies FTW! 7 | """ 8 | import os 9 | import warnings 10 | 11 | pytest_plugins = ["abilian.testing.fixtures"] 12 | 13 | if os.environ.get("FAIL_ON_WARNINGS"): 14 | # Don't remove ! 15 | # noinspection PyUnresolvedReferences 16 | import pandas 17 | 18 | warnings.simplefilter("error") 19 | -------------------------------------------------------------------------------- /demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/demo/__init__.py -------------------------------------------------------------------------------- /demo/wsgi.py: -------------------------------------------------------------------------------- 1 | """Create an application instance.""" 2 | 3 | from .app import create_app 4 | 5 | app = create_app() 6 | -------------------------------------------------------------------------------- /docs/_themes/flask/layout.html: -------------------------------------------------------------------------------- 1 | {%- extends "basic/layout.html" %} 2 | {%- block extrahead %} 3 | {{ super() }} 4 | {% if theme_touch_icon %} 5 | 6 | {% endif %} 7 | 9 | {% endblock %} 10 | {%- block relbar2 %}{% endblock %} 11 | {% block header %} 12 | {{ super() }} 13 | {% if pagename == 'index' %} 14 |
15 | {% endif %} 16 | {% endblock %} 17 | {%- block footer %} 18 | 22 | {% if pagename == 'index' %} 23 |
24 | {% endif %} 25 | {%- endblock %} 26 | -------------------------------------------------------------------------------- /docs/_themes/flask/relations.html: -------------------------------------------------------------------------------- 1 |

Related Topics

2 | 20 | -------------------------------------------------------------------------------- /docs/_themes/flask/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = flasky.css 4 | pygments_style = flask_theme_support.FlaskyStyle 5 | 6 | [options] 7 | index_logo = 8 | index_logo_height = 120px 9 | touch_icon = 10 | github_fork = 'MrJoes/Flask-AdminEx' 11 | -------------------------------------------------------------------------------- /docs/changelog.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../CHANGES.rst 2 | -------------------------------------------------------------------------------- /docs/exts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/docs/exts/__init__.py -------------------------------------------------------------------------------- /docs/exts/intersphinx_flask_ext.py: -------------------------------------------------------------------------------- 1 | """ 2 | This extensions makes intersphinx work with flask.ext extensions. 3 | 4 | For example when actual module name is `flask_babel', documented 5 | extension name is `flask.ext.babel` 6 | """ 7 | 8 | 9 | def missing_reference(app, env, node, contnode): 10 | target = node['reftarget'] 11 | if not target.startswith('flask_'): 12 | return 13 | 14 | node['reftarget'] = 'flask.ext.' + target[6:] 15 | return 16 | 17 | 18 | def setup(app): 19 | app.connect('missing-reference', missing_reference) 20 | -------------------------------------------------------------------------------- /docs/images/abilian-logo-baseline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/docs/images/abilian-logo-baseline.png -------------------------------------------------------------------------------- /docs/inventories/babel.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/docs/inventories/babel.inv -------------------------------------------------------------------------------- /docs/logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/docs/logo.pdf -------------------------------------------------------------------------------- /etc/00README.txt: -------------------------------------------------------------------------------- 1 | Put there all the config files that don't have to be at the root of the 2 | project. 3 | -------------------------------------------------------------------------------- /etc/babel.cfg: -------------------------------------------------------------------------------- 1 | [python: **.py] 2 | 3 | [jinja2: **/templates/**.html] 4 | extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension,abilian.core.jinjaext.DeferredJSExtension 5 | 6 | [jinja2: **/templates/**.txt] 7 | extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension,abilian.core.jinjaext.DeferredJSExtension 8 | 9 | [jinja2: **/templates/**.js] 10 | extensions=jinja2.ext.autoescape,jinja2.ext.with_,webassets.ext.jinja2.AssetsExtension,abilian.core.jinjaext.DeferredJSExtension 11 | -------------------------------------------------------------------------------- /etc/provision.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Simplistic provisionning script for Ubuntu, called by Vagrant. 4 | 5 | apt-get update 6 | apt-get upgrade -y 7 | apt-get install -y python-dev python-virtualenv python-pip git \ 8 | build-essential imagemagick libpq-dev libxslt1-dev npm unoconv \ 9 | libjpeg-dev python-tox virtualenvwrapper poppler-utils 10 | 11 | ln -sf /usr/bin/nodejs /usr/local/bin/node 12 | 13 | npm install -g less 14 | 15 | mkvirtualenv core 16 | pip install -U pip tox setuptools 17 | -------------------------------------------------------------------------------- /etc/vagrant_test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit on error 4 | set -e 5 | 6 | cp -r /vagrant $HOME/src 7 | tox 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "abilian-core-front", 3 | "private": true, 4 | "engines": { 5 | "node": ">= 4.0.0", 6 | "npm": ">= 3.0.0" 7 | }, 8 | "devDependencies": { 9 | "eslint": "^7.0.0", 10 | "eslint-config-prettier": "^8.1.0", 11 | "eslint-plugin-html": "^6.0.2", 12 | "eslint-plugin-import": "^2.21.2", 13 | "eslint-plugin-node": "^11.1.0", 14 | "eslint-plugin-requirejs": "^4.0.0", 15 | "prettier": "2.3.2", 16 | "stylelint": "^13.3.3", 17 | "stylelint-config-standard": "^22.0.0" 18 | }, 19 | "stylelint": { 20 | "extends": "stylelint-config-standard", 21 | "rules": { 22 | "selector-list-comma-newline-after": "always-multi-line" 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/abilian/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from pkgutil import extend_path 4 | 5 | # noinspection PyUnboundLocalVariable 6 | __path__ = extend_path(__path__, __name__) 7 | -------------------------------------------------------------------------------- /src/abilian/cli/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .base import * # noqa 4 | from .config import * # noqa 5 | from .indexing import * # noqa 6 | -------------------------------------------------------------------------------- /src/abilian/core/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/core/__init__.py -------------------------------------------------------------------------------- /src/abilian/core/extensions/login.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import TYPE_CHECKING, Set 4 | 5 | from flask_login import AnonymousUserMixin, LoginManager 6 | 7 | if TYPE_CHECKING: 8 | from abilian.core.models.subjects import Group 9 | 10 | 11 | class AnonymousUser(AnonymousUserMixin): 12 | def has_role(self, role): 13 | from abilian.services import get_service 14 | 15 | security = get_service("security") 16 | return security.has_role(self, role) 17 | 18 | @property 19 | def groups(self) -> set[Group]: 20 | return set() 21 | 22 | 23 | login_manager = LoginManager() 24 | login_manager.anonymous_user = AnonymousUser 25 | -------------------------------------------------------------------------------- /src/abilian/core/extensions/redis.py: -------------------------------------------------------------------------------- 1 | """Simple redis extension.""" 2 | 3 | from __future__ import annotations 4 | 5 | import redis 6 | from flask import Flask 7 | 8 | 9 | class Redis: 10 | """Redis extension for flask.""" 11 | 12 | client = None 13 | 14 | def __init__(self, app: Flask = None): 15 | if app is not None: 16 | self.init_app(app) 17 | 18 | def init_app(self, app: Flask): 19 | uri = app.config.get("REDIS_URI") 20 | if app.testing: 21 | return 22 | if not uri: 23 | app.logger.warning( 24 | "Redis extension: REDIS_URI is not defined " 25 | "in application configuration" 26 | ) 27 | return 28 | 29 | self.client = redis.from_url(uri) 30 | app.extensions["redis"] = self 31 | -------------------------------------------------------------------------------- /src/abilian/core/models/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/core/models/tests/__init__.py -------------------------------------------------------------------------------- /src/abilian/core/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/core/tests/__init__.py -------------------------------------------------------------------------------- /src/abilian/core/tests/dummy.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from sqlalchemy import Column, Text, UnicodeText 4 | 5 | from abilian.core.entities import SEARCHABLE, Entity 6 | 7 | 8 | class DummyContact(Entity): 9 | salutation = Column(UnicodeText, default="") 10 | first_name = Column(UnicodeText, default="", info=SEARCHABLE) 11 | last_name = Column(UnicodeText, default="", info=SEARCHABLE) 12 | email = Column(Text, default="") 13 | -------------------------------------------------------------------------------- /src/abilian/core/tests/test_singleton.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from abilian.core.singleton import UniqueName 6 | 7 | 8 | class NS1(UniqueName): 9 | pass 10 | 11 | 12 | class NS2(UniqueName): 13 | pass 14 | 15 | 16 | def test_singleton(): 17 | val = NS1("val") 18 | other_val = NS1("val") 19 | assert val is other_val 20 | assert id(val) == id(other_val) 21 | 22 | 23 | def test_equality(): 24 | val = NS1("val") 25 | assert val == "val" 26 | assert val == "val" 27 | 28 | 29 | def test_namespaces(): 30 | ns1_val = NS1("val") 31 | ns2_val = NS2("val") 32 | assert ns1_val is not ns2_val 33 | # equality works because of string compat 34 | assert ns1_val == ns2_val 35 | -------------------------------------------------------------------------------- /src/abilian/services/activity/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .models import ActivityEntry 4 | from .service import ActivityService 5 | 6 | __all__ = ["ActivityEntry", "ActivityService"] 7 | -------------------------------------------------------------------------------- /src/abilian/services/antivirus/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .service import service 4 | -------------------------------------------------------------------------------- /src/abilian/services/audit/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .models import * # noqa 4 | from .service import * # noqa 5 | -------------------------------------------------------------------------------- /src/abilian/services/auth/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from .service import AuthService # noqa 6 | -------------------------------------------------------------------------------- /src/abilian/services/auth/templates/login/email/password_reset_instructions.fr.txt: -------------------------------------------------------------------------------- 1 | Bonjour, 2 | 3 | quelqu'un - sans doute vous - a demandé une réinitialisation de votre mot 4 | de passe. 5 | 6 | Si c'est bien le cas, vous pouvez procéder à l'opération en cliquant (ou en 7 | recopiant dans la barre d'URL de votre navigateur) le lien ci-dessous, et en 8 | suivant les instructions qui vous seront données ensuite. 9 | 10 | {{ reset_link }} 11 | 12 | Dans le cas contraire, vous pouvez ignorer cette demande. 13 | 14 | Cordialement, 15 | 16 | Les administrateurs de {{ config.SITE_NAME }} 17 | -------------------------------------------------------------------------------- /src/abilian/services/auth/templates/login/email/password_reset_instructions.txt: -------------------------------------------------------------------------------- 1 | Hello, 2 | 3 | someone - should be you - asked for your password to be reset. 4 | 5 | If this request is legitimate, you can perform the operation by clicking (or 6 | copying in your browser's URL bar) the link below, and 7 | following the instructions given to you then. 8 | 9 | {{ reset_link }} 10 | 11 | 12 | If not, you may ignore this request. 13 | 14 | Best Regards, 15 | 16 | Administrators at {{ config.SITE_NAME }} 17 | -------------------------------------------------------------------------------- /src/abilian/services/auth/templates/login/forgotten_password.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "base.html" %} 3 | 4 | {% block main %} 5 | 6 |
7 | 8 | 23 |
24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/mugshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/mugshot.jpg -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/onepage.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/onepage.pdf -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/picture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/picture.jpg -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/rammstein.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/rammstein.pdf -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/test.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/test.doc -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/test.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/test.docx -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/test.odt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/test.odt -------------------------------------------------------------------------------- /src/abilian/services/conversion/dummy_files/test.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/conversion/dummy_files/test.xls -------------------------------------------------------------------------------- /src/abilian/services/conversion/exceptions.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | 4 | class ConversionError(Exception): 5 | pass 6 | 7 | 8 | class HandlerNotFound(ConversionError): 9 | pass 10 | -------------------------------------------------------------------------------- /src/abilian/services/image/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/image/tests/__init__.py -------------------------------------------------------------------------------- /src/abilian/services/image/tests/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/services/image/tests/cat.jpg -------------------------------------------------------------------------------- /src/abilian/services/indexing/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from .schema import indexable_role 6 | from .service import service 7 | 8 | __all__ = ["service", "indexable_role"] 9 | -------------------------------------------------------------------------------- /src/abilian/services/indexing/tests/test_schema.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from flask_login import AnonymousUserMixin 6 | 7 | from abilian.services.indexing.schema import indexable_role 8 | from abilian.services.security.models import Anonymous, Reader 9 | 10 | 11 | def test_indexable_role(): 12 | assert indexable_role(Anonymous) == "role:anonymous" 13 | assert indexable_role(AnonymousUserMixin()) == "role:anonymous" 14 | assert indexable_role(Reader) == "role:reader" 15 | -------------------------------------------------------------------------------- /src/abilian/services/preferences/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .service import preferences 4 | 5 | __all__ = ["preferences"] 6 | -------------------------------------------------------------------------------- /src/abilian/services/preferences/panel.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Any 4 | 5 | 6 | class PreferencePanel: 7 | """Base class for preference panels. 8 | 9 | Currently, this class does nothing. I may be useful in the future 10 | either as just a marker interface (for automatic plugin discovery / 11 | registration), or to add some common functionnalities. Otherwise, it 12 | will be removed. 13 | """ 14 | 15 | id: str 16 | label: Any 17 | 18 | def is_accessible(self): 19 | return True 20 | 21 | def get(self): 22 | raise NotImplementedError 23 | 24 | def post(self): 25 | raise NotImplementedError 26 | -------------------------------------------------------------------------------- /src/abilian/services/repository/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from .service import repository, session_repository 6 | 7 | __all__ = ["repository", "session_repository"] 8 | -------------------------------------------------------------------------------- /src/abilian/services/security/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .models import ( 4 | CREATE, 5 | DELETE, 6 | MANAGE, 7 | READ, 8 | WRITE, 9 | Admin, 10 | Anonymous, 11 | Authenticated, 12 | Creator, 13 | InheritSecurity, 14 | Manager, 15 | Owner, 16 | Permission, 17 | PermissionAssignment, 18 | Reader, 19 | Role, 20 | RoleAssignment, 21 | RoleType, 22 | SecurityAudit, 23 | Writer, 24 | ) 25 | from .service import SecurityService, security 26 | -------------------------------------------------------------------------------- /src/abilian/services/settings/__init__.py: -------------------------------------------------------------------------------- 1 | """Application settings service.""" 2 | 3 | from __future__ import annotations 4 | 5 | from .models import register 6 | from .service import SettingsService 7 | 8 | __all__ = ["SettingsService", "register"] 9 | -------------------------------------------------------------------------------- /src/abilian/services/tagging/__init__.py: -------------------------------------------------------------------------------- 1 | """Simple tagging system.""" 2 | 3 | from __future__ import annotations 4 | -------------------------------------------------------------------------------- /src/abilian/services/tagging/service.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | 6 | class Taggable: 7 | """Mixin trait for taggable objects. 8 | 9 | Currently not used. 10 | """ 11 | 12 | 13 | class TagService: 14 | """The tag service.""" 15 | 16 | def tag(self, obj, term, user=None): 17 | """Apply a tag on a taggable object. 18 | 19 | If user is None, uses the current logged in user. 20 | """ 21 | 22 | def untag(self, obj, term, user=None): 23 | """Remove the given tag from the given object. 24 | 25 | See tag(). 26 | """ 27 | 28 | def get_objects_tagged_with(self, term): 29 | """Returns a list of objects tagged with a given term.""" 30 | 31 | def get_tags_applied_on(self, obj): 32 | """Returns a list of tags applied on a given document.""" 33 | -------------------------------------------------------------------------------- /src/abilian/services/viewtracker/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .service import viewtracker 4 | 5 | __all__ = ["viewtracker"] 6 | -------------------------------------------------------------------------------- /src/abilian/services/vocabularies/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from .models import Vocabulary 6 | from .service import get_vocabulary, vocabularies 7 | 8 | __all__ = ["vocabularies", "get_vocabulary", "Vocabulary"] 9 | -------------------------------------------------------------------------------- /src/abilian/services/vocabularies/templates/admin/vocabularies.html: -------------------------------------------------------------------------------- 1 | {%- extends "admin/_base.html" %} 2 | 3 | {% from "admin/macros/vocabularies.html" import m_vocabulary with context %} 4 | 5 | {%- block content %} 6 | {%- for group in vocabularies |sort %} 7 |

{{ group or _('Global') }}

8 | 9 | {%- for voc in vocabularies[group] %} 10 | {% call m_vocabulary(voc) %} 11 |
12 | 13 | 14 | {{ _('Add new value') }} 15 | 16 |
17 | {%- endcall %} 18 | {%- endfor %} {# voc in groups #} 19 | 20 | {%- endfor %} {# groups #} 21 | {%- endblock %} 22 | -------------------------------------------------------------------------------- /src/abilian/testing/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .fixtures import TestConfig 4 | -------------------------------------------------------------------------------- /src/abilian/web/__init__.py: -------------------------------------------------------------------------------- 1 | """This package contains various modules that should be generic and reused in 2 | web application, specially CRM-like applications.""" 3 | 4 | from __future__ import annotations 5 | 6 | from .util import url_for 7 | 8 | __all__ = ["url_for"] 9 | -------------------------------------------------------------------------------- /src/abilian/web/admin/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from .extension import Admin 6 | from .panel import AdminPanel 7 | 8 | __all__ = ["Admin", "AdminPanel"] 9 | -------------------------------------------------------------------------------- /src/abilian/web/admin/panels/__init__.py: -------------------------------------------------------------------------------- 1 | """Core panels.""" 2 | 3 | from __future__ import annotations 4 | -------------------------------------------------------------------------------- /src/abilian/web/admin/panels/groups/forms.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from wtforms.fields import BooleanField, StringField 6 | 7 | from abilian.i18n import _l 8 | from abilian.services.security.models import Role 9 | from abilian.web.forms import Form, fields, widgets 10 | from abilian.web.forms.filters import strip 11 | from abilian.web.forms.validators import required 12 | 13 | 14 | class GroupAdminForm(Form): 15 | name = StringField(_l("Name"), filters=(strip,), validators=[required()]) 16 | description = StringField(_l("Description"), filters=(strip,)) 17 | 18 | public = BooleanField(_l("Public"), widget=widgets.BooleanWidget(on_off_mode=True)) 19 | 20 | roles = fields.Select2MultipleField( 21 | _l("Roles"), 22 | choices=lambda: [(r.name, r.label) for r in Role.assignable_roles()], 23 | ) 24 | -------------------------------------------------------------------------------- /src/abilian/web/admin/panels/impersonate.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from flask import redirect, request, url_for 4 | from flask_login import login_user 5 | 6 | from abilian.core.models.subjects import User 7 | from abilian.web.admin.panel import AdminPanel 8 | 9 | 10 | class ImpersonatePanel(AdminPanel): 11 | id = "impersonate" 12 | label = "Impersonate" 13 | icon = "user" 14 | 15 | def get(self): 16 | user_email = request.args.get("email") 17 | if not user_email: 18 | return "UI not done yet. Add '?email=...' at the end of this URL for now." 19 | 20 | user = User.query.filter(User.email == user_email).one() 21 | login_user(user) 22 | return redirect(url_for("main.home")) 23 | -------------------------------------------------------------------------------- /src/abilian/web/admin/templates/admin/_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% from "macros/box.html" import m_box, m_box_menu with context %} 4 | 5 | {% block main %} 6 |
7 |
8 | {% block content %} 9 | {% endblock %} 10 |
11 | 12 |
13 | {%- call m_box_menu() %} 14 | 19 | {%- endcall %} 20 |
21 |
22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /src/abilian/web/admin/templates/admin/settings.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/_base.html" %} 2 | 3 | {% from "macros/box.html" import m_box %} 4 | 5 | {% block content %} 6 | {%- call m_box(title=_("Settings")) %} 7 |
8 | {{ csrf.field() }} 9 | 10 | {%- for k in keys %} 11 |
12 | 13 | {%-if k.description %} 14 |

{{ k.description }}

15 | {%- endif %} 16 | {{ k }} 17 |
18 | {%- endfor %} 19 | 20 | 21 |
22 | {%- endcall %} 23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /src/abilian/web/admin/templates/admin/settings_session_lifetime.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 |
6 | 7 |
8 | 9 | 10 |
11 | 12 |
13 | 14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /src/abilian/web/admin/test_views.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from flask import url_for 6 | 7 | 8 | def test_home(client, db_session): 9 | response = client.get(url_for("admin.dashboard")) 10 | assert response.status_code == 200 11 | 12 | 13 | def test_sysinfo(client, db_session): 14 | response = client.get(url_for("admin.sysinfo")) 15 | assert response.status_code == 200 16 | 17 | 18 | def test_login_session(client, db_session): 19 | response = client.get(url_for("admin.login_sessions")) 20 | assert response.status_code == 200 21 | 22 | 23 | def test_audit(client, db_session): 24 | response = client.get(url_for("admin.audit")) 25 | assert response.status_code == 200 26 | 27 | 28 | def test_settings(client, db_session): 29 | response = client.get(url_for("admin.settings")) 30 | assert response.status_code == 200 31 | -------------------------------------------------------------------------------- /src/abilian/web/attachments/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from flask import Flask 6 | 7 | from .extension import AttachmentExtension, AttachmentsManager 8 | from .forms import AttachmentForm # noqa 9 | 10 | 11 | def register_plugin(app: Flask): 12 | AttachmentExtension(app) 13 | -------------------------------------------------------------------------------- /src/abilian/web/attachments/forms.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from wtforms.fields import StringField 6 | 7 | from abilian.core.models.attachment import Attachment 8 | from abilian.i18n import _l 9 | from abilian.web.forms import Form 10 | from abilian.web.forms.fields import FileField 11 | from abilian.web.forms.filters import strip 12 | from abilian.web.forms.validators import required 13 | 14 | 15 | class AttachmentForm(Form): 16 | 17 | blob = FileField( 18 | _l("file"), validators=[required()], filters=[strip], multiple=False 19 | ) 20 | 21 | description = StringField(_l("description (optional)"), filters=[strip]) 22 | 23 | class Meta: 24 | model = Attachment 25 | include_primary_keys = True 26 | assign_required = False # for 'id': allow None, for new records 27 | -------------------------------------------------------------------------------- /src/abilian/web/comments/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from flask import Flask 6 | 7 | from .extension import CommentExtension 8 | 9 | 10 | def register_plugin(app: Flask): 11 | CommentExtension(app) 12 | -------------------------------------------------------------------------------- /src/abilian/web/comments/forms.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from wtforms.fields import TextAreaField 6 | 7 | from abilian.core.models.comment import Comment 8 | from abilian.i18n import _l 9 | from abilian.web.forms import Form 10 | from abilian.web.forms.filters import strip 11 | from abilian.web.forms.validators import required 12 | from abilian.web.forms.widgets import TextArea 13 | 14 | 15 | class CommentForm(Form): 16 | 17 | body = TextAreaField( 18 | label=_l("Comment"), 19 | validators=[required()], 20 | filters=(strip,), 21 | widget=TextArea(rows=5, resizeable="vertical"), 22 | ) 23 | 24 | class Meta: 25 | model = Comment 26 | include_primary_keys = True 27 | assign_required = False # for 'id': allow None, for new records 28 | -------------------------------------------------------------------------------- /src/abilian/web/coreviews/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | -------------------------------------------------------------------------------- /src/abilian/web/forms/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .fields import * # noqa 4 | from .filters import * # noqa 5 | from .form import * # noqa 6 | from .permissions import FormPermissions 7 | from .validators import * # noqa 8 | from .widgets import * # noqa 9 | -------------------------------------------------------------------------------- /src/abilian/web/forms/filters.py: -------------------------------------------------------------------------------- 1 | """Field filters for WTForm.""" 2 | 3 | from __future__ import annotations 4 | 5 | from typing import Union 6 | 7 | __all__ = ["strip", "uppercase", "lowercase"] 8 | 9 | 10 | def strip(data: None | int | str) -> int | str: 11 | """Strip data if data is a string.""" 12 | if data is None: 13 | return "" 14 | if not isinstance(data, str): 15 | return data 16 | return data.strip() 17 | 18 | 19 | def uppercase(data: None | int | str) -> None | int | str: 20 | if not isinstance(data, str): 21 | return data 22 | return data.upper() 23 | 24 | 25 | def lowercase(data: None | int | str) -> None | int | str: 26 | if not isinstance(data, str): 27 | return data 28 | return data.lower() 29 | -------------------------------------------------------------------------------- /src/abilian/web/http.py: -------------------------------------------------------------------------------- 1 | """View decorators for controlling some aspect of HTTP, mainly: Cache 2 | headers.""" 3 | 4 | from __future__ import annotations 5 | 6 | from functools import wraps 7 | 8 | from flask import make_response 9 | 10 | 11 | def nocache(view): 12 | @wraps(view) 13 | def _nocache(*args, **kwargs): 14 | resp = make_response(view(*args, **kwargs)) 15 | resp.headers["Cache-Control"] = "no-cache" 16 | return resp 17 | 18 | return _nocache 19 | -------------------------------------------------------------------------------- /src/abilian/web/preferences/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | -------------------------------------------------------------------------------- /src/abilian/web/preferences/tests/avatar-colormap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/preferences/tests/avatar-colormap.png -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Arabic translation for bootstrap-datepicker 3 | * Mohammed Alshehri 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ar'] = { 7 | days: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"], 8 | daysShort: ["أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت", "أحد"], 9 | daysMin: ["ح", "ن", "ث", "ع", "خ", "ج", "س", "ح"], 10 | months: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 11 | monthsShort: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], 12 | today: "هذا اليوم", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.bg.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bulgarian translation for bootstrap-datepicker 3 | * Apostol Apostolov 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['bg'] = { 7 | days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"], 9 | daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"], 10 | months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "днес" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ca.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Catalan translation for bootstrap-datepicker 3 | * J. Garcia 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ca'] = { 7 | days: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"], 8 | daysShort: ["Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"], 9 | daysMin: ["dg", "dl", "dt", "dc", "dj", "dv", "ds", "dg"], 10 | months: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], 12 | today: "Avui" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.cs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Czech translation for bootstrap-datepicker 3 | * Matěj Koubík 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['cs'] = { 8 | days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"], 9 | daysShort: ["Ned", "Pon", "Úte", "Stř", "Čtv", "Pát", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"], 11 | months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], 12 | monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.cy.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welsh translation for bootstrap-datepicker 3 | * S. Morris 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['cy'] = { 7 | days: ["Sul", "Llun", "Mawrth", "Mercher", "Iau", "Gwener", "Sadwrn", "Sul"], 8 | daysShort: ["Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad", "Sul"], 9 | daysMin: ["Su", "Ll", "Ma", "Me", "Ia", "Gwe", "Sa", "Su"], 10 | months: ["Ionawr", "Chewfror", "Mawrth", "Ebrill", "Mai", "Mehefin", "Gorfennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr"], 11 | monthsShort: ["Ion", "Chw", "Maw", "Ebr", "Mai", "Meh", "Gor", "Aws", "Med", "Hyd", "Tach", "Rha"], 12 | today: "Heddiw" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.da.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Danish translation for bootstrap-datepicker 3 | * Christian Pedersen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['da'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "I Dag", 13 | clear: "Nulstil" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.de.js: -------------------------------------------------------------------------------- 1 | /** 2 | * German translation for bootstrap-datepicker 3 | * Sam Zurcher 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['de'] = { 7 | days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"], 8 | daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"], 9 | daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"], 10 | months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], 11 | monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], 12 | today: "Heute", 13 | clear: "Löschen", 14 | weekStart: 1, 15 | format: "dd.mm.yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.el.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Greek translation for bootstrap-datepicker 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['el'] = { 6 | days: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο", "Κυριακή"], 7 | daysShort: ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ", "Κυρ"], 8 | daysMin: ["Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα", "Κυ"], 9 | months: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], 10 | monthsShort: ["Ιαν", "Φεβ", "Μαρ", "Απρ", "Μάι", "Ιουν", "Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ"], 11 | today: "Σήμερα" 12 | }; 13 | }(jQuery)); -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.es.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Spanish translation for bootstrap-datepicker 3 | * Bruno Bonamin 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['es'] = { 7 | days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"], 10 | months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], 11 | monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], 12 | today: "Hoy" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.et.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Estonian translation for bootstrap-datepicker 3 | * Ando Roots 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['et'] = { 7 | days: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev", "Pühapäev"], 8 | daysShort: ["Püh", "Esm", "Tei", "Kol", "Nel", "Ree", "Lau", "Sun"], 9 | daysMin: ["P", "E", "T", "K", "N", "R", "L", "P"], 10 | months: ["Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"], 11 | monthsShort: ["Jaan", "Veeb", "Märts", "Apr", "Mai", "Juuni", "Juuli", "Aug", "Sept", "Okt", "Nov", "Dets"], 12 | today: "Täna" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.fi.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Finnish translation for bootstrap-datepicker 3 | * Jaakko Salonen 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fi'] = { 7 | days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"], 8 | daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"], 9 | daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"], 10 | months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"], 11 | monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"], 12 | today: "tänään", 13 | weekStart: 1, 14 | format: "d.m.yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.fr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * French translation for bootstrap-datepicker 3 | * Nico Mollet 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['fr'] = { 7 | days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], 8 | daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], 9 | daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], 10 | months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], 11 | monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"], 12 | today: "Aujourd'hui", 13 | clear: "Effacer", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.gl.js: -------------------------------------------------------------------------------- 1 | ;(function($){ 2 | $.fn.datepicker.dates['gl'] = { 3 | days: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado", "Domingo"], 4 | daysShort: ["Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb", "Dom"], 5 | daysMin: ["Do", "Lu", "Ma", "Me", "Xo", "Ve", "Sa", "Do"], 6 | months: ["Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño", "Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro"], 7 | monthsShort: ["Xan", "Feb", "Mar", "Abr", "Mai", "Xun", "Xul", "Ago", "Sep", "Out", "Nov", "Dec"], 8 | today: "Hoxe", 9 | clear: "Limpar" 10 | }; 11 | }(jQuery)); 12 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.he.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hebrew translation for bootstrap-datepicker 3 | * Sagie Maoz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['he'] = { 7 | days: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"], 8 | daysShort: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 9 | daysMin: ["א", "ב", "ג", "ד", "ה", "ו", "ש", "א"], 10 | months: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], 11 | monthsShort: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], 12 | today: "היום", 13 | rtl: true 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.hr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Croatian localisation 3 | */ 4 | ;(function($){ 5 | $.fn.datepicker.dates['hr'] = { 6 | days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"], 7 | daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"], 8 | daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"], 9 | months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"], 10 | monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"], 11 | today: "Danas" 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.hu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Hungarian translation for bootstrap-datepicker 3 | * Sotus László 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['hu'] = { 7 | days: ["Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"], 8 | daysShort: ["Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo", "Vas"], 9 | daysMin: ["Va", "Hé", "Ke", "Sz", "Cs", "Pé", "Sz", "Va"], 10 | months: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sze", "Okt", "Nov", "Dec"], 12 | today: "Ma", 13 | weekStart: 1, 14 | format: "yyyy.mm.dd" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.id.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bahasa translation for bootstrap-datepicker 3 | * Azwar Akbar 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['id'] = { 7 | days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"], 8 | daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"], 9 | daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"], 10 | months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], 12 | today: "Hari Ini", 13 | clear: "Kosongkan" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.is.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Icelandic translation for bootstrap-datepicker 3 | * Hinrik Örn Sigurðsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['is'] = { 7 | days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"], 8 | daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"], 9 | daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"], 10 | months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"], 12 | today: "Í Dag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.it.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Italian translation for bootstrap-datepicker 3 | * Enrico Rubboli 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['it'] = { 7 | days: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"], 8 | daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"], 9 | daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"], 10 | months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], 11 | monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], 12 | today: "Oggi", 13 | weekStart: 1, 14 | format: "dd/mm/yyyy" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ja.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Japanese translation for bootstrap-datepicker 3 | * Norio Suzuki 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ja'] = { 7 | days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"], 8 | daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"], 9 | daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"], 10 | months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 11 | monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], 12 | today: "今日", 13 | format: "yyyy/mm/dd" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ka.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Georgian translation for bootstrap-datepicker 3 | * Levan Melikishvili 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ka'] = { 7 | days: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი", "კვირა"], 8 | daysShort: ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ", "კვი"], 9 | daysMin: ["კვ", "ორ", "სა", "ოთ", "ხუ", "პა", "შა", "კვ"], 10 | months: ["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომები", "ნოემბერი", "დეკემბერი"], 11 | monthsShort: ["იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ"], 12 | today: "დღეს", 13 | clear: "გასუფთავება" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.kr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Korean translation for bootstrap-datepicker 3 | * Gu Youn 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['kr'] = { 7 | days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], 8 | daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], 9 | daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], 10 | months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], 11 | monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] 12 | }; 13 | }(jQuery)); 14 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.lt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Lithuanian translation for bootstrap-datepicker 3 | * Šarūnas Gliebus 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lt'] = { 8 | days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"], 9 | daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"], 10 | daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"], 11 | months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"], 12 | monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"], 13 | today: "Šiandien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.lv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Latvian translation for bootstrap-datepicker 3 | * Artis Avotins 4 | */ 5 | 6 | ;(function($){ 7 | $.fn.datepicker.dates['lv'] = { 8 | days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"], 9 | daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"], 10 | daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"], 11 | months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."], 13 | today: "Šodien", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.mk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Macedonian translation for bootstrap-datepicker 3 | * Marko Aleksic 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['mk'] = { 7 | days: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота", "Недела"], 8 | daysShort: ["Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб", "Нед"], 9 | daysMin: ["Не", "По", "Вт", "Ср", "Че", "Пе", "Са", "Не"], 10 | months: ["Јануари", "Февруари", "Март", "Април", "Мај", "Јуни", "Јули", "Август", "Септември", "Октомври", "Ноември", "Декември"], 11 | monthsShort: ["Јан", "Фев", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Ное", "Дек"], 12 | today: "Денес" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ms.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Malay translation for bootstrap-datepicker 3 | * Ateman Faiz 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ms'] = { 7 | days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"], 8 | daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"], 9 | daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"], 10 | months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"], 12 | today: "Hari Ini" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.nb.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian (bokmål) translation for bootstrap-datepicker 3 | * Fredrik Sundmyhr 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nb'] = { 7 | days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"], 8 | daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"], 9 | daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"], 10 | months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], 12 | today: "I Dag" 13 | }; 14 | }(jQuery)); -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.nl-BE.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Belgium-Dutch translation for bootstrap-datepicker 3 | * Julien Poulin 4 | */ 5 | ; (function ($) { 6 | $.fn.datepicker.dates['nl-BE'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag", 13 | clear: "Leegmaken", 14 | weekStart: 1, 15 | format: "dd/mm/yyyy" 16 | }; 17 | }(jQuery)); -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.nl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dutch translation for bootstrap-datepicker 3 | * Reinier Goltstein 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['nl'] = { 7 | days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"], 8 | daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 9 | daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"], 10 | months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Vandaag" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.no.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Norwegian translation for bootstrap-datepicker 3 | **/ 4 | ;(function($){ 5 | $.fn.datepicker.dates['no'] = { 6 | days: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'], 7 | daysShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'], 8 | daysMin: ['Sø','Ma','Ti','On','To','Fr','Lø'], 9 | months: ['Januar','Februar','Mars','April','Mai','Juni','Juli','August','September','Oktober','November','Desember'], 10 | monthsShort: ['Jan','Feb','Mar','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Des'], 11 | today: 'I dag', 12 | clear: 'Nullstill', 13 | weekStart: 1, 14 | format: 'dd.mm.yyyy' 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.pl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Polish translation for bootstrap-datepicker 3 | * Robert 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pl'] = { 7 | days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], 8 | daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"], 9 | daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"], 10 | months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], 11 | monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"], 12 | today: "Dzisiaj", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt-BR.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Brazilian translation for bootstrap-datepicker 3 | * Cauan Cabral 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['pt-BR'] = { 7 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 8 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 9 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 10 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 11 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 12 | today: "Hoje", 13 | clear: "Limpar" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.pt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Portuguese translation for bootstrap-datepicker 3 | * Original code: Cauan Cabral 4 | * Tiago Melo 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['pt'] = { 8 | days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"], 9 | daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"], 10 | daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"], 11 | months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 12 | monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], 13 | today: "Hoje", 14 | clear: "Limpar" 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ro.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Romanian translation for bootstrap-datepicker 3 | * Cristian Vasile 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ro'] = { 7 | days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"], 8 | daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"], 9 | daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"], 10 | months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"], 11 | monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], 12 | today: "Astăzi", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs-latin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian latin translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs-latin'] = { 7 | days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"], 9 | daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"], 10 | months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danas" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.rs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Serbian cyrillic translation for bootstrap-datepicker 3 | * Bojan Milosavlević 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['rs'] = { 7 | days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"], 8 | daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"], 9 | daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"], 10 | months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"], 11 | monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"], 12 | today: "Данас" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ru.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Russian translation for bootstrap-datepicker 3 | * Victor Taranenko 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ru'] = { 7 | days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"], 8 | daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"], 9 | daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"], 10 | months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], 11 | monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], 12 | today: "Сегодня", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.sk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovak translation for bootstrap-datepicker 3 | * Marek Lichtner 4 | * Fixes by Michal Remiš 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates["sk"] = { 8 | days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"], 9 | daysShort: ["Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob", "Ned"], 10 | daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pia", "So", "Ne"], 11 | months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], 12 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], 13 | today: "Dnes" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.sl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Slovene translation for bootstrap-datepicker 3 | * Gregor Rudolf 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sl'] = { 7 | days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"], 8 | daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"], 9 | daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"], 10 | months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"], 12 | today: "Danes" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.sq.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Albanian translation for bootstrap-datepicker 3 | * Tomor Pupovci 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sq'] = { 7 | days: ["E Diel", "E Hënë", "E martē", "E mërkurë", "E Enjte", "E Premte", "E Shtunë", "E Diel"], 8 | daysShort: ["Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu", "Die"], 9 | daysMin: ["Di", "Hë", "Ma", "Më", "En", "Pr", "Sht", "Di"], 10 | months: ["Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"], 11 | monthsShort: ["Jan", "Shk", "Mar", "Pri", "Maj", "Qer", "Korr", "Gu", "Sht", "Tet", "Nën", "Dhjet"], 12 | today: "Sot" 13 | }; 14 | }(jQuery)); 15 | 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.sv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swedish translation for bootstrap-datepicker 3 | * Patrik Ragnarsson 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['sv'] = { 7 | days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"], 8 | daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"], 9 | daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"], 10 | months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], 11 | monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], 12 | today: "I Dag", 13 | format: "yyyy-mm-dd", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Swahili translation for bootstrap-datepicker 3 | * Edwin Mugendi 4 | * Source: http://scriptsource.org/cms/scripts/page.php?item_id=entry_detail&uid=xnfaqyzcku 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['sw'] = { 8 | days: ["Jumapili", "Jumatatu", "Jumanne", "Jumatano", "Alhamisi", "Ijumaa", "Jumamosi", "Jumapili"], 9 | daysShort: ["J2", "J3", "J4", "J5", "Alh", "Ij", "J1", "J2"], 10 | daysMin: ["2", "3", "4", "5", "A", "I", "1", "2"], 11 | months: ["Januari", "Februari", "Machi", "Aprili", "Mei", "Juni", "Julai", "Agosti", "Septemba", "Oktoba", "Novemba", "Desemba"], 12 | monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ago", "Sep", "Okt", "Nov", "Des"], 13 | today: "Leo" 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.th.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Thai translation for bootstrap-datepicker 3 | * Suchau Jiraprapot 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['th'] = { 7 | days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"], 8 | daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 9 | daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"], 10 | months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"], 11 | monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."], 12 | today: "วันนี้" 13 | }; 14 | }(jQuery)); 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.tr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Turkish translation for bootstrap-datepicker 3 | * Serkan Algur 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['tr'] = { 7 | days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"], 8 | daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"], 9 | daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"], 10 | months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], 11 | monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], 12 | today: "Bugün", 13 | format: "dd.mm.yyyy" 14 | }; 15 | }(jQuery)); 16 | 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.ua.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Ukrainian translation for bootstrap-datepicker 3 | * Igor Polynets 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['ua'] = { 7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четверг", "П'ятница", "Субота", "Неділя"], 8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], 9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], 10 | months: ["Cічень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], 11 | monthsShort: ["Січ", "Лют", "Бер", "Квт", "Трв", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Грд"], 12 | today: "Сьогодні", 13 | weekStart: 1 14 | }; 15 | }(jQuery)); 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.uk.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Ukrainian translation for bootstrap-datepicker 3 | * Andrey Vityuk 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['uk'] = { 7 | days: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота", "Неділя"], 8 | daysShort: ["Нед", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Нед"], 9 | daysMin: ["Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Нд"], 10 | months: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], 11 | monthsShort: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], 12 | today: "Сьогодні" 13 | }; 14 | }(jQuery)); -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Simplified Chinese translation for bootstrap-datepicker 3 | * Yuan Cheung 4 | */ 5 | ;(function($){ 6 | $.fn.datepicker.dates['zh-CN'] = { 7 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 8 | daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"], 9 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 10 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 11 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | today: "今日", 13 | format: "yyyy年mm月dd日", 14 | weekStart: 1 15 | }; 16 | }(jQuery)); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap-datepicker/js/locales/bootstrap-datepicker.zh-TW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Traditional Chinese translation for bootstrap-datepicker 3 | * Rung-Sheng Jang 4 | * FrankWu Fix more appropriate use of Traditional Chinese habit 5 | */ 6 | ;(function($){ 7 | $.fn.datepicker.dates['zh-TW'] = { 8 | days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"], 9 | daysShort: ["週日", "週一", "週二", "週三", "週四", "週五", "週六", "週日"], 10 | daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"], 11 | months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 12 | monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], 13 | today: "今天", 14 | format: "yyyy年mm月dd日", 15 | weekStart: 1 16 | }; 17 | }(jQuery)); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/.csslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "adjoining-classes": false, 3 | "box-sizing": false, 4 | "box-model": false, 5 | "compatible-vendor-prefixes": false, 6 | "floats": false, 7 | "font-sizes": false, 8 | "gradients": false, 9 | "important": false, 10 | "known-properties": false, 11 | "outline-none": false, 12 | "qualified-headings": false, 13 | "regex-selectors": false, 14 | "shorthand": false, 15 | "text-indent": false, 16 | "unique-headings": false, 17 | "universal-selector": false, 18 | "unqualified-attributes": false 19 | } 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | button& { 28 | padding: 0; 29 | cursor: pointer; 30 | background: transparent; 31 | border: 0; 32 | -webkit-appearance: none; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition-property(~"height, visibility"); 31 | .transition-duration(.35s); 32 | .transition-timing-function(ease); 33 | } 34 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover { 6 | background-color: darken(@color, 10%); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (will be removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a& { 9 | color: @color; 10 | 11 | .list-group-item-heading { 12 | color: inherit; 13 | } 14 | 15 | &:hover, 16 | &:focus { 17 | color: @color; 18 | background-color: darken(@background, 5%); 19 | } 20 | &.active, 21 | &.active:hover, 22 | &.active:focus { 23 | color: #fff; 24 | background-color: @color; 25 | border-color: @color; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | } 10 | &:first-child { 11 | > a, 12 | > span { 13 | .border-left-radius(@border-radius); 14 | } 15 | } 16 | &:last-child { 17 | > a, 18 | > span { 19 | .border-right-radius(@border-radius); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover { 6 | color: darken(@color, 10%); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object, 16 | video { 17 | position: absolute; 18 | top: 0; 19 | left: 0; 20 | bottom: 0; 21 | height: 100%; 22 | width: 100%; 23 | border: 0; 24 | } 25 | } 26 | 27 | // Modifier class for 16:9 aspect ratio 28 | .embed-responsive-16by9 { 29 | padding-bottom: 56.25%; 30 | } 31 | 32 | // Modifier class for 4:3 aspect ratio 33 | .embed-responsive-4by3 { 34 | padding-bottom: 75%; 35 | } 36 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(border .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/abilian/web/resources/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/about/dialogs/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/about/dialogs/logo_ckeditor.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/bootstrapVisibility/CHANGELOG.txt: -------------------------------------------------------------------------------- 1 | Version 1.0 (published 4/23/2015) 2 | - Created plugin -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/dialog/dialogDefinition.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/flash/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/flash/images/placeholder.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/forms/images/hiddenfield.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/forms/images/hiddenfield.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/icons.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/icons_hidpi.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/iframe/images/placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/iframe/images/placeholder.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/image/images/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/image/images/noimage.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/link/images/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/link/images/anchor.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/link/images/hidpi/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/link/images/hidpi/anchor.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/magicline/images/hidpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/magicline/images/hidpi/icon.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/magicline/images/icon-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/magicline/images/icon-rtl.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/magicline/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/magicline/images/icon.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/pagebreak/images/pagebreak.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/pagebreak/images/pagebreak.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/preview/preview.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_address.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_blockquote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_blockquote.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_div.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_div.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h1.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h2.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h3.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h4.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h5.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_h6.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_p.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_p.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_pre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/showblocks/images/block_pre.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/angel_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/angel_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/angel_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/angel_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/angry_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/angry_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/angry_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/angry_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/broken_heart.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/broken_heart.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/broken_heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/broken_heart.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/confused_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/confused_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/confused_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/confused_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/cry_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/cry_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/cry_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/cry_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/devil_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/devil_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/devil_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/devil_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/embaressed_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/embaressed_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/embarrassed_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/embarrassed_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/embarrassed_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/embarrassed_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/envelope.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/envelope.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/envelope.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/heart.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/heart.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/heart.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/kiss.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/kiss.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/kiss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/kiss.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/lightbulb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/lightbulb.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/lightbulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/lightbulb.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/omg_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/omg_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/omg_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/omg_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/regular_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/regular_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/regular_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/regular_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/sad_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/sad_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/sad_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/sad_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/shades_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/shades_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/shades_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/shades_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/teeth_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/teeth_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/teeth_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/teeth_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_down.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_down.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_down.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_up.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_up.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/thumbs_up.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/tongue_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/tongue_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/tongue_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/tongue_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/tounge_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/tounge_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/wink_smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/wink_smile.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/smiley/images/wink_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/smiley/images/wink_smile.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 118 Missing: 0 5 | cy.js Found: 118 Missing: 0 6 | de.js Found: 118 Missing: 0 7 | el.js Found: 16 Missing: 102 8 | eo.js Found: 118 Missing: 0 9 | et.js Found: 31 Missing: 87 10 | fa.js Found: 24 Missing: 94 11 | fi.js Found: 23 Missing: 95 12 | fr.js Found: 118 Missing: 0 13 | hr.js Found: 23 Missing: 95 14 | it.js Found: 118 Missing: 0 15 | nb.js Found: 118 Missing: 0 16 | nl.js Found: 118 Missing: 0 17 | no.js Found: 118 Missing: 0 18 | tr.js Found: 118 Missing: 0 19 | ug.js Found: 39 Missing: 79 20 | zh-cn.js Found: 118 Missing: 0 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template1.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template2.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/plugins/templates/templates/images/template3.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/img/github-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/img/github-top.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/img/header-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/img/header-bg.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/img/header-separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/img/header-separator.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/img/logo.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/img/navigation-tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/img/navigation-tip.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/old/assets/inlineall/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/old/assets/inlineall/logo.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/old/assets/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/old/assets/sample.jpg -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.fla -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/old/htmlwriter/assets/outputforflash/outputforflash.swf -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/old/sample_posteddata.php: -------------------------------------------------------------------------------- 1 |
 2 | 
 3 | -------------------------------------------------------------------------------------------
 4 |   CKEditor - Posted Data
 5 | 
 6 |   We are sorry, but your Web server does not support the PHP language used in this script.
 7 | 
 8 |   Please note that CKEditor can be used with any other server-side language than just PHP.
 9 |   To save the content created with CKEditor you need to read the POST data on the server
10 |   side and write it to a file or the database.
11 | 
12 |   Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
13 |   For licensing, see LICENSE.md or http://ckeditor.com/license
14 | -------------------------------------------------------------------------------------------
15 | 
16 | 
*/ include "assets/posteddata.php"; ?> 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font license info 2 | 3 | 4 | ## Font Awesome 5 | 6 | Copyright (C) 2012 by Dave Gandy 7 | 8 | Author: Dave Gandy 9 | License: SIL () 10 | Homepage: http://fortawesome.github.com/Font-Awesome/ 11 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "css_prefix_text": "icon-", 4 | "css_use_suffix": false, 5 | "hinting": true, 6 | "units_per_em": 1000, 7 | "ascent": 850, 8 | "glyphs": [ 9 | { 10 | "uid": "f48ae54adfb27d8ada53d0fd9e34ee10", 11 | "css": "trash-empty", 12 | "code": 59392, 13 | "src": "fontawesome" 14 | }, 15 | { 16 | "uid": "1c4068ed75209e21af36017df8871802", 17 | "css": "down-big", 18 | "code": 59393, 19 | "src": "fontawesome" 20 | }, 21 | { 22 | "uid": "95376bf082bfec6ce06ea1cda7bd7ead", 23 | "css": "up-big", 24 | "code": 59394, 25 | "src": "fontawesome" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.eot -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.ttf -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/font/fontello.woff -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/samples/toolbarconfigurator/lib/codemirror/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | li.CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/icons.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/icons_hidpi.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/arrow.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/close.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/close.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/lock-open.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/lock.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/hidpi/refresh.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/lock-open.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/lock.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/refresh.png -------------------------------------------------------------------------------- /src/abilian/web/resources/ckeditor/skins/moono/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/ckeditor/skins/moono/images/spinner.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/Sorting icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/Sorting icons.psd -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/back_disabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/back_enabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/back_enabled_hover.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/favicon.ico -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/forward_disabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/forward_enabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/forward_enabled_hover.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/sort_asc.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/sort_both.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/sort_desc.png -------------------------------------------------------------------------------- /src/abilian/web/resources/datatables/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/datatables/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /src/abilian/web/resources/fileapi/FileAPI.flash.camera.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/fileapi/FileAPI.flash.camera.swf -------------------------------------------------------------------------------- /src/abilian/web/resources/fileapi/FileAPI.flash.image.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/fileapi/FileAPI.flash.image.swf -------------------------------------------------------------------------------- /src/abilian/web/resources/fileapi/FileAPI.flash.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/fileapi/FileAPI.flash.swf -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/img/abilian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/img/abilian.png -------------------------------------------------------------------------------- /src/abilian/web/resources/img/avatar-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/img/avatar-default.png -------------------------------------------------------------------------------- /src/abilian/web/resources/img/logo-abilian-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/img/logo-abilian-32x32.png -------------------------------------------------------------------------------- /src/abilian/web/resources/img/logo-abilian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/img/logo-abilian.png -------------------------------------------------------------------------------- /src/abilian/web/resources/js/widgets/tags.js: -------------------------------------------------------------------------------- 1 | require(["AbilianWidget", "jquery"], (Abilian, $) => { 2 | "use strict"; 3 | 4 | function initTagsSelect(params) { 5 | const opts = { 6 | multiple: true, 7 | separator: ";", 8 | }; 9 | $.extend(opts, params); 10 | 11 | // as of Select2 3.5, we cannot use a ') 16 | .attr({ name: this.attr("name") }) 17 | .val(values); 18 | 19 | opts.tags = choices; 20 | input.insertBefore(this); 21 | this.remove(); 22 | return Abilian.getWidgetCreator("select2").call(input, opts); 23 | } 24 | 25 | Abilian.registerWidgetCreator("tags-select", initTagsSelect); 26 | }); 27 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/admin.less: -------------------------------------------------------------------------------- 1 | // Admin 2 | 3 | #dashboard .stats { 4 | text-align: center; 5 | padding: 25px 0 10px; 6 | margin: 0 0 10px; 7 | 8 | li { 9 | display: inline-block; 10 | text-align: center; 11 | width: 22%; 12 | 13 | strong { 14 | display: block; 15 | font-size: 60px; 16 | margin-bottom: 20px; 17 | color: #555; 18 | 19 | &.new_members { 20 | color: #ff7f66; 21 | } 22 | 23 | &.logins { 24 | color: #2185c5; 25 | } 26 | 27 | &.new_documents { 28 | color: #2efd58; 29 | } 30 | 31 | &.new_messages { 32 | color: #ffe054; 33 | } 34 | } 35 | 36 | span { 37 | display: block; 38 | font-size: 14px; 39 | color: #888; 40 | line-height: 2em; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/attachments.less: -------------------------------------------------------------------------------- 1 | ul.attachments { 2 | .list-unstyled(); 3 | 4 | li { 5 | position: relative; 6 | padding: 0.5em; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/comments.less: -------------------------------------------------------------------------------- 1 | ol.comments { 2 | .list-unstyled(); 3 | 4 | li { 5 | position: relative; 6 | // avatar size: 45px, + 2*5px for spacing 7 | padding: 0.5em 0.5em 0.5em 55px; 8 | margin-bottom: 0.5em; 9 | background-color: @gray-lighter; 10 | border-radius: @border-radius-base; 11 | 12 | .header { 13 | margin-bottom: 0.25em; 14 | min-height: 50px; 15 | 16 | .avatar { 17 | position: absolute; 18 | top: 5px; 19 | left: 5px; 20 | } 21 | 22 | .author { 23 | font-weight: bold; 24 | } 25 | 26 | .date { 27 | float: right; 28 | } 29 | } 30 | 31 | .comment-body { 32 | word-wrap: break-word; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/compat.less: -------------------------------------------------------------------------------- 1 | /* backward compat mixins for 3rd party resources */ 2 | 3 | /* this mixin has been removed in bootstrap 3 */ 4 | .border-radius(@radius) { 5 | border-radius: @radius; 6 | } 7 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/layout.less: -------------------------------------------------------------------------------- 1 | body { 2 | padding-bottom: 40px; 3 | padding-top: @navbar-height; 4 | } 5 | 6 | #content { 7 | margin-top: (@grid-gutter-width / 2); 8 | padding: (@grid-gutter-width / 2); 9 | } 10 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/models.less: -------------------------------------------------------------------------------- 1 | // CSS classes specific to models (view, edit, etc...) 2 | 3 | .model-view { 4 | h1 { 5 | margin-top: 10px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/print.less: -------------------------------------------------------------------------------- 1 | @media print { 2 | // things we don't want to see printed 3 | .navbar, 4 | .nav, 5 | .btn { 6 | display: none; 7 | } 8 | 9 | // things we want to see 10 | // collapable: alway expand 11 | .collapse { 12 | height: auto !important; 13 | } 14 | 15 | // except log entries 16 | #audit_log_entries { 17 | height: 0 !important; 18 | } 19 | 20 | // margins 21 | @page { 22 | margin: 1.2cm 1cm; 23 | } 24 | 25 | body { 26 | padding: 0; 27 | } 28 | 29 | #wrapper { 30 | width: auto !important; 31 | margin: 0; 32 | padding: 0; 33 | } 34 | 35 | // page breaks 36 | h1, 37 | h2, 38 | h3 { 39 | page-break-after: avoid; 40 | } 41 | 42 | // flask debug toolbar: hide it! 43 | #flDebugToolbarHandle, 44 | #flDebugToolbar { 45 | display: none; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/search.less: -------------------------------------------------------------------------------- 1 | /* styles for search components */ 2 | 3 | .ab-search-input { 4 | margin-bottom: 2em; 5 | } 6 | 7 | .ab-search-result { 8 | padding-bottom: 1em; 9 | 10 | .title { 11 | font-size: 1.25em; 12 | font-weight: bold; 13 | } 14 | 15 | .tags { 16 | margin-top: 0.5em; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/user.less: -------------------------------------------------------------------------------- 1 | /* User related elements */ 2 | 3 | .avatar { 4 | border-radius: 50% !important; 5 | } 6 | -------------------------------------------------------------------------------- /src/abilian/web/resources/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | 3 | @body-bg: #fcfcfc; 4 | 5 | // avatars 6 | @avatar-size: 45px; 7 | @avatar-size-small: 20px; 8 | 9 | // Override default 10 | @icon-font-path: "/static/abilian/bootstrap/fonts/"; 11 | -------------------------------------------------------------------------------- /src/abilian/web/resources/nvd3/cdn.txt: -------------------------------------------------------------------------------- 1 | https://cdn.rawgit.com/novus/nvd3/v1.8.1/build/nv.d3.js 2 | https://cdn.rawgit.com/novus/nvd3/v1.8.1/build/nv.d3.css -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "select2", 3 | "version": "3.5.2", 4 | "main": ["select2.js", "select2.css", "select2.png", "select2x2.png", "select2-spinner.gif"], 5 | "dependencies": { 6 | "jquery": ">= 1.7.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": 3 | "ivaynberg/select2", 4 | "description": "Select2 is a jQuery based replacement for select boxes.", 5 | "version": "3.5.2", 6 | "type": "component", 7 | "homepage": "http://ivaynberg.github.io/select2/", 8 | "license": "Apache-2.0", 9 | "require": { 10 | "robloach/component-installer": "*", 11 | "components/jquery": ">=1.7.1" 12 | }, 13 | "extra": { 14 | "component": { 15 | "scripts": [ 16 | "select2.js" 17 | ], 18 | "files": [ 19 | "select2.js", 20 | "select2_locale_*.js", 21 | "select2.css", 22 | "select2-bootstrap.css", 23 | "select2-spinner.gif", 24 | "select2.png", 25 | "select2x2.png" 26 | ] 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Select2", 3 | "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.", 4 | "homepage": "http://ivaynberg.github.io/select2", 5 | "author": "Igor Vaynberg", 6 | "repository": {"type": "git", "url": "git://github.com/ivaynberg/select2.git"}, 7 | "main": "select2.js", 8 | "version": "3.5.2", 9 | "jspm": { 10 | "main": "select2", 11 | "files": ["select2.js", "select2.png", "select2.css", "select2-spinner.gif"], 12 | "shim": { 13 | "select2": { 14 | "imports": ["jquery", "./select2.css!"], 15 | "exports": "$" 16 | } 17 | }, 18 | "buildConfig": { "uglify": true } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/select2/select2-spinner.gif -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/select2/select2.png -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_da.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Danish translation. 3 | * 4 | * Author: Anders Jenbo 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['da'] = { 10 | formatNoMatches: function () { return "Ingen resultater fundet"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; }, 13 | formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); }, 14 | formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; }, 15 | formatSearching: function () { return "Søger…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['da']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_he.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Hebrew translation. 3 | * 4 | * Author: Yakir Sitbon 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['he'] = { 10 | formatNoMatches: function () { return "לא נמצאו התאמות"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; }, 13 | formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; }, 14 | formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; }, 15 | formatSearching: function () { return "מחפש…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['he']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_hu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Hungarian translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | 7 | $.fn.select2.locales['hu'] = { 8 | formatNoMatches: function () { return "Nincs találat."; }, 9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; }, 10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; }, 11 | formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; }, 12 | formatLoadMore: function (pageNumber) { return "Töltés…"; }, 13 | formatSearching: function () { return "Keresés…"; } 14 | }; 15 | 16 | $.extend($.fn.select2.defaults, $.fn.select2.locales['hu']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_is.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Icelandic translation. 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | 7 | $.fn.select2.locales['is'] = { 8 | formatNoMatches: function () { return "Ekkert fannst"; }, 9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; }, 10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); }, 11 | formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; }, 12 | formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; }, 13 | formatSearching: function () { return "Leita…"; } 14 | }; 15 | 16 | $.extend($.fn.select2.defaults, $.fn.select2.locales['is']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_it.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Italian translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | 7 | $.fn.select2.locales['it'] = { 8 | formatNoMatches: function () { return "Nessuna corrispondenza trovata"; }, 9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); }, 10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; }, 11 | formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); }, 12 | formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; }, 13 | formatSearching: function () { return "Ricerca…"; } 14 | }; 15 | 16 | $.extend($.fn.select2.defaults, $.fn.select2.locales['it']); 17 | })(jQuery); -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_ja.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Japanese translation. 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | 7 | $.fn.select2.locales['ja'] = { 8 | formatNoMatches: function () { return "該当なし"; }, 9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; }, 10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; }, 11 | formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; }, 12 | formatLoadMore: function (pageNumber) { return "読込中・・・"; }, 13 | formatSearching: function () { return "検索中・・・"; } 14 | }; 15 | 16 | $.extend($.fn.select2.defaults, $.fn.select2.locales['ja']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_ka.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Georgian (Kartuli) translation. 3 | * 4 | * Author: Dimitri Kurashvili dimakura@gmail.com 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['ka'] = { 10 | formatNoMatches: function () { return "ვერ მოიძებნა"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; }, 13 | formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; }, 14 | formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; }, 15 | formatSearching: function () { return "ძებნა…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['ka']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_ko.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Korean translation. 3 | * 4 | * @author Swen Mun 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['ko'] = { 10 | formatNoMatches: function () { return "결과 없음"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; }, 13 | formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; }, 14 | formatLoadMore: function (pageNumber) { return "불러오는 중…"; }, 15 | formatSearching: function () { return "검색 중…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['ko']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_ms.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Malay translation. 3 | * 4 | * Author: Kepoweran 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['ms'] = { 10 | formatNoMatches: function () { return "Tiada padanan yang ditemui"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; }, 13 | formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; }, 14 | formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; }, 15 | formatSearching: function () { return "Mencari…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['ms']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_nl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Dutch translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | 7 | $.fn.select2.locales['nl'] = { 8 | formatNoMatches: function () { return "Geen resultaten gevonden"; }, 9 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; }, 10 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; }, 11 | formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; }, 12 | formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; }, 13 | formatSearching: function () { return "Zoeken…"; } 14 | }; 15 | 16 | $.extend($.fn.select2.defaults, $.fn.select2.locales['nl']); 17 | })(jQuery); 18 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_sv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Swedish translation. 3 | * 4 | * Author: Jens Rantil 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['sv'] = { 10 | formatNoMatches: function () { return "Inga träffar"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; }, 13 | formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; }, 14 | formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; }, 15 | formatSearching: function () { return "Söker…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['sv']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_th.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Thai translation. 3 | * 4 | * Author: Atsawin Chaowanakritsanakul 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['th'] = { 10 | formatNoMatches: function () { return "ไม่พบข้อมูล"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; }, 13 | formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; }, 14 | formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; }, 15 | formatSearching: function () { return "กำลังค้นข้อมูล…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['th']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_tr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Turkish translation. 3 | * 4 | * Author: Salim KAYABAŞI 5 | */ 6 | (function ($) { 7 | "use strict"; 8 | 9 | $.fn.select2.locales['tr'] = { 10 | formatNoMatches: function () { return "Sonuç bulunamadı"; }, 11 | formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; }, 12 | formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; }, 13 | formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; }, 14 | formatLoadMore: function (pageNumber) { return "Daha fazla…"; }, 15 | formatSearching: function () { return "Aranıyor…"; } 16 | }; 17 | 18 | $.extend($.fn.select2.defaults, $.fn.select2.locales['tr']); 19 | })(jQuery); 20 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_ug-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Uyghur translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | $.fn.select2.locales['ug-CN'] = { 7 | formatNoMatches: function () { return "ماس كېلىدىغان ئۇچۇر تېپىلمىدى"; }, 8 | formatInputTooShort: function (input, min) { var n = min - input.length; return "يەنە " + n + " ھەرپ كىرگۈزۈڭ";}, 9 | formatInputTooLong: function (input, max) { var n = input.length - max; return "" + n + "ھەرپ ئۆچۈرۈڭ";}, 10 | formatSelectionTooBig: function (limit) { return "ئەڭ كۆپ بولغاندا" + limit + " تال ئۇچۇر تاللىيالايسىز"; }, 11 | formatLoadMore: function (pageNumber) { return "ئۇچۇرلار ئوقۇلىۋاتىدۇ…"; }, 12 | formatSearching: function () { return "ئىزدەۋاتىدۇ…"; } 13 | }; 14 | 15 | $.extend($.fn.select2.defaults, $.fn.select2.locales['ug-CN']); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_zh-CN.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Chinese translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | $.fn.select2.locales['zh-CN'] = { 7 | formatNoMatches: function () { return "没有找到匹配项"; }, 8 | formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";}, 9 | formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";}, 10 | formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; }, 11 | formatLoadMore: function (pageNumber) { return "加载结果中…"; }, 12 | formatSearching: function () { return "搜索中…"; } 13 | }; 14 | 15 | $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-CN']); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2_locale_zh-TW.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Select2 Traditional Chinese translation 3 | */ 4 | (function ($) { 5 | "use strict"; 6 | $.fn.select2.locales['zh-TW'] = { 7 | formatNoMatches: function () { return "沒有找到相符的項目"; }, 8 | formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";}, 9 | formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";}, 10 | formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; }, 11 | formatLoadMore: function (pageNumber) { return "載入中…"; }, 12 | formatSearching: function () { return "搜尋中…"; } 13 | }; 14 | 15 | $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-TW']); 16 | })(jQuery); 17 | -------------------------------------------------------------------------------- /src/abilian/web/resources/select2/select2x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/resources/select2/select2x2.png -------------------------------------------------------------------------------- /src/abilian/web/resources/typeahead/typeahead.js-bootstrap.less: -------------------------------------------------------------------------------- 1 | .tt-dropdown-menu { 2 | min-width: 160px; 3 | margin-top: 2px; 4 | padding: 5px 0; 5 | background-color: @dropdown-bg; 6 | border: 1px solid #ccc; 7 | border: 1px solid @dropdown-border; 8 | *border-right-width: 2px; 9 | *border-bottom-width: 2px; 10 | .border-radius(6px); 11 | .box-shadow(0 5px 10px rgba(0,0,0,.2)); 12 | -webkit-background-clip: padding-box; 13 | -moz-background-clip: padding; 14 | background-clip: padding-box; 15 | } 16 | 17 | .tt-suggestion { 18 | display: block; 19 | padding: 3px 20px; 20 | } 21 | 22 | .tt-suggestion.tt-is-under-cursor { 23 | color: @dropdown-link-hover-color; 24 | #gradient > .vertical(@dropdown-link-hover-bg, darken(@dropdown-link-hover-bg, 5%)); 25 | } 26 | 27 | .tt-suggestion.tt-is-under-cursor a { 28 | color: @dropdown-bg; 29 | } 30 | 31 | .tt-suggestion p { 32 | margin: 0; 33 | } 34 | -------------------------------------------------------------------------------- /src/abilian/web/search/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from abilian.app import Application 6 | from abilian.core.signals import register_js_api 7 | from abilian.web import url_for 8 | 9 | from .criterion import BaseCriterion, TextSearchCriterion 10 | 11 | __all__ = ["BaseCriterion", "TextSearchCriterion"] 12 | 13 | 14 | def _do_register_js_api(sender: Application): 15 | app = sender 16 | js_api = app.js_api.setdefault("search", {}) 17 | # hack to avoid url_for escape '%' 18 | js_api["live"] = f"{url_for('search.live', q='')}%QUERY" 19 | 20 | 21 | def register_plugin(app: Application): 22 | from .views import search 23 | 24 | app.register_blueprint(search) 25 | register_js_api.connect(_do_register_js_api) 26 | -------------------------------------------------------------------------------- /src/abilian/web/search/templates/search/_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block main %} 4 |
5 |
6 | {%- block content %} 7 | {%- endblock %} 8 |
9 |
10 | {%- block sidebar %} 11 | {%- endblock %} 12 |
13 |
14 | {%- block modals %}{% endblock %} 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /src/abilian/web/setupwizard/templates/setupwizard/_wizard.html: -------------------------------------------------------------------------------- 1 | {% extends "setupwizard/_base.html" %} 2 | 3 | {% block content %} 4 |
5 | {%- block formfields %} 6 | {%- endblock %} 7 | 8 | {%- endblock %} 9 | -------------------------------------------------------------------------------- /src/abilian/web/setupwizard/templates/setupwizard/done.html: -------------------------------------------------------------------------------- 1 | {% extends "setupwizard/_base.html" %} 2 | 3 | {% from "macros/box.html" import m_box %} 4 | {% set cmd = app.name %} 5 | 6 | {% block content %} 7 |

Success!

8 | 9 |

Configuration file sucessfully written.

10 | 11 | {%- call m_box(title="Location") %} 12 |
13 |
{{ config_file }}
14 |
{{ logging_file }}
15 |
16 | {%- endcall %} 17 | 18 |

19 | Now you have to restart the application in order to be able to login with 20 | the admin account. 21 |

22 | {% endblock %} 23 | -------------------------------------------------------------------------------- /src/abilian/web/setupwizard/templates/setupwizard/finalize.html: -------------------------------------------------------------------------------- 1 | {% extends "setupwizard/_base.html" %} 2 | 3 | {% from "macros/box.html" import m_box %} 4 | 5 | {% block content_title %}Ready to finalize{%- endblock %} 6 | 7 | {% block pre_form %} 8 | 9 | Click on "Next" will: 10 | 11 |
    12 |
  1. Create the configuration file: 13 | {%- call m_box(title="Location") %} 14 | {{ file_location }} 15 | {%- endcall %} 16 |
  2. 17 |
  3. Create the database structure
  4. 18 |
  5. Create the admin user account 19 | {{ session['abilian_setup']['admin_account']['email'] }} 20 |
  6. 21 |
22 | 23 |

Click "Next" button to proceed

24 | 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /src/abilian/web/tags/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from flask import Flask 6 | 7 | from .criterion import TagCriterion 8 | from .extension import TagsExtension 9 | 10 | __all__ = ["TagsExtension", "TagCriterion"] 11 | 12 | 13 | def register_plugin(app: Flask): 14 | TagsExtension(app) 15 | -------------------------------------------------------------------------------- /src/abilian/web/tags/templates/admin/tags.html: -------------------------------------------------------------------------------- 1 | {%- extends "admin/_base.html" %} 2 | 3 | {% block content %} 4 |

5 | {% trans %} 6 | Tags are grouped by namespaces, so that different set of tags can be 7 | defined for different type of objects, or for a different purpose. 8 | {% endtrans %} 9 |

10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {%- for info in namespaces %} 21 | 22 | 23 | 24 | 25 | 26 | {%- endfor %} 27 | 28 |
{{ _('Namespace') }}{{ _('# Tags') }}{{ _('# Tagged objects') }}
{{ info.ns }}{{ info.tag_count or 0 }}{{ info.obj_count or 0 }}
29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /src/abilian/web/templates/base.html: -------------------------------------------------------------------------------- 1 | {%- extends "abilian_base.html" %} 2 | -------------------------------------------------------------------------------- /src/abilian/web/templates/breadcrumbs.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/abilian/web/templates/default/avatar.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | {{ letter }} 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/abilian/web/templates/default/object_edit.html: -------------------------------------------------------------------------------- 1 | {% extends base_template %} 2 | 3 | {% from "macros/box.html" import m_box_content with context %} 4 | {% from "macros/form.html" import m_form %} 5 | 6 | {% block content %} 7 | {%- block before_form %} 8 | {%- endblock %} 9 | 10 | {%- call m_box_content(view.title) %} 11 | {{ m_form(form, action=request.path, id="edit-form", horizontal=True) }} 12 | {%- endcall %} 13 | 14 | {%- block after_form %} 15 | {%- endblock %} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /src/abilian/web/templates/default/object_view.html: -------------------------------------------------------------------------------- 1 | {% extends base_template %} 2 | {% from "macros/box.html" import m_box_content with context %} 3 | 4 | {% block content %} 5 | {%- block before_form %} 6 | {%- endblock %} 7 | 8 | {%- call m_box_content(view.title) %} 9 | 10 | 11 | {%- for field in form %} 12 | {%- if field.data or field.flags.render_empty %} 13 | 14 | 15 | 16 | 17 | {%- endif %} 18 | {%- endfor %} 19 | 20 |
{{ field.label }}{{ field.render_view() | safe }}
21 | {%- endcall %} 22 | 23 | {%- block after_form %} 24 | {%- endblock %} 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /src/abilian/web/templates/error403.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block main %} 4 |

Forbidden

5 | 6 | {{ error.description|default("You don't have the permission to access the requested 7 | resource. It is either read-protected or not readable by the server.") }} 8 | 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /src/abilian/web/templates/error404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block main %} 4 |

Not Found

5 | 6 |

7 | {%- trans -%} 8 | Page or entity not found. The object you are trying to view may have been deleted. 9 | {%- endtrans -%} 10 |

11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /src/abilian/web/templates/error500.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block main %} 4 |

Internal Server Error.

5 | 6 |

The server encountered an error and was unable to complete your 7 | request. Either the server is overloaded or there is an error in the 8 | application. 9 |

10 | 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /src/abilian/web/templates/flash-messages.html: -------------------------------------------------------------------------------- 1 | {%- with messages = get_flashed_messages(with_categories=true), 2 | cat_map = {'error': 'danger', 'message': 'info'} %} 3 | {%- if messages %} 4 | {%- for cat, message in messages %} 5 |
6 | 7 | {{ message }} 8 |
9 | {%- endfor %} 10 | {%- endif %} 11 | {%- endwith %} 12 | -------------------------------------------------------------------------------- /src/abilian/web/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block main %} 4 |

Welcome to Abilian!

5 | 6 |

This is a default, empty page.

7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /src/abilian/web/templates/macros/attachment.html: -------------------------------------------------------------------------------- 1 | {% from "macros/user.html" import m_user_photo, m_user_link %} 2 | {% from "macros/form.html" import m_field %} 3 | 4 | {% macro m_attachments(entity) %} 5 | {%- set display_attachments = attachments.manager(entity).macros['m_attachments'] %} 6 | {{ display_attachments(entity) }} 7 | {% endmacro %} 8 | 9 | {# single attachment #} 10 | {% macro m_attachment(attachment) %} 11 | {%- set display_attachment = attachments.manager(entity).macros['m_attachment'] %} 12 | {{ display_attachment(attachment) }} 13 | {% endmacro %} 14 | 15 | {# new attachment form #} 16 | {% macro m_attachment_form(entity) %} 17 | {%- set display_attachment_form = attachments.manager(entity).macros['m_attachment_form'] %} 18 | {{ display_attachment_form(entity) }} 19 | {% endmacro %} 20 | -------------------------------------------------------------------------------- /src/abilian/web/templates/macros/buttons.html: -------------------------------------------------------------------------------- 1 | {# 2 | Macro for creating standardized buttons 3 | #} 4 | 5 | {%- macro a_button(btn_cls, url, label) %} 6 |  {{ label }} 7 | {%- endmacro %} 8 | 9 | {%- macro create_a(url, label) %} 10 | {{ a_button('primary', url, label) }} 11 | {%- endmacro %} 12 | -------------------------------------------------------------------------------- /src/abilian/web/templates/macros/recent.html: -------------------------------------------------------------------------------- 1 | {% macro m_recent_items(recent_items) %} 2 | {%- if recent_items %} 3 |
4 | 15 |
16 | {%- endif %} 17 | {% endmacro %} 18 | -------------------------------------------------------------------------------- /src/abilian/web/templates/macros/table.html: -------------------------------------------------------------------------------- 1 | 2 | {% macro m_table(lines, responsive=True) %} 3 | {%- if responsive %} 4 |
5 | {%- endif %} 6 | 7 | 8 | {%- for name, value in lines %} 9 | 10 | 11 | 12 | 13 | {%- endfor %} 14 | 15 |
{{ name }}{{ value }}
16 | {%- if responsive %} 17 |
18 | {%- endif %} 19 | {%- endmacro %} 20 | -------------------------------------------------------------------------------- /src/abilian/web/templates/macros/user.html: -------------------------------------------------------------------------------- 1 | {% macro m_user_avatar(user, size=20) %} 2 | {%- call m_user_link(user) %} 3 | {{ m_user_photo(user, size=size) }} 4 | {{ user.name }} 5 | {%- endcall %} 6 | {% endmacro %} 7 | 8 | {% macro m_user_photo(user, size=20) %} 9 | {{ user.name }} 10 | {% endmacro %} 11 | 12 | {% macro m_user_link(user, css="") %} 13 | {%- set content = caller() if caller|default(None) else user.name %} 14 | {{ content }} 15 | {% endmacro %} 16 | -------------------------------------------------------------------------------- /src/abilian/web/templates/preferences/_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% from "macros/box.html" import m_box %} 4 | 5 | {% block main %} 6 |
7 |
8 |
{{ _("Preferences") }}
9 | 10 |
11 | {%- for entry in menu %} 12 | 14 | {{ entry.label }} 15 | 16 | {%- endfor %} 17 |
18 |
19 |
20 | 21 |
22 | {% block content %} 23 | {% endblock %} 24 |
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/fieldlist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {%- for entry in field.entries %} 8 | 9 | 13 | 14 | {%- endfor %} 15 | 16 |
10 | {%- set attrs={'class': 'form-control'} %} 11 | {{ entry(**attrs) }} 12 |
17 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/fieldlist_view.html: -------------------------------------------------------------------------------- 1 | {%- for entry in field.entries %} 2 |
{{ entry.data }}
3 | {%- endfor %} 4 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/frontend_action_delete_confim.html: -------------------------------------------------------------------------------- 1 | {#- used by abilian.web.frontend.DELETE_ACTION #} 2 | 10 | {%- if action.icon %}{{ action.icon }} {% endif %} 11 | {{ action.title }} 12 | 13 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/horizontal_table.html: -------------------------------------------------------------------------------- 1 | {%- if rows %} 2 | 3 | {%- if labels %} 4 | 5 | 6 | {%- for label in labels %} 7 | 8 | {%- endfor %} 9 | 10 | 11 | {%- endif %} 12 | 13 | 14 | {%- for row in rows %} 15 | 16 | {%- for value in row %} 17 | 18 | {%- endfor %} 19 | 20 | {%- endfor %} 21 | 22 |
{{ label }}
{{ value }}
23 | {%- endif %} 24 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/model_fieldlist.html: -------------------------------------------------------------------------------- 1 | {%- from "macros/form.html" import m_field %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {%- for fieldform in field %} 11 | 12 | 18 | 19 | {%- endfor %} 20 | 21 |
13 | {%- for subfield in fieldform %} 14 | {%- set attrs={'data-short-name': subfield.short_name} %} 15 | {{ m_field(subfield, **attrs) }} 16 | {%- endfor %} 17 |
22 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/model_widget_edit.html: -------------------------------------------------------------------------------- 1 | {%- from "macros/form.html" import m_field with context %} 2 | {%- for field in form %} {# form could also be a formfield instance #} 3 |
4 | {{ m_field(field, label_width=3, field_width=9) }} 5 |
6 | {%- endfor %} 7 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/model_widget_view.html: -------------------------------------------------------------------------------- 1 | {%- for label, value in rows %} {# form could also be a formfield instance #} 2 |
3 |
{{ label.text }}
4 |
{{ value }}
5 |
6 | {%- endfor %} 7 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/richtext.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/select2ajax.html: -------------------------------------------------------------------------------- 1 | 2 | {%- if data_node_id %} 3 | 6 | {%- endif %} 7 | -------------------------------------------------------------------------------- /src/abilian/web/templates/widgets/timepicker.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /src/abilian/web/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/tests/__init__.py -------------------------------------------------------------------------------- /src/abilian/web/tests/test_login.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from flask import Flask, jsonify, session 4 | from flask_login import current_user 5 | 6 | 7 | def test_test(app: Flask, client, login_user): 8 | @app.route("/dump-session") 9 | def dump_session(): 10 | user = current_user 11 | return jsonify( 12 | session=dict(session), first_name=user.first_name, last_name=user.last_name 13 | ) 14 | 15 | response = client.get("/dump-session") 16 | assert response.status_code == 200 17 | 18 | json = response.json 19 | assert json["first_name"] == login_user.first_name 20 | assert json["last_name"] == login_user.last_name 21 | -------------------------------------------------------------------------------- /src/abilian/web/tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/src/abilian/web/tools/__init__.py -------------------------------------------------------------------------------- /src/abilian/web/uploads/__init__.py: -------------------------------------------------------------------------------- 1 | """""" 2 | 3 | from __future__ import annotations 4 | 5 | from abilian.app import Application 6 | 7 | from .extension import FileUploadsExtension 8 | 9 | 10 | def register_plugin(app: Application): 11 | FileUploadsExtension(app) 12 | -------------------------------------------------------------------------------- /src/abilian/web/views/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from .base import JSONView, View 4 | from .object import ( 5 | BaseObjectView, 6 | JSONBaseSearch, 7 | JSONModelSearch, 8 | JSONWhooshSearch, 9 | ObjectCreate, 10 | ObjectDelete, 11 | ObjectEdit, 12 | ObjectView, 13 | ) 14 | from .registry import Registry, default_view 15 | 16 | __all__ = ( 17 | "View", 18 | "JSONView", 19 | "Registry", 20 | "default_view", 21 | "BaseObjectView", 22 | "ObjectView", 23 | "ObjectEdit", 24 | "ObjectCreate", 25 | "ObjectDelete", 26 | "JSONBaseSearch", 27 | "JSONModelSearch", 28 | "JSONWhooshSearch", 29 | ) 30 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/tests/__init__.py -------------------------------------------------------------------------------- /tests/integration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abilian/abilian-core/69d2989d2f0380d7ee36f518e1fa83362fd1ee86/tests/integration/__init__.py -------------------------------------------------------------------------------- /tests/test_id_generator.py: -------------------------------------------------------------------------------- 1 | from flask import g 2 | 3 | 4 | def test_id_generator(app, app_context): 5 | # inside app context: id_generator installed 6 | assert hasattr(g, "id_generator") 7 | 8 | # test sucessives values 9 | assert next(g.id_generator) == 1 10 | assert next(g.id_generator) == 2 11 | assert next(g.id_generator) == 3 12 | 13 | gen = g.id_generator 14 | with app.app_context(): 15 | # new app context: new id generator. 16 | # Note: if this behavior is not desired and got changed, 17 | # this test will flag behavior change. 18 | assert g.id_generator is not gen 19 | assert next(g.id_generator) == 1 20 | 21 | # app context popped: first id generator 'restored' 22 | assert g.id_generator is gen 23 | assert next(g.id_generator) == 4 24 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py38, py39, lint, safety 3 | skipsdist = True 4 | 5 | 6 | [testenv] 7 | skip_install = true 8 | 9 | passenv = 10 | SQLALCHEMY_DATABASE_URI 11 | 12 | setenv = 13 | LC_ALL=en_US.UTF-8 14 | 15 | deps = 16 | # TODO: not for pypy 17 | psycopg2-binary 18 | 19 | # TODO for pypy: pip install -q pg8000 20 | 21 | allowlist_externals = 22 | make 23 | poetry 24 | sh 25 | yarn 26 | 27 | commands_pre = 28 | poetry install -q 29 | yarn 30 | 31 | commands = 32 | sh -c 'echo ; echo SQLALCHEMY_DATABASE_URI = $SQLALCHEMY_DATABASE_URI ; echo' 33 | pytest 34 | 35 | 36 | [testenv:lint] 37 | commands = 38 | make lint-ci 39 | # flake8 src tests 40 | 41 | 42 | [testenv:safety] 43 | commands_pre = 44 | poetry install --no-dev -q 45 | pip install -U pip setuptools wheel 46 | pip install safety 47 | 48 | commands = 49 | safety check 50 | 51 | 52 | [gh-actions] 53 | python = 54 | 3.8: py38 55 | 3.9: py39, lint, safety 56 | -------------------------------------------------------------------------------- /wsgi.py: -------------------------------------------------------------------------------- 1 | """Create an application instance.""" 2 | 3 | from abilian.app import create_app 4 | 5 | app = create_app() 6 | --------------------------------------------------------------------------------