typus 0.9.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. data/.gitignore +8 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +86 -0
  4. data/Rakefile +61 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/admin/master_controller.rb +354 -0
  7. data/app/controllers/typus_controller.rb +128 -0
  8. data/app/helpers/admin/form_helper.rb +386 -0
  9. data/app/helpers/admin/master_helper.rb +104 -0
  10. data/app/helpers/admin/public_helper.rb +27 -0
  11. data/app/helpers/admin/sidebar_helper.rb +236 -0
  12. data/app/helpers/admin/table_helper.rb +227 -0
  13. data/app/helpers/typus_helper.rb +194 -0
  14. data/app/models/typus_mailer.rb +14 -0
  15. data/app/models/typus_user.rb +5 -0
  16. data/app/views/admin/dashboard/_sidebar.html.erb +9 -0
  17. data/app/views/admin/resources/edit.html.erb +24 -0
  18. data/app/views/admin/resources/index.html.erb +23 -0
  19. data/app/views/admin/resources/new.html.erb +22 -0
  20. data/app/views/admin/resources/show.html.erb +18 -0
  21. data/app/views/admin/shared/_footer.html.erb +1 -0
  22. data/app/views/admin/shared/_pagination.html.erb +28 -0
  23. data/app/views/layouts/admin.html.erb +73 -0
  24. data/app/views/layouts/typus.html.erb +29 -0
  25. data/app/views/typus/dashboard.html.erb +9 -0
  26. data/app/views/typus/recover_password.html.erb +7 -0
  27. data/app/views/typus/reset_password.html.erb +15 -0
  28. data/app/views/typus/sign_in.html.erb +9 -0
  29. data/app/views/typus/sign_up.html.erb +7 -0
  30. data/app/views/typus_mailer/reset_password_link.erb +11 -0
  31. data/config/locales/typus/de.yml +109 -0
  32. data/config/locales/typus/es.yml +109 -0
  33. data/config/locales/typus/language.yml.template +113 -0
  34. data/config/locales/typus/pt-BR.yml +111 -0
  35. data/config/locales/typus/ru.yml +111 -0
  36. data/generators/typus/templates/config/initializers/typus.rb +33 -0
  37. data/generators/typus/templates/config/typus/README +51 -0
  38. data/generators/typus/templates/config/typus/application.yml +6 -0
  39. data/generators/typus/templates/config/typus/application_roles.yml +23 -0
  40. data/generators/typus/templates/config/typus/typus.yml +14 -0
  41. data/generators/typus/templates/config/typus/typus_roles.yml +2 -0
  42. data/generators/typus/templates/db/create_typus_users.rb +21 -0
  43. data/generators/typus/templates/public/images/admin/arrow_down.gif +0 -0
  44. data/generators/typus/templates/public/images/admin/arrow_up.gif +0 -0
  45. data/generators/typus/templates/public/images/admin/spinner.gif +0 -0
  46. data/generators/typus/templates/public/images/admin/status_false.gif +0 -0
  47. data/generators/typus/templates/public/images/admin/status_true.gif +0 -0
  48. data/generators/typus/templates/public/images/admin/trash.gif +0 -0
  49. data/generators/typus/templates/public/javascripts/admin/application.js +14 -0
  50. data/generators/typus/templates/public/stylesheets/admin/reset.css +68 -0
  51. data/generators/typus/templates/public/stylesheets/admin/screen.css +729 -0
  52. data/generators/typus/typus_generator.rb +122 -0
  53. data/generators/typus_update_schema_to_01/templates/config/typus.yml +14 -0
  54. data/generators/typus_update_schema_to_01/templates/migration.rb +11 -0
  55. data/generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb +19 -0
  56. data/lib/typus.rb +122 -0
  57. data/lib/typus/active_record.rb +307 -0
  58. data/lib/typus/authentication.rb +142 -0
  59. data/lib/typus/configuration.rb +85 -0
  60. data/lib/typus/extensions/routes.rb +15 -0
  61. data/lib/typus/format.rb +55 -0
  62. data/lib/typus/generator.rb +81 -0
  63. data/lib/typus/hash.rb +8 -0
  64. data/lib/typus/locale.rb +17 -0
  65. data/lib/typus/object.rb +21 -0
  66. data/lib/typus/quick_edit.rb +40 -0
  67. data/lib/typus/reloader.rb +15 -0
  68. data/lib/typus/string.rb +11 -0
  69. data/lib/typus/templates/index.html.erb +11 -0
  70. data/lib/typus/templates/resource_controller.rb.erb +15 -0
  71. data/lib/typus/templates/resource_controller_test.rb.erb +10 -0
  72. data/lib/typus/templates/resources_controller.rb.erb +37 -0
  73. data/lib/typus/user.rb +134 -0
  74. data/lib/vendor/active_record.rb +15 -0
  75. data/lib/vendor/paginator.rb +143 -0
  76. data/rails/init.rb +3 -0
  77. data/tasks/typus_tasks.rake +32 -0
  78. data/test/config/broken/application.yml +68 -0
  79. data/test/config/broken/application_roles.yml +20 -0
  80. data/test/config/broken/empty.yml +0 -0
  81. data/test/config/broken/empty_roles.yml +0 -0
  82. data/test/config/broken/undefined.yml +3 -0
  83. data/test/config/broken/undefined_roles.yml +6 -0
  84. data/test/config/default/typus.yml +14 -0
  85. data/test/config/default/typus_roles.yml +2 -0
  86. data/test/config/empty/empty_01.yml +0 -0
  87. data/test/config/empty/empty_01_roles.yml +0 -0
  88. data/test/config/empty/empty_02.yml +0 -0
  89. data/test/config/empty/empty_02_roles.yml +0 -0
  90. data/test/config/locales/es.yml +10 -0
  91. data/test/config/ordered/001_roles.yml +2 -0
  92. data/test/config/ordered/002_roles.yml +2 -0
  93. data/test/config/unordered/app_one_roles.yml +2 -0
  94. data/test/config/unordered/app_two_roles.yml +2 -0
  95. data/test/config/working/application.yml +68 -0
  96. data/test/config/working/application_roles.yml +22 -0
  97. data/test/config/working/typus.yml +14 -0
  98. data/test/config/working/typus_roles.yml +2 -0
  99. data/test/fixtures/app/controllers/admin/assets_controller.rb +2 -0
  100. data/test/fixtures/app/controllers/admin/categories_controller.rb +2 -0
  101. data/test/fixtures/app/controllers/admin/comments_controller.rb +2 -0
  102. data/test/fixtures/app/controllers/admin/pages_controller.rb +2 -0
  103. data/test/fixtures/app/controllers/admin/posts_controller.rb +2 -0
  104. data/test/fixtures/app/controllers/admin/status_controller.rb +6 -0
  105. data/test/fixtures/app/controllers/admin/typus_users_controller.rb +2 -0
  106. data/test/fixtures/app/controllers/admin/watch_dog_controller.rb +6 -0
  107. data/test/fixtures/app/views/admin/comments/_edit.html.erb +1 -0
  108. data/test/fixtures/app/views/admin/comments/_index.html.erb +1 -0
  109. data/test/fixtures/app/views/admin/comments/_new.html.erb +1 -0
  110. data/test/fixtures/app/views/admin/comments/_show.html.erb +1 -0
  111. data/test/fixtures/app/views/admin/comments/_sidebar.html.erb +1 -0
  112. data/test/fixtures/app/views/admin/dashboard/_content.html.erb +1 -0
  113. data/test/fixtures/app/views/admin/dashboard/_sidebar.html.erb +1 -0
  114. data/test/fixtures/app/views/admin/resources/_sidebar.html.erb +1 -0
  115. data/test/fixtures/app/views/admin/shared/_footer.html.erb +1 -0
  116. data/test/fixtures/app/views/admin/status/index.html.erb +1 -0
  117. data/test/fixtures/app/views/admin/templates/_datepicker.html.erb +1 -0
  118. data/test/fixtures/assets.yml +11 -0
  119. data/test/fixtures/categories.yml +14 -0
  120. data/test/fixtures/comments.yml +27 -0
  121. data/test/fixtures/pages.yml +41 -0
  122. data/test/fixtures/posts.yml +37 -0
  123. data/test/fixtures/typus_users.yml +54 -0
  124. data/test/functional/admin/assets_controller_test.rb +57 -0
  125. data/test/functional/admin/categories_controller_test.rb +106 -0
  126. data/test/functional/admin/comments_controller_test.rb +120 -0
  127. data/test/functional/admin/master_controller_test.rb +5 -0
  128. data/test/functional/admin/posts_controller_test.rb +261 -0
  129. data/test/functional/admin/status_controller_test.rb +43 -0
  130. data/test/functional/admin/typus_users_controller_test.rb +239 -0
  131. data/test/functional/typus_controller_test.rb +321 -0
  132. data/test/helper.rb +51 -0
  133. data/test/helpers/admin/form_helper_test.rb +337 -0
  134. data/test/helpers/admin/master_helper_test.rb +69 -0
  135. data/test/helpers/admin/public_helper_test.rb +26 -0
  136. data/test/helpers/admin/sidebar_helper_test.rb +335 -0
  137. data/test/helpers/admin/table_helper_test.rb +239 -0
  138. data/test/helpers/typus_helper_test.rb +117 -0
  139. data/test/lib/active_record_test.rb +382 -0
  140. data/test/lib/configuration_test.rb +94 -0
  141. data/test/lib/hash_test.rb +11 -0
  142. data/test/lib/routes_test.rb +71 -0
  143. data/test/lib/string_test.rb +25 -0
  144. data/test/lib/typus_test.rb +85 -0
  145. data/test/models.rb +51 -0
  146. data/test/schema.rb +64 -0
  147. data/test/unit/typus_mailer_test.rb +33 -0
  148. data/test/unit/typus_test.rb +17 -0
  149. data/test/unit/typus_user_roles_test.rb +90 -0
  150. data/test/unit/typus_user_test.rb +177 -0
  151. data/test/vendor/active_record_test.rb +18 -0
  152. data/test/vendor/paginator_test.rb +136 -0
  153. data/typus.gemspec +228 -0
  154. metadata +241 -0
@@ -0,0 +1,111 @@
1
+ # Russian (ru) translations for Typus
2
+ # by Alexey Noskov <http://github.com/alno>
3
+
4
+ ru:
5
+ "Email": "E-Mail"
6
+ "Password": "Пароль"
7
+ "Password confirmation": "Подтверждение пароля"
8
+ "Sign in": "Войти"
9
+ "Recover password": "Восстановить пароль"
10
+ "Sign up": "Зарегистрироваться"
11
+ "Enter your email below to create the first user": "Введите E-Mail для создания первого пользователя"
12
+ "That doesn't seem like a valid email address": "E-Mail некорректен"
13
+ "I remember my password": "Запомнить пароль"
14
+ "Password recovery link sent to your email": "Ссылка для восставновления пароля выслана по указанному E-Mail"
15
+ "A valid token is required": "Необходим корректный ключ"
16
+ "The email and/or password you entered is invalid": "E-Mail или пароль введены неверно"
17
+ "There are not defined applications in config/typus/*.yml": "Ни одного приложения не определено в config/typus/*.yml"
18
+ "Overview": "Обзор"
19
+ "Options": "Опции"
20
+ "Password confirmation": "Подтверждение пароля"
21
+ "Change password": "Сменить пароль"
22
+ "There are no {{records}}": "{{records}} не найдены"
23
+ "There are no {{records}} under this filter": "{{records}} по такому фильтру не найдены"
24
+ "Dashboard": "Обзор"
25
+ "Create entry": "Создать запись"
26
+ "Update entry": "Изменить запись"
27
+ "New": "Новый"
28
+ "Show": "Показать"
29
+ "Edit": "Editar"
30
+ "Login": "Редактировать"
31
+ "Setup": "Установки"
32
+ "Create": "Создать"
33
+ "Sign out": "Выйти"
34
+ "Update": "Обновить"
35
+ "View site": "Перейти к сайту"
36
+ "Logged as": "Вы вошли как"
37
+ "Remove filter": "Удалить фильтр"
38
+ "Back to list": "Назад к списку"
39
+ "Actions": "Действия"
40
+ "Add": "Добавить"
41
+ "&larr; Previous": "&larr; Предыдущая"
42
+ "Next &rarr;": "Следующая &rarr;"
43
+ "Previous": "Предыдующий"
44
+ "Next": "Следующий"
45
+ "Search": "Поиск"
46
+ "Search by": "Искать по"
47
+ "{{model}} successfully updated": "{{model}} успешно обновлен"
48
+ "{{model}} successfully created": "{{model}} создан"
49
+ "{{model}} successfully removed": "{{model}} удален"
50
+ "{{model}} {{attribute}} changed": "{{model}} {{attribute}} изменен"
51
+ "You're adding a new {{resource_from}} to {{resource_to}}": "Вы добавляете новый {{resource_from}} для {{resource_to}}."
52
+ "You're adding a new {{resource_from}}": "Вы добавляете новый {{resource_from}}."
53
+ "You're updating a {{resource_from}} for {{resource_to}}": "Вы редактируете {{resource_from}} для {{resource_to}}."
54
+ "You're updating a {{resource_from}}": "Вы редактируете {{resource_from}}."
55
+ "Toggle is disabled": "Переключение отключено"
56
+ "Record moved {{to}}": "Запись перемещена в {{to}}."
57
+ "{{model_a}} related to {{model_b}}": "{{model_a}} присоединен с {{model_b}}."
58
+ "{{model_a}} successfully assigned to {{model_b}}": "{{model_a}} добавлен к {{model_b}}."
59
+ "{{model_a}} unrelated from {{model_b}}": "{{model_a}} отсоединен от {{model_b}}."
60
+ "{{model_a}} removed from {{model_b}}": "{{model_a}} удален из {{model_b}}."
61
+ "Your new password is {{password}}": "Ваш новый пароль: {{password}}."
62
+ "Add entry": "Добавить запись"
63
+ "Go to": "Перейти к"
64
+ "First name": "Имя"
65
+ "Last name": "Фамлия"
66
+ "Roles": "Роли"
67
+ "Status": "Статус"
68
+ "Typus User": "Системный пользователь"
69
+ "System Users Administration": "Администрирование системных пользователей"
70
+ "Resources": "Ресурсы"
71
+ "Up": "Вверх"
72
+ "Down": "Вниз"
73
+ "filter by": "фильтр по"
74
+ "Checked if active": "Отмечено, если активно"
75
+ "As you're not the admin or the owner of this record you cannot edit it": "Вы не администратор и не владелец записи и не можете ее редактировать"
76
+ "You can't change your role": "Вы не можете менять свою собственную роль"
77
+ "Error! Typus User or role doesn't exist": "Ошибка! Пользователь или роль не существует"
78
+ "You can't toggle your status": "Вы не можете менять свой статус"
79
+ "You're not allowed to toggle status": "Вам не позволено менять статус"
80
+ "You can't remove yourself": "Вы не можете удалить себя"
81
+ "You're not allowed to remove Typus Users": "Вам не позволено удалять системных пользователей"
82
+ "{{current_user_role}} can't perform action. ({{action}})": "{{current_user_role}} не может выполнить действие. ({{action}})"
83
+ "{{current_user_role}} can't go to {{action}} on {{controller}}": "{{current_user_role}} не может перейти к {{action}} в {{controller}}."
84
+ "{{current_user_role}} can't delete this item": "{{current_user_role}} не может удалить эту запись"
85
+ "{{current_user_role}} can't perform action ({{action}})": "{{current_user_role}} не может выполнить действие ({{action}})"
86
+ "{{current_user_role}} can't display items": "{{current_user_role}} не может отобразить записи"
87
+ "You can update your password at": "Вы можете установить свой пароль на"
88
+ "If you didn't request a password update, you can ignore this message": "Если Вы не запрашивали обновление пароля, Вы можете проигнорировать это сообщение."
89
+ "Have a nice day": "Добрый день."
90
+ "Reset password": "Сбросить пароль"
91
+ "Add new": "Добавить новый"
92
+ "Do you want to cancel it?": "Вы хотите отменить это?"
93
+ "Click here": "Кликните сюда"
94
+ "Are you sure you want to leave this page?": "Вы уверены, что хотите покинуть страницу?"
95
+ "If you have made any changes to the fields without clicking the Save/Update entry button, your changes will be lost": "Если вы сделали какие-то изменения, не кликая на Обновить/Сохранить, то они будут утеряны."
96
+ "Click OK to continue, or click Cancel to stay on this page": "нажмите Ок, чтобы продолжить или Отмена, чтобы остаться на этой странице."
97
+ "Remove entry?": "Удалить запись?"
98
+ "Unrelate {{unrelate_model}} from {{unrelate_model_from}}?": "Отсоединить {{unrelate_model}} от {{unrelate_model_from}}?"
99
+ "Change {{attribute}}?": "Изменить {{attribute}}?"
100
+ "Set language": "Установить язык"
101
+ "Today": "Сегодня"
102
+ "Past 7 days": "Последние 7 дней"
103
+ "This month": "Этот месяц"
104
+ "This year": "Этот год"
105
+ "Created at": "Создано"
106
+ "Updated at": "Обновлено"
107
+ "{{model}} filtered by {{filtered_by}}":
108
+ "True":
109
+ "False":
110
+ "Set language to":
111
+ "Are you sure you want to sign out and end your session?":
@@ -0,0 +1,33 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # System wide options
4
+
5
+ Typus::Configuration.options[:app_name] = '<%= application %>'
6
+ # Typus::Configuration.options[:config_folder] = 'config/typus'
7
+ # Typus::Configuration.options[:email] = 'admin@example.com'
8
+ # Typus::Configuration.options[:locales] = [ [ "English", :en ], [ "Español", :es ] ]
9
+ # Typus::Configuration.options[:recover_password] = true
10
+ # Typus::Configuration.options[:root] = 'admin'
11
+ # Typus::Configuration.options[:ssl] = false
12
+ # Typus::Configuration.options[:templates_folder] = 'admin/templates'
13
+ # Typus::Configuration.options[:user_class_name] = 'TypusUser'
14
+ # Typus::Configuration.options[:user_fk] = 'typus_user_id'
15
+
16
+ # Model options which can also be defined by model on the yaml files.
17
+
18
+ # Typus::Configuration.options[:default_action_on_item] = 'edit'
19
+ # Typus::Configuration.options[:end_year] = Time.now.year + 1
20
+ # Typus::Configuration.options[:form_rows] = 10
21
+ # Typus::Configuration.options[:icon_on_boolean] = false
22
+ # Typus::Configuration.options[:index_after_save] = true
23
+ # Typus::Configuration.options[:minute_step] = 5
24
+ # Typus::Configuration.options[:nil] = 'nil'
25
+ # Typus::Configuration.options[:on_header] = false
26
+ # Typus::Configuration.options[:only_user_items] = false
27
+ # Typus::Configuration.options[:per_page] = 15
28
+ # Typus::Configuration.options[:sidebar_selector] = 5
29
+ # Typus::Configuration.options[:start_year] = Time.now.year - 10
30
+ # Typus::Configuration.options[:tiny_mce] = { :theme => 'advanced',
31
+ # :theme_advanced_toolbar_location => 'top',
32
+ # :theme_advanced_toolbar_align => 'left' }
33
+ # Typus::Configuration.options[:toggle] = true
@@ -0,0 +1,51 @@
1
+ This is an example of a **Typus** enabled model with all available
2
+ options. You can use this example to customize your YAML files which
3
+ only have set the most common settings.
4
+
5
+ Post:
6
+ fields:
7
+ list: id, title, category_id, created_at, is_published?
8
+ form: title, body, is_published?, created_at
9
+ show: title, category, is_published?
10
+ relationship: title, status
11
+ options:
12
+ auto_generated:
13
+ booleans:
14
+ is_published: ["Yes, it is", "No, it isn't"]
15
+ date_formats:
16
+ created_at: post_long
17
+ selectors:
18
+ read_only:
19
+ tiny_mce:
20
+ fields: body
21
+ options:
22
+ theme: simple
23
+ theme_advanced_buttons3_add:
24
+ - fulscreen
25
+ plugins:
26
+ - fulscreen
27
+ actions:
28
+ index: cleanup
29
+ edit: send_as_newsletter
30
+ show: rebuild
31
+ export: csv, xml, pdf
32
+ order_by: created_at
33
+ relationships:
34
+ filters: is_published?, created_at, category_id
35
+ search: title, body
36
+ application: Application
37
+ description: Some text to describe the model
38
+ options:
39
+ default_action_on_item: show
40
+ end_year: 2015
41
+ form_rows: 25
42
+ icon_on_boolean: true
43
+ index_after_save: false
44
+ minute_step: 15
45
+ nil: 'nil'
46
+ on_header: true
47
+ only_user_items: true
48
+ per_page: 5
49
+ sidebar_selector: 5
50
+ start_year: 1990
51
+ toggle: true
@@ -0,0 +1,6 @@
1
+ # Typus Models Configuration File
2
+ #
3
+ # Use the README file on the same folder as this file as a reference to
4
+ # customize this file to your needs.
5
+
6
+ <%= configuration[:base] %>
@@ -0,0 +1,23 @@
1
+ # Typus Roles Configuration File
2
+ #
3
+ # In this file you can configure the actions available for each of your
4
+ # models on the application.
5
+ #
6
+ # admin:
7
+ # Post: create, read, update, delete
8
+ # Category: create, read, update, delete
9
+ #
10
+ # editor:
11
+ # Post: create, read, update
12
+ # Category: read, update
13
+ #
14
+ # You can also define `resources` which are not related to a model,
15
+ # for example to control MemCached or see the Starling queue statistics.
16
+ #
17
+ # admin:
18
+ # Starling: index
19
+ # MemCached: index, cleanup
20
+ #
21
+
22
+ admin:
23
+ <%= configuration[:roles] %>
@@ -0,0 +1,14 @@
1
+ TypusUser:
2
+ fields:
3
+ list: email, role, status
4
+ form: first_name, last_name, role, email, password, password_confirmation
5
+ options:
6
+ selectors: role
7
+ booleans:
8
+ status: Active, Inactive
9
+ filters: status, role
10
+ search: first_name, last_name, email, role
11
+ application: Typus
12
+ description: System Users Administration
13
+ options:
14
+ icon_on_boolean: false
@@ -0,0 +1,2 @@
1
+ admin:
2
+ TypusUser: create, read, update, delete
@@ -0,0 +1,21 @@
1
+ class CreateTypusUsers < ActiveRecord::Migration
2
+
3
+ def self.up
4
+ create_table :typus_users do |t|
5
+ t.string :first_name, :default => "", :null => false
6
+ t.string :last_name, :default => "", :null => false
7
+ t.string :role, :null => false
8
+ t.string :email, :null => false
9
+ t.boolean :status, :default => false
10
+ t.string :token, :null => false
11
+ t.string :salt, :null => false
12
+ t.string :crypted_password, :null => false
13
+ t.timestamps
14
+ end
15
+ end
16
+
17
+ def self.down
18
+ drop_table :typus_users
19
+ end
20
+
21
+ end
@@ -0,0 +1,14 @@
1
+ // Place your application-specific JavaScript functions and classes for
2
+ // Typus here.
3
+
4
+ function externalLinks() {
5
+ if (!document.getElementsByTagName) return;
6
+ var anchors = document.getElementsByTagName("a");
7
+ for (var i=0; i<anchors.length; i++) {
8
+ var anchor = anchors[i];
9
+ if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
10
+ anchor.target = "_blank";
11
+ }
12
+ }
13
+
14
+ window.onload = externalLinks;
@@ -0,0 +1,68 @@
1
+ /* @group Structure Module */
2
+
3
+ body,html {margin:0;padding:0;}
4
+
5
+ /* @end */
6
+
7
+ /* @group Text Module */
8
+
9
+ abbr,acronym,address,blockquote,br,cite,code,dfn,div,em,h1,h2,h3,h4,h5,h6,kbd,p,pre,q,samp,span,strong,var{font-style:normal;font-weight:normal;text-decoration:none;}
10
+ blockquote,code,div,h1,h2,h3,h4,h5,h6,p,span,pre,hr{margin:0;padding:0;}
11
+ h1,h2,h3,h4,h5,h6{font-size:100%;}
12
+ b,i,em,strong,del,ins,u{font-weight:normal;font-style:normal;text-decoration:none;}
13
+
14
+ /* @end */
15
+
16
+ /* @group Hypertext Module */
17
+
18
+ a{text-decoration:none;}
19
+
20
+ /* @end */
21
+
22
+ /* @group List Module */
23
+
24
+ dl,dt,dd,ol,ul,li{margin:0;padding:0;list-style:none;}
25
+ dl,dt,dd,ol,ul,li{padding:0;margin:0;}
26
+
27
+ /* @end */
28
+
29
+ /* @group Forms Module */
30
+
31
+ button,fieldset,form,input,label,legend,select,optgroup,option,textarea{margin:0;padding:0;}
32
+ fieldset{border:0;}
33
+
34
+ /* @end */
35
+
36
+ /* @group Basic Table Module */
37
+
38
+ caption,table,td,th,tr{margin:0;padding:0;font-weight:normal;text-align:left;}
39
+ table{border-collapse:collapse;border-spacing:0;}
40
+
41
+ /* @end */
42
+
43
+ /* @group Image Module */
44
+
45
+ img{border:0;}
46
+
47
+ /* @end */
48
+
49
+ /* @group Object Module */
50
+
51
+ object,param{}
52
+
53
+ /* @end */
54
+
55
+ /* @group Presentation Module */
56
+
57
+ b,big,hr,i,small,sub,sup,tt{font-size:100%;}
58
+ q:before,q:after{content:'';}
59
+ sup {vertical-align:text-top;}
60
+ sub {vertical-align:text-bottom;}
61
+
62
+ /* @end */
63
+
64
+ /* @group Scripting Module */
65
+
66
+ noscript{}
67
+
68
+ /* @end */
@@ -0,0 +1,729 @@
1
+ /* @group Defaults */
2
+
3
+ html {
4
+ background: #000;
5
+ height: 100%;
6
+ margin-bottom: 1px;
7
+ }
8
+
9
+ body {
10
+ color: #000;
11
+ font-family: "Lucida Grande", Helvetica, Arial, sans-serif;
12
+ font-size: 75%;
13
+ }
14
+
15
+ label {
16
+ display: block;
17
+ font-weight: bold;
18
+ margin-bottom: 5px;
19
+ }
20
+
21
+ strong {
22
+ font-weight: bold;
23
+ }
24
+
25
+ dt {
26
+ float: left;
27
+ font-weight: bold;
28
+ width: 200px;
29
+ }
30
+
31
+ dd {
32
+ margin: 0 0 0 220px;
33
+ }
34
+
35
+ /* @end */
36
+
37
+ /* @group Links */
38
+
39
+ a,
40
+ a:visited,
41
+ a:link {
42
+ color: #000;
43
+ font-weight: normal;
44
+ text-decoration: none;
45
+ }
46
+
47
+ a:hover {
48
+ color: #333;
49
+ text-decoration: underline;
50
+ }
51
+
52
+ a.on {
53
+ color: #333;
54
+ font-weight: bold;
55
+ text-decoration: underline;
56
+ }
57
+
58
+ /* @end */
59
+
60
+ /* @group Wrappers */
61
+
62
+ #header_wrapper {
63
+ background: #000;
64
+ margin: 0 auto;
65
+ padding: 0 10px;
66
+ width: 940px;
67
+ }
68
+
69
+ #wrapper {
70
+ background: #FFF;
71
+ }
72
+
73
+ #content_wrapper {
74
+ background: #FFF;
75
+ min-height: 400px;
76
+ margin: 0 auto;
77
+ padding: 0 10px;
78
+ width: 940px;
79
+ }
80
+
81
+ /* @end */
82
+
83
+ /* @group Header */
84
+
85
+ #header {
86
+ background: #000;
87
+ color: #FFF;
88
+ margin: 0 auto;
89
+ padding: 1em 0;
90
+ }
91
+
92
+ #header h1 {
93
+ display: block;
94
+ float: left;
95
+ font-size: 2em;
96
+ margin-right: 0.25em;
97
+ }
98
+
99
+ #header a {
100
+ color: #FFF;
101
+ }
102
+
103
+ #header .left {
104
+ float: left;
105
+ }
106
+
107
+ #header .right {
108
+ float: right;
109
+ margin-top: 1em;
110
+ }
111
+
112
+ #header .left ul {
113
+ display: block;
114
+ float: left;
115
+ margin-top: 1em;
116
+ }
117
+
118
+ #header .left li,
119
+ #header .right li {
120
+ display: inline;
121
+ padding-left: 0.5em;
122
+ }
123
+
124
+ /* @end */
125
+
126
+ /* @group Content */
127
+
128
+ #content {
129
+ width: 700px;
130
+ float: left;
131
+ padding: 1.5em 0;
132
+ }
133
+
134
+ #content h2 {
135
+ font-size: 1.5em;
136
+ font-weight: bold;
137
+ margin: 0em 0em 0.5em 0em;
138
+ }
139
+
140
+ #content h2 a {
141
+ font-weight: bold;
142
+ }
143
+
144
+ #content h2 small {
145
+ font-size: 0.75em;
146
+ }
147
+
148
+ #content h2 small a {
149
+ color: #666;
150
+ }
151
+
152
+ #content h3 {
153
+ font-size: 1.25em;
154
+ font-weight: bold;
155
+ margin: 1em 0em;
156
+ }
157
+
158
+ #content h4 {
159
+ margin: 1em 0em;
160
+ }
161
+
162
+ #content ol {
163
+ margin: 1em 2em;
164
+ }
165
+
166
+ #content ul {
167
+ margin: 0em 1.5em;
168
+ }
169
+
170
+ #content li {
171
+ list-style: square;
172
+ line-height: 20px;
173
+ }
174
+
175
+ #content ul li {
176
+ list-style: square;
177
+ }
178
+
179
+ #content p {
180
+ margin: 1em 0em;
181
+ }
182
+
183
+ #content p a {
184
+ text-decoration: underline;
185
+ }
186
+
187
+ #content p a:hover {
188
+ color: #408BB6;
189
+ }
190
+
191
+ #content pre {
192
+ background: #000;
193
+ color: #FFF;
194
+ font-size: 1.25em;
195
+ margin: 1em 0em;
196
+ overflow: auto;
197
+ padding: 1em;
198
+ }
199
+
200
+ #content blockquote {
201
+ border-left: 1px solid #999;
202
+ font-size: 1.25em;
203
+ font-family: georgia;
204
+ margin: 1em;
205
+ padding: 0em 1em;
206
+ }
207
+
208
+ #content table.typus {
209
+ margin: 1em 0em;
210
+ background: #000;
211
+ }
212
+
213
+ #content h2+table.typus {
214
+ margin: 0em; /* Here we overwrite a preference */
215
+ }
216
+
217
+ /* @end */
218
+
219
+ /* @group Sidebar */
220
+
221
+ #sidebar {
222
+ float: left;
223
+ margin-left: 20px;
224
+ padding: 1.5em 0;
225
+ width: 220px;
226
+ }
227
+
228
+ #sidebar h2 {
229
+ font-size: 1.5em;
230
+ font-weight: bold;
231
+ }
232
+
233
+ #sidebar h3 {
234
+ margin: 1em 0;
235
+ }
236
+
237
+ #sidebar p {
238
+ margin: 1em 0;
239
+ }
240
+
241
+ #sidebar p a {
242
+ text-decoration: underline;
243
+ }
244
+
245
+ #sidebar label {
246
+ font-size: 15px;
247
+ }
248
+
249
+ #sidebar form {
250
+ margin-bottom: 1.25em;
251
+ }
252
+
253
+ #sidebar ul {
254
+ margin: 1em 0em;
255
+ }
256
+
257
+ #sidebar code {
258
+ font-size: 1.25em;
259
+ color: green;
260
+ }
261
+
262
+ #sidebar small {
263
+ font-size: 0.85em;
264
+ }
265
+
266
+ /* @end */
267
+
268
+ /* @group Footer */
269
+
270
+ #footer_wrapper {
271
+ background: #000;
272
+ }
273
+
274
+ #footer {
275
+ background: #000;
276
+ margin: 0 auto;
277
+ width: 940px;
278
+ }
279
+
280
+ #footer .left {
281
+ float: left;
282
+ }
283
+
284
+ #footer .right {
285
+ float: right;
286
+ }
287
+
288
+ #footer p {
289
+ color: #FFF;
290
+ font-size: 0.9em;
291
+ line-height: 18px;
292
+ padding: 1em 0em;
293
+ }
294
+
295
+ #footer a {
296
+ color: #FFF;
297
+ font-weight: normal;
298
+ text-decoration: underline;
299
+ }
300
+
301
+ #footer a:hover {
302
+ color: #408BB6;
303
+ }
304
+
305
+ /* @end */
306
+
307
+ /* @group Content Forms */
308
+
309
+ #content form {
310
+ margin: 1em 0em 2em 0em;
311
+ }
312
+
313
+ #content form ul {
314
+ margin: 0;
315
+ }
316
+
317
+ #content form ul li {
318
+ list-style: none;
319
+ margin: 1em 0;
320
+ }
321
+
322
+ #content form ul li p {
323
+ margin: 0.5em 0;
324
+ }
325
+
326
+ #content form small {
327
+ font-size: 0.9em;
328
+ font-weight: normal;
329
+ }
330
+
331
+ #content input.text {
332
+ border: 1px solid #999;
333
+ font-size: 20px;
334
+ padding: 5px;
335
+ width: 688px;
336
+ }
337
+
338
+ input.button {
339
+ margin: 10px 0 0 0;
340
+ }
341
+
342
+ #content input.text:focus {
343
+ background: #FFFCE1;
344
+ }
345
+
346
+ #content textarea {
347
+ border: 1px solid #999;
348
+ font-family: "Courier";
349
+ font-size: 14px;
350
+ padding: 3px;
351
+ width: 691px;
352
+ }
353
+
354
+ #content textarea:focus {
355
+ background: #FFFCE1;
356
+ }
357
+
358
+ #content select {
359
+ border: 1px solid #999;
360
+ font-size: 1.20em;
361
+ }
362
+
363
+ #content label.inline_label {
364
+ display: inline;
365
+ font-weight: normal;
366
+ }
367
+
368
+ /* @end */
369
+
370
+ /* @group Content Tables */
371
+
372
+ #content table.typus {
373
+ width: 100%;
374
+ }
375
+
376
+ #content table.typus small {
377
+ font-size: 0.8em;
378
+ }
379
+
380
+ #content table.typus th {
381
+ color: #FFF;
382
+ font-weight: normal;
383
+ padding: 4px;
384
+ }
385
+
386
+ #content table.typus th a {
387
+ color: #FFF!important;
388
+ }
389
+
390
+ #content .asc { background: transparent url(/images/admin/arrow_up.gif) no-repeat right center; }
391
+
392
+ #content .desc { background: transparent url(/images/admin/arrow_down.gif) no-repeat right center; }
393
+
394
+ #content table.typus td.right {
395
+ text-align: right;
396
+ }
397
+
398
+ #content table.typus tr.even {
399
+ background: #FFF!important;
400
+ }
401
+
402
+ #content table.typus tr.even:hover,
403
+ #content table.typus tr.odd:hover {
404
+ background: #000!important;
405
+ color: #FFF;
406
+ }
407
+
408
+ #content table.typus tr.even:hover a,
409
+ #content table.typus tr.odd:hover a {
410
+ color: #FFF!important;
411
+ }
412
+
413
+ #content table.typus tr.odd {
414
+ background: #F5F5F5;
415
+ }
416
+
417
+ #content table.typus td {
418
+ border: none;
419
+ font-weight: normal;
420
+ padding: 3px 4px;
421
+ vertical-align: top;
422
+ }
423
+
424
+ /* @end */
425
+
426
+ /* @group Rails Errors */
427
+
428
+ .fieldWithErrors input {
429
+ background: #FBE3E4;
430
+ border: 1px solid #8A1F11!important;
431
+ }
432
+
433
+ .errorExplanation {
434
+ background: #FBE3E4;
435
+ border: 2px solid #FBC2C4;
436
+ color: #8a1f11;
437
+ padding: 0 10px;
438
+ }
439
+
440
+ .errorExplanation h3 {
441
+ display: none;
442
+ }
443
+
444
+ .errorExplanation p {
445
+ font-weight: bold;
446
+ padding: 0 5px;
447
+ }
448
+
449
+ .errorExplanation ul {
450
+ margin: 0 0 10px 25px!important;
451
+ }
452
+
453
+ .errorExplanation ul li {
454
+ list-style: square!important;
455
+ margin: 0!important;
456
+ }
457
+
458
+ /* @end */
459
+
460
+ /* @group Search Box */
461
+
462
+ input#search {
463
+ border: 1px solid #999;
464
+ font-size: 1.2em;
465
+ padding: 3px;
466
+ }
467
+
468
+ /* @end */
469
+
470
+ /* @group Login Page Dialog */
471
+
472
+ #bottom_dialog {
473
+ color: #FFF;
474
+ font-size: 0.9em;
475
+ line-height: 18px;
476
+ margin: 0em auto;
477
+ padding: 0em 1.5em;
478
+ text-align: center;
479
+ width: 420px;
480
+ }
481
+
482
+ #bottom_dialog a {
483
+ color: #FFF;
484
+ font-weight: bold;
485
+ }
486
+
487
+ #dialog {
488
+ background: #FFF;
489
+ border: 0.5em solid #408BB6;
490
+ margin: 5em auto 1em auto;
491
+ padding: 0em 1.5em;
492
+ width: 35em;
493
+ }
494
+
495
+ #dialog h1 {
496
+ font-size: 2em;
497
+ font-weight: bold;
498
+ margin: 0.5em 0;
499
+ }
500
+
501
+ #dialog h1 a {
502
+ font-weight: bold;
503
+ }
504
+
505
+ #dialog h1 a:hover {
506
+ color: #000;
507
+ text-decoration: underline;
508
+ }
509
+
510
+ #dialog li {
511
+ margin: 1em 0;
512
+ }
513
+
514
+ #dialog li a {
515
+ margin: 0.5em;
516
+ display: inline;
517
+ font-size: 11px;
518
+ }
519
+
520
+ #dialog input.text {
521
+ border: 1px solid #999;
522
+ font-size: 2em;
523
+ padding: 0.25em;
524
+ width: 16.75em;
525
+ }
526
+
527
+ #dialog input.button {
528
+ margin: 0.5em 0em;
529
+ }
530
+
531
+ #dialog .errorExplanation ul {
532
+ margin: 10px 0 10px 0px!important;
533
+ }
534
+
535
+ #dialog .errorExplanation li {
536
+ font-weight: bold;
537
+ list-style: none!important;
538
+ }
539
+
540
+ /* @end */
541
+
542
+ /* @group Pagination */
543
+
544
+ .pagination {
545
+ border-bottom: 1px solid #F5F5F5;
546
+ border-top: 1px solid #F5F5F5;
547
+ margin: 1.5em auto 0em auto;
548
+ padding: 1em;
549
+ text-align: center;
550
+ }
551
+
552
+ .pagination a {
553
+ color: #333;
554
+ margin: 2px;
555
+ padding: 2px 3px;
556
+ text-decoration: none;
557
+ }
558
+
559
+ .pagination a:hover,
560
+ .pagination a:active {
561
+ background: #000;
562
+ color: #FFF;
563
+ }
564
+
565
+ .pagination span.current {
566
+ background-color: #408BB6;
567
+ color: #FFF;
568
+ font-weight: bold;
569
+ margin: 2px;
570
+ padding: 2px 3px;
571
+ }
572
+
573
+ .pagination span.disabled {
574
+ color: #DDD;
575
+ margin: 2px;
576
+ padding: 2px 3px;
577
+ }
578
+
579
+ /* @end */
580
+
581
+ /* @group Success, notice and error boxes */
582
+
583
+ .error,
584
+ .notice,
585
+ .success {
586
+ border: 1px solid #CCC;
587
+ font-weight: bold;
588
+ margin: 0em 0em 1em 0em;
589
+ }
590
+
591
+ .error p,
592
+ .notice p,
593
+ .success p {
594
+ font-weight: bold;
595
+ margin: 0em!important;
596
+ padding: 1em;
597
+ }
598
+
599
+ .error {
600
+ background: #FBE3E4;
601
+ border-color: #FBC2C4;
602
+ color: #8A1F11;
603
+ }
604
+
605
+ .error a {
606
+ color: #8A1F11;
607
+ }
608
+
609
+ .notice {
610
+ background: #FFF6BF;
611
+ border-color: #FFD324;
612
+ color: #514721;
613
+ }
614
+
615
+ .notice a {
616
+ color: #514721;
617
+ }
618
+
619
+ .success {
620
+ background: #E6EFC2;
621
+ border-color: #C6D880;
622
+ color: #264409;
623
+ }
624
+
625
+ .success a {
626
+ color: #264409;
627
+ }
628
+
629
+ /* @end */
630
+
631
+ /* @group Microformats */
632
+
633
+ .box {
634
+ border: 1px solid #D3D3D3;
635
+ margin: 1em 0em;
636
+ padding: 10px;
637
+ }
638
+
639
+ .box:hover {
640
+ border: 1px solid #999;
641
+ }
642
+
643
+ .box .preview {
644
+ float: left;
645
+ margin: 0 15px 0 0;
646
+ width: 200px;
647
+ }
648
+
649
+ .box .content {
650
+ }
651
+
652
+ .box .content h2 {
653
+ font-size: 16px!important;
654
+ margin: 0 0 10px 0!important;
655
+ }
656
+
657
+ .box .content h3 {
658
+ font-size: 14px!important;
659
+ margin: 0 0 10px 0!important;
660
+ }
661
+
662
+ .box .content blockquote p {
663
+ font-size: 16px!important;
664
+ }
665
+
666
+ .box .content p {
667
+ font-size: 12px!important;
668
+ margin: 0 0 10px 0!important;
669
+ }
670
+
671
+ .box .content ul {
672
+ margin: 0 0 10px 20px!important;
673
+ }
674
+
675
+ .box .metadata {
676
+ float: left;
677
+ width: 350px;
678
+ }
679
+
680
+ .box .metadata ul {
681
+ margin: 0!important;
682
+ padding: 0!important;
683
+ }
684
+
685
+ .box .metadata ul li {
686
+ list-style: none!important;
687
+ }
688
+
689
+ .box .actions {
690
+ float: right;
691
+ position: relative;
692
+ top: 0;
693
+ right: 0;
694
+ text-align: right;
695
+ }
696
+
697
+ .box .actions ul {
698
+ margin: 0!important;
699
+ }
700
+
701
+ .box .actions ul li {
702
+ display: inline;
703
+ list-style: none!important;
704
+ }
705
+
706
+ /* @end */
707
+
708
+ /* @group Clean Me */
709
+
710
+ .box_relationships {
711
+ border-top: 1px dotted #D3D3D3;
712
+ padding: 1.5em 0em;
713
+ }
714
+
715
+ /* @end */
716
+
717
+ /* @group Hacks */
718
+
719
+ .clear {
720
+ clear: both;
721
+ }
722
+
723
+ .tip {
724
+ color: #666;
725
+ font-size: 10px;
726
+ margin: -10px 0 10px 0!important;
727
+ }
728
+
729
+ /* @end */