add video template 4

This commit is contained in:
make
2025-05-10 15:08:28 +08:00
parent 7627c37879
commit 309c4ed098
54 changed files with 11207 additions and 1386 deletions

View File

@@ -0,0 +1,252 @@
MAC.History = {
'BoxShow': 0,
'Limit': 10,
'Days': 7,
'Json': '',
'Init': function() {
if ($('.mac_history').length == 0) {
return;
}
var jsondata = [];
if (this.Json) {
jsondata = this.Json;
} else {
var jsonstr = MAC.Cookie.Get('mac_history_full');
if (jsonstr != undefined) {
jsondata = eval(jsonstr);
}
}
if (jsondata.length > 0) {
html = '';
for ($i = 0; $i < jsondata.length; $i++) {
html += '<li><h5><a href="' + jsondata[$i].link + '">' + jsondata[$i].name +
'</a><em>/</em><a target="_blank" href="' + jsondata[$i].playlink + '">' + jsondata[$i].playname +
'</a></h5><a href="' + jsondata[$i].playlink +
'" class="playlog-del" id="playlog-del"><i class="icon iconfont icon-jijiang"></i></a></li>';
}
} else {
html = '<strong>暂无观看历史记录列表</strong>';
}
$(".mac_history_box").html(html);
if ($(".mac_history_set").attr('data-name')) {
var $that = $(".mac_history_set");
MAC.History.Set($that.attr('data-id'), $that.attr('data-name'), $that.attr('data-link'), $that.attr(
'data-playname'), $that.attr('data-playlink'), $that.attr('data-pic'), $that.attr('data-time'));
}
},
'Set': function(id, name, link, playname, playlink, pic, time) {
if (!playlink) {
playlink = document.URL;
}
if (!time) {
time = new Date();
}
var jsondata = MAC.Cookie.Get('mac_history_full');
if (jsondata != undefined) {
this.Json = eval(jsondata);
jsonstr = '{log:[{"id":"' + id + '","name":"' + name + '","link":"' + link + '","playname":"' + playname +
'","playlink":"' + playlink + '","pic":"' + pic + '","time":"' + time + '"},';
for ($i = 0; $i < this.Json.length; $i++) {
if ($i <= this.Limit && this.Json[$i]) {
if (this.Json[$i].id == id) {
continue;
} else {
jsonstr += '{"id":"' + this.Json[$i].id + '","name":"' + this.Json[$i].name + '","link":"' + this.Json[
$i].link + '","playname":"' + this.Json[$i].playname + '","playlink":"' + this.Json[$i].playlink +
'","pic":"' + this.Json[$i].pic + '","time":"' + this.Json[$i].time + '"},';
}
} else {
break;
}
}
jsonstr = jsonstr.substring(0, jsonstr.lastIndexOf(','));
jsonstr += "]}";
} else {
jsonstr = '{log:[{"id":"' + id + '","name":"' + name + '","link":"' + link + '","playname":"' + playname +
'","playlink":"' + playlink + '","pic":"' + pic + '","time":"' + time + '"}]}';
}
this.Json = eval(jsonstr);
MAC.Cookie.Set('mac_history_full', jsonstr, this.Days);
},
'Clear': function() {
MAC.Cookie.Del('mac_history_full');
$('.mac_history_box').html('<strong>暂无观看历史记录列表</strong>');
},
}
function playlistHeight() {
$(".min-play-list").css('maxHeight', $("#ewave_player").height() - $(".player-play-nav").height() - 20);
}
$(document).ready(function() {
var navSwiper = new Swiper('.header-nav-wrap', {
freeMode: true,
slidesPerView: 'auto',
initialSlide: $('.header-nav-wrap').find('.active').index(),
centeredSlides: true,
centeredSlidesBounds: true,
});
var navSwiper2 = new Swiper('.header-menu', {
freeMode: true,
slidesPerView: 'auto',
initialSlide: $('.header-menu').find('.active').index(),
centeredSlides: true,
centeredSlidesBounds: true,
});
var indexSwiper = new Swiper('#box-slide-1', {
lazy: {
loadPrevNext: true,
loadPrevNextAmount: 2,
},
loop: true,
autoplay: true,
effect: 'fade',
fadeEffect: {
crossFade: true,
},
pagination: {
el: '.swiper-pagination',
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
var typeSwiper = new Swiper('#box-slide-2', {
lazy: {
loadPrevNext: true,
loadPrevNextAmount: 2,
},
loop: true,
autoplay: true,
effect: 'fade',
fadeEffect: {
crossFade: true,
},
pagination: {
el: '.swiper-pagination',
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
var indexTypeSwiper = new Swiper('#box-slide-index', {
lazy: {
loadPrevNext: true,
loadPrevNextAmount: 2,
},
loop: true,
autoplay: true,
effect: 'fade',
fadeEffect: {
crossFade: true,
},
pagination: {
el: '.swiper-pagination',
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
var selectSwiper = new Swiper('.type-select-slide', {
freeMode: true,
slidesPerView: 'auto',
on: {
init: function(swiper) {
this.slideTo($('.type-select-slide').eq(this.$el.index()).find('.active').index() - 1);
},
},
});
var topSwiper = new Swiper('#nav-select', {
freeMode: true,
slidesPerView: 'auto',
on: {
init: function(swiper) {
this.slideTo(this.$el.find('.active').index() - 1);
},
},
});
if ($(".shrink-content").height() > 72) {
$(".shrink-box").addClass("closed");
}
$(".shrink-box.opened,.shrink-box.closed").click(function() {
$(this).toggleClass("opened closed");
});
if ($("#user-login").length > 0) {
if (MAC.Cookie.Get('user_id') != undefined && MAC.Cookie.Get('user_id') != '') {
$(".user-login-link").attr({
'href': maccms.path + '/index.php/user/index.html',
'target': '_blank',
'title': '用户中心'
});
} else {
$(".user-login-link").attr({
'href': 'javascript:;',
'target': '_self',
'title': '点击登录'
}).click(MAC.User.Login);
}
}
$("#slideDown-box").click(function() {
var $that = $(this);
$(".slideDown-box").slideToggle(function() {
if ($that.hasClass("up")) {
$that.html('展开<i class="iconfont icon-down"></i>');
} else {
$that.html('收起<i class="iconfont icon-up"></i>');
}
$that.toggleClass("up");
});
});
$(".detail-info").click(function() {
$(this).children("p").toggleClass("txt-hidden").siblings().children(".icon-down").toggleClass("icon-up");
});
$(".tab-toggle").click(function() {
if (!$(this).hasClass("active")) {
$(this).addClass("active").siblings().removeClass("active");
$(".tab-content").children().eq($(this).index()).fadeIn("fast").siblings().hide();
$(".tab-content").children().eq($(this).index()).find(".lazyload").lazyload();
if ($(this).hasClass("player-tab-toggle")) {
$("#min-more").removeClass().addClass("gico " + $(this).attr("from")).children(".name").text($(this)
.attr("show"));
}
}
});
$(".js-ep-show.more").click(function() {
$(this).toggleClass("hided").siblings(".js-ep-show").toggleClass("hided");
});
if ($(".player-play-nav").length > 0) {
playlistHeight();
$(window).resize(playlistHeight);
}
$(".player-shrink").click(function() {
$(this).toggleClass("icon-left").parents(".vod-play-box").toggleClass("max");
playlistHeight();
});
$(".min-play-more").click(function() {
$(this).find(".icon-down").toggleClass("icon-up");
$(".player-more-list").slideToggle("fast");
});
if ($(".min-play-more").length > 0) {
$("body").click(function(e) {
if ($(e.target).closest(".min-play-more,.player-more-list").length == 0) {
$(".min-play-more").find(".icon-down").removeClass("icon-up");
$(".player-more-list").slideUp("fast");
}
});
}
$(".back-top").click(function() {
$("html,body").animate({
scrollTop: 0
}, 300);
});
$(window).scroll(function() {
if ($(document).scrollTop() >= 100) {
$(".back-top").show();
} else {
$(".back-top").hide();
}
});
});

View File

@@ -0,0 +1,313 @@
var eWave = {
'Image': {
'Lazyload': function() {
$(".lazyload").lazyload({
effect: "fadeIn",
threshold: 200,
failurelimit: 50,
skip_invisible: false
});
}
},
'Digg': {
'Init': function() {
$('body').on('click', '.ewave_digg_link', function(e) {
var $that = $(this);
if ($that.attr("data-id")) {
MAC.Ajax(maccms.path + '/index.php/ajax/digg.html?mid=' + $that.attr("data-mid") + '&id=' + $that.attr("data-id") + '&type=' + $that.attr("data-type"), 'get', 'json', '',
function(r) {
if (r.code == 1) {
if ($that.attr("data-type") == 'up') {
$that.find('.digg_num').html(r.data.up);
} else {
$that.find('.digg_num').html(r.data.down);
}
} else {
MAC.Pop.Msg(100, 20, r.msg, 1000);
}
});
}
});
}
},
'Star': {
'Static': 0, //判断页面是否为静态
'Obj': '.ewave_star',
'Init': function() {
if ($(eWave.Star.Obj).length == 0) {
return;
}
if (eWave.Star.Static == 0) {
eWave.Star.View();
} else {
MAC.Ajax(maccms.path + '/index.php/ajax/score?mid=' + $(eWave.Star.Obj).attr('data-mid') + '&id=' + $(eWave
.Star.Obj).attr('data-id'), 'get', 'json', '', function(e) {
$(eWave.Star.Obj).attr({
'score': e.data.score,
'data-star': Math.ceil(e.data.score / 2),
'data-score-num': e.data.score_num
});
$(".raty-score-num").text(e.data.score);
eWave.Star.View();
});
}
},
'Get': function() {
MAC.Ajax(maccms.path + '/index.php/ajax/score?mid=' + $(eWave.Star.Obj).attr('data-mid') + '&id=' + $(eWave
.Star.Obj).attr('data-id'), 'get', 'json', '', function(e) {
$(eWave.Star.Obj).attr({
'score': e.data.score,
'data-star': Math.ceil(e.data.score / 2),
'data-score-num': e.data.score_num
});
$(".raty-score-num").text(e.data.score);
eWave.Star.View();
});
},
'View': function() {
$(eWave.Star.Obj).raty({
starType: 'li',
number: 5,
numberMax: 5,
space: false,
score: function() {
$(".raty-score-num").text($(eWave.Star.Obj).attr('score'));
return $(eWave.Star.Obj).attr('data-star');
},
hints: ['很差', '较差', '还行', '推荐', '力荐'],
starOff: '',
starOn: 'active',
target: $("#ratewords"),
targetKeep: $(eWave.Star.Obj).attr('data-score-num') > 0 ? true : false,
targetText: '暂无',
click: function(score, evt) {
MAC.Ajax(maccms.path + '/index.php/ajax/score?mid=' + $(eWave.Star.Obj).attr('data-mid') + '&id=' +
$(eWave.Star.Obj).attr('data-id') + '&score=' + (score * 2), 'get', 'json', '',
function(r) {
if (r.code == 1) {
$(eWave.Star.Obj).attr({
'score': r.data.score,
'data-star': Math.ceil(r.data.score / 2),
'data-score-num': r.data.score_num
});
$(".raty-score-num").text(r.data.score);
$(eWave.Star.Obj).raty('set', {
'score': Math.ceil(r.data.score / 2),
});
MAC.Pop.Msg(100, 20, '评分成功', 1000);
} else {
$(eWave.Star.Obj).raty('score', $(eWave.Star.Obj).attr('data-star'));
MAC.Pop.Msg(100, 20, r.msg, 1000);
}
},
function() {
$(eWave.Star.Obj).raty('score', $(eWave.Star.Obj).attr('data-star'));
MAC.Pop.Msg(100, 20, '网络异常', 1000);
});
}
});
}
},
'Comment': {
'Login': 0,
'Verify': 0,
'Init': function() {
$('body').on('click', '.comment_face_box img', function(e) {
var obj = $(this).parent().parent().parent().find('.comment_content');
MAC.AddEm(obj, $(this).attr('data-id'));
});
$('body').on('click', '.comment_face_panel', function(e) {
// $('.comment_face_box').toggle();
$(this).parent().find('.comment_face_box').toggle();
});
$('body').on('keyup', '.comment_content', function(e) {
var obj = $(this).parent().parent().parent().parent().find('.comment_remaining');
MAC.Remaining($(this), 200, obj)
});
$('body').on('focus', '.comment_content', function(e) {
if (eWave.Comment.Login == 1 && MAC.User.IsLogin != 1) {
MAC.User.Login();
}
});
$("body").on("click", ".ewave-comment-reply-switch", function() {
$($(this).attr("to")).slideToggle("fast");
$(".ewave-comment-reply-form").not($(this).attr("to")).slideUp("fast");
});
$('body').on('click', '.comment_report', function(e) {
var $that = $(this);
if ($(this).attr("data-id")) {
$.ajax({
url: maccms.path + '/index.php/comment/report.html?id=' + $that.attr("data-id"),
cache: false,
dataType: 'json',
success: function($r) {
$that.addClass('disabled');
MAC.Pop.Msg(100, 20, $r.msg, 1000);
if ($r.code == 1) {}
}
});
}
});
$('body').on('click', '.comment_submit', function(e) {
var $that = $(this);
eWave.Comment.Submit($that);
});
},
'Show': function($page) {
if ($(".ewave_comment").length > 0) {
$.ajax({
type: 'get',
url: maccms.path + '/index.php/comment/ajax.html?rid=' + $('.ewave_comment').attr('data-id') +
'&mid=' + $('.ewave_comment').attr('data-mid') + '&page=' + $page,
timeout: 5000,
error: function() {
$(".ewave_comment").html('<a href="javascript:void(0)" onclick="eWave.Comment.Show(' + $page + ')">评论加载失败,点击我刷新...</a>');
},
success: function($r) {
$(".ewave_comment").html($r);
}
});
}
},
'Reply': function($o) {
},
'Submit': function($o) {
var form = $o.parents('form');
if ($(form).find(".comment_content").val() == '') {
MAC.Pop.Msg(100, 20, '请输入评论!', 1000);
return false;
}
if ($('.ewave_comment').attr('data-mid') == '') {
MAC.Pop.Msg(100, 20, '模块mid错误', 1000);
return false;
}
if ($('.ewave_comment').attr('data-id') == '') {
MAC.Pop.Msg(100, 20, '关联id错误', 1000);
return false;
}
$.ajax({
type: 'post',
url: maccms.path + '/index.php/comment/saveData',
data: $(form).serialize() + '&comment_mid=' + $('.ewave_comment').attr('data-mid') + '&comment_rid=' +
$('.ewave_comment').attr('data-id'),
success: function($r) {
MAC.Pop.Msg(100, 20, $r.msg, 1000);
if ($r.code == 1) {
eWave.Comment.Show(1);
} else {
if (eWave.Comment.Verify == 1) {
form.find(".ewave-comment-verify-img").attr('src', maccms.path + '/index.php/verify/index.html?r=' + Math.random());
}
}
}
});
}
},
'Gbook': {
'Login': 0,
'Verify': 0,
'Init': function() {
$('body').on('keyup', '.gbook_content', function(e) {
MAC.Remaining($(this), 200, '.gbook_remaining')
});
$('body').on('focus', '.gbook_content', function(e) {
if (eWave.Gbook.Login == 1 && MAC.User.IsLogin != 1) {
$(".gbook_content").blur();
MAC.User.Login();
}
});
$('body').on('click', '.gbook_submit', function(e) {
eWave.Gbook.Submit();
});
},
'Show': function($page) {
MAC.Ajax(maccms.path + '/index.php/gbook/index?page=' + $page, 'post', 'json', '', function(r) {
$(".mac_gbook_box").html(r);
}, function() {
$(".mac_gbook_box").html('留言加载失败,请刷新...');
});
},
'Submit': function() {
if ($(".gbook_content").val() == '') {
MAC.Pop.Msg(100, 20, '请输入您的留言!', 1000);
return false;
}
MAC.Ajax(maccms.path + '/index.php/gbook/saveData', 'post', 'json', $('.gbook_form').serialize(), function(
r) {
MAC.Pop.Msg(100, 20, r.msg, 1000);
if (r.code == 1) {
location.reload();
} else {
if (eWave.Gbook.Verify == 1) {
$(".gbook_form").find(".ewave-comment-verify-img").attr('src', maccms.path + '/index.php/verify/index.html?r=' + Math.random());
}
}
});
},
'Report': function(name, id) {
MAC.Pop.Show(400, 300, '数据报错', maccms.path + '/index.php/gbook/report.html?id=' + id + '&name=' +
encodeURIComponent(name),
function(r) {
$(".gbook_content").focus();
$(".mac_verify_img_report").click();
});
}
},
'Ulog': {
'Init': function() {
eWave.Ulog.Set();
eWave.Ulog.Click();
},
'Get': function() {
MAC.Ajax(maccms.path + '/index.php/user/ajax_ulog/?ac=list&limit=2000&type=2', 'get', 'json', '', function(
r) {
if (r.code == 1) {
$.each(r['list'], function(index, row) {
if (row.ulog_type == 2) {
$("#detail-fav-" + row.data.id).removeAttr("data-id").html('<i class="fa fa-star"></i>已收藏');
$("#player-fav-" + row.data.id).removeAttr("data-id").children("a").text('已收藏');
}
});
} else {
}
});
},
'Set': function() {
if ($(".ewave_ulog_set").attr('data-mid')) {
var $that = $(".ewave_ulog_set");
$.get(maccms.path + '/index.php/user/ajax_ulog/?ac=set&mid=' + $that.attr("data-mid") + '&id=' + $that.attr("data-id") + '&sid=' + $that.attr("data-sid") + '&nid=' + $that.attr("data-nid") + '&type=' + $that.attr("data-type"));
}
},
'Click': function() {
$('body').on('click', '.ewave_ulog', function(e) {
//是否需要验证登录
if (MAC.User.IsLogin == 0) {
MAC.User.Login();
return;
}
var $that = $(this);
if ($that.attr("data-id")) {
MAC.Ajax(maccms.path + '/index.php/user/ajax_ulog/?ac=set&mid=' + $that.attr("data-mid") + '&id=' + $that.attr("data-id") + '&type=' + $that.attr("data-type"), 'get', 'json', '',
function(r) {
if (r.code == 1) {
MAC.Pop.Msg(100, 20, '收藏成功', 1000);
$(".detail-ulog").removeAttr("data-id").html('<i class="fa fa-star"></i>已收藏');
} else {
MAC.Pop.Msg(100, 20, '收藏成功', 1000);
}
});
}
});
},
},
}
$(document).ready(function() {
eWave.Digg.Init();
eWave.Star.Init();
eWave.Image.Lazyload();
});

View File

@@ -0,0 +1,2 @@
/*! Lazy Load 1.9.7 - MIT license - Copyright 2010-2015 Mika Tuupola */
!function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!1,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,763 @@
/*!
* jQuery Raty - A Star Rating Plugin
*
* The MIT License
*
* author: Washington Botelho
* github: wbotelhos/raty
* version: 2.9.0
*
*/
(function($) {
'use strict';
var methods = {
init: function(options) {
return this.each(function() {
this.self = $(this);
methods.destroy.call(this.self);
this.opt = $.extend(true, {}, $.fn.raty.defaults, options, this.self.data());
methods._adjustCallback.call(this);
methods._adjustNumber.call(this);
methods._adjustHints.call(this);
this.opt.score = methods._adjustedScore.call(this, this.opt.score);
if (this.opt.starType !== 'img') {
methods._adjustStarType.call(this);
}
methods._adjustPath.call(this);
methods._createStars.call(this);
if (this.opt.cancel) {
methods._createCancel.call(this);
}
if (this.opt.precision) {
methods._adjustPrecision.call(this);
}
methods._createScore.call(this);
methods._apply.call(this, this.opt.score);
methods._setTitle.call(this, this.opt.score);
methods._target.call(this, this.opt.score);
if (this.opt.readOnly) {
methods._lock.call(this);
} else {
this.style.cursor = 'pointer';
methods._binds.call(this);
}
});
},
_adjustCallback: function() {
var options = ['number', 'readOnly', 'score', 'scoreName', 'target', 'path'];
for (var i = 0; i < options.length; i++) {
if (typeof this.opt[options[i]] === 'function') {
this.opt[options[i]] = this.opt[options[i]].call(this);
}
}
},
_adjustedScore: function(score) {
if (!score) {
return score;
}
return methods._between(score, 0, this.opt.number);
},
_adjustHints: function() {
if (!this.opt.hints) {
this.opt.hints = [];
}
if (!this.opt.halfShow && !this.opt.half) {
return;
}
var steps = this.opt.precision ? 10 : 2;
for (var i = 0; i < this.opt.number; i++) {
var group = this.opt.hints[i];
if (Object.prototype.toString.call(group) !== '[object Array]') {
group = [group];
}
this.opt.hints[i] = [];
for (var j = 0; j < steps; j++) {
var
hint = group[j],
last = group[group.length - 1];
if (last === undefined) {
last = null;
}
this.opt.hints[i][j] = hint === undefined ? last : hint;
}
}
},
_adjustNumber: function() {
this.opt.number = methods._between(this.opt.number, 1, this.opt.numberMax);
},
_adjustPath: function() {
this.opt.path = this.opt.path || '';
if (this.opt.path && this.opt.path.charAt(this.opt.path.length - 1) !== '/') {
this.opt.path += '/';
}
},
_adjustPrecision: function() {
this.opt.half = true;
},
_adjustStarType: function() {
var replaces = ['cancelOff', 'cancelOn', 'starHalf', 'starOff', 'starOn'];
this.opt.path = '';
for (var i = 0; i < replaces.length; i++) {
this.opt[replaces[i]] = this.opt[replaces[i]].replace('.', '-');
}
},
_apply: function(score) {
methods._fill.call(this, score);
if (score) {
if (score > 0) {
this.score.val(score);
}
methods._roundStars.call(this, score);
}
},
_between: function(value, min, max) {
return Math.min(Math.max(parseFloat(value), min), max);
},
_binds: function() {
if (this.cancel) {
methods._bindOverCancel.call(this);
methods._bindClickCancel.call(this);
methods._bindOutCancel.call(this);
}
methods._bindOver.call(this);
methods._bindClick.call(this);
methods._bindOut.call(this);
},
_bindClick: function() {
var that = this;
that.stars.on('click.raty', function(evt) {
var
execute = true,
score = (that.opt.half || that.opt.precision) ? that.self.data('score') : (this.alt || $(this).data('alt'));
if (that.opt.click) {
execute = that.opt.click.call(that, +score, evt);
}
if (execute || execute === undefined) {
if (that.opt.half && !that.opt.precision) {
score = methods._roundHalfScore.call(that, score);
}
methods._apply.call(that, score);
}
});
},
_bindClickCancel: function() {
var that = this;
that.cancel.on('click.raty', function(evt) {
that.score.removeAttr('value');
if (that.opt.click) {
that.opt.click.call(that, null, evt);
}
});
},
_bindOut: function() {
var that = this;
that.self.on('mouseleave.raty', function(evt) {
var score = +that.score.val() || undefined;
methods._apply.call(that, score);
methods._target.call(that, score, evt);
methods._resetTitle.call(that);
if (that.opt.mouseout) {
that.opt.mouseout.call(that, score, evt);
}
});
},
_bindOutCancel: function() {
var that = this;
that.cancel.on('mouseleave.raty', function(evt) {
var icon = that.opt.cancelOff;
if (that.opt.starType !== 'img') {
icon = that.opt.cancelClass + ' ' + icon;
}
methods._setIcon.call(that, this, icon);
if (that.opt.mouseout) {
var score = +that.score.val() || undefined;
that.opt.mouseout.call(that, score, evt);
}
});
},
_bindOver: function() {
var
that = this,
action = that.opt.half ? 'mousemove.raty' : 'mouseover.raty';
that.stars.on(action, function(evt) {
var score = methods._getScoreByPosition.call(that, evt, this);
methods._fill.call(that, score);
if (that.opt.half) {
methods._roundStars.call(that, score, evt);
methods._setTitle.call(that, score, evt);
that.self.data('score', score);
}
methods._target.call(that, score, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that, score, evt);
}
});
},
_bindOverCancel: function() {
var that = this;
that.cancel.on('mouseover.raty', function(evt) {
var
starOff = that.opt.path + that.opt.starOff,
icon = that.opt.cancelOn;
if (that.opt.starType === 'img') {
that.stars.attr('src', starOff);
} else {
icon = that.opt.cancelClass + ' ' + icon;
that.stars.attr('class', starOff);
}
methods._setIcon.call(that, this, icon);
methods._target.call(that, null, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that, null);
}
});
},
_buildScoreField: function() {
return $('<input />', { name: this.opt.scoreName, type: 'hidden' }).appendTo(this);
},
_createCancel: function() {
var
icon = this.opt.path + this.opt.cancelOff,
cancel = $('<' + this.opt.starType + ' />', { title: this.opt.cancelHint, 'class': this.opt.cancelClass });
if (this.opt.starType === 'img') {
cancel.attr({ src: icon, alt: 'x' });
} else {
// TODO: use $.data
cancel.attr('data-alt', 'x').addClass(icon);
}
if (this.opt.cancelPlace === 'left') {
this.self.prepend('&#160;').prepend(cancel);
} else {
this.self.append('&#160;').append(cancel);
}
this.cancel = cancel;
},
_createScore: function() {
var score = $(this.opt.targetScore);
this.score = score.length ? score : methods._buildScoreField.call(this);
},
_createStars: function() {
for (var i = 1; i <= this.opt.number; i++) {
var
name = methods._nameForIndex.call(this, i),
attrs = { alt: i, src: this.opt.path + this.opt[name] };
if (this.opt.starType !== 'img') {
attrs = { 'data-alt': i, 'class': attrs.src }; // TODO: use $.data.
}
attrs.title = methods._getHint.call(this, i);
$('<' + this.opt.starType + ' />', attrs).appendTo(this);
if (this.opt.space) {
this.self.append(i < this.opt.number ? '&#160;' : '');
}
}
this.stars = this.self.children(this.opt.starType);
},
_error: function(message) {
$(this).text(message);
$.error(message);
},
_fill: function(score) {
var hash = 0;
for (var i = 1; i <= this.stars.length; i++) {
var
icon,
star = this.stars[i - 1],
turnOn = methods._turnOn.call(this, i, score);
if (this.opt.iconRange && this.opt.iconRange.length > hash) {
var irange = this.opt.iconRange[hash];
icon = methods._getRangeIcon.call(this, irange, turnOn);
if (i <= irange.range) {
methods._setIcon.call(this, star, icon);
}
if (i === irange.range) {
hash++;
}
} else {
icon = this.opt[turnOn ? 'starOn' : 'starOff'];
methods._setIcon.call(this, star, icon);
}
}
},
_getFirstDecimal: function(number) {
var
decimal = number.toString().split('.')[1],
result = 0;
if (decimal) {
result = parseInt(decimal.charAt(0), 10);
if (decimal.slice(1, 5) === '9999') {
result++;
}
}
return result;
},
_getRangeIcon: function(irange, turnOn) {
return turnOn ? irange.on || this.opt.starOn : irange.off || this.opt.starOff;
},
_getScoreByPosition: function(evt, icon) {
var score = parseInt(icon.alt || icon.getAttribute('data-alt'), 10);
if (this.opt.half) {
var
size = methods._getWidth.call(this),
percent = parseFloat((evt.pageX - $(icon).offset().left) / size);
score = score - 1 + percent;
}
return score;
},
_getHint: function(score, evt) {
if (score !== 0 && !score) {
return this.opt.noRatedMsg;
}
var
decimal = methods._getFirstDecimal.call(this, score),
integer = Math.ceil(score),
group = this.opt.hints[(integer || 1) - 1],
hint = group,
set = !evt || this.move;
if (this.opt.precision) {
if (set) {
decimal = decimal === 0 ? 9 : decimal - 1;
}
hint = group[decimal];
} else if (this.opt.halfShow || this.opt.half) {
decimal = set && decimal === 0 ? 1 : decimal > 5 ? 1 : 0;
hint = group[decimal];
}
return hint === '' ? '' : hint || score;
},
_getWidth: function() {
var width = this.stars[0].width || parseFloat(this.stars.eq(0).css('font-size'));
if (!width) {
methods._error.call(this, 'Could not get the icon width!');
}
return width;
},
_lock: function() {
var hint = methods._getHint.call(this, this.score.val());
this.style.cursor = '';
this.title = hint;
this.score.prop('readonly', true);
this.stars.prop('title', hint);
if (this.cancel) {
this.cancel.hide();
}
this.self.data('readonly', true);
},
_nameForIndex: function(i) {
return this.opt.score && this.opt.score >= i ? 'starOn' : 'starOff';
},
_resetTitle: function() {
for (var i = 0; i < this.opt.number; i++) {
this.stars[i].title = methods._getHint.call(this, i + 1);
}
},
_roundHalfScore: function(score) {
var
integer = parseInt(score, 10),
decimal = methods._getFirstDecimal.call(this, score);
if (decimal !== 0) {
decimal = decimal > 5 ? 1 : 0.5;
}
return integer + decimal;
},
_roundStars: function(score, evt) {
var
decimal = (score % 1).toFixed(2),
name ;
if (evt || this.move) {
name = decimal > 0.5 ? 'starOn' : 'starHalf';
} else if (decimal > this.opt.round.down) { // Up: [x.76 .. x.99]
name = 'starOn';
if (this.opt.halfShow && decimal < this.opt.round.up) { // Half: [x.26 .. x.75]
name = 'starHalf';
} else if (decimal < this.opt.round.full) { // Down: [x.00 .. x.5]
name = 'starOff';
}
}
if (name) {
var
icon = this.opt[name],
star = this.stars[Math.ceil(score) - 1];
methods._setIcon.call(this, star, icon);
} // Full down: [x.00 .. x.25]
},
_setIcon: function(star, icon) {
star[this.opt.starType === 'img' ? 'src' : 'className'] = this.opt.path + icon;
},
_setTarget: function(target, score) {
if (score) {
score = this.opt.targetFormat.toString().replace('{score}', score);
}
if (target.is(':input')) {
target.val(score);
} else {
target.html(score);
}
},
_setTitle: function(score, evt) {
if (score) {
var
integer = parseInt(Math.ceil(score), 10),
star = this.stars[integer - 1];
star.title = methods._getHint.call(this, score, evt);
}
},
_target: function(score, evt) {
if (this.opt.target) {
var target = $(this.opt.target);
if (!target.length) {
methods._error.call(this, 'Target selector invalid or missing!');
}
var mouseover = evt && evt.type === 'mouseover';
if (score === undefined) {
score = this.opt.targetText;
} else if (score === null) {
score = mouseover ? this.opt.cancelHint : this.opt.targetText;
} else {
if (this.opt.targetType === 'hint') {
score = methods._getHint.call(this, score, evt);
} else if (this.opt.precision) {
score = parseFloat(score).toFixed(1);
}
var mousemove = evt && evt.type === 'mousemove';
if (!mouseover && !mousemove && !this.opt.targetKeep) {
score = this.opt.targetText;
}
}
methods._setTarget.call(this, target, score);
}
},
_turnOn: function(i, score) {
return this.opt.single ? (i === score) : (i <= score);
},
_unlock: function() {
this.style.cursor = 'pointer';
this.removeAttribute('title');
this.score.removeAttr('readonly');
this.self.data('readonly', false);
for (var i = 0; i < this.opt.number; i++) {
this.stars[i].title = methods._getHint.call(this, i + 1);
}
if (this.cancel) {
this.cancel.css('display', '');
}
},
cancel: function(click) {
return this.each(function() {
var self = $(this);
if (self.data('readonly') !== true) {
methods[click ? 'click' : 'score'].call(self, null);
this.score.removeAttr('value');
}
});
},
click: function(score) {
return this.each(function() {
if ($(this).data('readonly') !== true) {
score = methods._adjustedScore.call(this, score);
methods._apply.call(this, score);
if (this.opt.click) {
this.opt.click.call(this, score, $.Event('click'));
}
methods._target.call(this, score);
}
});
},
destroy: function() {
return this.each(function() {
var
self = $(this),
raw = self.data('raw');
if (raw) {
self.off('.raty').empty().css({ cursor: raw.style.cursor }).removeData('readonly');
} else {
self.data('raw', self.clone()[0]);
}
});
},
getScore: function() {
var
score = [],
value ;
this.each(function() {
value = this.score.val();
score.push(value ? +value : undefined);
});
return (score.length > 1) ? score : score[0];
},
move: function(score) {
return this.each(function() {
var
integer = parseInt(score, 10),
decimal = methods._getFirstDecimal.call(this, score);
if (integer >= this.opt.number) {
integer = this.opt.number - 1;
decimal = 10;
}
var
width = methods._getWidth.call(this),
steps = width / 10,
star = $(this.stars[integer]),
percent = star.offset().left + steps * decimal,
evt = $.Event('mousemove', { pageX: percent });
this.move = true;
star.trigger(evt);
this.move = false;
});
},
readOnly: function(readonly) {
return this.each(function() {
var self = $(this);
if (self.data('readonly') !== readonly) {
if (readonly) {
self.off('.raty').children(this.opt.starType).off('.raty');
methods._lock.call(this);
} else {
methods._binds.call(this);
methods._unlock.call(this);
}
self.data('readonly', readonly);
}
});
},
reload: function() {
return methods.set.call(this, {});
},
score: function() {
var self = $(this);
return arguments.length ? methods.setScore.apply(self, arguments) : methods.getScore.call(self);
},
set: function(options) {
return this.each(function() {
$(this).raty($.extend({}, this.opt, options));
});
},
setScore: function(score) {
return this.each(function() {
if ($(this).data('readonly') !== true) {
score = methods._adjustedScore.call(this, score);
methods._apply.call(this, score);
methods._target.call(this, score);
}
});
}
};
$.fn.raty = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist!');
}
};
$.fn.raty.defaults = {
cancel: false,
cancelClass: 'raty-cancel',
cancelHint: 'Cancel this rating!',
cancelOff: 'cancel-off.png',
cancelOn: 'cancel-on.png',
cancelPlace: 'left',
click: undefined,
half: false,
halfShow: true,
hints: ['bad', 'poor', 'regular', 'good', 'gorgeous'],
iconRange: undefined,
mouseout: undefined,
mouseover: undefined,
noRatedMsg: 'Not rated yet!',
number: 5,
numberMax: 20,
path: undefined,
precision: false,
readOnly: false,
round: { down: 0.25, full: 0.6, up: 0.76 },
score: undefined,
scoreName: 'score',
single: false,
space: true,
starHalf: 'star-half.png',
starOff: 'star-off.png',
starOn: 'star-on.png',
starType: 'img',
target: undefined,
targetFormat: '{score}',
targetKeep: false,
targetScore: undefined,
targetText: '',
targetType: 'hint'
};
})(jQuery);

File diff suppressed because one or more lines are too long