├── .env.example ├── .gitignore ├── .rspec ├── .travis.yml ├── Gemfile ├── Gemfile.lock ├── MIT-LICENSE ├── README.md ├── Rakefile ├── TODO.md ├── app ├── assets │ ├── images │ │ └── chaskiq │ │ │ ├── .keep │ │ │ ├── blocks_sprite.png │ │ │ └── track.gif │ ├── javascripts │ │ └── chaskiq │ │ │ ├── application.js │ │ │ ├── chaskiq.js │ │ │ ├── iframe.js │ │ │ └── manage │ │ │ ├── attachments.js │ │ │ ├── campaign_wizard.js.coffee │ │ │ ├── campaigns.js │ │ │ ├── helpers.js.coffee │ │ │ ├── iframe.js.coffee │ │ │ ├── lists.js │ │ │ ├── metrics.js │ │ │ └── templates.js │ └── stylesheets │ │ └── chaskiq │ │ ├── application.css │ │ ├── base │ │ ├── base.scss │ │ ├── typography.scss │ │ └── variables.scss │ │ ├── campaigns.css │ │ ├── dashboard.css │ │ ├── manage │ │ ├── attachments.css │ │ ├── campaign_wizard.css.scss │ │ ├── campaigns.css │ │ ├── lists.css │ │ ├── metrics.css │ │ └── templates.css │ │ ├── new.scss │ │ └── style.css.scss ├── controllers │ └── chaskiq │ │ ├── application_controller.rb │ │ ├── campaigns_controller.rb │ │ ├── dashboard_controller.rb │ │ ├── hooks_controller.rb │ │ ├── lists_controller.rb │ │ ├── manage │ │ ├── attachments_controller.rb │ │ ├── campaign_wizard_controller.rb │ │ ├── campaigns_controller.rb │ │ ├── lists_controller.rb │ │ ├── metrics_controller.rb │ │ └── templates_controller.rb │ │ ├── subscribers_controller.rb │ │ └── tracks_controller.rb ├── helpers │ └── chaskiq │ │ ├── application_helper.rb │ │ ├── campaigns_helper.rb │ │ ├── dashboard_helper.rb │ │ ├── hooks_helper.rb │ │ ├── manage │ │ ├── attachments_helper.rb │ │ ├── campaigns_helper.rb │ │ ├── campain_wizard_helper.rb │ │ ├── lists_helper.rb │ │ ├── metrics_helper.rb │ │ └── templates_helper.rb │ │ ├── subscribers_helper.rb │ │ └── tracks_helper.rb ├── inputs │ └── date_time_picker_input.rb ├── jobs │ └── chaskiq │ │ ├── list_importer_job.rb │ │ ├── mail_sender_job.rb │ │ ├── ses_sender_job.rb │ │ └── sns_receiver_job.rb ├── mailers │ ├── application_mailer.rb │ └── chaskiq │ │ └── campaign_mailer.rb ├── models │ └── chaskiq │ │ ├── attachment.rb │ │ ├── campaign.rb │ │ ├── list.rb │ │ ├── metric.rb │ │ ├── setting.rb │ │ ├── subscriber.rb │ │ ├── subscription.rb │ │ └── template.rb ├── uploaders │ └── chaskiq │ │ ├── campaign_logo_uploader.rb │ │ └── image_uploader.rb └── views │ ├── chaskiq │ ├── campaign_mailer │ │ ├── _subscription_links.haml │ │ └── newsletter.haml │ ├── campaigns │ │ ├── forward.html.haml │ │ ├── show.haml │ │ ├── subscribe.html.haml │ │ └── unsubscribe.html.haml │ ├── dashboard │ │ └── show.haml │ ├── manage │ │ ├── attachments │ │ │ ├── _menu.haml │ │ │ ├── create.json.haml │ │ │ └── index.html.haml │ │ ├── campaign_wizard │ │ │ ├── _menu.haml │ │ │ ├── _wizard_nav.haml │ │ │ ├── _wizard_steps.haml │ │ │ ├── confirm.haml │ │ │ ├── design.haml │ │ │ ├── list.haml │ │ │ ├── mail_sample.erb │ │ │ ├── setup.haml │ │ │ └── template.haml │ │ ├── campaigns │ │ │ ├── _actions.haml │ │ │ ├── _config_actions.haml │ │ │ ├── editor_frame.erb │ │ │ ├── iframe.haml │ │ │ ├── index.haml │ │ │ ├── new.haml │ │ │ ├── premailer_preview.haml │ │ │ ├── preview.haml │ │ │ └── show.haml │ │ ├── lists │ │ │ ├── _form.haml │ │ │ ├── _menu.haml │ │ │ ├── _subscriber_fields.haml │ │ │ ├── edit.haml │ │ │ ├── index.haml │ │ │ ├── new.haml │ │ │ └── show.haml │ │ ├── metrics │ │ │ ├── _metric.haml │ │ │ └── index.js.haml │ │ └── templates │ │ │ ├── _form.haml │ │ │ ├── _menu.haml │ │ │ ├── edit.haml │ │ │ ├── index.haml │ │ │ ├── new.haml │ │ │ └── show.haml │ └── subscribers │ │ ├── _form.haml │ │ ├── delete.haml │ │ ├── edit.haml │ │ └── new.html.haml │ ├── kaminari │ └── twitter-bootstrap-3 │ │ ├── _first_page.html.erb │ │ ├── _gap.html.erb │ │ ├── _last_page.html.erb │ │ ├── _next_page.html.erb │ │ ├── _page.html.erb │ │ ├── _paginator.html.erb │ │ └── _prev_page.html.erb │ ├── layouts │ ├── chaskiq │ │ ├── _footer.haml │ │ ├── _navigation.html.haml │ │ ├── _topnavbar.html.haml │ │ ├── application.html.haml │ │ └── empty.html.haml │ ├── mailer.html.erb │ └── mailer.text.erb │ └── shared │ ├── _account_stats.haml │ ├── _flashes.haml │ ├── _main_nav.haml │ ├── _menu.haml │ └── _modal.haml ├── bin └── rails ├── chaskiq-admin.png ├── chaskiq.gemspec ├── config ├── initializers │ ├── kaminari_config.rb │ └── simple_form_bootstrap.rb └── routes.rb ├── db ├── migrate │ ├── 20150318021006_create_chaskiq_campaigns.rb │ ├── 20150318021239_create_chaskiq_templates.rb │ ├── 20150318021424_create_chaskiq_lists.rb │ ├── 20150318022506_create_chaskiq_subscribers.rb │ ├── 20150318023136_create_chaskiq_attachments.rb │ ├── 20150320031404_create_chaskiq_metrics.rb │ ├── 20150321205815_create_chaskiq_settings.rb │ ├── 20150331022602_add_css_to_campaign.rb │ ├── 20150331025829_add_css_to_chaskiq_template.rb │ └── 20150402201729_create_chaskiq_subscriptions.rb └── seeds.rb ├── lib ├── chaskiq.rb ├── chaskiq │ ├── config.rb │ ├── csv_importer.rb │ ├── engine.rb │ ├── link_renamer.rb │ └── version.rb ├── generators │ └── chaskiq │ │ ├── install_generator.rb │ │ └── templates │ │ └── chaskiq.rb.erb └── tasks │ └── chaskiq_tasks.rake ├── spec ├── .ruby_version ├── controllers │ └── chaskiq │ │ ├── campaigns_controller_spec.rb │ │ ├── dashboard_controller_spec.rb │ │ ├── hooks_controller_spec.rb │ │ ├── manage │ │ ├── attachments_controller_spec.rb │ │ ├── campaign_wizard_controller_spec.rb │ │ ├── campaigns_controller_spec.rb │ │ ├── lists_controller_spec.rb │ │ ├── metrics_controller_spec.rb │ │ └── templates_controller_spec.rb │ │ ├── subscribers_controller_spec.rb │ │ └── tracks_controller_spec.rb ├── dummy │ ├── .env.example │ ├── Procfile │ ├── README.rdoc │ ├── Rakefile │ ├── app │ │ ├── assets │ │ │ ├── images │ │ │ │ └── .keep │ │ │ ├── javascripts │ │ │ │ └── application.js │ │ │ └── stylesheets │ │ │ │ └── application.css │ │ ├── controllers │ │ │ ├── application_controller.rb │ │ │ └── concerns │ │ │ │ └── .keep │ │ ├── helpers │ │ │ └── application_helper.rb │ │ ├── mailers │ │ │ └── .keep │ │ ├── models │ │ │ ├── .keep │ │ │ └── concerns │ │ │ │ └── .keep │ │ └── views │ │ │ └── layouts │ │ │ └── application.html.erb │ ├── bin │ │ ├── bundle │ │ ├── rails │ │ ├── rake │ │ └── setup │ ├── config.ru │ ├── config │ │ ├── application.rb │ │ ├── boot.rb │ │ ├── database.yml │ │ ├── environment.rb │ │ ├── environments │ │ │ ├── development.rb │ │ │ ├── production.rb │ │ │ └── test.rb │ │ ├── initializers │ │ │ ├── assets.rb │ │ │ ├── backtrace_silencers.rb │ │ │ ├── chaskiq.rb │ │ │ ├── cookies_serializer.rb │ │ │ ├── filter_parameter_logging.rb │ │ │ ├── inflections.rb │ │ │ ├── mime_types.rb │ │ │ ├── session_store.rb │ │ │ └── wrap_parameters.rb │ │ ├── locales │ │ │ └── en.yml │ │ ├── rainbows.rb │ │ ├── routes.rb │ │ └── secrets.yml │ ├── db │ │ └── schema.rb │ ├── lib │ │ └── assets │ │ │ └── .keep │ ├── log │ │ └── .keep │ └── public │ │ ├── 404.html │ │ ├── 422.html │ │ ├── 500.html │ │ └── favicon.ico ├── factories │ ├── chaskiq_attachments.rb │ ├── chaskiq_campaigns.rb │ ├── chaskiq_lists.rb │ ├── chaskiq_metrics.rb │ ├── chaskiq_settings.rb │ ├── chaskiq_subscribers.rb │ ├── chaskiq_subscriptions.rb │ └── chaskiq_templates.rb ├── fixtures │ └── csv_example.csv ├── helpers │ └── chaskiq │ │ ├── campaigns_helper_spec.rb │ │ ├── dashboard_helper_spec.rb │ │ ├── hooks_helper_spec.rb │ │ ├── manage │ │ ├── attachments_helper_spec.rb │ │ ├── campaigns_helper_spec.rb │ │ ├── campain_wizard_helper_spec.rb │ │ ├── lists_helper_spec.rb │ │ ├── metrics_helper_spec.rb │ │ └── templates_helper_spec.rb │ │ ├── subscribers_helper_spec.rb │ │ └── tracks_helper_spec.rb ├── lib │ ├── config_spec.rb │ ├── csv_importer_spec.rb │ └── link_renamer_spec.rb ├── mailers │ ├── chaskiq │ │ └── campaign_mailer_spec.rb │ └── previews │ │ └── chaskiq │ │ └── campaign_mailer_preview.rb ├── models │ └── chaskiq │ │ ├── attachment_spec.rb │ │ ├── campaign_spec.rb │ │ ├── list_spec.rb │ │ ├── metric_spec.rb │ │ ├── setting_spec.rb │ │ ├── subscriber_spec.rb │ │ ├── subscription_spec.rb │ │ └── template_spec.rb ├── rails_helper.rb └── spec_helper.rb └── vendor └── assets ├── images ├── animated-overlay.gif ├── blueimp │ └── img │ │ ├── error.png │ │ ├── error.svg │ │ ├── loading.gif │ │ ├── play-pause.png │ │ ├── play-pause.svg │ │ ├── video-play.png │ │ └── video-play.svg ├── bootstrap-colorpicker │ ├── alpha-horizontal.png │ ├── alpha.png │ ├── hue-horizontal.png │ ├── hue.png │ └── saturation.png ├── chosen-sprite.png ├── chosen-sprite@2x.png ├── green.png ├── green@2x.png ├── images │ ├── animated-overlay.gif │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ ├── ui-bg_flat_75_ffffff_40x100.png │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ ├── ui-bg_glass_65_ffffff_1x400.png │ ├── ui-bg_glass_75_dadada_1x400.png │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ ├── ui-bg_glass_95_fef1ec_1x400.png │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ ├── ui-icons_222222_256x240.png │ ├── ui-icons_2e83ff_256x240.png │ ├── ui-icons_454545_256x240.png │ ├── ui-icons_888888_256x240.png │ └── ui-icons_cd0a0a_256x240.png ├── sort.png ├── sort_asc.png ├── sort_desc.png ├── sprite-skin-flat.png ├── sprite-skin-flat2.png ├── sprite-skin-nice.png ├── sprite-skin-simple.png ├── spritemap.png └── spritemap@2x.png ├── javascripts ├── .keep ├── backbone │ ├── backbone.min.js │ └── underscore.min.js ├── chartjs │ └── Chart.min.js ├── codemirror │ ├── codemirror.js │ └── mode │ │ ├── apl │ │ ├── apl.js │ │ └── index.html │ │ ├── asterisk │ │ ├── asterisk.js │ │ └── index.html │ │ ├── clike │ │ ├── clike.js │ │ ├── index.html │ │ └── scala.html │ │ ├── clojure │ │ ├── clojure.js │ │ └── index.html │ │ ├── cobol │ │ ├── cobol.js │ │ └── index.html │ │ ├── coffeescript │ │ ├── coffeescript.js │ │ └── index.html │ │ ├── commonlisp │ │ ├── commonlisp.js │ │ └── index.html │ │ ├── css │ │ ├── css.js │ │ ├── index.html │ │ ├── less.html │ │ ├── less_test.js │ │ ├── scss.html │ │ ├── scss_test.js │ │ └── test.js │ │ ├── cypher │ │ ├── cypher.js │ │ └── index.html │ │ ├── d │ │ ├── d.js │ │ └── index.html │ │ ├── diff │ │ ├── diff.js │ │ └── index.html │ │ ├── django │ │ ├── django.js │ │ └── index.html │ │ ├── dtd │ │ ├── dtd.js │ │ └── index.html │ │ ├── dylan │ │ ├── dylan.js │ │ └── index.html │ │ ├── ecl │ │ ├── ecl.js │ │ └── index.html │ │ ├── eiffel │ │ ├── eiffel.js │ │ └── index.html │ │ ├── erlang │ │ ├── erlang.js │ │ └── index.html │ │ ├── fortran │ │ ├── fortran.js │ │ └── index.html │ │ ├── gas │ │ ├── gas.js │ │ └── index.html │ │ ├── gfm │ │ ├── gfm.js │ │ ├── index.html │ │ └── test.js │ │ ├── gherkin │ │ ├── gherkin.js │ │ └── index.html │ │ ├── go │ │ ├── go.js │ │ └── index.html │ │ ├── groovy │ │ ├── groovy.js │ │ └── index.html │ │ ├── haml │ │ ├── haml.js │ │ ├── index.html │ │ └── test.js │ │ ├── haskell │ │ ├── haskell.js │ │ └── index.html │ │ ├── haxe │ │ ├── haxe.js │ │ └── index.html │ │ ├── htmlembedded │ │ ├── htmlembedded.js │ │ └── index.html │ │ ├── htmlmixed │ │ ├── htmlmixed.js │ │ └── index.html │ │ ├── http │ │ ├── http.js │ │ └── index.html │ │ ├── index.html │ │ ├── jade │ │ ├── index.html │ │ └── jade.js │ │ ├── javascript │ │ ├── index.html │ │ ├── javascript.js │ │ ├── json-ld.html │ │ ├── test.js │ │ └── typescript.html │ │ ├── jinja2 │ │ ├── index.html │ │ └── jinja2.js │ │ ├── julia │ │ ├── index.html │ │ └── julia.js │ │ ├── kotlin │ │ ├── index.html │ │ └── kotlin.js │ │ ├── livescript │ │ ├── index.html │ │ └── livescript.js │ │ ├── lua │ │ ├── index.html │ │ └── lua.js │ │ ├── markdown │ │ ├── index.html │ │ ├── markdown.js │ │ └── test.js │ │ ├── meta.js │ │ ├── mirc │ │ ├── index.html │ │ └── mirc.js │ │ ├── mllike │ │ ├── index.html │ │ └── mllike.js │ │ ├── modelica │ │ ├── index.html │ │ └── modelica.js │ │ ├── nginx │ │ ├── index.html │ │ └── nginx.js │ │ ├── ntriples │ │ ├── index.html │ │ └── ntriples.js │ │ ├── octave │ │ ├── index.html │ │ └── octave.js │ │ ├── pascal │ │ ├── index.html │ │ └── pascal.js │ │ ├── pegjs │ │ ├── index.html │ │ └── pegjs.js │ │ ├── perl │ │ ├── index.html │ │ └── perl.js │ │ ├── php │ │ ├── index.html │ │ ├── php.js │ │ └── test.js │ │ ├── pig │ │ ├── index.html │ │ └── pig.js │ │ ├── properties │ │ ├── index.html │ │ └── properties.js │ │ ├── puppet │ │ ├── index.html │ │ └── puppet.js │ │ ├── python │ │ ├── index.html │ │ └── python.js │ │ ├── q │ │ ├── index.html │ │ └── q.js │ │ ├── r │ │ ├── index.html │ │ └── r.js │ │ ├── rpm │ │ ├── changes │ │ │ └── index.html │ │ ├── index.html │ │ └── rpm.js │ │ ├── rst │ │ ├── index.html │ │ └── rst.js │ │ ├── ruby │ │ ├── index.html │ │ ├── ruby.js │ │ └── test.js │ │ ├── rust │ │ ├── index.html │ │ └── rust.js │ │ ├── sass │ │ ├── index.html │ │ └── sass.js │ │ ├── scheme │ │ ├── index.html │ │ └── scheme.js │ │ ├── shell │ │ ├── index.html │ │ ├── shell.js │ │ └── test.js │ │ ├── sieve │ │ ├── index.html │ │ └── sieve.js │ │ ├── slim │ │ ├── index.html │ │ ├── slim.js │ │ └── test.js │ │ ├── smalltalk │ │ ├── index.html │ │ └── smalltalk.js │ │ ├── smarty │ │ ├── index.html │ │ └── smarty.js │ │ ├── smartymixed │ │ ├── index.html │ │ └── smartymixed.js │ │ ├── solr │ │ ├── index.html │ │ └── solr.js │ │ ├── sparql │ │ ├── index.html │ │ └── sparql.js │ │ ├── sql │ │ ├── index.html │ │ └── sql.js │ │ ├── stex │ │ ├── index.html │ │ ├── stex.js │ │ └── test.js │ │ ├── tcl │ │ ├── index.html │ │ └── tcl.js │ │ ├── textile │ │ ├── index.html │ │ ├── test.js │ │ └── textile.js │ │ ├── tiddlywiki │ │ ├── index.html │ │ ├── tiddlywiki.css │ │ └── tiddlywiki.js │ │ ├── tiki │ │ ├── index.html │ │ ├── tiki.css │ │ └── tiki.js │ │ ├── toml │ │ ├── index.html │ │ └── toml.js │ │ ├── tornado │ │ ├── index.html │ │ └── tornado.js │ │ ├── turtle │ │ ├── index.html │ │ └── turtle.js │ │ ├── vb │ │ ├── index.html │ │ └── vb.js │ │ ├── vbscript │ │ ├── index.html │ │ └── vbscript.js │ │ ├── velocity │ │ ├── index.html │ │ └── velocity.js │ │ ├── verilog │ │ ├── index.html │ │ ├── test.js │ │ └── verilog.js │ │ ├── xml │ │ ├── index.html │ │ ├── test.js │ │ └── xml.js │ │ ├── xquery │ │ ├── index.html │ │ ├── test.js │ │ └── xquery.js │ │ ├── yaml │ │ ├── index.html │ │ └── yaml.js │ │ └── z80 │ │ ├── index.html │ │ └── z80.js ├── colorpicker │ └── bootstrap-colorpicker.min.js ├── datapicker │ └── bootstrap-datepicker.js ├── flot │ ├── curvedLines.js │ ├── excanvas.min.js │ ├── jquery.flot.js │ ├── jquery.flot.pie.js │ ├── jquery.flot.resize.js │ ├── jquery.flot.spline.js │ ├── jquery.flot.symbol.js │ ├── jquery.flot.time.js │ └── jquery.flot.tooltip.min.js ├── jquery-ui │ ├── i18n │ │ ├── jquery-ui-i18n.min.js │ │ ├── jquery.ui.datepicker-af.min.js │ │ ├── jquery.ui.datepicker-ar-DZ.min.js │ │ ├── jquery.ui.datepicker-ar.min.js │ │ ├── jquery.ui.datepicker-az.min.js │ │ ├── jquery.ui.datepicker-be.min.js │ │ ├── jquery.ui.datepicker-bg.min.js │ │ ├── jquery.ui.datepicker-bs.min.js │ │ ├── jquery.ui.datepicker-ca.min.js │ │ ├── jquery.ui.datepicker-cs.min.js │ │ ├── jquery.ui.datepicker-cy-GB.min.js │ │ ├── jquery.ui.datepicker-da.min.js │ │ ├── jquery.ui.datepicker-de.min.js │ │ ├── jquery.ui.datepicker-el.min.js │ │ ├── jquery.ui.datepicker-en-AU.min.js │ │ ├── jquery.ui.datepicker-en-GB.min.js │ │ ├── jquery.ui.datepicker-en-NZ.min.js │ │ ├── jquery.ui.datepicker-eo.min.js │ │ ├── jquery.ui.datepicker-es.min.js │ │ ├── jquery.ui.datepicker-et.min.js │ │ ├── jquery.ui.datepicker-eu.min.js │ │ ├── jquery.ui.datepicker-fa.min.js │ │ ├── jquery.ui.datepicker-fi.min.js │ │ ├── jquery.ui.datepicker-fo.min.js │ │ ├── jquery.ui.datepicker-fr-CA.min.js │ │ ├── jquery.ui.datepicker-fr-CH.min.js │ │ ├── jquery.ui.datepicker-fr.min.js │ │ ├── jquery.ui.datepicker-gl.min.js │ │ ├── jquery.ui.datepicker-he.min.js │ │ ├── jquery.ui.datepicker-hi.min.js │ │ ├── jquery.ui.datepicker-hr.min.js │ │ ├── jquery.ui.datepicker-hu.min.js │ │ ├── jquery.ui.datepicker-hy.min.js │ │ ├── jquery.ui.datepicker-id.min.js │ │ ├── jquery.ui.datepicker-is.min.js │ │ ├── jquery.ui.datepicker-it.min.js │ │ ├── jquery.ui.datepicker-ja.min.js │ │ ├── jquery.ui.datepicker-ka.min.js │ │ ├── jquery.ui.datepicker-kk.min.js │ │ ├── jquery.ui.datepicker-km.min.js │ │ ├── jquery.ui.datepicker-ko.min.js │ │ ├── jquery.ui.datepicker-ky.min.js │ │ ├── jquery.ui.datepicker-lb.min.js │ │ ├── jquery.ui.datepicker-lt.min.js │ │ ├── jquery.ui.datepicker-lv.min.js │ │ ├── jquery.ui.datepicker-mk.min.js │ │ ├── jquery.ui.datepicker-ml.min.js │ │ ├── jquery.ui.datepicker-ms.min.js │ │ ├── jquery.ui.datepicker-nb.min.js │ │ ├── jquery.ui.datepicker-nl-BE.min.js │ │ ├── jquery.ui.datepicker-nl.min.js │ │ ├── jquery.ui.datepicker-nn.min.js │ │ ├── jquery.ui.datepicker-no.min.js │ │ ├── jquery.ui.datepicker-pl.min.js │ │ ├── jquery.ui.datepicker-pt-BR.min.js │ │ ├── jquery.ui.datepicker-pt.min.js │ │ ├── jquery.ui.datepicker-rm.min.js │ │ ├── jquery.ui.datepicker-ro.min.js │ │ ├── jquery.ui.datepicker-ru.min.js │ │ ├── jquery.ui.datepicker-sk.min.js │ │ ├── jquery.ui.datepicker-sl.min.js │ │ ├── jquery.ui.datepicker-sq.min.js │ │ ├── jquery.ui.datepicker-sr-SR.min.js │ │ ├── jquery.ui.datepicker-sr.min.js │ │ ├── jquery.ui.datepicker-sv.min.js │ │ ├── jquery.ui.datepicker-ta.min.js │ │ ├── jquery.ui.datepicker-th.min.js │ │ ├── jquery.ui.datepicker-tj.min.js │ │ ├── jquery.ui.datepicker-tr.min.js │ │ ├── jquery.ui.datepicker-uk.min.js │ │ ├── jquery.ui.datepicker-vi.min.js │ │ ├── jquery.ui.datepicker-zh-CN.min.js │ │ ├── jquery.ui.datepicker-zh-HK.min.js │ │ └── jquery.ui.datepicker-zh-TW.min.js │ ├── images │ │ ├── animated-overlay.gif │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ ├── ui-icons_222222_256x240.png │ │ ├── ui-icons_2e83ff_256x240.png │ │ ├── ui-icons_454545_256x240.png │ │ ├── ui-icons_888888_256x240.png │ │ └── ui-icons_cd0a0a_256x240.png │ ├── jquery-ui-1.10.4.custom.min.css │ ├── jquery-ui-1.10.4.min.js │ ├── jquery-ui.css │ ├── jquery-ui.js │ ├── jquery-ui.min.css │ └── jquery-ui.min.js ├── jquery │ └── jquery-2.1.1.js ├── metisMenu │ └── jquery.metisMenu.js ├── morris │ ├── morris.js │ └── raphael-2.1.0.min.js ├── pace │ └── pace.min.js ├── peity │ └── jquery.peity.min.js ├── radioactive │ └── radioactive.min.js ├── rickshaw │ ├── rickshaw.min.js │ └── vendor │ │ └── d3.v3.js ├── select2 │ └── select2.min.js ├── sparkline │ └── jquery.sparkline.min.js ├── stylesheet │ └── jquery.stylesheet.min.js ├── summernote │ └── summernote.min.js └── toastr │ └── toastr.min.js └── stylesheets ├── codemirror ├── codemirror.css └── elegant.css ├── colorpicker └── css │ └── bootstrap-colorpicker.scss ├── datapicker └── datepicker3.css ├── select2 └── select2.css ├── summernote ├── summernote-bs3.css └── summernote.css └── toastr └── toastr.css /.env.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/.env.example -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bundle/ 2 | log/*.log 3 | pkg/ 4 | spec/dummy/db/*.sqlite3 5 | spec/dummy/db/*.sqlite3-journal 6 | spec/dummy/log/*.log 7 | spec/dummy/tmp/ 8 | spec/dummy/.sass-cache 9 | spec/dummy/.env 10 | .env 11 | 12 | 13 | -------------------------------------------------------------------------------- /.rspec: -------------------------------------------------------------------------------- 1 | --color 2 | --require spec_helper 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | 3 | script: bundle exec rspec 4 | 5 | rvm: 6 | - 1.9.3 7 | - 2.0.0 8 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Declare your gem's dependencies in chaskiq.gemspec. 4 | # Bundler will treat runtime dependencies like base dependencies, and 5 | # development dependencies will be added by default to the :development group. 6 | gemspec 7 | 8 | # Declare any dependencies that are still in development here instead of in 9 | # your gemspec. These might include edge Rails or gems from your path or 10 | # Git. Remember to move these dependencies to your gemspec before releasing 11 | # your gem to rubygems.org. 12 | 13 | gem "pry" 14 | gem 'eventmachine' 15 | gem "rainbows" 16 | gem 'wicked', require: true 17 | gem 'sinatra', :require => nil 18 | gem "mysql2" 19 | gem "web-console" -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2015 miguel michelson 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | begin 2 | require 'bundler/setup' 3 | rescue LoadError 4 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 5 | end 6 | 7 | require 'rdoc/task' 8 | 9 | RDoc::Task.new(:rdoc) do |rdoc| 10 | rdoc.rdoc_dir = 'rdoc' 11 | rdoc.title = 'Chaskiq' 12 | rdoc.options << '--line-numbers' 13 | rdoc.rdoc_files.include('README.rdoc') 14 | rdoc.rdoc_files.include('lib/**/*.rb') 15 | end 16 | 17 | APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__) 18 | load 'rails/tasks/engine.rake' 19 | 20 | 21 | load 'rails/tasks/statistics.rake' 22 | 23 | 24 | 25 | Bundler::GemHelper.install_tasks 26 | 27 | require 'rake/testtask' 28 | 29 | Rake::TestTask.new(:test) do |t| 30 | t.libs << 'lib' 31 | t.libs << 'rspec' 32 | t.pattern = 'spec/**/*_spec.rb' 33 | t.verbose = false 34 | end 35 | 36 | 37 | task default: :test 38 | 39 | task :server do 40 | #system "cd spec/dummy && bundle exec rails s" 41 | system "cd spec/dummy && bundle exec thin --threadpool-size 50" 42 | end 43 | 44 | task :console do 45 | system "cd spec/dummy && bundle exec rails c" 46 | end -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | TODO: roadmap for 0.0.1 2 | 3 | + remove unused state on subscriber (we use subscription state now) 4 | + mailer connection config 5 | + uuid for subscribers & campaigns 6 | + api 7 | + track opens 8 | + track clicks (implement link rewrite in body view) 9 | + track bounces 10 | + public views 11 | + suscribe 12 | + unsuscribe 13 | 14 | 15 | + changes for model 16 | 17 | mover asociacion de metricas de subscriptor a subscripcion 18 | detectar campaña en el hook receiver (como está ahora puede generar errores cuando hay varios reply-message) 19 | 20 | custom header, 21 | test , send try my 22 | put a binding.pry in hooks and check custom header 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/assets/images/chaskiq/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/app/assets/images/chaskiq/.keep -------------------------------------------------------------------------------- /app/assets/images/chaskiq/blocks_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/app/assets/images/chaskiq/blocks_sprite.png -------------------------------------------------------------------------------- /app/assets/images/chaskiq/track.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/app/assets/images/chaskiq/track.gif -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/iframe.js: -------------------------------------------------------------------------------- 1 | //= require jquery/jquery-2.1.1.js 2 | 3 | //= require backbone/underscore.min.js 4 | //= require backbone/backbone.min.js 5 | 6 | //= require chaskiq/manage/iframe 7 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/attachments.js: -------------------------------------------------------------------------------- 1 | // Place all the behaviors and hooks related to the matching controller here. 2 | // All this logic will automatically be available in application.js. 3 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/campaigns.js: -------------------------------------------------------------------------------- 1 | // Place all the behaviors and hooks related to the matching controller here. 2 | // All this logic will automatically be available in application.js. 3 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/helpers.js.coffee: -------------------------------------------------------------------------------- 1 | Chaskiq.Helpers.showModal = (body, header, opts={}) -> 2 | window.Chaskiq.Helpers.cleanModal() 3 | body ?= "" 4 | header ?= "" 5 | @myModal = $("#myModal") 6 | @modalHeader = $("#myModal .modal-header") 7 | @modalBody = $("#myModal .modal-body") 8 | @modalFooter = $("#myModal .modal-footer") 9 | @myModal.attr("data-modal-name",opts.modal_name) if opts.modal_name 10 | @myModal.find('.modal-dialog').addClass(opts.dialog_class) if opts.dialog_class 11 | 12 | if opts['noheader'] then @modalHeader.addClass('hidden') else @modalHeader.removeClass('hidden') 13 | if opts['nofooter'] then @modalFooter.addClass('hidden') else @modalFooter.removeClass('hidden') 14 | 15 | @modalBody.html body 16 | @myModal.modal("show") 17 | 18 | $("#myModal .modal-footer .btn-primary").on "click", ()-> 19 | $("#myModal form").submit() 20 | 21 | this.myModal[0].className = "modal fade in" 22 | @modalHeader.find('h4').html header unless header.length == 0 23 | return @myModal 24 | 25 | Chaskiq.Helpers.cleanModal = () -> 26 | self = $("#modal") 27 | haveModalName = self.attr("data-modal-name") 28 | self.attr("data-modal-name","") if typeof haveModalName isnt "undefined" and haveModalName isnt false # 1 29 | self.find(".modal-dialog").removeClass().addClass("modal-dialog") 30 | self.find(".modal-container, .modal-title").html('') 31 | 32 | Chaskiq.Helpers.hideModal = ()-> 33 | $('#myModal').modal('hide'); 34 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/lists.js: -------------------------------------------------------------------------------- 1 | // Place all the behaviors and hooks related to the matching controller here. 2 | // All this logic will automatically be available in application.js. 3 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/metrics.js: -------------------------------------------------------------------------------- 1 | // Place all the behaviors and hooks related to the matching controller here. 2 | // All this logic will automatically be available in application.js. 3 | -------------------------------------------------------------------------------- /app/assets/javascripts/chaskiq/manage/templates.js: -------------------------------------------------------------------------------- 1 | // Place all the behaviors and hooks related to the matching controller here. 2 | // All this logic will automatically be available in application.js. 3 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the top of the 9 | * compiled file, but it's generally better to create a new file per style scope. 10 | * 11 | *= require_self 12 | *= require font-awesome 13 | * require animate/animate.css 14 | *= require summernote/summernote-bs3.css 15 | *= require summernote/summernote.css 16 | 17 | 18 | *= require datapicker/datepicker3.css 19 | *= require toastr/toastr.css 20 | *= require codemirror/elegant.css 21 | *= require codemirror/codemirror.css 22 | *= require colorpicker/css/bootstrap-colorpicker.scss 23 | *= require select2/select2.css 24 | 25 | *= require chaskiq/manage/campaign_wizard.css 26 | *= require chaskiq/style 27 | 28 | */ 29 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/base/typography.scss: -------------------------------------------------------------------------------- 1 | h1, h2, h3, h4, h5, h6 { 2 | font-weight: 100; 3 | } 4 | 5 | h1 { 6 | font-size: 30px; 7 | } 8 | 9 | h2 { 10 | font-size: 24px; 11 | } 12 | 13 | h3 { 14 | font-size: 16px; 15 | } 16 | 17 | h4 { 18 | font-size: 14px; 19 | } 20 | 21 | h5 { 22 | font-size: 12px; 23 | } 24 | 25 | h6 { 26 | font-size: 10px; 27 | } 28 | 29 | h3, h4, h5 { 30 | margin-top: 5px; 31 | font-weight: 600; 32 | } 33 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/base/variables.scss: -------------------------------------------------------------------------------- 1 | // Font 2 | $font-stack: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; 3 | 4 | // Basic Colors 5 | $navy: #1ab394; // Primary color 6 | $dark-gray: #c2c2c2; // Default color 7 | $blue: #1c84c6; // Success color 8 | $lazur: #23c6c8; // Info color 9 | $yellow: #f8ac59; // Warrning color 10 | $red: #ed5565; // Danger color 11 | 12 | // Various colors 13 | $text-color: #676a6c; // Body text 14 | $gray: #f3f3f4; // Background wrapper color 15 | $light-gray: #d1dade; // Default label, badget 16 | $label-badget-color: #5e5e5e; 17 | 18 | // IBOX colors ( default panel colors) 19 | $border-color: #e3e3e3; // IBox border 20 | $ibox-title-bg: white; // IBox Background header 21 | $ibox-content-bg: white; // IBox Background content 22 | 23 | //Sidebar width 24 | $sidebar-width: 220px; 25 | 26 | // Boxed layout width 27 | $boxed-width: 1200px; 28 | $boxed-backgound: url("patterns/shattered.png"); 29 | 30 | //Border radius for buttons 31 | $btn-border-radius: 3px; 32 | 33 | //Navigation 34 | $nav-bg: #fff; 35 | //$nav-profil-pattern: url("patterns/header-profile.png") no-repeat; 36 | $nav-profil-pattern: transparent; 37 | $nav-text-color: #a7b1c2; 38 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/dashboard.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/manage/attachments.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/manage/campaigns.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/manage/lists.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/manage/metrics.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/manage/templates.css: -------------------------------------------------------------------------------- 1 | /* 2 | Place all the styles related to the matching controller here. 3 | They will automatically be included in application.css. 4 | */ 5 | -------------------------------------------------------------------------------- /app/assets/stylesheets/chaskiq/style.css.scss: -------------------------------------------------------------------------------- 1 | 2 | // Google Fonts 3 | @import url("//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&lang=en"); 4 | 5 | // Bootstra 6 | @import "bootstrap-sprockets"; 7 | @import "bootstrap"; 8 | 9 | // Variables, Mixins 10 | @import "base/variables"; 11 | //@import "base/mixins"; 12 | 13 | @import "new"; 14 | 15 | @import "base/typography"; -------------------------------------------------------------------------------- /app/controllers/chaskiq/application_controller.rb: -------------------------------------------------------------------------------- 1 | require "wicked" 2 | 3 | module Chaskiq 4 | class ApplicationController < ActionController::Base 5 | 6 | def get_referrer 7 | ip = request.ip 8 | ip = env['HTTP_X_FORWARDED_FOR'].split(",").first if Rails.env.production? 9 | end 10 | 11 | def authentication_method 12 | if meth = Chaskiq::Config.authentication_method 13 | self.send meth 14 | end 15 | end 16 | 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/campaigns_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class CampaignsController < ApplicationController 5 | 6 | layout "chaskiq/empty" 7 | 8 | before_filter :find_campaign 9 | 10 | def show 11 | end 12 | 13 | def find_campaign 14 | @campaign = Chaskiq::Campaign.find(params[:id]) 15 | end 16 | 17 | end 18 | end 19 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/dashboard_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class DashboardController < Chaskiq::ApplicationController 5 | before_filter :authentication_method 6 | 7 | def show 8 | @campaigns_count = Chaskiq::Campaign.count 9 | @sends_count = Chaskiq::Metric.deliveries.size 10 | @daily_metrics = Chaskiq::Metric.group_by_day(:created_at, range: 2.weeks.ago.midnight..Time.now).count 11 | @pie_metrics = Chaskiq::Metric.group(:action) 12 | end 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/lists_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class ListsController < ApplicationController 5 | 6 | protected 7 | 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/manage/attachments_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class Manage::AttachmentsController < ApplicationController 5 | 6 | before_filter :authentication_method 7 | before_filter :find_campaign 8 | 9 | def index 10 | @attachments = @campaign.attachments.page(params[:page]).per(50) 11 | respond_to do |format| 12 | format.html 13 | format.json { render json: @attachments } 14 | end 15 | end 16 | 17 | def show 18 | @attachment = @campaign.attachments.find(params[:id]) 19 | end 20 | 21 | def new 22 | @attachment = @campaign.attachments.new 23 | end 24 | 25 | def create 26 | @attachment = @campaign.attachments.create(resource_params) 27 | respond_to do |format| 28 | format.html 29 | format.json { render json: @attachment } 30 | end 31 | end 32 | 33 | protected 34 | 35 | def find_campaign 36 | @campaign = Chaskiq::Campaign.find(params[:campaign_id]) 37 | end 38 | 39 | def resource_params 40 | return [] if request.get? 41 | params[:attachment] = {} unless params[:attachment].present? 42 | params[:attachment][:image] = params[:image] if params[:image].present? 43 | params.require(:attachment).permit! #(:name) 44 | end 45 | 46 | end 47 | end 48 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/manage/campaign_wizard_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | require "wicked" 3 | 4 | module Chaskiq 5 | class Manage::CampaignWizardController < ApplicationController 6 | 7 | before_filter :authentication_method 8 | before_filter :find_campaign , except: [:create] 9 | 10 | include Wicked::Wizard 11 | 12 | steps :list, :setup, :template, :design, :confirm 13 | 14 | def show 15 | render_wizard 16 | end 17 | 18 | def design 19 | render_wizard 20 | render :show , layout: false 21 | end 22 | 23 | def update 24 | @campaign.update_attributes(resource_params) 25 | render_wizard @campaign 26 | end 27 | 28 | def create 29 | @campaign = Chaskiq::Campaign.create(resource_params) 30 | redirect_to manage_wizard_path(steps.first, :campaign_id => @campaign.id) 31 | end 32 | 33 | protected 34 | 35 | def find_campaign 36 | @campaign = Chaskiq::Campaign.find(params[:campaign_id]) 37 | end 38 | 39 | def resource_params 40 | return [] if request.get? 41 | params.require(:campaign).permit! 42 | end 43 | 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/manage/metrics_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class Manage::MetricsController < ApplicationController 5 | 6 | before_filter :authentication_method 7 | before_filter :find_campaign 8 | 9 | def index 10 | @q = @campaign.metrics.ransack(params[:q]) 11 | 12 | @metrics = @q.result 13 | .includes(:trackable) 14 | .order("chaskiq_metrics.created_at desc") 15 | .page(params[:page]) 16 | .per(8) 17 | 18 | respond_to do |format| 19 | format.html{ render "chaskiq/manage/campaigns/show" } 20 | format.xml { render :xml => @people.to_xml } 21 | end 22 | 23 | end 24 | 25 | protected 26 | 27 | def find_campaign 28 | @campaign = Chaskiq::Campaign.find(params[:campaign_id]) 29 | end 30 | 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /app/controllers/chaskiq/manage/templates_controller.rb: -------------------------------------------------------------------------------- 1 | require_dependency "chaskiq/application_controller" 2 | 3 | module Chaskiq 4 | class Manage::TemplatesController < ApplicationController 5 | 6 | before_filter :authentication_method 7 | 8 | def index 9 | @templates = Chaskiq::Template.all 10 | end 11 | 12 | def show 13 | @template = Chaskiq::Template.find(params[:id]) 14 | end 15 | 16 | def new 17 | @template = Chaskiq::Template.new 18 | end 19 | 20 | def edit 21 | @template = Chaskiq::Template.find(params[:id]) 22 | end 23 | 24 | def update 25 | @template = Chaskiq::Template.find(params[:id]) 26 | if @template.update_attributes(resource_params) 27 | redirect_to manage_templates_path 28 | else 29 | render "edit" 30 | end 31 | end 32 | 33 | def create 34 | @template = Chaskiq::Template.create(resource_params) 35 | if @template.errors.blank? 36 | redirect_to manage_templates_path 37 | else 38 | render "new" 39 | end 40 | end 41 | 42 | def resource_params 43 | return [] if request.get? 44 | params.require(:template).permit! 45 | end 46 | 47 | end 48 | end 49 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/application_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module ApplicationHelper 3 | 4 | def paginate objects, options = {} 5 | options.reverse_merge!( theme: 'twitter-bootstrap-3' ) 6 | super( objects, options ) 7 | end 8 | end 9 | 10 | end 11 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/campaigns_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module CampaignsHelper 3 | 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/dashboard_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module DashboardHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/hooks_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module HooksHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/attachments_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::AttachmentsHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/campaigns_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::CampaignsHelper 3 | 4 | 5 | def metric_action_class(metric) 6 | case metric.action 7 | when "deliver" 8 | "plain" 9 | when "open" 10 | "info" 11 | when "click" 12 | "primary" 13 | when "bounce" 14 | "warning" 15 | when "spam" 16 | "danger" 17 | end 18 | end 19 | 20 | def metric_icon_action_class(metric) 21 | case metric.action 22 | when "deliver" 23 | "check" 24 | when "open" 25 | "check" 26 | when "click" 27 | "check" 28 | when "bounce" 29 | "exclamation" 30 | when "spam" 31 | "exclamation-triangle" 32 | end 33 | end 34 | 35 | 36 | 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/campain_wizard_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::CampainWizardHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/lists_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::ListsHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/metrics_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::MetricsHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/manage/templates_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module Manage::TemplatesHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/subscribers_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module SubscribersHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/helpers/chaskiq/tracks_helper.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | module TracksHelper 3 | end 4 | end 5 | -------------------------------------------------------------------------------- /app/inputs/date_time_picker_input.rb: -------------------------------------------------------------------------------- 1 | ## app/inputs/date_time_picker_input.rb 2 | class DateTimePickerInput < SimpleForm::Inputs::Base 3 | 4 | def input 5 | template.content_tag(:div, class: 'form-group') do 6 | template.content_tag(:div, class: 'input-group date') do 7 | template.concat span_calendar 8 | template.concat @builder.text_field(attribute_name, input_html_options) 9 | #template.concat span_remove 10 | #template.concat span_table 11 | end 12 | end 13 | end 14 | 15 | def input_html_options 16 | {class: 'form-control', readonly: true} 17 | end 18 | 19 | def span_calendar 20 | template.content_tag(:span, class: 'input-group-addon') do 21 | template.concat icon_calendar 22 | end 23 | end 24 | 25 | def icon_calendar 26 | "".html_safe 27 | end 28 | 29 | end -------------------------------------------------------------------------------- /app/jobs/chaskiq/list_importer_job.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class ListImporterJob < ActiveJob::Base 3 | 4 | queue_as :default 5 | 6 | #send to all list with state passive & subscribed 7 | def perform(list, file) 8 | list.import_csv(file) 9 | end 10 | 11 | end 12 | end -------------------------------------------------------------------------------- /app/jobs/chaskiq/mail_sender_job.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class MailSenderJob < ActiveJob::Base 3 | 4 | queue_as :default 5 | 6 | #send to all list with state passive & subscribed 7 | def perform(campaign) 8 | campaign.apply_premailer 9 | campaign.list.subscriptions.availables.each do |s| 10 | campaign.push_notification(s) 11 | end 12 | end 13 | 14 | end 15 | end -------------------------------------------------------------------------------- /app/jobs/chaskiq/ses_sender_job.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class SesSenderJob < ActiveJob::Base 3 | 4 | queue_as :mailers 5 | 6 | #send to ses 7 | def perform(campaign, subscription) 8 | subscriber = subscription.subscriber 9 | 10 | return if subscriber.blank? 11 | 12 | mailer = campaign.prepare_mail_to(subscription) 13 | response = mailer.deliver 14 | 15 | message_id = response.message_id.gsub("@email.amazonses.com", "") 16 | 17 | campaign.metrics.create( 18 | trackable: subscription, 19 | action: "deliver", 20 | data: message_id) 21 | 22 | end 23 | 24 | end 25 | end -------------------------------------------------------------------------------- /app/jobs/chaskiq/sns_receiver_job.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class SnsReceiverJob < ActiveJob::Base 3 | 4 | queue_as :default 5 | 6 | #Receive hook 7 | def perform(track_type, m, referrer) 8 | data = m["mail"]["messageId"] 9 | 10 | metric = Chaskiq::Metric.find_by(data:parsed_message_id(m)) 11 | 12 | return if metric.blank? 13 | 14 | campaign = metric.campaign 15 | #subscriber = metric.trackable 16 | #subscription = campaign.subscriptions.find_by(subscriber: subscriber) 17 | subscription = metric.trackable 18 | 19 | subscription.unsubscribe! if track_type == "spam" 20 | subscription.subscriber.send("track_#{track_type}".to_sym, { 21 | host: referrer, 22 | campaign_id: campaign.id, 23 | data: data 24 | }) 25 | end 26 | 27 | def parsed_message_id(m) 28 | m["mail"]["messageId"] 29 | end 30 | 31 | end 32 | end -------------------------------------------------------------------------------- /app/mailers/application_mailer.rb: -------------------------------------------------------------------------------- 1 | require 'mustache' 2 | 3 | class ApplicationMailer < ActionMailer::Base 4 | 5 | def tryme 6 | campaign = Chaskiq::Campaign.first 7 | mail( from: "#{campaign.from_name}<#{campaign.from_email}>", 8 | to: "miguelmichelson@gmail.com", 9 | subject: "campaign.subject", 10 | body: "campaign.reply_email", 11 | content_type: "text/plain" ) do |format| 12 | format.html { render text:'newsletter' } 13 | end 14 | end 15 | 16 | end 17 | -------------------------------------------------------------------------------- /app/models/chaskiq/attachment.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class Attachment < ActiveRecord::Base 3 | belongs_to :campaign 4 | 5 | mount_uploader :image, ImageUploader 6 | 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /app/models/chaskiq/metric.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class Metric < ActiveRecord::Base 3 | belongs_to :campaign 4 | belongs_to :trackable, polymorphic: true, required: true 5 | #belongs_to :subscription, ->{ where("chaskiq_metrics.trackable_type =?", "Chaskiq::Subscription")}, foreign_key: :trackable_id 6 | belongs_to :subscription, foreign_key: :trackable_id 7 | 8 | #system output 9 | scope :deliveries, ->{where(action: "deliver")} 10 | 11 | #user feedback 12 | scope :bounces, ->{ where(action: "bounce")} 13 | scope :opens, ->{ where(action: "open") } 14 | scope :clicks, ->{ where(action: "click")} 15 | scope :spams, ->{ where(action: "spam") } 16 | 17 | #reportery 18 | scope :uniques, ->{group("host")} 19 | 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /app/models/chaskiq/setting.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class Setting < ActiveRecord::Base 3 | belongs_to :campaign 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /app/models/chaskiq/subscriber.rb: -------------------------------------------------------------------------------- 1 | 2 | module Chaskiq 3 | class Subscriber < ActiveRecord::Base 4 | 5 | has_many :subscriptions 6 | has_many :lists, through: :subscriptions, class_name: "Chaskiq::List" 7 | has_many :metrics , as: :trackable 8 | has_many :campaigns, through: :lists, class_name: "Chaskiq::Campaign" 9 | 10 | validates :email , presence: true 11 | 12 | #validates :name , presence: true 13 | 14 | %w[click open bounce spam].each do |action| 15 | define_method("track_#{action}") do |opts| 16 | m = self.metrics.new 17 | m.assign_attributes(opts) 18 | m.action = action 19 | m.save 20 | end 21 | end 22 | 23 | def encoded_id 24 | URLcrypt.encode(self.email) 25 | end 26 | 27 | def decoded_id 28 | URLcrypt.decode(self.email) 29 | end 30 | 31 | def style_class 32 | case self.state 33 | when "passive" 34 | "plain" 35 | when "subscribed" 36 | "information" 37 | when "unsusbscribed" 38 | "warning" 39 | end 40 | end 41 | 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /app/models/chaskiq/subscription.rb: -------------------------------------------------------------------------------- 1 | require "aasm" 2 | 3 | module Chaskiq 4 | class Subscription < ActiveRecord::Base 5 | belongs_to :subscriber 6 | belongs_to :list 7 | has_many :campaigns, through: :list 8 | has_many :metrics , as: :trackable 9 | 10 | delegate :name, :last_name, :email, to: :subscriber 11 | 12 | scope :availables, ->{ where(["chaskiq_subscriptions.state =? or chaskiq_subscriptions.state=?", "passive", "subscribed"]) } 13 | 14 | include AASM 15 | 16 | aasm :column => :state do # default column: aasm_state 17 | state :passive, :initial => true 18 | state :subscribed, :after_enter => :notify_subscription 19 | state :unsubscribed, :after_enter => :notify_unsubscription 20 | #state :bounced, :after_enter => :make_bounced 21 | #state :complained, :after_enter => :make_complained 22 | 23 | event :subscribe do 24 | transitions :from => [:passive, :unsubscribed], :to => :subscribed 25 | end 26 | 27 | event :unsubscribe do 28 | transitions :from => [:subscribed, :passive], :to => :unsubscribed 29 | end 30 | end 31 | 32 | def notify_unsubscription 33 | puts "Pending" 34 | end 35 | 36 | def notify_subscription 37 | #we should only unsubscribe when process is made from interface, not from sns notification 38 | puts "Pending" 39 | end 40 | 41 | 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /app/models/chaskiq/template.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class Template < ActiveRecord::Base 3 | has_many :campaigns 4 | validates :body, presence: true 5 | validates :name, presence: true 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /app/views/chaskiq/campaign_mailer/_subscription_links.haml: -------------------------------------------------------------------------------- 1 | = link_to "Edit subscription", campaign_subscriber_url(@campaign, @subscriber.encoded_id) 2 | 3 | = link_to "Unsubscribe", delete_campaign_subscriber_url(@campaign, @subscriber.encoded_id) 4 | -------------------------------------------------------------------------------- /app/views/chaskiq/campaign_mailer/newsletter.haml: -------------------------------------------------------------------------------- 1 | = @body -------------------------------------------------------------------------------- /app/views/chaskiq/campaigns/forward.html.haml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/app/views/chaskiq/campaigns/forward.html.haml -------------------------------------------------------------------------------- /app/views/chaskiq/campaigns/show.haml: -------------------------------------------------------------------------------- 1 | .middle-box.text-center.loginscreen 2 | %div 3 | %div 4 | .logo-name 5 | = image_tag @campaign.logo, with: 200 6 | 7 | %h3= @campaign.name 8 | %p 9 | = @campaign.try(:tagline) 10 | 11 | %p Suscribete a nuestro newsletter 12 | 13 | = @campaign.description 14 | %p 15 | = render "shared/flashes" 16 | 17 | %p.m-t 18 | %small 19 | = link_to "subscribe", new_campaign_subscriber_path(@campaign) 20 | 21 | -------------------------------------------------------------------------------- /app/views/chaskiq/campaigns/subscribe.html.haml: -------------------------------------------------------------------------------- 1 | .middle-box.text-center.loginscreen 2 | %div 3 | %div 4 | %h1.logo-name 5 | + 6 | %h3= @campaign.name 7 | %p 8 | = @campaign.try(:tagline) 9 | 10 | %p Don't miss our next post! 11 | 12 | Subscribe to our newsletter! We include fresh content, articles from our community and events we attend. 13 | 14 | = simple_form_for(@subscriber, :url => "", html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f| 15 | 16 | .form-group 17 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email" 18 | 19 | .form-group 20 | = f.input :name, :required => false, label: false, placeholder: "first name" 21 | 22 | .form-group 23 | = f.input :last_name, :required => false, label: false, placeholder: "last name" 24 | 25 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading" 26 | 27 | 28 | %p.m-t 29 | %small 30 | = @campaign.name 31 | © 32 | = Time.now.year 33 | -------------------------------------------------------------------------------- /app/views/chaskiq/campaigns/unsubscribe.html.haml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/app/views/chaskiq/campaigns/unsubscribe.html.haml -------------------------------------------------------------------------------- /app/views/chaskiq/manage/attachments/_menu.haml: -------------------------------------------------------------------------------- 1 | .row.page-heading 2 | .col-sm-4 3 | %h2 Manage Attachments 4 | %ol.breadcrumb 5 | %li 6 | %a{:href => manage_campaign_path(@campaign)} 7 | = @campaign.name 8 | %li 9 | %a{:href => manage_campaign_attachments_path(@campaign)} 10 | Attachments 11 | - if @attachment.present? 12 | %li 13 | = @attachment.image -------------------------------------------------------------------------------- /app/views/chaskiq/manage/attachments/create.json.haml: -------------------------------------------------------------------------------- 1 | = @campaign.to_json -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaign_wizard/_menu.haml: -------------------------------------------------------------------------------- 1 | 2 | .row.wrapper.white-bg.page-heading 3 | .col-sm-4 4 | %h2 Campaign Wizard 5 | %ol.breadcrumb 6 | %li 7 | %a{:href => "/"} Home 8 | - if @campaign.present? 9 | %li.active 10 | %strong= link_to @campaign.name , manage_campaign_path(@campaign) -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaign_wizard/_wizard_nav.haml: -------------------------------------------------------------------------------- 1 | %nav 2 | %ul.pager 3 | %li.previous 4 | %a{:href => previous_wizard_path} 5 | %span{"aria-hidden" => "true"} ← 6 | Prev 7 | %li.next 8 | %a{:href => next_wizard_path} 9 | Next 10 | %span{"aria-hidden" => "true"} → 11 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaign_wizard/_wizard_steps.haml: -------------------------------------------------------------------------------- 1 | 2 | .btn-group.btn-group-justified{"aria-label" => "...", :role => "group"} 3 | - wizard_steps.each_with_index do |wizard_step, index| 4 | .btn-group{ class: "#{ step == wizard_step ? 'active' : '' }"} 5 | = link_to wizard_path(wizard_step), class: "btn btn-#{ step == wizard_step ? 'info' : 'white' }" do 6 | = t(".#{wizard_step}") 7 | 8 | %hr -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaign_wizard/list.haml: -------------------------------------------------------------------------------- 1 | = render "menu" 2 | 3 | 4 | .row 5 | .col-lg-12 6 | .wrapper.wrapper-content.animated.fadeInUp 7 | .ibox 8 | .ibox-title 9 | %h5 List 10 | 11 | .ibox-content 12 | 13 | = render partial: "wizard_steps" 14 | 15 | = simple_form_for @campaign, url: wizard_path do |f| 16 | 17 | = f.input :name 18 | 19 | = f.input :list_id, as: :select, collection: Chaskiq::List.all 20 | 21 | = f.submit 22 | 23 | 24 | = render partial: "wizard_nav" 25 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaign_wizard/template.haml: -------------------------------------------------------------------------------- 1 | = render "menu" 2 | 3 | 4 | .row 5 | .col-lg-12 6 | .wrapper.wrapper-content.animated.fadeInUp 7 | .ibox 8 | .ibox-title 9 | %h5 Choose template 10 | .ibox-tools 11 | 12 | .ibox-content 13 | 14 | 15 | = render partial: "wizard_steps" 16 | 17 | 18 | = simple_form_for @campaign, url: wizard_path do |f| 19 | 20 | = f.input :template_id , as: :select, collection: Chaskiq::Template.all 21 | 22 | = f.submit 23 | 24 | = render partial: "wizard_nav" 25 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/_actions.haml: -------------------------------------------------------------------------------- 1 | .btn-group 2 | %button.btn.btn-primary.dropdown-toggle{"aria-expanded" => "false", "data-toggle" => "dropdown"} 3 | Actions 4 | %span.caret 5 | %ul.dropdown-menu 6 | 7 | %li 8 | = link_to preview_manage_campaign_path(campaign) do 9 | %i.fa.fa-eye 10 | Preview 11 | 12 | %li 13 | = link_to test_manage_campaign_path(campaign) do 14 | %i.fa.fa-heartbeat 15 | Test 16 | 17 | %li 18 | = link_to deliver_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do 19 | %i.fa.fa-paper-plane 20 | Send 21 | 22 | %li 23 | = link_to clone_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do 24 | %i.fa.fa-copy 25 | clone 26 | 27 | %li 28 | = link_to purge_manage_campaign_path(campaign), data: { confirm: "Are you sure?" } do 29 | %i.fa.fa-trash 30 | purge metrics -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/_config_actions.haml: -------------------------------------------------------------------------------- 1 | .btn-group 2 | %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "data-toggle" => "dropdown"} 3 | %i.fa.fa-cog 4 | Configuration 5 | %span.caret 6 | %ul.dropdown-menu 7 | %li 8 | = link_to manage_campaign_wizard_path(campaign, "setup") do 9 | %i.fa.fa-edit 10 | Setup 11 | 12 | %li 13 | = link_to manage_campaign_attachments_path(campaign) do 14 | %i.fa.fa-paperclip 15 | Attachments 16 | 17 | %li 18 | = link_to manage_campaign_path(campaign), method: :delete, data: { confirm: "Are you sure?" } do 19 | %i.fa.fa-times 20 | Remove -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/iframe.haml: -------------------------------------------------------------------------------- 1 | !!! 2 | %html 3 | %head 4 | %title Dummy 5 | 6 | = stylesheet_link_tag 'chaskiq/manage/campaign_wizard', media: 'all' 7 | = stylesheet_link_tag 'font-awesome', media: 'all' 8 | 9 | = javascript_include_tag 'chaskiq/iframe' 10 | 11 | %style{:type => "text/css", id: "custom_style"} 12 | = @campaign.css 13 | 14 | %body 15 | #chaskiq-mail-editor 16 | #mail-editor{contenteditable: "false", style:{ height: '227px'}} 17 | = raw @campaign.html_content 18 | 19 | :javascript 20 | iframe = new window.Iframe 21 | iframe.render() -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/new.haml: -------------------------------------------------------------------------------- 1 | 2 | .row.wrapper.white-bg.page-heading 3 | .col-sm-4 4 | %h2 New Campaigns 5 | %ol.breadcrumb 6 | %li 7 | %a{:href => ""} Home 8 | %li.active 9 | %strong Campaigns list 10 | 11 | .row 12 | .col-lg-12 13 | .wrapper.wrapper-content.animated.fadeInUp 14 | .ibox 15 | .ibox-title 16 | %h5 New Campaign 17 | 18 | .ibox-content 19 | 20 | = simple_form_for ["manage", @campaign] do |f| 21 | 22 | = f.input :list_id, as: :select , collection: Chaskiq::List.all, label: "Choose a mail list" 23 | = f.submit "Create Campaign" 24 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/premailer_preview.haml: -------------------------------------------------------------------------------- 1 | !!! 2 | %html 3 | %head 4 | %meta{:charset => "utf-8"}/ 5 | %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/ 6 | %title Chaskiq 7 | 8 | %style 9 | = @campaign.css 10 | 11 | %body 12 | = h @campaign.html_content.html_safe 13 | 14 | - unless params[:exclude_gif] 15 | 16 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/campaigns/preview.haml: -------------------------------------------------------------------------------- 1 | 2 | = h @campaign.compiled_template_for(@campaign.subscribers.first).html_safe 3 | 4 | -#%img{src: open_campaign_track_url(@campaign, @campaign.subscribers.first.encoded_id, format: :gif), width:"1", height: "1" } 5 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/lists/_form.haml: -------------------------------------------------------------------------------- 1 | = form_for ["manage", @list] do |f| 2 | 3 | .col-lg-12 4 | %h3 Sign in 5 | 6 | = f.text_field :name, placeholder: "Introduce de List name" 7 | 8 | %hr 9 | 10 | .col-lg-12 11 | = link_to_add_association f, :subscribers, class: "btn btn-mini btn-default" do 12 | %i.fa.fa-plus 13 | Add Subscriber 14 | 15 | = f.simple_fields_for :subscribers, [] do |u| 16 | = render "subscriber_fields", :f => u 17 | 18 | .col-lg-12 19 | = f.submit "crear", class: "btn btn-primary" 20 | 21 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/lists/_menu.haml: -------------------------------------------------------------------------------- 1 | .row.page-heading 2 | .col-sm-4 3 | %h2 Manage Lists 4 | %ol.breadcrumb 5 | %li 6 | %a{:href => manage_lists_path} 7 | Lists 8 | - if @list.present? 9 | %li 10 | = @list.name -------------------------------------------------------------------------------- /app/views/chaskiq/manage/lists/_subscriber_fields.haml: -------------------------------------------------------------------------------- 1 | - return unless f.object.new_record? 2 | .nested-fields.row 3 | 4 | .col-lg-6 5 | .col-lg-3= f.input :email 6 | .col-lg-3= f.input :name 7 | .col-lg-3= f.input :last_name 8 | 9 | .col-lg-3 10 | = link_to_remove_association f, class: "btn btn-xs btn-danger" do 11 | %i.fa.fa-times 12 | Delete -------------------------------------------------------------------------------- /app/views/chaskiq/manage/lists/edit.haml: -------------------------------------------------------------------------------- 1 | = render "menu" 2 | 3 | .wrapper.wrapper-content 4 | .row 5 | .col-lg-12 6 | .ibox.float-e-margins 7 | .ibox-title 8 | %h5 9 | Edit 10 | %small 11 | = @list.name 12 | list 13 | .ibox-tools 14 | 15 | 16 | .ibox-content 17 | .row 18 | = render partial: "form" 19 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/lists/new.haml: -------------------------------------------------------------------------------- 1 | = render "menu" 2 | 3 | .wrapper.wrapper-content 4 | .row 5 | .col-lg-12 6 | .ibox 7 | .ibox-title 8 | %h5 9 | Create new list 10 | -#%small Simple login form example 11 | .ibox-tools 12 | 13 | 14 | .ibox-content 15 | .row 16 | = render partial: "form" -------------------------------------------------------------------------------- /app/views/chaskiq/manage/metrics/_metric.haml: -------------------------------------------------------------------------------- 1 | %tr 2 | %td 3 | %span.label{class: "label-#{metric_action_class(metric)}"} 4 | %i.fa{class: "fa-#{metric_icon_action_class(metric)}"} 5 | = metric.action 6 | %td 7 | = metric.trackable.try(:name) 8 | = metric.trackable.try(:last_name) 9 | .small 10 | = metric.trackable.try(:email) 11 | %td 12 | = l metric.created_at, format: :long 13 | %td 14 | %p.small 15 | = metric.host 16 | %td 17 | %abbr.small{title: metric.data} 18 | = truncate metric.data, :length => 30,:separator => /\w/, :omission => "..." -------------------------------------------------------------------------------- /app/views/chaskiq/manage/metrics/index.js.haml: -------------------------------------------------------------------------------- 1 | = escape_javascript("#{render partial: "chaskiq/manage/metrics/metric", collection: @metrics , as: :metric}") -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/_form.haml: -------------------------------------------------------------------------------- 1 | 2 | .row 3 | .col-lg-12 4 | .wrapper.wrapper-content 5 | .ibox 6 | .ibox-title 7 | %h5 New Template 8 | .ibox-tools 9 | .ibox-content 10 | 11 | = simple_form_for ["manage", @template] do |f| 12 | = f.input :name 13 | = f.input :body, required: false 14 | = f.input :css, required: false 15 | = f.submit "crear" 16 | 17 | 18 | - content_for :javascript do 19 | 20 | :javascript 21 | 22 | 23 | $(function() { 24 | 25 | var editor_one = CodeMirror.fromTextArea(document.getElementById("template_body"), { 26 | lineNumbers: true, 27 | matchBrackets: true, 28 | styleActiveLine: true, 29 | theme: "elegant" 30 | }); 31 | 32 | var editor_two = CodeMirror.fromTextArea(document.getElementById("template_css"), { 33 | lineNumbers: true, 34 | matchBrackets: true, 35 | styleActiveLine: true, 36 | theme: "elegant" 37 | }); 38 | 39 | }); 40 | 41 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/_menu.haml: -------------------------------------------------------------------------------- 1 | .row.wrapper.page-heading 2 | .col-sm-4 3 | %h2 New Templates 4 | %ol.breadcrumb 5 | %li 6 | %a{:href => manage_templates_path} Templates 7 | 8 | - if @template.present? 9 | %li.active 10 | %strong= @template.name 11 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/edit.haml: -------------------------------------------------------------------------------- 1 | = render "menu" 2 | 3 | = render partial: "form" 4 | -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/index.haml: -------------------------------------------------------------------------------- 1 | 2 | = render "menu" 3 | 4 | .row 5 | .col-lg-12 6 | .wrapper.wrapper-content 7 | .ibox 8 | .ibox-title 9 | %h5 All Templates 10 | .ibox-tools 11 | %a.btn.btn-success.btn-xs{:href => new_manage_template_path } 12 | %i.fa.fa-plus 13 | Create new Template 14 | .ibox-content 15 | - @templates.each do |template| 16 | .col-sm-6.col-md-4 17 | .thumbnail 18 | %img{:alt => "300%x300", "data-holder-rendered" => "true", :src => "http://placehold.it/300x300"} 19 | .caption 20 | %h3#thumbnail-label 21 | = template.name 22 | %a.anchorjs-link{:href => "#thumbnail-label"} 23 | %span.anchorjs-icon 24 | %p 25 | %a.btn.btn-primary{:href => edit_manage_template_path(template), :role => "button"} 26 | %i.fa.fa-edit 27 | Edit 28 | %a.btn.btn-default{:href => manage_template_path(template), :role => "button", method: :delete, data: { confirm: "Are you sure?" }} 29 | %i.fa.fa-times 30 | Remove 31 | 32 | .clearfix -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/new.haml: -------------------------------------------------------------------------------- 1 | 2 | = render "menu" 3 | 4 | = render partial: "form" -------------------------------------------------------------------------------- /app/views/chaskiq/manage/templates/show.haml: -------------------------------------------------------------------------------- 1 | 2 | = render "menu" 3 | 4 | -------------------------------------------------------------------------------- /app/views/chaskiq/subscribers/_form.haml: -------------------------------------------------------------------------------- 1 | = simple_form_for(@subscriber, :url => campaign_subscribers_path(@campaign), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f| 2 | 3 | .form-group 4 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email" 5 | 6 | .form-group 7 | = f.input :name, :required => false, label: false, placeholder: "first name" 8 | 9 | .form-group 10 | = f.input :last_name, :required => false, label: false, placeholder: "last name" 11 | 12 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading" 13 | -------------------------------------------------------------------------------- /app/views/chaskiq/subscribers/delete.haml: -------------------------------------------------------------------------------- 1 | .middle-box.text-center.loginscreen.animated.fadeInDown 2 | %div 3 | %div 4 | %h1.logo-name 5 | + 6 | %h3= @campaign.name 7 | %p 8 | = @campaign.try(:tagline) 9 | 10 | = simple_form_for(@subscriber, :url => campaign_subscriber_path(@campaign, @subscriber), method: :delete, html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f| 11 | 12 | %h3 13 | = @subscriber.email 14 | 15 | = f.button :submit, "Unsubscribe now", :class => "btn btn-primary block full-width m-b", disable_with: "loading" 16 | 17 | 18 | %p.m-t 19 | %small 20 | = @campaign.name 21 | © 22 | = Time.now.year 23 | -------------------------------------------------------------------------------- /app/views/chaskiq/subscribers/edit.haml: -------------------------------------------------------------------------------- 1 | .middle-box.text-center.loginscreen.animated.fadeInDown 2 | %div 3 | %div 4 | %h1.logo-name 5 | + 6 | %h3= @campaign.name 7 | %p 8 | = @campaign.try(:tagline) 9 | 10 | %p Don't miss our next post! 11 | 12 | Update your subscription settings 13 | 14 | = simple_form_for(@subscriber, :url => campaign_subscriber_path(@campaign, @subscriber), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f| 15 | 16 | .form-group 17 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email" 18 | 19 | .form-group 20 | = f.input :name, :required => false, label: false, placeholder: "first name" 21 | 22 | .form-group 23 | = f.input :last_name, :required => false, label: false, placeholder: "last name" 24 | 25 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading" 26 | 27 | 28 | %p.m-t 29 | %small 30 | = @campaign.name 31 | © 32 | = Time.now.year 33 | -------------------------------------------------------------------------------- /app/views/chaskiq/subscribers/new.html.haml: -------------------------------------------------------------------------------- 1 | .middle-box.text-center.loginscreen.animated.fadeInDown 2 | %div 3 | %div 4 | .logo-name 5 | = image_tag @campaign.logo, with: 200 6 | 7 | %h3= @campaign.name 8 | %p 9 | = @campaign.try(:tagline) 10 | 11 | %p Suscribete a nuestro newsletter 12 | 13 | = @campaign.description 14 | 15 | = simple_form_for(@subscriber, :url => campaign_subscribers_path(@campaign), html: {class: 'm-t', role: "form" }, :defaults => { :input_html => { :class => "form-control" } }) do |f| 16 | 17 | .form-group 18 | = f.input :email, :required => false, :autofocus => true, :label=> false, :placeholder=> "email" 19 | 20 | .form-group 21 | = f.input :name, :required => false, label: false, placeholder: "first name" 22 | 23 | .form-group 24 | = f.input :last_name, :required => false, label: false, placeholder: "last name" 25 | 26 | = f.button :submit, "Sign in", :class => "btn btn-primary block full-width m-b", disable_with: "loading" 27 | 28 | 29 | %p.m-t 30 | %small 31 | = @campaign.name 32 | © 33 | = Time.now.year 34 | -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_first_page.html.erb: -------------------------------------------------------------------------------- 1 | <%# Link to the "First" page 2 | - available local variables 3 | url: url to the first page 4 | current_page: a page object for the currently displayed page 5 | num_pages: total number of pages 6 | per_page: number of items to fetch per page 7 | remote: data-remote 8 | -%> 9 | <% unless current_page.first? %> 10 |
  • 11 | <%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, :remote => remote %> 12 |
  • 13 | <% end %> -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_gap.html.erb: -------------------------------------------------------------------------------- 1 | <%# Non-link tag that stands for skipped pages... 2 | - available local variables 3 | current_page: a page object for the currently displayed page 4 | num_pages: total number of pages 5 | per_page: number of items to fetch per page 6 | remote: data-remote 7 | -%> 8 |
  • <%= raw(t 'views.pagination.truncate') %>
  • -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_last_page.html.erb: -------------------------------------------------------------------------------- 1 | <%# Link to the "Last" page 2 | - available local variables 3 | url: url to the last page 4 | current_page: a page object for the currently displayed page 5 | num_pages: total number of pages 6 | per_page: number of items to fetch per page 7 | remote: data-remote 8 | -%> 9 | <% unless current_page.last? %> 10 | 13 | <% end %> 14 | -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_next_page.html.erb: -------------------------------------------------------------------------------- 1 | <%# Link to the "Next" page 2 | - available local variables 3 | url: url to the next page 4 | current_page: a page object for the currently displayed page 5 | num_pages: total number of pages 6 | per_page: number of items to fetch per page 7 | remote: data-remote 8 | -%> 9 | <% unless current_page.last? %> 10 |
  • 11 | <%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %> 12 |
  • 13 | <% end %> 14 | -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_page.html.erb: -------------------------------------------------------------------------------- 1 | <%# Link showing page number 2 | - available local variables 3 | page: a page object for "this" page 4 | url: url to this page 5 | current_page: a page object for the currently displayed page 6 | num_pages: total number of pages 7 | per_page: number of items to fetch per page 8 | remote: data-remote 9 | -%> 10 |
  • 11 | <%= link_to page, url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %> 12 |
  • 13 | -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_paginator.html.erb: -------------------------------------------------------------------------------- 1 | <%# The container tag 2 | - available local variables 3 | current_page: a page object for the currently displayed page 4 | num_pages: total number of pages 5 | per_page: number of items to fetch per page 6 | remote: data-remote 7 | paginator: the paginator that renders the pagination tags inside 8 | -%> 9 | <%- pagination_class ||= '' %> 10 | <%= paginator.render do -%> 11 | 24 | <% end -%> 25 | -------------------------------------------------------------------------------- /app/views/kaminari/twitter-bootstrap-3/_prev_page.html.erb: -------------------------------------------------------------------------------- 1 | <%# Link to the "Previous" page 2 | - available local variables 3 | url: url to the previous page 4 | current_page: a page object for the currently displayed page 5 | num_pages: total number of pages 6 | per_page: number of items to fetch per page 7 | remote: data-remote 8 | -%> 9 | <% unless current_page.first? %> 10 | 13 | <% end %> 14 | -------------------------------------------------------------------------------- /app/views/layouts/chaskiq/_footer.haml: -------------------------------------------------------------------------------- 1 | .footer 2 | .pull-right 3 | Chaskiq 4 | %div 5 | %strong Chaskiq 6 | © #{Time.now.year} 7 | -------------------------------------------------------------------------------- /app/views/layouts/chaskiq/_topnavbar.html.haml: -------------------------------------------------------------------------------- 1 | 2 | %header.navbar.navbar-default.navbar-fixed-top{:role => "banner"} 3 | .container 4 | .navbar-header 5 | %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", :type => "button"} 6 | %span.sr-only Toggle navigation 7 | %span.icon-bar 8 | %span.icon-bar 9 | %span.icon-bar 10 | %a.navbar-brand{:href => "/"} CHASKIQ 11 | %nav.collapse.navbar-collapse{:role => "navigation"} 12 | %ul.nav.navbar-nav 13 | %li 14 | = link_to "Campaigns", manage_campaigns_path 15 | %li 16 | = link_to "Lists", manage_lists_path 17 | %li 18 | = link_to "Templates", manage_templates_path 19 | 20 | %ul.nav.navbar-right.navbar-nav 21 | %li.dropdown 22 | %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "#"} 23 | %i.glyphicon.glyphicon-search 24 | %ul.dropdown-menu 25 | %li 26 | %a{href: ""} 27 | %i.fa.fa-sign-out 28 | Log out -------------------------------------------------------------------------------- /app/views/layouts/chaskiq/empty.html.haml: -------------------------------------------------------------------------------- 1 | !!! 2 | %html 3 | %head 4 | %meta{:charset => "utf-8"}/ 5 | %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/ 6 | %title Chaskiq 7 | / Include style per-controller - vendor plugins 8 | -#= stylesheet_link_tag params[:controller] if ::Rails.application.assets.find_asset("#{params[:controller]}.css") 9 | / Main css styles 10 | = stylesheet_link_tag 'chaskiq/application', media: 'all', 'data-turbolinks-track' => true 11 | / Main javascript files 12 | = javascript_include_tag 'chaskiq/application', 'data-turbolinks-track' => true 13 | = csrf_meta_tags 14 | %body.gray-bg 15 | / Main view 16 | = yield 17 | / Include javascript per-controller - vendor plugins 18 | -#= javascript_include_tag params[:controller] if ::Rails.application.assets.find_asset("#{params[:controller]}.js") 19 | 20 | / Include javascript per-view 21 | / For demo purpose we include javascript in view but you can easily start SeedProject and organize it with Rails asset pipeline as you want 22 | = yield :javascript 23 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.html.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /app/views/layouts/mailer.text.erb: -------------------------------------------------------------------------------- 1 | <%= yield %> 2 | -------------------------------------------------------------------------------- /app/views/shared/_account_stats.haml: -------------------------------------------------------------------------------- 1 | .line.section 2 | .lastUnit.size1of1.below18 3 | %h3.nomargin 4 | Hello: 5 | %span User 6 | .unit.size1of2.below18 7 | .count.alignr 8 | %strong.float-left Subscribers 9 | %a{:href => "/lists/", :title => "View All Subscribers"} 0 10 | of #{Chaskiq::Subscriber.count} 11 | .meter.mar-b0 12 | %span{:style => "width:0%"} 13 | .lastUnit.size1of2 14 | .count.alignr 15 | %strong.float-left Sends 16 | 1 of 12,000 17 | -------------------------------------------------------------------------------- /app/views/shared/_flashes.haml: -------------------------------------------------------------------------------- 1 | - flash.each do |type, message| 2 | %div.alert.alert-fixed.fade.in{ :class => "alert-#{type}" } 3 | %button.close{"data-dismiss" => "alert", :type => "button"} × 4 | = message 5 | - flash.clear -------------------------------------------------------------------------------- /app/views/shared/_main_nav.haml: -------------------------------------------------------------------------------- 1 | .col-sm-3.col-md-2.sidebar 2 | %ul.nav.nav-sidebar 3 | %li.active 4 | %a{:href => campaigns_path} Campaings 5 | %li 6 | %a{:href => lists_path} Lists 7 | %li 8 | %a{:href => templates_path} Templates 9 | -------------------------------------------------------------------------------- /app/views/shared/_menu.haml: -------------------------------------------------------------------------------- 1 | %nav.navbar.navbar-default.navbar-fixed-top 2 | .container-fluid 3 | .navbar-header 4 | %button.navbar-toggle.collapsed{"aria-controls" => "navbar", "aria-expanded" => "false", "data-target" => "#navbar", "data-toggle" => "collapse", :type => "button"} 5 | %span.sr-only Toggle navigation 6 | %span.icon-bar 7 | %span.icon-bar 8 | %span.icon-bar 9 | %a.navbar-brand{:href => "#"} Chaskiq 10 | #navbar.navbar-collapse.collapse 11 | %ul.nav.navbar-nav.navbar-right 12 | %li 13 | %a{:href => "#"} Dashboard 14 | %li 15 | %a{:href => "#"} Settings 16 | %li 17 | %a{:href => "#"} Profile 18 | %li 19 | %a{:href => "#"} Help 20 | %form.navbar-form.navbar-right 21 | %input.form-control{:placeholder => "Search...", :type => "text"}/ -------------------------------------------------------------------------------- /app/views/shared/_modal.haml: -------------------------------------------------------------------------------- 1 | #myModal.modal.fade 2 | .modal-dialog 3 | .modal-content 4 | .modal-header 5 | %button.close{"data-dismiss" => "modal", :type => "button"} 6 | %span{"aria-hidden" => "true"} × 7 | %span.sr-only Close 8 | %h4.modal-title Modal title 9 | .modal-body 10 | %p One fine body… 11 | .modal-footer 12 | %button.btn.btn-default{"data-dismiss" => "modal", :type => "button"} Close 13 | %button.btn.btn-primary{:type => "button"} Save changes 14 | -------------------------------------------------------------------------------- /bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application. 3 | 4 | ENGINE_ROOT = File.expand_path('../..', __FILE__) 5 | ENGINE_PATH = File.expand_path('../../lib/chaskiq/engine', __FILE__) 6 | 7 | # Set up gems listed in the Gemfile. 8 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 9 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) 10 | 11 | require 'rails/all' 12 | require 'rails/engine/commands' 13 | -------------------------------------------------------------------------------- /chaskiq-admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/chaskiq-admin.png -------------------------------------------------------------------------------- /config/initializers/kaminari_config.rb: -------------------------------------------------------------------------------- 1 | Kaminari.configure do |config| 2 | # config.default_per_page = 25 3 | # config.max_per_page = nil 4 | # config.window = 4 5 | # config.outer_window = 0 6 | # config.left = 0 7 | # config.right = 0 8 | # config.page_method_name = :page 9 | # config.param_name = :page 10 | end 11 | -------------------------------------------------------------------------------- /config/routes.rb: -------------------------------------------------------------------------------- 1 | Chaskiq::Engine.routes.draw do 2 | 3 | root 'dashboard#show' 4 | 5 | #public 6 | resources :campaigns, only: :show do 7 | member do 8 | get :subscribe 9 | get :unsubscribe 10 | get :forward 11 | end 12 | 13 | resources :subscribers do 14 | member do 15 | get :delete 16 | end 17 | end 18 | 19 | resources :tracks do 20 | member do 21 | get :click 22 | get :open 23 | get :bounce 24 | get :spam 25 | end 26 | end 27 | end 28 | 29 | #private 30 | scope 'manage',as: :manage do 31 | resources :campaigns, controller: 'manage/campaigns' do 32 | resources :wizard, controller: 'manage/campaign_wizard' 33 | member do 34 | get :preview 35 | get :premailer_preview 36 | get :test 37 | get :deliver 38 | get :clone 39 | get :editor 40 | get :purge 41 | get :iframe 42 | end 43 | resources :attachments, controller: 'manage/attachments' 44 | resources :metrics, controller: 'manage/metrics' 45 | end 46 | 47 | resources :lists, controller: 'manage/lists' do 48 | member do 49 | patch :upload 50 | get :clear 51 | end 52 | resources :subscribers, controller: 'manage/subscribers' 53 | end 54 | resources :templates, controller: 'manage/templates' 55 | end 56 | 57 | resources :hooks do 58 | collection do 59 | end 60 | end 61 | 62 | end 63 | -------------------------------------------------------------------------------- /db/migrate/20150318021006_create_chaskiq_campaigns.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqCampaigns < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_campaigns do |t| 4 | t.string :subject 5 | t.string :from_name 6 | t.string :from_email 7 | t.string :reply_email 8 | t.text :plain_content 9 | t.text :html_content 10 | t.text :premailer 11 | t.text :description 12 | t.string :logo 13 | t.string :name 14 | t.string :query_string 15 | t.datetime :scheduled_at 16 | t.string :timezone 17 | t.string :state 18 | t.integer :recipients_count 19 | t.boolean :sent 20 | t.integer :opens_count 21 | t.integer :clicks_count 22 | t.references :parent, index: true 23 | 24 | t.timestamps null: false 25 | end 26 | add_reference :chaskiq_campaigns, :list, index: true 27 | add_reference :chaskiq_campaigns, :template, index: true 28 | #add_foreign_key :chaskiq_campaigns, :chaskiq_templates 29 | #add_foreign_key :chaskiq_campaigns, :parents 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /db/migrate/20150318021239_create_chaskiq_templates.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqTemplates < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_templates do |t| 4 | t.string :name 5 | t.text :body 6 | t.text :html_content 7 | t.string :screenshot 8 | 9 | t.timestamps null: false 10 | end 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /db/migrate/20150318021424_create_chaskiq_lists.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqLists < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_lists do |t| 4 | t.string :name 5 | t.string :state 6 | t.integer :unsubscribe_count 7 | t.integer :bounced 8 | t.integer :active_count 9 | 10 | t.timestamps null: false 11 | end 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /db/migrate/20150318022506_create_chaskiq_subscribers.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqSubscribers < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_subscribers do |t| 4 | t.string :name 5 | t.string :email 6 | t.string :state 7 | t.string :last_name 8 | 9 | t.references :list, index: true 10 | 11 | t.timestamps null: false 12 | end 13 | #add_foreign_key :chaskiq_subscribers, :chaskiq_lists 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /db/migrate/20150318023136_create_chaskiq_attachments.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqAttachments < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_attachments do |t| 4 | t.string :image 5 | t.string :content_type 6 | t.integer :size 7 | t.string :name 8 | t.references :campaign, index: true 9 | 10 | t.timestamps null: false 11 | end 12 | #add_foreign_key :chaskiq_attachments, :chaskiq_campaigns 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /db/migrate/20150320031404_create_chaskiq_metrics.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqMetrics < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_metrics do |t| 4 | t.references :trackable, polymorphic: true, index: true, null: false 5 | t.references :campaign, index: true 6 | t.string :action 7 | t.string :host 8 | t.string :data 9 | t.timestamps null: false 10 | end 11 | #add_foreign_key :chaskiq_metrics, :trackable 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /db/migrate/20150321205815_create_chaskiq_settings.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqSettings < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_settings do |t| 4 | t.text :config 5 | t.references :campaign, index: true 6 | 7 | t.timestamps null: false 8 | end 9 | #add_foreign_key :chaskiq_settings, :campaign 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /db/migrate/20150331022602_add_css_to_campaign.rb: -------------------------------------------------------------------------------- 1 | class AddCssToCampaign < ActiveRecord::Migration 2 | def change 3 | add_column :chaskiq_campaigns, :css, :text 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20150331025829_add_css_to_chaskiq_template.rb: -------------------------------------------------------------------------------- 1 | class AddCssToChaskiqTemplate < ActiveRecord::Migration 2 | def change 3 | add_column :chaskiq_templates, :css, :text 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /db/migrate/20150402201729_create_chaskiq_subscriptions.rb: -------------------------------------------------------------------------------- 1 | class CreateChaskiqSubscriptions < ActiveRecord::Migration 2 | def change 3 | create_table :chaskiq_subscriptions do |t| 4 | t.string :state 5 | t.references :campaign, index: true 6 | t.references :subscriber, index: true 7 | t.references :list, index: true 8 | t.timestamps null: false 9 | end 10 | #add_foreign_key :chaskiq_subscriptions, :campaigns 11 | #add_foreign_key :chaskiq_subscriptions, :subscribers 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /lib/chaskiq.rb: -------------------------------------------------------------------------------- 1 | require 'chaskiq/engine' 2 | require 'haml' 3 | require 'simple_form' 4 | require 'kaminari' 5 | require 'font-awesome-rails' 6 | require 'bootstrap-sass' 7 | require 'chaskiq/engine' 8 | require 'urlcrypt' 9 | require 'cocoon' 10 | require 'mustache' 11 | require 'dotenv' 12 | require 'carrierwave' 13 | require 'coffee-rails' 14 | require 'premailer' 15 | require 'groupdate' 16 | require 'chartkick' 17 | require 'jquery-rails' 18 | require 'deep_cloneable' 19 | require 'aws/ses' 20 | require 'ransack' 21 | 22 | Dotenv.load 23 | 24 | module Chaskiq 25 | autoload :VERSION, 'chaskiq/version' 26 | autoload :Config, 'chaskiq/config' 27 | autoload :CsvImporter, 'chaskiq/csv_importer' 28 | autoload :LinkRenamer, 'chaskiq/link_renamer' 29 | end 30 | -------------------------------------------------------------------------------- /lib/chaskiq/csv_importer.rb: -------------------------------------------------------------------------------- 1 | require "csv" 2 | 3 | module Chaskiq 4 | class CsvImporter 5 | 6 | def import(file_path) 7 | file = File.open(file_path) 8 | CSV.parse(file.read) 9 | end 10 | 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /lib/chaskiq/engine.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | class Engine < ::Rails::Engine 3 | isolate_namespace Chaskiq 4 | 5 | config.generators do |g| 6 | g.test_framework :rspec 7 | g.fixture_replacement :factory_girl, :dir => 'spec/factories' 8 | g.integration_tool :rspec 9 | end 10 | 11 | config.autoload_paths += Dir["#{config.root}/app/jobs"] 12 | 13 | config.action_mailer.delivery_method = :ses 14 | 15 | config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico) 16 | config.assets.precompile += %w(chaskiq/manage/campaign_wizard.css chaskiq/iframe.js ) 17 | config.assets.precompile += %w(font-awesome.css) 18 | initializer "chaskiq_setup", :after => :load_config_initializers, :group => :all do 19 | Chaskiq::Config.configure! 20 | end 21 | end 22 | end 23 | 24 | -------------------------------------------------------------------------------- /lib/chaskiq/link_renamer.rb: -------------------------------------------------------------------------------- 1 | require "nokogiri" 2 | 3 | module Chaskiq 4 | class LinkRenamer 5 | 6 | def self.convert(html, url_prefix="") 7 | content = Nokogiri::HTML(html) 8 | content.css("a").each do |link| 9 | next if link.attr("class").present? && link.attr("class").include?("tpl-block") 10 | val = link.attributes["href"].value 11 | link.attributes["href"].value = self.rename_link(val, url_prefix) 12 | end 13 | 14 | #content.css("div").each do |node| 15 | # if node.content !~ /\A\s*\Z/ 16 | # node.replace(content.create_element('p', node.inner_html.html_safe)) 17 | # end 18 | #end 19 | 20 | content.css('div.mojoMcContainerEmptyMessage').remove 21 | 22 | #make sure nokogiri does not rips off my mustaches 23 | content.to_html.gsub("%7B%7B", "{{").gsub("%7D%7D", "}}") 24 | end 25 | 26 | def self.rename_link(value, url_prefix) 27 | "#{url_prefix}" + value 28 | end 29 | 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /lib/chaskiq/version.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | VERSION = "0.0.6" 3 | end 4 | -------------------------------------------------------------------------------- /lib/generators/chaskiq/install_generator.rb: -------------------------------------------------------------------------------- 1 | require 'securerandom' 2 | 3 | module Chaskiq 4 | module Generators 5 | class InstallGenerator < Rails::Generators::Base 6 | source_root File.expand_path("../templates", __FILE__) 7 | 8 | desc "Creates Chaskiq initializer, routes and copy locale files to your application." 9 | class_option :orm 10 | 11 | def copy_initializer 12 | #@underscored_user_name = "user".underscore 13 | template '../templates/chaskiq.rb.erb', 'config/initializers/chaskiq.rb' 14 | end 15 | 16 | def setup_routes 17 | route "mount Chaskiq::Engine => '/'" 18 | end 19 | 20 | #def self.source_root 21 | # File.expand_path("../templates", __FILE__) 22 | #end 23 | 24 | def create_migrations 25 | exec 'bundle exec rake chaskiq:install:migrations' 26 | #Dir["#{self.class.source_root}/migrations/*.rb"].sort.each do |filepath| 27 | # name = File.basename(filepath) 28 | # template "migrations/#{name}", "db/migrate/#{name}" 29 | # sleep 1 30 | #end 31 | end 32 | end 33 | end 34 | end -------------------------------------------------------------------------------- /lib/generators/chaskiq/templates/chaskiq.rb.erb: -------------------------------------------------------------------------------- 1 | require "chaskiq" 2 | 3 | Chaskiq::Config.setup do |config| 4 | #config.authentication_method = :authenticate_user! 5 | config.ses_access_key = ENV['FOG_ACCESS_KEY_ID'] 6 | config.ses_access_secret_key = ENV['FOG_SECRET_ACCESS_KEY'] 7 | config.s3_bucket = ENV['FOG_BUCKET'] 8 | config.chaskiq_secret_key = "chaskiq123" 9 | end -------------------------------------------------------------------------------- /lib/tasks/chaskiq_tasks.rake: -------------------------------------------------------------------------------- 1 | # desc "Explaining what the task does" 2 | # task :chaskiq do 3 | # # Task goes here 4 | # end 5 | namespace :chaskiq do 6 | task update_subs: :environment do 7 | Chaskiq::Subscriber.all.each do |s| 8 | sub = s.subscriptions.new 9 | sub.list_id = s.list_id 10 | sub.state = s.state 11 | sub.save 12 | end 13 | end 14 | 15 | task update_metrics: :environment do 16 | Chaskiq::Metric.all.each do |m| 17 | subscription = m.trackable 18 | 19 | if !subscription.blank? && subscription.kind_of?(Chaskiq::Subscriber) 20 | m.trackable = subscription.subscriptions.first 21 | m.save 22 | puts "yes" 23 | end 24 | end 25 | end 26 | end -------------------------------------------------------------------------------- /spec/.ruby_version: -------------------------------------------------------------------------------- 1 | 2.1.0 -------------------------------------------------------------------------------- /spec/controllers/chaskiq/campaigns_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe CampaignsController, type: :controller do 5 | 6 | render_views 7 | routes { Chaskiq::Engine.routes } 8 | let(:list){ FactoryGirl.create(:chaskiq_list) } 9 | let(:subscriber){ 10 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber) 11 | } 12 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, list: list) } 13 | 14 | 15 | it "will show campaign!" do 16 | campaign 17 | response = get("show", id: campaign.id) 18 | expect(response.status).to be == 200 19 | expect(response.body).to include "subscribe" 20 | expect(response.body).to include campaign.name 21 | end 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/dashboard_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe DashboardController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/attachments_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::AttachmentsController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/campaign_wizard_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::CampaignWizardController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/campaigns_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::CampaignsController, type: :controller do 5 | routes { Chaskiq::Engine.routes } 6 | 7 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign) } 8 | 9 | before do 10 | campaign 11 | end 12 | 13 | it "will render index" do 14 | response = get :index 15 | expect(response).to render_template(:index) 16 | expect(assigns(:campaigns)).to eq(Chaskiq::Campaign.all) 17 | end 18 | 19 | it "will render show" do 20 | response = get :show , id: campaign.id 21 | expect(response).to render_template(:show) 22 | expect(assigns(:campaign)).to eq(campaign) 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/lists_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::ListsController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/metrics_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::MetricsController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/manage/templates_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Manage::TemplatesController, type: :controller do 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/controllers/chaskiq/tracks_controller_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe TracksController, type: :controller do 5 | 6 | routes { Chaskiq::Engine.routes } 7 | let(:list){ FactoryGirl.create(:chaskiq_list) } 8 | let(:subscriber){ 9 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber) 10 | } 11 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, list: list) } 12 | 13 | %w[open bounce spam].each do |action| 14 | it "will track an #{action}" do 15 | campaign 16 | response = get(action , campaign_id: campaign.id, id: subscriber.encoded_id) 17 | expect(response.status).to be == 200 18 | expect(campaign.metrics.send(action.pluralize).size).to be == 1 19 | expect(response.content_type).to be == "image/gif" 20 | end 21 | end 22 | 23 | it "will track a click and redirect" do 24 | campaign 25 | response = get("click" , campaign_id: campaign.id, id: subscriber.encoded_id, r: "http://google.com") 26 | expect(response.status).to be == 302 27 | expect(campaign.metrics.clicks.size).to be == 1 28 | expect(response).to redirect_to "http://google.com" 29 | end 30 | 31 | end 32 | end 33 | -------------------------------------------------------------------------------- /spec/dummy/.env.example: -------------------------------------------------------------------------------- 1 | FOG_ACCESS_KEY_ID="xxxx" 2 | FOG_SECRET_ACCESS_KEY="xxx" 3 | FOG_BUCKET="xxx" -------------------------------------------------------------------------------- /spec/dummy/Procfile: -------------------------------------------------------------------------------- 1 | worker: bundle exec sidekiq -q default -q mailers 2 | web: bundle exec rainbows -c config/rainbows.rb -p 3000 -------------------------------------------------------------------------------- /spec/dummy/README.rdoc: -------------------------------------------------------------------------------- 1 | == README 2 | 3 | This README would normally document whatever steps are necessary to get the 4 | application up and running. 5 | 6 | Things you may want to cover: 7 | 8 | * Ruby version 9 | 10 | * System dependencies 11 | 12 | * Configuration 13 | 14 | * Database creation 15 | 16 | * Database initialization 17 | 18 | * How to run the test suite 19 | 20 | * Services (job queues, cache servers, search engines, etc.) 21 | 22 | * Deployment instructions 23 | 24 | * ... 25 | 26 | 27 | Please feel free to use a different markup language if you do not plan to run 28 | rake doc:app. 29 | -------------------------------------------------------------------------------- /spec/dummy/Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require File.expand_path('../config/application', __FILE__) 5 | 6 | Rails.application.load_tasks 7 | -------------------------------------------------------------------------------- /spec/dummy/app/assets/images/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/app/assets/images/.keep -------------------------------------------------------------------------------- /spec/dummy/app/assets/javascripts/application.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into application.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, 5 | // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the 8 | // compiled file. 9 | // 10 | // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details 11 | // about supported directives. 12 | // 13 | //= require_tree . 14 | -------------------------------------------------------------------------------- /spec/dummy/app/assets/stylesheets/application.css: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a manifest file that'll be compiled into application.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, 6 | * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. 7 | * 8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the 9 | * compiled file so the styles you add here take precedence over styles defined in any styles 10 | * defined in the other CSS/SCSS files in this directory. It is generally better to create a new 11 | * file per style scope. 12 | * 13 | *= require_tree . 14 | *= require_self 15 | */ 16 | -------------------------------------------------------------------------------- /spec/dummy/app/controllers/application_controller.rb: -------------------------------------------------------------------------------- 1 | class ApplicationController < ActionController::Base 2 | # Prevent CSRF attacks by raising an exception. 3 | # For APIs, you may want to use :null_session instead. 4 | protect_from_forgery with: :exception 5 | end 6 | -------------------------------------------------------------------------------- /spec/dummy/app/controllers/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/app/controllers/concerns/.keep -------------------------------------------------------------------------------- /spec/dummy/app/helpers/application_helper.rb: -------------------------------------------------------------------------------- 1 | module ApplicationHelper 2 | end 3 | -------------------------------------------------------------------------------- /spec/dummy/app/mailers/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/app/mailers/.keep -------------------------------------------------------------------------------- /spec/dummy/app/models/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/app/models/.keep -------------------------------------------------------------------------------- /spec/dummy/app/models/concerns/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/app/models/concerns/.keep -------------------------------------------------------------------------------- /spec/dummy/app/views/layouts/application.html.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Dummy 5 | <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 6 | <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 7 | <%= csrf_meta_tags %> 8 | 9 | 10 | 11 | <%= yield %> 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /spec/dummy/bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | load Gem.bin_path('bundler', 'bundle') 4 | -------------------------------------------------------------------------------- /spec/dummy/bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path('../../config/application', __FILE__) 3 | require_relative '../config/boot' 4 | require 'rails/commands' 5 | -------------------------------------------------------------------------------- /spec/dummy/bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /spec/dummy/bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | 4 | # path to your application root. 5 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 6 | 7 | Dir.chdir APP_ROOT do 8 | # This script is a starting point to setup your application. 9 | # Add necessary setup steps to this file: 10 | 11 | puts "== Installing dependencies ==" 12 | system "gem install bundler --conservative" 13 | system "bundle check || bundle install" 14 | 15 | # puts "\n== Copying sample files ==" 16 | # unless File.exist?("config/database.yml") 17 | # system "cp config/database.yml.sample config/database.yml" 18 | # end 19 | 20 | puts "\n== Preparing database ==" 21 | system "bin/rake db:setup" 22 | 23 | puts "\n== Removing old logs and tempfiles ==" 24 | system "rm -f log/*" 25 | system "rm -rf tmp/cache" 26 | 27 | puts "\n== Restarting application server ==" 28 | system "touch tmp/restart.txt" 29 | end 30 | -------------------------------------------------------------------------------- /spec/dummy/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Rails.application 5 | -------------------------------------------------------------------------------- /spec/dummy/config/application.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path('../boot', __FILE__) 2 | 3 | require 'rails/all' 4 | 5 | Bundler.require(*Rails.groups) 6 | require "chaskiq" 7 | 8 | module Dummy 9 | class Application < Rails::Application 10 | # Settings in config/environments/* take precedence over those specified here. 11 | # Application configuration should go into files in config/initializers 12 | # -- all .rb files in that directory are automatically loaded. 13 | 14 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 15 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 16 | # config.time_zone = 'Central Time (US & Canada)' 17 | 18 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 19 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 20 | # config.i18n.default_locale = :de 21 | config.active_job.queue_adapter = :sidekiq 22 | # Do not swallow errors in after_commit/after_rollback callbacks. 23 | config.active_record.raise_in_transactional_callbacks = true 24 | 25 | end 26 | end 27 | 28 | -------------------------------------------------------------------------------- /spec/dummy/config/boot.rb: -------------------------------------------------------------------------------- 1 | # Set up gems listed in the Gemfile. 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__) 3 | 4 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) 5 | $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) 6 | -------------------------------------------------------------------------------- /spec/dummy/config/database.yml: -------------------------------------------------------------------------------- 1 | # SQLite version 3.x 2 | # gem install sqlite3 3 | # 4 | # Ensure the SQLite 3 gem is defined in your Gemfile 5 | # gem 'sqlite3' 6 | # 7 | 8 | 9 | # SQLite version 3.x 10 | # gem install sqlite3 11 | # 12 | # Ensure the SQLite 3 gem is defined in your Gemfile 13 | # gem 'sqlite3' 14 | development: 15 | adapter: mysql2 16 | database: chasky_dev 17 | username: root 18 | password: 19 | host: 127.0.0.1 20 | pool: 22 21 | 22 | # Warning: The database defined as "test" will be erased and 23 | # re-generated from your development database when you run "rake". 24 | # Do not set this db to the same as development or production. 25 | test: 26 | adapter: mysql2 27 | database: chasky_test 28 | username: root 29 | password: 30 | host: 127.0.0.1 31 | pool: 5 32 | 33 | # 34 | #default: &default 35 | # adapter: sqlite3 36 | # pool: 5 37 | # timeout: 5000 38 | 39 | #development: 40 | # <<: *default 41 | # database: db/development.sqlite3 42 | 43 | # Warning: The database defined as "test" will be erased and 44 | # re-generated from your development database when you run "rake". 45 | # Do not set this db to the same as development or production. 46 | #test: 47 | # <<: *default 48 | # database: db/test.sqlite3 49 | 50 | #production: 51 | # <<: *default 52 | # database: db/production.sqlite3 53 | -------------------------------------------------------------------------------- /spec/dummy/config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the Rails application. 5 | Rails.application.initialize! 6 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/assets.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Version of your assets, change this if you want to expire all your assets. 4 | Rails.application.config.assets.version = '1.0' 5 | 6 | # Add additional assets to the asset load path 7 | # Rails.application.config.assets.paths << Emoji.images_path 8 | 9 | # Precompile additional assets. 10 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 11 | # Rails.application.config.assets.precompile += %w( search.js ) 12 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/chaskiq.rb: -------------------------------------------------------------------------------- 1 | require "chaskiq" 2 | 3 | Chaskiq::Config.setup do |config| 4 | #config.authentication_method = :authenticate_user! 5 | config.ses_access_key = ENV['FOG_ACCESS_KEY_ID'] 6 | config.ses_access_secret_key = ENV['FOG_SECRET_ACCESS_KEY'] 7 | config.s3_bucket = ENV['FOG_BUCKET'] 8 | config.chaskiq_secret_key = "chaskiq123" 9 | end -------------------------------------------------------------------------------- /spec/dummy/config/initializers/cookies_serializer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Rails.application.config.action_dispatch.cookies_serializer = :json 4 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure sensitive parameters which will be filtered from the log file. 4 | Rails.application.config.filter_parameters += [:password] 5 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, '\1en' 8 | # inflect.singular /^(ox)en/i, '\1' 9 | # inflect.irregular 'person', 'people' 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym 'RESTful' 16 | # end 17 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Rails.application.config.session_store :cookie_store, key: '_dummy_session' 4 | -------------------------------------------------------------------------------- /spec/dummy/config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] if respond_to?(:wrap_parameters) 9 | end 10 | 11 | # To enable root element in JSON for ActiveRecord objects. 12 | # ActiveSupport.on_load(:active_record) do 13 | # self.include_root_in_json = true 14 | # end 15 | -------------------------------------------------------------------------------- /spec/dummy/config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t 'hello' 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t('hello') %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # To learn more, please read the Rails Internationalization guide 20 | # available at http://guides.rubyonrails.org/i18n.html. 21 | 22 | en: 23 | hello: "Hello world" 24 | -------------------------------------------------------------------------------- /spec/dummy/config/rainbows.rb: -------------------------------------------------------------------------------- 1 | worker_processes 3 2 | timeout 30 3 | preload_app true 4 | 5 | Rainbows! do 6 | use :EventMachine 7 | end 8 | 9 | before_fork do |server, worker| 10 | # Replace with MongoDB or whatever 11 | if defined?(ActiveRecord::Base) 12 | ActiveRecord::Base.connection.disconnect! 13 | end 14 | end -------------------------------------------------------------------------------- /spec/dummy/config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | 3 | mount Chaskiq::Engine => '/' 4 | require 'sidekiq/web' 5 | mount Sidekiq::Web => '/sidekiq' 6 | end 7 | -------------------------------------------------------------------------------- /spec/dummy/config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rake secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | development: 14 | secret_key_base: 04a8adbe50e879b4a055f16b81f10e3a29eeca9c6ba20e1e64abfd64392ec0ad714c6cfafe672a31738a2c2aca8d7cbc1bfbf36c155b32489beba3e0aec0309e 15 | 16 | test: 17 | secret_key_base: 301166d4fc01bbe749466d1e7576f909e189594db2a806ecdc09a84583617911b05e2eefc89bc1b6f361e97ce9d908366d0c19053a3bb974d61096324eeb756e 18 | 19 | # Do not keep production secrets in the repository, 20 | # instead read values from the environment. 21 | production: 22 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 23 | -------------------------------------------------------------------------------- /spec/dummy/lib/assets/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/lib/assets/.keep -------------------------------------------------------------------------------- /spec/dummy/log/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/log/.keep -------------------------------------------------------------------------------- /spec/dummy/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/spec/dummy/public/favicon.ico -------------------------------------------------------------------------------- /spec/factories/chaskiq_attachments.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_attachment, :class => 'Chaskiq::Attachment' do 5 | image "MyString" 6 | content_type "MyString" 7 | size 1 8 | name "MyString" 9 | campaign nil 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_campaigns.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_campaign, :class => 'Chaskiq::Campaign' do 5 | name "some Campaign" 6 | subject "Hello" 7 | from_name "Me" 8 | from_email "me@me.com" 9 | reply_email "reply-me@me.com" 10 | #plain_content "hi this is the plain content" 11 | #html_content "

    hi this is htmlcontent

    " 12 | #query_string "opt=1&out=2" 13 | #scheduled_at "2015-03-17 23:10:06" 14 | #timezone "utc-4" 15 | #recipients_count 1 16 | #sent false 17 | #opens_count 1 18 | #clicks_count 1 19 | #parent nil 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_lists.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_list, :class => 'Chaskiq::List' do 5 | name "MyString" 6 | #state "MyString" 7 | #unsubscribe_count 1 8 | #bounced 1 9 | #active_count 1 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_metrics.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_metric, :class => 'Chaskiq::Metric' do 5 | trackable nil 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_settings.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_setting, :class => 'Setting' do 5 | config "MyText" 6 | campaign nil 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_subscribers.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_subscriber, :class => 'Chaskiq::Subscriber' do 5 | 6 | sequence :email do |n| 7 | "person#{n}@example.com" 8 | end 9 | 10 | sequence :name do |n| 11 | "person #{n}" 12 | end 13 | 14 | sequence :last_name do |n| 15 | "#{n}son" 16 | end 17 | 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_subscriptions.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_subscription, :class => 'Subscription' do 5 | state "MyString" 6 | campaign nil 7 | subscriber nil 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /spec/factories/chaskiq_templates.rb: -------------------------------------------------------------------------------- 1 | # Read about factories at https://github.com/thoughtbot/factory_girl 2 | 3 | FactoryGirl.define do 4 | factory :chaskiq_template, :class => 'Chaskiq::Template' do 5 | name "MyString" 6 | body "

    this is the template

    " 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /spec/fixtures/csv_example.csv: -------------------------------------------------------------------------------- 1 | miguelmichelson@gmail.com,Miguel,Michelson Martinez 2 | jorge@numcero.cl,Jorge,Sepúlveda Tapia 3 | taoanarkripta@yahoo.com.ar,alvaro,prieto -------------------------------------------------------------------------------- /spec/helpers/chaskiq/campaigns_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the CampaignsHelper. For example: 5 | # 6 | # describe CampaignsHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe CampaignsHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/dashboard_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the DashboardHelper. For example: 5 | # 6 | # describe DashboardHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe DashboardHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/hooks_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the HooksHelper. For example: 5 | # 6 | # describe HooksHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe HooksHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/attachments_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::AttachmentsHelper. For example: 5 | # 6 | # describe Manage::AttachmentsHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::AttachmentsHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/campaigns_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::CampaignsHelper. For example: 5 | # 6 | # describe Manage::CampaignsHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::CampaignsHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/campain_wizard_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::CampainWizardHelper. For example: 5 | # 6 | # describe Manage::CampainWizardHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::CampainWizardHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/lists_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::ListsHelper. For example: 5 | # 6 | # describe Manage::ListsHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::ListsHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/metrics_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::MetricsHelper. For example: 5 | # 6 | # describe Manage::MetricsHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::MetricsHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/manage/templates_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the Manage::TemplatesHelper. For example: 5 | # 6 | # describe Manage::TemplatesHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe Manage::TemplatesHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/subscribers_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the SubscribersHelper. For example: 5 | # 6 | # describe SubscribersHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe SubscribersHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/helpers/chaskiq/tracks_helper_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | # Specs in this file have access to a helper object that includes 4 | # the TracksHelper. For example: 5 | # 6 | # describe TracksHelper do 7 | # describe "string concat" do 8 | # it "concats two strings with spaces" do 9 | # expect(helper.concat_strings("this","that")).to eq("this that") 10 | # end 11 | # end 12 | # end 13 | module Chaskiq 14 | RSpec.describe TracksHelper, type: :helper do 15 | pending "add some examples to (or delete) #{__FILE__}" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /spec/lib/config_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Config, type: :model do 5 | 6 | 7 | let(:chaskiq_config){ Chaskiq::Config } 8 | 9 | it "will setup" do 10 | chaskiq_config.setup do |config| 11 | config.mail_settings = { 12 | :address => "someuser@gmail.com", 13 | :user_name => "xxx", # Your SMTP user here. 14 | :password => "xxx", # Your SMTP password here. 15 | :authentication => :login, 16 | :enable_starttls_auto => true 17 | } 18 | end 19 | expect(chaskiq_config.mail_settings).to be_an_instance_of Hash 20 | expect(Chaskiq::Config.mail_settings).to be_an_instance_of Hash 21 | end 22 | 23 | end 24 | end 25 | -------------------------------------------------------------------------------- /spec/lib/csv_importer_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe CsvImporter, type: :model do 5 | 6 | 7 | let(:importer){ Chaskiq::CsvImporter.new } 8 | 9 | it "will initialize" do 10 | expect(importer).to be_an_instance_of Chaskiq::CsvImporter 11 | end 12 | 13 | it "will import data" do 14 | data = importer.import("spec/fixtures/csv_example.csv") 15 | expect(data.class).to be == Array 16 | expect(data.size).to be 3 17 | expect(data.first.size).to be 3 18 | end 19 | 20 | end 21 | end 22 | -------------------------------------------------------------------------------- /spec/lib/link_renamer_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe LinkRenamer, type: :model do 5 | 6 | let(:html) { "

    "} 7 | let(:renamer){ Chaskiq::LinkRenamer } 8 | 9 | it "will rename links" do 10 | data = renamer.convert(html, "AAA") 11 | expect(data).to include("AAA") 12 | end 13 | 14 | 15 | it "test_initialize_no_escape_attributes_option" do 16 | html = " 17 | Google 18 | Link 19 | " 20 | 21 | [:nokogiri].each do |adapter| 22 | pm = Premailer.new(html, :with_html_string => true, :adapter => adapter, :escape_url_attributes => false) 23 | pm.to_inline_css 24 | doc = pm.processed_doc 25 | expect( doc.at('#google')['href']).to be == 'http://google.com' 26 | expect(doc.at('#noescape')['href']).to be == '{{link_url}}' 27 | end 28 | end 29 | 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /spec/mailers/previews/chaskiq/campaign_mailer_preview.rb: -------------------------------------------------------------------------------- 1 | module Chaskiq 2 | # Preview all emails at http://localhost:3000/rails/mailers/campaign_mailer 3 | class CampaignMailerPreview < ActionMailer::Preview 4 | 5 | end 6 | end 7 | -------------------------------------------------------------------------------- /spec/models/chaskiq/attachment_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Attachment, type: :model do 5 | it{ should belong_to :campaign } 6 | 7 | end 8 | end 9 | -------------------------------------------------------------------------------- /spec/models/chaskiq/list_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe List, type: :model do 5 | it{ should have_many :subscribers } 6 | it{ should have_many :campaigns } 7 | 8 | 9 | describe "creation" do 10 | let(:list){FactoryGirl.create(:chaskiq_list)} 11 | 12 | it "will create a list" do 13 | Chaskiq::Subscriber.delete_all 14 | data = list.import_csv("spec/fixtures/csv_example.csv") 15 | expect(list.subscribers.size).to be 3 16 | end 17 | 18 | it "will not save repeated data" do 19 | Chaskiq::Subscriber.delete_all 20 | list.import_csv("spec/fixtures/csv_example.csv") 21 | list.import_csv("spec/fixtures/csv_example.csv") 22 | expect(list.subscribers.size).to be 3 23 | end 24 | 25 | end 26 | 27 | end 28 | end 29 | -------------------------------------------------------------------------------- /spec/models/chaskiq/metric_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Metric, type: :model do 5 | it{should belong_to :trackable} 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/models/chaskiq/setting_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Setting, type: :model do 5 | pending "add some examples to (or delete) #{__FILE__}" 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/models/chaskiq/subscriber_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | require 'urlcrypt' 3 | module Chaskiq 4 | RSpec.describe Subscriber, type: :model do 5 | it{ should have_many :subscriptions } 6 | it{ should have_many(:lists).through(:subscriptions) } 7 | it{ should have_many :metrics } 8 | it{ should have_many(:campaigns).through(:lists) } 9 | 10 | 11 | describe "states" do 12 | let(:subscriber){ FactoryGirl.create(:chaskiq_subscriber)} 13 | 14 | it "will set passive state" do 15 | #expect(subscriber).to be_passive 16 | end 17 | 18 | it "will notify susbscrition" do 19 | #expect(subscriber).to receive(:notify_subscription).once 20 | #subscriber.suscribe 21 | #expect(subscriber).to be_subscribed 22 | end 23 | 24 | it "will notify un susbscrition" do 25 | #expect(subscriber).to receive(:notify_unsubscription).once 26 | #subscriber.unsuscribe 27 | #expect(subscriber).to be_unsubscribed 28 | end 29 | 30 | it "encode decode email" do 31 | expect(subscriber.email).to_not be == subscriber.encoded_id 32 | expect(URLcrypt.encode(subscriber.email)).to be == subscriber.encoded_id 33 | end 34 | 35 | end 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /spec/models/chaskiq/subscription_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Subscription, type: :model do 5 | it{ should belong_to :list } 6 | it{ should belong_to :subscriber } 7 | it{ should have_many :campaigns } 8 | 9 | let(:template){ FactoryGirl.create(:chaskiq_template) } 10 | let(:list){ FactoryGirl.create(:chaskiq_list) } 11 | let(:subscriber){ 12 | list.create_subscriber FactoryGirl.attributes_for(:chaskiq_subscriber) 13 | } 14 | let(:campaign){ FactoryGirl.create(:chaskiq_campaign, template: template, list: list) } 15 | 16 | it "will set passive state" do 17 | subscriber 18 | expect(campaign.subscriptions.passive.size).to be == 1 19 | end 20 | 21 | it "will notify susbscrition" do 22 | sub = list.subscriptions.first 23 | #expect(sub).to receive(:notify_subscription).once 24 | list.subscribe(subscriber) 25 | expect(list.subscriptions.subscribed.map(&:subscriber)).to include subscriber 26 | end 27 | 28 | it "will notify un susbscrition" do 29 | #expect(subscriber).to receive(:notify_unsubscription).once 30 | list.unsubscribe(subscriber) 31 | expect(list.subscriptions.unsubscribed.map(&:subscriber)).to include subscriber 32 | end 33 | 34 | 35 | end 36 | end 37 | -------------------------------------------------------------------------------- /spec/models/chaskiq/template_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | module Chaskiq 4 | RSpec.describe Template, type: :model do 5 | it{ should have_many(:campaigns) } 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /spec/rails_helper.rb: -------------------------------------------------------------------------------- 1 | require "spec_helper.rb" -------------------------------------------------------------------------------- /vendor/assets/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/animated-overlay.gif -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/blueimp/img/error.png -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/blueimp/img/loading.gif -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/play-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/blueimp/img/play-pause.png -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/play-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/blueimp/img/video-play.png -------------------------------------------------------------------------------- /vendor/assets/images/blueimp/img/video-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /vendor/assets/images/bootstrap-colorpicker/alpha-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/bootstrap-colorpicker/alpha-horizontal.png -------------------------------------------------------------------------------- /vendor/assets/images/bootstrap-colorpicker/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/bootstrap-colorpicker/alpha.png -------------------------------------------------------------------------------- /vendor/assets/images/bootstrap-colorpicker/hue-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/bootstrap-colorpicker/hue-horizontal.png -------------------------------------------------------------------------------- /vendor/assets/images/bootstrap-colorpicker/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/bootstrap-colorpicker/hue.png -------------------------------------------------------------------------------- /vendor/assets/images/bootstrap-colorpicker/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/bootstrap-colorpicker/saturation.png -------------------------------------------------------------------------------- /vendor/assets/images/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/chosen-sprite.png -------------------------------------------------------------------------------- /vendor/assets/images/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/chosen-sprite@2x.png -------------------------------------------------------------------------------- /vendor/assets/images/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/green.png -------------------------------------------------------------------------------- /vendor/assets/images/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/green@2x.png -------------------------------------------------------------------------------- /vendor/assets/images/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/animated-overlay.gif -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /vendor/assets/images/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /vendor/assets/images/sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sort.png -------------------------------------------------------------------------------- /vendor/assets/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sort_asc.png -------------------------------------------------------------------------------- /vendor/assets/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sort_desc.png -------------------------------------------------------------------------------- /vendor/assets/images/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sprite-skin-flat.png -------------------------------------------------------------------------------- /vendor/assets/images/sprite-skin-flat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sprite-skin-flat2.png -------------------------------------------------------------------------------- /vendor/assets/images/sprite-skin-nice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sprite-skin-nice.png -------------------------------------------------------------------------------- /vendor/assets/images/sprite-skin-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/sprite-skin-simple.png -------------------------------------------------------------------------------- /vendor/assets/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/spritemap.png -------------------------------------------------------------------------------- /vendor/assets/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/images/spritemap@2x.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/.keep -------------------------------------------------------------------------------- /vendor/assets/javascripts/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /vendor/assets/javascripts/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-af.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.af={closeText:"Selekteer",prevText:"Vorige",nextText:"Volgende",currentText:"Vandag",monthNames:["Januarie","Februarie","Maart","April","Mei","Junie","Julie","Augustus","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrydag","Saterdag"],dayNamesShort:["Son","Maa","Din","Woe","Don","Vry","Sat"],dayNamesMin:["So","Ma","Di","Wo","Do","Vr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.af)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ar-DZ.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["ar-DZ"]={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["ar-DZ"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ar.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.ar={closeText:"إغلاق",prevText:"<السابق",nextText:"التالي>",currentText:"اليوم",monthNames:["كانون الثاني","شباط","آذار","نيسان","مايو","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesShort:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],dayNamesMin:["ح","ن","ث","ر","خ","ج","س"],weekHeader:"أسبوع",dateFormat:"dd/mm/yy",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ar)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-az.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.az={closeText:"Bağla",prevText:"<Geri",nextText:"İrəli>",currentText:"Bugün",monthNames:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthNamesShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],dayNames:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],dayNamesShort:["B","Be","Ça","Ç","Ca","C","Ş"],dayNamesMin:["B","B","Ç","С","Ç","C","Ş"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.az)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-be.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.be={closeText:"Зачыніць",prevText:"←Папяр.",nextText:"Наст.→",currentText:"Сёньня",monthNames:["Студзень","Люты","Сакавік","Красавік","Травень","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Сьнежань"],monthNamesShort:["Сту","Лют","Сак","Кра","Тра","Чэр","Ліп","Жні","Вер","Кас","Ліс","Сьн"],dayNames:["нядзеля","панядзелак","аўторак","серада","чацьвер","пятніца","субота"],dayNamesShort:["ндз","пнд","аўт","срд","чцв","птн","сбт"],dayNamesMin:["Нд","Пн","Аў","Ср","Чц","Пт","Сб"],weekHeader:"Тд",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.be)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-bg.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.bg={closeText:"затвори",prevText:"<назад",nextText:"напред>",nextBigText:">>",currentText:"днес",monthNames:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Яну","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Нов","Дек"],dayNames:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],dayNamesShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Съ"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bg)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-bs.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.bs={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Wk",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.bs)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ca.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.ca={closeText:"Tanca",prevText:"Anterior",nextText:"Següent",currentText:"Avui",monthNames:["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],monthNamesShort:["gen","feb","març","abr","maig","juny","jul","ag","set","oct","nov","des"],dayNames:["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],dayNamesShort:["dg","dl","dt","dc","dj","dv","ds"],dayNamesMin:["dg","dl","dt","dc","dj","dv","ds"],weekHeader:"Set",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.ca)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-cs.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.cs={closeText:"Zavřít",prevText:"<Dříve",nextText:"Později>",currentText:"Nyní",monthNames:["leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"],monthNamesShort:["led","úno","bře","dub","kvě","čer","čvc","srp","zář","říj","lis","pro"],dayNames:["neděle","pondělí","úterý","středa","čtvrtek","pátek","sobota"],dayNamesShort:["ne","po","út","st","čt","pá","so"],dayNamesMin:["ne","po","út","st","čt","pá","so"],weekHeader:"Týd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.cs)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-cy-GB.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["cy-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["Ionawr","Chwefror","Mawrth","Ebrill","Mai","Mehefin","Gorffennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthNamesShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tac","Rha"],dayNames:["Dydd Sul","Dydd Llun","Dydd Mawrth","Dydd Mercher","Dydd Iau","Dydd Gwener","Dydd Sadwrn"],dayNamesShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],dayNamesMin:["Su","Ll","Ma","Me","Ia","Gw","Sa"],weekHeader:"Wy",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["cy-GB"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-da.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.da={closeText:"Luk",prevText:"<Forrige",nextText:"Næste>",currentText:"Idag",monthNames:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNames:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],dayNamesShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],dayNamesMin:["Sø","Ma","Ti","On","To","Fr","Lø"],weekHeader:"Uge",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.da)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-de.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.de={closeText:"Schließen",prevText:"<Zurück",nextText:"Vor>",currentText:"Heute",monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],dayNamesMin:["So","Mo","Di","Mi","Do","Fr","Sa"],weekHeader:"KW",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.de)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-el.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.el={closeText:"Κλείσιμο",prevText:"Προηγούμενος",nextText:"Επόμενος",currentText:"Τρέχων Μήνας",monthNames:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthNamesShort:["Ιαν","Φεβ","Μαρ","Απρ","Μαι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],dayNames:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],dayNamesShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],dayNamesMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],weekHeader:"Εβδ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.el)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-AU.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-AU"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-AU"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-GB.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-GB"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-GB"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-en-NZ.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["en-NZ"]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["en-NZ"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-eo.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.eo={closeText:"Fermi",prevText:"<Anta",nextText:"Sekv>",currentText:"Nuna",monthNames:["Januaro","Februaro","Marto","Aprilo","Majo","Junio","Julio","Aŭgusto","Septembro","Oktobro","Novembro","Decembro"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aŭg","Sep","Okt","Nov","Dec"],dayNames:["Dimanĉo","Lundo","Mardo","Merkredo","Ĵaŭdo","Vendredo","Sabato"],dayNamesShort:["Dim","Lun","Mar","Mer","Ĵaŭ","Ven","Sab"],dayNamesMin:["Di","Lu","Ma","Me","Ĵa","Ve","Sa"],weekHeader:"Sb",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eo)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-es.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.es={closeText:"Cerrar",prevText:"<Ant",nextText:"Sig>",currentText:"Hoy",monthNames:["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],monthNamesShort:["ene","feb","mar","abr","may","jun","jul","ogo","sep","oct","nov","dic"],dayNames:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],dayNamesShort:["dom","lun","mar","mié","juv","vie","sáb"],dayNamesMin:["D","L","M","X","J","V","S"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.es)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-et.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.et={closeText:"Sulge",prevText:"Eelnev",nextText:"Järgnev",currentText:"Täna",monthNames:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthNamesShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],dayNames:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],dayNamesShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],dayNamesMin:["P","E","T","K","N","R","L"],weekHeader:"näd",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.et)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-eu.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.eu={closeText:"Egina",prevText:"<Aur",nextText:"Hur>",currentText:"Gaur",monthNames:["urtarrila","otsaila","martxoa","apirila","maiatza","ekaina","uztaila","abuztua","iraila","urria","azaroa","abendua"],monthNamesShort:["urt.","ots.","mar.","api.","mai.","eka.","uzt.","abu.","ira.","urr.","aza.","abe."],dayNames:["igandea","astelehena","asteartea","asteazkena","osteguna","ostirala","larunbata"],dayNamesShort:["ig.","al.","ar.","az.","og.","ol.","lr."],dayNamesMin:["ig","al","ar","az","og","ol","lr"],weekHeader:"As",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.eu)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fa.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fa={closeText:"بستن",prevText:"<قبلی",nextText:"بعدی>",currentText:"امروز",monthNames:["فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["يکشنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنجشنبه","جمعه","شنبه"],dayNamesShort:["ی","د","س","چ","پ","ج","ش"],dayNamesMin:["ی","د","س","چ","پ","ج","ش"],weekHeader:"هف",dateFormat:"yy/mm/dd",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fa)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fi={closeText:"Sulje",prevText:"«Edellinen",nextText:"Seuraava»",currentText:"Tänään",monthNames:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],monthNamesShort:["Tammi","Helmi","Maalis","Huhti","Touko","Kesä","Heinä","Elo","Syys","Loka","Marras","Joulu"],dayNamesShort:["Su","Ma","Ti","Ke","To","Pe","La"],dayNames:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],dayNamesMin:["Su","Ma","Ti","Ke","To","Pe","La"],weekHeader:"Vk",dateFormat:"d.m.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fi)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fo.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fo={closeText:"Lat aftur",prevText:"<Fyrra",nextText:"Næsta>",currentText:"Í dag",monthNames:["Januar","Februar","Mars","Apríl","Mei","Juni","Juli","August","September","Oktober","November","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],dayNames:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leyardagur"],dayNamesShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],dayNamesMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],weekHeader:"Vk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fo)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr-CA.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["fr-CA"]={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CA"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr-CH.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional["fr-CH"]={closeText:"Fermer",prevText:"<Préc",nextText:"Suiv>",currentText:"Courant",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sm",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional["fr-CH"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-fr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.fr={closeText:"Fermer",prevText:"Précédent",nextText:"Suivant",currentText:"Aujourd'hui",monthNames:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthNamesShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],dayNames:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],dayNamesShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],dayNamesMin:["D","L","M","M","J","V","S"],weekHeader:"Sem.",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.fr)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-gl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.gl={closeText:"Pechar",prevText:"<Ant",nextText:"Seg>",currentText:"Hoxe",monthNames:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthNamesShort:["Xan","Feb","Mar","Abr","Mai","Xuñ","Xul","Ago","Set","Out","Nov","Dec"],dayNames:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],dayNamesShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],dayNamesMin:["Do","Lu","Ma","Mé","Xo","Ve","Sá"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.gl)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-he.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(t){t.datepicker.regional.he={closeText:"סגור",prevText:"<הקודם",nextText:"הבא>",currentText:"היום",monthNames:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthNamesShort:["ינו","פבר","מרץ","אפר","מאי","יוני","יולי","אוג","ספט","אוק","נוב","דצמ"],dayNames:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],dayNamesShort:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],dayNamesMin:["א'","ב'","ג'","ד'","ה'","ו'","שבת"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:""},t.datepicker.setDefaults(t.datepicker.regional.he)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hi={closeText:"बंद",prevText:"पिछला",nextText:"अगला",currentText:"आज",monthNames:["जनवरी ","फरवरी","मार्च","अप्रेल","मई","जून","जूलाई","अगस्त ","सितम्बर","अक्टूबर","नवम्बर","दिसम्बर"],monthNamesShort:["जन","फर","मार्च","अप्रेल","मई","जून","जूलाई","अग","सित","अक्ट","नव","दि"],dayNames:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],dayNamesShort:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],dayNamesMin:["रवि","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],weekHeader:"हफ्ता",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hi)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hr={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthNamesShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],dayNames:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Tje",dateFormat:"dd.mm.yy.",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hr)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hu.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hu={closeText:"bezár",prevText:"vissza",nextText:"előre",currentText:"ma",monthNames:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],monthNamesShort:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Szep","Okt","Nov","Dec"],dayNames:["Vasárnap","Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat"],dayNamesShort:["Vas","Hét","Ked","Sze","Csü","Pén","Szo"],dayNamesMin:["V","H","K","Sze","Cs","P","Szo"],weekHeader:"Hét",dateFormat:"yy.mm.dd.",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hu)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-hy.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.hy={closeText:"Փակել",prevText:"<Նախ.",nextText:"Հաջ.>",currentText:"Այսօր",monthNames:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthNamesShort:["Հունվ","Փետր","Մարտ","Ապր","Մայիս","Հունիս","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],dayNames:["կիրակի","եկուշաբթի","երեքշաբթի","չորեքշաբթի","հինգշաբթի","ուրբաթ","շաբաթ"],dayNamesShort:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],dayNamesMin:["կիր","երկ","երք","չրք","հնգ","ուրբ","շբթ"],weekHeader:"ՇԲՏ",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.hy)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-id.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.id={closeText:"Tutup",prevText:"<mundur",nextText:"maju>",currentText:"hari ini",monthNames:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","Nopember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agus","Sep","Okt","Nop","Des"],dayNames:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],dayNamesShort:["Min","Sen","Sel","Rab","kam","Jum","Sab"],dayNamesMin:["Mg","Sn","Sl","Rb","Km","jm","Sb"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.id)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-is.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.is={closeText:"Loka",prevText:"< Fyrri",nextText:"Næsti >",currentText:"Í dag",monthNames:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthNamesShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],dayNames:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],dayNamesShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],dayNamesMin:["Su","Má","Þr","Mi","Fi","Fö","La"],weekHeader:"Vika",dateFormat:"dd.mm.yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.is)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-it.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.it={closeText:"Chiudi",prevText:"<Prec",nextText:"Succ>",currentText:"Oggi",monthNames:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthNamesShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],dayNames:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],dayNamesShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],dayNamesMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.it)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ja.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ja={closeText:"閉じる",prevText:"<前",nextText:"次>",currentText:"今日",monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthNamesShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayNames:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],dayNamesShort:["日","月","火","水","木","金","土"],dayNamesMin:["日","月","火","水","木","金","土"],weekHeader:"週",dateFormat:"yy/mm/dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional.ja)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ka.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ka={closeText:"დახურვა",prevText:"< წინა",nextText:"შემდეგი >",currentText:"დღეს",monthNames:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthNamesShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],dayNames:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],dayNamesShort:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],dayNamesMin:["კვ","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],weekHeader:"კვირა",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ka)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-kk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.kk={closeText:"Жабу",prevText:"<Алдыңғы",nextText:"Келесі>",currentText:"Бүгін",monthNames:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthNamesShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],dayNames:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],dayNamesShort:["жкс","дсн","ссн","срс","бсн","жма","снб"],dayNamesMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],weekHeader:"Не",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.kk)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-km.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.km={closeText:"ធ្វើ​រួច",prevText:"មុន",nextText:"បន្ទាប់",currentText:"ថ្ងៃ​នេះ",monthNames:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthNamesShort:["មករា","កុម្ភៈ","មីនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],dayNames:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],dayNamesShort:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],dayNamesMin:["អា","ច","អ","ពុ","ព្រហ","សុ","សៅ"],weekHeader:"សប្ដាហ៍",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.km)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ko.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ko={closeText:"닫기",prevText:"이전달",nextText:"다음달",currentText:"오늘",monthNames:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthNamesShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],dayNames:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],dayNamesShort:["일","월","화","수","목","금","토"],dayNamesMin:["일","월","화","수","목","금","토"],weekHeader:"Wk",dateFormat:"yy-mm-dd",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"년"},e.datepicker.setDefaults(e.datepicker.regional.ko)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ky.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ky={closeText:"Жабуу",prevText:"<Мур",nextText:"Кий>",currentText:"Бүгүн",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["жекшемби","дүйшөмбү","шейшемби","шаршемби","бейшемби","жума","ишемби"],dayNamesShort:["жек","дүй","шей","шар","бей","жум","ише"],dayNamesMin:["Жк","Дш","Шш","Шр","Бш","Жм","Иш"],weekHeader:"Жум",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ky)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lb.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lb={closeText:"Fäerdeg",prevText:"Zréck",nextText:"Weider",currentText:"Haut",monthNames:["Januar","Februar","Mäerz","Abrëll","Mee","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mäe","Abr","Mee","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonndeg","Méindeg","Dënschdeg","Mëttwoch","Donneschdeg","Freideg","Samschdeg"],dayNamesShort:["Son","Méi","Dën","Mët","Don","Fre","Sam"],dayNamesMin:["So","Mé","Dë","Më","Do","Fr","Sa"],weekHeader:"W",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lb)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lt.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lt={closeText:"Uždaryti",prevText:"<Atgal",nextText:"Pirmyn>",currentText:"Šiandien",monthNames:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthNamesShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],dayNames:["sekmadienis","pirmadienis","antradienis","trečiadienis","ketvirtadienis","penktadienis","šeštadienis"],dayNamesShort:["sek","pir","ant","tre","ket","pen","šeš"],dayNamesMin:["Se","Pr","An","Tr","Ke","Pe","Še"],weekHeader:"SAV",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lt)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-lv.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.lv={closeText:"Aizvērt",prevText:"Iepr.",nextText:"Nāk.",currentText:"Šodien",monthNames:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthNamesShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],dayNames:["svētdiena","pirmdiena","otrdiena","trešdiena","ceturtdiena","piektdiena","sestdiena"],dayNamesShort:["svt","prm","otr","tre","ctr","pkt","sst"],dayNamesMin:["Sv","Pr","Ot","Tr","Ct","Pk","Ss"],weekHeader:"Ned.",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.lv)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-mk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.mk={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Денес",monthNames:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthNamesShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],dayNames:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],dayNamesShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],dayNamesMin:["Не","По","Вт","Ср","Че","Пе","Са"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.mk)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ml.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ml={closeText:"ശരി",prevText:"മുന്നത്തെ",nextText:"അടുത്തത് ",currentText:"ഇന്ന്",monthNames:["ജനുവരി","ഫെബ്രുവരി","മാര്‍ച്ച്","ഏപ്രില്‍","മേയ്","ജൂണ്‍","ജൂലൈ","ആഗസ്റ്റ്","സെപ്റ്റംബര്‍","ഒക്ടോബര്‍","നവംബര്‍","ഡിസംബര്‍"],monthNamesShort:["ജനു","ഫെബ്","മാര്‍","ഏപ്രി","മേയ്","ജൂണ്‍","ജൂലാ","ആഗ","സെപ്","ഒക്ടോ","നവം","ഡിസ"],dayNames:["ഞായര്‍","തിങ്കള്‍","ചൊവ്വ","ബുധന്‍","വ്യാഴം","വെള്ളി","ശനി"],dayNamesShort:["ഞായ","തിങ്ക","ചൊവ്വ","ബുധ","വ്യാഴം","വെള്ളി","ശനി"],dayNamesMin:["ഞാ","തി","ചൊ","ബു","വ്യാ","വെ","ശ"],weekHeader:"ആ",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ml)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ms.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ms={closeText:"Tutup",prevText:"<Sebelum",nextText:"Selepas>",currentText:"hari ini",monthNames:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthNamesShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],dayNames:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],dayNamesShort:["Aha","Isn","Sel","Rab","kha","Jum","Sab"],dayNamesMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],weekHeader:"Mg",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ms)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nb.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nb={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nb)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nl-BE.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["nl-BE"]={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["nl-BE"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nl={closeText:"Sluiten",prevText:"←",nextText:"→",currentText:"Vandaag",monthNames:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthNamesShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],dayNames:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],dayNamesShort:["zon","maa","din","woe","don","vri","zat"],dayNamesMin:["zo","ma","di","wo","do","vr","za"],weekHeader:"Wk",dateFormat:"dd-mm-yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nl)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-nn.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.nn={closeText:"Lukk",prevText:"«Førre",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["sun","mån","tys","ons","tor","fre","lau"],dayNames:["sundag","måndag","tysdag","onsdag","torsdag","fredag","laurdag"],dayNamesMin:["su","må","ty","on","to","fr","la"],weekHeader:"Veke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.nn)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-no.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.no={closeText:"Lukk",prevText:"«Forrige",nextText:"Neste»",currentText:"I dag",monthNames:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthNamesShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],dayNamesShort:["søn","man","tir","ons","tor","fre","lør"],dayNames:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],dayNamesMin:["sø","ma","ti","on","to","fr","lø"],weekHeader:"Uke",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.no)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.pl={closeText:"Zamknij",prevText:"<Poprzedni",nextText:"Następny>",currentText:"Dziś",monthNames:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthNamesShort:["Sty","Lu","Mar","Kw","Maj","Cze","Lip","Sie","Wrz","Pa","Lis","Gru"],dayNames:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],dayNamesShort:["Nie","Pn","Wt","Śr","Czw","Pt","So"],dayNamesMin:["N","Pn","Wt","Śr","Cz","Pt","So"],weekHeader:"Tydz",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pl)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pt-BR.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["pt-BR"]={closeText:"Fechar",prevText:"<Anterior",nextText:"Próximo>",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sm",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["pt-BR"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-pt.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.pt={closeText:"Fechar",prevText:"Anterior",nextText:"Seguinte",currentText:"Hoje",monthNames:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],dayNamesMin:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],weekHeader:"Sem",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.pt)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-rm.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.rm={closeText:"Serrar",prevText:"<Suandant",nextText:"Precedent>",currentText:"Actual",monthNames:["Schaner","Favrer","Mars","Avrigl","Matg","Zercladur","Fanadur","Avust","Settember","October","November","December"],monthNamesShort:["Scha","Fev","Mar","Avr","Matg","Zer","Fan","Avu","Sett","Oct","Nov","Dec"],dayNames:["Dumengia","Glindesdi","Mardi","Mesemna","Gievgia","Venderdi","Sonda"],dayNamesShort:["Dum","Gli","Mar","Mes","Gie","Ven","Som"],dayNamesMin:["Du","Gl","Ma","Me","Gi","Ve","So"],weekHeader:"emna",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.rm)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ro.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ro={closeText:"Închide",prevText:"« Luna precedentă",nextText:"Luna următoare »",currentText:"Azi",monthNames:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthNamesShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],dayNamesShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],dayNamesMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],weekHeader:"Săpt",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ro)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ru.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ru={closeText:"Закрыть",prevText:"<Пред",nextText:"След>",currentText:"Сегодня",monthNames:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"],dayNamesShort:["вск","пнд","втр","срд","чтв","птн","сбт"],dayNamesMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Нед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ru)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sk={closeText:"Zavrieť",prevText:"<Predchádzajúci",nextText:"Nasledujúci>",currentText:"Dnes",monthNames:["január","február","marec","apríl","máj","jún","júl","august","september","október","november","december"],monthNamesShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],dayNames:["nedeľa","pondelok","utorok","streda","štvrtok","piatok","sobota"],dayNamesShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],dayNamesMin:["Ne","Po","Ut","St","Št","Pia","So"],weekHeader:"Ty",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sk)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sl.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sl={closeText:"Zapri",prevText:"<Prejšnji",nextText:"Naslednji>",currentText:"Trenutni",monthNames:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],dayNamesShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],dayNamesMin:["Ne","Po","To","Sr","Če","Pe","So"],weekHeader:"Teden",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sl)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sq.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sq={closeText:"mbylle",prevText:"<mbrapa",nextText:"Përpara>",currentText:"sot",monthNames:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthNamesShort:["Jan","Shk","Mar","Pri","Maj","Qer","Kor","Gus","Sht","Tet","Nën","Dhj"],dayNames:["E Diel","E Hënë","E Martë","E Mërkurë","E Enjte","E Premte","E Shtune"],dayNamesShort:["Di","Hë","Ma","Më","En","Pr","Sh"],dayNamesMin:["Di","Hë","Ma","Më","En","Pr","Sh"],weekHeader:"Ja",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sq)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sr-SR.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["sr-SR"]={closeText:"Zatvori",prevText:"<",nextText:">",currentText:"Danas",monthNames:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],dayNames:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],dayNamesShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],dayNamesMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],weekHeader:"Sed",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional["sr-SR"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sr={closeText:"Затвори",prevText:"<",nextText:">",currentText:"Данас",monthNames:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthNamesShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],dayNames:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],dayNamesShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],dayNamesMin:["Не","По","Ут","Ср","Че","Пе","Су"],weekHeader:"Сед",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sr)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-sv.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.sv={closeText:"Stäng",prevText:"«Förra",nextText:"Nästa»",currentText:"Idag",monthNames:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],dayNamesShort:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"],dayNames:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],dayNamesMin:["Sö","Må","Ti","On","To","Fr","Lö"],weekHeader:"Ve",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.sv)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-ta.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.ta={closeText:"மூடு",prevText:"முன்னையது",nextText:"அடுத்தது",currentText:"இன்று",monthNames:["தை","மாசி","பங்குனி","சித்திரை","வைகாசி","ஆனி","ஆடி","ஆவணி","புரட்டாசி","ஐப்பசி","கார்த்திகை","மார்கழி"],monthNamesShort:["தை","மாசி","பங்","சித்","வைகா","ஆனி","ஆடி","ஆவ","புர","ஐப்","கார்","மார்"],dayNames:["ஞாயிற்றுக்கிழமை","திங்கட்கிழமை","செவ்வாய்க்கிழமை","புதன்கிழமை","வியாழக்கிழமை","வெள்ளிக்கிழமை","சனிக்கிழமை"],dayNamesShort:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],dayNamesMin:["ஞா","தி","செ","பு","வி","வெ","ச"],weekHeader:"Не",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.ta)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-th.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.th={closeText:"ปิด",prevText:"« ย้อน",nextText:"ถัดไป »",currentText:"วันนี้",monthNames:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthNamesShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],dayNames:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์"],dayNamesShort:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],dayNamesMin:["อา.","จ.","อ.","พ.","พฤ.","ศ.","ส."],weekHeader:"Wk",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.th)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-tj.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.tj={closeText:"Идома",prevText:"<Қафо",nextText:"Пеш>",currentText:"Имрӯз",monthNames:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthNamesShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],dayNames:["якшанбе","душанбе","сешанбе","чоршанбе","панҷшанбе","ҷумъа","шанбе"],dayNamesShort:["якш","душ","сеш","чор","пан","ҷум","шан"],dayNamesMin:["Як","Дш","Сш","Чш","Пш","Ҷм","Шн"],weekHeader:"Хф",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tj)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-tr.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.tr={closeText:"kapat",prevText:"<geri",nextText:"ileri>",currentText:"bugün",monthNames:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],dayNames:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],dayNamesShort:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],dayNamesMin:["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],weekHeader:"Hf",dateFormat:"dd.mm.yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.tr)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-uk.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.uk={closeText:"Закрити",prevText:"<",nextText:">",currentText:"Сьогодні",monthNames:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthNamesShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],dayNames:["неділя","понеділок","вівторок","середа","четвер","п’ятниця","субота"],dayNamesShort:["нед","пнд","вів","срд","чтв","птн","сбт"],dayNamesMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],weekHeader:"Тиж",dateFormat:"dd/mm/yy",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.uk)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-vi.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional.vi={closeText:"Đóng",prevText:"<Trước",nextText:"Tiếp>",currentText:"Hôm nay",monthNames:["Tháng Một","Tháng Hai","Tháng Ba","Tháng Tư","Tháng Năm","Tháng Sáu","Tháng Bảy","Tháng Tám","Tháng Chín","Tháng Mười","Tháng Mười Một","Tháng Mười Hai"],monthNamesShort:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],dayNames:["Chủ Nhật","Thứ Hai","Thứ Ba","Thứ Tư","Thứ Năm","Thứ Sáu","Thứ Bảy"],dayNamesShort:["CN","T2","T3","T4","T5","T6","T7"],dayNamesMin:["CN","T2","T3","T4","T5","T6","T7"],weekHeader:"Tu",dateFormat:"dd/mm/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},e.datepicker.setDefaults(e.datepicker.regional.vi)}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-CN.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-CN"]={closeText:"关闭",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy-mm-dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-CN"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-HK.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-HK"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"dd-mm-yy",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-HK"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/i18n/jquery.ui.datepicker-zh-TW.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery UI - v1.10.4 - 2014-01-17 2 | * http://jqueryui.com 3 | * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ 4 | jQuery(function(e){e.datepicker.regional["zh-TW"]={closeText:"關閉",prevText:"<上月",nextText:"下月>",currentText:"今天",monthNames:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthNamesShort:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],dayNames:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayNamesShort:["周日","周一","周二","周三","周四","周五","周六"],dayNamesMin:["日","一","二","三","四","五","六"],weekHeader:"周",dateFormat:"yy/mm/dd",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:"年"},e.datepicker.setDefaults(e.datepicker.regional["zh-TW"])}); -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/animated-overlay.gif -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /vendor/assets/javascripts/jquery-ui/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michelson/chaskiq-newsletters/1f0d0e6cf7f198e888d421471619bdfdedffa1d2/vendor/assets/javascripts/jquery-ui/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /vendor/assets/stylesheets/codemirror/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} 2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} 3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} 4 | .cm-s-elegant span.cm-variable {color: black;} 5 | .cm-s-elegant span.cm-variable-2 {color: #b11;} 6 | .cm-s-elegant span.cm-qualifier {color: #555;} 7 | .cm-s-elegant span.cm-keyword {color: #730;} 8 | .cm-s-elegant span.cm-builtin {color: #30a;} 9 | .cm-s-elegant span.cm-link {color: #762;} 10 | .cm-s-elegant span.cm-error {background-color: #fdd;} 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} 13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} --------------------------------------------------------------------------------