Pārlūkot izejas kodu

Merge branch 'dev'

Denis K 9 gadi atpakaļ
vecāks
revīzija
3c2a54bccf
68 mainītis faili ar 4402 papildinājumiem un 1253 dzēšanām
  1. 14 0
      CHANGELOG.rst
  2. 1 1
      docs/autocomplete.rst
  3. 42 0
      docs/config_file.rst
  4. 2 2
      jet/dashboard/dashboard.py
  5. 2 0
      jet/dashboard/models.py
  6. 6 3
      jet/dashboard/utils.py
  7. BIN
      jet/locale/en/LC_MESSAGES/django.mo
  8. 272 264
      jet/locale/en/LC_MESSAGES/django.po
  9. BIN
      jet/locale/ru/LC_MESSAGES/django.mo
  10. 283 277
      jet/locale/ru/LC_MESSAGES/django.po
  11. 0 0
      jet/management/__init__.py
  12. 0 0
      jet/management/commands/__init__.py
  13. 39 0
      jet/management/commands/jet_custom_apps_example.py
  14. 0 8
      jet/ordered_set.py
  15. 4 0
      jet/settings.py
  16. 0 0
      jet/static/admin/css/changelists.css
  17. 0 1
      jet/static/admin/js/SelectFilter2.min.js
  18. 0 1
      jet/static/admin/js/admin/DateTimeShortcuts.min.js
  19. 169 0
      jet/static/admin/js/admin/RelatedObjectLookups.js
  20. 0 0
      jet/static/admin/js/inlines.min.js
  21. 0 1
      jet/static/admin/js/related-widget-wrapper.min.js
  22. 7 1
      jet/static/jet/css/_base.scss
  23. 25 13
      jet/static/jet/css/_changeform.scss
  24. 13 0
      jet/static/jet/css/_content.scss
  25. 7 0
      jet/static/jet/css/_helpers.scss
  26. 71 0
      jet/static/jet/css/_relatedpopup.scss
  27. 26 3
      jet/static/jet/css/_sidebar.scss
  28. 2 0
      jet/static/jet/css/_top.scss
  29. 54 49
      jet/static/jet/css/icons/style.css
  30. 499 89
      jet/static/jet/css/themes/default/base.css
  31. 0 0
      jet/static/jet/css/themes/default/base.css.map
  32. 0 0
      jet/static/jet/css/themes/default/jquery-ui.theme.css.map
  33. 0 0
      jet/static/jet/css/themes/default/select2.theme.css.map
  34. 499 89
      jet/static/jet/css/themes/green/base.css
  35. 0 0
      jet/static/jet/css/themes/green/base.css.map
  36. 0 0
      jet/static/jet/css/themes/green/jquery-ui.theme.css.map
  37. 0 0
      jet/static/jet/css/themes/green/select2.theme.css.map
  38. 499 89
      jet/static/jet/css/themes/light-blue/base.css
  39. 0 0
      jet/static/jet/css/themes/light-blue/base.css.map
  40. 0 0
      jet/static/jet/css/themes/light-blue/jquery-ui.theme.css.map
  41. 0 0
      jet/static/jet/css/themes/light-blue/select2.theme.css.map
  42. 499 89
      jet/static/jet/css/themes/light-gray/base.css
  43. 0 0
      jet/static/jet/css/themes/light-gray/base.css.map
  44. 0 0
      jet/static/jet/css/themes/light-gray/jquery-ui.theme.css.map
  45. 0 0
      jet/static/jet/css/themes/light-gray/select2.theme.css.map
  46. 499 89
      jet/static/jet/css/themes/light-green/base.css
  47. 0 0
      jet/static/jet/css/themes/light-green/base.css.map
  48. 0 0
      jet/static/jet/css/themes/light-green/jquery-ui.theme.css.map
  49. 0 0
      jet/static/jet/css/themes/light-green/select2.theme.css.map
  50. 499 89
      jet/static/jet/css/themes/light-violet/base.css
  51. 0 0
      jet/static/jet/css/themes/light-violet/base.css.map
  52. 0 0
      jet/static/jet/css/themes/light-violet/jquery-ui.theme.css.map
  53. 0 0
      jet/static/jet/css/themes/light-violet/select2.theme.css.map
  54. 40 1
      jet/static/jet/js/main.js
  55. 0 0
      jet/static/jet/js/main.min.js
  56. 82 55
      jet/templates/admin/base.html
  57. 2 4
      jet/templates/admin/change_form.html
  58. 1 4
      jet/templates/admin/change_list.html
  59. 1 1
      jet/templates/admin/includes/fieldset.html
  60. 3 5
      jet/templates/admin/popup_response.html
  61. 3 4
      jet/templates/registration/password_change_form.html
  62. 45 2
      jet/templatetags/jet_tags.py
  63. 68 0
      jet/tests/test_ordered_set.py
  64. 0 2
      jet/tests/test_tags.py
  65. 49 1
      jet/tests/test_utils.py
  66. 0 5
      jet/tests/test_views.py
  67. 1 1
      jet/urls.py
  68. 74 10
      jet/utils.py

+ 14 - 0
CHANGELOG.rst

@@ -1,6 +1,20 @@
 Changelog
 Changelog
 =========
 =========
 
 
+0.1.4
+-----
+* [Feature] Side bar compact mode (lists all models without opening second menu)
+* [Feature] Custom side bar menu applications and models content and ordering
+* [Feature] Related objects actions in nice-looking popup instead of new window
+* [Feature] Add changelist row selection on row background click
+* [Fix] Better 3rd party applications template compatibility
+* [Fix] JET and Django js translation conflicts
+* [Fix] Hide empty model form labels
+* [Fix] Wrong positioning for 0 column
+* [Fix] Issue-21: Init label wrapped checkboxes
+* [Improvement] Add top bar arrow transition
+
+
 0.1.3
 0.1.3
 -----
 -----
 * [Feature] Add theme choosing ability
 * [Feature] Add theme choosing ability

+ 1 - 1
docs/autocomplete.rst

@@ -5,7 +5,7 @@ Autocomplete
 By default Django JET renders all possible choices for select inputs. This behavior may be unwanted if number of
 By default Django JET renders all possible choices for select inputs. This behavior may be unwanted if number of
 available options is rather big. In this case Django JET allows you to load these options dynamically through AJAX.
 available options is rather big. In this case Django JET allows you to load these options dynamically through AJAX.
 
 
-In order to achieve this functionality all you have to do is :
+In order to achieve this functionality all you have to do is:
 
 
 * Specify which model fields should be searchable by AJAX queries. Add this static method to all models which you want to be searchable with AJAX:
 * Specify which model fields should be searchable by AJAX queries. Add this static method to all models which you want to be searchable with AJAX:
 
 

+ 42 - 0
docs/config_file.rst

@@ -77,6 +77,48 @@ You can use **/jet/static/jet/css/themes/light-violet/** folder as an example (a
 _variables.scss contains **all** customizable variables. You'll have to compile all .scss files in theme directory
 _variables.scss contains **all** customizable variables. You'll have to compile all .scss files in theme directory
 to start using your own theme.
 to start using your own theme.
 
 
+CUSTOM MENU
+-----------
+
+By default JET displays all applications and it models in the side menu in the alphabetical order.
+To display applications and models you want or to change their order you can use ``JET_SIDE_MENU_CUSTOM_APPS`` setting.
+
+.. code:: python
+
+    JET_SIDE_MENU_CUSTOM_APPS = [
+        ('core', [ # Each list element is a tuple with application name (app_label) and list of models
+            'User',
+            'MenuItem',
+            'Block',
+        ]),
+        ('shops', [
+            'Shop',
+            'City',
+            'MetroStation',
+        ]),
+        ('feedback', [
+            'Feedback',
+        ]),
+    ]
+
+If want to show all application's models use ``__all__`` keyword.
+
+.. code:: python
+
+    JET_SIDE_MENU_CUSTOM_APPS = [
+        ('core', ['__all__']),
+        ...
+    ]
+
+.. note::
+
+    You can use ``jet_custom_apps_example`` management command to generate example ``JET_SIDE_MENU_CUSTOM_APPS``
+    setting which includes all your applications and models. You can use it this way:
+
+    .. code:: python
+
+        python manage.py jet_custom_apps_example
+
 
 
 JET_INDEX_DASHBOARD
 JET_INDEX_DASHBOARD
 -------------------
 -------------------

+ 2 - 2
jet/dashboard/dashboard.py

@@ -106,8 +106,8 @@ class Dashboard(object):
         i = 0
         i = 0
 
 
         for module in self.children:
         for module in self.children:
-            column = module.column if module.column else i % self.columns
-            order = module.order if module.order else int(i / self.columns)
+            column = module.column if module.column is not None else i % self.columns
+            order = module.order if module.order is not None else int(i / self.columns)
 
 
             module_models.append(UserDashboardModule.objects.create(
             module_models.append(UserDashboardModule.objects.create(
                 title=module.title,
                 title=module.title,

+ 2 - 0
jet/dashboard/models.py

@@ -35,6 +35,8 @@ class UserDashboardModule(models.Model):
             return module
             return module
         except AttributeError:
         except AttributeError:
             return None
             return None
+        except ImportError:
+            return None
 
 
     def pop_settings(self, pop_settings):
     def pop_settings(self, pop_settings):
         settings = json.loads(self.settings)
         settings = json.loads(self.settings)

+ 6 - 3
jet/dashboard/utils.py

@@ -11,7 +11,10 @@ def get_current_dashboard(location):
         raise ValueError('Unknown dashboard location: %s' % location)
         raise ValueError('Unknown dashboard location: %s' % location)
 
 
     module, cls = path.rsplit('.', 1)
     module, cls = path.rsplit('.', 1)
-    module = import_module(module)
-    index_dashboard_cls = getattr(module, cls)
 
 
-    return index_dashboard_cls
+    try:
+        module = import_module(module)
+        index_dashboard_cls = getattr(module, cls)
+        return index_dashboard_cls
+    except ImportError:
+        return None

BIN
jet/locale/en/LC_MESSAGES/django.mo


+ 272 - 264
jet/locale/en/LC_MESSAGES/django.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-11 12:45+0000\n"
+"POT-Creation-Date: 2015-12-28 13:32+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,233 +15,374 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 
-#: dashboard/dashboard.py:159
+#: models.py:9 dashboard/modules.py:138 templates/admin/base.html:281
+msgid "URL"
+msgstr ""
+
+#: models.py:10
+msgid "title"
+msgstr ""
+
+#: models.py:11 models.py:26 dashboard/models.py:14
+msgid "user"
+msgstr ""
+
+#: models.py:12 models.py:27
+msgid "date created"
+msgstr ""
+
+#: models.py:15
+msgid "bookmark"
+msgstr ""
+
+#: models.py:16 templates/admin/base.html:294
+msgid "bookmarks"
+msgstr ""
+
+#: models.py:25 dashboard/models.py:13
+msgid "application name"
+msgstr ""
+
+#: models.py:30
+msgid "pinned application"
+msgstr ""
+
+#: models.py:31
+msgid "pinned applications"
+msgstr ""
+
+#: dashboard/dashboard.py:207
 msgid "Quick links"
 msgid "Quick links"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:165
+#: dashboard/dashboard.py:213
 msgid "Return to site"
 msgid "Return to site"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:166 templates/admin/base.html:80
+#: dashboard/dashboard.py:214 templates/admin/base.html:102
 msgid "Change password"
 msgid "Change password"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:168 templates/admin/base.html:84
+#: dashboard/dashboard.py:216 templates/admin/base.html:106
 msgid "Log out"
 msgid "Log out"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:176 dashboard/modules.py:160
-#: templates/admin/base.html:160 templates/admin/index.html:14
+#: dashboard/dashboard.py:224 dashboard/modules.py:268
+#: templates/admin/base.html:205 templates/admin/index.html:14
 msgid "Applications"
 msgid "Applications"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:184
+#: dashboard/dashboard.py:232
 msgid "Administration"
 msgid "Administration"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:192 dashboard/modules.py:242
+#: dashboard/dashboard.py:240 dashboard/modules.py:413
 #: templates/admin/index.html:68
 #: templates/admin/index.html:68
 msgid "Recent Actions"
 msgid "Recent Actions"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:200
+#: dashboard/dashboard.py:248
 msgid "Latest Django News"
 msgid "Latest Django News"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:209
+#: dashboard/dashboard.py:257
 msgid "Support"
 msgid "Support"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:212
+#: dashboard/dashboard.py:260
 msgid "Django documentation"
 msgid "Django documentation"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:217
+#: dashboard/dashboard.py:265
 msgid "Django \"django-users\" mailing list"
 msgid "Django \"django-users\" mailing list"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:222
+#: dashboard/dashboard.py:270
 msgid "Django irc channel"
 msgid "Django irc channel"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:237
+#: dashboard/dashboard.py:285
 msgid "Application models"
 msgid "Application models"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:143
-#: dashboard/dashboard_modules/yandex_metrika.py:101
-msgid "Revoke access"
+#: dashboard/models.py:11 dashboard/modules.py:139
+#: templates/admin/base.html:279
+msgid "Title"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:148
-#: dashboard/dashboard_modules/yandex_metrika.py:106
-msgid "Grant access"
+#: dashboard/models.py:12
+msgid "module"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:161
-#: dashboard/dashboard_modules/yandex_metrika.py:116
-msgid "Access"
+#: dashboard/models.py:15
+msgid "column"
+msgstr ""
+
+#: dashboard/models.py:16
+msgid "order"
+msgstr ""
+
+#: dashboard/models.py:17
+msgid "settings"
+msgstr ""
+
+#: dashboard/models.py:18
+msgid "children"
+msgstr ""
+
+#: dashboard/models.py:19
+msgid "collapsed"
+msgstr ""
+
+#: dashboard/models.py:22
+msgid "user dashboard module"
+msgstr ""
+
+#: dashboard/models.py:23
+msgid "user dashboard modules"
+msgstr ""
+
+#: dashboard/modules.py:140
+msgid "External link"
+msgstr ""
+
+#: dashboard/modules.py:144
+msgid "Layout"
+msgstr ""
+
+#: dashboard/modules.py:144
+msgid "Stacked"
+msgstr ""
+
+#: dashboard/modules.py:144
+msgid "Inline"
+msgstr ""
+
+#: dashboard/modules.py:190 dashboard/modules.py:214
+msgid "Links"
+msgstr ""
+
+#: dashboard/modules.py:213
+msgid "Link"
+msgstr ""
+
+#: dashboard/modules.py:340
+msgid "Models"
+msgstr ""
+
+#: dashboard/modules.py:383 dashboard/modules.py:490
+msgid "Items limit"
+msgstr ""
+
+#: dashboard/modules.py:491
+msgid "Feed URL"
+msgstr ""
+
+#: dashboard/modules.py:522
+msgid "RSS Feed"
+msgstr ""
+
+#: dashboard/modules.py:568
+msgid "You must install the FeedParser python module"
+msgstr ""
+
+#: dashboard/modules.py:573
+msgid "You must provide a valid feed URL"
+msgstr ""
+
+#: dashboard/views.py:17
+msgid "Widget was successfully updated"
+msgstr ""
+
+#: dashboard/views.py:85 dashboard/templates/jet.dashboard/module.html:19
+#: dashboard/templates/jet.dashboard/modules/app_list.html:24
+#: dashboard/templates/jet.dashboard/modules/model_list.html:14
+#: templates/admin/index.html:40 templates/admin/edit_inline/stacked.html:44
+#: templates/admin/edit_inline/tabular.html:39
+msgid "Change"
+msgstr ""
+
+#: dashboard/views.py:89 dashboard/views.py:90
+msgid "Items"
+msgstr ""
+
+#: dashboard/views.py:152
+msgid "Widget has been successfully added"
+msgstr ""
+
+#: dashboard/dashboard_modules/google_analytics.py:144
+#: dashboard/dashboard_modules/yandex_metrika.py:102
+msgid "Revoke access"
+msgstr ""
+
+#: dashboard/dashboard_modules/google_analytics.py:149
+#: dashboard/dashboard_modules/yandex_metrika.py:107
+msgid "Grant access"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:162
 #: dashboard/dashboard_modules/google_analytics.py:162
 #: dashboard/dashboard_modules/yandex_metrika.py:117
 #: dashboard/dashboard_modules/yandex_metrika.py:117
-msgid "Counter"
+msgid "Access"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:163
 #: dashboard/dashboard_modules/google_analytics.py:163
 #: dashboard/dashboard_modules/yandex_metrika.py:118
 #: dashboard/dashboard_modules/yandex_metrika.py:118
-msgid "Statistics period"
+msgid "Counter"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:164
 #: dashboard/dashboard_modules/google_analytics.py:164
 #: dashboard/dashboard_modules/yandex_metrika.py:119
 #: dashboard/dashboard_modules/yandex_metrika.py:119
-msgid "Today"
+msgid "Statistics period"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:165
 #: dashboard/dashboard_modules/google_analytics.py:165
 #: dashboard/dashboard_modules/yandex_metrika.py:120
 #: dashboard/dashboard_modules/yandex_metrika.py:120
-msgid "Last week"
+msgid "Today"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:166
 #: dashboard/dashboard_modules/google_analytics.py:166
 #: dashboard/dashboard_modules/yandex_metrika.py:121
 #: dashboard/dashboard_modules/yandex_metrika.py:121
-msgid "Last month"
+msgid "Last week"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:167
 #: dashboard/dashboard_modules/google_analytics.py:167
 #: dashboard/dashboard_modules/yandex_metrika.py:122
 #: dashboard/dashboard_modules/yandex_metrika.py:122
-msgid "Last quarter"
+msgid "Last month"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:168
 #: dashboard/dashboard_modules/google_analytics.py:168
 #: dashboard/dashboard_modules/yandex_metrika.py:123
 #: dashboard/dashboard_modules/yandex_metrika.py:123
+msgid "Last quarter"
+msgstr ""
+
+#: dashboard/dashboard_modules/google_analytics.py:169
+#: dashboard/dashboard_modules/yandex_metrika.py:124
 msgid "Last year"
 msgid "Last year"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:178
-#: dashboard/dashboard_modules/yandex_metrika.py:133
+#: dashboard/dashboard_modules/google_analytics.py:179
+#: dashboard/dashboard_modules/yandex_metrika.py:134
 msgid "none"
 msgid "none"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:181
-#: dashboard/dashboard_modules/yandex_metrika.py:136
+#: dashboard/dashboard_modules/google_analytics.py:182
+#: dashboard/dashboard_modules/yandex_metrika.py:137
 msgid "grant access first"
 msgid "grant access first"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:181
-#: dashboard/dashboard_modules/yandex_metrika.py:136
+#: dashboard/dashboard_modules/google_analytics.py:182
+#: dashboard/dashboard_modules/yandex_metrika.py:137
 msgid "counters loading failed"
 msgid "counters loading failed"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:186
-#: dashboard/dashboard_modules/yandex_metrika.py:141
+#: dashboard/dashboard_modules/google_analytics.py:187
+#: dashboard/dashboard_modules/yandex_metrika.py:142
 msgid "Show"
 msgid "Show"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:187
+#: dashboard/dashboard_modules/google_analytics.py:188
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
 msgid "Users"
 msgid "Users"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:188
+#: dashboard/dashboard_modules/google_analytics.py:189
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
 msgid "Sessions"
 msgid "Sessions"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:189
-#: dashboard/dashboard_modules/yandex_metrika.py:144
+#: dashboard/dashboard_modules/google_analytics.py:190
+#: dashboard/dashboard_modules/yandex_metrika.py:145
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
 msgid "Views"
 msgid "Views"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:191
-#: dashboard/dashboard_modules/google_analytics.py:199
-#: dashboard/dashboard_modules/yandex_metrika.py:146
-#: dashboard/dashboard_modules/yandex_metrika.py:154
-msgid "Group"
-msgstr ""
-
 #: dashboard/dashboard_modules/google_analytics.py:192
 #: dashboard/dashboard_modules/google_analytics.py:192
 #: dashboard/dashboard_modules/google_analytics.py:200
 #: dashboard/dashboard_modules/google_analytics.py:200
 #: dashboard/dashboard_modules/yandex_metrika.py:147
 #: dashboard/dashboard_modules/yandex_metrika.py:147
 #: dashboard/dashboard_modules/yandex_metrika.py:155
 #: dashboard/dashboard_modules/yandex_metrika.py:155
-msgid "By day"
+msgid "Group"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:193
 #: dashboard/dashboard_modules/google_analytics.py:193
 #: dashboard/dashboard_modules/google_analytics.py:201
 #: dashboard/dashboard_modules/google_analytics.py:201
 #: dashboard/dashboard_modules/yandex_metrika.py:148
 #: dashboard/dashboard_modules/yandex_metrika.py:148
 #: dashboard/dashboard_modules/yandex_metrika.py:156
 #: dashboard/dashboard_modules/yandex_metrika.py:156
-msgid "By week"
+msgid "By day"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/dashboard_modules/google_analytics.py:194
 #: dashboard/dashboard_modules/google_analytics.py:194
 #: dashboard/dashboard_modules/google_analytics.py:202
 #: dashboard/dashboard_modules/google_analytics.py:202
 #: dashboard/dashboard_modules/yandex_metrika.py:149
 #: dashboard/dashboard_modules/yandex_metrika.py:149
 #: dashboard/dashboard_modules/yandex_metrika.py:157
 #: dashboard/dashboard_modules/yandex_metrika.py:157
+msgid "By week"
+msgstr ""
+
+#: dashboard/dashboard_modules/google_analytics.py:195
+#: dashboard/dashboard_modules/google_analytics.py:203
+#: dashboard/dashboard_modules/yandex_metrika.py:150
+#: dashboard/dashboard_modules/yandex_metrika.py:158
 msgid "By month"
 msgid "By month"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:275
+#: dashboard/dashboard_modules/google_analytics.py:276
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">attach Google account and choose Google Analytics "
 "Please <a href=\"%s\">attach Google account and choose Google Analytics "
 "counter</a> to start using widget"
 "counter</a> to start using widget"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:278
+#: dashboard/dashboard_modules/google_analytics.py:279
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">select Google Analytics counter</a> to start using "
 "Please <a href=\"%s\">select Google Analytics counter</a> to start using "
 "widget"
 "widget"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:297
+#: dashboard/dashboard_modules/google_analytics.py:298
 #: dashboard/dashboard_modules/google_analytics_views.py:42
 #: dashboard/dashboard_modules/google_analytics_views.py:42
-#: dashboard/dashboard_modules/yandex_metrika.py:234
+#: dashboard/dashboard_modules/yandex_metrika.py:235
 #: dashboard/dashboard_modules/yandex_metrika_views.py:37
 #: dashboard/dashboard_modules/yandex_metrika_views.py:37
 msgid "API request failed."
 msgid "API request failed."
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:299
-#: dashboard/dashboard_modules/yandex_metrika.py:236
+#: dashboard/dashboard_modules/google_analytics.py:300
+#: dashboard/dashboard_modules/yandex_metrika.py:237
 #, python-format
 #, python-format
 msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
 msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:304
+#: dashboard/dashboard_modules/google_analytics.py:310
 msgid "Google Analytics visitors totals"
 msgid "Google Analytics visitors totals"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:316
+#: dashboard/dashboard_modules/google_analytics.py:325
 msgid "users"
 msgid "users"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:317
+#: dashboard/dashboard_modules/google_analytics.py:326
 msgid "sessions"
 msgid "sessions"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:318
-#: dashboard/dashboard_modules/yandex_metrika.py:257
+#: dashboard/dashboard_modules/google_analytics.py:327
+#: dashboard/dashboard_modules/yandex_metrika.py:266
 msgid "views"
 msgid "views"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:320
-#: dashboard/dashboard_modules/google_analytics.py:365
-#: dashboard/dashboard_modules/google_analytics.py:404
-#: dashboard/dashboard_modules/yandex_metrika.py:259
-#: dashboard/dashboard_modules/yandex_metrika.py:298
-#: dashboard/dashboard_modules/yandex_metrika.py:331
+#: dashboard/dashboard_modules/google_analytics.py:329
+#: dashboard/dashboard_modules/google_analytics.py:387
+#: dashboard/dashboard_modules/google_analytics.py:437
+#: dashboard/dashboard_modules/yandex_metrika.py:268
+#: dashboard/dashboard_modules/yandex_metrika.py:320
+#: dashboard/dashboard_modules/yandex_metrika.py:364
 msgid "Bad server response"
 msgid "Bad server response"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:324
+#: dashboard/dashboard_modules/google_analytics.py:339
 msgid "Google Analytics visitors chart"
 msgid "Google Analytics visitors chart"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/google_analytics.py:369
+#: dashboard/dashboard_modules/google_analytics.py:397
 msgid "Google Analytics period visitors"
 msgid "Google Analytics period visitors"
 msgstr ""
 msgstr ""
 
 
@@ -257,149 +398,52 @@ msgstr ""
 msgid "Bad arguments"
 msgid "Bad arguments"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:142
+#: dashboard/dashboard_modules/yandex_metrika.py:143
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
 msgid "Visitors"
 msgid "Visitors"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:143
+#: dashboard/dashboard_modules/yandex_metrika.py:144
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
 msgid "Visits"
 msgid "Visits"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:217
+#: dashboard/dashboard_modules/yandex_metrika.py:218
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
 "Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
 "counter</a> to start using widget"
 "counter</a> to start using widget"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:220
+#: dashboard/dashboard_modules/yandex_metrika.py:221
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
 "Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:243
+#: dashboard/dashboard_modules/yandex_metrika.py:249
 msgid "Yandex Metrika visitors totals"
 msgid "Yandex Metrika visitors totals"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:255
+#: dashboard/dashboard_modules/yandex_metrika.py:264
 msgid "visitors"
 msgid "visitors"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:256
+#: dashboard/dashboard_modules/yandex_metrika.py:265
 msgid "visits"
 msgid "visits"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:263
+#: dashboard/dashboard_modules/yandex_metrika.py:278
 msgid "Yandex Metrika visitors chart"
 msgid "Yandex Metrika visitors chart"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:302
+#: dashboard/dashboard_modules/yandex_metrika.py:330
 msgid "Yandex Metrika period visitors"
 msgid "Yandex Metrika period visitors"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/models.py:11 dashboard/modules.py:116
-#: templates/admin/base.html:192
-msgid "Title"
-msgstr ""
-
-#: dashboard/models.py:12
-msgid "module"
-msgstr ""
-
-#: dashboard/models.py:13 models.py:28
-msgid "application name"
-msgstr ""
-
-#: dashboard/models.py:14 models.py:14 models.py:29
-msgid "user"
-msgstr ""
-
-#: dashboard/models.py:15
-msgid "column"
-msgstr ""
-
-#: dashboard/models.py:16
-msgid "order"
-msgstr ""
-
-#: dashboard/models.py:17
-msgid "settings"
-msgstr ""
-
-#: dashboard/models.py:18
-msgid "children"
-msgstr ""
-
-#: dashboard/models.py:19
-msgid "collapsed"
-msgstr ""
-
-#: dashboard/models.py:22
-msgid "user dashboard module"
-msgstr ""
-
-#: dashboard/models.py:23
-msgid "user dashboard modules"
-msgstr ""
-
-#: dashboard/modules.py:115 models.py:12 templates/admin/base.html:194
-msgid "URL"
-msgstr ""
-
-#: dashboard/modules.py:117
-msgid "External link"
-msgstr ""
-
-#: dashboard/modules.py:121
-msgid "Layout"
-msgstr ""
-
-#: dashboard/modules.py:121
-msgid "Stacked"
-msgstr ""
-
-#: dashboard/modules.py:121
-msgid "Inline"
-msgstr ""
-
-#: dashboard/modules.py:125 dashboard/modules.py:131
-msgid "Links"
-msgstr ""
-
-#: dashboard/modules.py:130
-msgid "Link"
-msgstr ""
-
-#: dashboard/modules.py:201
-msgid "Models"
-msgstr ""
-
-#: dashboard/modules.py:238 dashboard/modules.py:309
-msgid "Items limit"
-msgstr ""
-
-#: dashboard/modules.py:310
-msgid "Feed URL"
-msgstr ""
-
-#: dashboard/modules.py:314
-msgid "RSS Feed"
-msgstr ""
-
-#: dashboard/modules.py:356
-msgid "You must install the FeedParser python module"
-msgstr ""
-
-#: dashboard/modules.py:361
-msgid "You must provide a valid feed URL"
-msgstr ""
-
 #: dashboard/templates/admin/app_index.html:32
 #: dashboard/templates/admin/app_index.html:32
 #: dashboard/templates/jet.dashboard/update_module.html:14
 #: dashboard/templates/jet.dashboard/update_module.html:14
-#: templates/admin/base.html:95 templates/admin/base.html.py:144
+#: templates/admin/base.html:117 templates/admin/base.html.py:173
 #: templates/admin/change_form.html:17 templates/admin/change_list.html:33
 #: templates/admin/change_form.html:17 templates/admin/change_list.html:33
 #: templates/admin/delete_confirmation.html:8
 #: templates/admin/delete_confirmation.html:8
 #: templates/admin/delete_selected_confirmation.html:8
 #: templates/admin/delete_selected_confirmation.html:8
@@ -446,14 +490,6 @@ msgstr ""
 msgid "Are you sure want to reset widgets?"
 msgid "Are you sure want to reset widgets?"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/templates/jet.dashboard/module.html:19
-#: dashboard/templates/jet.dashboard/modules/app_list.html:24
-#: dashboard/templates/jet.dashboard/modules/model_list.html:14
-#: dashboard/views.py:86 templates/admin/edit_inline/stacked.html:44
-#: templates/admin/edit_inline/tabular.html:39 templates/admin/index.html:40
-msgid "Change"
-msgstr ""
-
 #: dashboard/templates/jet.dashboard/module.html:22
 #: dashboard/templates/jet.dashboard/module.html:22
 #: templates/admin/delete_confirmation.html:12
 #: templates/admin/delete_confirmation.html:12
 #: templates/admin/related_widget_wrapper.html:24
 #: templates/admin/related_widget_wrapper.html:24
@@ -461,55 +497,22 @@ msgstr ""
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/templates/jet.dashboard/modules/app_list.html:7
-#: dashboard/templates/jet.dashboard/modules/app_list.html:10
-#: templates/admin/index.html:23 templates/admin/index.html.py:26
-#, python-format
-msgid "Models in the %(name)s application"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/feed.html:13
-#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
-#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
-#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
-#: dashboard/templates/jet.dashboard/modules/link_list.html:26
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
-msgid "Nothing to show"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
-msgid "Date"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
-#: templates/admin/index.html:75
-msgid "None available"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/recent_actions.html:29
-#: templates/admin/index.html:98
-msgid "Unknown content"
-msgstr ""
-
 #: dashboard/templates/jet.dashboard/update_module.html:35
 #: dashboard/templates/jet.dashboard/update_module.html:35
 #: templates/admin/change_form.html:62
 #: templates/admin/change_form.html:62
 msgid "General"
 msgid "General"
 msgstr ""
 msgstr ""
 
 
 #: dashboard/templates/jet.dashboard/update_module.html:56
 #: dashboard/templates/jet.dashboard/update_module.html:56
-#: templates/admin/change_list.html:61
+#: templates/admin/change_list.html:61 templates/admin/login.html:27
 #: templates/admin/edit_inline/stacked.html:8
 #: templates/admin/edit_inline/stacked.html:8
 #: templates/admin/edit_inline/tabular.html:10
 #: templates/admin/edit_inline/tabular.html:10
-#: templates/admin/includes/fieldset.html:9 templates/admin/login.html:27
+#: templates/admin/includes/fieldset.html:9
 #: templates/registration/password_change_form.html:21
 #: templates/registration/password_change_form.html:21
 msgid "Please correct the errors below."
 msgid "Please correct the errors below."
 msgstr ""
 msgstr ""
 
 
 #: dashboard/templates/jet.dashboard/update_module.html:126
 #: dashboard/templates/jet.dashboard/update_module.html:126
-#: templates/admin/base.html:214 templates/admin/base.html.py:221
+#: templates/admin/base.html:301 templates/admin/base.html.py:308
 #: templates/admin/edit_inline/stacked.html:21
 #: templates/admin/edit_inline/stacked.html:21
 #: templates/admin/edit_inline/stacked.html:75
 #: templates/admin/edit_inline/stacked.html:75
 #: templates/admin/edit_inline/tabular.html:100
 #: templates/admin/edit_inline/tabular.html:100
@@ -528,40 +531,37 @@ msgstr ""
 msgid "Save"
 msgid "Save"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/views.py:18
-msgid "Widget was successfully updated"
-msgstr ""
-
-#: dashboard/views.py:90 dashboard/views.py:91
-msgid "Items"
-msgstr ""
-
-#: dashboard/views.py:153
-msgid "Widget has been successfully added"
-msgstr ""
-
-#: models.py:13
-msgid "title"
-msgstr ""
-
-#: models.py:15 models.py:30
-msgid "date created"
+#: dashboard/templates/jet.dashboard/modules/app_list.html:7
+#: dashboard/templates/jet.dashboard/modules/app_list.html:10
+#: templates/admin/index.html:23 templates/admin/index.html.py:26
+#, python-format
+msgid "Models in the %(name)s application"
 msgstr ""
 msgstr ""
 
 
-#: models.py:18
-msgid "bookmark"
+#: dashboard/templates/jet.dashboard/modules/feed.html:13
+#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
+#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
+#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
+#: dashboard/templates/jet.dashboard/modules/link_list.html:26
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
+msgid "Nothing to show"
 msgstr ""
 msgstr ""
 
 
-#: models.py:19 templates/admin/base.html:207
-msgid "bookmarks"
+#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
+msgid "Date"
 msgstr ""
 msgstr ""
 
 
-#: models.py:33
-msgid "pinned application"
+#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
+#: templates/admin/index.html:75
+msgid "None available"
 msgstr ""
 msgstr ""
 
 
-#: models.py:34
-msgid "pinned applications"
+#: dashboard/templates/jet.dashboard/modules/recent_actions.html:29
+#: templates/admin/index.html:98
+msgid "Unknown content"
 msgstr ""
 msgstr ""
 
 
 #: templates/admin/actions.html:8
 #: templates/admin/actions.html:8
@@ -585,27 +585,35 @@ msgstr ""
 msgid "Clear selection"
 msgid "Clear selection"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:149
+#: templates/admin/base.html:80
+msgid "current theme"
+msgstr ""
+
+#: templates/admin/base.html:159
+msgid "back"
+msgstr ""
+
+#: templates/admin/base.html:180
 msgid "View site"
 msgid "View site"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:189 templates/admin/base.html.py:206
+#: templates/admin/base.html:188
+msgid "Documentation"
+msgstr ""
+
+#: templates/admin/base.html:276 templates/admin/base.html.py:293
 msgid "Add bookmark"
 msgid "Add bookmark"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:202
+#: templates/admin/base.html:289
 msgid "Delete bookmark"
 msgid "Delete bookmark"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:203
+#: templates/admin/base.html:290
 msgid "Are you sure want to delete this bookmark?"
 msgid "Are you sure want to delete this bookmark?"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:229
-msgid "Documentation"
-msgstr ""
-
-#: templates/admin/base.html:252
+#: templates/admin/base.html:333
 msgid "Application page"
 msgid "Application page"
 msgstr ""
 msgstr ""
 
 
@@ -713,19 +721,11 @@ msgid ""
 "following objects and their related items will be deleted:"
 "following objects and their related items will be deleted:"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/edit_inline/tabular.html:25
-msgid "Delete?"
-msgstr ""
-
 #: templates/admin/filter.html:6
 #: templates/admin/filter.html:6
 #, python-format
 #, python-format
 msgid "%(filter_title)s"
 msgid "%(filter_title)s"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/includes/object_delete_summary.html:2
-msgid "Summary"
-msgstr ""
-
 #: templates/admin/index.html:56
 #: templates/admin/index.html:56
 msgid "You don't have permission to edit anything."
 msgid "You don't have permission to edit anything."
 msgstr ""
 msgstr ""
@@ -807,6 +807,14 @@ msgstr ""
 msgid "Save and continue editing"
 msgid "Save and continue editing"
 msgstr ""
 msgstr ""
 
 
+#: templates/admin/edit_inline/tabular.html:25
+msgid "Delete?"
+msgstr ""
+
+#: templates/admin/includes/object_delete_summary.html:2
+msgid "Summary"
+msgstr ""
+
 #: templates/registration/logged_out.html:9
 #: templates/registration/logged_out.html:9
 msgid "Thanks for spending some quality time with the Web site today."
 msgid "Thanks for spending some quality time with the Web site today."
 msgstr ""
 msgstr ""

BIN
jet/locale/ru/LC_MESSAGES/django.mo


+ 283 - 277
jet/locale/ru/LC_MESSAGES/django.po

@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-09-11 12:45+0000\n"
+"POT-Creation-Date: 2015-12-28 13:32+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,176 +17,317 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
 
-#: dashboard/dashboard.py:159
+#: models.py:9 dashboard/modules.py:138 templates/admin/base.html:281
+msgid "URL"
+msgstr "URL"
+
+#: models.py:10
+msgid "title"
+msgstr ""
+
+#: models.py:11 models.py:26 dashboard/models.py:14
+msgid "user"
+msgstr ""
+
+#: models.py:12 models.py:27
+msgid "date created"
+msgstr ""
+
+#: models.py:15
+msgid "bookmark"
+msgstr ""
+
+#: models.py:16 templates/admin/base.html:294
+msgid "bookmarks"
+msgstr "закладки"
+
+#: models.py:25 dashboard/models.py:13
+msgid "application name"
+msgstr ""
+
+#: models.py:30
+msgid "pinned application"
+msgstr ""
+
+#: models.py:31
+msgid "pinned applications"
+msgstr ""
+
+#: dashboard/dashboard.py:207
 msgid "Quick links"
 msgid "Quick links"
 msgstr "Быстрые ссылки"
 msgstr "Быстрые ссылки"
 
 
-#: dashboard/dashboard.py:165
+#: dashboard/dashboard.py:213
 msgid "Return to site"
 msgid "Return to site"
 msgstr "Вернуться на сайт"
 msgstr "Вернуться на сайт"
 
 
-#: dashboard/dashboard.py:166 templates/admin/base.html:80
+#: dashboard/dashboard.py:214 templates/admin/base.html:102
 msgid "Change password"
 msgid "Change password"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:168 templates/admin/base.html:84
+#: dashboard/dashboard.py:216 templates/admin/base.html:106
 msgid "Log out"
 msgid "Log out"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/dashboard.py:176 dashboard/modules.py:160
-#: templates/admin/base.html:160 templates/admin/index.html:14
+#: dashboard/dashboard.py:224 dashboard/modules.py:268
+#: templates/admin/base.html:205 templates/admin/index.html:14
 msgid "Applications"
 msgid "Applications"
 msgstr "Приложения"
 msgstr "Приложения"
 
 
-#: dashboard/dashboard.py:184
+#: dashboard/dashboard.py:232
 msgid "Administration"
 msgid "Administration"
 msgstr "Администрирование"
 msgstr "Администрирование"
 
 
-#: dashboard/dashboard.py:192 dashboard/modules.py:242
+#: dashboard/dashboard.py:240 dashboard/modules.py:413
 #: templates/admin/index.html:68
 #: templates/admin/index.html:68
 msgid "Recent Actions"
 msgid "Recent Actions"
 msgstr "Последние действия"
 msgstr "Последние действия"
 
 
-#: dashboard/dashboard.py:200
+#: dashboard/dashboard.py:248
 msgid "Latest Django News"
 msgid "Latest Django News"
 msgstr "Новости от Django"
 msgstr "Новости от Django"
 
 
-#: dashboard/dashboard.py:209
+#: dashboard/dashboard.py:257
 msgid "Support"
 msgid "Support"
 msgstr "Поддержка"
 msgstr "Поддержка"
 
 
-#: dashboard/dashboard.py:212
+#: dashboard/dashboard.py:260
 msgid "Django documentation"
 msgid "Django documentation"
 msgstr "Документация по Django"
 msgstr "Документация по Django"
 
 
-#: dashboard/dashboard.py:217
+#: dashboard/dashboard.py:265
 msgid "Django \"django-users\" mailing list"
 msgid "Django \"django-users\" mailing list"
 msgstr "Гугл-группа \"django-users\""
 msgstr "Гугл-группа \"django-users\""
 
 
-#: dashboard/dashboard.py:222
+#: dashboard/dashboard.py:270
 msgid "Django irc channel"
 msgid "Django irc channel"
 msgstr "IRC канал Django"
 msgstr "IRC канал Django"
 
 
-#: dashboard/dashboard.py:237
+#: dashboard/dashboard.py:285
 msgid "Application models"
 msgid "Application models"
 msgstr "Модели приложения"
 msgstr "Модели приложения"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:143
-#: dashboard/dashboard_modules/yandex_metrika.py:101
+#: dashboard/models.py:11 dashboard/modules.py:139
+#: templates/admin/base.html:279
+msgid "Title"
+msgstr "Название"
+
+#: dashboard/models.py:12
+msgid "module"
+msgstr ""
+
+#: dashboard/models.py:15
+msgid "column"
+msgstr ""
+
+#: dashboard/models.py:16
+msgid "order"
+msgstr ""
+
+#: dashboard/models.py:17
+msgid "settings"
+msgstr ""
+
+#: dashboard/models.py:18
+msgid "children"
+msgstr ""
+
+#: dashboard/models.py:19
+msgid "collapsed"
+msgstr ""
+
+#: dashboard/models.py:22
+msgid "user dashboard module"
+msgstr ""
+
+#: dashboard/models.py:23
+msgid "user dashboard modules"
+msgstr ""
+
+#: dashboard/modules.py:140
+msgid "External link"
+msgstr "Внешняя ссылка"
+
+#: dashboard/modules.py:144
+msgid "Layout"
+msgstr "Отображение"
+
+#: dashboard/modules.py:144
+msgid "Stacked"
+msgstr "Списком"
+
+#: dashboard/modules.py:144
+msgid "Inline"
+msgstr "В строчку"
+
+#: dashboard/modules.py:190 dashboard/modules.py:214
+msgid "Links"
+msgstr "Ссылки"
+
+#: dashboard/modules.py:213
+msgid "Link"
+msgstr "Ссылка"
+
+#: dashboard/modules.py:340
+msgid "Models"
+msgstr "Модели"
+
+#: dashboard/modules.py:383 dashboard/modules.py:490
+msgid "Items limit"
+msgstr "Количество элементов"
+
+#: dashboard/modules.py:491
+msgid "Feed URL"
+msgstr "URL потока"
+
+#: dashboard/modules.py:522
+msgid "RSS Feed"
+msgstr "RSS поток"
+
+#: dashboard/modules.py:568
+msgid "You must install the FeedParser python module"
+msgstr "Необходимо установить python модуль FeedParser"
+
+#: dashboard/modules.py:573
+msgid "You must provide a valid feed URL"
+msgstr "Необходимо указать корректный URL потока"
+
+#: dashboard/views.py:17
+msgid "Widget was successfully updated"
+msgstr "Виджет успешно изменен"
+
+#: dashboard/views.py:85 dashboard/templates/jet.dashboard/module.html:19
+#: dashboard/templates/jet.dashboard/modules/app_list.html:24
+#: dashboard/templates/jet.dashboard/modules/model_list.html:14
+#: templates/admin/index.html:40 templates/admin/edit_inline/stacked.html:44
+#: templates/admin/edit_inline/tabular.html:39
+msgid "Change"
+msgstr ""
+
+#: dashboard/views.py:89 dashboard/views.py:90
+msgid "Items"
+msgstr "Элементы"
+
+#: dashboard/views.py:152
+msgid "Widget has been successfully added"
+msgstr "Виджет успешно добавлен"
+
+#: dashboard/dashboard_modules/google_analytics.py:144
+#: dashboard/dashboard_modules/yandex_metrika.py:102
 msgid "Revoke access"
 msgid "Revoke access"
 msgstr "Убрать доступ"
 msgstr "Убрать доступ"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:148
-#: dashboard/dashboard_modules/yandex_metrika.py:106
+#: dashboard/dashboard_modules/google_analytics.py:149
+#: dashboard/dashboard_modules/yandex_metrika.py:107
 msgid "Grant access"
 msgid "Grant access"
 msgstr "Предоставить доступ"
 msgstr "Предоставить доступ"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:161
-#: dashboard/dashboard_modules/yandex_metrika.py:116
+#: dashboard/dashboard_modules/google_analytics.py:162
+#: dashboard/dashboard_modules/yandex_metrika.py:117
 msgid "Access"
 msgid "Access"
 msgstr "Доступ"
 msgstr "Доступ"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:162
-#: dashboard/dashboard_modules/yandex_metrika.py:117
+#: dashboard/dashboard_modules/google_analytics.py:163
+#: dashboard/dashboard_modules/yandex_metrika.py:118
 msgid "Counter"
 msgid "Counter"
 msgstr "Счетчик"
 msgstr "Счетчик"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:163
-#: dashboard/dashboard_modules/yandex_metrika.py:118
+#: dashboard/dashboard_modules/google_analytics.py:164
+#: dashboard/dashboard_modules/yandex_metrika.py:119
 msgid "Statistics period"
 msgid "Statistics period"
 msgstr "Статистика за период"
 msgstr "Статистика за период"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:164
-#: dashboard/dashboard_modules/yandex_metrika.py:119
+#: dashboard/dashboard_modules/google_analytics.py:165
+#: dashboard/dashboard_modules/yandex_metrika.py:120
 msgid "Today"
 msgid "Today"
 msgstr "Сегодня"
 msgstr "Сегодня"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:165
-#: dashboard/dashboard_modules/yandex_metrika.py:120
+#: dashboard/dashboard_modules/google_analytics.py:166
+#: dashboard/dashboard_modules/yandex_metrika.py:121
 msgid "Last week"
 msgid "Last week"
 msgstr "Последняя неделя"
 msgstr "Последняя неделя"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:166
-#: dashboard/dashboard_modules/yandex_metrika.py:121
+#: dashboard/dashboard_modules/google_analytics.py:167
+#: dashboard/dashboard_modules/yandex_metrika.py:122
 msgid "Last month"
 msgid "Last month"
 msgstr "Последний месяц"
 msgstr "Последний месяц"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:167
-#: dashboard/dashboard_modules/yandex_metrika.py:122
+#: dashboard/dashboard_modules/google_analytics.py:168
+#: dashboard/dashboard_modules/yandex_metrika.py:123
 msgid "Last quarter"
 msgid "Last quarter"
 msgstr "Последний квартал"
 msgstr "Последний квартал"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:168
-#: dashboard/dashboard_modules/yandex_metrika.py:123
+#: dashboard/dashboard_modules/google_analytics.py:169
+#: dashboard/dashboard_modules/yandex_metrika.py:124
 msgid "Last year"
 msgid "Last year"
 msgstr "Последний год"
 msgstr "Последний год"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:178
-#: dashboard/dashboard_modules/yandex_metrika.py:133
+#: dashboard/dashboard_modules/google_analytics.py:179
+#: dashboard/dashboard_modules/yandex_metrika.py:134
 msgid "none"
 msgid "none"
 msgstr "не указано"
 msgstr "не указано"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:181
-#: dashboard/dashboard_modules/yandex_metrika.py:136
+#: dashboard/dashboard_modules/google_analytics.py:182
+#: dashboard/dashboard_modules/yandex_metrika.py:137
 msgid "grant access first"
 msgid "grant access first"
 msgstr "сначала предоставьте доступ"
 msgstr "сначала предоставьте доступ"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:181
-#: dashboard/dashboard_modules/yandex_metrika.py:136
+#: dashboard/dashboard_modules/google_analytics.py:182
+#: dashboard/dashboard_modules/yandex_metrika.py:137
 msgid "counters loading failed"
 msgid "counters loading failed"
 msgstr "не удалось загрузить счетчики"
 msgstr "не удалось загрузить счетчики"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:186
-#: dashboard/dashboard_modules/yandex_metrika.py:141
+#: dashboard/dashboard_modules/google_analytics.py:187
+#: dashboard/dashboard_modules/yandex_metrika.py:142
 msgid "Show"
 msgid "Show"
 msgstr "Показывать"
 msgstr "Показывать"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:187
+#: dashboard/dashboard_modules/google_analytics.py:188
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:15
 msgid "Users"
 msgid "Users"
 msgstr "Пользователи"
 msgstr "Пользователи"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:188
+#: dashboard/dashboard_modules/google_analytics.py:189
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:16
 msgid "Sessions"
 msgid "Sessions"
 msgstr "Сессии"
 msgstr "Сессии"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:189
-#: dashboard/dashboard_modules/yandex_metrika.py:144
+#: dashboard/dashboard_modules/google_analytics.py:190
+#: dashboard/dashboard_modules/yandex_metrika.py:145
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:17
 msgid "Views"
 msgid "Views"
 msgstr "Просмотры"
 msgstr "Просмотры"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:191
-#: dashboard/dashboard_modules/google_analytics.py:199
-#: dashboard/dashboard_modules/yandex_metrika.py:146
-#: dashboard/dashboard_modules/yandex_metrika.py:154
-msgid "Group"
-msgstr "Группировать"
-
 #: dashboard/dashboard_modules/google_analytics.py:192
 #: dashboard/dashboard_modules/google_analytics.py:192
 #: dashboard/dashboard_modules/google_analytics.py:200
 #: dashboard/dashboard_modules/google_analytics.py:200
 #: dashboard/dashboard_modules/yandex_metrika.py:147
 #: dashboard/dashboard_modules/yandex_metrika.py:147
 #: dashboard/dashboard_modules/yandex_metrika.py:155
 #: dashboard/dashboard_modules/yandex_metrika.py:155
-msgid "By day"
-msgstr "По дням"
+msgid "Group"
+msgstr "Группировать"
 
 
 #: dashboard/dashboard_modules/google_analytics.py:193
 #: dashboard/dashboard_modules/google_analytics.py:193
 #: dashboard/dashboard_modules/google_analytics.py:201
 #: dashboard/dashboard_modules/google_analytics.py:201
 #: dashboard/dashboard_modules/yandex_metrika.py:148
 #: dashboard/dashboard_modules/yandex_metrika.py:148
 #: dashboard/dashboard_modules/yandex_metrika.py:156
 #: dashboard/dashboard_modules/yandex_metrika.py:156
-msgid "By week"
-msgstr "По неделям"
+msgid "By day"
+msgstr "По дням"
 
 
 #: dashboard/dashboard_modules/google_analytics.py:194
 #: dashboard/dashboard_modules/google_analytics.py:194
 #: dashboard/dashboard_modules/google_analytics.py:202
 #: dashboard/dashboard_modules/google_analytics.py:202
 #: dashboard/dashboard_modules/yandex_metrika.py:149
 #: dashboard/dashboard_modules/yandex_metrika.py:149
 #: dashboard/dashboard_modules/yandex_metrika.py:157
 #: dashboard/dashboard_modules/yandex_metrika.py:157
+msgid "By week"
+msgstr "По неделям"
+
+#: dashboard/dashboard_modules/google_analytics.py:195
+#: dashboard/dashboard_modules/google_analytics.py:203
+#: dashboard/dashboard_modules/yandex_metrika.py:150
+#: dashboard/dashboard_modules/yandex_metrika.py:158
 msgid "By month"
 msgid "By month"
 msgstr "По месяцам"
 msgstr "По месяцам"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:275
+#: dashboard/dashboard_modules/google_analytics.py:276
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">attach Google account and choose Google Analytics "
 "Please <a href=\"%s\">attach Google account and choose Google Analytics "
@@ -195,7 +336,7 @@ msgstr ""
 "Пожалуйста <a href=\"%s\">прикрепите аккаунт Google и выберите счетчик "
 "Пожалуйста <a href=\"%s\">прикрепите аккаунт Google и выберите счетчик "
 "Google Analytics</a> для виджета"
 "Google Analytics</a> для виджета"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:278
+#: dashboard/dashboard_modules/google_analytics.py:279
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">select Google Analytics counter</a> to start using "
 "Please <a href=\"%s\">select Google Analytics counter</a> to start using "
@@ -203,50 +344,50 @@ msgid ""
 msgstr ""
 msgstr ""
 "Пожалуйста <a href=\"%s\">выберите счетчик Google Analytics</a> для виджета"
 "Пожалуйста <a href=\"%s\">выберите счетчик Google Analytics</a> для виджета"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:297
+#: dashboard/dashboard_modules/google_analytics.py:298
 #: dashboard/dashboard_modules/google_analytics_views.py:42
 #: dashboard/dashboard_modules/google_analytics_views.py:42
-#: dashboard/dashboard_modules/yandex_metrika.py:234
+#: dashboard/dashboard_modules/yandex_metrika.py:235
 #: dashboard/dashboard_modules/yandex_metrika_views.py:37
 #: dashboard/dashboard_modules/yandex_metrika_views.py:37
 msgid "API request failed."
 msgid "API request failed."
 msgstr "Ошибка запроса к API."
 msgstr "Ошибка запроса к API."
 
 
-#: dashboard/dashboard_modules/google_analytics.py:299
-#: dashboard/dashboard_modules/yandex_metrika.py:236
+#: dashboard/dashboard_modules/google_analytics.py:300
+#: dashboard/dashboard_modules/yandex_metrika.py:237
 #, python-format
 #, python-format
 msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
 msgid " Try to <a href=\"%s\">revoke and grant access</a> again"
 msgstr " Попробуйте <a href=\"%s\">убрать и предоставить доступ</a> заново"
 msgstr " Попробуйте <a href=\"%s\">убрать и предоставить доступ</a> заново"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:304
+#: dashboard/dashboard_modules/google_analytics.py:310
 msgid "Google Analytics visitors totals"
 msgid "Google Analytics visitors totals"
 msgstr "Данные о посещениях Google Analytics"
 msgstr "Данные о посещениях Google Analytics"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:316
+#: dashboard/dashboard_modules/google_analytics.py:325
 msgid "users"
 msgid "users"
 msgstr "пользователи"
 msgstr "пользователи"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:317
+#: dashboard/dashboard_modules/google_analytics.py:326
 msgid "sessions"
 msgid "sessions"
 msgstr "сессии"
 msgstr "сессии"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:318
-#: dashboard/dashboard_modules/yandex_metrika.py:257
+#: dashboard/dashboard_modules/google_analytics.py:327
+#: dashboard/dashboard_modules/yandex_metrika.py:266
 msgid "views"
 msgid "views"
 msgstr "просмотры"
 msgstr "просмотры"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:320
-#: dashboard/dashboard_modules/google_analytics.py:365
-#: dashboard/dashboard_modules/google_analytics.py:404
-#: dashboard/dashboard_modules/yandex_metrika.py:259
-#: dashboard/dashboard_modules/yandex_metrika.py:298
-#: dashboard/dashboard_modules/yandex_metrika.py:331
+#: dashboard/dashboard_modules/google_analytics.py:329
+#: dashboard/dashboard_modules/google_analytics.py:387
+#: dashboard/dashboard_modules/google_analytics.py:437
+#: dashboard/dashboard_modules/yandex_metrika.py:268
+#: dashboard/dashboard_modules/yandex_metrika.py:320
+#: dashboard/dashboard_modules/yandex_metrika.py:364
 msgid "Bad server response"
 msgid "Bad server response"
 msgstr "Некорректный ответ сервера"
 msgstr "Некорректный ответ сервера"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:324
+#: dashboard/dashboard_modules/google_analytics.py:339
 msgid "Google Analytics visitors chart"
 msgid "Google Analytics visitors chart"
 msgstr "График посещений Google Analytics"
 msgstr "График посещений Google Analytics"
 
 
-#: dashboard/dashboard_modules/google_analytics.py:369
+#: dashboard/dashboard_modules/google_analytics.py:397
 msgid "Google Analytics period visitors"
 msgid "Google Analytics period visitors"
 msgstr "Посещения Google Analytics за период"
 msgstr "Посещения Google Analytics за период"
 
 
@@ -262,17 +403,17 @@ msgstr "Модуль не найден"
 msgid "Bad arguments"
 msgid "Bad arguments"
 msgstr "Некорректные аргументы"
 msgstr "Некорректные аргументы"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:142
+#: dashboard/dashboard_modules/yandex_metrika.py:143
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:15
 msgid "Visitors"
 msgid "Visitors"
 msgstr "Посетители"
 msgstr "Посетители"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:143
+#: dashboard/dashboard_modules/yandex_metrika.py:144
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
 #: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:16
 msgid "Visits"
 msgid "Visits"
 msgstr "Визиты"
 msgstr "Визиты"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:217
+#: dashboard/dashboard_modules/yandex_metrika.py:218
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
 "Please <a href=\"%s\">attach Yandex account and choose Yandex Metrika "
@@ -281,133 +422,36 @@ msgstr ""
 "Пожалуйста <a href=\"%s\">прикрепите аккаунт Яндекс и выберите счетчик "
 "Пожалуйста <a href=\"%s\">прикрепите аккаунт Яндекс и выберите счетчик "
 "Яндекс Метрики</a> для виджета"
 "Яндекс Метрики</a> для виджета"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:220
+#: dashboard/dashboard_modules/yandex_metrika.py:221
 #, python-format
 #, python-format
 msgid ""
 msgid ""
 "Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
 "Please <a href=\"%s\">select Yandex Metrika counter</a> to start using widget"
 msgstr ""
 msgstr ""
 "Пожалуйста <a href=\"%s\">выберите счетчик Яндекс Метрики</a> для виджета"
 "Пожалуйста <a href=\"%s\">выберите счетчик Яндекс Метрики</a> для виджета"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:243
+#: dashboard/dashboard_modules/yandex_metrika.py:249
 msgid "Yandex Metrika visitors totals"
 msgid "Yandex Metrika visitors totals"
 msgstr "Данные о посещениях Яндекс Метрики"
 msgstr "Данные о посещениях Яндекс Метрики"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:255
+#: dashboard/dashboard_modules/yandex_metrika.py:264
 msgid "visitors"
 msgid "visitors"
 msgstr "посетители"
 msgstr "посетители"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:256
+#: dashboard/dashboard_modules/yandex_metrika.py:265
 msgid "visits"
 msgid "visits"
 msgstr "визиты"
 msgstr "визиты"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:263
+#: dashboard/dashboard_modules/yandex_metrika.py:278
 msgid "Yandex Metrika visitors chart"
 msgid "Yandex Metrika visitors chart"
 msgstr "График посещений Яндекс Метрики"
 msgstr "График посещений Яндекс Метрики"
 
 
-#: dashboard/dashboard_modules/yandex_metrika.py:302
+#: dashboard/dashboard_modules/yandex_metrika.py:330
 msgid "Yandex Metrika period visitors"
 msgid "Yandex Metrika period visitors"
 msgstr "Посещения Яндекс Метрики за период"
 msgstr "Посещения Яндекс Метрики за период"
 
 
-#: dashboard/models.py:11 dashboard/modules.py:116
-#: templates/admin/base.html:192
-msgid "Title"
-msgstr "Название"
-
-#: dashboard/models.py:12
-msgid "module"
-msgstr ""
-
-#: dashboard/models.py:13 models.py:28
-msgid "application name"
-msgstr ""
-
-#: dashboard/models.py:14 models.py:14 models.py:29
-msgid "user"
-msgstr ""
-
-#: dashboard/models.py:15
-msgid "column"
-msgstr ""
-
-#: dashboard/models.py:16
-msgid "order"
-msgstr ""
-
-#: dashboard/models.py:17
-msgid "settings"
-msgstr ""
-
-#: dashboard/models.py:18
-msgid "children"
-msgstr ""
-
-#: dashboard/models.py:19
-msgid "collapsed"
-msgstr ""
-
-#: dashboard/models.py:22
-msgid "user dashboard module"
-msgstr ""
-
-#: dashboard/models.py:23
-msgid "user dashboard modules"
-msgstr ""
-
-#: dashboard/modules.py:115 models.py:12 templates/admin/base.html:194
-msgid "URL"
-msgstr "URL"
-
-#: dashboard/modules.py:117
-msgid "External link"
-msgstr "Внешняя ссылка"
-
-#: dashboard/modules.py:121
-msgid "Layout"
-msgstr "Отображение"
-
-#: dashboard/modules.py:121
-msgid "Stacked"
-msgstr "Списком"
-
-#: dashboard/modules.py:121
-msgid "Inline"
-msgstr "В строчку"
-
-#: dashboard/modules.py:125 dashboard/modules.py:131
-msgid "Links"
-msgstr "Ссылки"
-
-#: dashboard/modules.py:130
-msgid "Link"
-msgstr "Ссылка"
-
-#: dashboard/modules.py:201
-msgid "Models"
-msgstr "Модели"
-
-#: dashboard/modules.py:238 dashboard/modules.py:309
-msgid "Items limit"
-msgstr "Количество элементов"
-
-#: dashboard/modules.py:310
-msgid "Feed URL"
-msgstr "URL потока"
-
-#: dashboard/modules.py:314
-msgid "RSS Feed"
-msgstr "RSS поток"
-
-#: dashboard/modules.py:356
-msgid "You must install the FeedParser python module"
-msgstr "Необходимо установить python модуль FeedParser"
-
-#: dashboard/modules.py:361
-msgid "You must provide a valid feed URL"
-msgstr "Необходимо указать корректный URL потока"
-
 #: dashboard/templates/admin/app_index.html:32
 #: dashboard/templates/admin/app_index.html:32
 #: dashboard/templates/jet.dashboard/update_module.html:14
 #: dashboard/templates/jet.dashboard/update_module.html:14
-#: templates/admin/base.html:95 templates/admin/base.html.py:144
+#: templates/admin/base.html:117 templates/admin/base.html.py:173
 #: templates/admin/change_form.html:17 templates/admin/change_list.html:33
 #: templates/admin/change_form.html:17 templates/admin/change_list.html:33
 #: templates/admin/delete_confirmation.html:8
 #: templates/admin/delete_confirmation.html:8
 #: templates/admin/delete_selected_confirmation.html:8
 #: templates/admin/delete_selected_confirmation.html:8
@@ -454,14 +498,6 @@ msgstr "Сбросить виджеты"
 msgid "Are you sure want to reset widgets?"
 msgid "Are you sure want to reset widgets?"
 msgstr "Вы точно хотите сбросить виджеты?"
 msgstr "Вы точно хотите сбросить виджеты?"
 
 
-#: dashboard/templates/jet.dashboard/module.html:19
-#: dashboard/templates/jet.dashboard/modules/app_list.html:24
-#: dashboard/templates/jet.dashboard/modules/model_list.html:14
-#: dashboard/views.py:86 templates/admin/edit_inline/stacked.html:44
-#: templates/admin/edit_inline/tabular.html:39 templates/admin/index.html:40
-msgid "Change"
-msgstr ""
-
 #: dashboard/templates/jet.dashboard/module.html:22
 #: dashboard/templates/jet.dashboard/module.html:22
 #: templates/admin/delete_confirmation.html:12
 #: templates/admin/delete_confirmation.html:12
 #: templates/admin/related_widget_wrapper.html:24
 #: templates/admin/related_widget_wrapper.html:24
@@ -469,55 +505,22 @@ msgstr ""
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/templates/jet.dashboard/modules/app_list.html:7
-#: dashboard/templates/jet.dashboard/modules/app_list.html:10
-#: templates/admin/index.html:23 templates/admin/index.html.py:26
-#, python-format
-msgid "Models in the %(name)s application"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/feed.html:13
-#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
-#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
-#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
-#: dashboard/templates/jet.dashboard/modules/link_list.html:26
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
-msgid "Nothing to show"
-msgstr "Содержимое отсутствует"
-
-#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
-#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
-msgid "Date"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
-#: templates/admin/index.html:75
-msgid "None available"
-msgstr ""
-
-#: dashboard/templates/jet.dashboard/modules/recent_actions.html:29
-#: templates/admin/index.html:98
-msgid "Unknown content"
-msgstr ""
-
 #: dashboard/templates/jet.dashboard/update_module.html:35
 #: dashboard/templates/jet.dashboard/update_module.html:35
 #: templates/admin/change_form.html:62
 #: templates/admin/change_form.html:62
 msgid "General"
 msgid "General"
 msgstr "Общее"
 msgstr "Общее"
 
 
 #: dashboard/templates/jet.dashboard/update_module.html:56
 #: dashboard/templates/jet.dashboard/update_module.html:56
-#: templates/admin/change_list.html:61
+#: templates/admin/change_list.html:61 templates/admin/login.html:27
 #: templates/admin/edit_inline/stacked.html:8
 #: templates/admin/edit_inline/stacked.html:8
 #: templates/admin/edit_inline/tabular.html:10
 #: templates/admin/edit_inline/tabular.html:10
-#: templates/admin/includes/fieldset.html:9 templates/admin/login.html:27
+#: templates/admin/includes/fieldset.html:9
 #: templates/registration/password_change_form.html:21
 #: templates/registration/password_change_form.html:21
 msgid "Please correct the errors below."
 msgid "Please correct the errors below."
 msgstr ""
 msgstr ""
 
 
 #: dashboard/templates/jet.dashboard/update_module.html:126
 #: dashboard/templates/jet.dashboard/update_module.html:126
-#: templates/admin/base.html:214 templates/admin/base.html.py:221
+#: templates/admin/base.html:301 templates/admin/base.html.py:308
 #: templates/admin/edit_inline/stacked.html:21
 #: templates/admin/edit_inline/stacked.html:21
 #: templates/admin/edit_inline/stacked.html:75
 #: templates/admin/edit_inline/stacked.html:75
 #: templates/admin/edit_inline/tabular.html:100
 #: templates/admin/edit_inline/tabular.html:100
@@ -536,40 +539,37 @@ msgstr ""
 msgid "Save"
 msgid "Save"
 msgstr ""
 msgstr ""
 
 
-#: dashboard/views.py:18
-msgid "Widget was successfully updated"
-msgstr "Виджет успешно изменен"
-
-#: dashboard/views.py:90 dashboard/views.py:91
-msgid "Items"
-msgstr "Элементы"
-
-#: dashboard/views.py:153
-msgid "Widget has been successfully added"
-msgstr "Виджет успешно добавлен"
-
-#: models.py:13
-msgid "title"
+#: dashboard/templates/jet.dashboard/modules/app_list.html:7
+#: dashboard/templates/jet.dashboard/modules/app_list.html:10
+#: templates/admin/index.html:23 templates/admin/index.html.py:26
+#, python-format
+msgid "Models in the %(name)s application"
 msgstr ""
 msgstr ""
 
 
-#: models.py:15 models.py:30
-msgid "date created"
-msgstr ""
+#: dashboard/templates/jet.dashboard/modules/feed.html:13
+#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:34
+#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_chart.html:30
+#: dashboard/templates/jet.dashboard/modules/google_analytics_visitors_totals.html:23
+#: dashboard/templates/jet.dashboard/modules/link_list.html:26
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:34
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_chart.html:30
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_visitors_totals.html:23
+msgid "Nothing to show"
+msgstr "Содержимое отсутствует"
 
 
-#: models.py:18
-msgid "bookmark"
+#: dashboard/templates/jet.dashboard/modules/google_analytics_period_visitors.html:14
+#: dashboard/templates/jet.dashboard/modules/yandex_metrika_period_visitors.html:14
+msgid "Date"
 msgstr ""
 msgstr ""
 
 
-#: models.py:19 templates/admin/base.html:207
-msgid "bookmarks"
-msgstr "закладки"
-
-#: models.py:33
-msgid "pinned application"
+#: dashboard/templates/jet.dashboard/modules/recent_actions.html:6
+#: templates/admin/index.html:75
+msgid "None available"
 msgstr ""
 msgstr ""
 
 
-#: models.py:34
-msgid "pinned applications"
+#: dashboard/templates/jet.dashboard/modules/recent_actions.html:29
+#: templates/admin/index.html:98
+msgid "Unknown content"
 msgstr ""
 msgstr ""
 
 
 #: templates/admin/actions.html:8
 #: templates/admin/actions.html:8
@@ -593,33 +593,40 @@ msgstr ""
 msgid "Clear selection"
 msgid "Clear selection"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/base.html:149
+#: templates/admin/base.html:80
+msgid "current theme"
+msgstr ""
+
+#: templates/admin/base.html:159
+msgid "back"
+msgstr "назад"
+
+#: templates/admin/base.html:180
 msgid "View site"
 msgid "View site"
 msgstr "Открыть сайт"
 msgstr "Открыть сайт"
 
 
-#: templates/admin/base.html:189 templates/admin/base.html.py:206
+#: templates/admin/base.html:188
+msgid "Documentation"
+msgstr ""
+
+#: templates/admin/base.html:276 templates/admin/base.html.py:293
 msgid "Add bookmark"
 msgid "Add bookmark"
 msgstr "Добавить закладку"
 msgstr "Добавить закладку"
 
 
-#: templates/admin/base.html:202
+#: templates/admin/base.html:289
 msgid "Delete bookmark"
 msgid "Delete bookmark"
 msgstr "Удалить закладку"
 msgstr "Удалить закладку"
 
 
-#: templates/admin/base.html:203
+#: templates/admin/base.html:290
 msgid "Are you sure want to delete this bookmark?"
 msgid "Are you sure want to delete this bookmark?"
 msgstr "Вы точно хотите удалить эту закладку?"
 msgstr "Вы точно хотите удалить эту закладку?"
 
 
-#: templates/admin/base.html:229
-msgid "Documentation"
-msgstr ""
-
-#: templates/admin/base.html:252
+#: templates/admin/base.html:333
 msgid "Application page"
 msgid "Application page"
 msgstr "Страница приложения"
 msgstr "Страница приложения"
 
 
 #: templates/admin/base_site.html:3
 #: templates/admin/base_site.html:3
 #, fuzzy
 #, fuzzy
-#| msgid "Django irc channel"
 msgid "Django site admin"
 msgid "Django site admin"
 msgstr "IRC канал Django"
 msgstr "IRC канал Django"
 
 
@@ -723,19 +730,11 @@ msgid ""
 "following objects and their related items will be deleted:"
 "following objects and their related items will be deleted:"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/edit_inline/tabular.html:25
-msgid "Delete?"
-msgstr ""
-
 #: templates/admin/filter.html:6
 #: templates/admin/filter.html:6
 #, python-format
 #, python-format
 msgid "%(filter_title)s"
 msgid "%(filter_title)s"
 msgstr ""
 msgstr ""
 
 
-#: templates/admin/includes/object_delete_summary.html:2
-msgid "Summary"
-msgstr ""
-
 #: templates/admin/index.html:56
 #: templates/admin/index.html:56
 msgid "You don't have permission to edit anything."
 msgid "You don't have permission to edit anything."
 msgstr ""
 msgstr ""
@@ -762,7 +761,6 @@ msgstr ""
 
 
 #: templates/admin/object_history.html:23
 #: templates/admin/object_history.html:23
 #, fuzzy
 #, fuzzy
-#| msgid "Applications"
 msgid "Action"
 msgid "Action"
 msgstr "Приложения"
 msgstr "Приложения"
 
 
@@ -779,17 +777,17 @@ msgstr ""
 #: templates/admin/related_widget_wrapper.html:8
 #: templates/admin/related_widget_wrapper.html:8
 #, python-format
 #, python-format
 msgid "Change selected %(model)s"
 msgid "Change selected %(model)s"
-msgstr ""
+msgstr "Изменить выбранный объект типа %(model)s"
 
 
 #: templates/admin/related_widget_wrapper.html:15
 #: templates/admin/related_widget_wrapper.html:15
 #, python-format
 #, python-format
 msgid "Add another %(model)s"
 msgid "Add another %(model)s"
-msgstr ""
+msgstr "Добавить ещё один объект типа %(model)s"
 
 
 #: templates/admin/related_widget_wrapper.html:22
 #: templates/admin/related_widget_wrapper.html:22
 #, python-format
 #, python-format
 msgid "Delete selected %(model)s"
 msgid "Delete selected %(model)s"
-msgstr ""
+msgstr "Удалить выбранный объект типа %(model)s"
 
 
 #: templates/admin/search_form.html:6 templates/admin/search_form.html:17
 #: templates/admin/search_form.html:6 templates/admin/search_form.html:17
 msgid "Search"
 msgid "Search"
@@ -820,6 +818,14 @@ msgstr ""
 msgid "Save and continue editing"
 msgid "Save and continue editing"
 msgstr ""
 msgstr ""
 
 
+#: templates/admin/edit_inline/tabular.html:25
+msgid "Delete?"
+msgstr ""
+
+#: templates/admin/includes/object_delete_summary.html:2
+msgid "Summary"
+msgstr ""
+
 #: templates/registration/logged_out.html:9
 #: templates/registration/logged_out.html:9
 msgid "Thanks for spending some quality time with the Web site today."
 msgid "Thanks for spending some quality time with the Web site today."
 msgstr ""
 msgstr ""

+ 0 - 0
jet/management/__init__.py


+ 0 - 0
jet/management/commands/__init__.py


+ 39 - 0
jet/management/commands/jet_custom_apps_example.py

@@ -0,0 +1,39 @@
+from django.core.management.base import NoArgsCommand
+from jet.utils import get_app_list
+
+
+class Command(NoArgsCommand):
+    help = 'Generates example of JET custom apps setting'
+    item_order = 0
+
+    def handle_noargs(self, **options):
+        class User:
+            is_active = True
+            is_staff = True
+
+            def has_module_perms(self, app):
+                return True
+
+            def has_perm(self, object):
+                return True
+
+        class Request:
+            user = User()
+
+        app_list = get_app_list({
+            'request': Request(),
+            'user': None
+        })
+
+        self.stdout.write('# Add this to your settings.py to customize applications and models list')
+        self.stdout.write('JET_SIDE_MENU_CUSTOM_APPS = [')
+
+        for app in app_list:
+            app_label = app.get('app_label', app.get('name'))
+
+            self.stdout.write('    (\'%s\', [' % app_label)
+            for model in app['models']:
+                self.stdout.write('        \'%s\',' % model['object_name'])
+            self.stdout.write('    ]),')
+
+        self.stdout.write(']')

+ 0 - 8
jet/ordered_set.py

@@ -57,11 +57,3 @@ class OrderedSet(collections.MutableSet):
         if isinstance(other, OrderedSet):
         if isinstance(other, OrderedSet):
             return len(self) == len(other) and list(self) == list(other)
             return len(self) == len(other) and list(self) == list(other)
         return set(self) == set(other)
         return set(self) == set(other)
-
-
-if __name__ == '__main__':
-    s = OrderedSet('abracadaba')
-    t = OrderedSet('simsalabim')
-    print(s | t)
-    print(s & t)
-    print(s - t)

+ 4 - 0
jet/settings.py

@@ -3,3 +3,7 @@ from django.conf import settings
 # Theme
 # Theme
 JET_DEFAULT_THEME = getattr(settings, 'JET_DEFAULT_THEME', 'default')
 JET_DEFAULT_THEME = getattr(settings, 'JET_DEFAULT_THEME', 'default')
 JET_THEMES = getattr(settings, 'JET_THEMES', [])
 JET_THEMES = getattr(settings, 'JET_THEMES', [])
+
+# Side menu
+JET_SIDE_MENU_COMPACT = getattr(settings, 'JET_SIDE_MENU_COMPACT', False)
+JET_SIDE_MENU_CUSTOM_APPS = getattr(settings, 'JET_SIDE_MENU_CUSTOM_APPS', None)

+ 0 - 0
jet/static/admin/css/changelists.css


+ 0 - 1
jet/static/admin/js/SelectFilter2.min.js

@@ -1 +0,0 @@
-var SelectFilter={init:function(e,t,n,r){}};

+ 0 - 1
jet/static/admin/js/admin/DateTimeShortcuts.min.js

@@ -1 +0,0 @@
-

+ 169 - 0
jet/static/admin/js/admin/RelatedObjectLookups.js

@@ -0,0 +1,169 @@
+// Handles related-objects functionality: lookup link for raw_id_fields
+// and Add Another links.
+
+function html_unescape(text) {
+    // Unescape a string that was escaped using django.utils.html.escape.
+    text = text.replace(/&lt;/g, '<');
+    text = text.replace(/&gt;/g, '>');
+    text = text.replace(/&quot;/g, '"');
+    text = text.replace(/&#39;/g, "'");
+    text = text.replace(/&amp;/g, '&');
+    return text;
+}
+
+// IE doesn't accept periods or dashes in the window name, but the element IDs
+// we use to generate popup window names may contain them, therefore we map them
+// to allowed characters in a reversible way so that we can locate the correct
+// element when the popup window is dismissed.
+function id_to_windowname(text) {
+    text = text.replace(/\./g, '__dot__');
+    text = text.replace(/\-/g, '__dash__');
+    return text;
+}
+
+function windowname_to_id(text) {
+    text = text.replace(/__dot__/g, '.');
+    text = text.replace(/__dash__/g, '-');
+    return text;
+}
+
+function showAdminPopup(triggeringLink, name_regexp) {
+    var name = triggeringLink.id.replace(name_regexp, '');
+    name = id_to_windowname(name);
+    var href = triggeringLink.href;
+    if (href.indexOf('?') == -1) {
+        href += '?_popup=1';
+    } else {
+        href  += '&_popup=1';
+    }
+
+    // Django JET
+    showRelatedPopup(name, href);
+
+    return false;
+}
+
+function showRelatedObjectLookupPopup(triggeringLink) {
+    return showAdminPopup(triggeringLink, /^lookup_/);
+}
+
+function dismissRelatedLookupPopup(win, chosenId) {
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+        elem.value += ',' + chosenId;
+    } else {
+        document.getElementById(name).value = chosenId;
+    }
+
+    // Django JET
+    closeRelatedPopup(win);
+}
+
+function showRelatedObjectPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^(change|add|delete)_/, '');
+    name = id_to_windowname(name);
+    var href = triggeringLink.href;
+
+    // Django JET
+    showRelatedPopup(name, href);
+
+    return false;
+}
+
+function dismissAddRelatedObjectPopup(win, newId, newRepr) {
+    // newId and newRepr are expected to have previously been escaped by
+    // django.utils.html.escape.
+    newId = html_unescape(newId);
+    newRepr = html_unescape(newRepr);
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    var o;
+    if (elem) {
+        var elemName = elem.nodeName.toUpperCase();
+        if (elemName == 'SELECT') {
+            o = new Option(newRepr, newId);
+            elem.options[elem.options.length] = o;
+            o.selected = true;
+        } else if (elemName == 'INPUT') {
+            if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+                elem.value += ',' + newId;
+            } else {
+                elem.value = newId;
+            }
+        }
+        // Trigger a change event to update related links if required.
+        django.jQuery(elem).trigger('change');
+    } else {
+        var toId = name + "_to";
+        o = new Option(newRepr, newId);
+        SelectBox.add_to_cache(toId, o);
+        SelectBox.redisplay(toId);
+    }
+
+    // Django JET
+    closeRelatedPopup(win);
+}
+
+function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
+    objId = html_unescape(objId);
+    newRepr = html_unescape(newRepr);
+    var id = windowname_to_id(win.name).replace(/^edit_/, '');
+    var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
+    var selects = django.jQuery(selectsSelector);
+    selects.find('option').each(function() {
+        if (this.value == objId) {
+            this.innerHTML = newRepr;
+            this.value = newId;
+        }
+    });
+
+    // Django JET
+    closeRelatedPopup(win);
+};
+
+function dismissDeleteRelatedObjectPopup(win, objId) {
+    objId = html_unescape(objId);
+    var id = windowname_to_id(win.name).replace(/^delete_/, '');
+    var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
+    var selects = django.jQuery(selectsSelector);
+    selects.find('option').each(function() {
+        if (this.value == objId) {
+            django.jQuery(this).remove();
+        }
+    }).trigger('change');
+
+    // Django JET
+    closeRelatedPopup(win);
+};
+
+// Kept for backward compatibility
+showAddAnotherPopup = showRelatedObjectPopup;
+dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
+
+// Django JET
+
+opener = parent.window;
+
+function showRelatedPopup(name, href) {
+    django.jQuery(function($) {
+        var $container = $('.related-popup-container');
+        var $loading = $container.find('.loading-indicator');
+        var $popup = $('<iframe>').attr('name', name).attr('src', href).addClass('related-popup').on('load', function() {
+            $popup.add($('.related-popup-back')).fadeIn(200, 'swing', function() {
+                $loading.hide();
+            });
+        });
+
+        $loading.show();
+        $container.fadeIn(200, 'swing', function() {
+            $('.related-popup-container').append($popup);
+        });
+        $('body').addClass('non-scrollable');
+    });
+}
+
+function closeRelatedPopup(win) {
+    jet.jQuery('select').trigger('select:init');
+    jet.jQuery(win.parent).trigger('related-popup:close');
+}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/admin/js/inlines.min.js


+ 0 - 1
jet/static/admin/js/related-widget-wrapper.min.js

@@ -1 +0,0 @@
-django.jQuery(document).ready(function(){jet.jQuery(function(e){function t(){var t=e(this),n=t.nextAll(".change-related, .delete-related");if(!n.length)return;var r=t.val();r?n.each(function(){var t=e(this);t.attr("href",t.attr("data-href-template").replace("__fk__",r))}):n.removeAttr("href")}var n=e(document);n.on("change",".related-widget-wrapper select",t),n.find(".related-widget-wrapper select").each(t),n.on("click",".related-widget-wrapper-link",function(e){this.href&&showRelatedObjectPopup(this),e.preventDefault()})})});

+ 7 - 1
jet/static/jet/css/_base.scss

@@ -53,6 +53,11 @@ a:hover {
   padding: 20px;
   padding: 20px;
 }
 }
 
 
+.module {
+  border: 0;
+  margin: 0;
+}
+
 @import "table";
 @import "table";
 @import "buttongroup";
 @import "buttongroup";
 @import "sidebar";
 @import "sidebar";
@@ -64,4 +69,5 @@ a:hover {
 @import "delete";
 @import "delete";
 @import "login";
 @import "login";
 @import "content";
 @import "content";
-@import "dashboard";
+@import "dashboard";
+@import "relatedpopup";

+ 25 - 13
jet/static/jet/css/_changeform.scss

@@ -1,11 +1,9 @@
 @import "globals";
 @import "globals";
 
 
 .module {
 .module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: $content-background-color;
-  border-radius: 4px;
+  &-separator {
+    height: 1em;
+  }
 
 
   .form-row {
   .form-row {
     padding: 6px 0;
     padding: 6px 0;
@@ -24,6 +22,10 @@
       }
       }
     }
     }
 
 
+    br {
+      clear: both;
+    }
+
     &.errors label {
     &.errors label {
       color: $error-text-color;
       color: $error-text-color;
     }
     }
@@ -48,6 +50,7 @@
       @extend .clear-list;
       @extend .clear-list;
       @extend .small;
       @extend .small;
       color: $error-text-color;
       color: $error-text-color;
+      margin-bottom: 10px !important;
     }
     }
 
 
     .datetime {
     .datetime {
@@ -101,6 +104,23 @@
       }
       }
     }
     }
   }
   }
+
+  &.aligned {
+    background-color: $content-background-color;
+    border-radius: 4px;
+    padding: 20px;
+
+    ul label {
+      display: inline;
+      float: none;
+      width: auto;
+    }
+
+    ul {
+      margin: 0 0 0 160px;
+      padding: 0;
+    }
+  }
 }
 }
 
 
 .submit-row {
 .submit-row {
@@ -175,10 +195,6 @@
   }
   }
 
 
   .module {
   .module {
-    padding: 0;
-    background: none;
-    border-radius: 0;
-
     .form-row {
     .form-row {
       .select2 {
       .select2 {
         max-width: 800px - 20px * 2 - 150px - 24px;
         max-width: 800px - 20px * 2 - 150px - 24px;
@@ -186,10 +202,6 @@
     }
     }
   }
   }
 
 
-  .aligned {
-    padding: 20px 20px 0 20px;
-  }
-
   .inline-group {
   .inline-group {
     .errornote {
     .errornote {
       color: $error-text-color;
       color: $error-text-color;

+ 13 - 0
jet/static/jet/css/_content.scss

@@ -8,17 +8,30 @@
   width: 500px;
   width: 500px;
 }
 }
 
 
+#content {
+  > h1 {
+    text-transform: uppercase;
+    font-size: 12px;
+    font-weight: bold;
+    line-height: $top-height;
+    color: $top-text-color;
+    margin: 0 0 2em 0;
+  }
+}
+
 .small {
 .small {
   font-size: 12px;
   font-size: 12px;
 }
 }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
   text-align: right;
   text-align: right;
+  overflow: auto;
 }
 }
 
 
 ul.object-tools {
 ul.object-tools {
   @extend .clear-list;
   @extend .clear-list;
   margin-bottom: 20px !important;
   margin-bottom: 20px !important;
+  float: right;
 
 
   li {
   li {
     margin-top: 10px;
     margin-top: 10px;

+ 7 - 0
jet/static/jet/css/_helpers.scss

@@ -104,6 +104,13 @@
   transition: $values;
   transition: $values;
 }
 }
 
 
+@mixin transform($transform) {
+  -webkit-transform: $transform;
+  -moz-transform: $transform;
+  -o-transform: $transform;
+  transform: $transform;
+}
+
 @mixin font-icon {
 @mixin font-icon {
   font-family: 'jet-icons';
   font-family: 'jet-icons';
   speak: none;
   speak: none;

+ 71 - 0
jet/static/jet/css/_relatedpopup.scss

@@ -0,0 +1,71 @@
+@import "globals";
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: $background-color;
+  background-clip: content-box;
+
+  &-container {
+    display: none;
+    background-color: transparentize($sidebar-popup-overlay-color, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3;
+
+    .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: $content-contrast2-text-color;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px;
+    }
+  }
+
+  &-back {
+    &, &:visited, &:hover {
+      display: none;
+      background: $content-contrast2-background-color;
+      color: $content-contrast2-text-color;
+      position: absolute;
+      top: 20px;
+      left: 250px;
+      z-index: 5;
+      width: 100px;
+      padding: 14px 6px 14px 0;
+      text-align: center;
+      margin-left: -100px;
+      box-sizing: border-box;
+      text-transform: uppercase;
+      border-radius: 6px 0 0 6px;
+      @include transition(background-color $transitions-duration, color $transitions-duration);
+    }
+
+    &:hover {
+      background: $background-color;
+      color: $text-color;
+    }
+
+    span {
+      vertical-align: middle;
+      font-weight: bold;
+      font-size: 18px;
+    }
+  }
+}

+ 26 - 3
jet/static/jet/css/_sidebar.scss

@@ -43,6 +43,9 @@
           overflow: hidden;
           overflow: hidden;
           text-overflow: ellipsis;
           text-overflow: ellipsis;
           white-space: nowrap;
           white-space: nowrap;
+          width: 100%;
+          display: inline-block;
+          box-sizing: border-box;
           @include transition(color $transitions-duration);
           @include transition(color $transitions-duration);
         }
         }
 
 
@@ -59,14 +62,16 @@
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         @include transition(color $transitions-duration);
         @include transition(color $transitions-duration);
 
 
         &-icon {
         &-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
           font-weight: bold !important;
           font-weight: bold !important;
-          margin-right: 14px;
 
 
           &, &:visited, &:hover {
           &, &:visited, &:hover {
             color: $sidebar-title-action-color;
             color: $sidebar-title-action-color;
@@ -79,6 +84,24 @@
         }
         }
       }
       }
 
 
+      &-link {
+        &, &:visited, &:hover {
+          color: $sidebar-text-color;
+          text-transform: uppercase;
+          font-size: 11px;
+          font-weight: bold;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          white-space: nowrap;
+          padding: 0 24px;
+          @include transition(color $transitions-duration);
+        }
+
+        &:hover {
+          color: $sidebar-hover-title-action-item-color;
+        }
+      }
+
       &-action {
       &-action {
         &, &:visited, &:hover {
         &, &:visited, &:hover {
           display: block;
           display: block;
@@ -100,7 +123,7 @@
       &-list {
       &-list {
         @extend .clear-list;
         @extend .clear-list;
 
 
-        .sidebar-menu-item-title + &:not(:empty) {
+        .sidebar-menu-item-title + &:not(:empty), .sidebar-menu-item-link + &:not(:empty) {
           margin-top: 10px !important;
           margin-top: 10px !important;
         }
         }
 
 

+ 2 - 0
jet/static/jet/css/_top.scss

@@ -60,11 +60,13 @@
         color: $top-icon-color;
         color: $top-icon-color;
         font-size: 24px;
         font-size: 24px;
         line-height: $top-height - 2px !important;
         line-height: $top-height - 2px !important;
+        @include transition(color $transitions-duration);
       }
       }
     }
     }
 
 
     &.opened &-welcome-msg-arrow {
     &.opened &-welcome-msg-arrow {
       color: $top-dropdown-icon-color;
       color: $top-dropdown-icon-color;
+      @include transform(rotate(180deg));
     }
     }
 
 
     &-contrast-block {
     &-contrast-block {

+ 54 - 49
jet/static/jet/css/icons/style.css

@@ -1,118 +1,123 @@
 @font-face {
 @font-face {
-	font-family: 'jet-icons';
-	src:url('fonts/jet-icons.eot?-lem1jo');
-	src:url('fonts/jet-icons.eot?#iefix-lem1jo') format('embedded-opentype'),
-		url('fonts/jet-icons.ttf?-lem1jo') format('truetype'),
-		url('fonts/jet-icons.woff?-lem1jo') format('woff'),
-		url('fonts/jet-icons.svg?-lem1jo#jet-icons') format('svg');
-	font-weight: normal;
-	font-style: normal;
+    font-family: 'jet-icons';
+    src:    url('fonts/jet-icons.eot?2orr6h');
+    src:    url('fonts/jet-icons.eot?2orr6h#iefix') format('embedded-opentype'),
+        url('fonts/jet-icons.ttf?2orr6h') format('truetype'),
+        url('fonts/jet-icons.woff?2orr6h') format('woff'),
+        url('fonts/jet-icons.svg?2orr6h#jet-icons') format('svg');
+    font-weight: normal;
+    font-style: normal;
 }
 }
 
 
 [class^="icon-"], [class*=" icon-"] {
 [class^="icon-"], [class*=" icon-"] {
-	font-family: 'jet-icons';
-	speak: none;
-	font-style: normal;
-	font-weight: normal;
-	font-variant: normal;
-	text-transform: none;
-	line-height: 1;
+    /* use !important to prevent issues with browser extensions that change fonts */
+    font-family: 'jet-icons' !important;
+    speak: none;
+    font-style: normal;
+    font-weight: normal;
+    font-variant: normal;
+    text-transform: none;
+    line-height: 1;
 
 
-	/* Better Font Rendering =========== */
-	-webkit-font-smoothing: antialiased;
-	-moz-osx-font-smoothing: grayscale;
+    /* Better Font Rendering =========== */
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
 }
 }
 
 
+.icon-order:before {
+    content: "\e901";
+}
 .icon-reset:before {
 .icon-reset:before {
-	content: "\e61e";
+    content: "\e61e";
 }
 }
 .icon-search:before {
 .icon-search:before {
-	content: "\e61d";
+    content: "\e61d";
 }
 }
 .icon-user:before {
 .icon-user:before {
-	content: "\e61c";
+    content: "\e61c";
 }
 }
 .icon-jet:before {
 .icon-jet:before {
-	content: "\e61b";
+    content: "\e61b";
 }
 }
 .icon-refresh:before {
 .icon-refresh:before {
-	content: "\e61a";
+    content: "\e61a";
 }
 }
 .icon-grid:before {
 .icon-grid:before {
-	content: "\e619";
+    content: "\e619";
 }
 }
 .icon-star:before {
 .icon-star:before {
-	content: "\e618";
+    content: "\e618";
 }
 }
 .icon-pin:before {
 .icon-pin:before {
-	content: "\e617";
+    content: "\e617";
 }
 }
 .icon-new:before {
 .icon-new:before {
-	content: "\e616";
+    content: "\e616";
 }
 }
 .icon-edit:before {
 .icon-edit:before {
-	content: "\e615";
+    content: "\e615";
 }
 }
 .icon-clock:before {
 .icon-clock:before {
-	content: "\e611";
+    content: "\e611";
 }
 }
 .icon-calendar:before {
 .icon-calendar:before {
-	content: "\e612";
+    content: "\e612";
 }
 }
 .icon-book:before {
 .icon-book:before {
-	content: "\e60d";
+    content: "\e60d";
 }
 }
 .icon-open-external:before {
 .icon-open-external:before {
-	content: "\e60e";
+    content: "\e60e";
 }
 }
 .icon-data:before {
 .icon-data:before {
-	content: "\e60f";
+    content: "\e60f";
 }
 }
 .icon-question:before {
 .icon-question:before {
-	content: "\e613";
+    content: "\e613";
 }
 }
 .icon-tick:before {
 .icon-tick:before {
-	content: "\e614";
+    content: "\e614";
 }
 }
 .icon-cross:before {
 .icon-cross:before {
-	content: "\e610";
+    content: "\e610";
 }
 }
 .icon-key:before {
 .icon-key:before {
-	content: "\e60c";
+    content: "\e60c";
 }
 }
 .icon-arrow-right:before {
 .icon-arrow-right:before {
-	content: "\e60b";
+    content: "\e60b";
 }
 }
 .icon-arrow-left:before {
 .icon-arrow-left:before {
-	content: "\e60a";
+    content: "\e60a";
 }
 }
 .icon-arrow-down:before {
 .icon-arrow-down:before {
-	content: "\e608";
+    content: "\e608";
 }
 }
 .icon-arrow-up:before {
 .icon-arrow-up:before {
-	content: "\e609";
+    content: "\e609";
 }
 }
 .icon-checkbox-outline:before {
 .icon-checkbox-outline:before {
-	content: "\e607";
+    content: "\e607";
 }
 }
 .icon-remove:before {
 .icon-remove:before {
-	content: "\e600";
+    content: "\e600";
 }
 }
 .icon-add2:before {
 .icon-add2:before {
-	content: "\e601";
+    content: "\e601";
 }
 }
 .icon-exit:before {
 .icon-exit:before {
-	content: "\e602";
+    content: "\e602";
 }
 }
 .icon-add:before {
 .icon-add:before {
-	content: "\e603";
+    content: "\e603";
 }
 }
 .icon-add3:before {
 .icon-add3:before {
-	content: "\e604";
+    content: "\e604";
 }
 }
 .icon-expand:before {
 .icon-expand:before {
-	content: "\e605";
+    content: "\e605";
 }
 }
 .icon-checkbox:before {
 .icon-checkbox:before {
-	content: "\e606";
+    content: "\e606";
 }
 }
+

+ 499 - 89
jet/static/jet/css/themes/default/base.css

@@ -349,6 +349,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1434,6 +1438,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1448,7 +1455,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1456,8 +1466,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #47bac1;
             color: #47bac1;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1466,6 +1475,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #639af5; }
             color: #639af5; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #6f7e95;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #639af5; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #47bac1;
         color: #47bac1;
@@ -1481,7 +1505,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #639af5;
         color: #639af5;
         background-color: #2b3647; }
         background-color: #2b3647; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -1976,9 +2000,17 @@ a:hover {
         float: right;
         float: right;
         color: #47bac1;
         color: #47bac1;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #ecf2f6; }
+      color: #ecf2f6;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3431,80 +3463,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c14747; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #d0dbe6;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c14747; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #f6fafc;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c14747; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #d0dbe6;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c14747;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #f6fafc;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3548,14 +3590,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c14747;
     color: #c14747;
     margin: 0;
     margin: 0;
@@ -4745,14 +4781,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #6f7e95;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5302,4 +5348,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #ecf2f6;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #fff;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #59677e;
+    color: #fff;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #ecf2f6;
+    color: #6f7e95; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/default/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/default/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/default/select2.theme.css.map


+ 499 - 89
jet/static/jet/css/themes/green/base.css

@@ -380,6 +380,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1465,6 +1469,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1479,7 +1486,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1487,8 +1497,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #44b78b;
             color: #44b78b;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1497,6 +1506,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #7FB1DC; }
             color: #7FB1DC; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #62a29c;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #7FB1DC; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #44b78b;
         color: #44b78b;
@@ -1512,7 +1536,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #7FB1DC;
         color: #7FB1DC;
         background-color: #254d49; }
         background-color: #254d49; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -2007,9 +2031,17 @@ a:hover {
         float: right;
         float: right;
         color: #44b78b;
         color: #44b78b;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #eff6f5; }
+      color: #eff6f5;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3462,80 +3494,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c14747; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #cceae4;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c14747; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #f5fdfa;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c14747; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #cceae4;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c14747;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #f5fdfa;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3579,14 +3621,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c14747;
     color: #c14747;
     margin: 0;
     margin: 0;
@@ -4776,14 +4812,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #62a29c;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5333,4 +5379,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #eff6f5;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #fff;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #3c706b;
+    color: #fff;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #eff6f5;
+    color: #62a29c; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/green/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/green/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/green/select2.theme.css.map


+ 499 - 89
jet/static/jet/css/themes/light-blue/base.css

@@ -380,6 +380,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1465,6 +1469,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1479,7 +1486,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1487,8 +1497,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #fff;
             color: #fff;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1497,6 +1506,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #FDBB5E; }
             color: #FDBB5E; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #7BBCE5;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #FDBB5E; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #7BBCE5;
         color: #7BBCE5;
@@ -1512,7 +1536,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #FDBB5E;
         color: #FDBB5E;
         background-color: #0a68a3; }
         background-color: #0a68a3; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -2007,9 +2031,17 @@ a:hover {
         float: right;
         float: right;
         color: #78ACE3;
         color: #78ACE3;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #81c5f0; }
+      color: #81c5f0;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3462,80 +3494,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c7254e; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #c0c6cc;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c7254e; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #F8FAFC;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c7254e; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #c0c6cc;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c7254e;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #F8FAFC;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3579,14 +3621,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c7254e;
     color: #c7254e;
     margin: 0;
     margin: 0;
@@ -4776,14 +4812,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #8B9EAB;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5333,4 +5379,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #f8fafc;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #8B9AA7;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #E3ECF2;
+    color: #8B9AA7;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #f8fafc;
+    color: #8B9AA7; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-blue/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-blue/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-blue/select2.theme.css.map


+ 499 - 89
jet/static/jet/css/themes/light-gray/base.css

@@ -380,6 +380,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1465,6 +1469,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1479,7 +1486,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1487,8 +1497,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #fff;
             color: #fff;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1497,6 +1506,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #FDBB5E; }
             color: #FDBB5E; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #7D8CA1;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #FDBB5E; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #7D8CA1;
         color: #7D8CA1;
@@ -1512,7 +1536,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #FDBB5E;
         color: #FDBB5E;
         background-color: #2B333D; }
         background-color: #2B333D; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -2007,9 +2031,17 @@ a:hover {
         float: right;
         float: right;
         color: #79A7D8;
         color: #79A7D8;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #8b9cb3; }
+      color: #8b9cb3;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3462,80 +3494,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c7254e; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #c0c6cc;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c7254e; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #F8FAFC;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c7254e; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #c0c6cc;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c7254e;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #F8FAFC;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3579,14 +3621,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c7254e;
     color: #c7254e;
     margin: 0;
     margin: 0;
@@ -4776,14 +4812,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #8B9EAB;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5333,4 +5379,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #f8fafc;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #8B9AA7;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #E3ECF2;
+    color: #8B9AA7;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #f8fafc;
+    color: #8B9AA7; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-gray/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-gray/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-gray/select2.theme.css.map


+ 499 - 89
jet/static/jet/css/themes/light-green/base.css

@@ -380,6 +380,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1465,6 +1469,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1479,7 +1486,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1487,8 +1497,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #fff;
             color: #fff;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1497,6 +1506,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #FDBB5E; }
             color: #FDBB5E; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #6DC5A8;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #FDBB5E; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #6DC5A8;
         color: #6DC5A8;
@@ -1512,7 +1536,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #FDBB5E;
         color: #FDBB5E;
         background-color: #01805c; }
         background-color: #01805c; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -2007,9 +2031,17 @@ a:hover {
         float: right;
         float: right;
         color: #2faa60;
         color: #2faa60;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #beebdb; }
+      color: #beebdb;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3462,80 +3494,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c7254e; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #c0c6cc;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c7254e; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #F8FAFC;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c7254e; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #c0c6cc;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c7254e;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #F8FAFC;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3579,14 +3621,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c7254e;
     color: #c7254e;
     margin: 0;
     margin: 0;
@@ -4776,14 +4812,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #8B9EAB;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5333,4 +5379,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #f8fafc;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #8B9AA7;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #E3ECF2;
+    color: #8B9AA7;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #f8fafc;
+    color: #8B9AA7; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-green/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-green/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-green/select2.theme.css.map


+ 499 - 89
jet/static/jet/css/themes/light-violet/base.css

@@ -380,6 +380,10 @@ a:hover {
 #content {
 #content {
   padding: 20px; }
   padding: 20px; }
 
 
+.module {
+  border: 0;
+  margin: 0; }
+
 /*
 /*
  * Default variable values
  * Default variable values
  * Create separate themes/theme/_variables.scss to override these variables
  * Create separate themes/theme/_variables.scss to override these variables
@@ -1465,6 +1469,9 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1479,7 +1486,10 @@ a:hover {
         overflow: hidden;
         overflow: hidden;
         text-overflow: ellipsis;
         text-overflow: ellipsis;
         white-space: nowrap;
         white-space: nowrap;
-        padding: 0 24px;
+        padding: 0 14px 0 24px;
+        width: 100%;
+        display: inline-block;
+        box-sizing: border-box;
         -webkit-transition: color 0.3s;
         -webkit-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -moz-transition: color 0.3s;
         -o-transition: color 0.3s;
         -o-transition: color 0.3s;
@@ -1487,8 +1497,7 @@ a:hover {
         .sidebar-menu-item-title-icon {
         .sidebar-menu-item-title-icon {
           float: right;
           float: right;
           font-size: 14px;
           font-size: 14px;
-          font-weight: bold !important;
-          margin-right: 14px; }
+          font-weight: bold !important; }
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon, .sidebar-menu-item-title-icon:visited, .sidebar-menu-item-title-icon:hover {
             color: #fff;
             color: #fff;
             -webkit-transition: color 0.3s;
             -webkit-transition: color 0.3s;
@@ -1497,6 +1506,21 @@ a:hover {
             transition: color 0.3s; }
             transition: color 0.3s; }
           .sidebar-menu-item-title-icon:hover {
           .sidebar-menu-item-title-icon:hover {
             color: #FDBB5E; }
             color: #FDBB5E; }
+      .sidebar-menu-item-link, .sidebar-menu-item-link:visited, .sidebar-menu-item-link:hover {
+        color: #9988cc;
+        text-transform: uppercase;
+        font-size: 11px;
+        font-weight: bold;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        padding: 0 24px;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
+      .sidebar-menu-item-link:hover {
+        color: #FDBB5E; }
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action, .sidebar-menu-item-action:visited, .sidebar-menu-item-action:hover {
         display: block;
         display: block;
         color: #9988cc;
         color: #9988cc;
@@ -1512,7 +1536,7 @@ a:hover {
       .sidebar-menu-item-action:hover {
       .sidebar-menu-item-action:hover {
         color: #FDBB5E;
         color: #FDBB5E;
         background-color: #443366; }
         background-color: #443366; }
-      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty) {
+      .sidebar-menu-item-title + .sidebar-menu-item-list:not(:empty), .sidebar-menu-item-link + .sidebar-menu-item-list:not(:empty) {
         margin-top: 10px !important; }
         margin-top: 10px !important; }
       .sidebar-menu-item-list-item.empty {
       .sidebar-menu-item-list-item.empty {
         display: none; }
         display: none; }
@@ -2007,9 +2031,17 @@ a:hover {
         float: right;
         float: right;
         color: #79A7D8;
         color: #79A7D8;
         font-size: 24px;
         font-size: 24px;
-        line-height: 30px !important; }
+        line-height: 30px !important;
+        -webkit-transition: color 0.3s;
+        -moz-transition: color 0.3s;
+        -o-transition: color 0.3s;
+        transition: color 0.3s; }
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
     .top-user-tools.opened .top-user-tools-welcome-msg-arrow {
-      color: #c8beeb; }
+      color: #c8beeb;
+      -webkit-transform: rotate(180deg);
+      -moz-transform: rotate(180deg);
+      -o-transform: rotate(180deg);
+      transform: rotate(180deg); }
     .top-user-tools-contrast-block {
     .top-user-tools-contrast-block {
       display: none;
       display: none;
       padding: 8px 14px;
       padding: 8px 14px;
@@ -3462,80 +3494,90 @@ table#change-history {
 .fill_width {
 .fill_width {
   width: 100% !important; }
   width: 100% !important; }
 
 
-.module {
-  border: 0;
-  margin: 0;
-  padding: 20px;
-  background-color: #fff;
-  border-radius: 4px; }
-  .module .form-row {
-    padding: 6px 0;
-    overflow: hidden; }
-    .module .form-row label {
-      display: block;
-      padding: 6px 10px 0 0;
-      float: left;
-      width: 150px;
-      word-wrap: break-word; }
-      .module .form-row label + p {
-        padding-top: 6px;
-        margin: 4px 0 4px 160px; }
-    .module .form-row.errors label {
-      color: #c7254e; }
-    .module .form-row .checkbox-row label {
-      float: none;
-      display: inline; }
-    .module .form-row .help {
-      clear: left;
-      color: #c0c6cc;
-      margin: 12px 0 0 160px; }
-    .module .form-row .checkbox-row .help {
-      margin-left: 0; }
-    .module .form-row .errorlist {
-      color: #c7254e; }
-    .module .form-row .datetime {
-      margin-left: 160px; }
-    .module .form-row .add-related span {
-      font-size: 18px;
-      vertical-align: middle; }
-    .module .form-row .change-related span {
-      font-size: 20px;
-      vertical-align: middle; }
-    .module .form-row .add-another {
-      margin-left: 4px; }
-      .module .form-row .add-another:before {
-        font-family: 'jet-icons';
-        speak: none;
-        font-style: normal;
-        font-weight: normal;
-        font-variant: normal;
-        text-transform: none;
-        line-height: 1;
-        /* Better Font Rendering =========== */
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        display: inline-block;
-        vertical-align: middle;
-        font-size: 18px;
-        content: ""; }
-      .module .form-row .add-another img {
-        display: none; }
-    .module .form-row .field-box {
-      margin-right: 20px;
-      float: left; }
-    .module .form-row .file-upload {
-      background: #F8FAFC;
+.module-separator {
+  height: 1em; }
+.module .form-row {
+  padding: 6px 0;
+  overflow: hidden; }
+  .module .form-row label {
+    display: block;
+    padding: 6px 10px 0 0;
+    float: left;
+    width: 150px;
+    word-wrap: break-word; }
+    .module .form-row label + p {
+      padding-top: 6px;
+      margin: 4px 0 4px 160px; }
+  .module .form-row br {
+    clear: both; }
+  .module .form-row.errors label {
+    color: #c7254e; }
+  .module .form-row .checkbox-row label {
+    float: none;
+    display: inline; }
+  .module .form-row .help {
+    clear: left;
+    color: #c0c6cc;
+    margin: 12px 0 0 160px; }
+  .module .form-row .checkbox-row .help {
+    margin-left: 0; }
+  .module .form-row .errorlist {
+    color: #c7254e;
+    margin-bottom: 10px !important; }
+  .module .form-row .datetime {
+    margin-left: 160px; }
+  .module .form-row .add-related span {
+    font-size: 18px;
+    vertical-align: middle; }
+  .module .form-row .change-related span {
+    font-size: 20px;
+    vertical-align: middle; }
+  .module .form-row .add-another {
+    margin-left: 4px; }
+    .module .form-row .add-another:before {
+      font-family: 'jet-icons';
+      speak: none;
+      font-style: normal;
+      font-weight: normal;
+      font-variant: normal;
+      text-transform: none;
+      line-height: 1;
+      /* Better Font Rendering =========== */
+      -webkit-font-smoothing: antialiased;
+      -moz-osx-font-smoothing: grayscale;
       display: inline-block;
       display: inline-block;
-      margin: 0;
-      line-height: 1.5em;
-      padding: 10px;
-      border-radius: 4px; }
-      .module .form-row .file-upload .clearable-file-input label {
-        display: inline;
-        float: none;
-        padding: 0;
-        width: auto;
-        margin-left: 10px; }
+      vertical-align: middle;
+      font-size: 18px;
+      content: ""; }
+    .module .form-row .add-another img {
+      display: none; }
+  .module .form-row .field-box {
+    margin-right: 20px;
+    float: left; }
+  .module .form-row .file-upload {
+    background: #F8FAFC;
+    display: inline-block;
+    margin: 0;
+    line-height: 1.5em;
+    padding: 10px;
+    border-radius: 4px; }
+    .module .form-row .file-upload .clearable-file-input label {
+      display: inline;
+      float: none;
+      padding: 0;
+      width: auto;
+      margin-left: 10px; }
+.module.aligned {
+  background-color: #fff;
+  border-radius: 4px;
+  padding: 20px; }
+  .module.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto; }
+  .module.aligned ul {
+    margin: 0 0 0 160px;
+    padding: 0; }
 
 
 .submit-row {
 .submit-row {
   padding: 20px 0; }
   padding: 20px 0; }
@@ -3579,14 +3621,8 @@ table#change-history {
       display: none; }
       display: none; }
       .changeform-tabs ~ .module .stacked.inline-related.selected {
       .changeform-tabs ~ .module .stacked.inline-related.selected {
         display: block; }
         display: block; }
-  .changeform .module {
-    padding: 0;
-    background: none;
-    border-radius: 0; }
-    .changeform .module .form-row .select2 {
-      max-width: 586px; }
-  .changeform .aligned {
-    padding: 20px 20px 0 20px; }
+  .changeform .module .form-row .select2 {
+    max-width: 586px; }
   .changeform .inline-group .errornote {
   .changeform .inline-group .errornote {
     color: #c7254e;
     color: #c7254e;
     margin: 0;
     margin: 0;
@@ -4776,14 +4812,24 @@ table#change-history {
 .dashboard #content {
 .dashboard #content {
   width: 500px; }
   width: 500px; }
 
 
+#content > h1 {
+  text-transform: uppercase;
+  font-size: 12px;
+  font-weight: bold;
+  line-height: 32px;
+  color: #8B9EAB;
+  margin: 0 0 2em 0; }
+
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
 .small, .module .form-row .help, .module .form-row .errorlist, .changeform .tabular.inline-related .module .errorlist, .login-form .form-row .errorlist {
   font-size: 12px; }
   font-size: 12px; }
 
 
 .changeform-object-tools {
 .changeform-object-tools {
-  text-align: right; }
+  text-align: right;
+  overflow: auto; }
 
 
 ul.object-tools {
 ul.object-tools {
-  margin-bottom: 20px !important; }
+  margin-bottom: 20px !important;
+  float: right; }
   ul.object-tools li {
   ul.object-tools li {
     margin-top: 10px;
     margin-top: 10px;
     text-align: right; }
     text-align: right; }
@@ -5333,4 +5379,368 @@ img[src$="admin/img/icon-no.gif"] + span {
   border-radius: 0 4px 4px 0 !important;
   border-radius: 0 4px 4px 0 !important;
   padding: 0 10px !important; }
   padding: 0 10px !important; }
 
 
+/*
+ * Default variable values
+ * Create separate themes/theme/_variables.scss to override these variables
+ */
+/*
+ * General
+ */
+/*
+ * Sidebar
+ */
+/*
+ * Top
+ */
+/*
+ * Content
+ */
+/*
+ * Buttons
+ */
+/*
+ * Inputs
+ */
+/*
+ * Messages
+ */
+/*
+ * Login
+ */
+/*
+ * jQuery UI
+ */
+/*
+ * Charts
+ */
+.hidden {
+  display: none; }
+
+.clear-list, .sidebar-menu, .sidebar-menu-item-list, .sidebar-popup-list, .top-user-tools, .messagelist, .module .form-row .errorlist, .changeform-tabs, .changeform .tabular.inline-related .module .errorlist, .changeform .stacked-inline-list, .delete-summary ul, .delete-objects-list, .login-form .form-row .errorlist, ul.object-tools, .dashboard-item-content ul:not(.inline), .dashboard-item-content ul.inline {
+  margin: 0;
+  padding: 0;
+  list-style: none; }
+
+.fl {
+  float: left; }
+
+.fr {
+  float: right; }
+
+.cf:before, .cf:after {
+  content: "";
+  display: table; }
+
+.cf:after {
+  clear: both; }
+
+.p10 {
+  padding: 10px; }
+
+.p20 {
+  padding: 20px; }
+
+.p30 {
+  padding: 30px; }
+
+.p40 {
+  padding: 40px; }
+
+.p50 {
+  padding: 50px; }
+
+.p60 {
+  padding: 60px; }
+
+.p70 {
+  padding: 70px; }
+
+.p80 {
+  padding: 80px; }
+
+.pt10 {
+  padding-top: 10px; }
+
+.pt20 {
+  padding-top: 20px; }
+
+.pt30 {
+  padding-top: 30px; }
+
+.pt40 {
+  padding-top: 40px; }
+
+.pt50 {
+  padding-top: 50px; }
+
+.pt60 {
+  padding-top: 60px; }
+
+.pt70 {
+  padding-top: 70px; }
+
+.pt80 {
+  padding-top: 80px; }
+
+.pr10 {
+  padding-right: 10px; }
+
+.pr20 {
+  padding-right: 20px; }
+
+.pr30 {
+  padding-right: 30px; }
+
+.pr40 {
+  padding-right: 40px; }
+
+.pr50 {
+  padding-right: 50px; }
+
+.pr60 {
+  padding-right: 60px; }
+
+.pr70 {
+  padding-right: 70px; }
+
+.pr80 {
+  padding-right: 80px; }
+
+.pb10 {
+  padding-bottom: 10px; }
+
+.pb20 {
+  padding-bottom: 20px; }
+
+.pb30 {
+  padding-bottom: 30px; }
+
+.pb40 {
+  padding-bottom: 40px; }
+
+.pb50 {
+  padding-bottom: 50px; }
+
+.pb60 {
+  padding-bottom: 60px; }
+
+.pb70 {
+  padding-bottom: 70px; }
+
+.pb80 {
+  padding-bottom: 80px; }
+
+.pl10 {
+  padding-left: 10px; }
+
+.pl20 {
+  padding-left: 20px; }
+
+.pl30 {
+  padding-left: 30px; }
+
+.pl40 {
+  padding-left: 40px; }
+
+.pl50 {
+  padding-left: 50px; }
+
+.pl60 {
+  padding-left: 60px; }
+
+.pl70 {
+  padding-left: 70px; }
+
+.pl80 {
+  padding-left: 80px; }
+
+.m10 {
+  margin: 10px; }
+
+.m20 {
+  margin: 20px; }
+
+.m30 {
+  margin: 30px; }
+
+.m40 {
+  margin: 40px; }
+
+.m50 {
+  margin: 50px; }
+
+.m60 {
+  margin: 60px; }
+
+.m70 {
+  margin: 70px; }
+
+.m80 {
+  margin: 80px; }
+
+.mt10 {
+  margin-top: 10px; }
+
+.mt20 {
+  margin-top: 20px; }
+
+.mt30 {
+  margin-top: 30px; }
+
+.mt40 {
+  margin-top: 40px; }
+
+.mt50 {
+  margin-top: 50px; }
+
+.mt60 {
+  margin-top: 60px; }
+
+.mt70 {
+  margin-top: 70px; }
+
+.mt80 {
+  margin-top: 80px; }
+
+.mr10 {
+  margin-right: 10px; }
+
+.mr20 {
+  margin-right: 20px; }
+
+.mr30 {
+  margin-right: 30px; }
+
+.mr40 {
+  margin-right: 40px; }
+
+.mr50 {
+  margin-right: 50px; }
+
+.mr60 {
+  margin-right: 60px; }
+
+.mr70 {
+  margin-right: 70px; }
+
+.mr80 {
+  margin-right: 80px; }
+
+.mb10 {
+  margin-bottom: 10px; }
+
+.mb20 {
+  margin-bottom: 20px; }
+
+.mb30 {
+  margin-bottom: 30px; }
+
+.mb40 {
+  margin-bottom: 40px; }
+
+.mb50 {
+  margin-bottom: 50px; }
+
+.mb60 {
+  margin-bottom: 60px; }
+
+.mb70 {
+  margin-bottom: 70px; }
+
+.mb80 {
+  margin-bottom: 80px; }
+
+.ml10 {
+  margin-left: 10px; }
+
+.ml20 {
+  margin-left: 20px; }
+
+.ml30 {
+  margin-left: 30px; }
+
+.ml40 {
+  margin-left: 40px; }
+
+.ml50 {
+  margin-left: 50px; }
+
+.ml60 {
+  margin-left: 60px; }
+
+.ml70 {
+  margin-left: 70px; }
+
+.ml80 {
+  margin-left: 80px; }
+
+.pos_rel {
+  position: relative; }
+
+.pos_abs {
+  position: absolute; }
+
+.fill_width {
+  width: 100% !important; }
+
+.related-popup {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 4;
+  border: 0;
+  width: 100%;
+  height: 100%;
+  padding-left: 250px;
+  box-sizing: border-box;
+  display: none;
+  background: #f8fafc;
+  background-clip: content-box; }
+  .related-popup-container {
+    display: none;
+    background-color: rgba(0, 0, 0, 0.5);
+    position: fixed;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0;
+    z-index: 3; }
+    .related-popup-container .loading-indicator {
+      display: none;
+      font-size: 96px;
+      color: #8B9AA7;
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      margin-left: -48px;
+      margin-top: -48px; }
+  .related-popup-back, .related-popup-back:visited, .related-popup-back:hover {
+    display: none;
+    background: #E3ECF2;
+    color: #8B9AA7;
+    position: absolute;
+    top: 20px;
+    left: 250px;
+    z-index: 5;
+    width: 100px;
+    padding: 14px 6px 14px 0;
+    text-align: center;
+    margin-left: -100px;
+    box-sizing: border-box;
+    text-transform: uppercase;
+    border-radius: 6px 0 0 6px;
+    -webkit-transition: background-color 0.3s, color 0.3s;
+    -moz-transition: background-color 0.3s, color 0.3s;
+    -o-transition: background-color 0.3s, color 0.3s;
+    transition: background-color 0.3s, color 0.3s; }
+  .related-popup-back:hover {
+    background: #f8fafc;
+    color: #8B9AA7; }
+  .related-popup-back span {
+    vertical-align: middle;
+    font-weight: bold;
+    font-size: 18px; }
+
 /*# sourceMappingURL=base.css.map */
 /*# sourceMappingURL=base.css.map */

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-violet/base.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-violet/jquery-ui.theme.css.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/css/themes/light-violet/select2.theme.css.map


+ 40 - 1
jet/static/jet/js/main.js

@@ -49,7 +49,7 @@
 
 
             var addLabelToCheckboxes = function() {
             var addLabelToCheckboxes = function() {
                 var $containers = $('.action-checkbox, .action-checkbox-column').add('.tabular.inline-related .form-row');
                 var $containers = $('.action-checkbox, .action-checkbox-column').add('.tabular.inline-related .form-row');
-                var $checkboxes = $containers.find('input[type="checkbox"]').add('.checkbox-without-label');
+                var $checkboxes = $containers.find('input[type="checkbox"]').add('.checkbox-without-label').add('label > input[type="checkbox"]');
 
 
                 $checkboxes.each(function() {
                 $checkboxes.each(function() {
                     addLabelToCheckbox($(this));
                     addLabelToCheckbox($(this));
@@ -663,9 +663,21 @@
                 $('img[src$="admin/img/icon-unknown.gif"]').after($('<span class="icon-question">'));
                 $('img[src$="admin/img/icon-unknown.gif"]').after($('<span class="icon-question">'));
             };
             };
 
 
+            var initChangelistRowSelection = function() {
+                $('#result_list tbody th, #result_list tbody td').on('click', function(e) {
+                    // Fix selection on clicking elements inside row (e.x. links)
+                    if (e.target != this) {
+                        return;
+                    }
+
+                    $(this).closest('tr').find('.action-checkbox .action-select').click();
+                });
+            };
+
             initChangelistHeaders();
             initChangelistHeaders();
             initChangelistFooters();
             initChangelistFooters();
             initChangelistImages();
             initChangelistImages();
+            initChangelistRowSelection();
         };
         };
 
 
         var initTooltips = function() {
         var initTooltips = function() {
@@ -967,6 +979,32 @@
             });
             });
         };
         };
 
 
+        var initRelatedPopups = function() {
+            var closeRelatedPopup = function () {
+                var $popups = $('.related-popup');
+                var $container = $('.related-popup-container');
+                var $popup = $popups.last();
+
+                $popup.remove();
+
+                if ($popups.length == 1) {
+                    $container.fadeOut(200, 'swing', function () {
+                        $('.related-popup-back').hide();
+                        $('body').removeClass('non-scrollable');
+                    });
+                }
+            };
+
+            $('.related-popup-back').on('click', function (e) {
+                e.preventDefault();
+                closeRelatedPopup();
+            });
+
+            $(window).on('related-popup:close', function () {
+                closeRelatedPopup();
+            });
+        };
+
         initjQueryCaseInsensitiveSelector();
         initjQueryCaseInsensitiveSelector();
         initjQuerySlideFadeToggle();
         initjQuerySlideFadeToggle();
         initFilters();
         initFilters();
@@ -983,5 +1021,6 @@
         initUnsavedChangesWarning();
         initUnsavedChangesWarning();
         initScrollbars();
         initScrollbars();
         initThemeChoosing();
         initThemeChoosing();
+        initRelatedPopups();
     });
     });
 })(jet.jQuery);
 })(jet.jQuery);

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
jet/static/jet/js/main.min.js


+ 82 - 55
jet/templates/admin/base.html

@@ -1,5 +1,5 @@
 {% load i18n admin_static jet_tags %}
 {% load i18n admin_static jet_tags %}
-{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}{% format_current_language LANGUAGE_CODE as LANGUAGE_CODE %}{% get_themes as THEMES %}{% get_current_theme as THEME %}{% get_current_jet_version as JET_VERSION %}
+{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}{% format_current_language LANGUAGE_CODE as LANGUAGE_CODE %}{% get_themes as THEMES %}{% get_current_theme as THEME %}{% get_current_jet_version as JET_VERSION %}{% get_side_menu_compact as SIDE_MENU_COMPACT %}
 {% block html %}<!DOCTYPE html>
 {% block html %}<!DOCTYPE html>
 <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
 <html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
 <head>
 <head>
@@ -155,6 +155,10 @@
             </div>
             </div>
 
 
         {% if not is_popup %}
         {% if not is_popup %}
+            <div class="related-popup-container">
+                <a href="#" class="related-popup-back"><span class="icon-arrow-left"></span> {% trans "back" %}</a>
+                <span class="icon-refresh loading-indicator"></span>
+            </div>
             <div class="sidebar">
             <div class="sidebar">
                 <div class="sidebar-menu-wrapper">
                 <div class="sidebar-menu-wrapper">
                     <div id="branding">
                     <div id="branding">
@@ -196,34 +200,55 @@
                                     {% csrf_token %}
                                     {% csrf_token %}
                                     <input type="hidden" name="app_label">
                                     <input type="hidden" name="app_label">
                                 </form>
                                 </form>
-                                <li class="sidebar-menu-item no-horizontal-padding">
-                                    <span class="sidebar-menu-item-title">{% trans 'Applications' %}</span>
-                                    <ul class="sidebar-menu-item-list apps-list-pinned">
-                                        {% for app in app_list.pinned_apps %}
-                                            <li class="sidebar-menu-item-list-item app-item pinned app-{{ app.app_label }}" data-app-label="{{ app.app_label }}">
-                                                <a href="{{ app.app_url }}" class="sidebar-menu-item-list-item-link popup-item-link" data-popup-item-id="sidebar-popup-item-{{ app.app_label }}">
-                                                    <span class="sidebar-menu-item-list-item-arrow icon-arrow-right"></span>
-                                                    <span class="sidebar-menu-item-list-item-link-pin icon-star pin-toggle"></span>
-                                                    <span class="sidebar-menu-item-list-item-link-unpin icon-cross pin-toggle"></span>
-                                                    {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
-                                                </a>
-                                            </li>
-                                        {% endfor %}
-                                    </ul>
-                                    <a href="#" class="sidebar-menu-item-action apps-hide"></a>
-                                    <ul class="sidebar-menu-item-list apps-list">
-                                        {% for app in app_list.apps %}
-                                            <li class="sidebar-menu-item-list-item app-item app-{{ app.app_label }}" data-app-label="{{ app.app_label }}">
-                                                <a href="{{ app.app_url }}" class="sidebar-menu-item-list-item-link popup-item-link" data-popup-item-id="sidebar-popup-item-{{ app.app_label }}">
-                                                    <span class="sidebar-menu-item-list-item-arrow icon-arrow-right"></span>
-                                                    <span class="sidebar-menu-item-list-item-link-pin icon-star pin-toggle"></span>
-                                                    <span class="sidebar-menu-item-list-item-link-unpin icon-cross pin-toggle"></span>
-                                                    {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
-                                                </a>
-                                            </li>
-                                        {% endfor %}
-                                    </ul>
-                                </li>
+                                {% if SIDE_MENU_COMPACT %}
+                                    {% for app in app_list.all_apps %}
+                                        <li class="sidebar-menu-item no-horizontal-padding">
+                                            <a href="{{ app.app_url }}" class="sidebar-menu-item-link">
+                                                {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
+                                            </a>
+                                            <ul class="sidebar-menu-item-list">
+                                                {% for model in app.models %}
+                                                    <li class="sidebar-menu-item-list-item">
+                                                        {% if model.admin_url %}
+                                                            <a href="{{ model.admin_url }}" class="sidebar-menu-item-list-item-link">{{ model.name }}</a>
+                                                        {% else %}
+                                                            {{ model.name }}
+                                                        {% endif %}
+                                                    </li>
+                                                {% endfor %}
+                                            </ul>
+                                        </li>
+                                    {% endfor %}
+                                {% else %}
+                                    <li class="sidebar-menu-item no-horizontal-padding">
+                                        <span class="sidebar-menu-item-title">{% trans 'Applications' %}</span>
+                                        <ul class="sidebar-menu-item-list apps-list-pinned">
+                                            {% for app in app_list.pinned_apps %}
+                                                <li class="sidebar-menu-item-list-item app-item pinned app-{{ app.app_label }}" data-app-label="{{ app.app_label }}">
+                                                    <a href="{{ app.app_url }}" class="sidebar-menu-item-list-item-link popup-item-link" data-popup-item-id="sidebar-popup-item-{{ app.app_label }}">
+                                                        <span class="sidebar-menu-item-list-item-arrow icon-arrow-right"></span>
+                                                        <span class="sidebar-menu-item-list-item-link-pin icon-star pin-toggle"></span>
+                                                        <span class="sidebar-menu-item-list-item-link-unpin icon-cross pin-toggle"></span>
+                                                        {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
+                                                    </a>
+                                                </li>
+                                            {% endfor %}
+                                        </ul>
+                                        <a href="#" class="sidebar-menu-item-action apps-hide"></a>
+                                        <ul class="sidebar-menu-item-list apps-list">
+                                            {% for app in app_list.apps %}
+                                                <li class="sidebar-menu-item-list-item app-item app-{{ app.app_label }}" data-app-label="{{ app.app_label }}">
+                                                    <a href="{{ app.app_url }}" class="sidebar-menu-item-list-item-link popup-item-link" data-popup-item-id="sidebar-popup-item-{{ app.app_label }}">
+                                                        <span class="sidebar-menu-item-list-item-arrow icon-arrow-right"></span>
+                                                        <span class="sidebar-menu-item-list-item-link-pin icon-star pin-toggle"></span>
+                                                        <span class="sidebar-menu-item-list-item-link-unpin icon-cross pin-toggle"></span>
+                                                        {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
+                                                    </a>
+                                                </li>
+                                            {% endfor %}
+                                        </ul>
+                                    </li>
+                                {% endif %}
                             {% endif %}
                             {% endif %}
                             <li class="sidebar-menu-item no-horizontal-padding">
                             <li class="sidebar-menu-item no-horizontal-padding">
                                 <div class="dialog-confirm" id="bookmarks-add-dialog" title="{% trans "Add bookmark" %}">
                                 <div class="dialog-confirm" id="bookmarks-add-dialog" title="{% trans "Add bookmark" %}">
@@ -269,36 +294,38 @@
                 <div class="sidebar-copyright">powered by DJANGO JET</div>
                 <div class="sidebar-copyright">powered by DJANGO JET</div>
             </div>
             </div>
 
 
-            {% if app_list %}
-                <div class="sidebar-popup-container">
-                    <div class="sidebar-popup">
-                        {% for app in app_list.apps|add:app_list.pinned_apps %}
-                            <div class="sidebar-popup-item" id="sidebar-popup-item-{{ app.app_label }}">
-                                <div class="sidebar-popup-title">
-                                    {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
-                                </div>
-
-                                <input class="sidebar-popup-search" placeholder="Search...">
+            {% if not SIDE_MENU_COMPACT %}
+                {% if app_list %}
+                    <div class="sidebar-popup-container">
+                        <div class="sidebar-popup">
+                            {% for app in app_list.apps|add:app_list.pinned_apps %}
+                                <div class="sidebar-popup-item" id="sidebar-popup-item-{{ app.app_label }}">
+                                    <div class="sidebar-popup-title">
+                                        {% if app.name != app.app_label|capfirst|escape %}{{ app.name }}{% else %}{% trans app.app_label as app_label %}{{ app_label|capfirst|escape }}{% endif %}
+                                    </div>
 
 
-                                <ul class="sidebar-popup-list">
-                                    <li class="sidebar-popup-list-item app-{{ app.app_label }}{{ app.current|yesno:" current," }}">
-                                        <a href="{{ app.app_url }}" class="sidebar-popup-list-item-link">{% trans 'Application page' %}</a>
-                                    </li>
+                                    <input class="sidebar-popup-search" placeholder="Search...">
 
 
-                                    {% for model in app.models %}
-                                        <li class="sidebar-popup-list-item model-{{ model.object_name|lower }}{{ model.current|yesno:" current," }}">
-                                            {% if model.admin_url %}
-                                                <a href="{{ model.admin_url }}" class="sidebar-popup-list-item-link">{{ model.name }}</a>
-                                            {% else %}
-                                                {{ model.name }}
-                                            {% endif %}
+                                    <ul class="sidebar-popup-list">
+                                        <li class="sidebar-popup-list-item app-{{ app.app_label }}{{ app.current|yesno:" current," }}">
+                                            <a href="{{ app.app_url }}" class="sidebar-popup-list-item-link">{% trans 'Application page' %}</a>
                                         </li>
                                         </li>
-                                    {% endfor %}
-                                </ul>
-                            </div>
-                        {% endfor %}
+
+                                        {% for model in app.models %}
+                                            <li class="sidebar-popup-list-item model-{{ model.object_name|lower }}{{ model.current|yesno:" current," }}">
+                                                {% if model.admin_url %}
+                                                    <a href="{{ model.admin_url }}" class="sidebar-popup-list-item-link">{{ model.name }}</a>
+                                                {% else %}
+                                                    {{ model.name }}
+                                                {% endif %}
+                                            </li>
+                                        {% endfor %}
+                                    </ul>
+                                </div>
+                            {% endfor %}
+                        </div>
                     </div>
                     </div>
-                </div>
+                {% endif %}
             {% endif %}
             {% endif %}
             </div>
             </div>
         {% endif %}
         {% endif %}

+ 2 - 4
jet/templates/admin/change_form.html

@@ -3,7 +3,6 @@
 
 
 {% block extrahead %}
 {% block extrahead %}
     {{ block.super }}
     {{ block.super }}
-    <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
     {{ media }}
     {{ media }}
 {% endblock %}
 {% endblock %}
 
 
@@ -46,6 +45,7 @@
         <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>
         <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>
             {% csrf_token %}
             {% csrf_token %}
             {% block form_top %}{% endblock %}
             {% block form_top %}{% endblock %}
+            {% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
             {% filter_fieldsets_with_errors adminform as fieldsets_with_errors %}
             {% filter_fieldsets_with_errors adminform as fieldsets_with_errors %}
             <div class="changeform">
             <div class="changeform">
                 {% if adminform.fieldsets|length > 1 or inline_admin_formsets|length > 0 %}
                 {% if adminform.fieldsets|length > 1 or inline_admin_formsets|length > 0 %}
@@ -78,7 +78,6 @@
 
 
                 {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
                 {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
                 {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
                 {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
-                {% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
                 {% if errors %}
                 {% if errors %}
                     {{ adminform.form.non_field_errors }}
                     {{ adminform.form.non_field_errors }}
                 {% endif %}
                 {% endif %}
@@ -104,8 +103,6 @@
 
 
                 {% block after_related_objects %}{% endblock %}
                 {% block after_related_objects %}{% endblock %}
 
 
-                {% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
-
                 {% block admin_change_form_document_ready %}
                 {% block admin_change_form_document_ready %}
                     <script type="text/javascript">
                     <script type="text/javascript">
                         (function($) {
                         (function($) {
@@ -129,6 +126,7 @@
                 {# JavaScript for prepopulated fields #}
                 {# JavaScript for prepopulated fields #}
                 {% prepopulated_fields_js %}
                 {% prepopulated_fields_js %}
             </div>
             </div>
+            {% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
         </form>
         </form>
     </div>
     </div>
 {% endblock %}
 {% endblock %}

+ 1 - 4
jet/templates/admin/change_list.html

@@ -5,9 +5,6 @@
 
 
 {% block extrastyle %}
 {% block extrastyle %}
     {{ block.super }}
     {{ block.super }}
-    {% if cl.formset or action_form %}
-    <script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
-    {% endif %}
     {{ media.css }}
     {{ media.css }}
 {% endblock %}
 {% endblock %}
 
 
@@ -43,7 +40,7 @@
   <div id="content-main">
   <div id="content-main">
     {% block object-tools %}
     {% block object-tools %}
       {% if has_add_permission %}
       {% if has_add_permission %}
-        <ul class="object-tools fr">
+        <ul class="object-tools">
           {% block object-tools-items %}
           {% block object-tools-items %}
             <li>
             <li>
               {% url cl.opts|admin_urlname:'add' as add_url %}
               {% url cl.opts|admin_urlname:'add' as add_url %}

+ 1 - 1
jet/templates/admin/includes/fieldset.html

@@ -18,7 +18,7 @@
                     {% if field.is_checkbox %}
                     {% if field.is_checkbox %}
                         {{ field.field }}{{ field.label_tag }}
                         {{ field.field }}{{ field.label_tag }}
                     {% else %}
                     {% else %}
-                        {{ field.label_tag }}
+                        {% if field.field.label != '' %}{{ field.label_tag }}{% endif %}
                         {% if field.is_readonly %}
                         {% if field.is_readonly %}
                             <p>{{ field.contents }}</p>
                             <p>{{ field.contents }}</p>
                         {% else %}
                         {% else %}

+ 3 - 5
jet/templates/admin/popup_response.html

@@ -4,14 +4,12 @@
   <body>
   <body>
     <script type="text/javascript">
     <script type="text/javascript">
       {% if action == 'change' %}
       {% if action == 'change' %}
-        opener.dismissChangeRelatedObjectPopup(window, "{{ value }}", "{{ obj }}", "{{ new_value }}");
+        parent.window.dismissChangeRelatedObjectPopup(window, "{{ value }}", "{{ obj }}", "{{ new_value }}");
       {% elif action == 'delete' %}
       {% elif action == 'delete' %}
-        opener.dismissDeleteRelatedObjectPopup(window, "{{ value }}");
+        parent.window.dismissDeleteRelatedObjectPopup(window, "{{ value }}");
       {% else %}
       {% else %}
-        opener.dismissAddRelatedObjectPopup(window, "{{ value }}", "{{ obj }}");
+        parent.window.dismissAddRelatedObjectPopup(window, "{{ value }}", "{{ obj }}");
       {% endif %}
       {% endif %}
-
-      opener.jet.jQuery('select').trigger('select:init');
     </script>
     </script>
   </body>
   </body>
 </html>
 </html>

+ 3 - 4
jet/templates/registration/password_change_form.html

@@ -46,12 +46,11 @@
                     </div>
                     </div>
                 </fieldset>
                 </fieldset>
 
 
-                <div class="submit-row">
-                    <input type="submit" value="{% trans 'Change my password' %}" class="default" />
-                </div>
-
                 <script type="text/javascript">document.getElementById("id_old_password").focus();</script>
                 <script type="text/javascript">document.getElementById("id_old_password").focus();</script>
             </div>
             </div>
+            <div class="submit-row">
+                <input type="submit" value="{% trans 'Change my password' %}" class="default" />
+            </div>
         </form>
         </form>
     </div>
     </div>
 {% endblock %}
 {% endblock %}

+ 45 - 2
jet/templatetags/jet_tags.py

@@ -126,12 +126,48 @@ def format_deletable_object(deletable_object):
 
 
 @register.assignment_tag(takes_context=True)
 @register.assignment_tag(takes_context=True)
 def get_menu(context):
 def get_menu(context):
-    app_list = get_app_list(context)
+    if settings.JET_SIDE_MENU_CUSTOM_APPS not in (None, False):
+        app_list = get_app_list(context, False)
+        app_dict = {}
+        models_dict = {}
+
+        for app in app_list:
+            app_label = app.get('app_label', app.get('name'))
+            app_dict[app_label] = app
+
+            for model in app['models']:
+                if app_label not in models_dict:
+                    models_dict[app_label] = {}
+
+                models_dict[app_label][model['object_name']] = model
+
+            app['models'] = []
+
+        app_list = []
+
+        for item in settings.JET_SIDE_MENU_CUSTOM_APPS:
+            app_label, models = item
+
+            if app_label in app_dict:
+                app = app_dict[app_label]
+
+                for model_label in models:
+                    if model_label == '__all__':
+                        app['models'] = models_dict[app_label].values()
+                        break
+                    elif model_label in models_dict[app_label]:
+                        model = models_dict[app_label][model_label]
+                        app['models'].append(model)
+
+                app_list.append(app)
+    else:
+        app_list = get_app_list(context)
 
 
     current_found = False
     current_found = False
 
 
     pinned = PinnedApplication.objects.values_list('app_label', flat=True)
     pinned = PinnedApplication.objects.values_list('app_label', flat=True)
 
 
+    all_aps = []
     apps = []
     apps = []
     pinned_apps = []
     pinned_apps = []
 
 
@@ -152,7 +188,9 @@ def get_menu(context):
         else:
         else:
             apps.append(app)
             apps.append(app)
 
 
-    return {'apps': apps, 'pinned_apps': pinned_apps}
+        all_aps.append(app)
+
+    return {'apps': apps, 'pinned_apps': pinned_apps, 'all_apps': all_aps}
 
 
 
 
 @register.assignment_tag
 @register.assignment_tag
@@ -261,3 +299,8 @@ def get_themes():
 @register.assignment_tag
 @register.assignment_tag
 def get_current_jet_version():
 def get_current_jet_version():
     return VERSION
     return VERSION
+
+
+@register.assignment_tag
+def get_side_menu_compact():
+    return settings.JET_SIDE_MENU_COMPACT

+ 68 - 0
jet/tests/test_ordered_set.py

@@ -0,0 +1,68 @@
+from django.test import TestCase
+import pickle
+from jet.ordered_set import OrderedSet
+
+
+class OrderedSetTestCase(TestCase):
+    def test_pickle(self):
+        set1 = OrderedSet('abracadabra')
+        roundtrip = pickle.loads(pickle.dumps(set1))
+        self.assertEqual(roundtrip, set1)
+
+    def test_empty_pickle(self):
+        empty_oset = OrderedSet()
+        empty_roundtrip = pickle.loads(pickle.dumps(empty_oset))
+        self.assertEqual(empty_roundtrip, empty_oset)
+
+    def test_order(self):
+        set1 = OrderedSet('abracadabra')
+        self.assertEqual(len(set1), 5)
+        self.assertEqual(set1, OrderedSet(['a', 'b', 'r', 'c', 'd']))
+        self.assertEqual(list(reversed(set1)), ['d', 'c', 'r', 'b', 'a'])
+
+    def test_binary_operations(self):
+        set1 = OrderedSet('abracadabra')
+        set2 = OrderedSet('simsalabim')
+
+        self.assertNotEqual(set1, set2)
+        self.assertEqual(set1 & set2, OrderedSet(['a', 'b']))
+        self.assertEqual(set1 | set2, OrderedSet(['a', 'b', 'r', 'c', 'd', 's', 'i', 'm', 'l']))
+        self.assertEqual(set1 - set2, OrderedSet(['r', 'c', 'd']))
+
+    def test_remove(self):
+        set1 = OrderedSet('abracadabra')
+
+        set1.remove('a')
+        set1.remove('b')
+
+        self.assertEqual(set1, OrderedSet('rcd'))
+        self.assertNotIn('a', set1)
+        self.assertNotIn('b', set1)
+        self.assertIn('r', set1)
+
+        set1.discard('a')
+        set1.discard('a')
+
+    def test_remove_error(self):
+        set1 = OrderedSet('abracadabra')
+        try:
+            set1.remove('z')
+        except KeyError:
+            pass
+
+    def test_clear(self):
+        set1 = OrderedSet('abracadabra')
+        set1.clear()
+
+        self.assertEqual(len(set1), 0)
+        self.assertEqual(set1, OrderedSet())
+
+    def test_pop(self):
+        set1 = OrderedSet('ab')
+        elem = set1.pop()
+
+        self.assertEqual(elem, 'b')
+        elem = set1.pop()
+
+        self.assertEqual(elem, 'a')
+        self.assertRaises(KeyError, set1.pop)

+ 0 - 2
jet/tests/test_tags.py

@@ -1,6 +1,4 @@
 from django import forms
 from django import forms
-from django.forms import ModelChoiceField
-from django.forms.forms import BoundField
 from django.test import TestCase
 from django.test import TestCase
 from jet.templatetags.jet_tags import select2_lookups
 from jet.templatetags.jet_tags import select2_lookups
 from jet.tests.models import TestModel, SearchableTestModel
 from jet.tests.models import TestModel, SearchableTestModel

+ 49 - 1
jet/tests/test_utils.py

@@ -1,7 +1,9 @@
+from datetime import datetime, date
 import json
 import json
+from django.contrib.admin import AdminSite
 from django.test import TestCase
 from django.test import TestCase
 from jet.tests.models import TestModel
 from jet.tests.models import TestModel
-from jet.utils import JsonResponse, get_model_instance_label
+from jet.utils import JsonResponse, get_model_instance_label, get_app_list, get_admin_site, LazyDateTimeEncoder
 
 
 
 
 class UtilsTestCase(TestCase):
 class UtilsTestCase(TestCase):
@@ -18,5 +20,51 @@ class UtilsTestCase(TestCase):
         pinned_application = TestModel.objects.create(field1=field1, field2=field2)
         pinned_application = TestModel.objects.create(field1=field1, field2=field2)
         self.assertEqual(get_model_instance_label(pinned_application), '%s%d' % (field1, field2))
         self.assertEqual(get_model_instance_label(pinned_application), '%s%d' % (field1, field2))
 
 
+    def test_get_app_list(self):
+        class User:
+            is_active = True
+            is_staff = True
 
 
+            def has_module_perms(self, app):
+                return True
+
+            def has_perm(self, object):
+                return True
+
+        class Request:
+            user = User()
+
+        app_list = get_app_list({
+            'request': Request(),
+            'user': None
+        })
+
+        self.assertIsInstance(app_list, list)
+
+        for app in app_list:
+            self.assertIsInstance(app, dict)
+            self.assertIsNotNone(app, app.get('models'))
+            self.assertIsNotNone(app, app.get('app_url'))
+            self.assertIsNotNone(app, app.get('app_label'))
+
+            for model in app['models']:
+                self.assertIsNotNone(app, model.get('object_name'))
+                self.assertIsNotNone(app, model.get('name'))
+
+    def test_get_admin_site(self):
+        admin_site = get_admin_site('')
+        self.assertIsInstance(admin_site, AdminSite)
+
+    def test_lazy_date_time_encoder_dates(self):
+        encoder = LazyDateTimeEncoder()
+
+        ts = datetime.now()
+        self.assertEqual(encoder.encode(ts), '"%s"' % ts.isoformat())
+
+        ts = date(2015, 5, 3)
+        self.assertEqual(encoder.encode(ts), '"%s"' % ts.isoformat())
+
+    def test_lazy_date_time_encoder_dict(self):
+        encoder = LazyDateTimeEncoder()
+        self.assertEqual(encoder.encode({'key': 1}), '{"key": 1}')
 
 

+ 0 - 5
jet/tests/test_views.py

@@ -223,8 +223,3 @@ class ViewsTestCase(TestCase):
         response = json.loads(response.content.decode())
         response = json.loads(response.content.decode())
         self.assertFalse(response['error'])
         self.assertFalse(response['error'])
         self.assertFalse(UserDashboardModule.objects.filter(pk=module.pk).exists())
         self.assertFalse(UserDashboardModule.objects.filter(pk=module.pk).exists())
-
-
-
-
-

+ 1 - 1
jet/urls.py

@@ -27,7 +27,7 @@ urlpatterns = patterns(
     url(
     url(
         r'^jsi18n/$',
         r'^jsi18n/$',
         javascript_catalog,
         javascript_catalog,
-        {'packages': ('jet',)},
+        {'packages': ('django.conf', 'django.contrib.admin', 'jet',)},
         name='jsi18n'
         name='jsi18n'
     ),
     ),
 )
 )

+ 74 - 10
jet/utils.py

@@ -1,12 +1,19 @@
 import datetime
 import datetime
 import json
 import json
+try:
+    from django.apps.registry import apps
+except ImportError:
+    try:
+        from django.apps import apps # Fix Django 1.7 import issue
+    except ImportError:
+        pass
 from django.core.serializers.json import DjangoJSONEncoder
 from django.core.serializers.json import DjangoJSONEncoder
 from django.http import HttpResponse
 from django.http import HttpResponse
-from django.core.urlresolvers import reverse, resolve
+from django.core.urlresolvers import reverse, resolve, NoReverseMatch
 from django.contrib import admin
 from django.contrib import admin
 from django.contrib.admin import AdminSite
 from django.contrib.admin import AdminSite
 from django.utils.encoding import smart_text
 from django.utils.encoding import smart_text
-from jet import settings
+from django.utils.text import capfirst
 from django.contrib import messages
 from django.contrib import messages
 from django.utils.encoding import force_text
 from django.utils.encoding import force_text
 from django.utils.functional import Promise
 from django.utils.functional import Promise
@@ -33,13 +40,70 @@ class JsonResponse(HttpResponse):
         super(JsonResponse, self).__init__(content=data, **kwargs)
         super(JsonResponse, self).__init__(content=data, **kwargs)
 
 
 
 
-def get_app_list(context):
-    template_response = get_admin_site(context.get('current_app', '')).index(context['request'])
-
-    try:
-        return template_response.context_data['app_list']
-    except Exception:
-        return None
+def get_app_list(context, order=True):
+    admin_site = get_admin_site(context.get('current_app', ''))
+    request = context['request']
+
+    app_dict = {}
+    for model, model_admin in admin_site._registry.items():
+        app_label = model._meta.app_label
+        try:
+            has_module_perms = model_admin.has_module_permission(request)
+        except AttributeError:
+            has_module_perms = request.user.has_module_perms(app_label) # Fix Django < 1.8 issue
+
+        if has_module_perms:
+            perms = model_admin.get_model_perms(request)
+
+            # Check whether user has any perm for this module.
+            # If so, add the module to the model_list.
+            if True in perms.values():
+                info = (app_label, model._meta.model_name)
+                model_dict = {
+                    'name': capfirst(model._meta.verbose_name_plural),
+                    'object_name': model._meta.object_name,
+                    'perms': perms,
+                }
+                if perms.get('change', False):
+                    try:
+                        model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=admin_site.name)
+                    except NoReverseMatch:
+                        pass
+                if perms.get('add', False):
+                    try:
+                        model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=admin_site.name)
+                    except NoReverseMatch:
+                        pass
+                if app_label in app_dict:
+                    app_dict[app_label]['models'].append(model_dict)
+                else:
+                    try:
+                        name = apps.get_app_config(app_label).verbose_name
+                    except NameError:
+                        name = app_label.title()
+                    app_dict[app_label] = {
+                        'name': name,
+                        'app_label': app_label,
+                        'app_url': reverse(
+                            'admin:app_list',
+                            kwargs={'app_label': app_label},
+                            current_app=admin_site.name,
+                        ),
+                        'has_module_perms': has_module_perms,
+                        'models': [model_dict],
+                    }
+
+    # Sort the apps alphabetically.
+    app_list = list(app_dict.values())
+
+    if order:
+        app_list.sort(key=lambda x: x['name'].lower())
+
+        # Sort the models alphabetically within each app.
+        for app in app_list:
+            app['models'].sort(key=lambda x: x['name'])
+
+    return app_list
 
 
 
 
 def get_admin_site(current_app):
 def get_admin_site(current_app):
@@ -64,7 +128,7 @@ class LazyDateTimeEncoder(json.JSONEncoder):
             return obj.isoformat()
             return obj.isoformat()
         elif isinstance(obj, Promise):
         elif isinstance(obj, Promise):
             return force_text(obj)
             return force_text(obj)
-        return json.JSONEncoder.default(self, obj)
+        return self.encode(obj)
 
 
 
 
 def get_model_instance_label(instance):
 def get_model_instance_label(instance):

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels