Content website, 2014–2016
ruby on rails, haml, sass, coffescript, jquery
dokku/docker -> ansible + capistrano
class Course < ActiveRecord::Base | |
include FriendlyId | |
include Bootsy::Container | |
validates :title, :publicated_at, presence: true | |
before_validation :set_publicated_at | |
has_and_belongs_to_many :cities | |
belongs_to :language | |
belongs_to :lead_form | |
has_many :custom_properties, as: :entity, dependent: :destroy | |
accepts_nested_attributes_for :custom_properties, allow_destroy: true | |
friendly_id :title, use: [:slugged, :finders, :history] | |
mount_uploader :image, CourseImageUploader | |
#paginates_per 10 | |
scope :active, -> { where("publicated_at <= ? AND active = ?", "#{Time.zone.now}", true).order('position ASC') } | |
scope :is_navigation, -> { where(is_navigation: true) } | |
scope :active_with_languages, -> { active.where("language_id is not null") } | |
scope :by_city, -> (city) { joins(:cities).where('city_id = ?', city.id) } | |
def active? | |
publicated_at < Time.zone.now && active == true | |
end | |
def to_s | |
"#{title}" | |
end | |
def ordered_properties | |
self.custom_properties.order('position ASC') | |
end | |
def should_generate_new_friendly_id? | |
title_changed? or slug.nil? or slug.blank? | |
end | |
def normalize_friendly_id(input) | |
input.to_s.to_slug.normalize(transliterations: :russian).to_s | |
end | |
private | |
def set_publicated_at | |
self.publicated_at = Time.zone.now unless publicated_at.present? | |
end | |
end |
window.LeadForm ||= {} | |
((app) -> | |
$(document).ready -> | |
$findFormBtn = $('@landing-teaser--find-form-btn') | |
$formBlock = $('@landing-teaser--form-block') | |
$form = $formBlock.find('[role*="landing-teaser--form"]') | |
$formEl = $formBlock.find('[role*="landing-teaser--form-element"]') | |
$submitBtn = $formBlock.find('[role*="landing-teaser--form-submit-btn"]') | |
$errorBlock = $formBlock.find('[role*="landing-teaser--form-error"]') | |
$successBlock = $formBlock.find('[role*="landing-teaser--form-success"]') | |
$findFormBtn.on 'click', (e) -> | |
formTop = $formBlock.offset().top - $formBlock.height()/2 | |
$('body').animate({ | |
scrollTop: formTop | |
}, 300) | |
$formEl | |
.on 'ajax:beforeSend', (e) -> | |
goal_code = $(@).data 'goal_code' | |
ya_params = | |
goal_code: goal_code | |
if ga? | |
ga 'send', 'event', 'lead_form', goal_code | |
if yaCounter9611713? | |
yaCounter9611713.reachGoal "LEAD_FORM", ya_params | |
.on 'ajax:success', (e, data, status, xhr) -> | |
handleSuccess $form, $successBlock, $errorBlock | |
.on 'ajax:error', (e, data, status, xhr) -> | |
handleError $form, $successBlock, $errorBlock | |
handleError = ($form, $successBlock, $errorBlock) -> | |
$successBlock.removeClass('animated fadeIn').addClass('animated fadeOut hide') | |
$errorBlock.removeClass('animated fadeOut hide').addClass('animated fadeIn') | |
#$form.addClass('animated fadeOut hide') | |
handleSuccess = ($form, $successBlock, $errorBlock) -> | |
$errorBlock.removeClass('animated fadeIn').addClass('animated fadeOut hide') | |
$form.addClass('animated fadeOut hide') | |
$successBlock.removeClass('animated fadeOut hide').addClass('animated fadeIn') | |
)(window.LeadForm ||= {}) |