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,83 @@
|
|
|
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::TranslatorController < Tr8n::BaseController
|
|
25
|
+
|
|
26
|
+
def index
|
|
27
|
+
@fallback_language = (tr8n_current_translator.fallback_language || tr8n_default_language)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def update_translator_section
|
|
31
|
+
@fallback_language = (tr8n_current_translator.fallback_language || tr8n_default_language)
|
|
32
|
+
unless request.post?
|
|
33
|
+
return render(:partial => params[:section], :locals => {:mode => params[:mode].to_sym})
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
tr8n_current_translator.update_attributes(params[:translator])
|
|
37
|
+
|
|
38
|
+
tr8n_current_translator.reload
|
|
39
|
+
@fallback_language = (tr8n_current_translator.fallback_language || tr8n_default_language)
|
|
40
|
+
render(:partial => params[:section], :locals => {:mode => :view})
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def follow
|
|
44
|
+
if params[:translation_key_id]
|
|
45
|
+
object = Tr8n::TranslationKey.find_by_id(params[:translation_key_id])
|
|
46
|
+
trfn("You are now following this translation key") if object
|
|
47
|
+
end
|
|
48
|
+
tr8n_current_translator.follow(object) if object
|
|
49
|
+
redirect_to_source
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def unfollow
|
|
53
|
+
if params[:translation_key_id]
|
|
54
|
+
object = Tr8n::TranslationKey.find_by_id(params[:translation_key_id])
|
|
55
|
+
end
|
|
56
|
+
tr8n_current_translator.unfollow(object) if object
|
|
57
|
+
redirect_to_source
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def lb_report
|
|
61
|
+
if params[:translation_key_id]
|
|
62
|
+
@reported_object = Tr8n::TranslationKey.find_by_id(params[:translation_key_id])
|
|
63
|
+
elsif params[:translation_id]
|
|
64
|
+
@reported_object = Tr8n::Translation.find_by_id(params[:translation_id])
|
|
65
|
+
elsif params[:message_id]
|
|
66
|
+
@reported_object = Tr8n::LanguageForumMessage.find_by_id(params[:message_id])
|
|
67
|
+
elsif params[:comment_id]
|
|
68
|
+
@reported_object = Tr8n::TranslationKeyComment.find_by_id(params[:comment_id])
|
|
69
|
+
end
|
|
70
|
+
render :layout => false
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def submit_report
|
|
74
|
+
if request.post?
|
|
75
|
+
reported_object = params[:object_type].constantize.find(params[:object_id])
|
|
76
|
+
Tr8n::TranslatorReport.submit(Tr8n::Config.current_translator, reported_object, params[:reason], params[:comment])
|
|
77
|
+
trfn("Thank you for submitting your report.")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
redirect_to_source
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
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 ApplicationHelper
|
|
25
|
+
include Tr8n::HelperMethods
|
|
26
|
+
|
|
27
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
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::Admin::BaseHelper
|
|
25
|
+
|
|
26
|
+
def tr8n_will_filter(results)
|
|
27
|
+
will_filter(results)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def tr8n_will_paginate(collection = nil, options = {})
|
|
31
|
+
super(collection, options.merge(:skip_decorations => true))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def tr8n_page_entries_info(collection, options = {})
|
|
35
|
+
super(collection, options.merge(:skip_decorations => true))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def tr8n_pretty_print_hash(hash)
|
|
39
|
+
return "" unless hash
|
|
40
|
+
html = ""
|
|
41
|
+
hash.each do |key, value|
|
|
42
|
+
html << "<strong>"
|
|
43
|
+
html << key << ": </strong>"
|
|
44
|
+
if value.is_a?(Hash)
|
|
45
|
+
html << "{"
|
|
46
|
+
html << tr8n_pretty_print_hash(value)
|
|
47
|
+
html << "} "
|
|
48
|
+
else
|
|
49
|
+
html << value.strip if value
|
|
50
|
+
html << "; "
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
html
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def language_metric_chart(field = :user_count, limit = 20)
|
|
57
|
+
labels = []
|
|
58
|
+
label_positions = []
|
|
59
|
+
counts = []
|
|
60
|
+
Tr8n::TotalLanguageMetric.find(:all, :conditions => ["language_id <> ?", Tr8n::Config.default_language.id], :order => "#{field} desc", :limit => limit).each_with_index do |metric, index|
|
|
61
|
+
labels << metric.language.english_name
|
|
62
|
+
label_positions << ((index+1) * 30)
|
|
63
|
+
counts << (metric.send(field) || 0)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
max_count = counts.max
|
|
67
|
+
max_count = 100 if max_count < 100
|
|
68
|
+
counts = counts.collect{|c| c/(max_count * 1.0) * 100}
|
|
69
|
+
|
|
70
|
+
chart_params = []
|
|
71
|
+
chart_params << "chxl=1:|#{labels.join('|')}|"
|
|
72
|
+
chart_params << "chxp=#{label_positions.join(',')}"
|
|
73
|
+
chart_params << "chxr=0,0,#{limit}|0,0,#{max_count}"
|
|
74
|
+
chart_params << "chxt=x,y"
|
|
75
|
+
chart_params << "chs=1000x300"
|
|
76
|
+
chart_params << "cht=bhs"
|
|
77
|
+
chart_params << "chbh=10"
|
|
78
|
+
chart_params << "chco=008000"
|
|
79
|
+
chart_params << "chd=t:#{counts.reverse.join(',')}"
|
|
80
|
+
|
|
81
|
+
image_tag("http://chart.apis.google.com/chart?#{chart_params.join('&')}")
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
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::BaseHelper
|
|
25
|
+
|
|
26
|
+
# for admin translations
|
|
27
|
+
def tra(label, desc = "", tokens = {}, options = {})
|
|
28
|
+
if Tr8n::Config.enable_admin_translations?
|
|
29
|
+
if Tr8n::Config.enable_admin_inline_mode?
|
|
30
|
+
tr(label, desc, tokens, options)
|
|
31
|
+
else
|
|
32
|
+
trl(label, desc, tokens, options)
|
|
33
|
+
end
|
|
34
|
+
else
|
|
35
|
+
Tr8n::Config.default_language.translate(label, desc, tokens, options)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# for admin translations
|
|
40
|
+
def trla(label, desc = "", tokens = {}, options = {})
|
|
41
|
+
tra(label, desc, tokens, options.merge(:skip_decorations => true))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
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::DashboardHelper
|
|
25
|
+
|
|
26
|
+
def language_completeness_chart(language)
|
|
27
|
+
values = [language.total_metric.not_translated_count, language.total_metric.locked_key_count, language.total_metric.translated_key_count - language.total_metric.locked_key_count]
|
|
28
|
+
names = ["Not Translated", "Translated", "Pending Approval"]
|
|
29
|
+
colors = ['FF0000', '00FF00', 'FFFF00']
|
|
30
|
+
chart_url = "https://chart.googleapis.com/chart?cht=p3&chs=350x80&chd=t:#{values.join(',')}&chl=#{names.join('|')}&chco=#{colors.join('|')}"
|
|
31
|
+
image_tag(chart_url)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def translator_rank_chart(language = nil)
|
|
35
|
+
metric = language ? tr8n_current_translator.metric_for(language) : tr8n_current_translator.total_metric
|
|
36
|
+
values = [metric.rejected_translations, metric.accepted_translations, metric.pending_vote_translations]
|
|
37
|
+
names = ["Rejected", "Accepted", "Pending Votes"]
|
|
38
|
+
colors = ['FF0000', '00FF00', 'FFFF00']
|
|
39
|
+
chart_url = "https://chart.googleapis.com/chart?cht=p3&chs=350x80&chd=t:#{values.join(',')}&chl=#{names.join('|')}&chco=#{colors.join('|')}"
|
|
40
|
+
image_tag(chart_url)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
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 'will_filter'
|
|
25
|
+
|
|
26
|
+
class Tr8n::BaseFilter < WillFilter::Filter
|
|
27
|
+
|
|
28
|
+
def definition
|
|
29
|
+
meta = super
|
|
30
|
+
meta.keys.each do |key|
|
|
31
|
+
parts = key.to_s.split(".")
|
|
32
|
+
next unless parts.last.index("language_id")
|
|
33
|
+
meta[key][:is] = :list
|
|
34
|
+
meta[key][:is_not] = :list
|
|
35
|
+
end
|
|
36
|
+
meta
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def value_options_for(criteria_key)
|
|
40
|
+
parts = criteria_key.to_s.split(".")
|
|
41
|
+
if parts.last.index("language_id")
|
|
42
|
+
return Tr8n::Language.filter_options
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
return []
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def default_filters
|
|
49
|
+
[
|
|
50
|
+
["Created Today", "created_today"],
|
|
51
|
+
["Updated Today", "updated_today"]
|
|
52
|
+
]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def default_filter_conditions(key)
|
|
56
|
+
return [:created_at, :is_on, Date.today] if (key == "created_today")
|
|
57
|
+
return [:updated_at, :is_on, Date.today] if (key == "updated_today")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def default_order
|
|
61
|
+
'created_at'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def default_order_type
|
|
65
|
+
'desc'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
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::DailyLanguageMetric < Tr8n::LanguageMetric
|
|
25
|
+
|
|
26
|
+
def update_metrics!
|
|
27
|
+
self.user_count = Tr8n::LanguageUser.count(:conditions => ["language_id = ? and created_at >= ? and created_at < ?", language_id, metric_date, metric_date + 1.day])
|
|
28
|
+
self.translator_count = Tr8n::LanguageUser.count(:conditions => ["language_id = ? and created_at >= ? and created_at < ? and translator_id is not null", language_id, metric_date, metric_date + 1.day])
|
|
29
|
+
self.translation_count = Tr8n::Translation.count(:conditions => ["language_id = ? and created_at >= ? and created_at < ?", language_id, metric_date, metric_date + 1.day])
|
|
30
|
+
|
|
31
|
+
self.key_count = Tr8n::TranslationKey.count(:conditions => ["created_at >= ? and created_at < ?", metric_date, metric_date + 1.day])
|
|
32
|
+
self.locked_key_count = Tr8n::TranslationKey.count("distinct tr8n_translation_keys.id",
|
|
33
|
+
:conditions => ["tr8n_translation_key_locks.language_id = ? and tr8n_translation_key_locks.locked = ? and tr8n_translation_key_locks.created_at >= ? and tr8n_translation_key_locks.created_at < ?", language_id, true, metric_date, metric_date + 1.day],
|
|
34
|
+
:joins => "join tr8n_translation_key_locks on tr8n_translation_keys.id = tr8n_translation_key_locks.translation_key_id")
|
|
35
|
+
self.translated_key_count = Tr8n::TranslationKey.count("distinct tr8n_translation_keys.id",
|
|
36
|
+
:conditions => ["tr8n_translations.language_id = ? and tr8n_translations.created_at >= ? and tr8n_translations.created_at < ?", language_id, metric_date, metric_date + 1.day],
|
|
37
|
+
:joins => "join tr8n_translations on tr8n_translation_keys.id = tr8n_translations.translation_key_id")
|
|
38
|
+
|
|
39
|
+
save
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
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::DateRule < Tr8n::LanguageRule
|
|
25
|
+
|
|
26
|
+
def self.description
|
|
27
|
+
"token object may be a date, which"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.dependency
|
|
31
|
+
"date"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.suffixes
|
|
35
|
+
Tr8n::Config.rules_engine[:date_rule][:token_suffixes]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.default_rules_for(language = Tr8n::Config.current_language)
|
|
39
|
+
Tr8n::Config.default_date_rules(language.locale)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.operator_options
|
|
43
|
+
[["is in the", "is_in"]]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def self.date_options
|
|
47
|
+
[["past", "past"], ["present", "present"], ["future", "future"]]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def self.date_token_value(token)
|
|
51
|
+
return nil unless token and token.respond_to?(Tr8n::Config.rules_engine[:date_rule][:object_method])
|
|
52
|
+
token.send(Tr8n::Config.rules_engine[:date_rule][:object_method])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def date_token_value(token)
|
|
56
|
+
self.class.date_token_value(token)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# params: [object, past, present, future]
|
|
60
|
+
# form: {date | did, is doing, will do}
|
|
61
|
+
def self.transform(*args)
|
|
62
|
+
if args.size != 4
|
|
63
|
+
raise Tr8n::Exception.new("Invalid transform arguments")
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
object = args[0]
|
|
67
|
+
object_date = date_token_value(object)
|
|
68
|
+
|
|
69
|
+
unless object_date
|
|
70
|
+
raise Tr8n::Exception.new("Token #{object.class.name} does not respond to #{Tr8n::Config.rules_engine[:date_rule][:object_method]}")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
current_date = Date.today
|
|
74
|
+
|
|
75
|
+
if object_date < current_date
|
|
76
|
+
return args[1]
|
|
77
|
+
elsif object_date > current_date
|
|
78
|
+
return args[3]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
args[2]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# params: [past, present, future]
|
|
85
|
+
# form: {date | did, is doing, will do}
|
|
86
|
+
def self.default_transform(*args)
|
|
87
|
+
if args.size != 3
|
|
88
|
+
raise Tr8n::Exception.new("Invalid transform arguments for date token")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
args[1]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def evaluate(token)
|
|
95
|
+
# for now - until we cleanup tokens
|
|
96
|
+
return false unless token.is_a?(Date) or token.is_a?(Time)
|
|
97
|
+
|
|
98
|
+
token_date = date_token_value(token)
|
|
99
|
+
return false unless token_date
|
|
100
|
+
|
|
101
|
+
current_date = Date.today
|
|
102
|
+
|
|
103
|
+
case definition[:value]
|
|
104
|
+
when "past" then
|
|
105
|
+
return true if token_date < current_date
|
|
106
|
+
when "present" then
|
|
107
|
+
return true if token_date == current_date
|
|
108
|
+
when "future" then
|
|
109
|
+
return true if token_date > current_date
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
false
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# used to describe a context of a given translation
|
|
116
|
+
def description
|
|
117
|
+
if definition and self.class.date_options.collect{|o| o.last}.include?(definition[:value])
|
|
118
|
+
return "is in the #{definition[:value]}"
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
"has an unknown rule"
|
|
122
|
+
end
|
|
123
|
+
end
|