tr8n_client_sdk 1.0.0
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/MIT-LICENSE +22 -0
- data/README.rdoc +3 -0
- data/Rakefile +38 -0
- data/app/assets/images/tr8n/tr8n_logo.png +0 -0
- data/app/views/tr8n_client_sdk/tags/_language_strip.html.erb +20 -0
- data/app/views/tr8n_client_sdk/tags/_powered_by_tr8n.html.erb +6 -0
- data/app/views/tr8n_client_sdk/tags/_scripts.html.erb +20 -0
- data/config/routes.rb +2 -0
- data/lib/generators/tr8n_client_sdk/templates/config/tr8n/config.yml +53 -0
- data/lib/generators/tr8n_client_sdk/templates/config/tr8n/tokens/data.yml +45 -0
- data/lib/generators/tr8n_client_sdk/templates/config/tr8n/tokens/decorations.yml +37 -0
- data/lib/generators/tr8n_client_sdk/tr8n_client_sdk_generator.rb +37 -0
- data/lib/tasks/tr8n_client_sdk_tasks.rake +30 -0
- data/lib/tr8n_client_sdk.rb +28 -0
- data/lib/tr8n_client_sdk/config.rb +197 -0
- data/lib/tr8n_client_sdk/engine.rb +31 -0
- data/lib/tr8n_client_sdk/extensions/action_common_methods.rb +122 -0
- data/lib/tr8n_client_sdk/extensions/action_controller_extension.rb +123 -0
- data/lib/tr8n_client_sdk/extensions/action_view_extension.rb +218 -0
- data/lib/tr8n_client_sdk/railtie.rb +54 -0
- data/lib/tr8n_client_sdk/version.rb +27 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/images/bg-pattern.png +0 -0
- data/test/dummy/app/assets/images/facebook.png +0 -0
- data/test/dummy/app/assets/images/github.png +0 -0
- data/test/dummy/app/assets/images/glyphicons-halflings-white.png +0 -0
- data/test/dummy/app/assets/images/glyphicons-halflings.png +0 -0
- data/test/dummy/app/assets/images/how_it_works_1.gif +0 -0
- data/test/dummy/app/assets/images/how_it_works_2.gif +0 -0
- data/test/dummy/app/assets/images/how_it_works_3.gif +0 -0
- data/test/dummy/app/assets/images/hr.png +0 -0
- data/test/dummy/app/assets/images/linkedin.png +0 -0
- data/test/dummy/app/assets/images/silhouette.gif +0 -0
- data/test/dummy/app/assets/images/twitter.png +0 -0
- data/test/dummy/app/assets/images/wordpress.png +0 -0
- data/test/dummy/app/assets/images/youtube.png +0 -0
- data/test/dummy/app/assets/javascripts/ace/ace.js +11 -0
- data/test/dummy/app/assets/javascripts/ace/ext-static_highlight.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/ext-textarea.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/keybinding-emacs.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/keybinding-vim.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-abap.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-asciidoc.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-c9search.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-c_cpp.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-clojure.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-coffee.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-coldfusion.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-csharp.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-css.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-dart.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-diff.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-dot.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-glsl.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-golang.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-groovy.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-haml.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-haxe.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-html.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-jade.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-java.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-javascript.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-json.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-jsp.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-jsx.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-latex.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-less.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-liquid.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-lisp.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-lua.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-luapage.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-lucene.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-makefile.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-markdown.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-objectivec.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-ocaml.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-perl.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-pgsql.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-php.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-powershell.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-python.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-r.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-rdoc.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-rhtml.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-ruby.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-scad.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-scala.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-scss.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-sh.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-sql.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-stylus.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-svg.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-tcl.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-tex.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-text.js +0 -0
- data/test/dummy/app/assets/javascripts/ace/mode-textile.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-typescript.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-xml.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-xquery.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/mode-yaml.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-ambiance.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-chaos.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-chrome.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-clouds.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-clouds_midnight.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-cobalt.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-crimson_editor.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-dawn.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-dreamweaver.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-eclipse.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-github.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-idle_fingers.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-kr.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-merbivore.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-merbivore_soft.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-mono_industrial.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-monokai.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-pastel_on_dark.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-solarized_dark.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-solarized_light.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-textmate.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-tomorrow.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-tomorrow_night.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-tomorrow_night_blue.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-tomorrow_night_bright.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-tomorrow_night_eighties.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-twilight.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-vibrant_ink.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/theme-xcode.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/worker-coffee.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/worker-css.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/worker-javascript.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/worker-json.js +1 -0
- data/test/dummy/app/assets/javascripts/ace/worker-xquery.js +1 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/javascripts/bootstrap.js +2291 -0
- data/test/dummy/app/assets/javascripts/bootstrap.min.js +7 -0
- data/test/dummy/app/assets/javascripts/jquery-ace.js +195 -0
- data/test/dummy/app/assets/javascripts/jquery-ui-1.10.3.custom.min.js +7 -0
- data/test/dummy/app/assets/javascripts/jquery.tocify.min.js +4 -0
- data/test/dummy/app/assets/javascripts/jquery191.js +16 -0
- data/test/dummy/app/assets/javascripts/prism.js +20 -0
- data/test/dummy/app/assets/javascripts/prism_rails.js +49 -0
- data/test/dummy/app/assets/javascripts/sh.js +573 -0
- data/test/dummy/app/assets/stylesheets/application.css +8 -0
- data/test/dummy/app/assets/stylesheets/bootstrap/bootstrap.css +6315 -0
- data/test/dummy/app/assets/stylesheets/bootstrap/bootstrap.min.css +874 -0
- data/test/dummy/app/assets/stylesheets/bootstrap/bootstrap_and_overrides.css.scss +16 -0
- data/test/dummy/app/assets/stylesheets/jquery.tocify.css +62 -0
- data/test/dummy/app/assets/stylesheets/prism.css +108 -0
- data/test/dummy/app/assets/stylesheets/prism_rails.css.scss +42 -0
- data/test/dummy/app/assets/stylesheets/sh.css +193 -0
- data/test/dummy/app/controllers/application_controller.rb +82 -0
- data/test/dummy/app/controllers/docs_controller.rb +42 -0
- data/test/dummy/app/controllers/home_controller.rb +29 -0
- data/test/dummy/app/controllers/login_controller.rb +55 -0
- data/test/dummy/app/controllers/signup_controller.rb +58 -0
- data/test/dummy/app/controllers/welcome_controller.rb +30 -0
- data/test/dummy/app/helpers/application_helper.rb +26 -0
- data/test/dummy/app/mailers/request_mailer.rb +38 -0
- data/test/dummy/app/models/user.rb +48 -0
- data/test/dummy/app/views/docs/index.html.erb +591 -0
- data/test/dummy/app/views/docs/installation.html.erb +59 -0
- data/test/dummy/app/views/docs/test.html.erb +17 -0
- data/test/dummy/app/views/docs/tml.html.erb +176 -0
- data/test/dummy/app/views/docs/tml_content.html.erb +33 -0
- data/test/dummy/app/views/home/index.html.erb +107 -0
- data/test/dummy/app/views/layouts/_flashes.html.erb +35 -0
- data/test/dummy/app/views/layouts/_footer.html.erb +31 -0
- data/test/dummy/app/views/layouts/_head.html.erb +8 -0
- data/test/dummy/app/views/layouts/_header.html.erb +70 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/login/_common.html.erb +29 -0
- data/test/dummy/app/views/login/cookies.html.erb +20 -0
- data/test/dummy/app/views/login/index.html.erb +1 -0
- data/test/dummy/app/views/login/out.html.erb +1 -0
- data/test/dummy/app/views/signup/index.html.erb +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mail.rb +14 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/config/tr8n/config.yml +53 -0
- data/test/dummy/config/tr8n/tokens/data.yml +45 -0
- data/test/dummy/config/tr8n/tokens/decorations.yml +37 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130506202619_create_users.rb +16 -0
- data/test/dummy/db/schema.rb +29 -0
- data/test/dummy/log/development.log +40036 -0
- data/test/dummy/log/tr8n.log +14602 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/spec/models/request_spec.rb +5 -0
- data/test/dummy/spec/models/user_spec.rb +5 -0
- data/test/dummy/tmp/cache/assets/BCA/680/sprockets%2F0e766e5046b2556242937265334a7776 +0 -0
- data/test/dummy/tmp/cache/assets/C41/5A0/sprockets%2Ff3979161c897640872293fb74f7e4185 +0 -0
- data/test/dummy/tmp/cache/assets/C69/980/sprockets%2F1289412d200b47c7f5ba1714da031188 +0 -0
- data/test/dummy/tmp/cache/assets/C80/840/sprockets%2F562c2d168da585f80579347d10790a0a +0 -0
- data/test/dummy/tmp/cache/assets/C85/8C0/sprockets%2F262c6124c54467ed84e71473a5748a2f +0 -0
- data/test/dummy/tmp/cache/assets/C9B/B70/sprockets%2F3c5f068b5a07f9215020042ed660bb45 +0 -0
- data/test/dummy/tmp/cache/assets/CAC/8A0/sprockets%2Fb3da0b5a24a9277687d1b973d1638126 +0 -0
- data/test/dummy/tmp/cache/assets/CB0/D20/sprockets%2F0850d836310c2fc600217ce3f894f9c8 +0 -0
- data/test/dummy/tmp/cache/assets/CB1/E50/sprockets%2Fea7a0c10450c627f752b87495d915b66 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/A00/sprockets%2F82c0bd0c273938e78e80698057bf165e +0 -0
- data/test/dummy/tmp/cache/assets/CC3/730/sprockets%2F730877507dec32fd7d2e038899bb8067 +0 -0
- data/test/dummy/tmp/cache/assets/CC6/350/sprockets%2F7486d25d54ef6d9548205d5a17ff3468 +0 -0
- data/test/dummy/tmp/cache/assets/CC7/620/sprockets%2F395359137b16e965efa7fa58db855904 +0 -0
- data/test/dummy/tmp/cache/assets/CC7/A90/sprockets%2F77713cc98a179981d615f84f952add24 +0 -0
- data/test/dummy/tmp/cache/assets/CD5/2C0/sprockets%2F166c056119ebdfb8b7104c97b424b423 +0 -0
- data/test/dummy/tmp/cache/assets/CD6/450/sprockets%2Ff0c4fb28a62f912b5542965358a10a1f +0 -0
- data/test/dummy/tmp/cache/assets/CD6/C30/sprockets%2Fe15182011d74255aa67fde5a783dd612 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/F00/sprockets%2F2344b925523c2c28a3fd1e73ad5f9181 +0 -0
- data/test/dummy/tmp/cache/assets/CD9/BA0/sprockets%2Fb9fa8aa2057e7d8702f10317694a8c10 +0 -0
- data/test/dummy/tmp/cache/assets/CE2/720/sprockets%2F922b15b49871931e5df1d0a2be4826f8 +0 -0
- data/test/dummy/tmp/cache/assets/CE3/EB0/sprockets%2F28ee30e42c7c583083e76a377df3035d +0 -0
- data/test/dummy/tmp/cache/assets/CE5/650/sprockets%2F8ab512c9b33ac90e699b73469d71f061 +0 -0
- data/test/dummy/tmp/cache/assets/CE8/2F0/sprockets%2Fb74ee6e80ba2911167d148d791d6728c +0 -0
- data/test/dummy/tmp/cache/assets/CEE/D60/sprockets%2F7b699b03f091fe228759da88a323a56f +0 -0
- data/test/dummy/tmp/cache/assets/CF0/450/sprockets%2F65704938b67ef6b06e386cea3c1848b6 +0 -0
- data/test/dummy/tmp/cache/assets/CF1/5A0/sprockets%2Fec49552e4a6b67bee359e0485610d887 +0 -0
- data/test/dummy/tmp/cache/assets/CFC/880/sprockets%2Fd89c211d7a3dc2a94a7625d7155000ab +0 -0
- data/test/dummy/tmp/cache/assets/D05/210/sprockets%2F5d0d1d45d694d6d4f803a9a1340b741c +0 -0
- data/test/dummy/tmp/cache/assets/D05/820/sprockets%2Fee427231dd340c1b50573f187a8a6d5d +0 -0
- data/test/dummy/tmp/cache/assets/D09/6F0/sprockets%2F0f69fe87b4b574153bdc60711a6ca208 +0 -0
- data/test/dummy/tmp/cache/assets/D0A/C20/sprockets%2Fd177dbfcd8235d07a0072c4d9c307385 +0 -0
- data/test/dummy/tmp/cache/assets/D0C/820/sprockets%2F1002e68d7cf06571cb63a864f93bb4e3 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/A30/sprockets%2F71398e105f60c431f86d78e3abbbf125 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/FF0/sprockets%2F2c4cc11f6c24fbb41d97713864854d1f +0 -0
- data/test/dummy/tmp/cache/assets/D18/E00/sprockets%2Ff017e80af40be5c829882bd1885a38f4 +0 -0
- data/test/dummy/tmp/cache/assets/D19/120/sprockets%2F69f0907662f738cd217edca24ef2328d +0 -0
- data/test/dummy/tmp/cache/assets/D25/FD0/sprockets%2F03006f6bba722ebc14ceac8221b81917 +0 -0
- data/test/dummy/tmp/cache/assets/D26/7C0/sprockets%2F771cba4a2e4f22141377c4eccc1065c0 +0 -0
- data/test/dummy/tmp/cache/assets/D28/B20/sprockets%2Fbd19c0bc42912a8ba7c5c3b100f71592 +0 -0
- data/test/dummy/tmp/cache/assets/D29/280/sprockets%2F04fd073ef39e04ced71111a204cb70e6 +0 -0
- data/test/dummy/tmp/cache/assets/D29/320/sprockets%2Feb3792401fd26ebf610c8531b0a4bd32 +0 -0
- data/test/dummy/tmp/cache/assets/D29/AF0/sprockets%2F841d8c0c4ba32a5e25aa41b7069ba581 +0 -0
- data/test/dummy/tmp/cache/assets/D32/4F0/sprockets%2Fb8023435d8d01feca8fd3a1ce9144181 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/DB0/sprockets%2Fe848eed2f10d359a60040b50d486b3fd +0 -0
- data/test/dummy/tmp/cache/assets/D39/6E0/sprockets%2F4d3170e44fdaa2f62cc266b62e5925e4 +0 -0
- data/test/dummy/tmp/cache/assets/D3C/2C0/sprockets%2F9c4d26aabdb46cc90d0228c79344950e +0 -0
- data/test/dummy/tmp/cache/assets/D3D/2D0/sprockets%2Fc83c38e1374d350196211ce9ffed3aa6 +0 -0
- data/test/dummy/tmp/cache/assets/D3D/970/sprockets%2F23fb0067086af38f593481abd034deff +0 -0
- data/test/dummy/tmp/cache/assets/D41/C20/sprockets%2F5b768ca318275843ae6b901bb9cca29e +0 -0
- data/test/dummy/tmp/cache/assets/D42/030/sprockets%2Ff991fbde306579de4c94d611ced13023 +0 -0
- data/test/dummy/tmp/cache/assets/D47/A20/sprockets%2F9f6654abeaa85f117a98806392ac2a8d +0 -0
- data/test/dummy/tmp/cache/assets/D47/D00/sprockets%2Fd76fe4489f3b7f2cd62450204cef631f +0 -0
- data/test/dummy/tmp/cache/assets/D4A/640/sprockets%2F94ec7bb9872d4b005d267d56cb80f7e4 +0 -0
- data/test/dummy/tmp/cache/assets/D4C/020/sprockets%2F2c26fac647b394d5f49b2743950aefe9 +0 -0
- data/test/dummy/tmp/cache/assets/D4D/A20/sprockets%2F0de50df58d85f5cce135f460979bd472 +0 -0
- data/test/dummy/tmp/cache/assets/D4D/E30/sprockets%2F828b744b9a72d6b05ace77264f878bdb +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D53/1E0/sprockets%2F6d4776ffd4fc7486550b6508cb2dd57e +0 -0
- data/test/dummy/tmp/cache/assets/D5A/B70/sprockets%2F7b76786736bb5e9eeb4887dd32c83ec2 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D62/720/sprockets%2F34a95b2bb07a4fbd408c81f1c37bd860 +0 -0
- data/test/dummy/tmp/cache/assets/D69/B50/sprockets%2F1c7aa58ab12825ccfb465ca5e7c77551 +0 -0
- data/test/dummy/tmp/cache/assets/D6F/220/sprockets%2F99d4cd656c271484bee1a14ac84e5ad2 +0 -0
- data/test/dummy/tmp/cache/assets/D74/280/sprockets%2F049b078c38d43fbe7e6b1eb49da1b775 +0 -0
- data/test/dummy/tmp/cache/assets/D74/9A0/sprockets%2F049cf32cc869e7138b76f1bb04ae78ad +0 -0
- data/test/dummy/tmp/cache/assets/D77/770/sprockets%2F67b869074d0a5b5bb8698e55ccca47aa +0 -0
- data/test/dummy/tmp/cache/assets/D7A/290/sprockets%2F5acdbbb05bd53866c8225e95f8e805e8 +0 -0
- data/test/dummy/tmp/cache/assets/D7A/2A0/sprockets%2F91a461699d36fdd71c4cec0a8d737cf4 +0 -0
- data/test/dummy/tmp/cache/assets/D7C/5B0/sprockets%2F2b864c6eb9b8d679b2716db1a1e93c8f +0 -0
- data/test/dummy/tmp/cache/assets/D82/930/sprockets%2Fecdc4c7caa1aa683b13d14a91234b452 +0 -0
- data/test/dummy/tmp/cache/assets/D8D/610/sprockets%2Ffb7e1b81f737cb510ac8166a241bbc4c +0 -0
- data/test/dummy/tmp/cache/assets/D91/080/sprockets%2Fbcca522c6302f184f12fe0e8a7d7e71a +0 -0
- data/test/dummy/tmp/cache/assets/D91/2B0/sprockets%2F354460cd2db93ca02614a4bb76ffde3e +0 -0
- data/test/dummy/tmp/cache/assets/D96/DA0/sprockets%2F55af2375310fff6b9706cbacfb2ec540 +0 -0
- data/test/dummy/tmp/cache/assets/D9E/F30/sprockets%2Fc32ceef2bde9f93b4c5b866c8200371c +0 -0
- data/test/dummy/tmp/cache/assets/D9F/300/sprockets%2Fc13fc73ceafa45876a901b3e775b83ae +0 -0
- data/test/dummy/tmp/cache/assets/D9F/390/sprockets%2Fe2fc3cc13d4d3677be6574e0fd2732cf +0 -0
- data/test/dummy/tmp/cache/assets/DAA/A50/sprockets%2F231c56d70690f8b4f8f6fea2cea9d39b +0 -0
- data/test/dummy/tmp/cache/assets/DB5/350/sprockets%2F3b5ebcf21def6fff9868a18e239495f1 +0 -0
- data/test/dummy/tmp/cache/assets/DB9/150/sprockets%2Fdaff6d12c8afc96d0c91d77e91d79966 +0 -0
- data/test/dummy/tmp/cache/assets/DC9/DB0/sprockets%2F43a2aed943cbb05dcc84468c73ddea55 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/310/sprockets%2F2f221a6c5ffcaf07ef30f4ee9a793b44 +0 -0
- data/test/dummy/tmp/cache/assets/DD2/750/sprockets%2Ff70dee8c3d675153ad76abe3f730dc4f +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DFF/270/sprockets%2Fb84f2daecc65ed711132bff2d8f5fe08 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E13/010/sprockets%2Feecfc58398a4d26289a5e0fe9ecd09ec +0 -0
- data/test/dummy/tmp/cache/assets/E23/880/sprockets%2F436adfe0b6333bf5af1eaaf3ea4e919b +0 -0
- data/test/dummy/tmp/cache/assets/E25/4F0/sprockets%2Fa24db6eec8d3a80f7fe3a50b4cdd243f +0 -0
- data/test/dummy/tmp/cache/assets/E2C/210/sprockets%2Fdd7b14fc1e5b2b7dcdac381cc7f9c267 +0 -0
- data/test/dummy/tmp/cache/assets/E3A/950/sprockets%2F8a6c7c212feec8ae888ad7e7fa50a3ff +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_media.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_responsive-1200px-min.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_responsive-767px-max.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_responsive-768px-979px.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_responsive-navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/076477e2114ee474e8df1a7a673f9162f60724cc/responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2a9f8d893763e4aeafa77aedd38023c2d92257b4/bootstrap-responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/2bca5584fcb1177ad07e4f21325c39e4eda592bf/bootstrap_and_overrides.css.scssc +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/tr8n_client_sdk_test.rb +7 -0
- metadata +771 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2013 Michael Berkovich, tr8nhub.com
|
|
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 Tr8nClientSdk
|
|
25
|
+
class Engine < ::Rails::Engine
|
|
26
|
+
isolate_namespace Tr8nClientSdk
|
|
27
|
+
config.generators do |g|
|
|
28
|
+
g.test_framework :rspec, :view_specs => false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
|
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 Tr8nClientSdk
|
|
25
|
+
module ActionCommonMethods
|
|
26
|
+
############################################################
|
|
27
|
+
# There are three ways to call the tr method
|
|
28
|
+
#
|
|
29
|
+
# tr(label, desc = "", tokens = {}, options = {})
|
|
30
|
+
# or
|
|
31
|
+
# tr(label, tokens = {}, options = {})
|
|
32
|
+
# or
|
|
33
|
+
# tr(:label => label, :description => "", :tokens => {}, :options => {})
|
|
34
|
+
############################################################
|
|
35
|
+
def tr(label, description = "", tokens = {}, options = {})
|
|
36
|
+
return label if label.tr8n_translated?
|
|
37
|
+
|
|
38
|
+
params = Tr8n::Utils.normalize_tr_params(label, description, tokens, options)
|
|
39
|
+
params[:options][:caller] = caller
|
|
40
|
+
|
|
41
|
+
if request
|
|
42
|
+
params[:options][:url] = request.url
|
|
43
|
+
params[:options][:host] = request.env['HTTP_HOST']
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if Tr8n.config.disabled?
|
|
47
|
+
return Tr8n::TranslationKey.substitute_tokens(params[:label], params[:tokens], params[:options]).tr8n_translated.html_safe
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Translate individual sentences
|
|
51
|
+
if params[:options][:split]
|
|
52
|
+
text = params[:label]
|
|
53
|
+
sentences = Tr8n::Utils.split_by_sentence(text)
|
|
54
|
+
sentences.each do |sentence|
|
|
55
|
+
text = text.gsub(sentence, Tr8n.config.current_language.translate(sentence, params[:description], params[:tokens], params[:options]))
|
|
56
|
+
end
|
|
57
|
+
return text.tr8n_translated.html_safe
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
Tr8n.config.current_language.translate(params).tr8n_translated.html_safe
|
|
61
|
+
rescue Tr8n::Exception => ex
|
|
62
|
+
Tr8n::Logger.error("ERROR: #{label}")
|
|
63
|
+
Tr8n::Logger.error(ex.message + "\n=> " + ex.backtrace.join("\n=> "))
|
|
64
|
+
label
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# for translating labels
|
|
68
|
+
def trl(label, description = "", tokens = {}, options = {})
|
|
69
|
+
params = Tr8n::Utils.normalize_tr_params(label, description, tokens, options)
|
|
70
|
+
params[:options][:skip_decorations] = true
|
|
71
|
+
tr(params)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# flash notice
|
|
75
|
+
def trfn(label, desc = "", tokens = {}, options = {})
|
|
76
|
+
flash[:trfn] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# flash error
|
|
80
|
+
def trfe(label, desc = "", tokens = {}, options = {})
|
|
81
|
+
flash[:trfe] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# flash warning
|
|
85
|
+
def trfw(label, desc = "", tokens = {}, options = {})
|
|
86
|
+
flash[:trfw] = tr(Tr8n::Utils.normalize_tr_params(label, desc, tokens, options))
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
######################################################################
|
|
90
|
+
## Common methods - wrappers
|
|
91
|
+
######################################################################
|
|
92
|
+
|
|
93
|
+
def tr8n_application
|
|
94
|
+
Tr8n.config.application
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def tr8n_current_user
|
|
98
|
+
Tr8n.config.current_user
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def tr8n_current_language
|
|
102
|
+
Tr8n.config.current_language
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def tr8n_default_language
|
|
106
|
+
Tr8n.config.default_language
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def tr8n_current_translator
|
|
110
|
+
Tr8n.config.current_translator
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def tr8n_current_user_is_guest?
|
|
114
|
+
Tr8n.config.current_user_is_guest?
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def tr8n_current_user_is_translator?
|
|
118
|
+
not Tr8n.config.current_translator.nil?
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2013 Michael Berkovich, tr8nhub.com
|
|
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 Tr8nClientSdk
|
|
25
|
+
module ActionControllerExtension
|
|
26
|
+
|
|
27
|
+
def self.included(base)
|
|
28
|
+
base.send(:include, Tr8nClientSdk::ActionCommonMethods)
|
|
29
|
+
base.send(:include, InstanceMethods)
|
|
30
|
+
base.before_filter :tr8n_init_client_sdk
|
|
31
|
+
base.after_filter :tr8n_reset_client_sdk
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
module InstanceMethods
|
|
35
|
+
|
|
36
|
+
def tr8n_browser_accepted_locales
|
|
37
|
+
@tr8n_browser_accepted_locales ||= Tr8n::Utils.browser_accepted_locales(request)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def tr8n_user_preferred_locale
|
|
41
|
+
tr8n_browser_accepted_locales.each do |locale|
|
|
42
|
+
next unless Tr8n.config.application.locales.include?(locale)
|
|
43
|
+
return locale
|
|
44
|
+
end
|
|
45
|
+
Tr8n.config.default_locale
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Overwrite this method in a controller to assign a custom source for all views
|
|
49
|
+
def tr8n_source
|
|
50
|
+
"/#{controller_name}/#{action_name}"
|
|
51
|
+
rescue
|
|
52
|
+
self.class.name
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Overwrite this method in a controller to assign a custom component for all views
|
|
56
|
+
def tr8n_component
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def tr8n_init_current_locale
|
|
61
|
+
self.send(Tr8n.config.current_locale_method)
|
|
62
|
+
rescue
|
|
63
|
+
# fallback to the default session based locale implementation
|
|
64
|
+
# choose the first language from the accepted languages header
|
|
65
|
+
session[:locale] = tr8n_user_preferred_locale unless session[:locale]
|
|
66
|
+
session[:locale] = params[:locale] if params[:locale]
|
|
67
|
+
session[:locale]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def tr8n_init_current_user
|
|
71
|
+
self.send(Tr8n.config.current_user_method)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def tr8n_init_client_sdk
|
|
75
|
+
return unless Tr8n.config.enabled?
|
|
76
|
+
|
|
77
|
+
Tr8n.logger.info("Initializing request...")
|
|
78
|
+
@tr8n_started_at = Time.now
|
|
79
|
+
|
|
80
|
+
Tr8n.config.init_application
|
|
81
|
+
tr8n_application.update_cache_version
|
|
82
|
+
|
|
83
|
+
translator = nil
|
|
84
|
+
|
|
85
|
+
cookie_name = "tr8n_#{tr8n_application.key}"
|
|
86
|
+
if request.cookies[cookie_name]
|
|
87
|
+
Tr8n.logger.info("Cookie exists:")
|
|
88
|
+
cookie_params = Tr8n::Utils.decode_and_verify_params(request.cookies[cookie_name], Tr8n.config.app_secret)
|
|
89
|
+
Tr8n.logger.info(cookie_params.inspect)
|
|
90
|
+
locale = cookie_params["locale"]
|
|
91
|
+
translator = Tr8n::Translator.new(cookie_params["translator"].merge(:application => tr8n_application)) unless cookie_params["translator"].nil?
|
|
92
|
+
else
|
|
93
|
+
Tr8n.logger.info("Cookie does not exist")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
locale ||= tr8n_init_current_locale
|
|
97
|
+
user = tr8n_init_current_user
|
|
98
|
+
|
|
99
|
+
Tr8n.config.init_request(user, translator, locale, tr8n_source, tr8n_component)
|
|
100
|
+
|
|
101
|
+
# register component and verify that the current user is authorized to view it
|
|
102
|
+
#unless Tr8n.config.current_user_is_authorized_to_view_component?
|
|
103
|
+
# trfe("You are not authorized to view this component")
|
|
104
|
+
# return redirect_to(Tr8n.config.default_url)
|
|
105
|
+
#end
|
|
106
|
+
#unless Tr8n.config.current_user_is_authorized_to_view_language?
|
|
107
|
+
# Tr8n.config.set_language(Tr8n.config.default_language)
|
|
108
|
+
#end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def tr8n_reset_client_sdk
|
|
112
|
+
@tr8n_finished_at = Time.now
|
|
113
|
+
|
|
114
|
+
Tr8n.logger.info("Resetting request...")
|
|
115
|
+
tr8n_application.submit_missing_keys
|
|
116
|
+
Tr8n.config.reset_request
|
|
117
|
+
|
|
118
|
+
Tr8n.logger.info("Request took #{@tr8n_finished_at - @tr8n_started_at} mls")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2010-2013 Michael Berkovich, tr8nhub.com
|
|
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 Tr8nClientSdk
|
|
25
|
+
module ActionViewExtension
|
|
26
|
+
extend ActiveSupport::Concern
|
|
27
|
+
|
|
28
|
+
def tr8n_options_for_select(options, selected = nil, description = nil, lang = Tr8n.config.current_language)
|
|
29
|
+
options_for_select(options.tro(description), selected)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def tr8n_phrases_link_tag(search = "", phrase_type = :without, phrase_status = :any)
|
|
33
|
+
return unless Tr8n.config.enabled?
|
|
34
|
+
return if Tr8n.config.current_language.default?
|
|
35
|
+
return unless Tr8n.config.current_translator.inline?
|
|
36
|
+
|
|
37
|
+
link_to(image_tag(Tr8n.config.url_for("/assets/tr8n/translate_icn.gif"), :style => "vertical-align:middle; border: 0px;", :title => search),
|
|
38
|
+
Tr8n.config.url_for("/tr8n/app/phrases/index?search=#{search}")).html_safe
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def tr8n_language_flag_tag(lang = Tr8n.config.current_language, opts = {})
|
|
42
|
+
return "" unless Tr8n.config.application.feature_enabled?(:language_flags)
|
|
43
|
+
html = image_tag(lang.flag_url, :style => "vertical-align:middle;", :title => lang.native_name)
|
|
44
|
+
html << " ".html_safe
|
|
45
|
+
html.html_safe
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def tr8n_language_name_tag(lang = Tr8n.config.current_language, opts = {})
|
|
49
|
+
show_flag = opts[:flag].nil? ? true : opts[:flag]
|
|
50
|
+
name_type = opts[:name].nil? ? :full : opts[:name] # :full, :native, :english, :locale
|
|
51
|
+
linked = opts[:linked].nil? ? true : opts[:linked]
|
|
52
|
+
|
|
53
|
+
html = "<span style='white-space: nowrap'>"
|
|
54
|
+
html << tr8n_language_flag_tag(lang, opts) if show_flag
|
|
55
|
+
html << "<span dir='ltr'>"
|
|
56
|
+
|
|
57
|
+
name = case name_type
|
|
58
|
+
when :native then lang.native_name
|
|
59
|
+
when :english then lang.english_name
|
|
60
|
+
when :locale then lang.locale
|
|
61
|
+
else lang.full_name
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# if linked
|
|
65
|
+
# # Todo: use language selector
|
|
66
|
+
## html << link_to(name.html_safe, "/tr8n/language/switch?locale=#{lang.locale}&language_action=switch_language&source_url=#{CGI.escape(opts[:source_url]||'')}")
|
|
67
|
+
# else
|
|
68
|
+
html << name
|
|
69
|
+
#end
|
|
70
|
+
|
|
71
|
+
html << "</span></span>"
|
|
72
|
+
html.html_safe
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def tr8n_language_strip_tag(opts = {})
|
|
76
|
+
opts[:flag] = opts[:flag].nil? ? false : opts[:flag]
|
|
77
|
+
opts[:name] = opts[:name].nil? ? :native : opts[:name]
|
|
78
|
+
opts[:linked] = opts[:linked].nil? ? true : opts[:linked]
|
|
79
|
+
opts[:javascript] = opts[:javascript].nil? ? false : opts[:javascript]
|
|
80
|
+
|
|
81
|
+
render(:partial => '/tr8n_client_sdk/tags/language_strip', :locals => {:opts => opts})
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def tr8n_flashes_tag(opts = {})
|
|
85
|
+
render(:partial => '/tr8n_client_sdk/tags/flashes', :locals => {:opts => opts})
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def tr8n_scripts_tag(opts = {})
|
|
89
|
+
render(:partial => '/tr8n_client_sdk/tags/scripts', :locals => {:opts => opts})
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def tr8n_select_month(date, options = {}, html_options = {})
|
|
93
|
+
month_names = options[:use_short_month] ? Tr8n.config.default_abbr_month_names : Tr8n.config.default_month_names
|
|
94
|
+
select_month(date, options.merge(
|
|
95
|
+
:use_month_names => month_names.collect{|month_name| Tr8n::Language.translate(month_name, options[:description] || "Month name")}
|
|
96
|
+
), html_options)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def tr8n_with_options_tag(opts, &block)
|
|
100
|
+
if Tr8n.config.disabled?
|
|
101
|
+
return capture(&block) if block_given?
|
|
102
|
+
return ""
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
Thread.current[:block_options] ||= []
|
|
106
|
+
Thread.current[:block_options].push(opts)
|
|
107
|
+
|
|
108
|
+
#component = Tr8n.config.current_component_from_block_options
|
|
109
|
+
#if component
|
|
110
|
+
# source = Tr8n.config.current_source_from_block_options
|
|
111
|
+
# unless source.nil?
|
|
112
|
+
# Tr8n::ComponentSource.find_or_create(component, source)
|
|
113
|
+
# end
|
|
114
|
+
#end
|
|
115
|
+
#
|
|
116
|
+
#if Tr8n.config.current_user_is_authorized_to_view_component?(component)
|
|
117
|
+
# selected_language = Tr8n.config.current_language
|
|
118
|
+
#
|
|
119
|
+
# unless Tr8n.config.current_user_is_authorized_to_view_language?(component, selected_language)
|
|
120
|
+
# Tr8n.config.set_language(Tr8n.config.default_language)
|
|
121
|
+
# end
|
|
122
|
+
#
|
|
123
|
+
# if block_given?
|
|
124
|
+
# ret = capture(&block)
|
|
125
|
+
# end
|
|
126
|
+
#
|
|
127
|
+
# Tr8n.config.current_language = selected_language
|
|
128
|
+
#else
|
|
129
|
+
# ret = ""
|
|
130
|
+
#end
|
|
131
|
+
|
|
132
|
+
if block_given?
|
|
133
|
+
ret = capture(&block)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
Thread.current[:block_options].pop
|
|
137
|
+
ret
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def tr8n_content_for_locales_tag(opts = {}, &block)
|
|
141
|
+
locale = Tr8n.config.current_language.locale
|
|
142
|
+
|
|
143
|
+
if opts[:only]
|
|
144
|
+
return unless opts[:only].include?(locale)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
if opts[:except]
|
|
148
|
+
return if opts[:except].include?(locale)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
if block_given?
|
|
152
|
+
ret = capture(&block)
|
|
153
|
+
end
|
|
154
|
+
ret
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def tr8n_content_for_countries_tag(opts = {}, &block)
|
|
158
|
+
country = Tr8n.config.country_from_ip(tr8n_request_remote_ip)
|
|
159
|
+
|
|
160
|
+
if opts[:only]
|
|
161
|
+
return unless opts[:only].include?(country)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
if opts[:except]
|
|
165
|
+
return if opts[:except].include?(country)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
if block_given?
|
|
169
|
+
ret = capture(&block)
|
|
170
|
+
end
|
|
171
|
+
ret
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def tr8n_when_string_tag(time, opts = {})
|
|
175
|
+
elapsed_seconds = Time.now - time
|
|
176
|
+
if elapsed_seconds < 0
|
|
177
|
+
tr('In the future, Marty!', 'Time reference')
|
|
178
|
+
elsif elapsed_seconds < 2.minutes
|
|
179
|
+
tr('a moment ago', 'Time reference')
|
|
180
|
+
elsif elapsed_seconds < 55.minutes
|
|
181
|
+
elapsed_minutes = (elapsed_seconds / 1.minute).to_i
|
|
182
|
+
tr("{minutes||minute} ago", 'Time reference', :minutes => elapsed_minutes)
|
|
183
|
+
elsif elapsed_seconds < 1.75.hours
|
|
184
|
+
tr("about an hour ago", 'Time reference')
|
|
185
|
+
elsif elapsed_seconds < 12.hours
|
|
186
|
+
elapsed_hours = (elapsed_seconds / 1.hour).to_i
|
|
187
|
+
tr("{hours||hour} ago", 'Time reference', :hours => elapsed_hours)
|
|
188
|
+
elsif time.today_in_time_zone?
|
|
189
|
+
display_time(time, :time_am_pm)
|
|
190
|
+
elsif time.yesterday_in_time_zone?
|
|
191
|
+
tr("Yesterday at {time}", 'Time reference', :time => time.tr(:time_am_pm).gsub('/ ', '/').sub(/^[0:]*/,""))
|
|
192
|
+
elsif elapsed_seconds < 5.days
|
|
193
|
+
time.tr(:day_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
|
194
|
+
elsif time.same_year_in_time_zone?
|
|
195
|
+
time.tr(:monthname_abbr_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
|
196
|
+
else
|
|
197
|
+
time.tr(:monthname_abbr_year_time).gsub('/ ', '/').sub(/^[0:]*/,"")
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
######################################################################
|
|
202
|
+
## Language Direction Support
|
|
203
|
+
######################################################################
|
|
204
|
+
|
|
205
|
+
def tr8n_style_attribute_tag(attr_name = 'float', default = 'right', lang = Tr8n.config.current_language)
|
|
206
|
+
"#{attr_name}:#{lang.align(default)}".html_safe
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def tr8n_style_directional_attribute_tag(attr_name = 'padding', default = 'right', value = '5px', lang = Tr8n.config.current_language)
|
|
210
|
+
"#{attr_name}-#{lang.align(default)}:#{value}".html_safe
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def tr8n_dir_attribute_tag(lang = Tr8n.config.current_language)
|
|
214
|
+
"dir='#{lang.dir}'".html_safe
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
end
|
|
218
|
+
end
|