jinda-5 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +177 -0
- data/Rakefile +3 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/generators/jinda/USAGE +2 -0
- data/lib/generators/jinda/config_generator.rb +108 -0
- data/lib/generators/jinda/install_generator.rb +206 -0
- data/lib/generators/jinda/minitest_generator.rb +30 -0
- data/lib/generators/jinda/rspec_generator.rb +30 -0
- data/lib/generators/jinda/templates/README.md +173 -0
- data/lib/generators/jinda/templates/app/assets/config/manifest.js +4 -0
- data/lib/generators/jinda/templates/app/assets/images/4dcity-old.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/4dcity.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/account.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/add.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/ajax-loader-circle.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/ajax-loader.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/anchor.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/application_double.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/application_form_edit.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_left.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_right.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_turn_left.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/arrow_turn_right.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/calendar.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cancel.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/chart_bar.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/clock.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cog.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/control_fastforward.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/control_play.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/cross.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/delete.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/external-link.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/facebook-continue-button.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/facebooksmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/favicon.ico +0 -0
- data/lib/generators/jinda/templates/app/assets/images/freemind(mm).png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/google-continue-button.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/help.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/highway-menu.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/highway.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/house.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-18-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-18-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-36-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/icons-36-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logo.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logo_jinda.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/logout.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/new.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/images/new.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_attach.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_green.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_output.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/page_pdf.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/pencil.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/printer.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/refresh.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/report.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/rssmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/tick.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/twittersmall.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/user.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/user_admin_gear.png +0 -0
- data/lib/generators/jinda/templates/app/assets/images/view_code.png +0 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/application.js +24 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/application.js-jqm +28 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/cable.js +13 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/disable_enter_key.js-org +10 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/iscroll-wrapper.js +32 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/iscroll.js +1084 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jinda.js +14 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile-1.2.1.js +9272 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile.datebox.js +1778 -0
- data/lib/generators/jinda/templates/app/assets/javascripts/jquery.mobile.splitview.js +695 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/app.scss +84 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/application.css.scss +34 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/articles.scss +84 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/ajax-loader.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_blue.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/button_red.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/images/indicator.gif +0 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jinda.css +52 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile-1.2.1.css +2339 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.datebox.css +65 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.grids.collapsible.css +122 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/jquery.mobile.splitview.css +128 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/kul-4.2.css +1516 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/kul-4.2.min.css +11 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/sarabun.css +37 -0
- data/lib/generators/jinda/templates/app/assets/stylesheets/social.scss +133 -0
- data/lib/generators/jinda/templates/app/channels/application_cable/channel.rb +4 -0
- data/lib/generators/jinda/templates/app/channels/application_cable/connection.rb +4 -0
- data/lib/generators/jinda/templates/app/controllers/api/v1/notes_controller.rb +81 -0
- data/lib/generators/jinda/templates/app/controllers/ctrs_controller.rb-gem-test +2 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/admins_controller.rb +6 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/application_controller.rb +42 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/articles_controller.rb +81 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/comments_controller.rb +17 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/devs_controller.rb +2 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/identities_controller.rb +5 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/jinda_controller.rb +579 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/notes_controller.rb +86 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets.rb +28 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/password_resets_controller.rb +34 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/sessions_controller.rb +43 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/sitemap_controller.rb +12 -0
- data/lib/generators/jinda/templates/app/controllers/jinda_org/users_controller.rb +34 -0
- data/lib/generators/jinda/templates/app/helpers/admins_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/application_helper.rb +33 -0
- data/lib/generators/jinda/templates/app/helpers/articles_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/basic_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/comments_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/ctrs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/devs_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/pictures_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/sitemap_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/helpers/users_helper.rb +2 -0
- data/lib/generators/jinda/templates/app/jinda/index.mm +306 -0
- data/lib/generators/jinda/templates/app/jinda/template/linkview.haml +21 -0
- data/lib/generators/jinda/templates/app/jinda/template/view.html.erb +27 -0
- data/lib/generators/jinda/templates/app/mailers/application_mailer.rb +4 -0
- data/lib/generators/jinda/templates/app/mailers/jinda_mailer.rb +7 -0
- data/lib/generators/jinda/templates/app/mailers/note_mailer.rb +10 -0
- data/lib/generators/jinda/templates/app/mailers/user_mailer.rb +15 -0
- data/lib/generators/jinda/templates/app/models/address.rb +14 -0
- data/lib/generators/jinda/templates/app/models/article.rb +14 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/asset.rb +5 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/attachment_file.rb +13 -0
- data/lib/generators/jinda/templates/app/models/ckeditor/picture.rb +14 -0
- data/lib/generators/jinda/templates/app/models/comment.rb +11 -0
- data/lib/generators/jinda/templates/app/models/identity.rb +18 -0
- data/lib/generators/jinda/templates/app/models/jinda/doc.rb +22 -0
- data/lib/generators/jinda/templates/app/models/jinda/module.rb +11 -0
- data/lib/generators/jinda/templates/app/models/jinda/notice.rb +14 -0
- data/lib/generators/jinda/templates/app/models/jinda/role.rb +8 -0
- data/lib/generators/jinda/templates/app/models/jinda/runseq.rb +24 -0
- data/lib/generators/jinda/templates/app/models/jinda/service.rb +17 -0
- data/lib/generators/jinda/templates/app/models/jinda/xmain.rb +38 -0
- data/lib/generators/jinda/templates/app/models/note.rb +22 -0
- data/lib/generators/jinda/templates/app/models/param.rb +41 -0
- data/lib/generators/jinda/templates/app/models/person.rb +14 -0
- data/lib/generators/jinda/templates/app/models/user.rb +66 -0
- data/lib/generators/jinda/templates/app/views/adminbsbs/content.haml +241 -0
- data/lib/generators/jinda/templates/app/views/admins/edit_role/edit_role.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/admins/edit_role/select_user.html.erb +4 -0
- data/lib/generators/jinda/templates/app/views/api/v1/note.haml +0 -0
- data/lib/generators/jinda/templates/app/views/articles/edit.haml +12 -0
- data/lib/generators/jinda/templates/app/views/articles/edit_article/edit_article.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/articles/edit_article/select_article.html.erb +12 -0
- data/lib/generators/jinda/templates/app/views/articles/index.haml +23 -0
- data/lib/generators/jinda/templates/app/views/articles/my.haml +20 -0
- data/lib/generators/jinda/templates/app/views/articles/new_article/form_article.html.erb +14 -0
- data/lib/generators/jinda/templates/app/views/articles/show.html.haml +24 -0
- data/lib/generators/jinda/templates/app/views/articles/xedit_article/edit_article.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
- data/lib/generators/jinda/templates/app/views/custom/_adsense.haml +6 -0
- data/lib/generators/jinda/templates/app/views/identities/new.html.erb +32 -0
- data/lib/generators/jinda/templates/app/views/jinda/_activity.md +10 -0
- data/lib/generators/jinda/templates/app/views/jinda/_menu.haml +26 -0
- data/lib/generators/jinda/templates/app/views/jinda/_menu_mm.haml +44 -0
- data/lib/generators/jinda/templates/app/views/jinda/_model.md +5 -0
- data/lib/generators/jinda/templates/app/views/jinda/_modul.md +9 -0
- data/lib/generators/jinda/templates/app/views/jinda/_pending_home.haml +5 -0
- data/lib/generators/jinda/templates/app/views/jinda/_pending_page.haml +24 -0
- data/lib/generators/jinda/templates/app/views/jinda/_service.md +24 -0
- data/lib/generators/jinda/templates/app/views/jinda/_static.haml +13 -0
- data/lib/generators/jinda/templates/app/views/jinda/doc-thai.md +37 -0
- data/lib/generators/jinda/templates/app/views/jinda/doc.md +36 -0
- data/lib/generators/jinda/templates/app/views/jinda/error_logs.haml +22 -0
- data/lib/generators/jinda/templates/app/views/jinda/feed.rss.builder +27 -0
- data/lib/generators/jinda/templates/app/views/jinda/help.haml +20 -0
- data/lib/generators/jinda/templates/app/views/jinda/index.html.haml +43 -0
- data/lib/generators/jinda/templates/app/views/jinda/logs.haml +22 -0
- data/lib/generators/jinda/templates/app/views/jinda/notice_logs.haml +18 -0
- data/lib/generators/jinda/templates/app/views/jinda/pending.haml +1 -0
- data/lib/generators/jinda/templates/app/views/jinda/run_form.haml +42 -0
- data/lib/generators/jinda/templates/app/views/jinda/run_output.haml +38 -0
- data/lib/generators/jinda/templates/app/views/jinda/search.haml +20 -0
- data/lib/generators/jinda/templates/app/views/jinda/status.haml +61 -0
- data/lib/generators/jinda/templates/app/views/jinda_mailer/gmail.html.erb +9 -0
- data/lib/generators/jinda/templates/app/views/layouts/_head.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/_meta_tags.html.erb +5 -0
- data/lib/generators/jinda/templates/app/views/layouts/_metatag.html.erb +19 -0
- data/lib/generators/jinda/templates/app/views/layouts/application.haml +4 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_footer.haml +7 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_header.haml +147 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu.haml +47 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_menu_mm.haml +34 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_rightbar.haml +123 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/_sidebar.haml +155 -0
- data/lib/generators/jinda/templates/app/views/layouts/bsb/application.haml-bsb +47 -0
- data/lib/generators/jinda/templates/app/views/layouts/gmail.html.erb +9 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_full.haml +41 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/_page.haml +16 -0
- data/lib/generators/jinda/templates/app/views/layouts/jqm/application.haml-jqm +4 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.html.haml +3 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.erb +1 -0
- data/lib/generators/jinda/templates/app/views/layouts/mailer.text.haml +1 -0
- data/lib/generators/jinda/templates/app/views/layouts/mobile.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/layouts/mobilejq.html.erb +31 -0
- data/lib/generators/jinda/templates/app/views/layouts/print.html.erb +22 -0
- data/lib/generators/jinda/templates/app/views/layouts/utf8.html.erb +22 -0
- data/lib/generators/jinda/templates/app/views/new.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/note_mailer/gmail.html.haml +7 -0
- data/lib/generators/jinda/templates/app/views/note_mailer/gmail.text.haml +8 -0
- data/lib/generators/jinda/templates/app/views/notes/delete/select_note.html.erb +14 -0
- data/lib/generators/jinda/templates/app/views/notes/edit/edit_note.html.erb +10 -0
- data/lib/generators/jinda/templates/app/views/notes/edit/select_note.html.erb +14 -0
- data/lib/generators/jinda/templates/app/views/notes/index.haml +71 -0
- data/lib/generators/jinda/templates/app/views/notes/mail/display_mail.html.erb +20 -0
- data/lib/generators/jinda/templates/app/views/notes/mail/select_note.html.erb +19 -0
- data/lib/generators/jinda/templates/app/views/notes/mail/show.html.haml +13 -0
- data/lib/generators/jinda/templates/app/views/notes/my.haml +21 -0
- data/lib/generators/jinda/templates/app/views/notes/new/new_note.html.erb +13 -0
- data/lib/generators/jinda/templates/app/views/notes/show.haml +10 -0
- data/lib/generators/jinda/templates/app/views/notes/xedit/edit_note.html.erb +10 -0
- data/lib/generators/jinda/templates/app/views/password_resets/edit.html.erb +21 -0
- data/lib/generators/jinda/templates/app/views/password_resets/new.html.erb +7 -0
- data/lib/generators/jinda/templates/app/views/sessions/new.html.erb +20 -0
- data/lib/generators/jinda/templates/app/views/sitemap/index.xml.haml +10 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.html.haml +3 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.erb +3 -0
- data/lib/generators/jinda/templates/app/views/user_mailer/password_reset.text.haml +3 -0
- data/lib/generators/jinda/templates/app/views/users/index.haml +13 -0
- data/lib/generators/jinda/templates/app/views/users/pwd/enter.html.erb +6 -0
- data/lib/generators/jinda/templates/app/views/users/user/enter_user.html.erb +8 -0
- data/lib/generators/jinda/templates/config/cloudinary.yml +9 -0
- data/lib/generators/jinda/templates/db/seeds.rb +6 -0
- data/lib/generators/jinda/templates/dot/dot.env +2 -0
- data/lib/generators/jinda/templates/jinda.yml +10 -0
- data/lib/generators/jinda/templates/public/404.html +67 -0
- data/lib/generators/jinda/templates/public/422.html +67 -0
- data/lib/generators/jinda/templates/public/500.html +66 -0
- data/lib/generators/jinda/templates/public/assets/images/logo.png +0 -0
- data/lib/generators/jinda/templates/public/favicon.ico +0 -0
- data/lib/generators/jinda/templates/public/robots.txt +3 -0
- data/lib/generators/jinda/templates/spec/controllers/api/v1_get_index_spec.rb +23 -0
- data/lib/generators/jinda/templates/spec/controllers/api/v1_get_my_spec.rb +14 -0
- data/lib/generators/jinda/templates/spec/controllers/api/v1_post_spec.rb +19 -0
- data/lib/generators/jinda/templates/spec/controllers/sessions_controller_spec.rb +96 -0
- data/lib/generators/jinda/templates/spec/features/userlogins_spec.rb +23 -0
- data/lib/generators/jinda/templates/spec/mailers/note_spec.rb +24 -0
- data/lib/generators/jinda/templates/spec/mailers/previews/note_preview.rb +9 -0
- data/lib/generators/jinda/templates/spec/models/note_spec.rb +41 -0
- data/lib/generators/jinda/templates/spec/models/user_spec.rb +12 -0
- data/lib/generators/jinda/templates/spec/rails_helper.rb +44 -0
- data/lib/generators/jinda/templates/spec/spec_helper.rb +77 -0
- data/lib/generators/jinda/templates/spec/support/authentication_helper.rb +20 -0
- data/lib/generators/jinda/templates/spec/support/factory_bot.rb +12 -0
- data/lib/generators/jinda/templates/spec/support/omniauth_macros.rb +38 -0
- data/lib/generators/jinda/templates/spec/support/request_spec_helper.rb +8 -0
- data/lib/generators/jinda/templates/spec/views/articles/_article.html.erb_spec.rbx +14 -0
- data/lib/generators/jinda/templates/test/application_system_test_case.rb +5 -0
- data/lib/generators/jinda/templates/test/integration/jinda_routes_test.rb +42 -0
- data/lib/generators/jinda/templates/test/test_helper.rb +6 -0
- data/lib/jinda.rb +6 -0
- data/lib/jinda/ template/view.html.erb +25 -0
- data/lib/jinda/app/jinda/template/view.html.erb +27 -0
- data/lib/jinda/gemhelpers.rb +50 -0
- data/lib/jinda/helpers.rb +853 -0
- data/lib/jinda/railtie.rb +18 -0
- data/lib/jinda/version.rb +3 -0
- data/lib/tasks/jinda.rake +33 -0
- metadata +405 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery Mobile Framework Git Build: SHA1: 27e3c18acfebab2d47ee7ed37bd50fc4942c8838 <> Date: Fri Mar 22 08:50:04 2013 -0600
|
3
|
+
* http://jquerymobile.com
|
4
|
+
*
|
5
|
+
* Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
|
6
|
+
* Released under the MIT license.
|
7
|
+
* http://jquery.org/license
|
8
|
+
*
|
9
|
+
*/
|
10
|
+
|
11
|
+
.ui-bar-a{border:1px solid #bcecff ;background:#bcecff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #bcecff ),to( #bcecff )); background-image:-webkit-linear-gradient( #bcecff,#bcecff ); background-image: -moz-linear-gradient( #bcecff,#bcecff ); background-image: -ms-linear-gradient( #bcecff,#bcecff ); background-image: -o-linear-gradient( #bcecff,#bcecff ); background-image: linear-gradient( #bcecff,#bcecff );}.ui-bar-a .ui-link-inherit{color:#000000 ;}.ui-bar-a a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-a a.ui-link:visited{ color:#2489ce ;}.ui-bar-a a.ui-link:hover{color:#2489ce ;}.ui-bar-a a.ui-link:active{color:#2489ce ;}.ui-bar-a,.ui-bar-a input,.ui-bar-a select,.ui-bar-a textarea,.ui-bar-a button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-a,.ui-overlay-a{border:1px solid #657f67 ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background:#b9e8bc ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e7FFeb ),to( #8aae8d )); background-image:-webkit-linear-gradient( #e7FFeb,#8aae8d ); background-image: -moz-linear-gradient( #e7FFeb,#8aae8d ); background-image: -ms-linear-gradient( #e7FFeb,#8aae8d ); background-image: -o-linear-gradient( #e7FFeb,#8aae8d ); background-image: linear-gradient( #e7FFeb,#8aae8d );}.ui-overlay-a{background-image:none;border-width:0;}.ui-body-a,.ui-body-a input,.ui-body-a select,.ui-body-a textarea,.ui-body-a button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-a .ui-link-inherit{color:#000000 ;}.ui-body-a .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-a .ui-link:visited{ color:#2489ce ;}.ui-body-a .ui-link:hover{color:#2489ce ;}.ui-body-a .ui-link:active{color:#2489ce ;}.ui-btn-up-a{border:1px solid #e8e5b0 ;background:#e8e5b0 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #b4b289 ),to( #FFFFd6 )); background-image:-webkit-linear-gradient( #b4b289,#FFFFd6 ); background-image: -moz-linear-gradient( #b4b289,#FFFFd6 ); background-image: -ms-linear-gradient( #b4b289,#FFFFd6 ); background-image: -o-linear-gradient( #b4b289,#FFFFd6 ); background-image: linear-gradient( #b4b289,#FFFFd6 );}.ui-btn-up-a:visited,.ui-btn-up-a a.ui-link-inherit{color:#000000 ;}.ui-btn-hover-a{border:1px solid #ffcacf ;background:#FFFFca ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #eaeab9 ),to( #FFFFda )); background-image:-webkit-linear-gradient( #eaeab9,#FFFFda ); background-image: -moz-linear-gradient( #eaeab9,#FFFFda ); background-image: -ms-linear-gradient( #eaeab9,#FFFFda ); background-image: -o-linear-gradient( #eaeab9,#FFFFda ); background-image: linear-gradient( #eaeab9,#FFFFda );}.ui-btn-hover-a:visited,.ui-btn-hover-a:hover,.ui-btn-hover-a a.ui-link-inherit{color:#000000 ;}.ui-btn-down-a{border:1px solid #FFFFca ;background:#FFFFca ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e5e5b5 ),to( #FFFFde )); background-image:-webkit-linear-gradient( #e5e5b5,#FFFFde ); background-image: -moz-linear-gradient( #e5e5b5,#FFFFde ); background-image: -ms-linear-gradient( #e5e5b5,#FFFFde ); background-image: -o-linear-gradient( #e5e5b5,#FFFFde ); background-image: linear-gradient( #e5e5b5,#FFFFde );}.ui-btn-down-a:visited,.ui-btn-down-a:hover,.ui-btn-down-a a.ui-link-inherit{color:#000000 ;}.ui-btn-up-a,.ui-btn-hover-a,.ui-btn-down-a{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-b{border:1px solid #bcecff ;background:#bcecff ;color:#000000 ;font-weight:bold;text-shadow:0 1px 1px #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ceFFFF ),to( #a9d4e5 )); background-image:-webkit-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -moz-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -ms-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -o-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: linear-gradient( #ceFFFF,#a9d4e5 );}.ui-bar-b .ui-link-inherit{color:#000000 ;}.ui-bar-b a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-b a.ui-link:visited{ color:#2489ce ;}.ui-bar-b a.ui-link:hover{color:#2489ce ;}.ui-bar-b a.ui-link:active{color:#2489ce ;}.ui-bar-b,.ui-bar-b input,.ui-bar-b select,.ui-bar-b textarea,.ui-bar-b button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-b,.ui-overlay-b{border:1px solid #7e7e7e ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background:#e6e6e6 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #fdfdfd ),to( #cfcfcf )); background-image:-webkit-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -moz-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -ms-linear-gradient( #fdfdfd,#cfcfcf ); background-image: -o-linear-gradient( #fdfdfd,#cfcfcf ); background-image: linear-gradient( #fdfdfd,#cfcfcf );}.ui-overlay-b{background-image:none;border-width:0;}.ui-body-b,.ui-body-b input,.ui-body-b select,.ui-body-b textarea,.ui-body-b button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-b .ui-link-inherit{color:#000000 ;}.ui-body-b .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-b .ui-link:visited{ color:#2489ce ;}.ui-body-b .ui-link:hover{color:#2489ce ;}.ui-body-b .ui-link:active{color:#2489ce ;}.ui-btn-up-b{border:1px solid #ffd7c6 ;background:#ffd7c6 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFecd9 ),to( #e5c1b2 )); background-image:-webkit-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -moz-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -ms-linear-gradient( #FFecd9,#e5c1b2 ); background-image: -o-linear-gradient( #FFecd9,#e5c1b2 ); background-image: linear-gradient( #FFecd9,#e5c1b2 );}.ui-btn-up-b:visited,.ui-btn-up-b a.ui-link-inherit{color:#000000 ;}.ui-btn-hover-b{border:1px solid #FFf7e3 ;background:#FFf7e3 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FFFFf9 ),to( #e5decc )); background-image:-webkit-linear-gradient( #FFFFf9,#e5decc ); background-image: -moz-linear-gradient( #FFFFf9,#e5decc ); background-image: -ms-linear-gradient( #FFFFf9,#e5decc ); background-image: -o-linear-gradient( #FFFFf9,#e5decc ); background-image: linear-gradient( #FFFFf9,#e5decc );}.ui-btn-hover-b:visited,.ui-btn-hover-b:hover,.ui-btn-hover-b a.ui-link-inherit{color:#000000 ;}.ui-btn-down-b{border:1px solid #FFf7e3 ;background:#FFf7e3 ;font-weight:bold;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;background-image:-webkit-gradient(linear,left top,left bottom,from( #e5decc ),to( #FFFFf9 )); background-image:-webkit-linear-gradient( #e5decc,#FFFFf9 ); background-image: -moz-linear-gradient( #e5decc,#FFFFf9 ); background-image: -ms-linear-gradient( #e5decc,#FFFFf9 ); background-image: -o-linear-gradient( #e5decc,#FFFFf9 ); background-image: linear-gradient( #e5decc,#FFFFf9 );}.ui-btn-down-b:visited,.ui-btn-down-b:hover,.ui-btn-down-b a.ui-link-inherit{color:#000000 ;}.ui-btn-up-b,.ui-btn-hover-b,.ui-btn-down-b{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-c{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-c .ui-link-inherit{color:#3e3e3e ;}.ui-bar-c a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-c a.ui-link:visited{ color:#2489ce ;}.ui-bar-c a.ui-link:hover{color:#2489ce ;}.ui-bar-c a.ui-link:active{color:#2489ce ;}.ui-bar-c,.ui-bar-c input,.ui-bar-c select,.ui-bar-c textarea,.ui-bar-c button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-c,.ui-overlay-c{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-c{background-image:none;border-width:0;}.ui-body-c,.ui-body-c input,.ui-body-c select,.ui-body-c textarea,.ui-body-c button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-c .ui-link-inherit{color:#333333 ;}.ui-body-c .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-c .ui-link:visited{ color:#2489ce ;}.ui-body-c .ui-link:hover{color:#2489ce ;}.ui-body-c .ui-link:active{color:#2489ce ;}.ui-btn-up-c{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-c:visited,.ui-btn-up-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-c{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-c:visited,.ui-btn-hover-c:hover,.ui-btn-hover-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-c{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-c:visited,.ui-btn-down-c:hover,.ui-btn-down-c a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-c,.ui-btn-hover-c,.ui-btn-down-c{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-d{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-d .ui-link-inherit{color:#3e3e3e ;}.ui-bar-d a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-d a.ui-link:visited{ color:#2489ce ;}.ui-bar-d a.ui-link:hover{color:#2489ce ;}.ui-bar-d a.ui-link:active{color:#2489ce ;}.ui-bar-d,.ui-bar-d input,.ui-bar-d select,.ui-bar-d textarea,.ui-bar-d button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-d,.ui-overlay-d{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-d{background-image:none;border-width:0;}.ui-body-d,.ui-body-d input,.ui-body-d select,.ui-body-d textarea,.ui-body-d button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-d .ui-link-inherit{color:#333333 ;}.ui-body-d .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-d .ui-link:visited{ color:#2489ce ;}.ui-body-d .ui-link:hover{color:#2489ce ;}.ui-body-d .ui-link:active{color:#2489ce ;}.ui-btn-up-d{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-d:visited,.ui-btn-up-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-d{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-d:visited,.ui-btn-hover-d:hover,.ui-btn-hover-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-d{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-d:visited,.ui-btn-down-d:hover,.ui-btn-down-d a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-d,.ui-btn-hover-d,.ui-btn-down-d{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-e{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-e .ui-link-inherit{color:#3e3e3e ;}.ui-bar-e a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-e a.ui-link:visited{ color:#2489ce ;}.ui-bar-e a.ui-link:hover{color:#2489ce ;}.ui-bar-e a.ui-link:active{color:#2489ce ;}.ui-bar-e,.ui-bar-e input,.ui-bar-e select,.ui-bar-e textarea,.ui-bar-e button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-e,.ui-overlay-e{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-e{background-image:none;border-width:0;}.ui-body-e,.ui-body-e input,.ui-body-e select,.ui-body-e textarea,.ui-body-e button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-e .ui-link-inherit{color:#333333 ;}.ui-body-e .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-e .ui-link:visited{ color:#2489ce ;}.ui-body-e .ui-link:hover{color:#2489ce ;}.ui-body-e .ui-link:active{color:#2489ce ;}.ui-btn-up-e{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-e:visited,.ui-btn-up-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-e{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-e:visited,.ui-btn-hover-e:hover,.ui-btn-hover-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-e{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-e:visited,.ui-btn-down-e:hover,.ui-btn-down-e a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-e,.ui-btn-hover-e,.ui-btn-down-e{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-f{border:1px solid #b3b3b3 ;background:#eeeeee ;color:#3e3e3e ;font-weight:bold;text-shadow:0 1px 1px #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f0f0f0 ),to( #dddddd )); background-image:-webkit-linear-gradient( #f0f0f0,#dddddd ); background-image: -moz-linear-gradient( #f0f0f0,#dddddd ); background-image: -ms-linear-gradient( #f0f0f0,#dddddd ); background-image: -o-linear-gradient( #f0f0f0,#dddddd ); background-image: linear-gradient( #f0f0f0,#dddddd );}.ui-bar-f .ui-link-inherit{color:#3e3e3e ;}.ui-bar-f a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-f a.ui-link:visited{ color:#2489ce ;}.ui-bar-f a.ui-link:hover{color:#2489ce ;}.ui-bar-f a.ui-link:active{color:#2489ce ;}.ui-bar-f,.ui-bar-f input,.ui-bar-f select,.ui-bar-f textarea,.ui-bar-f button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-f,.ui-overlay-f{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-f{background-image:none;border-width:0;}.ui-body-f,.ui-body-f input,.ui-body-f select,.ui-body-f textarea,.ui-body-f button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-f .ui-link-inherit{color:#333333 ;}.ui-body-f .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-f .ui-link:visited{ color:#2489ce ;}.ui-body-f .ui-link:hover{color:#2489ce ;}.ui-body-f .ui-link:active{color:#2489ce ;}.ui-btn-up-f{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-f:visited,.ui-btn-up-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-f{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-f:visited,.ui-btn-hover-f:hover,.ui-btn-hover-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-f{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-f:visited,.ui-btn-down-f:hover,.ui-btn-down-f a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-f,.ui-btn-hover-f,.ui-btn-down-f{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}.ui-bar-g{border:1px solid #ed1c24 ;background:#ed1c24 ;color:#ffffff ;font-weight:bold;text-shadow:0 1px 1px #444444 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #FF1e27 ),to( #d51920 )); background-image:-webkit-linear-gradient( #FF1e27,#d51920 ); background-image: -moz-linear-gradient( #FF1e27,#d51920 ); background-image: -ms-linear-gradient( #FF1e27,#d51920 ); background-image: -o-linear-gradient( #FF1e27,#d51920 ); background-image: linear-gradient( #FF1e27,#d51920 );}.ui-bar-g .ui-link-inherit{color:#ffffff ;}.ui-bar-g a.ui-link{color:#7cc4e7 ;font-weight:bold;}.ui-bar-g a.ui-link:visited{ color:#2489ce ;}.ui-bar-g a.ui-link:hover{color:#2489ce ;}.ui-bar-g a.ui-link:active{color:#2489ce ;}.ui-bar-g,.ui-bar-g input,.ui-bar-g select,.ui-bar-g textarea,.ui-bar-g button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-g,.ui-overlay-g{border:1px solid #aaaaaa ;color:#333333 ;text-shadow:0 1px 0 #ffffff ;background:#f9f9f9 ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f9f9f9 ),to( #eeeeee )); background-image:-webkit-linear-gradient( #f9f9f9,#eeeeee ); background-image: -moz-linear-gradient( #f9f9f9,#eeeeee ); background-image: -ms-linear-gradient( #f9f9f9,#eeeeee ); background-image: -o-linear-gradient( #f9f9f9,#eeeeee ); background-image: linear-gradient( #f9f9f9,#eeeeee );}.ui-overlay-g{background-image:none;border-width:0;}.ui-body-g,.ui-body-g input,.ui-body-g select,.ui-body-g textarea,.ui-body-g button{font-family:Helvetica,Arial,sans-serif ;}.ui-body-g .ui-link-inherit{color:#333333 ;}.ui-body-g .ui-link{color:#2489ce ;font-weight:bold;}.ui-body-g .ui-link:visited{ color:#2489ce ;}.ui-body-g .ui-link:hover{color:#2489ce ;}.ui-body-g .ui-link:active{color:#2489ce ;}.ui-btn-up-g{border:1px solid #cccccc ;background:#eeeeee ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #ffffff ),to( #f1f1f1 )); background-image:-webkit-linear-gradient( #ffffff,#f1f1f1 ); background-image: -moz-linear-gradient( #ffffff,#f1f1f1 ); background-image: -ms-linear-gradient( #ffffff,#f1f1f1 ); background-image: -o-linear-gradient( #ffffff,#f1f1f1 ); background-image: linear-gradient( #ffffff,#f1f1f1 );}.ui-btn-up-g:visited,.ui-btn-up-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-hover-g{border:1px solid #bbbbbb ;background:#dfdfdf ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #f6f6f6 ),to( #e0e0e0 )); background-image:-webkit-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -moz-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -ms-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: -o-linear-gradient( #f6f6f6,#e0e0e0 ); background-image: linear-gradient( #f6f6f6,#e0e0e0 );}.ui-btn-hover-g:visited,.ui-btn-hover-g:hover,.ui-btn-hover-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-down-g{border:1px solid #bbbbbb ;background:#d6d6d6 ;font-weight:bold;color:#2f3e46 ;text-shadow:0 1px 0 #ffffff ;background-image:-webkit-gradient(linear,left top,left bottom,from( #d0d0d0 ),to( #dfdfdf )); background-image:-webkit-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -moz-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -ms-linear-gradient( #d0d0d0,#dfdfdf ); background-image: -o-linear-gradient( #d0d0d0,#dfdfdf ); background-image: linear-gradient( #d0d0d0,#dfdfdf );}.ui-btn-down-g:visited,.ui-btn-down-g:hover,.ui-btn-down-g a.ui-link-inherit{color:#2f3e46 ;}.ui-btn-up-g,.ui-btn-hover-g,.ui-btn-down-g{font-family:Helvetica,Arial,sans-serif ;text-decoration:none;}a.ui-link-inherit{text-decoration:none !important;}.ui-btn-active{border:1px solid #33cccc ;background:#bcecff ;font-weight:bold;color:#000000 ;cursor:pointer;text-shadow:0 1px 1px #eeeeee ;text-decoration:none;background-image:-webkit-gradient(linear,left top,left bottom,from( #ceFFFF ),to( #a9d4e5 )); background-image:-webkit-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -moz-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -ms-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: -o-linear-gradient( #ceFFFF,#a9d4e5 ); background-image: linear-gradient( #ceFFFF,#a9d4e5 ); font-family:Helvetica,Arial,sans-serif ;}.ui-btn-active:visited,.ui-btn-active:hover,.ui-btn-active a.ui-link-inherit{color:#000000 ;}.ui-btn-inner{border-top:1px solid #fff;border-color:rgba(255,255,255,.3);}.ui-corner-tl{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;}.ui-corner-tr{-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;}.ui-corner-bl{-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;}.ui-corner-br{-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-top{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;}.ui-corner-bottom{-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-right{-moz-border-radius-topright:.6em ;-webkit-border-top-right-radius:.6em ;border-top-right-radius:.6em ;-moz-border-radius-bottomright:.6em ;-webkit-border-bottom-right-radius:.6em ;border-bottom-right-radius:.6em ;}.ui-corner-left{-moz-border-radius-topleft:.6em ;-webkit-border-top-left-radius:.6em ;border-top-left-radius:.6em ;-moz-border-radius-bottomleft:.6em ;-webkit-border-bottom-left-radius:.6em ;border-bottom-left-radius:.6em ;}.ui-corner-all{-moz-border-radius:.6em ;-webkit-border-radius:.6em ;border-radius:.6em ;}.ui-corner-none{-moz-border-radius: 0;-webkit-border-radius: 0;border-radius: 0;}.ui-br{border-bottom:rgb(130,130,130);border-bottom:rgba(130,130,130,.3);border-bottom-width:1px;border-bottom-style:solid;}.ui-disabled{filter:Alpha(Opacity=30);opacity:.3;zoom:1;}.ui-disabled,.ui-disabled a{cursor:default !important;pointer-events:none;}.ui-icon,.ui-icon-searchfield:after{background:#000000 ;background:rgba(0,0,0,0.4) ;background-image:url(images/icons-18-white.png) ;background-repeat:no-repeat;-moz-border-radius:9px;-webkit-border-radius:9px;border-radius:9px;}.ui-icon-alt{background:#fff;background:rgba(255,255,255,.3);background-image:url(images/icons-18-black.png);background-repeat:no-repeat;}@media only screen and (-webkit-min-device-pixel-ratio:1.5), only screen and (min--moz-device-pixel-ratio:1.5), only screen and (min-resolution:240dpi){.ui-icon-plus,.ui-icon-minus,.ui-icon-delete,.ui-icon-arrow-r,.ui-icon-arrow-l,.ui-icon-arrow-u,.ui-icon-arrow-d,.ui-icon-check,.ui-icon-gear,.ui-icon-refresh,.ui-icon-forward,.ui-icon-back,.ui-icon-grid,.ui-icon-star,.ui-icon-alert,.ui-icon-info,.ui-icon-home,.ui-icon-search,.ui-icon-searchfield:after,.ui-icon-checkbox-off,.ui-icon-checkbox-on,.ui-icon-radio-off,.ui-icon-radio-on{background-image:url(images/icons-36-white.png);-moz-background-size:776px 18px;-o-background-size:776px 18px;-webkit-background-size:776px 18px;background-size:776px 18px;}.ui-icon-alt{background-image:url(images/icons-36-black.png);}}.ui-icon-plus{background-position:-0 50%;}.ui-icon-minus{background-position:-36px 50%;}.ui-icon-delete{background-position:-72px 50%;}.ui-icon-arrow-r{background-position:-108px 50%;}.ui-icon-arrow-l{background-position:-144px 50%;}.ui-icon-arrow-u{background-position:-180px 50%;}.ui-icon-arrow-d{background-position:-216px 50%;}.ui-icon-check{background-position:-252px 50%;}.ui-icon-gear{background-position:-288px 50%;}.ui-icon-refresh{background-position:-324px 50%;}.ui-icon-forward{background-position:-360px 50%;}.ui-icon-back{background-position:-396px 50%;}.ui-icon-grid{background-position:-432px 50%;}.ui-icon-star{background-position:-468px 50%;}.ui-icon-alert{background-position:-504px 50%;}.ui-icon-info{background-position:-540px 50%;}.ui-icon-home{background-position:-576px 50%;}.ui-icon-search,.ui-icon-searchfield:after{background-position:-612px 50%;}.ui-icon-checkbox-off{background-position:-684px 50%;}.ui-icon-checkbox-on{background-position:-648px 50%;}.ui-icon-radio-off{background-position:-756px 50%;}.ui-icon-radio-on{background-position:-720px 50%;}.ui-checkbox .ui-icon,.ui-selectmenu-list .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;}.ui-icon-checkbox-off,.ui-icon-radio-off{background-color:transparent;}.ui-checkbox-on .ui-icon,.ui-radio-on .ui-icon{background-color:#bcecff ; }.ui-icon-loading{background:url(images/ajax-loader.gif);background-size:46px 46px;}.ui-btn-corner-tl{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;}.ui-btn-corner-tr{-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;}.ui-btn-corner-bl{-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;}.ui-btn-corner-br{-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-top{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;}.ui-btn-corner-bottom{-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-right{-moz-border-radius-topright:1em ;-webkit-border-top-right-radius:1em ;border-top-right-radius:1em ;-moz-border-radius-bottomright:1em ;-webkit-border-bottom-right-radius:1em ;border-bottom-right-radius:1em ;}.ui-btn-corner-left{-moz-border-radius-topleft:1em ;-webkit-border-top-left-radius:1em ;border-top-left-radius:1em ;-moz-border-radius-bottomleft:1em ;-webkit-border-bottom-left-radius:1em ;border-bottom-left-radius:1em ;}.ui-btn-corner-all{-moz-border-radius:1em ;-webkit-border-radius:1em ;border-radius:1em ;}.ui-corner-tl,.ui-corner-tr,.ui-corner-bl,.ui-corner-br,.ui-corner-top,.ui-corner-bottom,.ui-corner-right,.ui-corner-left,.ui-corner-all,.ui-btn-corner-tl,.ui-btn-corner-tr,.ui-btn-corner-bl,.ui-btn-corner-br,.ui-btn-corner-top,.ui-btn-corner-bottom,.ui-btn-corner-right,.ui-btn-corner-left,.ui-btn-corner-all{ -webkit-background-clip:padding-box; -moz-background-clip:padding; background-clip:padding-box;}.ui-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5;position:absolute;width:100%;height:100%;}.ui-overlay-shadow{-moz-box-shadow:0px 0px 12px rgba(0,0,0,.6);-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.6);box-shadow:0px 0px 12px rgba(0,0,0,.6);}.ui-shadow{-moz-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;-webkit-box-shadow:0px 1px 4px rgba(0,0,0,.3) ;box-shadow:0px 1px 4px rgba(0,0,0,.3) ;}.ui-bar-a .ui-shadow,.ui-bar-b .ui-shadow,.ui-bar-c .ui-shadow {-moz-box-shadow:0px 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0px 1px 0 rgba(255,255,255,.3);box-shadow:0px 1px 0 rgba(255,255,255,.3);}.ui-shadow-inset{-moz-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);-webkit-box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);box-shadow:inset 0px 1px 4px rgba(0,0,0,.2);}.ui-icon-shadow{-moz-box-shadow:0px 1px 0 rgba(255,255,255,.4) ;-webkit-box-shadow:0px 1px 0 rgba(255,255,255,.4) ;box-shadow:0px 1px 0 rgba(255,255,255,.4) ;}.ui-btn:focus,.ui-link-inherit:focus{outline:0;}.ui-btn.ui-focus{z-index:1;}.ui-focus,.ui-btn:focus{-moz-box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;-webkit-box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;box-shadow:inset 0px 0px 3px #bcecff,0px 0px 9px #bcecff ;}.ui-input-text.ui-focus,.ui-input-search.ui-focus{-moz-box-shadow:0px 0px 12px #bcecff ;-webkit-box-shadow:0px 0px 12px #bcecff ;box-shadow:0px 0px 12px #bcecff ;}.ui-mobile-nosupport-boxshadow *{-moz-box-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important;}.ui-mobile-nosupport-boxshadow .ui-focus,.ui-mobile-nosupport-boxshadow .ui-btn:focus,.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus{outline-width:1px;outline-style:auto;}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
@font-face {
|
2
|
+
font-family: 'TH SarabunPSK';
|
3
|
+
src: url('fonts/thsarabunnew-webfont.eot');
|
4
|
+
src: url('fonts/thsarabunnew-webfont.eot?#iefix') format('embedded-opentype'),
|
5
|
+
url('fonts/thsarabunnew-webfont.woff') format('woff'),
|
6
|
+
url('fonts/thsarabunnew-webfont.ttf') format('truetype');
|
7
|
+
font-weight: normal;
|
8
|
+
font-style: normal;
|
9
|
+
}
|
10
|
+
@font-face {
|
11
|
+
font-family: 'TH SarabunPSK';
|
12
|
+
font-style: normal;
|
13
|
+
font-weight: bold;
|
14
|
+
src: url('fonts/thsarabunnew_bold-webfont.eot');
|
15
|
+
src: url('fonts/thsarabunnew_bold-webfont.eot?#iefix') format('embedded-opentype'),
|
16
|
+
url('fonts/thsarabunnew_bold-webfont.woff') format('woff'),
|
17
|
+
url('fonts/thsarabunnew_bold-webfont.ttf') format('truetype');
|
18
|
+
}
|
19
|
+
@font-face {
|
20
|
+
font-family: 'TH SarabunPSK';
|
21
|
+
font-style: italic;
|
22
|
+
font-weight: bold;
|
23
|
+
src: url('fonts/thsarabunnew_bolditalic-webfont.eot');
|
24
|
+
src: url('fonts/thsarabunnew_bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
|
25
|
+
url('fonts/thsarabunnew_bolditalic-webfont.woff') format('woff'),
|
26
|
+
url('fonts/thsarabunnew_bolditalic-webfont.ttf') format('truetype');
|
27
|
+
}
|
28
|
+
@font-face {
|
29
|
+
font-family: 'TH SarabunPSK';
|
30
|
+
font-style: italic;
|
31
|
+
font-weight: normal;
|
32
|
+
src: url('fonts/thsarabunnew_italic-webfont.eot');
|
33
|
+
src: url('fonts/thsarabunnew_italic-webfont.eot?#iefix') format('embedded-opentype'),
|
34
|
+
url('fonts/thsarabunnew_italic-webfont.woff') format('woff'),
|
35
|
+
url('fonts/thsarabunnew_italic-webfont.ttf') format('truetype');
|
36
|
+
}
|
37
|
+
|
@@ -0,0 +1,133 @@
|
|
1
|
+
html * {
|
2
|
+
font-family: 'Montserrat', sans-serif;
|
3
|
+
box-sizing: border-box;
|
4
|
+
}
|
5
|
+
|
6
|
+
body {
|
7
|
+
background: #4688F1;
|
8
|
+
padding: 0;
|
9
|
+
margin: 0;
|
10
|
+
}
|
11
|
+
|
12
|
+
.login-box {
|
13
|
+
padding: 20px;
|
14
|
+
max-width: 480px;
|
15
|
+
margin: 5vh auto;
|
16
|
+
text-align: center;
|
17
|
+
letter-spacing: 1px;
|
18
|
+
position: relative;
|
19
|
+
}
|
20
|
+
|
21
|
+
.login-box:hover {
|
22
|
+
box-shadow: 0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
|
23
|
+
}
|
24
|
+
|
25
|
+
.login-box h2 {
|
26
|
+
margin: 20px 0 20px;
|
27
|
+
padding: 0;
|
28
|
+
text-transform: uppercase;
|
29
|
+
color: #4688F1;
|
30
|
+
}
|
31
|
+
|
32
|
+
.social-button {
|
33
|
+
background-position: 25px 0px;
|
34
|
+
box-sizing: border-box;
|
35
|
+
color: rgb(255, 255, 255);
|
36
|
+
cursor: pointer;
|
37
|
+
display: inline-block;
|
38
|
+
height: 50px;
|
39
|
+
line-height: 50px;
|
40
|
+
text-align: left;
|
41
|
+
text-decoration: none;
|
42
|
+
text-transform: uppercase;
|
43
|
+
vertical-align: middle;
|
44
|
+
width: 100%;
|
45
|
+
border-radius: 3px;
|
46
|
+
margin: 10px auto;
|
47
|
+
outline: rgb(255, 255, 255) none 0px;
|
48
|
+
padding-left: 20%;
|
49
|
+
transition: all 0.2s cubic-bezier(0.72, 0.01, 0.56, 1) 0s;
|
50
|
+
-webkit-transition: all .3s ease;
|
51
|
+
-moz-transition: all .3s ease;
|
52
|
+
-ms-transition: all .3s ease;
|
53
|
+
-o-transition: all .3s ease;
|
54
|
+
transition: all .3s ease;
|
55
|
+
}
|
56
|
+
|
57
|
+
#facebook-connect {
|
58
|
+
background: rgb(255, 255, 255) url('https://eswarasai.com/projects/social-login/img/facebook.svg') no-repeat scroll 5px 0px / 30px 50px padding-box border-box;
|
59
|
+
border: 1px solid rgb(60, 90, 154);
|
60
|
+
}
|
61
|
+
|
62
|
+
#facebook-connect:hover {
|
63
|
+
border-color: rgb(60, 90, 154);
|
64
|
+
background: rgb(60, 90, 154) url('https://eswarasai.com/projects/social-login/img/facebook-white.svg') no-repeat scroll 5px 0px / 30px 50px padding-box border-box;
|
65
|
+
-webkit-transition: all .8s ease-out;
|
66
|
+
-moz-transition: all .3s ease;
|
67
|
+
-ms-transition: all .3s ease;
|
68
|
+
-o-transition: all .3s ease;
|
69
|
+
transition: all .3s ease-out;
|
70
|
+
}
|
71
|
+
|
72
|
+
#facebook-connect span {
|
73
|
+
box-sizing: border-box;
|
74
|
+
color: rgb(60, 90, 154);
|
75
|
+
cursor: pointer;
|
76
|
+
text-align: center;
|
77
|
+
text-transform: uppercase;
|
78
|
+
border: 0px none rgb(255, 255, 255);
|
79
|
+
outline: rgb(255, 255, 255) none 0px;
|
80
|
+
-webkit-transition: all .3s ease;
|
81
|
+
-moz-transition: all .3s ease;
|
82
|
+
-ms-transition: all .3s ease;
|
83
|
+
-o-transition: all .3s ease;
|
84
|
+
transition: all .3s ease;
|
85
|
+
}
|
86
|
+
|
87
|
+
#facebook-connect:hover span {
|
88
|
+
color: #FFF;
|
89
|
+
-webkit-transition: all .3s ease;
|
90
|
+
-moz-transition: all .3s ease;
|
91
|
+
-ms-transition: all .3s ease;
|
92
|
+
-o-transition: all .3s ease;
|
93
|
+
transition: all .3s ease;
|
94
|
+
}
|
95
|
+
|
96
|
+
#google-connect {
|
97
|
+
background: rgb(255, 255, 255) url('https://eswarasai.com/projects/social-login/img/google-plus.png') no-repeat scroll 5px 0px / 50px 50px padding-box border-box;
|
98
|
+
border: 1px solid rgb(220, 74, 61);
|
99
|
+
}
|
100
|
+
|
101
|
+
#google-connect:hover {
|
102
|
+
border-color: rgb(220, 74, 61);
|
103
|
+
background: rgb(220, 74, 61) url('https://eswarasai.com/projects/social-login/img/google-plus-white.png') no-repeat scroll 5px 0px / 50px 50px padding-box border-box;
|
104
|
+
-webkit-transition: all .8s ease-out;
|
105
|
+
-moz-transition: all .3s ease;
|
106
|
+
-ms-transition: all .3s ease;
|
107
|
+
-o-transition: all .3s ease;
|
108
|
+
transition: all .3s ease-out;
|
109
|
+
}
|
110
|
+
|
111
|
+
#google-connect span {
|
112
|
+
box-sizing: border-box;
|
113
|
+
color: rgb(220, 74, 61);
|
114
|
+
cursor: pointer;
|
115
|
+
text-align: center;
|
116
|
+
text-transform: uppercase;
|
117
|
+
border: 0px none rgb(220, 74, 61);
|
118
|
+
outline: rgb(255, 255, 255) none 0px;
|
119
|
+
-webkit-transition: all .3s ease;
|
120
|
+
-moz-transition: all .3s ease;
|
121
|
+
-ms-transition: all .3s ease;
|
122
|
+
-o-transition: all .3s ease;
|
123
|
+
transition: all .3s ease;
|
124
|
+
}
|
125
|
+
|
126
|
+
#google-connect:hover span {
|
127
|
+
color: #FFF;
|
128
|
+
-webkit-transition: all .3s ease;
|
129
|
+
-moz-transition: all .3s ease;
|
130
|
+
-ms-transition: all .3s ease;
|
131
|
+
-o-transition: all .3s ease;
|
132
|
+
transition: all .3s ease;
|
133
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
class Api::V1::NotesController < ApplicationController
|
2
|
+
before_action :load_note, only: [:show, :destroy]
|
3
|
+
# before_action :xload_current_ma_user, only: [:destroy]
|
4
|
+
|
5
|
+
def index
|
6
|
+
@notes = Note.desc(:created_at).page(params[:page]).per(10)
|
7
|
+
render json: @notes
|
8
|
+
end
|
9
|
+
|
10
|
+
def my
|
11
|
+
@notes = Note.where(user_id: current_ma_user).desc(:created_at).page(params[:page]).per(10)
|
12
|
+
render json: @notes
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
end
|
17
|
+
|
18
|
+
def edit
|
19
|
+
@note = Note.find(params[:id])
|
20
|
+
@page_title = 'Edit Note'
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
@note = Note.new(
|
25
|
+
title: params[:title],
|
26
|
+
body: params[:body],
|
27
|
+
user_id: params[:user])
|
28
|
+
|
29
|
+
@note.save!
|
30
|
+
render json: @note, status: :created
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def update
|
35
|
+
# $xvars["select_note"] and $xvars["edit_note"]
|
36
|
+
# These are variables.
|
37
|
+
# They contain everything that we get their forms select_note and edit_note
|
38
|
+
note_id = $xvars["select_note"] ? $xvars["select_note"]["id"] : $xvars["p"]["note_id"]
|
39
|
+
@note = Note.find(note_id)
|
40
|
+
@note.update(title: $xvars["edit_note"]["title"],
|
41
|
+
body: $xvars["edit_note"]["body"])
|
42
|
+
redirect_to @note
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete
|
47
|
+
# called by freemind
|
48
|
+
# Tobe called from other controller:jinda
|
49
|
+
@note_id = $xvars["select_note"] ? $xvars["select_note"]["id"] : $xvars["p"]["note_id"]
|
50
|
+
@note = Note.find(@note_id)
|
51
|
+
@note.destroy
|
52
|
+
end
|
53
|
+
|
54
|
+
def destroy
|
55
|
+
# called by rails menu my
|
56
|
+
if current_ma_user.role.upcase.split(',').include?("A") || current_ma_user == @note.user
|
57
|
+
@note.destroy
|
58
|
+
end
|
59
|
+
redirect_to :action=>'my'
|
60
|
+
end
|
61
|
+
|
62
|
+
def mail
|
63
|
+
NoteMailer.gmail(
|
64
|
+
$xvars["display_mail"]["body"],
|
65
|
+
$xvars["select_note"]["email"],
|
66
|
+
$xvars["display_mail"]["title"],
|
67
|
+
xload_current_ma_user.email)
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# Tobe called from other controller:jinda
|
73
|
+
def xload_current_ma_user
|
74
|
+
@current_ma_user = User.find($xvars["user_id"])
|
75
|
+
end
|
76
|
+
|
77
|
+
def load_note
|
78
|
+
@note = Note.find(params[:id])
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class ApplicationController < ActionController::Base
|
2
|
+
# https://www.cookieshq.co.uk/posts/easy-seo-metatags-with-rails-4#a-word-about-turbolinks
|
3
|
+
before_action :prepare_meta_tags, if: -> { request.get? }
|
4
|
+
# CSRF protection is turned on with the protect_from_forgery method.
|
5
|
+
protect_from_forgery unless: -> { request.format.json? }
|
6
|
+
def prepare_meta_tags(options={})
|
7
|
+
site_name = DEFAULT_TITLE
|
8
|
+
title = [controller_name, action_name].join(" ")
|
9
|
+
description = DEFAULT_DESCRIPTION
|
10
|
+
image = options[:image] || href="/assets/images/logo.png"
|
11
|
+
keywords = DEFAULT_KEYWORDS
|
12
|
+
current_url = request.url
|
13
|
+
|
14
|
+
# Let's prepare a nice set of defaults
|
15
|
+
defaults = {
|
16
|
+
site: site_name,
|
17
|
+
title: title,
|
18
|
+
image: image,
|
19
|
+
description: description,
|
20
|
+
keywords: keywords,
|
21
|
+
twitter: {
|
22
|
+
site_name: site_name,
|
23
|
+
site: site_name,
|
24
|
+
card: 'summary',
|
25
|
+
description: description,
|
26
|
+
image: image
|
27
|
+
},
|
28
|
+
og: {
|
29
|
+
url: current_url,
|
30
|
+
site_name: site_name,
|
31
|
+
title: title,
|
32
|
+
image: image,
|
33
|
+
description: description,
|
34
|
+
type: 'website'
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
options.reverse_merge!(defaults)
|
39
|
+
|
40
|
+
set_meta_tags options
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
class ArticlesController < ApplicationController
|
2
|
+
before_action :load_article, only: [:show,]
|
3
|
+
before_action :load_edit_article, only: [:edit, :destroy]
|
4
|
+
before_action :load_comments, only: [:show]
|
5
|
+
|
6
|
+
def index
|
7
|
+
@articles = Article.desc(:created_at).page(params[:page]).per(10)
|
8
|
+
end
|
9
|
+
|
10
|
+
def show
|
11
|
+
prepare_meta_tags(title: @article.title,
|
12
|
+
description: @article.text,
|
13
|
+
keywords: @article.keywords)
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
@page_title = 'Member Login'
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
@article = Article.new(
|
22
|
+
title: $xvars["form_article"]["title"],
|
23
|
+
text: $xvars["form_article"]["text"],
|
24
|
+
keywords: $xvars["form_article"]["keywords"],
|
25
|
+
body: $xvars["form_article"]["body"],
|
26
|
+
user_id: $xvars["user_id"])
|
27
|
+
@article.save!
|
28
|
+
end
|
29
|
+
|
30
|
+
def my
|
31
|
+
@articles = Article.where(user_id: current_ma_user).desc(:created_at).page(params[:page]).per(10)
|
32
|
+
@page_title = 'Member Login'
|
33
|
+
end
|
34
|
+
|
35
|
+
def update
|
36
|
+
# $xvars["select_article"] and $xvars["edit_article"]
|
37
|
+
# These are variables with params when called
|
38
|
+
# They contain everything that we get their forms select_article and edit_article
|
39
|
+
|
40
|
+
article_id = $xvars["select_article"] ? $xvars["select_article"]["title"] : $xvars["p"]["article_id"]
|
41
|
+
@article = Article.find(article_id)
|
42
|
+
@article.update(title: $xvars["edit_article"]["title"],
|
43
|
+
text: $xvars["edit_article"]["text"],
|
44
|
+
keywords: $xvars["edit_article"]["keywords"],
|
45
|
+
body: $xvars["edit_article"]["body"]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def destroy
|
50
|
+
#
|
51
|
+
# duplicated from jinda_controller
|
52
|
+
# Expected to use in jinda)controller
|
53
|
+
current_ma_user = User.where(:auth_token => cookies[:auth_token]).first if cookies[:auth_token]
|
54
|
+
|
55
|
+
if Rails.env.test? #Temp solution until fix test of current_ma_user
|
56
|
+
current_ma_user = $xvars["current_ma_user"]
|
57
|
+
#current_ma_user = @article.user
|
58
|
+
end
|
59
|
+
|
60
|
+
if current_ma_user.role.upcase.split(',').include?("A") || current_ma_user == @article.user
|
61
|
+
@article.destroy
|
62
|
+
end
|
63
|
+
|
64
|
+
redirect_to :action=>'my'
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def load_edit_article
|
70
|
+
@article = Article.find(params.require(:article_id))
|
71
|
+
end
|
72
|
+
|
73
|
+
def load_article
|
74
|
+
@article = Article.find(params.permit(:id))
|
75
|
+
end
|
76
|
+
|
77
|
+
def load_comments
|
78
|
+
@comments = @article.comments.find_all
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CommentsController < ApplicationController
|
2
|
+
|
3
|
+
def create
|
4
|
+
# $xvars['p'] is the query parameters like params in rails guide:
|
5
|
+
# private
|
6
|
+
# def comment_params
|
7
|
+
# params.require(:comment).permit(:commenter, :body)
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
@article = Article.find($xvars['p']['comment']['article_id'])
|
11
|
+
@comment = @article.comments.new(
|
12
|
+
body: $xvars['p']['comment']['body'],
|
13
|
+
user_id: $xvars["user_id"])
|
14
|
+
@comment.save!
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,579 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
###################################################### @runseq ####################################################
|
3
|
+
# @runseq => #<Jinda::Runseq _id: 5df31912a54d758417a7afc9,
|
4
|
+
# created_at: 2019-12-13 04:52:34 UTC,
|
5
|
+
# updated_at: 2019-12-13 04:52:43 UTC,
|
6
|
+
# user_id: nil,
|
7
|
+
# xmain_id: BSON::ObjectId('5df31912a54d758417a7afc7'),
|
8
|
+
# action: "do",
|
9
|
+
# status: "R",
|
10
|
+
# code: "create",
|
11
|
+
# name: "Create Article",
|
12
|
+
# role: "",
|
13
|
+
# rule: "true",
|
14
|
+
# rstep: 2,
|
15
|
+
# form_step: 1,
|
16
|
+
# start: 2019-12-13 04:52:43 UTC,
|
17
|
+
# stop: nil,
|
18
|
+
# end: true,
|
19
|
+
# xml: "<node CREATED='1493419491125' ID='ID_1687683396' MODIFIED='1493483244848' TEXT='create: Create Article'><icon BUILTIN='bookmark'/></node>",
|
20
|
+
# ip: nil>
|
21
|
+
|
22
|
+
######################################################################################################################
|
23
|
+
|
24
|
+
class JindaController < ApplicationController
|
25
|
+
def index
|
26
|
+
end
|
27
|
+
def logs
|
28
|
+
@xmains = Jinda::Xmain.all.desc(:created_at).page(params[:page]).per(10)
|
29
|
+
end
|
30
|
+
def error_logs
|
31
|
+
@xmains = Jinda::Xmain.in(status:['E']).desc(:created_at).page(params[:page]).per(10)
|
32
|
+
end
|
33
|
+
def notice_logs
|
34
|
+
@notices= Jinda::Notice.desc(:created_at).page(params[:page]).per(10)
|
35
|
+
end
|
36
|
+
def pending
|
37
|
+
@title= "Pending Tasks"
|
38
|
+
@xmains = Jinda::Xmain.in(status:['R','I']).asc(:created_at)
|
39
|
+
end
|
40
|
+
def cancel
|
41
|
+
Jinda::Xmain.find(params[:id]).update_attributes :status=>'X'
|
42
|
+
if params[:return]
|
43
|
+
redirect_to params[:return]
|
44
|
+
else
|
45
|
+
redirect_to action:"pending"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
def clear_xmains
|
49
|
+
Jinda::Xmain.where(:status =>{'$in'=>['R','I']}).update_all(:status=>'X')
|
50
|
+
redirect_to action:"pending"
|
51
|
+
end
|
52
|
+
def ajax_notice
|
53
|
+
if notice=Jinda::Notice.recent(current_ma_user, request.env["REMOTE_ADDR"])
|
54
|
+
notice.update_attribute :unread, false
|
55
|
+
js = "notice('#{notice.message}');"
|
56
|
+
else
|
57
|
+
js = ""
|
58
|
+
end
|
59
|
+
render plain: "<script>#{js}</script>"
|
60
|
+
end
|
61
|
+
####################################################################################################]
|
62
|
+
# prepare xmain.runseq eg: how many form_step or total_step and step properties check if authorized
|
63
|
+
####################################################################################################]
|
64
|
+
# view menu by user selected what service (module and code) to run (not all services like menu did
|
65
|
+
# Its only one service
|
66
|
+
def init
|
67
|
+
module_code, code = params[:s].split(":")
|
68
|
+
@service= Jinda::Service.where(:module_code=> module_code, :code=> code).first
|
69
|
+
# @service= Jinda::Service.where(:module_code=> params[:module], :code=> params[:service]).first
|
70
|
+
if @service && authorize_init?
|
71
|
+
xmain = create_xmain(@service)
|
72
|
+
result = create_runseq(xmain)
|
73
|
+
unless result
|
74
|
+
message = "cannot find action for xmain #{xmain.id}"
|
75
|
+
ma_log(message)
|
76
|
+
flash[:notice]= message
|
77
|
+
redirect_to "pending" and return
|
78
|
+
end
|
79
|
+
xmain.update_attribute(:xvars, @xvars)
|
80
|
+
xmain.runseqs.last.update_attribute(:end,true)
|
81
|
+
#Above line cause error update_attribute in heroku shown in logs and it was proposed to fixed in github:'kul1/g241502'
|
82
|
+
redirect_to :action=>'run', :id=>xmain.id
|
83
|
+
else
|
84
|
+
refresh_to "/", :alert => "Error: cannot process"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
####################################################################################################]
|
88
|
+
# run if, form, mail, output etc depend on icon in freemind
|
89
|
+
# action from @runseq.action == do, form, if, output
|
90
|
+
# Then will call def run_do, run_form, run_if, run_output
|
91
|
+
####################################################################################################]
|
92
|
+
def run
|
93
|
+
init_vars(params[:id])
|
94
|
+
if authorize?
|
95
|
+
# session[:full_layout]= false
|
96
|
+
redirect_to(:action=>"run_#{@runseq.action}", :id=>@xmain.id)
|
97
|
+
else
|
98
|
+
redirect_to_root
|
99
|
+
end
|
100
|
+
end
|
101
|
+
def run_form
|
102
|
+
init_vars(params[:id])
|
103
|
+
if authorize?
|
104
|
+
if ['F', 'X'].include? @xmain.status
|
105
|
+
redirect_to_root
|
106
|
+
else
|
107
|
+
service= @xmain.service
|
108
|
+
###############################################################################################
|
109
|
+
# Run View Form f created template by jinda rake follow freemind mm file
|
110
|
+
###############################################################################################
|
111
|
+
if service
|
112
|
+
@title= "Transaction ID #{@xmain.xid}: #{@xmain.name} / #{@runseq.name}"
|
113
|
+
fhelp= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.md"
|
114
|
+
@help = File.read(fhelp) if File.exists?(fhelp)
|
115
|
+
f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
|
116
|
+
if File.file?(f)
|
117
|
+
@ui= File.read(f)
|
118
|
+
else
|
119
|
+
# flash[:notice]= "Error: Can not find the view file for this controller"
|
120
|
+
ma_log "Error: Can not find the view file for this controller"
|
121
|
+
redirect_to_root
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
126
|
+
else
|
127
|
+
redirect_to_root
|
128
|
+
end
|
129
|
+
end
|
130
|
+
def run_if
|
131
|
+
init_vars(params[:id])
|
132
|
+
condition= eval(@runseq.code).to_s
|
133
|
+
match_found= false
|
134
|
+
if condition
|
135
|
+
xml= REXML::Document.new(@runseq.xml).root
|
136
|
+
next_runseq= nil
|
137
|
+
text = xml.elements['//node/node'].attributes['TEXT']
|
138
|
+
match, name= text.split(':',2)
|
139
|
+
label= name2code(name.strip)
|
140
|
+
if condition==match
|
141
|
+
if label=="end"
|
142
|
+
@end_job= true
|
143
|
+
else
|
144
|
+
next_runseq= @xmain.runseqs.where(:code=> label, :action.ne=>'redirect').first
|
145
|
+
match_found= true if next_runseq
|
146
|
+
@runseq_not_f= false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
unless match_found || @end_job
|
151
|
+
next_runseq= @xmain.runseqs.where( rstep:(@xvars['current_step']+1) ).first
|
152
|
+
end
|
153
|
+
end_action(next_runseq)
|
154
|
+
end
|
155
|
+
def run_redirect
|
156
|
+
init_vars(params[:id])
|
157
|
+
# next_runseq= @xmain.runseqs.first :conditions=>["id != ? AND code = ?",@runseq.id, @runseq.code]
|
158
|
+
next_runseq= @xmain.runseqs.where(:id.ne=>@runseq.id, :code=>@runseq.code).first
|
159
|
+
@xmain.current_runseq= next_runseq.id
|
160
|
+
end_action(next_runseq)
|
161
|
+
end
|
162
|
+
def run_do
|
163
|
+
init_vars(params[:id])
|
164
|
+
@runseq.start ||= Time.now
|
165
|
+
@runseq.status= 'R' # running
|
166
|
+
$runseq_id= @runseq.id
|
167
|
+
$user_id= current_ma_user.try(:id)
|
168
|
+
set_global
|
169
|
+
controller = Kernel.const_get(@xvars['custom_controller']).new
|
170
|
+
result = controller.send(@runseq.code)
|
171
|
+
init_vars_by_runseq($runseq_id)
|
172
|
+
@xvars = $xvars
|
173
|
+
@xvars[@runseq.code.to_sym]= result.to_s
|
174
|
+
@xvars['current_step']= @runseq.rstep
|
175
|
+
@runseq.status= 'F' #finish
|
176
|
+
@runseq.stop= Time.now
|
177
|
+
@runseq.save
|
178
|
+
end_action
|
179
|
+
rescue => e
|
180
|
+
@xmain.status='E'
|
181
|
+
@xvars['error']= e.to_s+e.backtrace.to_s
|
182
|
+
@xmain.xvars= $xvars
|
183
|
+
@xmain.save
|
184
|
+
@runseq.status= 'F' #finish
|
185
|
+
@runseq.stop= Time.now
|
186
|
+
@runseq.save
|
187
|
+
refresh_to "/", :alert => "Sorry opeation error at #{@xmain.id} #{@xvars['error']}"
|
188
|
+
end
|
189
|
+
def run_output
|
190
|
+
init_vars(params[:id])
|
191
|
+
service= @xmain.service
|
192
|
+
disp= get_option("ma_display")
|
193
|
+
ma_display = (disp && !affirm(disp)) ? false : true
|
194
|
+
if service
|
195
|
+
f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
|
196
|
+
@ui= File.read(f)
|
197
|
+
if Jinda::Doc.where(:runseq_id=>@runseq.id).exists?
|
198
|
+
@doc= Jinda::Doc.where(:runseq_id=>@runseq.id).first
|
199
|
+
@doc.update_attributes :data_text=> render_to_string(:inline=>@ui, :layout=>"utf8"),
|
200
|
+
:xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
|
201
|
+
:ip=> get_ip, :service=>service, :ma_display=>ma_display,
|
202
|
+
:ma_secured => @xmain.service.ma_secured
|
203
|
+
else
|
204
|
+
@doc= Jinda::Doc.create :name=> @runseq.name,
|
205
|
+
:content_type=>"output", :data_text=> render_to_string(:inline=>@ui, :layout=>"utf8"),
|
206
|
+
:xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
|
207
|
+
:ip=> get_ip, :service=>service, :ma_display=>ma_display,
|
208
|
+
:ma_secured => @xmain.service.ma_secured
|
209
|
+
end
|
210
|
+
@message = defined?(MSG_NEXT) ? MSG_NEXT : "Next >"
|
211
|
+
@message = "Finish" if @runseq.end
|
212
|
+
eval "@xvars[@runseq.code] = url_for(:controller=>'Jinda', :action=>'document', :id=>@doc.id)"
|
213
|
+
else
|
214
|
+
# flash[:notice]= "Error: Can not find the view file for this controller"
|
215
|
+
ma_log "Error: Can not find the view file for this controller"
|
216
|
+
redirect_to_root
|
217
|
+
end
|
218
|
+
#ma_display= get_option("ma_display")
|
219
|
+
unless ma_display
|
220
|
+
end_action
|
221
|
+
end
|
222
|
+
end
|
223
|
+
def run_mail
|
224
|
+
init_vars(params[:id])
|
225
|
+
service= @xmain.service
|
226
|
+
f= "app/views/#{service.module.code}/#{service.code}/#{@runseq.code}.html.erb"
|
227
|
+
@ui= File.read(f).html_safe
|
228
|
+
@doc= Jinda::Doc.create :name=> @runseq.name,
|
229
|
+
:content_type=>"mail", :data_text=> render_to_string(:inline=>@ui, :layout=>false),
|
230
|
+
:xmain=>@xmain, :runseq=>@runseq, :user=>current_ma_user,
|
231
|
+
:ip=> get_ip, :service=>service, :ma_display=>false,
|
232
|
+
:ma_secured => @xmain.service.ma_secured
|
233
|
+
eval "@xvars[:#{@runseq.code}] = url_for(:controller=>'jinda', :action=>'document', :id=>@doc.id)"
|
234
|
+
mail_from = get_option('from')
|
235
|
+
# sender= render_to_string(:inline=>mail_from) if mail_from
|
236
|
+
mail_to = get_option('to')
|
237
|
+
recipients= render_to_string(:inline=>mail_to) if mail_to
|
238
|
+
mail_subject = get_option('subject')
|
239
|
+
subject= render_to_string(:inline=>mail_subject) || "#{@runseq.name}"
|
240
|
+
JindaMailer.gmail(@doc.data_text, recipients, subject).deliver unless DONT_SEND_MAIL
|
241
|
+
end_action
|
242
|
+
end
|
243
|
+
def end_output
|
244
|
+
init_vars(params[:xmain_id])
|
245
|
+
end_action
|
246
|
+
end
|
247
|
+
|
248
|
+
####################################################
|
249
|
+
# search for original_filename if attached #
|
250
|
+
####################################################
|
251
|
+
#
|
252
|
+
# def end_form
|
253
|
+
# init_vars(params[:xmain_id])
|
254
|
+
# eval "@xvars[@runseq.code] = {} unless @xvars[@runseq.code]"
|
255
|
+
# params.each { |k,v|
|
256
|
+
# if params[k].respond_to? :original_filename
|
257
|
+
# get_image(k, params[k])
|
258
|
+
# elsif params[k].is_a?(Hash)
|
259
|
+
# eval "@xvars[@runseq.code][k] = v"
|
260
|
+
# params[k].each { |k1,v1|
|
261
|
+
# next unless v1.respond_to?(:original_filename)
|
262
|
+
# get_image1(k, k1, params[k][k1])
|
263
|
+
# }
|
264
|
+
# else
|
265
|
+
# v = v.to_unsafe_h unless v.class == String
|
266
|
+
# eval "@xvars[@runseq.code][k] = v"
|
267
|
+
# end
|
268
|
+
# }
|
269
|
+
# end_action
|
270
|
+
# end
|
271
|
+
# Not working at ?(Hash)
|
272
|
+
# Temp hardcode below!! require field to load name :filename
|
273
|
+
|
274
|
+
|
275
|
+
def end_form
|
276
|
+
init_vars(params[:xmain_id])
|
277
|
+
eval "@xvars[@runseq.code] = {} unless @xvars[@runseq.code]"
|
278
|
+
# Search for uploaded file name if exist
|
279
|
+
params.each { |k,v|
|
280
|
+
if params[k].respond_to? :original_filename
|
281
|
+
get_image(k, params[k])
|
282
|
+
# check if params of array in form eg: edit_article
|
283
|
+
elsif params[k].is_a?(ActionController::Parameters)
|
284
|
+
params[k].each { |k1,v1|
|
285
|
+
# eval "@xvars[@runseq.code][k1] = params.require(k1).permit(k1)"
|
286
|
+
eval "@xvars[@runseq.code][k1] = v1"
|
287
|
+
next unless v1.respond_to?(:original_filename)
|
288
|
+
get_image1(k, k1, params[k][k1])
|
289
|
+
}
|
290
|
+
else
|
291
|
+
# bug in to_unsalfe_h rails 5.1.6 https://github.com/getsentry/raven-ruby/issues/799
|
292
|
+
# Solution:
|
293
|
+
# https://stackoverflow.com/questions/34949505/rails-5-unable-to-retrieve-hash-values-from-parameter
|
294
|
+
# v = v.to_unsafe_h unless v.class == String
|
295
|
+
# v = params.require[k] unless v.class == String
|
296
|
+
v = v.to_s unless v.class == String
|
297
|
+
eval "@xvars[@runseq.code][k] = v"
|
298
|
+
end
|
299
|
+
}
|
300
|
+
end_action
|
301
|
+
end
|
302
|
+
|
303
|
+
def end_action(next_runseq = nil)
|
304
|
+
# @runseq.status='F' unless @runseq_not_f
|
305
|
+
@xmain.xvars= @xvars
|
306
|
+
@xmain.status= 'R' # running
|
307
|
+
@xmain.save!
|
308
|
+
@runseq.status='F'
|
309
|
+
@runseq.user= current_ma_user
|
310
|
+
@runseq.stop= Time.now
|
311
|
+
@runseq.save
|
312
|
+
next_runseq= @xmain.runseqs.where(:rstep=> @runseq.rstep+1).first unless next_runseq
|
313
|
+
if @end_job || !next_runseq # job finish
|
314
|
+
@xmain.xvars= @xvars
|
315
|
+
@xmain.status= 'F' unless @xmain.status== 'E' # finish
|
316
|
+
@xmain.stop= Time.now
|
317
|
+
@xmain.save
|
318
|
+
if @xvars['p']['return']
|
319
|
+
redirect_to @xvars['p']['return'] and return
|
320
|
+
else
|
321
|
+
if @user
|
322
|
+
redirect_to :action=>'index' and return
|
323
|
+
else
|
324
|
+
redirect_to_root and return
|
325
|
+
end
|
326
|
+
end
|
327
|
+
else
|
328
|
+
@xmain.update_attribute :current_runseq, next_runseq.id
|
329
|
+
redirect_to :action=>'run', :id=>@xmain.id and return
|
330
|
+
end
|
331
|
+
end
|
332
|
+
# process images from first level
|
333
|
+
def get_image(key, params)
|
334
|
+
doc = Jinda::Doc.create(
|
335
|
+
:name=> key.to_s,
|
336
|
+
:xmain=> @xmain.id,
|
337
|
+
:runseq=> @runseq.id,
|
338
|
+
:filename=> params.original_filename,
|
339
|
+
:content_type => params.content_type || 'application/zip',
|
340
|
+
:data_text=> '',
|
341
|
+
:ma_display=>true,
|
342
|
+
:ma_secured => @xmain.service.ma_secured )
|
343
|
+
if defined?(IMAGE_LOCATION)
|
344
|
+
filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
|
345
|
+
File.open(filename,"wb") { |f| f.write(params.read) }
|
346
|
+
# File.open(filename,"wb") { |f| f.puts(params.read) }
|
347
|
+
eval "@xvars[@runseq.code][key] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true )}' "
|
348
|
+
doc.update_attributes :url => filename, :basename => File.basename(filename), :cloudinary => false
|
349
|
+
else
|
350
|
+
result = Cloudinary::Uploader.upload(params)
|
351
|
+
eval %Q{ @xvars[@runseq.code][key] = '#{result["url"]}' }
|
352
|
+
doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true
|
353
|
+
end
|
354
|
+
end
|
355
|
+
# process images from second level, e.g,, fields_for
|
356
|
+
def get_image1(key, key1, params)
|
357
|
+
doc = Jinda::Doc.create(
|
358
|
+
:name=> "#{key}_#{key1}",
|
359
|
+
:xmain=> @xmain.id,
|
360
|
+
:runseq=> @runseq.id,
|
361
|
+
:filename=> params.original_filename,
|
362
|
+
:content_type => params.content_type || 'application/zip',
|
363
|
+
:data_text=> '',
|
364
|
+
:ma_display=>true, :ma_secured => @xmain.service.ma_secured )
|
365
|
+
if defined?(IMAGE_LOCATION)
|
366
|
+
filename = "#{IMAGE_LOCATION}/f#{Param.gen(:asset_id)}"
|
367
|
+
File.open(filename,"wb") { |f| f.write(params.read) }
|
368
|
+
eval "@xvars[@runseq.code][key][key1] = '#{url_for(:action=>'document', :id=>doc.id, :only_path => true)}' "
|
369
|
+
doc.update_attributes :url => filename, :basename => File.basename(filename), :cloudinary => false
|
370
|
+
else
|
371
|
+
result = Cloudinary::Uploader.upload(params)
|
372
|
+
eval %Q{ @xvars[@runseq.code][key][key1] = '#{result["url"]}' }
|
373
|
+
doc.update_attributes :url => result["url"], :basename => File.basename(result["url"]), :cloudinary => true
|
374
|
+
end
|
375
|
+
end
|
376
|
+
def doc_print
|
377
|
+
render :file=>'public/doc.html', :layout=>'layouts/print'
|
378
|
+
end
|
379
|
+
# generate documentation for application
|
380
|
+
def doc
|
381
|
+
require 'rdoc'
|
382
|
+
@app= get_app
|
383
|
+
@intro = File.read('README.md')
|
384
|
+
@print= "<div align='right'><img src='/assets/printer.png'/> <a href='/jinda/doc_print' target='_blank'/>Print</a></div>"
|
385
|
+
doc= render_to_string 'doc.md', :layout => false
|
386
|
+
html= Maruku.new(doc).to_html
|
387
|
+
File.open('public/doc.html','w') {|f| f.puts html }
|
388
|
+
respond_to do |format|
|
389
|
+
format.html {
|
390
|
+
render :plain=> @print+html, :layout => 'layouts/jqm/_page'
|
391
|
+
# render :text=> Maruku.new(doc).to_html, :layout => false
|
392
|
+
# format.html {
|
393
|
+
# h = RDoc::Markup::ToHtml.new
|
394
|
+
# render :text=> h.convert(doc), :layout => 'layouts/_page'
|
395
|
+
}
|
396
|
+
format.pdf {
|
397
|
+
latex= Maruku.new(doc).to_latex
|
398
|
+
File.open('tmp/doc.md','w') {|f| f.puts doc}
|
399
|
+
File.open('tmp/doc.tex','w') {|f| f.puts latex}
|
400
|
+
# system('pdflatex tmp/doc.tex ')
|
401
|
+
# send_file( 'tmp/doc.pdf', :type => ‘application/pdf’,
|
402
|
+
# :disposition => ‘inline’, :filename => 'doc.pdf')
|
403
|
+
render :plain=>'done'
|
404
|
+
}
|
405
|
+
end
|
406
|
+
end
|
407
|
+
# handle uploaded image
|
408
|
+
def document
|
409
|
+
doc = Jinda::Doc.find params[:id]
|
410
|
+
if doc.cloudinary
|
411
|
+
require 'net/http'
|
412
|
+
require "uri"
|
413
|
+
uri = URI.parse(doc.url)
|
414
|
+
data = Net::HTTP.get_response(uri)
|
415
|
+
send_data(data.body, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
|
416
|
+
else
|
417
|
+
data= read_binary(doc.url)
|
418
|
+
send_data(data, :filename=>doc.filename, :type=>doc.content_type, :disposition=>"inline")
|
419
|
+
end
|
420
|
+
end
|
421
|
+
def status
|
422
|
+
@xmain= Jinda::Xmain.where(:xid=>params[:xid]).first
|
423
|
+
@title= "Task number #{params[:xid]} #{@xmain.name}"
|
424
|
+
@backbtn= true
|
425
|
+
@xvars= @xmain.xvars
|
426
|
+
# flash.now[:notice]= "รายการ #{@xmain.id} ได้ถูกยกเลิกแล้ว" if @xmain.status=='X'
|
427
|
+
ma_log "Task #{@xmain.id} is cancelled" if @xmain.status=='X'
|
428
|
+
# flash.now[:notice]= "transaction #{@xmain.id} was cancelled" if @xmain.status=='X'
|
429
|
+
rescue
|
430
|
+
refresh_to "/", :alert => "Could not find task number <b> #{params[:xid]} </b>"
|
431
|
+
end
|
432
|
+
def help
|
433
|
+
end
|
434
|
+
def search
|
435
|
+
@q = params[:q] || params[:ma_search][:q] || ""
|
436
|
+
@title = "ผลการค้นหา #{@q}"
|
437
|
+
@backbtn= true
|
438
|
+
@cache= true
|
439
|
+
if @q.blank?
|
440
|
+
redirect_to "/"
|
441
|
+
else
|
442
|
+
s= GmaSearch.create :q=>@q, :ip=> request.env["REMOTE_ADDR"]
|
443
|
+
do_search
|
444
|
+
end
|
445
|
+
end
|
446
|
+
def err404
|
447
|
+
# ma_log 'ERROR', 'main/err404'
|
448
|
+
flash[:notice] = "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
|
449
|
+
ma_log "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
|
450
|
+
redirect_to '/'
|
451
|
+
end
|
452
|
+
def err500
|
453
|
+
# ma_log 'ERROR', 'main/err500'
|
454
|
+
flash[:notice] = "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
|
455
|
+
ma_log "We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly."
|
456
|
+
redirect_to '/'
|
457
|
+
end
|
458
|
+
|
459
|
+
private
|
460
|
+
def create_xmain(service)
|
461
|
+
c = name2camel(service.module.code)
|
462
|
+
custom_controller= "#{c}Controller"
|
463
|
+
params["return"] = request.env['HTTP_REFERER']
|
464
|
+
Jinda::Xmain.create :service=>service,
|
465
|
+
:start=>Time.now,
|
466
|
+
:name=>service.name,
|
467
|
+
:ip=> get_ip,
|
468
|
+
:status=>'I', # init
|
469
|
+
:user=>current_ma_user,
|
470
|
+
:xvars=> {
|
471
|
+
:service_id=>service.id,
|
472
|
+
:p=>params.to_unsafe_h,
|
473
|
+
:id=>params[:id],
|
474
|
+
:user_id=>current_ma_user.try(:id),
|
475
|
+
:custom_controller=>custom_controller,
|
476
|
+
:host=>request.host,
|
477
|
+
:referer=>request.env['HTTP_REFERER']
|
478
|
+
}
|
479
|
+
end
|
480
|
+
def create_runseq(xmain)
|
481
|
+
@xvars= xmain.xvars
|
482
|
+
default_role= get_default_role
|
483
|
+
xml= xmain.service.xml
|
484
|
+
root = REXML::Document.new(xml).root
|
485
|
+
i= 0; j= 0 # i= step, j= form_step
|
486
|
+
root.elements.each('node') do |activity|
|
487
|
+
text= activity.attributes['TEXT']
|
488
|
+
next if ma_comment?(text)
|
489
|
+
next if text =~/^rule:\s*/
|
490
|
+
action= freemind2action(activity.elements['icon'].attributes['BUILTIN']) if activity.elements['icon']
|
491
|
+
return false unless action
|
492
|
+
i= i + 1
|
493
|
+
output_ma_display= false
|
494
|
+
if action=='output'
|
495
|
+
ma_display= get_option_xml("ma_display", activity)
|
496
|
+
if ma_display && !affirm(ma_display)
|
497
|
+
output_ma_display= false
|
498
|
+
else
|
499
|
+
output_ma_display= true
|
500
|
+
end
|
501
|
+
end
|
502
|
+
j= j + 1 if (action=='form' || output_ma_display)
|
503
|
+
@xvars['referer'] = activity.attributes['TEXT'] if action=='redirect'
|
504
|
+
if action!= 'if'
|
505
|
+
scode, name= text.split(':', 2)
|
506
|
+
name ||= scode; name.strip!
|
507
|
+
code= name2code(scode)
|
508
|
+
else
|
509
|
+
code= text
|
510
|
+
name= text
|
511
|
+
end
|
512
|
+
role= get_option_xml("role", activity) || default_role
|
513
|
+
rule= get_option_xml("rule", activity) || "true"
|
514
|
+
runseq= Jinda::Runseq.create :xmain=>xmain.id,
|
515
|
+
:name=> name, :action=> action,
|
516
|
+
:code=> code, :role=>role.upcase, :rule=> rule,
|
517
|
+
:rstep=> i, :form_step=> j, :status=>'I',
|
518
|
+
:xml=>activity.to_s
|
519
|
+
xmain.current_runseq= runseq.id if i==1
|
520
|
+
end
|
521
|
+
@xvars['total_steps']= i
|
522
|
+
@xvars['total_form_steps']= j
|
523
|
+
end
|
524
|
+
def init_vars(xmain)
|
525
|
+
@xmain= Jinda::Xmain.find xmain
|
526
|
+
@xvars= @xmain.xvars
|
527
|
+
@runseq= @xmain.runseqs.find @xmain.current_runseq
|
528
|
+
# authorize?
|
529
|
+
@xvars['current_step']= @runseq.rstep
|
530
|
+
@xvars['referrer']= request.referrer
|
531
|
+
session[:xmain_id]= @xmain.id
|
532
|
+
session[:runseq_id]= @runseq.id
|
533
|
+
unless params[:action]=='run_call'
|
534
|
+
@runseq.start ||= Time.now
|
535
|
+
@runseq.status= 'R' # running
|
536
|
+
@runseq.save
|
537
|
+
end
|
538
|
+
$xmain= @xmain; $xvars= @xvars
|
539
|
+
$runseq_id= @runseq.id
|
540
|
+
$user_id= current_ma_user.try(:id)
|
541
|
+
end
|
542
|
+
def init_vars_by_runseq(runseq_id)
|
543
|
+
@runseq= Jinda::Runseq.find runseq_id
|
544
|
+
@xmain= @runseq.xmain
|
545
|
+
@xvars= @xmain.xvars
|
546
|
+
#@xvars[:current_step]= @runseq.rstep
|
547
|
+
@runseq.start ||= Time.now
|
548
|
+
@runseq.status= 'R' # running
|
549
|
+
@runseq.save
|
550
|
+
end
|
551
|
+
def store_asset
|
552
|
+
if params[:content]
|
553
|
+
doc = GmaDoc.create! :name=> 'asset',
|
554
|
+
:filename=> (params[:file_name]||''),
|
555
|
+
:content_type => (params[:content_type] || 'application/zip'),
|
556
|
+
:data_text=> '',
|
557
|
+
:ma_display=>true
|
558
|
+
path = (IMAGE_LOCATION || "tmp")
|
559
|
+
File.open("#{path}/f#{doc.id}","wb") { |f|
|
560
|
+
f.puts(params[:content])
|
561
|
+
}
|
562
|
+
render :xml=>"<elocal><doc id='#{doc.id}' /><success /></elocal>"
|
563
|
+
else
|
564
|
+
render :xml=>"<elocal><fail /></elocal>"
|
565
|
+
end
|
566
|
+
end
|
567
|
+
def do_search
|
568
|
+
if current_ma_user.ma_secured?
|
569
|
+
@docs = GmaDoc.search_ma_secured(@q.downcase, params[:page], PER_PAGE)
|
570
|
+
else
|
571
|
+
@docs = GmaDoc.search(@q.downcase, params[:page], PER_PAGE)
|
572
|
+
end
|
573
|
+
@xmains = GmaXmain.find(@docs.map(&:ma_xmain_id)).sort { |a,b| b.id<=>a.id }
|
574
|
+
# @xmains = GmaXmain.find @docs.map(&:created_at).sort { |a,b| b<=>a }
|
575
|
+
end
|
576
|
+
def read_binary(path)
|
577
|
+
File.open path, "rb" do |f| f.read end
|
578
|
+
end
|
579
|
+
end
|