typus 0.9.17

Sign up to get free protection for your applications and to get access to all the features.
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 */