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