├── .gitignore
├── .travis.yml
├── CONTRIBUTORS.txt
├── Gruntfile.js
├── LICENSE.txt
├── README.md
├── assets
├── css
│ ├── bootstrap
│ │ ├── 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
│ ├── flexslider.css
│ ├── rynda-theme.less
│ ├── rynda.less
│ └── rynda
│ │ ├── buttons.less
│ │ ├── scaffolding.less
│ │ ├── site.less
│ │ ├── sprites.less
│ │ └── variables.less
├── fonts
│ ├── flexslider-icon.eot
│ ├── flexslider-icon.svg
│ ├── flexslider-icon.ttf
│ └── flexslider-icon.woff
└── javascript
│ ├── libs
│ ├── bootstrap.min.js
│ ├── jquery-1.11.0.min.js
│ ├── jquery.flexslider-min.js
│ ├── leaflet.markercluster.js
│ └── modernizr-2.5.3.min.js
│ ├── plugins.js
│ ├── rynda.js
│ └── script.js
├── createdb.sh
├── docs
├── Makefile
└── source
│ ├── conf.py
│ ├── index.rst
│ └── message.rst
├── locale
├── en
│ └── LC_MESSAGES
│ │ └── django.po
└── ru
│ └── LC_MESSAGES
│ └── django.po
├── manage.py
├── mysettings.py.example
├── package.json
├── requirements.txt
├── requirements
├── _base.txt
├── _test.txt
├── develop.txt
├── production.txt
├── stage.txt
├── test.txt
└── travis.txt
└── rynda
├── .coveragerc
├── Rynda
├── __init__.py
├── settings
│ ├── __init__.py
│ ├── base.py
│ ├── dev_sarutobi.py
│ ├── local.py
│ ├── stage.py
│ ├── test.py
│ └── travis.py
├── urls.py
└── wsgi.py
├── __init__.py
├── api
├── __init__.py
├── serializers.py
├── urls.py
└── views.py
├── core
├── __init__.py
├── admin.py
├── backends.py
├── context_processors.py
├── factories.py
├── fixtures
│ └── initial_data.json
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20141022_2110.py
│ ├── 0003_sitemapoptions.py
│ └── __init__.py
├── mixins.py
├── models.py
├── serializers.py
├── tests
│ ├── __init__.py
│ └── xUnit
│ │ ├── __init__.py
│ │ ├── test_backends.py
│ │ └── test_models.py
├── utils.py
└── views.py
├── geozones
├── __init__.py
├── admin.py
├── factories.py
├── fixtures
│ └── russian_regions.json
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20141022_2110.py
│ ├── 0003_auto_20141215_2111.py
│ └── __init__.py
├── models.py
├── static
│ └── geozones
│ │ ├── geolocation.css
│ │ ├── geolocation.js
│ │ ├── l.control.geosearch.js
│ │ ├── l.geosearch.css
│ │ └── l.geosearch.provider.google.js
├── templates
│ └── geozones
│ │ ├── olwidget
│ │ └── admin_olwidget.html
│ │ └── widgets
│ │ └── geolocation.html
└── tests
│ ├── __init__.py
│ └── xUnit
│ ├── __init__.py
│ └── test_models.py
├── message
├── __init__.py
├── admin.py
├── factories.py
├── forms.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20141022_2110.py
│ ├── 0003_auto_20141214_1751.py
│ ├── 0004_remove_message_linked_location.py
│ └── __init__.py
├── models.py
├── templates
│ ├── message_details.html
│ ├── message_form.html
│ ├── message_success.html
│ ├── messages_list.html
│ ├── offer_form.html
│ └── request_form.html
├── tests
│ ├── __init__.py
│ ├── functional
│ │ ├── __init__.py
│ │ ├── test_message_views.py
│ │ └── test_send_message.py
│ └── xUnit
│ │ ├── __init__.py
│ │ ├── test_forms.py
│ │ ├── test_models.py
│ │ └── test_views.py
├── urls.py
└── views.py
├── newsline
├── __init__.py
├── admin.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20141022_2110.py
│ └── __init__.py
├── models.py
├── templates
│ └── post_list.html
├── urls.py
└── views.py
├── static
├── crossdomain.xml
├── css
│ ├── bootstrap-theme.css
│ ├── default.css
│ ├── flexslider.css
│ └── fonts
│ │ ├── flexslider-icon.eot
│ │ ├── flexslider-icon.svg
│ │ ├── flexslider-icon.ttf
│ │ └── flexslider-icon.woff
├── favicon.ico
├── humans.txt
├── img
│ ├── actual_rec_bg.png
│ ├── anonymous.png
│ ├── auth_bg.png
│ ├── bg.jpg
│ ├── favicon.ico
│ ├── logo.png
│ ├── navigation.png
│ ├── nh_icon.png
│ ├── social.png
│ ├── top_nav_brdr.png
│ ├── triple_li_bg.png
│ └── wh_icon.png
├── js
│ ├── libs
│ │ ├── bootstrap.min.js
│ │ ├── jquery-1.11.0.min.js
│ │ ├── jquery.flexslider-min.js
│ │ ├── leaflet.markercluster.js
│ │ └── modernizr-2.5.3.min.js
│ ├── plugins.js
│ ├── rynda.js
│ └── script.js
├── readme.md
└── robots.txt
├── templates
├── admin
│ ├── base_site.html
│ └── message
│ │ └── message
│ │ └── line_field.html
├── base.html
├── base_list.html
├── base_singlepane.html
├── external
│ └── vk_comments.html
├── flatpages
│ └── default.html
├── floppyforms
│ ├── attrs.html
│ ├── checkbox_select.html
│ ├── errors.html
│ ├── layouts
│ │ └── default.html
│ └── rows
│ │ └── default.html
├── index.html
├── infopages_list.html
├── login.html
├── not_implemented.html
├── registration
│ ├── logged_out.html
│ ├── password_change_done.html
│ ├── password_change_form.html
│ ├── password_reset_complete.html
│ ├── password_reset_confirm.html
│ ├── password_reset_done.html
│ └── password_reset_form.html
└── widgets
│ ├── base_hub.html
│ ├── filter.html
│ ├── message_pane.html
│ └── messages.html
├── test
├── __init__.py
├── factories.py
└── test_user_registration.py
└── users
├── __init__.py
├── admin.py
├── forms.py
├── management
└── __init__.py
├── migrations
├── 0001_initial.py
├── 0002_profile_is_public.py
├── 0003_auto_20140911_1613.py
├── 0004_remove_profile_flags.py
├── 0005_auto_20140911_1634.py
└── __init__.py
├── models.py
├── templates
├── activation_failed.html
├── edit_profile_form.html
├── registration_form.html
├── registration_success.html
├── user_details.html
└── user_list.html
├── tests
├── __init__.py
└── xUnit
│ ├── __init__.py
│ ├── test_forms.py
│ └── test_models.py
├── urls.py
└── views.py
/.gitignore:
--------------------------------------------------------------------------------
1 | .*
2 | *.py[co]
3 | *.vim
4 | *.db
5 | *.mo
6 | *.log
7 | local_*
8 | mysettings.py
9 | build/
10 | htmlcov/
11 | mailbox/
12 | node_modules/
13 | docs/build/
14 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 | python:
3 | - "2.7"
4 | # command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
5 | install: "pip install -r requirements/travis.txt"
6 | # # command to run tests, e.g. python setup.py test
7 | before_script:
8 | - psql -c 'create database rynda;' -U postgres
9 | - psql -c 'create extension postgis' -U postgres -d rynda
10 | # - python manage.py migrate --settings=Rynda.settings.travis
11 |
12 | script:
13 | - python manage.py test --settings=rynda.Rynda.settings.travis
14 |
15 |
--------------------------------------------------------------------------------
/CONTRIBUTORS.txt:
--------------------------------------------------------------------------------
1 | Valery "tengu sarutobi" Ilychev
2 | Gleb Suvorov
3 | Deniss Kulandin
4 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function(grunt){
2 | grunt.initConfig({
3 | pkg: grunt.file.readJSON("package.json"),
4 | concat: {
5 | },
6 |
7 | // Build css from less styles
8 | less: {
9 | dev: {
10 | files: {
11 | "rynda/static/css/bootstrap-theme.css": "assets/css/rynda-theme.less",
12 | "rynda/static/css/default.css": "assets/css/rynda.less"
13 | }
14 | }
15 | },
16 |
17 | // Check javascripts
18 | jshint: {
19 | all: ["Gruntfile.js", "assets/javascripts/*.js"]
20 | },
21 |
22 | // Copying files
23 | copy: {
24 | // Development version
25 | dev: {
26 | files: [
27 | // Libraries
28 | {expand: true, cwd:"assets/javascript/", src:["libs/*.js"], dest: "rynda/static/js/"},
29 |
30 | // Development javascripts
31 | {expand: true, cwd:"assets/javascript/", src:["*.js"], dest: "rynda/static/js/", filter: "isFile"},
32 |
33 | // Css files
34 | {expand: true, cwd:"assets/css/", src:["*.css"], dest: "rynda/static/css/", filter: "isFile"}
35 | ]},
36 |
37 | //Root files
38 | prod: {
39 | files:[
40 | {src:["*.txt", "README.md", "manage.py"], dest: "build/"},
41 | {src:["rynda/**/*.html", "rynda/**/*.json", "rynda/**/*.py" , "!**/tests/**", "!**/test/**"], dest:"build/"},
42 | {src:"locale/**/*.po", dest:"build/"}
43 | ]}
44 | },
45 |
46 | // Clean destination dirs
47 | clean: ["build", "rynda/static/js", "rynda/static/css"]
48 | });
49 |
50 | grunt.loadNpmTasks("grunt-contrib-concat");
51 | grunt.loadNpmTasks("grunt-contrib-jshint");
52 | grunt.loadNpmTasks("grunt-contrib-less");
53 | grunt.loadNpmTasks("grunt-contrib-copy");
54 | grunt.loadNpmTasks("grunt-contrib-clean");
55 | grunt.registerTask("default", ["jshint", "clean", "less:dev", "copy:dev"]);
56 | grunt.registerTask("package", ["jshint", "clean", "less:development", "copy:root", "copy:libs", "copy:sourcejs", "copy:css"]);
57 | };
58 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Valery A. Ilychev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Rynda
2 | =====
3 | [](https://travis-ci.org/sarutobi/Rynda)
4 |
5 | http://rynda.org
6 | http://openrynda.te-st.ru/
7 |
8 | Технические требования
9 | ------------
10 | - Python 2.7+
11 | - spatialite
12 | - GEOS
13 | - PROJ.4
14 | - Virtualenv (опционально, но строго рекомендуется)
15 |
16 | Быстрый старт
17 | ------------
18 |
19 | (Опционально) Создаем и активируем virtualenv:
20 |
21 | ```
22 | $ virtualenv rynda
23 | $ source rynda/bin/activate
24 | ```
25 |
26 | 1. Клонируем репозиторий:
27 |
28 | ```
29 | $ git clone https://github.com/sarutobi/Rynda.git
30 | ```
31 |
32 | 2. переходим в клонированный репозиторий:
33 |
34 | ```
35 | $ cd Rynda
36 | ```
37 |
38 | 3. Устанавливаем все зависимости:
39 |
40 | ```
41 | $ pip install -r requirements/test.txt
42 | ```
43 |
44 | 4. Копируем mysettings.py.example в mysettings.py
45 |
46 | 5. Задаем структуру базы данных и пароль суперпользователя:
47 |
48 | ```
49 | $ chmod +x createdb.sh
50 | $ bash createdb.sh
51 | ```
52 |
53 | Дважды вводим пароль суперпользователя.
54 |
55 | Имя суперпользователя по умолчанию: admin
56 |
57 | 6. Запускаем локальный сервер:
58 |
59 | ```
60 | $ python manage.py runserver
61 | ```
62 |
63 | 7. Открываем в браузере [http://localhost:8000](http://localhost:8000)
64 |
65 | 8. Чтобы протестировать систему запускаем:
66 |
67 | ```
68 | $ python manage.py test
69 | ```
70 |
71 | [Документация на русском языке](http://rynda.readthedocs.org/ru/latest/production.html)
72 |
73 |
74 | Если вам нужна помощь волонтеров в установке и настройке - создайте задачу на https://itv.te-st.ru
75 |
76 |
77 | -------
78 | http://rynda.org
79 | http://openrynda.te-st.ru/
80 |
81 | Requirements
82 | ------------
83 | - Python 2.7+
84 | - spatialite
85 | - GEOS
86 | - PROJ.4
87 | - Virtualenv (optional, but strongly recommended)
88 |
89 | Quickstart
90 | ------------
91 |
92 | (Optional) Create and activate virtualenv:
93 |
94 | ```
95 | $ virtualenv rynda
96 | $ source rynda/bin/activate
97 | ```
98 |
99 | 1. Clone the repository:
100 |
101 | ```
102 | $ git clone https://github.com/sarutobi/Rynda.git
103 | ```
104 |
105 | 2. cd to cloned repository:
106 |
107 | ```
108 | $ cd Rynda
109 | ```
110 |
111 | 3. Install all requirements:
112 |
113 | ```
114 | $ pip install -r requirements/test.txt
115 | ```
116 |
117 | 4. Copy mysettings.py.example to mysettings.py
118 |
119 | 5. Create database structure and superuser password:
120 | ```
121 | a) edit createdb.sh to set proper admin username and email address
122 | b) Set execution mode for createdb.sh
123 | $ chmod +x createdb.sh
124 | c) Execute the script. Enter superuser password twice.
125 | $ bash createdb.sh
126 | ```
127 |
128 | 6. Run the local server:
129 |
130 | ```
131 | $ python manage.py runserver
132 | ```
133 |
134 | 7. Point your browser to [http://localhost:8000](http://localhost:8000)
135 |
136 | 8. To make tests, type:
137 |
138 | ```
139 | $ python manage.py test
140 | ```
141 | [Russian documentation](http://rynda.readthedocs.org/ru/latest/production.html)
142 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: @alert-padding;
11 | margin-bottom: @line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: @alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing @headings-color
19 | color: inherit;
20 | }
21 | // Provide class for links that match alerts
22 | .alert-link {
23 | font-weight: @alert-link-font-weight;
24 | }
25 |
26 | // Improve alignment and spacing of inner content
27 | > p,
28 | > ul {
29 | margin-bottom: 0;
30 | }
31 | > p + p {
32 | margin-top: 5px;
33 | }
34 | }
35 |
36 | // Dismissible alerts
37 | //
38 | // Expand the right padding and account for the close button's positioning.
39 |
40 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
41 | .alert-dismissible {
42 | padding-right: (@alert-padding + 20);
43 |
44 | // Adjust close link position
45 | .close {
46 | position: relative;
47 | top: -2px;
48 | right: -21px;
49 | color: inherit;
50 | }
51 | }
52 |
53 | // Alternate styles
54 | //
55 | // Generate contextual modifier classes for colorizing the alert.
56 |
57 | .alert-success {
58 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
59 | }
60 | .alert-info {
61 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
62 | }
63 | .alert-warning {
64 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
65 | }
66 | .alert-danger {
67 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
68 | }
69 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: @font-size-small;
12 | font-weight: @badge-font-weight;
13 | color: @badge-color;
14 | line-height: @badge-line-height;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: @badge-bg;
19 | border-radius: @badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 | .btn-xs & {
32 | top: 0;
33 | padding: 1px 5px;
34 | }
35 |
36 | // Hover state, but only for links
37 | a& {
38 | &:hover,
39 | &:focus {
40 | color: @badge-link-hover-color;
41 | text-decoration: none;
42 | cursor: pointer;
43 | }
44 | }
45 |
46 | // Account for badges in navs
47 | a.list-group-item.active > &,
48 | .nav-pills > .active > a > & {
49 | color: @badge-active-color;
50 | background-color: @badge-active-bg;
51 | }
52 | .nav-pills > li > a > & {
53 | margin-left: 3px;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/bootstrap.less:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "variables.less";
3 | @import "mixins.less";
4 |
5 | // Reset and dependencies
6 | @import "normalize.less";
7 | @import "print.less";
8 | @import "glyphicons.less";
9 |
10 | // Core CSS
11 | @import "scaffolding.less";
12 | @import "type.less";
13 | @import "code.less";
14 | @import "grid.less";
15 | @import "tables.less";
16 | @import "forms.less";
17 | @import "buttons.less";
18 |
19 | // Components
20 | @import "component-animations.less";
21 | @import "dropdowns.less";
22 | @import "button-groups.less";
23 | @import "input-groups.less";
24 | @import "navs.less";
25 | @import "navbar.less";
26 | @import "breadcrumbs.less";
27 | @import "pagination.less";
28 | @import "pager.less";
29 | @import "labels.less";
30 | @import "badges.less";
31 | @import "jumbotron.less";
32 | @import "thumbnails.less";
33 | @import "alerts.less";
34 | @import "progress-bars.less";
35 | @import "media.less";
36 | @import "list-group.less";
37 | @import "panels.less";
38 | @import "responsive-embed.less";
39 | @import "wells.less";
40 | @import "close.less";
41 |
42 | // Components w/ JavaScript
43 | @import "modals.less";
44 | @import "tooltip.less";
45 | @import "popovers.less";
46 | @import "carousel.less";
47 |
48 | // Utility classes
49 | @import "utilities.less";
50 | @import "responsive-utilities.less";
51 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 | button& {
27 | padding: 0;
28 | cursor: pointer;
29 | background: transparent;
30 | border: 0;
31 | -webkit-appearance: none;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: @font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: @code-color;
19 | background-color: @code-bg;
20 | border-radius: @border-radius-base;
21 | }
22 |
23 | // User input typically entered via keyboard
24 | kbd {
25 | padding: 2px 4px;
26 | font-size: 90%;
27 | color: @kbd-color;
28 | background-color: @kbd-bg;
29 | border-radius: @border-radius-small;
30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
31 |
32 | kbd {
33 | padding: 0;
34 | font-size: 100%;
35 | box-shadow: none;
36 | }
37 | }
38 |
39 | // Blocks of code
40 | pre {
41 | display: block;
42 | padding: ((@line-height-computed - 1) / 2);
43 | margin: 0 0 (@line-height-computed / 2);
44 | font-size: (@font-size-base - 1); // 14px to 13px
45 | line-height: @line-height-base;
46 | word-break: break-all;
47 | word-wrap: break-word;
48 | color: @pre-color;
49 | background-color: @pre-bg;
50 | border: 1px solid @pre-border-color;
51 | border-radius: @border-radius-base;
52 |
53 | // Account for some code outputs that place code tags in pre tags
54 | code {
55 | padding: 0;
56 | font-size: inherit;
57 | color: inherit;
58 | white-space: pre-wrap;
59 | background-color: transparent;
60 | border-radius: 0;
61 | }
62 | }
63 |
64 | // Enable scrollable blocks of code
65 | .pre-scrollable {
66 | max-height: @pre-scrollable-max-height;
67 | overflow-y: scroll;
68 | }
69 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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(height .35s ease);
31 | }
32 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | .container-fixed();
12 |
13 | @media (min-width: @screen-sm-min) {
14 | width: @container-sm;
15 | }
16 | @media (min-width: @screen-md-min) {
17 | width: @container-md;
18 | }
19 | @media (min-width: @screen-lg-min) {
20 | width: @container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | .container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | .make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | .make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | .make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: @screen-sm-min) {
65 | .make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: @screen-md-min) {
74 | .make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: @screen-lg-min) {
83 | .make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/jumbotron.less:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding: @jumbotron-padding;
8 | margin-bottom: @jumbotron-padding;
9 | color: @jumbotron-color;
10 | background-color: @jumbotron-bg;
11 |
12 | h1,
13 | .h1 {
14 | color: @jumbotron-heading-color;
15 | }
16 | p {
17 | margin-bottom: (@jumbotron-padding / 2);
18 | font-size: @jumbotron-font-size;
19 | font-weight: 200;
20 | }
21 |
22 | > hr {
23 | border-top-color: darken(@jumbotron-bg, 10%);
24 | }
25 |
26 | .container & {
27 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
28 | }
29 |
30 | .container {
31 | max-width: 100%;
32 | }
33 |
34 | @media screen and (min-width: @screen-sm-min) {
35 | padding-top: (@jumbotron-padding * 1.6);
36 | padding-bottom: (@jumbotron-padding * 1.6);
37 |
38 | .container & {
39 | padding-left: (@jumbotron-padding * 2);
40 | padding-right: (@jumbotron-padding * 2);
41 | }
42 |
43 | h1,
44 | .h1 {
45 | font-size: (@font-size-base * 4.5);
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/labels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: @label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | a& {
19 | &:hover,
20 | &:focus {
21 | color: @label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | .label-variant(@label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | .label-variant(@label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | .label-variant(@label-success-bg);
52 | }
53 |
54 | .label-info {
55 | .label-variant(@label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | .label-variant(@label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | .label-variant(@label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/list-group.less:
--------------------------------------------------------------------------------
1 | //
2 | // List groups
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | //
8 | // Easily usable on
, , or .
9 |
10 | .list-group {
11 | // No need to set list-style: none; since .list-group-item is block level
12 | margin-bottom: 20px;
13 | padding-left: 0; // reset padding because ul and ol
14 | }
15 |
16 |
17 | // Individual list items
18 | //
19 | // Use on `li`s or `div`s within the `.list-group` parent.
20 |
21 | .list-group-item {
22 | position: relative;
23 | display: block;
24 | padding: 10px 15px;
25 | // Place the border on the list items and negative margin up for better styling
26 | margin-bottom: -1px;
27 | background-color: @list-group-bg;
28 | border: 1px solid @list-group-border;
29 |
30 | // Round the first and last items
31 | &:first-child {
32 | .border-top-radius(@list-group-border-radius);
33 | }
34 | &:last-child {
35 | margin-bottom: 0;
36 | .border-bottom-radius(@list-group-border-radius);
37 | }
38 |
39 | // Align badges within list items
40 | > .badge {
41 | float: right;
42 | }
43 | > .badge + .badge {
44 | margin-right: 5px;
45 | }
46 | }
47 |
48 |
49 | // Linked list items
50 | //
51 | // Use anchor elements instead of `li`s or `div`s to create linked list items.
52 | // Includes an extra `.active` modifier class for showing selected items.
53 |
54 | a.list-group-item {
55 | color: @list-group-link-color;
56 |
57 | .list-group-item-heading {
58 | color: @list-group-link-heading-color;
59 | }
60 |
61 | // Hover state
62 | &:hover,
63 | &:focus {
64 | text-decoration: none;
65 | color: @list-group-link-hover-color;
66 | background-color: @list-group-hover-bg;
67 | }
68 | }
69 |
70 | .list-group-item {
71 | // Disabled state
72 | &.disabled,
73 | &.disabled:hover,
74 | &.disabled:focus {
75 | background-color: @list-group-disabled-bg;
76 | color: @list-group-disabled-color;
77 |
78 | // Force color to inherit for custom content
79 | .list-group-item-heading {
80 | color: inherit;
81 | }
82 | .list-group-item-text {
83 | color: @list-group-disabled-text-color;
84 | }
85 | }
86 |
87 | // Active class on item itself, not parent
88 | &.active,
89 | &.active:hover,
90 | &.active:focus {
91 | z-index: 2; // Place active items above their siblings for proper border styling
92 | color: @list-group-active-color;
93 | background-color: @list-group-active-bg;
94 | border-color: @list-group-active-border;
95 |
96 | // Force color to inherit for custom content
97 | .list-group-item-heading,
98 | .list-group-item-heading > small,
99 | .list-group-item-heading > .small {
100 | color: inherit;
101 | }
102 | .list-group-item-text {
103 | color: @list-group-active-text-color;
104 | }
105 | }
106 | }
107 |
108 |
109 | // Contextual variants
110 | //
111 | // Add modifier classes to change text and background color on individual items.
112 | // Organizationally, this must come after the `:hover` states.
113 |
114 | .list-group-item-variant(success; @state-success-bg; @state-success-text);
115 | .list-group-item-variant(info; @state-info-bg; @state-info-text);
116 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
117 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
118 |
119 |
120 | // Custom content options
121 | //
122 | // Extra classes for creating well-formatted content within `.list-group-item`s.
123 |
124 | .list-group-item-heading {
125 | margin-top: 0;
126 | margin-bottom: 5px;
127 | }
128 | .list-group-item-text {
129 | margin-bottom: 0;
130 | line-height: 1.3;
131 | }
132 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/media.less:
--------------------------------------------------------------------------------
1 | // Media objects
2 | // Source: http://stubbornella.org/content/?p=497
3 | // --------------------------------------------------
4 |
5 |
6 | // Common styles
7 | // -------------------------
8 |
9 | // Clear the floats
10 | .media,
11 | .media-body {
12 | overflow: hidden;
13 | zoom: 1;
14 | }
15 |
16 | // Proper spacing between instances of .media
17 | .media,
18 | .media .media {
19 | margin-top: 15px;
20 | }
21 | .media:first-child {
22 | margin-top: 0;
23 | }
24 |
25 | // For images and videos, set to block
26 | .media-object {
27 | display: block;
28 | }
29 |
30 | // Reset margins on headings for tighter default spacing
31 | .media-heading {
32 | margin: 0 0 5px;
33 | }
34 |
35 |
36 | // Media image alignment
37 | // -------------------------
38 |
39 | .media {
40 | > .pull-left {
41 | margin-right: 10px;
42 | }
43 | > .pull-right {
44 | margin-left: 10px;
45 | }
46 | }
47 |
48 |
49 | // Media list variation
50 | // -------------------------
51 |
52 | // Undo default ul/ol styles
53 | .media-list {
54 | padding-left: 0;
55 | list-style: none;
56 | }
57 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------------------------------
3 |
4 | // Utilities
5 | @import "mixins/hide-text.less";
6 | @import "mixins/opacity.less";
7 | @import "mixins/image.less";
8 | @import "mixins/labels.less";
9 | @import "mixins/reset-filter.less";
10 | @import "mixins/resize.less";
11 | @import "mixins/responsive-visibility.less";
12 | @import "mixins/size.less";
13 | @import "mixins/tab-focus.less";
14 | @import "mixins/text-emphasis.less";
15 | @import "mixins/text-overflow.less";
16 | @import "mixins/vendor-prefixes.less";
17 |
18 | // Components
19 | @import "mixins/alerts.less";
20 | @import "mixins/buttons.less";
21 | @import "mixins/panels.less";
22 | @import "mixins/pagination.less";
23 | @import "mixins/list-group.less";
24 | @import "mixins/nav-divider.less";
25 | @import "mixins/forms.less";
26 | @import "mixins/progress-bar.less";
27 | @import "mixins/table-row.less";
28 |
29 | // Skins
30 | @import "mixins/background-variant.less";
31 | @import "mixins/border-radius.less";
32 | @import "mixins/gradients.less";
33 |
34 | // Layout
35 | @import "mixins/clearfix.less";
36 | @import "mixins/center-block.less";
37 | @import "mixins/nav-vertical-align.less";
38 | @import "mixins/grid-framework.less";
39 | @import "mixins/grid.less";
40 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/mixins/buttons.less:
--------------------------------------------------------------------------------
1 | // Button variants
2 | //
3 | // Easily pump out default styles, as well as :hover, :focus, :active,
4 | // and disabled options for all buttons
5 |
6 | .button-variant(@color; @background; @border) {
7 | color: @color;
8 | background-color: @background;
9 | border-color: @border;
10 |
11 | &:hover,
12 | &:focus,
13 | &:active,
14 | &.active,
15 | .open > .dropdown-toggle& {
16 | color: @color;
17 | background-color: darken(@background, 10%);
18 | border-color: darken(@border, 12%);
19 | }
20 | &:active,
21 | &.active,
22 | .open > .dropdown-toggle& {
23 | background-image: none;
24 | }
25 | &.disabled,
26 | &[disabled],
27 | fieldset[disabled] & {
28 | &,
29 | &:hover,
30 | &:focus,
31 | &:active,
32 | &.active {
33 | background-color: @background;
34 | border-color: @border;
35 | }
36 | }
37 |
38 | .badge {
39 | color: @background;
40 | background-color: @color;
41 | }
42 | }
43 |
44 | // Button sizes
45 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
46 | padding: @padding-vertical @padding-horizontal;
47 | font-size: @font-size;
48 | line-height: @line-height;
49 | border-radius: @border-radius;
50 | }
51 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/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 |
--------------------------------------------------------------------------------
/assets/css/bootstrap/mixins/forms.less:
--------------------------------------------------------------------------------
1 | // Form validation states
2 | //
3 | // Used in forms.less to generate the form validation CSS for warnings, errors,
4 | // and successes.
5 |
6 | .form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
7 | // Color the label and help text
8 | .help-block,
9 | .control-label,
10 | .radio,
11 | .checkbox,
12 | .radio-inline,
13 | .checkbox-inline {
14 | color: @text-color;
15 | }
16 | // Set the border and box shadow on specific inputs to match
17 | .form-control {
18 | border-color: @border-color;
19 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
20 | &:focus {
21 | border-color: darken(@border-color, 10%);
22 | @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
23 | .box-shadow(@shadow);
24 | }
25 | }
26 | // Set validation states also for addons
27 | .input-group-addon {
28 | color: @text-color;
29 | border-color: @border-color;
30 | background-color: @background-color;
31 | }
32 | // Optional feedback icon
33 | .form-control-feedback {
34 | color: @text-color;
35 | }
36 | }
37 |
38 |
39 | // Form control focus state
40 | //
41 | // Generate a customized focus state and for any input with the specified color,
42 | // which defaults to the `@input-border-focus` variable.
43 | //
44 | // We highly encourage you to not customize the default value, but instead use
45 | // this to tweak colors on an as-needed basis. This aesthetic change is based on
46 | // WebKit's default styles, but applicable to a wider range of browsers. Its
47 | // usability and accessibility should be taken into account with any change.
48 | //
49 | // Example usage: change the default blue border and shadow to white for better
50 | // contrast against a dark gray background.
51 | .form-control-focus(@color: @input-border-focus) {
52 | @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
53 | &:focus {
54 | border-color: @color;
55 | outline: 0;
56 | .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
57 | }
58 | }
59 |
60 | // Form control sizing
61 | //
62 | // Relative text size, padding, and border-radii changes for form controls. For
63 | // horizontal sizing, wrap controls in the predefined grid classes. `