tr8n 3.0.2
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.
- data/.project +18 -0
- data/Gemfile +34 -0
- data/Gemfile.lock +79 -0
- data/LICENSE +18 -0
- data/README.rdoc +116 -0
- data/Rakefile +29 -0
- data/VERSION +1 -0
- data/app/controllers/application_controller.rb +28 -0
- data/app/controllers/tr8n/admin/base_controller.rb +65 -0
- data/app/controllers/tr8n/admin/clientsdk_controller.rb +34 -0
- data/app/controllers/tr8n/admin/domain_controller.rb +77 -0
- data/app/controllers/tr8n/admin/forum_controller.rb +58 -0
- data/app/controllers/tr8n/admin/glossary_controller.rb +56 -0
- data/app/controllers/tr8n/admin/language_controller.rb +129 -0
- data/app/controllers/tr8n/admin/translation_controller.rb +64 -0
- data/app/controllers/tr8n/admin/translation_key_controller.rb +157 -0
- data/app/controllers/tr8n/admin/translator_controller.rb +119 -0
- data/app/controllers/tr8n/api/v1/base_controller.rb +81 -0
- data/app/controllers/tr8n/api/v1/language_controller.rb +107 -0
- data/app/controllers/tr8n/api/v1/translation_controller.rb +75 -0
- data/app/controllers/tr8n/api/v1/translator_controller.rb +34 -0
- data/app/controllers/tr8n/awards_controller.rb +43 -0
- data/app/controllers/tr8n/base_controller.rb +206 -0
- data/app/controllers/tr8n/dashboard_controller.rb +32 -0
- data/app/controllers/tr8n/forum_controller.rb +100 -0
- data/app/controllers/tr8n/glossary_controller.rb +40 -0
- data/app/controllers/tr8n/help_controller.rb +40 -0
- data/app/controllers/tr8n/home_controller.rb +51 -0
- data/app/controllers/tr8n/language_cases_controller.rb +82 -0
- data/app/controllers/tr8n/language_controller.rb +372 -0
- data/app/controllers/tr8n/login_controller.rb +86 -0
- data/app/controllers/tr8n/phrases_controller.rb +293 -0
- data/app/controllers/tr8n/translations_controller.rb +194 -0
- data/app/controllers/tr8n/translator_controller.rb +83 -0
- data/app/helpers/application_helper.rb +27 -0
- data/app/helpers/tr8n/admin/base_helper.rb +84 -0
- data/app/helpers/tr8n/base_helper.rb +44 -0
- data/app/helpers/tr8n/dashboard_helper.rb +43 -0
- data/app/models/tr8n/base_filter.rb +68 -0
- data/app/models/tr8n/daily_language_metric.rb +42 -0
- data/app/models/tr8n/date_rule.rb +123 -0
- data/app/models/tr8n/gender_list_rule.rb +247 -0
- data/app/models/tr8n/gender_rule.rb +140 -0
- data/app/models/tr8n/glossary.rb +27 -0
- data/app/models/tr8n/glossary_filter.rb +33 -0
- data/app/models/tr8n/integration/ru/russian_gender_list_rule.rb +60 -0
- data/app/models/tr8n/integration/ru/russian_numeric_rule.rb +64 -0
- data/app/models/tr8n/ip_location.rb +74 -0
- data/app/models/tr8n/ip_location_filter.rb +34 -0
- data/app/models/tr8n/language.rb +318 -0
- data/app/models/tr8n/language_case.rb +141 -0
- data/app/models/tr8n/language_case_filter.rb +30 -0
- data/app/models/tr8n/language_case_rule.rb +187 -0
- data/app/models/tr8n/language_case_rule_filter.rb +30 -0
- data/app/models/tr8n/language_case_value_map.rb +100 -0
- data/app/models/tr8n/language_case_value_map_filter.rb +41 -0
- data/app/models/tr8n/language_filter.rb +75 -0
- data/app/models/tr8n/language_forum_abuse_report.rb +33 -0
- data/app/models/tr8n/language_forum_abuse_report_filter.rb +30 -0
- data/app/models/tr8n/language_forum_message.rb +46 -0
- data/app/models/tr8n/language_forum_message_filter.rb +34 -0
- data/app/models/tr8n/language_forum_topic.rb +41 -0
- data/app/models/tr8n/language_forum_topic_filter.rb +34 -0
- data/app/models/tr8n/language_metric.rb +91 -0
- data/app/models/tr8n/language_metric_filter.rb +63 -0
- data/app/models/tr8n/language_rule.rb +117 -0
- data/app/models/tr8n/language_rule_filter.rb +45 -0
- data/app/models/tr8n/language_user.rb +61 -0
- data/app/models/tr8n/language_user_filter.rb +34 -0
- data/app/models/tr8n/list_rule.rb +118 -0
- data/app/models/tr8n/monthly_language_metric.rb +34 -0
- data/app/models/tr8n/numeric_rule.rb +175 -0
- data/app/models/tr8n/total_language_metric.rb +59 -0
- data/app/models/tr8n/translation.rb +299 -0
- data/app/models/tr8n/translation_domain.rb +48 -0
- data/app/models/tr8n/translation_domain_filter.rb +26 -0
- data/app/models/tr8n/translation_filter.rb +34 -0
- data/app/models/tr8n/translation_key.rb +625 -0
- data/app/models/tr8n/translation_key_comment.rb +37 -0
- data/app/models/tr8n/translation_key_comment_filter.rb +30 -0
- data/app/models/tr8n/translation_key_filter.rb +45 -0
- data/app/models/tr8n/translation_key_lock.rb +59 -0
- data/app/models/tr8n/translation_key_lock_filter.rb +30 -0
- data/app/models/tr8n/translation_key_source.rb +58 -0
- data/app/models/tr8n/translation_key_source_filter.rb +30 -0
- data/app/models/tr8n/translation_source.rb +52 -0
- data/app/models/tr8n/translation_source_filter.rb +30 -0
- data/app/models/tr8n/translation_vote.rb +36 -0
- data/app/models/tr8n/translation_vote_filter.rb +34 -0
- data/app/models/tr8n/translator.rb +301 -0
- data/app/models/tr8n/translator_filter.rb +46 -0
- data/app/models/tr8n/translator_following.rb +38 -0
- data/app/models/tr8n/translator_following_filter.rb +34 -0
- data/app/models/tr8n/translator_log.rb +120 -0
- data/app/models/tr8n/translator_log_filter.rb +49 -0
- data/app/models/tr8n/translator_metric.rb +83 -0
- data/app/models/tr8n/translator_metric_filter.rb +38 -0
- data/app/models/tr8n/translator_report.rb +82 -0
- data/app/models/tr8n/translator_report_filter.rb +30 -0
- data/app/models/tr8n/value_rule.rb +117 -0
- data/app/views/layouts/_footer.html.erb +15 -0
- data/app/views/layouts/_header.html.erb +12 -0
- data/app/views/layouts/_html_head.html.erb +5 -0
- data/app/views/layouts/tr8n.html.erb +21 -0
- data/app/views/layouts/tr8n_admin.html.erb +33 -0
- data/app/views/tr8n/admin/clientsdk/index.html.erb +133 -0
- data/app/views/tr8n/admin/clientsdk/lb_samples.html.erb +54 -0
- data/app/views/tr8n/admin/common/_footer.html.erb +1 -0
- data/app/views/tr8n/admin/common/_header.html.erb +30 -0
- data/app/views/tr8n/admin/common/_lightbox_buttons.html.erb +5 -0
- data/app/views/tr8n/admin/common/_paginator.html.erb +20 -0
- data/app/views/tr8n/admin/domain/_tabs.html.erb +23 -0
- data/app/views/tr8n/admin/domain/index.html.erb +33 -0
- data/app/views/tr8n/admin/domain/key_sources.rhtml +53 -0
- data/app/views/tr8n/admin/domain/lb_caller.html.erb +35 -0
- data/app/views/tr8n/admin/domain/sources.html.erb +35 -0
- data/app/views/tr8n/admin/forum/_tabs.html.erb +22 -0
- data/app/views/tr8n/admin/forum/index.html.erb +34 -0
- data/app/views/tr8n/admin/forum/messages.html.erb +33 -0
- data/app/views/tr8n/admin/forum/reports.html.erb +50 -0
- data/app/views/tr8n/admin/glossary/index.html.erb +22 -0
- data/app/views/tr8n/admin/glossary/lb_update.html.erb +26 -0
- data/app/views/tr8n/admin/language/_rules.html.erb +22 -0
- data/app/views/tr8n/admin/language/_tabs.html.erb +27 -0
- data/app/views/tr8n/admin/language/_users.html.erb +40 -0
- data/app/views/tr8n/admin/language/case_rules.html.erb +24 -0
- data/app/views/tr8n/admin/language/case_values.html.erb +25 -0
- data/app/views/tr8n/admin/language/cases.html.erb +24 -0
- data/app/views/tr8n/admin/language/charts.html.erb +35 -0
- data/app/views/tr8n/admin/language/index.html.erb +99 -0
- data/app/views/tr8n/admin/language/lb_update.html.erb +76 -0
- data/app/views/tr8n/admin/language/lb_value_map.html.erb +42 -0
- data/app/views/tr8n/admin/language/metrics.rhtml +16 -0
- data/app/views/tr8n/admin/language/rules.html.erb +24 -0
- data/app/views/tr8n/admin/language/users.rhtml +31 -0
- data/app/views/tr8n/admin/language/view.html.erb +106 -0
- data/app/views/tr8n/admin/translation/_tabs.html.erb +21 -0
- data/app/views/tr8n/admin/translation/index.html.erb +75 -0
- data/app/views/tr8n/admin/translation/view.html.erb +142 -0
- data/app/views/tr8n/admin/translation/votes.rhtml +81 -0
- data/app/views/tr8n/admin/translation_key/_tabs.html.erb +22 -0
- data/app/views/tr8n/admin/translation_key/comments.html.erb +49 -0
- data/app/views/tr8n/admin/translation_key/index.html.erb +79 -0
- data/app/views/tr8n/admin/translation_key/lb_merge.html.erb +43 -0
- data/app/views/tr8n/admin/translation_key/lb_update.html.erb +44 -0
- data/app/views/tr8n/admin/translation_key/locks.html.erb +51 -0
- data/app/views/tr8n/admin/translation_key/view.html.erb +192 -0
- data/app/views/tr8n/admin/translator/_list.html.erb +51 -0
- data/app/views/tr8n/admin/translator/_tabs.html.erb +26 -0
- data/app/views/tr8n/admin/translator/following.html.erb +20 -0
- data/app/views/tr8n/admin/translator/index.html.erb +77 -0
- data/app/views/tr8n/admin/translator/ip_locations.html.erb +9 -0
- data/app/views/tr8n/admin/translator/lb_register.html.erb +18 -0
- data/app/views/tr8n/admin/translator/log.html.erb +27 -0
- data/app/views/tr8n/admin/translator/metrics.html.erb +25 -0
- data/app/views/tr8n/admin/translator/reports.html.erb +22 -0
- data/app/views/tr8n/admin/translator/view.html.erb +228 -0
- data/app/views/tr8n/awards/_list.html.erb +46 -0
- data/app/views/tr8n/awards/index.html.erb +42 -0
- data/app/views/tr8n/common/_flashes.html.erb +39 -0
- data/app/views/tr8n/common/_footer.html.erb +1 -0
- data/app/views/tr8n/common/_header.html.erb +5 -0
- data/app/views/tr8n/common/_language_selector.html.erb +8 -0
- data/app/views/tr8n/common/_language_strip.html.erb +29 -0
- data/app/views/tr8n/common/_language_table.html.erb +13 -0
- data/app/views/tr8n/common/_paginator.html.erb +8 -0
- data/app/views/tr8n/common/_permutations.html.erb +37 -0
- data/app/views/tr8n/common/_scripts.html.erb +49 -0
- data/app/views/tr8n/common/_splash_screen.html.erb +9 -0
- data/app/views/tr8n/common/_splash_screen_legacy.html.erb +4 -0
- data/app/views/tr8n/common/_tabs.html.erb +39 -0
- data/app/views/tr8n/common/_translation_votes.html.erb +41 -0
- data/app/views/tr8n/common/_translator_login.html.erb +11 -0
- data/app/views/tr8n/dashboard/_forum.html.erb +25 -0
- data/app/views/tr8n/dashboard/_language_metric.html.erb +49 -0
- data/app/views/tr8n/dashboard/_statistics.html.erb +35 -0
- data/app/views/tr8n/dashboard/_translations.html.erb +24 -0
- data/app/views/tr8n/dashboard/_translator_metric.html.erb +68 -0
- data/app/views/tr8n/dashboard/_votes.html.erb +76 -0
- data/app/views/tr8n/dashboard/index.rhtml +115 -0
- data/app/views/tr8n/forum/_message.html.erb +17 -0
- data/app/views/tr8n/forum/_messages.html.erb +21 -0
- data/app/views/tr8n/forum/_new_message.html.erb +28 -0
- data/app/views/tr8n/forum/_new_topic.html.erb +49 -0
- data/app/views/tr8n/forum/index.html.erb +84 -0
- data/app/views/tr8n/forum/topic.html.erb +36 -0
- data/app/views/tr8n/glossary/index.html.erb +42 -0
- data/app/views/tr8n/help/_navigation.html.erb +127 -0
- data/app/views/tr8n/help/awards.html.erb +13 -0
- data/app/views/tr8n/help/basic_information.html.erb +13 -0
- data/app/views/tr8n/help/context_rules.html.erb +13 -0
- data/app/views/tr8n/help/creating_translations.html.erb +16 -0
- data/app/views/tr8n/help/dashboard.html.erb +13 -0
- data/app/views/tr8n/help/direction.html.erb +13 -0
- data/app/views/tr8n/help/discussions.html.erb +13 -0
- data/app/views/tr8n/help/enter_translation.html.erb +13 -0
- data/app/views/tr8n/help/fallback_language.html.erb +13 -0
- data/app/views/tr8n/help/generate_context_rules.html.erb +17 -0
- data/app/views/tr8n/help/index.html.erb +18 -0
- data/app/views/tr8n/help/inline_translations.html.erb +28 -0
- data/app/views/tr8n/help/language_dashboard.html.erb +21 -0
- data/app/views/tr8n/help/language_phrases.html.erb +17 -0
- data/app/views/tr8n/help/language_selector.html.erb +13 -0
- data/app/views/tr8n/help/language_statistics.html.erb +13 -0
- data/app/views/tr8n/help/lb_credits.html.erb +9 -0
- data/app/views/tr8n/help/lb_shortcuts.html.erb +26 -0
- data/app/views/tr8n/help/manage.html.erb +13 -0
- data/app/views/tr8n/help/manage_language.html.erb +13 -0
- data/app/views/tr8n/help/native_name.html.erb +13 -0
- data/app/views/tr8n/help/original_phrase.html.erb +13 -0
- data/app/views/tr8n/help/other_languages.html.erb +15 -0
- data/app/views/tr8n/help/other_translatable_resources.html.erb +13 -0
- data/app/views/tr8n/help/phrases.html.erb +19 -0
- data/app/views/tr8n/help/phrases_with_translations.html.erb +21 -0
- data/app/views/tr8n/help/phrases_without_translations.html.erb +15 -0
- data/app/views/tr8n/help/prohibited_words.html.erb +13 -0
- data/app/views/tr8n/help/rank.html.erb +13 -0
- data/app/views/tr8n/help/recent_discussions.html.erb +13 -0
- data/app/views/tr8n/help/recent_translation_votes.html.erb +13 -0
- data/app/views/tr8n/help/recent_translations.html.erb +13 -0
- data/app/views/tr8n/help/site_map.html.erb +17 -0
- data/app/views/tr8n/help/site_sections.html.erb +13 -0
- data/app/views/tr8n/help/suggested_translation.html.erb +13 -0
- data/app/views/tr8n/help/translating_inline.html.erb +30 -0
- data/app/views/tr8n/help/translation_context_rules.html.erb +16 -0
- data/app/views/tr8n/help/translation_rank.html.erb +17 -0
- data/app/views/tr8n/help/translation_tokens.html.erb +13 -0
- data/app/views/tr8n/help/translation_tools.html.erb +13 -0
- data/app/views/tr8n/help/translations.html.erb +13 -0
- data/app/views/tr8n/help/user_rank.html.erb +13 -0
- data/app/views/tr8n/help/using_translation_tools.html.erb +13 -0
- data/app/views/tr8n/help/voting_on_translations.html.erb +13 -0
- data/app/views/tr8n/help/your_dashboard.html.erb +17 -0
- data/app/views/tr8n/help/your_languages.html.erb +19 -0
- data/app/views/tr8n/help/your_translations.html.erb +17 -0
- data/app/views/tr8n/home/credits.html.erb +102 -0
- data/app/views/tr8n/home/docs.html.erb +3 -0
- data/app/views/tr8n/home/index.html.erb +37 -0
- data/app/views/tr8n/home/integration.html.erb +564 -0
- data/app/views/tr8n/home/languages.html.erb +7 -0
- data/app/views/tr8n/home/license.html.erb +586 -0
- data/app/views/tr8n/home/rules.html.erb +668 -0
- data/app/views/tr8n/home/tokens.html.erb +324 -0
- data/app/views/tr8n/language/_basic_info.html.erb +53 -0
- data/app/views/tr8n/language/_edit_language_case_rules.html.erb +51 -0
- data/app/views/tr8n/language/_edit_language_cases.html.erb +68 -0
- data/app/views/tr8n/language/_edit_rules.html.erb +46 -0
- data/app/views/tr8n/language/_grammar.html.erb +84 -0
- data/app/views/tr8n/language/_header.html.erb +14 -0
- data/app/views/tr8n/language/_language_cases.html.erb +196 -0
- data/app/views/tr8n/language/_lists.html.erb +56 -0
- data/app/views/tr8n/language/_prohibited_words.html.erb +16 -0
- data/app/views/tr8n/language/_translator_dependencies.html.erb +27 -0
- data/app/views/tr8n/language/_translator_header.html.erb +19 -0
- data/app/views/tr8n/language/_translator_submit.html.erb +141 -0
- data/app/views/tr8n/language/_translator_votes.html.erb +27 -0
- data/app/views/tr8n/language/index.html.erb +54 -0
- data/app/views/tr8n/language/lb_language_case_rule.html.erb +94 -0
- data/app/views/tr8n/language/rules/_date_rule.html.erb +3 -0
- data/app/views/tr8n/language/rules/_gender_list_rule.html.erb +23 -0
- data/app/views/tr8n/language/rules/_gender_rule.html.erb +3 -0
- data/app/views/tr8n/language/rules/_list_rule.html.erb +3 -0
- data/app/views/tr8n/language/rules/_number_rule.html.erb +24 -0
- data/app/views/tr8n/language/rules/_value_rule.html.erb +3 -0
- data/app/views/tr8n/language/select.html.erb +72 -0
- data/app/views/tr8n/language/table.html.erb +32 -0
- data/app/views/tr8n/language/translator.html.erb +18 -0
- data/app/views/tr8n/language_cases/_gender_based.html.erb +32 -0
- data/app/views/tr8n/language_cases/_gender_neutral.html.erb +25 -0
- data/app/views/tr8n/language_cases/_manager_header.html.erb +18 -0
- data/app/views/tr8n/language_cases/index.html.erb +54 -0
- data/app/views/tr8n/language_cases/manager.html.erb +60 -0
- data/app/views/tr8n/login/index.html.erb +33 -0
- data/app/views/tr8n/login/register.html.erb +57 -0
- data/app/views/tr8n/phrases/_breadcrumb.html.erb +11 -0
- data/app/views/tr8n/phrases/_comment.html.erb +17 -0
- data/app/views/tr8n/phrases/_comments_module.html.erb +37 -0
- data/app/views/tr8n/phrases/_dictionary.rhtml +29 -0
- data/app/views/tr8n/phrases/_header.html.erb +24 -0
- data/app/views/tr8n/phrases/_new_comment.html.erb +31 -0
- data/app/views/tr8n/phrases/_permutations_module.html.erb +30 -0
- data/app/views/tr8n/phrases/_tokens.html.erb +122 -0
- data/app/views/tr8n/phrases/_toolbar.html.erb +33 -0
- data/app/views/tr8n/phrases/_translation_module.html.erb +127 -0
- data/app/views/tr8n/phrases/_translations_module.html.erb +70 -0
- data/app/views/tr8n/phrases/index.html.erb +90 -0
- data/app/views/tr8n/phrases/lb_sources.html.erb +51 -0
- data/app/views/tr8n/phrases/map.html.erb +42 -0
- data/app/views/tr8n/phrases/view.html.erb +77 -0
- data/app/views/tr8n/translations/_list.html.erb +71 -0
- data/app/views/tr8n/translations/_original_phrase.html.erb +11 -0
- data/app/views/tr8n/translations/_translation.html.erb +80 -0
- data/app/views/tr8n/translations/index.html.erb +30 -0
- data/app/views/tr8n/translator/_basic_info.html.erb +95 -0
- data/app/views/tr8n/translator/_header.html.erb +12 -0
- data/app/views/tr8n/translator/_header_key_report.html.erb +12 -0
- data/app/views/tr8n/translator/index.html.erb +25 -0
- data/app/views/tr8n/translator/lb_report.html.erb +113 -0
- data/config.ru +4 -0
- data/config/application.rb +65 -0
- data/config/boot.rb +6 -0
- data/config/database.yml +13 -0
- data/config/environment.rb +46 -0
- data/config/environments/development.rb +25 -0
- data/config/environments/test.rb +35 -0
- data/config/routes.rb +47 -0
- data/config/tr8n/config.yml +247 -0
- data/config/tr8n/data/ip_locations.csv +93460 -0
- data/config/tr8n/rules/default_cases.yml +141 -0
- data/config/tr8n/rules/default_date_rules.yml +20 -0
- data/config/tr8n/rules/default_gender_list_rules.yml +82 -0
- data/config/tr8n/rules/default_gender_rules.yml +20 -0
- data/config/tr8n/rules/default_list_rules.yml +19 -0
- data/config/tr8n/rules/default_numeric_rules.yml +42 -0
- data/config/tr8n/rules/default_value_rules.yml +18 -0
- data/config/tr8n/site/default_glossary.yml +18 -0
- data/config/tr8n/site/default_languages.yml +1591 -0
- data/config/tr8n/site/features.yml +111 -0
- data/config/tr8n/site/shortcuts.yml +55 -0
- data/config/tr8n/site/sitemap.json +42 -0
- data/config/tr8n/tokens/data.yml +19 -0
- data/config/tr8n/tokens/decorations.yml +16 -0
- data/config/will_filter/config.yml +97 -0
- data/db/extras/20100511185330_create_test_users.rb +43 -0
- data/db/migrate/20090730070119_create_will_filter_tables.rb +19 -0
- data/db/migrate/20100405201417_create_tr8n_tables.rb +350 -0
- data/db/seeds.rb +7 -0
- data/doc/README_FOR_APP +2 -0
- data/doc/cheat sheet.docx +0 -0
- data/doc/cheat sheet.pdf +0 -0
- data/doc/classes.graffle +12555 -0
- data/doc/classes.pdf +0 -0
- data/doc/client sdk sequence.graffle +2768 -0
- data/doc/integration.doc +0 -0
- data/doc/integration.docx +0 -0
- data/doc/pixel client sdk.graffle +1454 -0
- data/lib/application_controller.rb +38 -0
- data/lib/application_helper.rb +336 -0
- data/lib/core_ext/array.rb +61 -0
- data/lib/core_ext/date.rb +76 -0
- data/lib/core_ext/fixnum.rb +35 -0
- data/lib/core_ext/hash.rb +60 -0
- data/lib/core_ext/string.rb +49 -0
- data/lib/core_ext/time.rb +83 -0
- data/lib/generators/tr8n/templates/create_tr8n_tables.rb +350 -0
- data/lib/generators/tr8n/tr8n_generator.rb +49 -0
- data/lib/tasks/.gitkeep +0 -0
- data/lib/tasks/tr8n_tasks.rake +99 -0
- data/lib/tr8n.rb +3 -0
- data/lib/tr8n/active_dumper.rb +49 -0
- data/lib/tr8n/cache.rb +57 -0
- data/lib/tr8n/common_methods.rb +61 -0
- data/lib/tr8n/config.rb +719 -0
- data/lib/tr8n/controller_methods.rb +112 -0
- data/lib/tr8n/dictionary.rb +53 -0
- data/lib/tr8n/engine.rb +29 -0
- data/lib/tr8n/exception.rb +26 -0
- data/lib/tr8n/extender.rb +34 -0
- data/lib/tr8n/helper_methods.rb +304 -0
- data/lib/tr8n/ip_address.rb +52 -0
- data/lib/tr8n/key_registration_exception.rb +26 -0
- data/lib/tr8n/keyboard_mapping.rb +174 -0
- data/lib/tr8n/logger.rb +60 -0
- data/lib/tr8n/site_map.rb +85 -0
- data/lib/tr8n/site_map_section.rb +108 -0
- data/lib/tr8n/token.rb +438 -0
- data/lib/tr8n/token_exception.rb +26 -0
- data/lib/tr8n/tokenized_label.rb +141 -0
- data/lib/tr8n/tokens/data_token.rb +52 -0
- data/lib/tr8n/tokens/decoration_token.rb +124 -0
- data/lib/tr8n/tokens/hidden_token.rb +87 -0
- data/lib/tr8n/tokens/method_token.rb +60 -0
- data/lib/tr8n/tokens/transform_token.rb +131 -0
- data/public/404.html +26 -0
- data/public/422.html +26 -0
- data/public/500.html +26 -0
- data/public/favicon.ico +0 -0
- data/public/robots.txt +5 -0
- data/public/tr8n/images/accept.png +0 -0
- data/public/tr8n/images/action_tab_bkgd.gif +0 -0
- data/public/tr8n/images/action_tab_white_bkgd.gif +0 -0
- data/public/tr8n/images/add.png +0 -0
- data/public/tr8n/images/arrow_down.gif +0 -0
- data/public/tr8n/images/arrow_down.png +0 -0
- data/public/tr8n/images/arrow_down_grey.png +0 -0
- data/public/tr8n/images/arrow_right.gif +0 -0
- data/public/tr8n/images/arrow_up.png +0 -0
- data/public/tr8n/images/arrow_up_grey.png +0 -0
- data/public/tr8n/images/bullet_go.png +0 -0
- data/public/tr8n/images/buttons.png +0 -0
- data/public/tr8n/images/cancel.png +0 -0
- data/public/tr8n/images/close.gif +0 -0
- data/public/tr8n/images/cross.png +0 -0
- data/public/tr8n/images/delete.png +0 -0
- data/public/tr8n/images/disk.png +0 -0
- data/public/tr8n/images/examples/context_rules_1.png +0 -0
- data/public/tr8n/images/examples/context_rules_2.png +0 -0
- data/public/tr8n/images/examples/date_rules_1.png +0 -0
- data/public/tr8n/images/examples/date_rules_2.png +0 -0
- data/public/tr8n/images/examples/date_rules_3.png +0 -0
- data/public/tr8n/images/examples/gender_rules_1.png +0 -0
- data/public/tr8n/images/examples/gender_rules_2.png +0 -0
- data/public/tr8n/images/examples/gender_rules_3.png +0 -0
- data/public/tr8n/images/examples/language_manager_1.png +0 -0
- data/public/tr8n/images/examples/list_rules_1.png +0 -0
- data/public/tr8n/images/examples/list_rules_2.png +0 -0
- data/public/tr8n/images/examples/list_rules_3.png +0 -0
- data/public/tr8n/images/examples/numeric_rules_1.png +0 -0
- data/public/tr8n/images/examples/numeric_rules_2.png +0 -0
- data/public/tr8n/images/examples/numeric_rules_3.png +0 -0
- data/public/tr8n/images/examples/numeric_rules_4.png +0 -0
- data/public/tr8n/images/exclamation.png +0 -0
- data/public/tr8n/images/eye.png +0 -0
- data/public/tr8n/images/eye_not.png +0 -0
- data/public/tr8n/images/facebook/connect_light_medium_long.gif +0 -0
- data/public/tr8n/images/field_sprite.gif +0 -0
- data/public/tr8n/images/find.png +0 -0
- data/public/tr8n/images/flags/.DS_Store +0 -0
- data/public/tr8n/images/flags/ab.png +0 -0
- data/public/tr8n/images/flags/ach.png +0 -0
- data/public/tr8n/images/flags/af.png +0 -0
- data/public/tr8n/images/flags/ak.png +0 -0
- data/public/tr8n/images/flags/am.png +0 -0
- data/public/tr8n/images/flags/an.png +0 -0
- data/public/tr8n/images/flags/ar-AE.png +0 -0
- data/public/tr8n/images/flags/ar-BH.png +0 -0
- data/public/tr8n/images/flags/ar-DZ.png +0 -0
- data/public/tr8n/images/flags/ar-EG.png +0 -0
- data/public/tr8n/images/flags/ar-IQ.png +0 -0
- data/public/tr8n/images/flags/ar-JO.png +0 -0
- data/public/tr8n/images/flags/ar-KW.png +0 -0
- data/public/tr8n/images/flags/ar-LB.png +0 -0
- data/public/tr8n/images/flags/ar-LY.png +0 -0
- data/public/tr8n/images/flags/ar-MA.png +0 -0
- data/public/tr8n/images/flags/ar-OM.png +0 -0
- data/public/tr8n/images/flags/ar-QA.png +0 -0
- data/public/tr8n/images/flags/ar-SA.png +0 -0
- data/public/tr8n/images/flags/ar-SY.png +0 -0
- data/public/tr8n/images/flags/ar-TN.png +0 -0
- data/public/tr8n/images/flags/ar-YE.png +0 -0
- data/public/tr8n/images/flags/ar.png +0 -0
- data/public/tr8n/images/flags/as.png +0 -0
- data/public/tr8n/images/flags/ast.png +0 -0
- data/public/tr8n/images/flags/ay.png +0 -0
- data/public/tr8n/images/flags/az.png +0 -0
- data/public/tr8n/images/flags/ba.png +0 -0
- data/public/tr8n/images/flags/be.png +0 -0
- data/public/tr8n/images/flags/bg.png +0 -0
- data/public/tr8n/images/flags/bh.png +0 -0
- data/public/tr8n/images/flags/bn.png +0 -0
- data/public/tr8n/images/flags/bo.png +0 -0
- data/public/tr8n/images/flags/br.png +0 -0
- data/public/tr8n/images/flags/bs.png +0 -0
- data/public/tr8n/images/flags/ca.png +0 -0
- data/public/tr8n/images/flags/cb.png +0 -0
- data/public/tr8n/images/flags/ce.png +0 -0
- data/public/tr8n/images/flags/ch.png +0 -0
- data/public/tr8n/images/flags/ck-US.png +0 -0
- data/public/tr8n/images/flags/co.png +0 -0
- data/public/tr8n/images/flags/cr.png +0 -0
- data/public/tr8n/images/flags/cs.png +0 -0
- data/public/tr8n/images/flags/cv.png +0 -0
- data/public/tr8n/images/flags/cy.png +0 -0
- data/public/tr8n/images/flags/da.png +0 -0
- data/public/tr8n/images/flags/de-AT.png +0 -0
- data/public/tr8n/images/flags/de-CH.png +0 -0
- data/public/tr8n/images/flags/de-DE.png +0 -0
- data/public/tr8n/images/flags/de-LI.png +0 -0
- data/public/tr8n/images/flags/de-LU.png +0 -0
- data/public/tr8n/images/flags/de.png +0 -0
- data/public/tr8n/images/flags/el.png +0 -0
- data/public/tr8n/images/flags/en-AU.png +0 -0
- data/public/tr8n/images/flags/en-BZ.png +0 -0
- data/public/tr8n/images/flags/en-CA.png +0 -0
- data/public/tr8n/images/flags/en-IE.png +0 -0
- data/public/tr8n/images/flags/en-JM.png +0 -0
- data/public/tr8n/images/flags/en-NZ.png +0 -0
- data/public/tr8n/images/flags/en-PH.png +0 -0
- data/public/tr8n/images/flags/en-PI.png +0 -0
- data/public/tr8n/images/flags/en-SC.png +0 -0
- data/public/tr8n/images/flags/en-UK.png +0 -0
- data/public/tr8n/images/flags/en-US.png +0 -0
- data/public/tr8n/images/flags/en-ZA.png +0 -0
- data/public/tr8n/images/flags/en-ZW.png +0 -0
- data/public/tr8n/images/flags/en.png +0 -0
- data/public/tr8n/images/flags/eo.png +0 -0
- data/public/tr8n/images/flags/es-AR.png +0 -0
- data/public/tr8n/images/flags/es-BO.png +0 -0
- data/public/tr8n/images/flags/es-CL.png +0 -0
- data/public/tr8n/images/flags/es-CO.png +0 -0
- data/public/tr8n/images/flags/es-CR.png +0 -0
- data/public/tr8n/images/flags/es-DO.png +0 -0
- data/public/tr8n/images/flags/es-EC.png +0 -0
- data/public/tr8n/images/flags/es-ES.png +0 -0
- data/public/tr8n/images/flags/es-GT.png +0 -0
- data/public/tr8n/images/flags/es-HN.png +0 -0
- data/public/tr8n/images/flags/es-MX.png +0 -0
- data/public/tr8n/images/flags/es-NI.png +0 -0
- data/public/tr8n/images/flags/es-PA.png +0 -0
- data/public/tr8n/images/flags/es-PE.png +0 -0
- data/public/tr8n/images/flags/es-PR.png +0 -0
- data/public/tr8n/images/flags/es-PY.png +0 -0
- data/public/tr8n/images/flags/es-SV.png +0 -0
- data/public/tr8n/images/flags/es-UY.png +0 -0
- data/public/tr8n/images/flags/es-VE.png +0 -0
- data/public/tr8n/images/flags/es.png +0 -0
- data/public/tr8n/images/flags/et.png +0 -0
- data/public/tr8n/images/flags/eu.png +0 -0
- data/public/tr8n/images/flags/fa-IR.png +0 -0
- data/public/tr8n/images/flags/fa.png +0 -0
- data/public/tr8n/images/flags/fb-LT.png +0 -0
- data/public/tr8n/images/flags/fi.png +0 -0
- data/public/tr8n/images/flags/fj.png +0 -0
- data/public/tr8n/images/flags/fo.png +0 -0
- data/public/tr8n/images/flags/fr-BE.png +0 -0
- data/public/tr8n/images/flags/fr-CA.png +0 -0
- data/public/tr8n/images/flags/fr-CH.png +0 -0
- data/public/tr8n/images/flags/fr-FR.png +0 -0
- data/public/tr8n/images/flags/fr-LU.png +0 -0
- data/public/tr8n/images/flags/fr-MC.png +0 -0
- data/public/tr8n/images/flags/fr.png +0 -0
- data/public/tr8n/images/flags/fur.png +0 -0
- data/public/tr8n/images/flags/fy.png +0 -0
- data/public/tr8n/images/flags/ga.png +0 -0
- data/public/tr8n/images/flags/gd.png +0 -0
- data/public/tr8n/images/flags/gl.png +0 -0
- data/public/tr8n/images/flags/gn.png +0 -0
- data/public/tr8n/images/flags/gu.png +0 -0
- data/public/tr8n/images/flags/gv.png +0 -0
- data/public/tr8n/images/flags/ha.png +0 -0
- data/public/tr8n/images/flags/haw.png +0 -0
- data/public/tr8n/images/flags/he.png +0 -0
- data/public/tr8n/images/flags/hi.png +0 -0
- data/public/tr8n/images/flags/hr.png +0 -0
- data/public/tr8n/images/flags/hsb.png +0 -0
- data/public/tr8n/images/flags/ht.png +0 -0
- data/public/tr8n/images/flags/hu.png +0 -0
- data/public/tr8n/images/flags/hy.png +0 -0
- data/public/tr8n/images/flags/ia.png +0 -0
- data/public/tr8n/images/flags/id.png +0 -0
- data/public/tr8n/images/flags/ie.png +0 -0
- data/public/tr8n/images/flags/ig.png +0 -0
- data/public/tr8n/images/flags/is.png +0 -0
- data/public/tr8n/images/flags/it-CH.png +0 -0
- data/public/tr8n/images/flags/it.png +0 -0
- data/public/tr8n/images/flags/iu.png +0 -0
- data/public/tr8n/images/flags/ja.png +0 -0
- data/public/tr8n/images/flags/jw.png +0 -0
- data/public/tr8n/images/flags/ka.png +0 -0
- data/public/tr8n/images/flags/kk.png +0 -0
- data/public/tr8n/images/flags/kl.png +0 -0
- data/public/tr8n/images/flags/km.png +0 -0
- data/public/tr8n/images/flags/kn.png +0 -0
- data/public/tr8n/images/flags/ko-KP.png +0 -0
- data/public/tr8n/images/flags/ko-KR.png +0 -0
- data/public/tr8n/images/flags/ko.png +0 -0
- data/public/tr8n/images/flags/kok.png +0 -0
- data/public/tr8n/images/flags/ks.png +0 -0
- data/public/tr8n/images/flags/ku.png +0 -0
- data/public/tr8n/images/flags/ky.png +0 -0
- data/public/tr8n/images/flags/la.png +0 -0
- data/public/tr8n/images/flags/lb.png +0 -0
- data/public/tr8n/images/flags/lg.png +0 -0
- data/public/tr8n/images/flags/li-NL.png +0 -0
- data/public/tr8n/images/flags/ln.png +0 -0
- data/public/tr8n/images/flags/lo.png +0 -0
- data/public/tr8n/images/flags/lt.png +0 -0
- data/public/tr8n/images/flags/lv.png +0 -0
- data/public/tr8n/images/flags/md.png +0 -0
- data/public/tr8n/images/flags/mfe.png +0 -0
- data/public/tr8n/images/flags/mg.png +0 -0
- data/public/tr8n/images/flags/mh.png +0 -0
- data/public/tr8n/images/flags/mi.png +0 -0
- data/public/tr8n/images/flags/mk.png +0 -0
- data/public/tr8n/images/flags/ml.png +0 -0
- data/public/tr8n/images/flags/mn.png +0 -0
- data/public/tr8n/images/flags/mo.png +0 -0
- data/public/tr8n/images/flags/mr.png +0 -0
- data/public/tr8n/images/flags/ms.png +0 -0
- data/public/tr8n/images/flags/mt.png +0 -0
- data/public/tr8n/images/flags/my.png +0 -0
- data/public/tr8n/images/flags/na.png +0 -0
- data/public/tr8n/images/flags/nb.png +0 -0
- data/public/tr8n/images/flags/nd.png +0 -0
- data/public/tr8n/images/flags/ne.png +0 -0
- data/public/tr8n/images/flags/ng.png +0 -0
- data/public/tr8n/images/flags/nl-NE.png +0 -0
- data/public/tr8n/images/flags/nl.png +0 -0
- data/public/tr8n/images/flags/nn.png +0 -0
- data/public/tr8n/images/flags/no.png +0 -0
- data/public/tr8n/images/flags/nr.png +0 -0
- data/public/tr8n/images/flags/nso.png +0 -0
- data/public/tr8n/images/flags/nv.png +0 -0
- data/public/tr8n/images/flags/ny.png +0 -0
- data/public/tr8n/images/flags/nyn.png +0 -0
- data/public/tr8n/images/flags/oc.png +0 -0
- data/public/tr8n/images/flags/om.png +0 -0
- data/public/tr8n/images/flags/or.png +0 -0
- data/public/tr8n/images/flags/pa-IN.png +0 -0
- data/public/tr8n/images/flags/pa-PK.png +0 -0
- data/public/tr8n/images/flags/pa.png +0 -0
- data/public/tr8n/images/flags/pf.png +0 -0
- data/public/tr8n/images/flags/pl.png +0 -0
- data/public/tr8n/images/flags/pp.png +0 -0
- data/public/tr8n/images/flags/ps.png +0 -0
- data/public/tr8n/images/flags/pt-BZ.png +0 -0
- data/public/tr8n/images/flags/pt.png +0 -0
- data/public/tr8n/images/flags/qu-PE.png +0 -0
- data/public/tr8n/images/flags/qu.png +0 -0
- data/public/tr8n/images/flags/rj.png +0 -0
- data/public/tr8n/images/flags/rm.png +0 -0
- data/public/tr8n/images/flags/rn.png +0 -0
- data/public/tr8n/images/flags/ro-MD.png +0 -0
- data/public/tr8n/images/flags/ro-RO.png +0 -0
- data/public/tr8n/images/flags/ro.png +0 -0
- data/public/tr8n/images/flags/ru.png +0 -0
- data/public/tr8n/images/flags/rw.png +0 -0
- data/public/tr8n/images/flags/sa.png +0 -0
- data/public/tr8n/images/flags/sc.png +0 -0
- data/public/tr8n/images/flags/sd.png +0 -0
- data/public/tr8n/images/flags/se-NO.png +0 -0
- data/public/tr8n/images/flags/sg.png +0 -0
- data/public/tr8n/images/flags/sh.png +0 -0
- data/public/tr8n/images/flags/si.png +0 -0
- data/public/tr8n/images/flags/sk.png +0 -0
- data/public/tr8n/images/flags/sl.png +0 -0
- data/public/tr8n/images/flags/sm.png +0 -0
- data/public/tr8n/images/flags/sn.png +0 -0
- data/public/tr8n/images/flags/so.png +0 -0
- data/public/tr8n/images/flags/sq.png +0 -0
- data/public/tr8n/images/flags/sr-me.png +0 -0
- data/public/tr8n/images/flags/sr.png +0 -0
- data/public/tr8n/images/flags/ss.png +0 -0
- data/public/tr8n/images/flags/st.png +0 -0
- data/public/tr8n/images/flags/su.png +0 -0
- data/public/tr8n/images/flags/sv-FI.png +0 -0
- data/public/tr8n/images/flags/sv-SE.png +0 -0
- data/public/tr8n/images/flags/sv.png +0 -0
- data/public/tr8n/images/flags/sw.png +0 -0
- data/public/tr8n/images/flags/ta.png +0 -0
- data/public/tr8n/images/flags/te.png +0 -0
- data/public/tr8n/images/flags/tg.png +0 -0
- data/public/tr8n/images/flags/th.png +0 -0
- data/public/tr8n/images/flags/ti.png +0 -0
- data/public/tr8n/images/flags/tig.png +0 -0
- data/public/tr8n/images/flags/tk.png +0 -0
- data/public/tr8n/images/flags/tl.png +0 -0
- data/public/tr8n/images/flags/tlh.png +0 -0
- data/public/tr8n/images/flags/tn.png +0 -0
- data/public/tr8n/images/flags/to.png +0 -0
- data/public/tr8n/images/flags/tr.png +0 -0
- data/public/tr8n/images/flags/ts.png +0 -0
- data/public/tr8n/images/flags/tt.png +0 -0
- data/public/tr8n/images/flags/tw.png +0 -0
- data/public/tr8n/images/flags/ug.png +0 -0
- data/public/tr8n/images/flags/uk.png +0 -0
- data/public/tr8n/images/flags/ur.png +0 -0
- data/public/tr8n/images/flags/uz.png +0 -0
- data/public/tr8n/images/flags/ve.png +0 -0
- data/public/tr8n/images/flags/vi.png +0 -0
- data/public/tr8n/images/flags/vo.png +0 -0
- data/public/tr8n/images/flags/wa.png +0 -0
- data/public/tr8n/images/flags/wo.png +0 -0
- data/public/tr8n/images/flags/xh.png +0 -0
- data/public/tr8n/images/flags/yi.png +0 -0
- data/public/tr8n/images/flags/yo.png +0 -0
- data/public/tr8n/images/flags/zh-CN.png +0 -0
- data/public/tr8n/images/flags/zh-HK.png +0 -0
- data/public/tr8n/images/flags/zh-SG.png +0 -0
- data/public/tr8n/images/flags/zh-TW.png +0 -0
- data/public/tr8n/images/flags/zh.png +0 -0
- data/public/tr8n/images/flags/zu.png +0 -0
- data/public/tr8n/images/globe.gif +0 -0
- data/public/tr8n/images/help.png +0 -0
- data/public/tr8n/images/help/color_coding.png +0 -0
- data/public/tr8n/images/help/language_selector.png +0 -0
- data/public/tr8n/images/help/language_selector_default.png +0 -0
- data/public/tr8n/images/help/languages_disabled.png +0 -0
- data/public/tr8n/images/help/translator.png +0 -0
- data/public/tr8n/images/help2.png +0 -0
- data/public/tr8n/images/information.png +0 -0
- data/public/tr8n/images/keyboard.png +0 -0
- data/public/tr8n/images/language_selector_arrow.gif +0 -0
- data/public/tr8n/images/left_quote.png +0 -0
- data/public/tr8n/images/lightning.png +0 -0
- data/public/tr8n/images/loading.gif +0 -0
- data/public/tr8n/images/loading2.gif +0 -0
- data/public/tr8n/images/loading3.gif +0 -0
- data/public/tr8n/images/loading_large.gif +0 -0
- data/public/tr8n/images/lock.png +0 -0
- data/public/tr8n/images/lock_add.png +0 -0
- data/public/tr8n/images/lock_delete.png +0 -0
- data/public/tr8n/images/lock_open.png +0 -0
- data/public/tr8n/images/medals/bronze.png +0 -0
- data/public/tr8n/images/medals/gold.png +0 -0
- data/public/tr8n/images/medals/runner.png +0 -0
- data/public/tr8n/images/medals/silver.png +0 -0
- data/public/tr8n/images/pencil.png +0 -0
- data/public/tr8n/images/photo_silhouette.gif +0 -0
- data/public/tr8n/images/plus.png +0 -0
- data/public/tr8n/images/random.png +0 -0
- data/public/tr8n/images/random2.png +0 -0
- data/public/tr8n/images/rating_star0.png +0 -0
- data/public/tr8n/images/rating_star05.png +0 -0
- data/public/tr8n/images/rating_star1.png +0 -0
- data/public/tr8n/images/rating_stars.gif +0 -0
- data/public/tr8n/images/rating_stars.psd +0 -0
- data/public/tr8n/images/reply.png +0 -0
- data/public/tr8n/images/right_quote.png +0 -0
- data/public/tr8n/images/rotating_world.gif +0 -0
- data/public/tr8n/images/script.png +0 -0
- data/public/tr8n/images/script_edit.png +0 -0
- data/public/tr8n/images/script_gear.png +0 -0
- data/public/tr8n/images/site_sprite.gif +0 -0
- data/public/tr8n/images/spinner.gif +0 -0
- data/public/tr8n/images/star.png +0 -0
- data/public/tr8n/images/table_edit.png +0 -0
- data/public/tr8n/images/table_gear.png +0 -0
- data/public/tr8n/images/table_multiple.png +0 -0
- data/public/tr8n/images/thumb_down.png +0 -0
- data/public/tr8n/images/thumb_up.png +0 -0
- data/public/tr8n/images/toolbar_bg.gif +0 -0
- data/public/tr8n/images/top_left_stem.png +0 -0
- data/public/tr8n/images/top_right_stem.png +0 -0
- data/public/tr8n/images/tr8n_loading.gif +0 -0
- data/public/tr8n/images/tr8n_logo.jpg +0 -0
- data/public/tr8n/images/tr8n_logo.png +0 -0
- data/public/tr8n/images/tr8n_logo2.gif +0 -0
- data/public/tr8n/images/tr8n_logo2.png +0 -0
- data/public/tr8n/images/tr8n_logo_wiki.png +0 -0
- data/public/tr8n/images/tr8n_logo_wiki2.png +0 -0
- data/public/tr8n/images/translate_icn.gif +0 -0
- data/public/tr8n/images/wizard.png +0 -0
- data/public/tr8n/javascripts/jsDraw2D.js +24 -0
- data/public/tr8n/javascripts/keyboard_1_36.js +1214 -0
- data/public/tr8n/javascripts/keyboard_1_44.js +1735 -0
- data/public/tr8n/javascripts/shortcut.js +223 -0
- data/public/tr8n/javascripts/tr8n.js +904 -0
- data/public/tr8n/javascripts/tr8n_client_sdk.js +1182 -0
- data/public/tr8n/javascripts/tr8n_prototype_effects.js +65 -0
- data/public/tr8n/stylesheets/components.css +208 -0
- data/public/tr8n/stylesheets/keyboard_1_36.css +185 -0
- data/public/tr8n/stylesheets/keyboard_1_44.css +268 -0
- data/public/tr8n/stylesheets/layout.css +119 -0
- data/public/tr8n/stylesheets/tr8n.css +201 -0
- data/rails/init.rb +53 -0
- data/script/rails +6 -0
- data/test/performance/browsing_test.rb +9 -0
- data/test/test_helper.rb +13 -0
- data/tr8n.gemspec +40 -0
- metadata +865 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
module Tr8n::ControllerMethods
|
|
25
|
+
include Tr8n::CommonMethods
|
|
26
|
+
|
|
27
|
+
def self.included(base)
|
|
28
|
+
if 'ApplicationController' == base.name
|
|
29
|
+
base.append_before_filter :init_tr8n
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
######################################################################
|
|
34
|
+
# Author: Iain Hecker
|
|
35
|
+
# reference: http://github.com/iain/http_accept_language
|
|
36
|
+
######################################################################
|
|
37
|
+
def tr8n_browser_accepted_locales
|
|
38
|
+
@accepted_languages ||= request.env['HTTP_ACCEPT_LANGUAGE'].split(/\s*,\s*/).collect do |l|
|
|
39
|
+
l += ';q=1.0' unless l =~ /;q=\d+\.\d+$/
|
|
40
|
+
l.split(';q=')
|
|
41
|
+
end.sort do |x,y|
|
|
42
|
+
raise Tr8n::Exception.new("Not correctly formatted") unless x.first =~ /^[a-z\-]+$/i
|
|
43
|
+
y.last.to_f <=> x.last.to_f
|
|
44
|
+
end.collect do |l|
|
|
45
|
+
l.first.downcase.gsub(/-[a-z]+$/i) { |x| x.upcase }
|
|
46
|
+
end
|
|
47
|
+
rescue
|
|
48
|
+
[]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def tr8n_user_preffered_locale
|
|
52
|
+
tr8n_browser_accepted_locales.each do |locale|
|
|
53
|
+
lang = Tr8n::Language.for(locale)
|
|
54
|
+
return locale if lang and lang.enabled?
|
|
55
|
+
end
|
|
56
|
+
Tr8n::Config.default_locale
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def tr8n_request_remote_ip
|
|
60
|
+
@remote_ip ||= if request.env['HTTP_X_FORWARDED_FOR']
|
|
61
|
+
request.env['HTTP_X_FORWARDED_FOR'].split(',').first
|
|
62
|
+
else
|
|
63
|
+
request.remote_ip
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def init_tr8n
|
|
68
|
+
tr8n_current_locale = nil
|
|
69
|
+
|
|
70
|
+
begin
|
|
71
|
+
tr8n_current_locale = eval(Tr8n::Config.current_locale_method)
|
|
72
|
+
rescue Exception => ex
|
|
73
|
+
# fallback to the default session based locale implementation
|
|
74
|
+
# choose the first language from the accepted languages header
|
|
75
|
+
session[:locale] = tr8n_user_preffered_locale unless session[:locale]
|
|
76
|
+
session[:locale] = params[:locale] if params[:locale]
|
|
77
|
+
tr8n_current_locale = session[:locale]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
tr8n_current_user = nil
|
|
81
|
+
if Tr8n::Config.site_user_info_enabled?
|
|
82
|
+
begin
|
|
83
|
+
tr8n_current_user = eval(Tr8n::Config.current_user_method)
|
|
84
|
+
tr8n_current_user = nil if tr8n_current_user.class.name != Tr8n::Config.user_class_name
|
|
85
|
+
rescue Exception => ex
|
|
86
|
+
raise Tr8n::Exception.new("Tr8n cannot be initialized because #{Tr8n::Config.current_user_method} failed with: #{ex.message}")
|
|
87
|
+
end
|
|
88
|
+
else
|
|
89
|
+
tr8n_current_user = Tr8n::Translator.find_by_id(session[:tr8n_translator_id]) if session[:tr8n_translator_id]
|
|
90
|
+
tr8n_current_user = Tr8n::Translator.new unless tr8n_current_user
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# initialize request thread variables
|
|
94
|
+
Tr8n::Config.init(tr8n_current_locale, tr8n_current_user)
|
|
95
|
+
|
|
96
|
+
# track user's last ip address
|
|
97
|
+
if Tr8n::Config.enable_country_tracking? and Tr8n::Config.current_user_is_translator?
|
|
98
|
+
Tr8n::Config.current_translator.update_last_ip(tr8n_request_remote_ip)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# flash notice
|
|
103
|
+
def trfn(label, desc = "", tokens = {}, options = {})
|
|
104
|
+
flash[:trfn] = tr(label, desc, tokens, options)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# flash error
|
|
108
|
+
def trfe(label, desc = "", tokens = {}, options = {})
|
|
109
|
+
flash[:trfe] = tr(label, desc, tokens, options)
|
|
110
|
+
end
|
|
111
|
+
# end translation helper methods
|
|
112
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
require 'rexml/document'
|
|
25
|
+
require 'net/http'
|
|
26
|
+
|
|
27
|
+
class Tr8n::Dictionary
|
|
28
|
+
|
|
29
|
+
def self.load_definitions_for(words)
|
|
30
|
+
words = [words] unless words.is_a?(Array)
|
|
31
|
+
|
|
32
|
+
definitions = {}
|
|
33
|
+
|
|
34
|
+
words.each do |word|
|
|
35
|
+
Net::HTTP.start("services.aonaware.com") do |http|
|
|
36
|
+
response = http.get("/DictService/DictService.asmx/Define?word=#{word}")
|
|
37
|
+
|
|
38
|
+
doc = REXML::Document.new(response.body)
|
|
39
|
+
doc.elements.each('WordDefinition/Definitions/Definition') do |d|
|
|
40
|
+
word = d.elements["Word"].text.downcase
|
|
41
|
+
source = d.elements["Dictionary"].elements["Name"].text
|
|
42
|
+
definition = d.elements["WordDefinition"].text
|
|
43
|
+
|
|
44
|
+
definitions[word] ||= []
|
|
45
|
+
definitions[word] << {:source => source, :definition => definition}
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
definitions
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
data/lib/tr8n/engine.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'pp'
|
|
2
|
+
require 'will_filter'
|
|
3
|
+
require 'tr8n'
|
|
4
|
+
require 'rails'
|
|
5
|
+
|
|
6
|
+
module Tr8n
|
|
7
|
+
class Engine < Rails::Engine
|
|
8
|
+
config.autoload_paths << File.expand_path("../../lib", __FILE__)
|
|
9
|
+
config.autoload_paths << File.expand_path("../../lib/core_ext/**", __FILE__)
|
|
10
|
+
config.autoload_paths << File.expand_path("../../lib/tr8n", __FILE__)
|
|
11
|
+
config.autoload_paths << File.expand_path("../../lib/tr8n/tokens", __FILE__)
|
|
12
|
+
config.autoload_paths << File.expand_path("../../app/models/tr8n", __FILE__)
|
|
13
|
+
|
|
14
|
+
[
|
|
15
|
+
"../../lib/core_ext/**",
|
|
16
|
+
"../../lib/tr8n",
|
|
17
|
+
"../../lib/tr8n/tokens",
|
|
18
|
+
"../../lib"
|
|
19
|
+
].each do |dir|
|
|
20
|
+
Dir[File.expand_path("#{File.dirname(__FILE__)}/#{dir}/*.rb")].sort.each do |file|
|
|
21
|
+
require_or_load file
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
initializer "static assets" do |app|
|
|
26
|
+
app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
class Tr8n::Exception < StandardError
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2011 Justin Balthrop
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
module Tr8n::Extender
|
|
25
|
+
def extended(mod)
|
|
26
|
+
mod.send(:extend, self::ClassMethods)
|
|
27
|
+
mod.send(:include, self::InstanceMethods)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def included(mod)
|
|
31
|
+
mod.send(:extend, self::ClassMethods)
|
|
32
|
+
mod.send(:include, self::InstanceMethods)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2011 Michael Berkovich
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
module Tr8n::HelperMethods
|
|
25
|
+
include Tr8n::CommonMethods
|
|
26
|
+
|
|
27
|
+
def tr8n_options_for_select(options, selected = nil, description = nil, lang = Tr8n::Config.current_language)
|
|
28
|
+
options_for_select(options.tro(description), selected)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def tr8n_phrases_link_tag(search = "", phrase_type = :without, phrase_status = :any)
|
|
32
|
+
return unless Tr8n::Config.enabled?
|
|
33
|
+
return if Tr8n::Config.current_language.default?
|
|
34
|
+
return unless Tr8n::Config.open_registration_mode? or Tr8n::Config.current_user_is_translator?
|
|
35
|
+
return unless Tr8n::Config.current_translator.enable_inline_translations?
|
|
36
|
+
|
|
37
|
+
link_to(image_tag("/tr8n/images/translate_icn.gif", :style => "vertical-align:middle; border: 0px;", :title => search),
|
|
38
|
+
:controller => "/tr8n/phrases", :action => :index,
|
|
39
|
+
:search => search, :phrase_type => phrase_type, :phrase_status => phrase_status).html_safe
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def tr8n_dir_attribute_tag
|
|
43
|
+
"dir='<%=Tr8n::Config.current_language.dir%>'".html_safe
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def tr8n_splash_screen_tag
|
|
47
|
+
html = "<div id='tr8n_splash_screen' style='display:none'>"
|
|
48
|
+
html << (render :partial => Tr8n::Config.splash_screen)
|
|
49
|
+
html << "</div>"
|
|
50
|
+
html.html_safe
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def tr8n_language_flag_tag(lang = Tr8n::Config.current_language, opts = {})
|
|
54
|
+
return "" unless Tr8n::Config.enable_language_flags?
|
|
55
|
+
html = image_tag("/tr8n/images/flags/#{lang.flag}.png", :style => "vertical-align:middle;", :title => lang.native_name)
|
|
56
|
+
html << " ".html_safe
|
|
57
|
+
html.html_safe
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def tr8n_language_name_tag(lang = Tr8n::Config.current_language, opts = {})
|
|
61
|
+
show_flag = opts[:flag].nil? ? true : opts[:flag]
|
|
62
|
+
name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
|
|
63
|
+
linked = opts[:linked].nil? ? true : opts[:linked]
|
|
64
|
+
|
|
65
|
+
html = "<span style='white-space: nowrap'>"
|
|
66
|
+
html << tr8n_language_flag_tag(lang, opts) if show_flag
|
|
67
|
+
|
|
68
|
+
name = case name_type
|
|
69
|
+
when :native then lang.native_name
|
|
70
|
+
when :english then lang.english_name
|
|
71
|
+
when :locale then lang.locale
|
|
72
|
+
else lang.full_name
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
if linked
|
|
76
|
+
html << link_to(name.html_safe, :controller => "/tr8n/language",
|
|
77
|
+
:action => :switch, :language_action => :switch_language,
|
|
78
|
+
:locale => lang.locale,
|
|
79
|
+
:source_url => opts[:source_url])
|
|
80
|
+
else
|
|
81
|
+
html << name
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
html << "</span>"
|
|
85
|
+
html.html_safe
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def tr8n_language_selector_tag(opts = {})
|
|
89
|
+
opts[:style] ||= "color:#1166bb;"
|
|
90
|
+
opts[:show_arrow] ||= true
|
|
91
|
+
opts[:arrow_style] ||= "font-size:8px;"
|
|
92
|
+
render(:partial => '/tr8n/common/language_selector', :locals => {:opts => opts})
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def tr8n_language_strip_tag(opts = {})
|
|
96
|
+
opts[:flag] = opts[:flag].nil? ? false : opts[:flag]
|
|
97
|
+
opts[:name] = opts[:name].nil? ? :native : opts[:name]
|
|
98
|
+
opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
|
|
99
|
+
opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
|
|
100
|
+
|
|
101
|
+
render(:partial => '/tr8n/common/language_strip', :locals => {:opts => opts})
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def tr8n_language_table_tag(opts = {})
|
|
105
|
+
opts[:cols] = opts[:cols].nil? ? 4 : opts[:cols]
|
|
106
|
+
opts[:col_size] = opts[:col_size].nil? ? "300px" : opts[:col_size]
|
|
107
|
+
render(:partial => '/tr8n/common/language_table', :locals => {:opts => opts.merge(:name => :english)})
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def tr8n_translator_login_tag(opts = {})
|
|
111
|
+
opts[:class] ||= 'tr8n_right_horiz_list'
|
|
112
|
+
render(:partial => '/tr8n/common/translator_login', :locals => {:opts => opts})
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def tr8n_flashes_tag(opts = {})
|
|
116
|
+
render(:partial => '/tr8n/common/flashes', :locals => {:opts => opts})
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def tr8n_scripts_tag(opts = {})
|
|
120
|
+
render(:partial => '/tr8n/common/scripts', :locals => {:opts => opts})
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def tr8n_client_sdk_scripts_tag(opts = {})
|
|
124
|
+
javascript_include_tag("/tr8n/javascripts/tr8n_client_sdk.js", :locals => {:opts => opts})
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def tr8n_translator_rank_tag(translator, rank = nil)
|
|
128
|
+
return "" unless translator
|
|
129
|
+
|
|
130
|
+
rank ||= translator.rank || 0
|
|
131
|
+
|
|
132
|
+
html = "<span dir='ltr'>"
|
|
133
|
+
1.upto(5) do |i|
|
|
134
|
+
if rank > i * 20 - 10 and rank < i * 20
|
|
135
|
+
html << image_tag("/tr8n/images/rating_star05.png")
|
|
136
|
+
elsif rank < i * 20 - 10
|
|
137
|
+
html << image_tag("/tr8n/images/rating_star0.png")
|
|
138
|
+
else
|
|
139
|
+
html << image_tag("/tr8n/images/rating_star1.png")
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
html << "</span>"
|
|
143
|
+
html.html_safe
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def tr8n_help_icon_tag(filename = "index")
|
|
147
|
+
link_to(image_tag("/tr8n/images/help.png", :style => "border:0px; vertical-align:middle;", :title => trl("Help")), {:controller => "/tr8n/help", :action => filename}, :target => "_new").html_safe
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def tr8n_help_link(text, opts = {})
|
|
151
|
+
filename = opts[:filename].nil? ? text.downcase.gsub(' ', '_') : opts[:filename]
|
|
152
|
+
classname = "tr8n_selected" if filename == controller.action_name
|
|
153
|
+
link_to(text, { :controller => "/tr8n/help", :action => filename }, :class => classname).html_safe
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def tr8n_spinner_tag(id = "spinner", label = nil, cls='spinner')
|
|
157
|
+
html = "<div id='#{id}' class='#{cls}' style='display:none'>"
|
|
158
|
+
html << image_tag("/tr8n/images/spinner.gif", :style => "vertical-align:middle;")
|
|
159
|
+
html << " #{trl(label)}" if label
|
|
160
|
+
html << "</div>"
|
|
161
|
+
html.html_safe
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def tr8n_toggler_tag(content_id, label = "", open = true)
|
|
165
|
+
html = "<span id='#{content_id}_open' "
|
|
166
|
+
html << "style='display:none'" unless open
|
|
167
|
+
html << ">"
|
|
168
|
+
html << link_to_function("#{image_tag("/tr8n/images/arrow_down.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.hide('#{content_id}_open'); Tr8n.Effects.show('#{content_id}_closed'); Tr8n.Effects.blindUp('#{content_id}');", :style=> "text-decoration:none")
|
|
169
|
+
html << "</span>"
|
|
170
|
+
html << "<span id='#{content_id}_closed' "
|
|
171
|
+
html << "style='display:none'" if open
|
|
172
|
+
html << ">"
|
|
173
|
+
html << link_to_function("#{image_tag("/tr8n/images/arrow_right.gif", :style=>'text-align:center; vertical-align:middle')} #{label}".html_safe, "Tr8n.Effects.show('#{content_id}_open'); Tr8n.Effects.hide('#{content_id}_closed'); Tr8n.Effects.blindDown('#{content_id}');", :style=> "text-decoration:none")
|
|
174
|
+
html << "</span>"
|
|
175
|
+
html.html_safe
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def tr8n_sitemap(sections, splitters, options = {})
|
|
179
|
+
html = ""
|
|
180
|
+
html << "<table style='width:100%'>"
|
|
181
|
+
html << "<tr>"
|
|
182
|
+
splitters.each do |splitter|
|
|
183
|
+
html << "<td style='vertical-align:top; width:" << (100 / splitters.size).to_s << "%;'>"
|
|
184
|
+
html << generate_sitemap(sections[splitter.first..splitter.last], options)
|
|
185
|
+
html << "</td>"
|
|
186
|
+
end
|
|
187
|
+
html << "</tr>"
|
|
188
|
+
html << "</table>"
|
|
189
|
+
html.html_safe
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def tr8n_breadcrumb_tag(source = nil, opts = {})
|
|
193
|
+
source ||= "#{controller.class.name.underscore.gsub("_controller", "")}/#{controller.action_name}"
|
|
194
|
+
section = Tr8n::SiteMap.section_for_source(source)
|
|
195
|
+
return "" unless section
|
|
196
|
+
opts[:separator] ||= " >> "
|
|
197
|
+
opts[:min_elements] ||= 1
|
|
198
|
+
opts[:skip_root] ||= opts[:skip_root].nil? ? false : opts[:skip_root]
|
|
199
|
+
|
|
200
|
+
links = section.parents.collect{|node| link_to(node.title(params), node.link(params))}
|
|
201
|
+
return "" if links.size <= opts[:min_elements]
|
|
202
|
+
|
|
203
|
+
links.delete(links.first) if opts[:skip_root]
|
|
204
|
+
links.unshift(link_to(opts[:root].first, opts[:root].last)) if opts[:root]
|
|
205
|
+
|
|
206
|
+
html = "<div id='tr8n_breadcrumb' class='tr8n_breadcrumb'>"
|
|
207
|
+
html << links.join(opts[:separator])
|
|
208
|
+
html << '</div>'
|
|
209
|
+
html.html_safe
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def tr8n_user_tag(translator, options = {})
|
|
213
|
+
return "Deleted Translator" unless translator
|
|
214
|
+
|
|
215
|
+
if options[:linked]
|
|
216
|
+
link_to(translator.name, translator.link).html_safe
|
|
217
|
+
else
|
|
218
|
+
translator.name
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def tr8n_user_mugshot_tag(translator, options = {})
|
|
223
|
+
if translator and !translator.mugshot.blank?
|
|
224
|
+
img_url = translator.mugshot
|
|
225
|
+
else
|
|
226
|
+
img_url = Tr8n::Config.silhouette_image
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
img_tag = "<img src='#{img_url}' style='width:48px'>".html_safe
|
|
230
|
+
|
|
231
|
+
if translator and options[:linked]
|
|
232
|
+
link_to(img_tag, translator.link).html_safe
|
|
233
|
+
else
|
|
234
|
+
img_tag.html_safe
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def tr8n_will_paginate(collection = nil, options = {})
|
|
239
|
+
will_paginate(collection, options.merge(:previous_label => tr("« Previous", "Previous entries in a list", {}, options),
|
|
240
|
+
:next_label => tr("Next »", "Next entries in a list", {}, options))).html_safe
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def tr8n_page_entries_info(collection, options = {})
|
|
244
|
+
entry_name = options[:entry_name] || (collection.empty? ? 'entry' : collection.first.class.name.underscore.sub('_', ' '))
|
|
245
|
+
|
|
246
|
+
if collection.total_pages < 2
|
|
247
|
+
case collection.size
|
|
248
|
+
when 0
|
|
249
|
+
tr("None found", "Paginator no entries message", {}, options)
|
|
250
|
+
when 1
|
|
251
|
+
tr("Displaying [bold: 1] #{entry_name}", "Paginator one page message", {}, options)
|
|
252
|
+
else
|
|
253
|
+
tr("Displaying [bold: all {count}] #{entry_name.pluralize}", "Paginator all entries message", {:count => collection.size}, options)
|
|
254
|
+
end
|
|
255
|
+
else
|
|
256
|
+
tr("Displaying #{entry_name.pluralize} [bold: {start_num} - {end_num}] of [bold: {total_count}] in total",
|
|
257
|
+
"Paginator custom message", {
|
|
258
|
+
:start_num => collection.offset + 1,
|
|
259
|
+
:end_num => collection.offset + collection.length,
|
|
260
|
+
:total_count => collection.total_entries
|
|
261
|
+
}, options
|
|
262
|
+
)
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
def tr8n_select_month(date, options = {}, html_options = {})
|
|
267
|
+
month_names = options[:use_short_month] ? Tr8n::Config.default_abbr_month_names : Tr8n::Config.default_month_names
|
|
268
|
+
select_month(date, options.merge(
|
|
269
|
+
:use_month_names => month_names.collect{|month_name| Tr8n::Language.translate(month_name, options[:description] || "Month name")}
|
|
270
|
+
), html_options)
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def tr8n_with_options_tag(opts, &block)
|
|
274
|
+
Thread.current[:tr8n_block_options] = opts
|
|
275
|
+
if block_given?
|
|
276
|
+
ret = capture(&block)
|
|
277
|
+
end
|
|
278
|
+
Thread.current[:tr8n_block_options] = {}
|
|
279
|
+
ret
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def tr8n_button_tag(label, function, opts = {})
|
|
283
|
+
link_to_function("<span>#{label}</span>".html_safe, function, :class => "tr8n_grey_button tr8n_pcb")
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
private
|
|
287
|
+
|
|
288
|
+
def generate_sitemap(sections, options = {})
|
|
289
|
+
html = "<ul class='section_list'>"
|
|
290
|
+
sections.each do |section|
|
|
291
|
+
html << "<li class='section_list_item'>"
|
|
292
|
+
html << "<a href='/tr8n/phrases/index?section_key=#{section.key}'>" << tr(section.label, section.description) << "</a>"
|
|
293
|
+
html << "<a href='" << section.data[:link] << "' target='_new'><img src='/tr8n/images/bullet_go.png' style='border:0px; vertical-align:middle'></a>" if section.data[:link]
|
|
294
|
+
|
|
295
|
+
if section.children.size > 0
|
|
296
|
+
html << generate_sitemap(section.children, options)
|
|
297
|
+
end
|
|
298
|
+
html << "</li>"
|
|
299
|
+
end
|
|
300
|
+
html << "</ul>"
|
|
301
|
+
html.html_safe
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
end
|