parent
cfb7c5fcdb
commit
61704d58b7
24 changed files with 12742 additions and 8 deletions
@ -0,0 +1,81 @@ |
|||||||
|
{% extends 'base.jinja' %} |
||||||
|
{% block title %} |
||||||
|
Отзывы о магазине Батискаф-Казахстан |
||||||
|
{% endblock %} |
||||||
|
{% block meta_description %} |
||||||
|
Отзывы о магазине Батискаф-Казахстан |
||||||
|
{% endblock %} |
||||||
|
{% block meta_keywords %} |
||||||
|
Отзывы, Читать, Оставить отзыв, Магазин, Интернет-Магазин, Батискаф-Казахстан |
||||||
|
{% endblock %} |
||||||
|
{% block content %} |
||||||
|
<div class=" breadcrumbs"> |
||||||
|
<ol class="breadcrumb breadcrumb-arrow"> |
||||||
|
<li><a href="/">Главная</a></li> |
||||||
|
<li class="active"><span>Отзывы о магазине Батискаф-Казахстан</span></li> |
||||||
|
|
||||||
|
</ol> |
||||||
|
</div><h2 class=""> |
||||||
|
Отзывы о магазине Батискаф-Казахстан |
||||||
|
</h2><br/> |
||||||
|
<div class="well well-lg news-container"> |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="media-list"> |
||||||
|
{% if object_list %} |
||||||
|
|
||||||
|
{% for comment in object_list %} |
||||||
|
|
||||||
|
<li class="media"> |
||||||
|
<a name="comment{{ comment.pk }}"></a> |
||||||
|
<div class="media-body"> |
||||||
|
<h4 class="media-heading text-left"> |
||||||
|
{% for i in range(1,6) %} |
||||||
|
<input name="star{{ comment.pk }}" type="radio" class="star" disabled="disabled" {% if i == comment.stars %}checked="checked"{% endif %}/> |
||||||
|
{% endfor %} |
||||||
|
|
||||||
|
|
||||||
|
{{ comment.name }} пишет: <small><a |
||||||
|
href="{{ request.get_full_path() }}#comment{{ comment.pk }}">#</a></small></h4> |
||||||
|
<p>{{ comment.created.strftime('%d.%m.%Y %H:%M') }}</p> |
||||||
|
<p>{{ comment.text|striptags }}</p> |
||||||
|
<!-- Nested media object --> |
||||||
|
|
||||||
|
</div> |
||||||
|
</li> |
||||||
|
|
||||||
|
{% endfor %} |
||||||
|
</ul> |
||||||
|
{% else %} |
||||||
|
<div class="alert alert-warning alert-dismissable"> |
||||||
|
<strong>Пока нет ни одного отзыва!</strong> Вы можете <a href="#comment">стать первым</a>! |
||||||
|
</div> |
||||||
|
{% endif %} |
||||||
|
|
||||||
|
</div> |
||||||
|
<div class="comment"> |
||||||
|
<a name="comment"></a> |
||||||
|
<h4 class="text-center"> |
||||||
|
Оставить отзыв:</h4> |
||||||
|
|
||||||
|
<div class="comment-form col-xs-6 col-xs-offset-3"> |
||||||
|
<form action="" class="form" method="post"><input type="hidden" name="csrfmiddlewaretoken" |
||||||
|
value="{{ csrf_token }}"> |
||||||
|
{{ form|bootstrap }} |
||||||
|
<div class="form-group text-left"> |
||||||
|
<button type="submit" name="comment-send" class="btn btn-primary"><span |
||||||
|
class="glyphicon glyphicon-comment" aria-hidden="true"></span> Отправить |
||||||
|
</button> |
||||||
|
</div> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
</div> |
||||||
|
|
||||||
|
{% endblock %} |
||||||
|
|
||||||
@ -1,7 +1,11 @@ |
|||||||
from django.contrib import admin |
from django.contrib import admin |
||||||
from .models import Banner |
from .models import Banner, Feedback |
||||||
|
|
||||||
class BannerAdmin(admin.ModelAdmin): |
class BannerAdmin(admin.ModelAdmin): |
||||||
list_display = ('title', 'link', 'is_active') |
list_display = ('title', 'link', 'is_active') |
||||||
|
|
||||||
|
class FeedbackAdmin(admin.ModelAdmin): |
||||||
|
list_display = ('created', 'name', 'email', 'text', 'stars') |
||||||
|
|
||||||
admin.site.register(Banner, BannerAdmin) |
admin.site.register(Banner, BannerAdmin) |
||||||
|
admin.site.register(Feedback, FeedbackAdmin) |
||||||
|
|||||||
@ -0,0 +1,12 @@ |
|||||||
|
from django import forms |
||||||
|
from django.forms.widgets import RadioChoiceInput |
||||||
|
from main.models import Feedback, STARS_CHOICES |
||||||
|
|
||||||
|
|
||||||
|
class FeedbackForm(forms.ModelForm): |
||||||
|
stars = forms.IntegerField(widget=forms.RadioSelect(choices=STARS_CHOICES), label='Оценка') |
||||||
|
|
||||||
|
class Meta: |
||||||
|
model = Feedback |
||||||
|
fields = ['stars', 'name', 'email', 'text', ] |
||||||
|
# widgets = {'stars': forms.RadioSelect(hidden=True)} |
||||||
@ -0,0 +1,28 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import models, migrations |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('main', '0007_banner'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.CreateModel( |
||||||
|
name='Feedback', |
||||||
|
fields=[ |
||||||
|
('id', models.AutoField(primary_key=True, verbose_name='ID', serialize=False, auto_created=True)), |
||||||
|
('created', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время')), |
||||||
|
('name', models.CharField(max_length=45, verbose_name='Имя')), |
||||||
|
('email', models.EmailField(max_length=254, verbose_name='Email (не будет опубликован)')), |
||||||
|
('text', models.TextField(verbose_name='Комментарий')), |
||||||
|
], |
||||||
|
options={ |
||||||
|
'verbose_name': 'отзыв', |
||||||
|
'verbose_name_plural': 'отзывы', |
||||||
|
}, |
||||||
|
), |
||||||
|
] |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
# -*- coding: utf-8 -*- |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
from django.db import models, migrations |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
('main', '0008_feedback'), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.AddField( |
||||||
|
model_name='feedback', |
||||||
|
name='stars', |
||||||
|
field=models.IntegerField(default=5, verbose_name='Оценка', choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]), |
||||||
|
), |
||||||
|
] |
||||||
|
After Width: | Height: | Size: 752 B |
|
After Width: | Height: | Size: 1.4 KiB |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,118 @@ |
|||||||
|
/* |
||||||
|
* Metadata - jQuery plugin for parsing metadata from elements |
||||||
|
* |
||||||
|
* Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan |
||||||
|
* |
||||||
|
* Licensed under http://en.wikipedia.org/wiki/MIT_License
|
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/** |
||||||
|
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property |
||||||
|
* in the JSON will become a property of the element itself. |
||||||
|
* |
||||||
|
* There are three supported types of metadata storage: |
||||||
|
* |
||||||
|
* attr: Inside an attribute. The name parameter indicates *which* attribute. |
||||||
|
*
|
||||||
|
* class: Inside the class attribute, wrapped in curly braces: { } |
||||||
|
*
|
||||||
|
* elem: Inside a child element (e.g. a script tag). The |
||||||
|
* name parameter indicates *which* element. |
||||||
|
*
|
||||||
|
* The metadata for an element is loaded the first time the element is accessed via jQuery. |
||||||
|
* |
||||||
|
* As a result, you can define the metadata type, use $(expr) to load the metadata into the elements |
||||||
|
* matched by expr, then redefine the metadata type and run another $(expr) for other elements. |
||||||
|
*
|
||||||
|
* @name $.metadata.setType |
||||||
|
* |
||||||
|
* @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p> |
||||||
|
* @before $.metadata.setType("class") |
||||||
|
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" |
||||||
|
* @desc Reads metadata from the class attribute |
||||||
|
*
|
||||||
|
* @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p> |
||||||
|
* @before $.metadata.setType("attr", "data") |
||||||
|
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" |
||||||
|
* @desc Reads metadata from a "data" attribute |
||||||
|
*
|
||||||
|
* @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p> |
||||||
|
* @before $.metadata.setType("elem", "script") |
||||||
|
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" |
||||||
|
* @desc Reads metadata from a nested script element |
||||||
|
*
|
||||||
|
* @param String type The encoding type |
||||||
|
* @param String name The name of the attribute to be used to get metadata (optional) |
||||||
|
* @cat Plugins/Metadata |
||||||
|
* @descr Sets the type of encoding to be used when loading metadata for the first time |
||||||
|
* @type undefined |
||||||
|
* @see metadata() |
||||||
|
*/ |
||||||
|
|
||||||
|
(function($) { |
||||||
|
|
||||||
|
$.extend({ |
||||||
|
metadata : { |
||||||
|
defaults : { |
||||||
|
type: 'class', |
||||||
|
name: 'metadata', |
||||||
|
cre: /({.*})/, |
||||||
|
single: 'metadata' |
||||||
|
}, |
||||||
|
setType: function( type, name ){ |
||||||
|
this.defaults.type = type; |
||||||
|
this.defaults.name = name; |
||||||
|
}, |
||||||
|
get: function( elem, opts ){ |
||||||
|
var settings = $.extend({},this.defaults,opts); |
||||||
|
// check for empty string in single property
|
||||||
|
if ( !settings.single.length ) settings.single = 'metadata'; |
||||||
|
|
||||||
|
var data = $.data(elem, settings.single); |
||||||
|
// returned cached data if it already exists
|
||||||
|
if ( data ) return data; |
||||||
|
|
||||||
|
data = "{}"; |
||||||
|
|
||||||
|
if ( settings.type == "class" ) { |
||||||
|
var m = settings.cre.exec( elem.className ); |
||||||
|
if ( m ) |
||||||
|
data = m[1]; |
||||||
|
} else if ( settings.type == "elem" ) { |
||||||
|
if( !elem.getElementsByTagName ) return; |
||||||
|
var e = elem.getElementsByTagName(settings.name); |
||||||
|
if ( e.length ) |
||||||
|
data = $.trim(e[0].innerHTML); |
||||||
|
} else if ( elem.getAttribute != undefined ) { |
||||||
|
var attr = elem.getAttribute( settings.name ); |
||||||
|
if ( attr ) |
||||||
|
data = attr; |
||||||
|
} |
||||||
|
|
||||||
|
if ( data.indexOf( '{' ) <0 ) |
||||||
|
data = "{" + data + "}"; |
||||||
|
|
||||||
|
data = eval("(" + data + ")"); |
||||||
|
|
||||||
|
$.data( elem, settings.single, data ); |
||||||
|
return data; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the metadata object for the first member of the jQuery object. |
||||||
|
* |
||||||
|
* @name metadata |
||||||
|
* @descr Returns element's metadata object |
||||||
|
* @param Object opts An object contianing settings to override the defaults |
||||||
|
* @type jQuery |
||||||
|
* @cat Plugins/Metadata |
||||||
|
*/ |
||||||
|
$.fn.metadata = function( opts ){ |
||||||
|
return $.metadata.get( this[0], opts ); |
||||||
|
}; |
||||||
|
|
||||||
|
})(jQuery); |
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,12 @@ |
|||||||
|
/* jQuery.Rating Plugin CSS - http://www.fyneworks.com/jquery/star-rating/ */ |
||||||
|
div.rating-cancel,div.star-rating{float:left;width:17px;height:15px;text-indent:-999em;cursor:pointer;display:block;background:transparent;overflow:hidden} |
||||||
|
div.rating-cancel,div.rating-cancel a{background:url(delete.gif) no-repeat 0 -16px} |
||||||
|
div.star-rating,div.star-rating a{background:url(star.gif) no-repeat 0 0px} |
||||||
|
div.rating-cancel a,div.star-rating a{display:block;width:16px;height:100%;background-position:0 0px;border:0} |
||||||
|
div.star-rating-on a{background-position:0 -16px!important} |
||||||
|
div.star-rating-hover a{background-position:0 -32px} |
||||||
|
/* Read Only CSS */ |
||||||
|
div.star-rating-readonly a{cursor:default !important} |
||||||
|
/* Partial Star CSS */ |
||||||
|
div.star-rating{background:transparent!important;overflow:hidden!important} |
||||||
|
/* END jQuery.Rating Plugin CSS */ |
||||||
@ -0,0 +1,376 @@ |
|||||||
|
/* |
||||||
|
### jQuery Star Rating Plugin v4.11 - 2013-03-14 ### |
||||||
|
* Home: http://www.fyneworks.com/jquery/star-rating/
|
||||||
|
* Code: http://code.google.com/p/jquery-star-rating-plugin/
|
||||||
|
* |
||||||
|
* Licensed under http://en.wikipedia.org/wiki/MIT_License
|
||||||
|
### |
||||||
|
*/ |
||||||
|
|
||||||
|
/*# AVOID COLLISIONS #*/ |
||||||
|
;if(window.jQuery) (function($){ |
||||||
|
/*# AVOID COLLISIONS #*/ |
||||||
|
|
||||||
|
// IE6 Background Image Fix
|
||||||
|
if ((!$.support.opacity && !$.support.style)) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { }; |
||||||
|
// Thanks to http://www.visualjquery.com/rating/rating_redux.html
|
||||||
|
|
||||||
|
// plugin initialization
|
||||||
|
$.fn.rating = function(options){ |
||||||
|
if(this.length==0) return this; // quick fail
|
||||||
|
|
||||||
|
// Handle API methods
|
||||||
|
if(typeof arguments[0]=='string'){ |
||||||
|
// Perform API methods on individual elements
|
||||||
|
if(this.length>1){ |
||||||
|
var args = arguments; |
||||||
|
return this.each(function(){ |
||||||
|
$.fn.rating.apply($(this), args); |
||||||
|
}); |
||||||
|
}; |
||||||
|
// Invoke API method handler
|
||||||
|
$.fn.rating[arguments[0]].apply(this, $.makeArray(arguments).slice(1) || []); |
||||||
|
// Quick exit...
|
||||||
|
return this; |
||||||
|
}; |
||||||
|
|
||||||
|
// Initialize options for this call
|
||||||
|
var options = $.extend( |
||||||
|
{}/* new object */, |
||||||
|
$.fn.rating.options/* default options */, |
||||||
|
options || {} /* just-in-time options */ |
||||||
|
); |
||||||
|
|
||||||
|
// Allow multiple controls with the same name by making each call unique
|
||||||
|
$.fn.rating.calls++; |
||||||
|
|
||||||
|
// loop through each matched element
|
||||||
|
this |
||||||
|
.not('.star-rating-applied') |
||||||
|
.addClass('star-rating-applied') |
||||||
|
.each(function(){ |
||||||
|
|
||||||
|
// Load control parameters / find context / etc
|
||||||
|
var control, input = $(this); |
||||||
|
var eid = (this.name || 'unnamed-rating').replace(/\[|\]/g, '_').replace(/^\_+|\_+$/g,''); |
||||||
|
var context = $(this.form || document.body); |
||||||
|
|
||||||
|
// FIX: http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=23
|
||||||
|
var raters = context.data('rating'); |
||||||
|
if(!raters || raters.call!=$.fn.rating.calls) raters = { count:0, call:$.fn.rating.calls }; |
||||||
|
var rater = raters[eid] || context.data('rating'+eid); |
||||||
|
|
||||||
|
// if rater is available, verify that the control still exists
|
||||||
|
if(rater) control = rater.data('rating'); |
||||||
|
|
||||||
|
if(rater && control)//{// save a byte!
|
||||||
|
// add star to control if rater is available and the same control still exists
|
||||||
|
control.count++; |
||||||
|
|
||||||
|
//}// save a byte!
|
||||||
|
else{ |
||||||
|
// create new control if first star or control element was removed/replaced
|
||||||
|
|
||||||
|
// Initialize options for this rater
|
||||||
|
control = $.extend( |
||||||
|
{}/* new object */, |
||||||
|
options || {} /* current call options */, |
||||||
|
($.metadata? input.metadata(): ($.meta?input.data():null)) || {}, /* metadata options */ |
||||||
|
{ count:0, stars: [], inputs: [] } |
||||||
|
); |
||||||
|
|
||||||
|
// increment number of rating controls
|
||||||
|
control.serial = raters.count++; |
||||||
|
|
||||||
|
// create rating element
|
||||||
|
rater = $('<span class="star-rating-control"/>'); |
||||||
|
input.before(rater); |
||||||
|
|
||||||
|
// Mark element for initialization (once all stars are ready)
|
||||||
|
rater.addClass('rating-to-be-drawn'); |
||||||
|
|
||||||
|
// Accept readOnly setting from 'disabled' property
|
||||||
|
if(input.attr('disabled') || input.hasClass('disabled')) control.readOnly = true; |
||||||
|
|
||||||
|
// Accept required setting from class property (class='required')
|
||||||
|
if(input.hasClass('required')) control.required = true; |
||||||
|
|
||||||
|
// Create 'cancel' button
|
||||||
|
rater.append( |
||||||
|
control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>') |
||||||
|
.on('mouseover',function(){ |
||||||
|
$(this).rating('drain'); |
||||||
|
$(this).addClass('star-rating-hover'); |
||||||
|
//$(this).rating('focus');
|
||||||
|
}) |
||||||
|
.on('mouseout',function(){ |
||||||
|
$(this).rating('draw'); |
||||||
|
$(this).removeClass('star-rating-hover'); |
||||||
|
//$(this).rating('blur');
|
||||||
|
}) |
||||||
|
.on('click',function(){ |
||||||
|
$(this).rating('select'); |
||||||
|
}) |
||||||
|
.data('rating', control) |
||||||
|
); |
||||||
|
|
||||||
|
}; // first element of group
|
||||||
|
|
||||||
|
// insert rating star (thanks Jan Fanslau rev125 for blind support https://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=125)
|
||||||
|
var star = $('<div role="text" aria-label="'+ this.title +'" class="star-rating rater-'+ control.serial +'"><a title="' + (this.title || this.value) + '">' + this.value + '</a></div>'); |
||||||
|
rater.append(star); |
||||||
|
|
||||||
|
// inherit attributes from input element
|
||||||
|
if(this.id) star.attr('id', this.id); |
||||||
|
if(this.className) star.addClass(this.className); |
||||||
|
|
||||||
|
// Half-stars?
|
||||||
|
if(control.half) control.split = 2; |
||||||
|
|
||||||
|
// Prepare division control
|
||||||
|
if(typeof control.split=='number' && control.split>0){ |
||||||
|
var stw = ($.fn.width ? star.width() : 0) || control.starWidth; |
||||||
|
var spi = (control.count % control.split), spw = Math.floor(stw/control.split); |
||||||
|
star |
||||||
|
// restrict star's width and hide overflow (already in CSS)
|
||||||
|
.width(spw) |
||||||
|
// move the star left by using a negative margin
|
||||||
|
// this is work-around to IE's stupid box model (position:relative doesn't work)
|
||||||
|
.find('a').css({ 'margin-left':'-'+ (spi*spw) +'px' }) |
||||||
|
}; |
||||||
|
|
||||||
|
// readOnly?
|
||||||
|
if(control.readOnly)//{ //save a byte!
|
||||||
|
// Mark star as readOnly so user can customize display
|
||||||
|
star.addClass('star-rating-readonly'); |
||||||
|
//} //save a byte!
|
||||||
|
else//{ //save a byte!
|
||||||
|
// Enable hover css effects
|
||||||
|
star.addClass('star-rating-live') |
||||||
|
// Attach mouse events
|
||||||
|
.on('mouseover',function(){ |
||||||
|
$(this).rating('fill'); |
||||||
|
$(this).rating('focus'); |
||||||
|
}) |
||||||
|
.on('mouseout',function(){ |
||||||
|
$(this).rating('draw'); |
||||||
|
$(this).rating('blur'); |
||||||
|
}) |
||||||
|
.on('click',function(){ |
||||||
|
$(this).rating('select'); |
||||||
|
}) |
||||||
|
; |
||||||
|
//}; //save a byte!
|
||||||
|
|
||||||
|
// set current selection
|
||||||
|
if(this.checked) control.current = star; |
||||||
|
|
||||||
|
// set current select for links
|
||||||
|
if(this.nodeName=="A"){ |
||||||
|
if($(this).hasClass('selected')) |
||||||
|
control.current = star; |
||||||
|
}; |
||||||
|
|
||||||
|
// hide input element
|
||||||
|
input.hide(); |
||||||
|
|
||||||
|
// backward compatibility, form element to plugin
|
||||||
|
input.on('change.rating',function(event){ |
||||||
|
if(event.selfTriggered) return false; |
||||||
|
$(this).rating('select'); |
||||||
|
}); |
||||||
|
|
||||||
|
// attach reference to star to input element and vice-versa
|
||||||
|
star.data('rating.input', input.data('rating.star', star)); |
||||||
|
|
||||||
|
// store control information in form (or body when form not available)
|
||||||
|
control.stars[control.stars.length] = star[0]; |
||||||
|
control.inputs[control.inputs.length] = input[0]; |
||||||
|
control.rater = raters[eid] = rater; |
||||||
|
control.context = context; |
||||||
|
|
||||||
|
input.data('rating', control); |
||||||
|
rater.data('rating', control); |
||||||
|
star.data('rating', control); |
||||||
|
context.data('rating', raters); |
||||||
|
context.data('rating'+eid, rater); // required for ajax forms
|
||||||
|
}); // each element
|
||||||
|
|
||||||
|
// Initialize ratings (first draw)
|
||||||
|
$('.rating-to-be-drawn').rating('draw').removeClass('rating-to-be-drawn'); |
||||||
|
|
||||||
|
return this; // don't break the chain...
|
||||||
|
}; |
||||||
|
|
||||||
|
/*--------------------------------------------------------*/ |
||||||
|
|
||||||
|
/* |
||||||
|
### Core functionality and API ### |
||||||
|
*/ |
||||||
|
$.extend($.fn.rating, { |
||||||
|
// Used to append a unique serial number to internal control ID
|
||||||
|
// each time the plugin is invoked so same name controls can co-exist
|
||||||
|
calls: 0, |
||||||
|
|
||||||
|
focus: function(){ |
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
if(!control.focus) return this; // quick fail if not required
|
||||||
|
// find data for event
|
||||||
|
var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null ); |
||||||
|
// focus handler, as requested by focusdigital.co.uk
|
||||||
|
if(control.focus) control.focus.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]); |
||||||
|
}, // $.fn.rating.focus
|
||||||
|
|
||||||
|
blur: function(){ |
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
if(!control.blur) return this; // quick fail if not required
|
||||||
|
// find data for event
|
||||||
|
var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null ); |
||||||
|
// blur handler, as requested by focusdigital.co.uk
|
||||||
|
if(control.blur) control.blur.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]); |
||||||
|
}, // $.fn.rating.blur
|
||||||
|
|
||||||
|
fill: function(){ // fill to the current mouse position.
|
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
// do not execute when control is in read-only mode
|
||||||
|
if(control.readOnly) return; |
||||||
|
// Reset all stars and highlight them up to this element
|
||||||
|
this.rating('drain'); |
||||||
|
this.prevAll().addBack().filter('.rater-'+ control.serial).addClass('star-rating-hover'); |
||||||
|
},// $.fn.rating.fill
|
||||||
|
|
||||||
|
drain: function() { // drain all the stars.
|
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
// do not execute when control is in read-only mode
|
||||||
|
if(control.readOnly) return; |
||||||
|
// Reset all stars
|
||||||
|
control.rater.children().filter('.rater-'+ control.serial).removeClass('star-rating-on').removeClass('star-rating-hover'); |
||||||
|
},// $.fn.rating.drain
|
||||||
|
|
||||||
|
draw: function(){ // set value and stars to reflect current selection
|
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
// Clear all stars
|
||||||
|
this.rating('drain'); |
||||||
|
// Set control value
|
||||||
|
var current = $( control.current );//? control.current.data('rating.input') : null );
|
||||||
|
var starson = current.length ? current.prevAll().addBack().filter('.rater-'+ control.serial) : null; |
||||||
|
if(starson) starson.addClass('star-rating-on'); |
||||||
|
// Show/hide 'cancel' button
|
||||||
|
control.cancel[control.readOnly || control.required?'hide':'show'](); |
||||||
|
// Add/remove read-only classes to remove hand pointer
|
||||||
|
this.siblings()[control.readOnly?'addClass':'removeClass']('star-rating-readonly'); |
||||||
|
},// $.fn.rating.draw
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
select: function(value,wantCallBack){ // select a value
|
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
// do not execute when control is in read-only mode
|
||||||
|
if(control.readOnly) return; |
||||||
|
// clear selection
|
||||||
|
control.current = null; |
||||||
|
// programmatically (based on user input)
|
||||||
|
if(typeof value!='undefined' || this.length>1){ |
||||||
|
// select by index (0 based)
|
||||||
|
if(typeof value=='number') |
||||||
|
return $(control.stars[value]).rating('select',undefined,wantCallBack); |
||||||
|
// select by literal value (must be passed as a string
|
||||||
|
if(typeof value=='string'){ |
||||||
|
//return
|
||||||
|
$.each(control.stars, function(){ |
||||||
|
//console.log($(this).data('rating.input'), $(this).data('rating.input').val(), value, $(this).data('rating.input').val()==value?'BINGO!':'');
|
||||||
|
if($(this).data('rating.input').val()==value) $(this).rating('select',undefined,wantCallBack); |
||||||
|
}); |
||||||
|
// don't break the chain
|
||||||
|
return this; |
||||||
|
}; |
||||||
|
} |
||||||
|
else{ |
||||||
|
control.current = this[0].tagName=='INPUT' ? |
||||||
|
this.data('rating.star') : |
||||||
|
(this.is('.rater-'+ control.serial) ? this : null); |
||||||
|
}; |
||||||
|
// Update rating control state
|
||||||
|
this.data('rating', control); |
||||||
|
// Update display
|
||||||
|
this.rating('draw'); |
||||||
|
// find current input and its sibblings
|
||||||
|
var current = $( control.current ? control.current.data('rating.input') : null ); |
||||||
|
var lastipt = $( control.inputs ).filter(':checked'); |
||||||
|
var deadipt = $( control.inputs ).not(current); |
||||||
|
// check and uncheck elements as required
|
||||||
|
deadipt.prop('checked',false);//.removeAttr('checked');
|
||||||
|
current.prop('checked',true);//.attr('checked','checked');
|
||||||
|
// trigger change on current or last selected input
|
||||||
|
$(current.length? current : lastipt ).trigger({ type:'change', selfTriggered:true }); |
||||||
|
// click callback, as requested here: http://plugins.jquery.com/node/1655
|
||||||
|
if((wantCallBack || wantCallBack == undefined) && control.callback) control.callback.apply(current[0], [current.val(), $('a', control.current)[0]]);// callback event
|
||||||
|
// don't break the chain
|
||||||
|
return this; |
||||||
|
},// $.fn.rating.select
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
readOnly: function(toggle, disable){ // make the control read-only (still submits value)
|
||||||
|
var control = this.data('rating'); if(!control) return this; |
||||||
|
// setread-only status
|
||||||
|
control.readOnly = toggle || toggle==undefined ? true : false; |
||||||
|
// enable/disable control value submission
|
||||||
|
if(disable) $(control.inputs).attr("disabled", "disabled"); |
||||||
|
else $(control.inputs).removeAttr("disabled"); |
||||||
|
// Update rating control state
|
||||||
|
this.data('rating', control); |
||||||
|
// Update display
|
||||||
|
this.rating('draw'); |
||||||
|
},// $.fn.rating.readOnly
|
||||||
|
|
||||||
|
disable: function(){ // make read-only and never submit value
|
||||||
|
this.rating('readOnly', true, true); |
||||||
|
},// $.fn.rating.disable
|
||||||
|
|
||||||
|
enable: function(){ // make read/write and submit value
|
||||||
|
this.rating('readOnly', false, false); |
||||||
|
}// $.fn.rating.select
|
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
/*--------------------------------------------------------*/ |
||||||
|
|
||||||
|
/* |
||||||
|
### Default Settings ### |
||||||
|
eg.: You can override default control like this: |
||||||
|
$.fn.rating.options.cancel = 'Clear'; |
||||||
|
*/ |
||||||
|
$.fn.rating.options = { //$.extend($.fn.rating, { options: {
|
||||||
|
cancel: 'Cancel Rating', // advisory title for the 'cancel' link
|
||||||
|
cancelValue: '', // value to submit when user click the 'cancel' link
|
||||||
|
split: 0, // split the star into how many parts?
|
||||||
|
|
||||||
|
// Width of star image in case the plugin can't work it out. This can happen if
|
||||||
|
// the jQuery.dimensions plugin is not available OR the image is hidden at installation
|
||||||
|
starWidth: 16//,
|
||||||
|
|
||||||
|
//NB.: These don't need to be pre-defined (can be undefined/null) so let's save some code!
|
||||||
|
//half: false, // just a shortcut to control.split = 2
|
||||||
|
//required: false, // disables the 'cancel' button so user can only select one of the specified values
|
||||||
|
//readOnly: false, // disable rating plugin interaction/ values cannot be.one('change', //focus: function(){}, // executed when stars are focused
|
||||||
|
//blur: function(){}, // executed when stars are focused
|
||||||
|
//callback: function(){}, // executed when a star is clicked
|
||||||
|
}; //} });
|
||||||
|
|
||||||
|
/*--------------------------------------------------------*/ |
||||||
|
|
||||||
|
|
||||||
|
// auto-initialize plugin
|
||||||
|
$(function(){ |
||||||
|
$('input[type=radio].star').rating(); |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
/*# AVOID COLLISIONS #*/ |
||||||
|
})(jQuery); |
||||||
|
/*# AVOID COLLISIONS #*/ |
||||||
@ -0,0 +1,9 @@ |
|||||||
|
/* |
||||||
|
### jQuery Star Rating Plugin v4.11 - 2013-03-14 ### |
||||||
|
* Home: http://www.fyneworks.com/jquery/star-rating/
|
||||||
|
* Code: http://code.google.com/p/jquery-star-rating-plugin/
|
||||||
|
* |
||||||
|
* Licensed under http://en.wikipedia.org/wiki/MIT_License
|
||||||
|
### |
||||||
|
*/ |
||||||
|
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';5(1W.1C)(8($){5((!$.1s.1V&&!$.1s.1U))2d{1j.1X("1T",C,s)}1R(e){};$.o.4=8(j){5(3.u==0)9 3;5(M V[0]==\'1m\'){5(3.u>1){7 k=V;9 3.18(8(){$.o.4.K($(3),k)})};$.o.4[V[0]].K(3,$.27(V).26(1)||[]);9 3};7 j=$.1b({},$.o.4.1w,j||{});$.o.4.P++;3.1y(\'.l-4-1g\').p(\'l-4-1g\').18(8(){7 b,m=$(3);7 c=(3.2g||\'28-4\').1f(/\\[|\\]/g,\'Y\').1f(/^\\Y+|\\Y+$/g,\'\');7 d=$(3.2h||1j.1H);7 e=d.6(\'4\');5(!e||e.1o!=$.o.4.P)e={E:0,1o:$.o.4.P};7 f=e[c]||d.6(\'4\'+c);5(f)b=f.6(\'4\');5(f&&b)b.E++;R{b=$.1b({},j||{},($.1d?m.1d():($.25?m.6():w))||{},{E:0,L:[],v:[]});b.z=e.E++;f=$(\'<1G 13="l-4-1I"/>\');m.1J(f);f.p(\'4-12-11-10\');5(m.Z(\'G\')||m.14(\'G\'))b.n=s;5(m.14(\'1c\'))b.1c=s;f.1r(b.D=$(\'<W 13="4-D"><a U="\'+b.D+\'">\'+b.1B+\'</a></W>\').q(\'1e\',8(){$(3).4(\'N\');$(3).p(\'l-4-T\')}).q(\'1h\',8(){$(3).4(\'x\');$(3).I(\'l-4-T\')}).q(\'1i\',8(){$(3).4(\'y\')}).6(\'4\',b))};7 g=$(\'<W 20="21" 22-24="\'+3.U+\'" 13="l-4 t-\'+b.z+\'"><a U="\'+(3.U||3.1k)+\'">\'+3.1k+\'</a></W>\');f.1r(g);5(3.X)g.Z(\'X\',3.X);5(3.1x)g.p(3.1x);5(b.29)b.B=2;5(M b.B==\'1l\'&&b.B>0){7 h=($.o.15?g.15():0)||b.1n;7 i=(b.E%b.B),17=1K.1L(h/b.B);g.15(17).1M(\'a\').1N({\'1O-1P\':\'-\'+(i*17)+\'1Q\'})};5(b.n)g.p(\'l-4-1p\');R g.p(\'l-4-1S\').q(\'1e\',8(){$(3).4(\'1q\');$(3).4(\'J\')}).q(\'1h\',8(){$(3).4(\'x\');$(3).4(\'H\')}).q(\'1i\',8(){$(3).4(\'y\')});5(3.S)b.r=g;5(3.1Y=="A"){5($(3).14(\'1Z\'))b.r=g};m.1t();m.q(\'1u.4\',8(a){5(a.1v)9 C;$(3).4(\'y\')});g.6(\'4.m\',m.6(\'4.l\',g));b.L[b.L.u]=g[0];b.v[b.v.u]=m[0];b.t=e[c]=f;b.23=d;m.6(\'4\',b);f.6(\'4\',b);g.6(\'4\',b);d.6(\'4\',e);d.6(\'4\'+c,f)});$(\'.4-12-11-10\').4(\'x\').I(\'4-12-11-10\');9 3};$.1b($.o.4,{P:0,J:8(){7 a=3.6(\'4\');5(!a)9 3;5(!a.J)9 3;7 b=$(3).6(\'4.m\')||$(3.19==\'1a\'?3:w);5(a.J)a.J.K(b[0],[b.Q(),$(\'a\',b.6(\'4.l\'))[0]])},H:8(){7 a=3.6(\'4\');5(!a)9 3;5(!a.H)9 3;7 b=$(3).6(\'4.m\')||$(3.19==\'1a\'?3:w);5(a.H)a.H.K(b[0],[b.Q(),$(\'a\',b.6(\'4.l\'))[0]])},1q:8(){7 a=3.6(\'4\');5(!a)9 3;5(a.n)9;3.4(\'N\');3.1z().1A().O(\'.t-\'+a.z).p(\'l-4-T\')},N:8(){7 a=3.6(\'4\');5(!a)9 3;5(a.n)9;a.t.2a().O(\'.t-\'+a.z).I(\'l-4-q\').I(\'l-4-T\')},x:8(){7 a=3.6(\'4\');5(!a)9 3;3.4(\'N\');7 b=$(a.r);7 c=b.u?b.1z().1A().O(\'.t-\'+a.z):w;5(c)c.p(\'l-4-q\');a.D[a.n||a.1c?\'1t\':\'2b\']();3.2c()[a.n?\'p\':\'I\'](\'l-4-1p\')},y:8(a,b){7 c=3.6(\'4\');5(!c)9 3;5(c.n)9;c.r=w;5(M a!=\'F\'||3.u>1){5(M a==\'1l\')9 $(c.L[a]).4(\'y\',F,b);5(M a==\'1m\'){$.18(c.L,8(){5($(3).6(\'4.m\').Q()==a)$(3).4(\'y\',F,b)});9 3}}R{c.r=3[0].19==\'1a\'?3.6(\'4.l\'):(3.2e(\'.t-\'+c.z)?3:w)};3.6(\'4\',c);3.4(\'x\');7 d=$(c.r?c.r.6(\'4.m\'):w);7 e=$(c.v).O(\':S\');7 f=$(c.v).1y(d);f.1D(\'S\',C);d.1D(\'S\',s);$(d.u?d:e).2f({1E:\'1u\',1v:s});5((b||b==F)&&c.1F)c.1F.K(d[0],[d.Q(),$(\'a\',c.r)[0]]);9 3},n:8(a,b){7 c=3.6(\'4\');5(!c)9 3;c.n=a||a==F?s:C;5(b)$(c.v).Z("G","G");R $(c.v).2i("G");3.6(\'4\',c);3.4(\'x\')},2j:8(){3.4(\'n\',s,s)},2k:8(){3.4(\'n\',C,C)}});$.o.4.1w={D:\'2l 2m\',1B:\'\',B:0,1n:16};$(8(){$(\'m[1E=2n].l\').4()})})(1C);',62,148,'|||this|rating|if|data|var|function|return||||||||||||star|input|readOnly|fn|addClass|on|current|true|rater|length|inputs|null|draw|select|serial||split|false|cancel|count|undefined|disabled|blur|removeClass|focus|apply|stars|typeof|drain|filter|calls|val|else|checked|hover|title|arguments|div|id|_|attr|drawn|be|to|class|hasClass|width||spw|each|tagName|INPUT|extend|required|metadata|mouseover|replace|applied|mouseout|click|document|value|number|string|starWidth|call|readonly|fill|append|support|hide|change|selfTriggered|options|className|not|prevAll|addBack|cancelValue|jQuery|prop|type|callback|span|body|control|before|Math|floor|find|css|margin|left|px|catch|live|BackgroundImageCache|style|opacity|window|execCommand|nodeName|selected|role|text|aria|context|label|meta|slice|makeArray|unnamed|half|children|show|siblings|try|is|trigger|name|form|removeAttr|disable|enable|Cancel|Rating|radio'.split('|'),0,{})) |
||||||
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 815 B |
@ -0,0 +1,11 @@ |
|||||||
|
Content-Type: text/plain; charset="utf-8" |
||||||
|
MIME-Version: 1.0 |
||||||
|
Content-Transfer-Encoding: 8bit |
||||||
|
Subject: =?utf-8?b?W0RqYW5nb10g0J7RgdGC0LDQstC40LvQuCDQvtGC0LfRi9Cy?= |
||||||
|
From: admin@batiskaf-kz.kz |
||||||
|
To: spacenergy@me.com, admin@batiskaf-kz.kz |
||||||
|
Date: Tue, 30 Jun 2015 16:48:49 -0000 |
||||||
|
Message-ID: <20150630164849.7811.11121@MacBook-Pro.local> |
||||||
|
|
||||||
|
Смотреть в админке |
||||||
|
------------------------------------------------------------------------------- |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
Content-Type: text/plain; charset="utf-8" |
||||||
|
MIME-Version: 1.0 |
||||||
|
Content-Transfer-Encoding: 8bit |
||||||
|
Subject: =?utf-8?b?W0RqYW5nb10g0J7RgdGC0LDQstC40LvQuCDQvtGC0LfRi9Cy?= |
||||||
|
From: admin@batiskaf-kz.kz |
||||||
|
To: spacenergy@me.com, admin@batiskaf-kz.kz |
||||||
|
Date: Tue, 30 Jun 2015 16:49:31 -0000 |
||||||
|
Message-ID: <20150630164931.7872.76299@MacBook-Pro.local> |
||||||
|
|
||||||
|
Смотреть в админке |
||||||
|
------------------------------------------------------------------------------- |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
Content-Type: text/plain; charset="utf-8" |
||||||
|
MIME-Version: 1.0 |
||||||
|
Content-Transfer-Encoding: 8bit |
||||||
|
Subject: =?utf-8?b?W0RqYW5nb10g0J7RgdGC0LDQstC40LvQuCDQvtGC0LfRi9Cy?= |
||||||
|
From: admin@batiskaf-kz.kz |
||||||
|
To: spacenergy@me.com, admin@batiskaf-kz.kz |
||||||
|
Date: Tue, 30 Jun 2015 17:42:52 -0000 |
||||||
|
Message-ID: <20150630174252.10153.22812@MacBook-Pro.local> |
||||||
|
|
||||||
|
Смотреть в админке |
||||||
|
------------------------------------------------------------------------------- |
||||||
Loading…
Reference in new issue