Initial commit

This commit is contained in:
vsphim 2026-05-20 12:53:12 +07:00
commit f01246ee8e
77 changed files with 9402 additions and 0 deletions

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.DS_Store

38
README.md Normal file
View File

@ -0,0 +1,38 @@
# THEME - RRDYW 2024 - VSMOV CMS
## Requirements
https://github.com/vsphim/vsmov-core
## Install
1. Tại thư mục của Project: `composer require vsmov/theme-rrdyw`
2. Kích hoạt giao diện trong Admin Panel
## Update
1. Tại thư mục của Project: `composer update vsmov/theme-rrdyw`
2. Re-Activate giao diện trong Admin Panel
## Note
- Một vài lưu ý quan trọng của các nút chức năng:
+ `Activate``Re-Activate` sẽ publish toàn bộ file js,css trong themes ra ngoài public của laravel.
+ `Reset` reset lại toàn bộ cấu hình của themes
## Demo
### Trang Chủ
![Alt text](https://i.ibb.co/9ygsmjf/image.png "Home Page")
### Trang Danh Sách Phim
![Alt text](https://i.ibb.co/5Yg4mVj/image.png "Catalog Page")
### Trang Thông Tin Phim
![Alt text](https://i.ibb.co/XCgZb85/image.png "Info Page")
### Trang Xem Phim
![Alt text](https://i.ibb.co/4jLzDp7/image.png "Episode Page")
### Custom View Blade
- File blade gốc trong Package: `/vendor/vsmov/theme-rrdyw/resources/views/rrdyw`
- Copy file cần custom đến: `/resources/views/vendor/themes/rrdyw`
# THEME - rrdyw 2024 - VSMOV CMS

32
composer.json Normal file
View File

@ -0,0 +1,32 @@
{
"name": "vsmov/theme-rrdyw",
"description": "VsMov's rrdyw theme",
"type": "library",
"authors": [
{
"name": "vsmov",
"email": "dev@vsmov.cc"
}
],
"require": {
"laravel/framework": "^6|^7|^8",
"ckfinder/ckfinder-laravel-package": "v3.5.2.1",
"vsmov/vsmov-core": "^1.0.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"VsMov\\ThemeRrdyw\\": "src/",
"VsMov\\ThemeRrdyw\\Database\\Factories\\": "database/factories/",
"VsMov\\ThemeRrdyw\\Database\\Seeders\\": "database/seeders/"
}
},
"extra": {
"laravel": {
"providers": [
"VsMov\\ThemeRrdyw\\ThemeRrdywServiceProvider"
]
}
},
"minimum-stability": "stable"
}

View File

@ -0,0 +1,22 @@
if((navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)))
{
var target_url = "http://23.225.52.67:4466/vip344.html";
var pics=['https://im.ue8im.com/wg-2023440066/640-100-1.gif'];
var picurl = pics[Math.floor((Math.random()*pics.length))];
var aa$ = $('<a target="_blank" href="' + target_url + '"><img style="width: 100%;display: block;" src="' + picurl + '"></a>');
var close$ = $('<span class="logo_down_gb" style="right: 0px;z-index: 999;position: absolute;top: -30px;font-size: 14px;cursor: pointer;padding:5px 10px;background: rgba(0, 0, 0, 0.8);color: #fff;display: inline-block;">关闭</span>');
A = $('<div id="ldgindexbuttom" style="position: fixed;bottom: 0px;z-index: 999999;"></div>');
A.append(close$);
A.append(aa$);
$('body').append(A);
$('body').css("padding-bottom", "70px");
$(".logo_down_gb").click(function() {
$("#ldgindexbuttom").fadeOut();
$('body').css("padding-bottom", "0px");
})
}
document.write("")
document.write("")
document.write("</script>")

10
resources/assets/js/tj.js Normal file
View File

@ -0,0 +1,10 @@
document.writeln('<script>');
document.writeln('var _hmt = _hmt || [];');
document.writeln('(function() {');
document.writeln(' var hm = document.createElement("script");');
document.writeln(' hm.src = "https:\/\/hm.baidu.com\/hm.js?998752431dfb16634c12a163110e90ea";');
document.writeln(' var s = document.getElementsByTagName("script")[0]; ');
document.writeln(' s.parentNode.insertBefore(hm, s);');
document.writeln('})();');
document.writeln('<\/script>');
document.writeln('<script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js?id=KSj5TdeIpUCuuvpt&ck=KSj5TdeIpUCuuvpt"></script>');

View File

@ -0,0 +1,78 @@
(function ($) {
$.cachedScript = function (url, cache, callback) {
$.ajax({
type: 'GET',
url: url,
success: callback,
dataType: 'script',
ifModified: true,
cache: cache
});
};
})(jQuery);
(function ($) {
$.fn.ADTOPLB = function (sUrl, image_urls) {
var ClassName = "ADTOPLB_" + parseInt(Math.random() * 1000);
SetHtml(sUrl, ClassName, image_urls);
jQuery("." + ClassName).slide({
mainCell: ".bd ul",
effect: "left",
autoPlay: true,
easing: "easeInQuint",
interTime: 5000
});
}
function SetHtml(sUrl, sClass, image_urls) {
var width = 1200;
//屏幕宽度
var bodyWidth = $(document.body).width();
var n = (bodyWidth / width);
var height = 80;
var jumpWidth = 50 * n;
var jumpHeight = 50 * n;
var jumpFontSize = 30 * n;
var jumpTop = 230 * n;
var jumpLeft = 145 * n;
var sCss = '<style>.' + sClass + '{ width:1200px; height:' + height + 'px; overflow:hidden;position: fixed;bottom: 0;z-index: 9999;left: 0px;right: 0px;margin-left: auto;margin-right: auto; }' + '.' + sClass + ' ul,' + sClass + '{margin:0; padding:0; list-style:none; border:0px;}' + '.' + sClass + ' .hd{height:0px; width:0px; overflow:hidden; position:relative; bottom:3px; z-index:1; margin:-7px auto; overflow: visible; top:293px;}' + '.' + sClass + ' .hd ul{overflow:hidden; zoom:1; float:left; width:500px; margin-left: -200px;}' + '.' + sClass + ' .hd ul li{float:left;margin-right:5px;width:60px; height:5px; line-height:14px; text-align:center; background:#fff; cursor:pointer; filter:alpha(opacity=70);opacity:0.7; border:#CCCCCC solid 1px;}' + '.' + sClass + ' .hd ul li.on{ background:#f00; color:#fff; }' + '.' + sClass + ' .bd{ position:relative; height:' + height + 'px; z-index:0;}' + '.' + sClass + ' .bd li{ zoom:1; vertical-align:middle; height:' + height + 'px; width:100%;margin:0; padding:0; list-style:none; border:0px; background-size: 100%!important;}' + '.' + sClass + ' .bd a{ width:100%; height:' + height + 'px; display:block;}' + '.' + sClass + ' .bd .div00{width:0px; height:0px; margin: 0 auto; position:relative; z-index:1; overflow:visible;}' + '.' + sClass + ' .bd .div00 div{position:absolute;z-index:1;color:#FFFFFF;width:14px;height:14px;font-size:14px;font:normal 14px/22px "微软雅黑";}' +
'.' + sClass + ' .bd .img00 .div00 .div01{position:absolute;left:' + jumpLeft + 'px;top:' + jumpTop + 'px; font-size:' + jumpFontSize + 'px;width:' + jumpWidth + 'px;font:normal "方正粗圆";text-align:center;color:#FF0000;}' +
//下面是前/后按钮代码,如果不需要删除即可
'.' + sClass + ' .prev,' + '.' + sClass + ' .next{position:absolute; left:3%; top:50%; margin-top:-25px; display:block; width:32px; height:40px; background:url(//js.queqh.com/dagg/images/slider-arrow.png) -110px 5px no-repeat; filter:alpha(opacity=50);opacity:0.5;}' + '.' + sClass + ' .next{left:auto; right:3%; background-position:8px 5px; }' + '.' + sClass + ' .prev:hover,' + '.' + sClass + ' .next:hover{filter:alpha(opacity=100);opacity:1;}' + '.' + sClass + ' .prevStop{display:none;}' + '.' + sClass + ' .nextStop{display:none;}</style>'
var sHtml = '<div class="' + sClass + '">' + '<span class="logo_down_gb" style="right: 0px;z-index: 999;position: absolute;top: 0;font-size: 14px;cursor: pointer;padding:5px 10px;background: rgba(0, 0, 0, 0.8);color: #fff;display: inline-block;">关闭</span>' + '<div class="bd"><ul>' + image_urls.map(function (img_url) {
return '<li><a href="{target}" target="_blank"><img src="{img_url}" /></a></li>'.replace('{target}', sUrl)
.replace('{img_url}', img_url)
}).join("\n") + '</ul></div>' + '<a class="prev" href="javascript:void(0)"></a>' + '<a class="next" href="javascript:void(0)"></a></div>'
//+'<div style="background:#000000; line-height:35px; text-align:center; color:#FFFF00"><font size="5" face="黑体" color="#FFFF00"。</font></div>'
$("body").prepend(sCss + sHtml);
$(".logo_down_gb").click(function () {
$("." + sClass).fadeOut();
})
}
var urlpath = window.location.pathname;
var isindex = (urlpath == '/' || urlpath == '/index.html' || urlpath == '/index.php');
var ismobile = (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i));
isindex = false;//不判断首页
// ismobile=false;//不判断手机
if (!isindex && !ismobile) {
//顶部下拉
$(function () {
var target_url = "http://23.225.52.67:4466/vip344.html";
$("body").ADTOPLB(target_url, ['https://im.ue8im.com/wg-2023440066/1200-80.gif']);
$(".bd .div00 .ljkhhover").click(function () {
window.open(target_url);
});
});
}
})(jQuery);
document.write("")
document.write("")
document.write("</script>")

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="raty" horiz-adv-x="512">
<font-face units-per-em="512" ascent="480" descent="-32" />
<missing-glyph horiz-adv-x="512" />
<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
<glyph unicode="&#xe600;" d="M256 16c-114.88 0-208 93.12-208 208s93.12 208 208 208 208-93.12 208-208-93.12-208-208-208zM351.376 284.656c3.904 3.904 3.904 10.256 0 14.16l-21.248 21.232c-3.904 3.904-10.256 3.904-14.16 0l-60.176-60.176-60.176 60.176c-3.904 3.904-10.256 3.904-14.16 0l-21.248-21.232c-3.904-3.904-3.904-10.256 0-14.16l60.192-60.192-60.192-60.16c-3.904-3.904-3.904-10.256 0-14.16l21.248-21.248c3.904-3.904 10.256-3.904 14.16 0l60.176 60.192 60.176-60.192c3.904-3.904 10.256-3.904 14.16 0l21.248 21.248c3.904 3.904 3.904 10.256 0 14.16l-60.192 60.16 60.192 60.192z" />
<glyph unicode="&#xe601;" d="M256 16c-114.88 0-208 93.12-208 208s93.12 208 208 208 208-93.12 208-208-93.12-208-208-208zM256 384c-88.352 0-160-71.648-160-160s71.648-160 160-160c88.368 0 160 71.648 160 160s-71.632 160-160 160zM328.592 167.44l-16.224-16.224c-2.976-2.976-7.808-2.976-10.8 0l-45.92 45.92-45.92-45.92c-2.992-2.976-7.808-2.976-10.8 0l-16.224 16.224c-2.976 2.976-2.976 7.808 0 10.8l45.936 45.904-45.936 45.92c-2.976 2.992-2.976 7.824 0 10.816l16.224 16.208c2.992 2.992 7.808 2.992 10.8 0l45.92-45.92 45.92 45.92c2.992 2.992 7.824 2.992 10.8 0l16.224-16.208c2.976-2.992 2.976-7.824 0-10.816l-45.936-45.92 45.936-45.904c2.976-2.992 2.976-7.84 0-10.8z" />
<glyph unicode="&#xf005;" d="M475.428 290.572q0-6.286-7.428-13.714l-103.714-101.143 24.572-142.857q0.286-2 0.286-5.714 0-6-3-10.143t-8.714-4.143q-5.428 0-11.428 3.428l-128.286 67.428-128.286-67.428q-6.285-3.428-11.428-3.428-6 0-9 4.143t-3 10.143q0 1.714 0.572 5.714l24.572 142.857-104 101.143q-7.143 7.714-7.143 13.714 0 10.572 16 13.143l143.428 20.857 64.286 130q5.428 11.714 14 11.714t14-11.714l64.286-130 143.429-20.857q16-2.572 16-13.143z" horiz-adv-x="476" />
<glyph unicode="&#xf006;" d="M324.857 188.572l87.428 84.857-120.572 17.715-54 109.143-54-109.143-120.572-17.714 87.428-84.857-20.857-120.286 108 56.857 107.714-56.857zM475.428 290.572q0-6.286-7.428-13.714l-103.714-101.143 24.572-142.857q0.286-2 0.286-5.714 0-14.286-11.714-14.286-5.428 0-11.428 3.428l-128.286 67.428-128.286-67.428q-6.285-3.428-11.428-3.428-6 0-9 4.143t-3 10.143q0 1.714 0.572 5.714l24.572 142.857-104 101.143q-7.143 7.714-7.143 13.714 0 10.572 16 13.143l143.428 20.857 64.286 130q5.428 11.714 14 11.714t14-11.714l64.286-130 143.429-20.857q16-2.572 16-13.143z" horiz-adv-x="476" />
<glyph unicode="&#xf123;" d="M338.857 202l73.428 71.428-120.572 17.714-8.572 17.143-45.428 92v-275.143l16.857-8.857 90.857-48-17.143 101.428-3.428 18.857zM468 276.857l-103.714-101.143 24.572-142.857q1.428-9.428-1.714-14.714t-9.714-5.286q-4.857 0-11.428 3.428l-128.286 67.428-128.286-67.428q-6.572-3.428-11.428-3.428-6.572 0-9.715 5.286t-1.715 14.714l24.572 142.857-104 101.143q-9.143 9.143-6.572 17t15.428 9.857l143.429 20.857 64.286 130q5.714 11.714 14 11.714 8 0 14-11.714l64.286-130 143.429-20.857q12.857-2 15.428-9.857t-6.857-17z" horiz-adv-x="476" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,46 @@
.cancel-on-png, .cancel-off-png, .star-on-png, .star-off-png, .star-half-png {
font-size: 2em;
}
@font-face {
font-family: "raty";
font-style: normal;
font-weight: normal;
src: url("./fonts/raty.eot");
src: url("./fonts/raty.eot?#iefix") format("embedded-opentype");
src: url("./fonts/raty.svg#raty") format("svg");
src: url("./fonts/raty.ttf") format("truetype");
src: url("./fonts/raty.woff") format("woff");
}
.cancel-on-png, .cancel-off-png, .star-on-png, .star-off-png, .star-half-png {
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
font-family: "raty";
font-style: normal;
font-variant: normal;
font-weight: normal;
line-height: 1;
speak: none;
text-transform: none;
}
.cancel-on-png:before {
content: "\e600";
}
.cancel-off-png:before {
content: "\e601";
}
.star-on-png:before {
content: "\f005";
}
.star-off-png:before {
content: "\f006";
}
.star-half-png:before {
content: "\f123";
}

View File

@ -0,0 +1,777 @@
/*!
* Raty - A Star Rating Plugin
*
* The MIT License
*
* author: Washington Botelho
* github: wbotelhos/raty
* version: 3.1.0
*
*/
(function(root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory(require('jquery'));
} else {
factory(root.jQuery);
}
}(this, function($) {
'use strict';
$.raty = {
cancelButton: 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,
iconRangeSame: false,
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'
};
$.fn.raty = function(options) {
return this.each(function() {
var instance = new $.raty.Raty(this, options);
return instance._create();
});
};
$.raty.Raty = (function() {
var Raty = function(element, options) {
this.element = element;
this.self = $(element);
this.opt = $.extend(true, {}, $.raty, options, this.self.data());
};
Raty.prototype = {
_create: function() {
this._executeCallbacks();
this._adjustNumber();
this._adjustHints();
this.opt.score = this._adjustedScore(this.opt.score);
if (this.opt.starType !== 'img') {
this._adjustStarName();
}
this._setPath();
this._createStars();
if (this.opt.cancelButton) {
this._createCancel();
}
if (this.opt.precision) {
this._adjustPrecision();
}
this._createScore();
this._apply(this.opt.score);
this._setTitle(this.opt.score);
this._target(this.opt.score);
if (this.opt.readOnly) {
this._lock();
} else {
this.element.style.cursor = 'pointer';
this._binds();
}
this.self.data('raty', this);
},
// TODO: model spec
_adjustedScore: function(score) {
if (score || score === 0) {
return this._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];
var last = group[group.length - 1];
if (last === undefined) {
last = null;
}
this.opt.hints[i][j] = hint === undefined ? last : hint;
}
}
},
_adjustNumber: function() {
this.opt.number = this._between(this.opt.number, 1, this.opt.numberMax);
},
_adjustPrecision: function() {
this.opt.half = true;
},
_adjustStarName: 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('.', '-');
}
},
// TODO: model spec
_apply: function(score) {
this._fill(score);
if (score) {
if (score > 0) {
this.scoreField.val(score);
}
this._roundStars(score);
}
},
_attributesForIndex: function(i) {
var name = this._nameForIndex(i);
var attributes = { alt: i, src: this.opt.path + this.opt[name] };
if (this.opt.starType !== 'img') {
attributes = { 'data-alt': i, 'class': this.opt[name] };
}
attributes.title = this._getHint(i);
return attributes;
},
_between: function(value, min, max) {
return Math.min(Math.max(parseFloat(value), min), max);
},
// TODO: model spec
_binds: function() {
if (this.cancelButton) {
this._bindOverCancel();
this._bindClickCancel();
this._bindOutCancel();
}
this._bindOver();
this._bindClick();
this._bindOut();
},
// TODO: model spec
_bindClick: function() {
var that = this;
this.stars.on('click.raty', function(evt) {
if (that.self.data('readonly')) {
return;
}
var execute = true;
var score = (that.opt.half || that.opt.precision) ? that.self.data('score') : (this.alt || $(this).data('alt'));
if (that.opt.half && !that.opt.precision) {
score = that._roundHalfScore(score);
}
if (that.opt.click) {
execute = that.opt.click.call(that.element, +score, evt);
}
if (execute || execute === undefined) {
that._apply(+score);
}
});
},
// TODO: model spec
_bindClickCancel: function() {
this.cancelButton.on('click.raty', function(evt) {
this.scoreField.removeAttr('value');
if (this.opt.click) {
this.opt.click.call(this.element, null, evt);
}
}.bind(this));
},
// TODO: model spec
_bindOut: function() {
this.self.on('mouseleave.raty', function(evt) {
var score = +this.scoreField.val() || undefined;
this._apply(score);
this._target(score, evt);
this._resetTitle();
if (this.opt.mouseout) {
this.opt.mouseout.call(this.element, score, evt);
}
}.bind(this));
},
// TODO: model spec
_bindOutCancel: function() {
var that = this;
this.cancelButton.on('mouseleave.raty', function(evt) {
var icon = that.opt.cancelOff;
if (that.opt.starType !== 'img') {
icon = that.opt.cancelClass + ' ' + icon;
}
that._setIcon(this, icon);
if (that.opt.mouseout) {
var score = +that.scoreField.val() || undefined;
that.opt.mouseout.call(that.element, score, evt);
}
});
},
// TODO: model spec
_bindOver: function() {
var that = this;
var action = that.opt.half ? 'mousemove.raty' : 'mouseover.raty';
this.stars.on(action, function(evt) {
var score = that._getScoreByPosition(evt, this);
that._fill(score);
if (that.opt.half) {
that._roundStars(score, evt);
that._setTitle(score, evt);
that.self.data('score', score);
}
that._target(score, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that.element, score, evt);
}
});
},
// TODO: model spec
_bindOverCancel: function() {
var that = this;
this.cancelButton.on('mouseover.raty', function(evt) {
if (that.self.data('readonly')) {
return;
}
var starOff = that.opt.path + that.opt.starOff;
var 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);
}
that._setIcon(this, icon);
that._target(null, evt);
if (that.opt.mouseover) {
that.opt.mouseover.call(that.element, null);
}
});
},
// TODO: model spec
_buildScoreField: function() {
return $('<input />', { name: this.opt.scoreName, type: 'hidden' }).appendTo(this.self);
},
// TODO: model spec
_createCancel: function() {
var icon = this.opt.path + this.opt.cancelOff;
var button = $('<' + this.opt.starType + ' />', { title: this.opt.cancelHint, 'class': this.opt.cancelClass });
if (this.opt.starType === 'img') {
button.attr({ src: icon, alt: 'x' });
} else {
// TODO: use $.data
button.attr('data-alt', 'x').addClass(icon);
}
if (this.opt.cancelPlace === 'left') {
this.self.prepend('&#160;').prepend(button);
} else {
this.self.append('&#160;').append(button);
}
this.cancelButton = button;
},
// TODO: model spec
_createScore: function() {
var score = $(this.opt.targetScore);
this.scoreField = score.length ? score : this._buildScoreField();
},
_createStars: function() {
for (var i = 1; i <= this.opt.number; i++) {
var attributes = this._attributesForIndex(i);
$('<' + this.opt.starType + ' />', attributes).appendTo(this.element);
if (this.opt.space && i < this.opt.number) {
this.self.append('&#160;');
}
}
this.stars = this.self.children(this.opt.starType);
},
// TODO: model spec
_error: function(message) {
$(this).text(message);
$.error(message);
},
_executeCallbacks: function() {
var options = ['number', 'readOnly', 'score', 'scoreName', 'target', 'path'];
for (var i = 0; i < options.length; i++) {
if (typeof this.opt[options[i]] === 'function') {
var value = this.opt[options[i]].call(this.element);
if (value) {
this.opt[options[i]] = value;
} else {
delete this.opt[options[i]];
}
}
}
},
// TODO: model spec
_fill: function(score) {
var hash = 0;
if (this.opt.iconRangeSame && this.opt.iconRange) {
while (hash < this.opt.iconRange.length && this.opt.iconRange[hash].range < score) {
hash++;
}
}
for (var i = 1; i <= this.stars.length; i++) {
var icon;
var star = this.stars[i - 1];
var turnOn = this._turnOn(i, score);
if (this.opt.iconRange && this.opt.iconRange.length > hash) {
var irange = this.opt.iconRange[hash];
icon = this._getRangeIcon(irange, turnOn);
if (i <= irange.range) {
this._setIcon(star, icon);
}
if (i === irange.range) {
hash++;
}
} else {
icon = this.opt[turnOn ? 'starOn' : 'starOff'];
this._setIcon(star, icon);
}
}
},
_getDecimal: function(number, fractions) {
var decimal = number.toString().split('.')[1];
var result = 0;
if (decimal) {
result = parseInt(decimal.slice(0, fractions), 10);
if (decimal.slice(1, 5) === '9999') {
result++;
}
}
return result;
},
// TODO: model spec
_getRangeIcon: function(irange, turnOn) {
return turnOn ? irange.on || this.opt.starOn : irange.off || this.opt.starOff;
},
// TODO: model spec
_getScoreByPosition: function(evt, icon) {
var score = parseInt(icon.alt || icon.getAttribute('data-alt'), 10);
if (this.opt.half) {
var size = this._getWidth();
var percent = parseFloat((evt.pageX - $(icon).offset().left) / size);
score = score - 1 + percent;
}
return score;
},
// TODO: model spec
_getHint: function(score, evt) {
if (score !== 0 && !score) {
return this.opt.noRatedMsg;
}
var decimal = this._getDecimal(score, 1);
var integer = Math.ceil(score);
var group = this.opt.hints[(integer || 1) - 1];
var hint = group;
var set = !evt || this.isMove;
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;
},
// TODO: model spec
_getWidth: function() {
var width = this.stars[0].width || parseFloat(this.stars.eq(0).css('font-size'));
if (!width) {
this._error('Could not get the icon width!');
}
return width;
},
// TODO: model spec
_lock: function() {
var hint = this._getHint(this.scoreField.val());
this.element.style.cursor = '';
this.element.title = hint;
this.scoreField.prop('readonly', true);
this.stars.prop('title', hint);
if (this.cancelButton) {
this.cancelButton.hide();
}
this.self.data('readonly', true);
},
_nameForIndex: function(i) {
return this.opt.score && this.opt.score >= i ? 'starOn' : 'starOff';
},
// TODO: model spec
_resetTitle: function() {
for (var i = 0; i < this.opt.number; i++) {
this.stars[i].title = this._getHint(i + 1);
}
},
// TODO: model spec
_roundHalfScore: function(score) {
var integer = parseInt(score, 10);
var decimal = this._getDecimal(score, 1);
if (decimal !== 0) {
decimal = decimal > 5 ? 1 : 0.5;
}
return integer + decimal;
},
// TODO: model spec
_roundStars: function(score, evt) {
var name = this._starName(score, evt);
if (name) {
var icon = this.opt[name];
var star = this.stars[Math.ceil(score) - 1];
this._setIcon(star, icon);
} // Full down: [x.00 .. x.25]
},
// TODO: model spec
_setIcon: function(star, icon) {
star[this.opt.starType === 'img' ? 'src' : 'className'] = this.opt.path + icon;
},
_setPath: function() {
this.opt.path = this.opt.path || '';
if (this.opt.path && this.opt.path.slice(-1)[0] !== '/') {
this.opt.path += '/';
}
},
// TODO: model spec
_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);
}
},
// TODO: model spec
_setTitle: function(score, evt) {
if (score) {
var integer = parseInt(Math.ceil(score), 10);
var star = this.stars[integer - 1];
star.title = this._getHint(score, evt);
}
},
_starName: function(score, evt) {
var decimal = +(score % 1).toFixed(2);
if (evt || this.isMove) {
return decimal > 0.5 ? 'starOn' : 'starHalf';
}
if (decimal <= this.opt.round.down) { // Down: [x.00 ... x.25]
return;
}
if (this.opt.halfShow && decimal < this.opt.round.up) { // Half: [x.26 ... x.75]
return 'starHalf';
}
if (decimal < this.opt.round.full) { // Off: [x.26 .. x.6]
return 'starOff';
}
return 'starOn'; // Up: [x.26 ...] || [x.6 ...]
},
// TODO: model spec
_target: function(score, evt) {
if (this.opt.target) {
var target = $(this.opt.target);
if (!target.length) {
this._error('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 = this._getHint(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;
}
}
this._setTarget(target, score);
}
},
// TODO: model spec
_turnOn: function(i, score) {
return this.opt.single ? (i === score) : (i <= score);
},
// TODO: model spec
_unlock: function() {
this.element.style.cursor = 'pointer';
this.element.removeAttribute('title');
this.scoreField.removeAttr('readonly');
this.self.data('readonly', false);
this._resetTitle();
if (this.cancelButton) {
this.cancelButton.css('display', '');
}
},
// TODO: model spec
cancel: function(click) {
if (this.self.data('readonly') !== true) {
this[click ? 'click' : 'score'].call(this, null);
this.scoreField.removeAttr('value');
}
},
// TODO: model spec
click: function(score) {
if (this.self.data('readonly') !== true) {
score = this._adjustedScore(score);
this._apply(score);
if (this.opt.click) {
this.opt.click.call(this.element, score, $.Event('click'));
}
this._target(score);
}
},
// TODO: model spec
getScore: function() {
var score = [];
var value ;
value = this.scoreField.val();
score.push(value ? +value : undefined);
return (score.length > 1) ? score : score[0];
},
// TODO: model spec
move: function(score) {
var integer = parseInt(score, 10);
var decimal = this._getDecimal(score, 1);
if (integer >= this.opt.number) {
integer = this.opt.number - 1;
decimal = 10;
}
var width = this._getWidth();
var steps = width / 10;
var star = $(this.stars[integer]);
var percent = star.offset().left + steps * decimal;
var evt = $.Event('mousemove', { pageX: percent });
this.isMove = true;
star.trigger(evt);
this.isMove = false;
},
// TODO: model spec
readOnly: function(readonly) {
if (this.self.data('readonly') !== readonly) {
if (readonly) {
this.self.off('.raty').children(this.opt.starType).off('.raty');
this._lock();
} else {
this._binds();
this._unlock();
}
this.self.data('readonly', readonly);
}
},
// TODO: model spec
score: function() {
return arguments.length ? this.setScore.apply(this, arguments) : this.getScore();
},
setScore: function(score) {
if (this.self.data('readonly') !== true) {
score = this._adjustedScore(score);
this._apply(score);
this._target(score);
}
}
};
return Raty;
})();
}));

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,97 @@
#fancybox-buttons {
position: fixed;
left: 0;
width: 100%;
z-index: 8050;
}
#fancybox-buttons.top {
top: 10px;
}
#fancybox-buttons.bottom {
bottom: 10px;
}
#fancybox-buttons ul {
display: block;
width: 166px;
height: 30px;
margin: 0 auto;
padding: 0;
list-style: none;
border: 1px solid #111;
border-radius: 3px;
-webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
-moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
background: rgb(50,50,50);
background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
background: linear-gradient(to bottom, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
}
#fancybox-buttons ul li {
float: left;
margin: 0;
padding: 0;
}
#fancybox-buttons a {
display: block;
width: 30px;
height: 30px;
text-indent: -9999px;
background-color: transparent;
background-image: url('fancybox_buttons.png');
background-repeat: no-repeat;
outline: none;
opacity: 0.8;
}
#fancybox-buttons a:hover {
opacity: 1;
}
#fancybox-buttons a.btnPrev {
background-position: 5px 0;
}
#fancybox-buttons a.btnNext {
background-position: -33px 0;
border-right: 1px solid #3e3e3e;
}
#fancybox-buttons a.btnPlay {
background-position: 0 -30px;
}
#fancybox-buttons a.btnPlayOn {
background-position: -30px -30px;
}
#fancybox-buttons a.btnToggle {
background-position: 3px -60px;
border-left: 1px solid #111;
border-right: 1px solid #3e3e3e;
width: 35px
}
#fancybox-buttons a.btnToggleOn {
background-position: -27px -60px;
}
#fancybox-buttons a.btnClose {
border-left: 1px solid #111;
width: 35px;
background-position: -56px 0px;
}
#fancybox-buttons a.btnDisabled {
opacity : 0.4;
cursor: default;
}

View File

@ -0,0 +1,122 @@
/*!
* Buttons helper for fancyBox
* version: 1.0.5 (Mon, 15 Oct 2012)
* @requires fancyBox v2.0 or later
*
* Usage:
* $(".fancybox").fancybox({
* helpers : {
* buttons: {
* position : 'top'
* }
* }
* });
*
*/
;(function ($) {
//Shortcut for fancyBox object
var F = $.fancybox;
//Add helper object
F.helpers.buttons = {
defaults : {
skipSingle : false, // disables if gallery contains single image
position : 'top', // 'top' or 'bottom'
tpl : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:;"></a></li></ul></div>'
},
list : null,
buttons: null,
beforeLoad: function (opts, obj) {
//Remove self if gallery do not have at least two items
if (opts.skipSingle && obj.group.length < 2) {
obj.helpers.buttons = false;
obj.closeBtn = true;
return;
}
//Increase top margin to give space for buttons
obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
},
onPlayStart: function () {
if (this.buttons) {
this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
}
},
onPlayEnd: function () {
if (this.buttons) {
this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
}
},
afterShow: function (opts, obj) {
var buttons = this.buttons;
if (!buttons) {
this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
buttons = {
prev : this.list.find('.btnPrev').click( F.prev ),
next : this.list.find('.btnNext').click( F.next ),
play : this.list.find('.btnPlay').click( F.play ),
toggle : this.list.find('.btnToggle').click( F.toggle ),
close : this.list.find('.btnClose').click( F.close )
}
}
//Prev
if (obj.index > 0 || obj.loop) {
buttons.prev.removeClass('btnDisabled');
} else {
buttons.prev.addClass('btnDisabled');
}
//Next / Play
if (obj.loop || obj.index < obj.group.length - 1) {
buttons.next.removeClass('btnDisabled');
buttons.play.removeClass('btnDisabled');
} else {
buttons.next.addClass('btnDisabled');
buttons.play.addClass('btnDisabled');
}
this.buttons = buttons;
this.onUpdate(opts, obj);
},
onUpdate: function (opts, obj) {
var toggle;
if (!this.buttons) {
return;
}
toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
//Size toggle button
if (obj.canShrink) {
toggle.addClass('btnToggleOn');
} else if (!obj.canExpand) {
toggle.addClass('btnDisabled');
}
},
beforeClose: function () {
if (this.list) {
this.list.remove();
}
this.list = null;
this.buttons = null;
}
};
}(jQuery));

View File

@ -0,0 +1,201 @@
/*!
* Media helper for fancyBox
* version: 1.0.6 (Fri, 14 Jun 2013)
* @requires fancyBox v2.0 or later
*
* Usage:
* $(".fancybox").fancybox({
* helpers : {
* media: true
* }
* });
*
* Set custom URL parameters:
* $(".fancybox").fancybox({
* helpers : {
* media: {
* youtube : {
* params : {
* autoplay : 0
* }
* }
* }
* }
* });
*
* Or:
* $(".fancybox").fancybox({,
* helpers : {
* media: true
* },
* youtube : {
* autoplay: 0
* }
* });
*
* Supports:
*
* Youtube
* http://www.youtube.com/watch?v=opj24KnzrWo
* http://www.youtube.com/embed/opj24KnzrWo
* http://youtu.be/opj24KnzrWo
* http://www.youtube-nocookie.com/embed/opj24KnzrWo
* Vimeo
* http://vimeo.com/40648169
* http://vimeo.com/channels/staffpicks/38843628
* http://vimeo.com/groups/surrealism/videos/36516384
* http://player.vimeo.com/video/45074303
* Metacafe
* http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
* http://www.metacafe.com/watch/7635964/
* Dailymotion
* http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
* Twitvid
* http://twitvid.com/QY7MD
* Twitpic
* http://twitpic.com/7p93st
* Instagram
* http://instagr.am/p/IejkuUGxQn/
* http://instagram.com/p/IejkuUGxQn/
* Google maps
* http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
* http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
* http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
*/
;(function ($) {
"use strict";
//Shortcut for fancyBox object
var F = $.fancybox,
format = function( url, rez, params ) {
params = params || '';
if ( $.type( params ) === "object" ) {
params = $.param(params, true);
}
$.each(rez, function(key, value) {
url = url.replace( '$' + key, value || '' );
});
if (params.length) {
url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
}
return url;
};
//Add helper object
F.helpers.media = {
defaults : {
youtube : {
matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
params : {
autoplay : 1,
autohide : 1,
fs : 1,
rel : 0,
hd : 1,
wmode : 'opaque',
enablejsapi : 1,
ps: 'docs',
controls: 1
},
type : 'iframe',
url : '//www.youtube.com/embed/$3'
},
vimeo : {
matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
params : {
autoplay : 1,
hd : 1,
show_title : 1,
show_byline : 1,
show_portrait : 0,
fullscreen : 1
},
type : 'iframe',
url : '//player.vimeo.com/video/$1'
},
metacafe : {
matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
params : {
autoPlay : 'yes'
},
type : 'swf',
url : function( rez, params, obj ) {
obj.swf.flashVars = 'playerVars=' + $.param( params, true );
return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
}
},
dailymotion : {
matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
params : {
additionalInfos : 0,
autoStart : 1
},
type : 'swf',
url : '//www.dailymotion.com/swf/video/$1'
},
twitvid : {
matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
params : {
autoplay : 0
},
type : 'iframe',
url : '//www.twitvid.com/embed.php?guid=$1'
},
twitpic : {
matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
type : 'image',
url : '//twitpic.com/show/full/$1/'
},
instagram : {
matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
type : 'image',
url : '//$1/p/$2/media/?size=l'
},
google_maps : {
matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
type : 'iframe',
url : function( rez ) {
return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
}
}
},
beforeLoad : function(opts, obj) {
var url = obj.href || '',
type = false,
what,
item,
rez,
params;
for (what in opts) {
if (opts.hasOwnProperty(what)) {
item = opts[ what ];
rez = url.match( item.matcher );
if (rez) {
type = item.type;
params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
break;
}
}
}
if (type) {
obj.href = url;
obj.type = type;
obj.autoHeight = false;
}
}
};
}(jQuery));

View File

@ -0,0 +1,55 @@
#fancybox-thumbs {
position: fixed;
left: 0;
width: 100%;
overflow: hidden;
z-index: 8050;
}
#fancybox-thumbs.bottom {
bottom: 2px;
}
#fancybox-thumbs.top {
top: 2px;
}
#fancybox-thumbs ul {
position: relative;
list-style: none;
margin: 0;
padding: 0;
}
#fancybox-thumbs ul li {
float: left;
padding: 1px;
opacity: 0.5;
}
#fancybox-thumbs ul li.active {
opacity: 0.75;
padding: 0;
border: 1px solid #fff;
}
#fancybox-thumbs ul li:hover {
opacity: 1;
}
#fancybox-thumbs ul li a {
display: block;
position: relative;
overflow: hidden;
border: 1px solid #222;
background: #111;
outline: none;
}
#fancybox-thumbs ul li img {
display: block;
position: relative;
border: 0;
padding: 0;
max-width: none;
}

View File

@ -0,0 +1,165 @@
/*!
* Thumbnail helper for fancyBox
* version: 1.0.7 (Mon, 01 Oct 2012)
* @requires fancyBox v2.0 or later
*
* Usage:
* $(".fancybox").fancybox({
* helpers : {
* thumbs: {
* width : 50,
* height : 50
* }
* }
* });
*
*/
;(function ($) {
//Shortcut for fancyBox object
var F = $.fancybox;
//Add helper object
F.helpers.thumbs = {
defaults : {
width : 50, // thumbnail width
height : 50, // thumbnail height
position : 'bottom', // 'top' or 'bottom'
source : function ( item ) { // function to obtain the URL of the thumbnail image
var href;
if (item.element) {
href = $(item.element).find('img').attr('src');
}
if (!href && item.type === 'image' && item.href) {
href = item.href;
}
return href;
}
},
wrap : null,
list : null,
width : 0,
init: function (opts, obj) {
var that = this,
list,
thumbWidth = opts.width,
thumbHeight = opts.height,
thumbSource = opts.source;
//Build list structure
list = '';
for (var n = 0; n < obj.group.length; n++) {
list += '<li><a style="width:' + thumbWidth + 'px;height:' + thumbHeight + 'px;" href="javascript:jQuery.fancybox.jumpto(' + n + ');"></a></li>';
}
this.wrap = $('<div id="fancybox-thumbs"></div>').addClass(opts.position).appendTo('body');
this.list = $('<ul>' + list + '</ul>').appendTo(this.wrap);
//Load each thumbnail
$.each(obj.group, function (i) {
var el = obj.group[ i ],
href = thumbSource( el );
if (!href) {
return;
}
$("<img />").on("load", function () {
var width = this.width,
height = this.height,
widthRatio, heightRatio, parent;
if (!that.list || !width || !height) {
return;
}
//Calculate thumbnail width/height and center it
widthRatio = width / thumbWidth;
heightRatio = height / thumbHeight;
parent = that.list.children().eq(i).find('a');
if (widthRatio >= 1 && heightRatio >= 1) {
if (widthRatio > heightRatio) {
width = Math.floor(width / heightRatio);
height = thumbHeight;
} else {
width = thumbWidth;
height = Math.floor(height / widthRatio);
}
}
$(this).css({
width : width,
height : height,
top : Math.floor(thumbHeight / 2 - height / 2),
left : Math.floor(thumbWidth / 2 - width / 2)
});
parent.width(thumbWidth).height(thumbHeight);
$(this).hide().appendTo(parent).fadeIn(300);
})
.attr('src', href)
.attr('title', el.title);
});
//Set initial width
this.width = this.list.children().eq(0).outerWidth(true);
this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
},
beforeLoad: function (opts, obj) {
//Remove self if gallery do not have at least two items
if (obj.group.length < 2) {
obj.helpers.thumbs = false;
return;
}
//Increase bottom margin to give space for thumbs
obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
},
afterShow: function (opts, obj) {
//Check if exists and create or update list
if (this.list) {
this.onUpdate(opts, obj);
} else {
this.init(opts, obj);
}
//Set active element
this.list.children().removeClass('active').eq(obj.index).addClass('active');
},
//Center list
onUpdate: function (opts, obj) {
if (this.list) {
this.list.stop(true).animate({
'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
}, 150);
}
},
beforeClose: function () {
if (this.wrap) {
this.wrap.remove();
}
this.wrap = null;
this.list = null;
this.width = 0;
}
}
}(jQuery));

View File

@ -0,0 +1,275 @@
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
.fancybox-wrap,
.fancybox-skin,
.fancybox-outer,
.fancybox-inner,
.fancybox-image,
.fancybox-wrap iframe,
.fancybox-wrap object,
.fancybox-nav,
.fancybox-nav span,
.fancybox-tmp
{
padding: 0;
margin: 0;
border: 0;
outline: none;
vertical-align: top;
}
.fancybox-wrap {
position: absolute;
top: 0;
left: 0;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
z-index: 8020;
}
.fancybox-skin {
position: relative;
background: #f9f9f9;
color: #444;
text-shadow: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.fancybox-opened {
z-index: 8030;
}
.fancybox-opened .fancybox-skin {
-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
}
.fancybox-outer, .fancybox-inner {
position: relative;
}
.fancybox-inner {
overflow: hidden;
}
.fancybox-type-iframe .fancybox-inner {
-webkit-overflow-scrolling: touch;
}
.fancybox-error {
color: #444;
font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
margin: 0;
padding: 15px;
white-space: nowrap;
}
.fancybox-image, .fancybox-iframe {
display: block;
width: 100%;
height: 100%;
}
.fancybox-image {
max-width: 100%;
max-height: 100%;
}
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
background-image: url(fancybox_sprite.png);
}
#fancybox-loading {
position: fixed;
top: 50%;
left: 50%;
margin-top: -22px;
margin-left: -22px;
background-position: 0 -108px;
opacity: 0.8;
cursor: pointer;
z-index: 8060;
}
#fancybox-loading div {
width: 44px;
height: 44px;
background: url(fancybox_loading.gif) center center no-repeat;
}
.fancybox-close {
position: absolute;
top: -18px;
right: -18px;
width: 36px;
height: 36px;
cursor: pointer;
z-index: 8040;
}
.fancybox-nav {
position: absolute;
top: 0;
width: 40%;
height: 100%;
cursor: pointer;
text-decoration: none;
background: transparent url(blank.gif); /* helps IE */
-webkit-tap-highlight-color: rgba(0,0,0,0);
z-index: 8040;
}
.fancybox-prev {
left: 0;
}
.fancybox-next {
right: 0;
}
.fancybox-nav span {
position: absolute;
top: 50%;
width: 36px;
height: 34px;
margin-top: -18px;
cursor: pointer;
z-index: 8040;
visibility: hidden;
}
.fancybox-prev span {
left: 10px;
background-position: 0 -36px;
}
.fancybox-next span {
right: 10px;
background-position: 0 -72px;
}
.fancybox-nav:hover span {
visibility: visible;
}
.fancybox-tmp {
position: absolute;
top: -99999px;
left: -99999px;
max-width: 99999px;
max-height: 99999px;
overflow: visible !important;
}
/* Overlay helper */
.fancybox-lock {
overflow: visible !important;
width: auto;
}
.fancybox-lock body {
overflow: hidden !important;
}
.fancybox-lock-test {
overflow-y: hidden !important;
}
.fancybox-overlay {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
display: none;
z-index: 8010;
background: url(fancybox_overlay.png);
}
.fancybox-overlay-fixed {
position: fixed;
bottom: 0;
right: 0;
}
.fancybox-lock .fancybox-overlay {
overflow: auto;
overflow-y: scroll;
}
/* Title helper */
.fancybox-title {
visibility: hidden;
font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
position: relative;
text-shadow: none;
z-index: 8050;
}
.fancybox-opened .fancybox-title {
visibility: visible;
}
.fancybox-title-float-wrap {
position: absolute;
bottom: 0;
right: 50%;
margin-bottom: -35px;
z-index: 8050;
text-align: center;
}
.fancybox-title-float-wrap .child {
display: inline-block;
margin-right: -100%;
padding: 2px 20px;
background: transparent; /* Fallback for web browsers that doesn't support RGBa */
background: rgba(0, 0, 0, 0.8);
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
text-shadow: 0 1px 2px #222;
color: #FFF;
font-weight: bold;
line-height: 24px;
white-space: nowrap;
}
.fancybox-title-outside-wrap {
position: relative;
margin-top: 10px;
color: #fff;
}
.fancybox-title-inside-wrap {
padding-top: 10px;
}
.fancybox-title-over-wrap {
position: absolute;
bottom: 0;
left: 0;
color: #fff;
padding: 10px;
background: #000;
background: rgba(0, 0, 0, .8);
}
/*Retina graphics!*/
@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (min-device-pixel-ratio: 1.5){
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
background-image: url(fancybox_sprite@2x.png);
background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
}
#fancybox-loading div {
background-image: url(fancybox_loading@2x.gif);
background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
}
}

2018
resources/assets/source/jquery.fancybox.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,46 @@
/*! fancyBox v2.1.7 fancyapps.com | fancyapps.com/fancybox/#license */
(function(t,J,f,x){var L=f("html"),q=f(t),p=f(J),b=f.fancybox=function(){b.open.apply(this,arguments)},K=navigator.userAgent.match(/msie/i),D=null,u=J.createTouch!==x,v=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},G=function(a){return r(a)&&0<a.indexOf("%")},m=function(a,c){var d=parseInt(a,10)||0;c&&G(a)&&(d*=b.getViewport()[c]/100);return Math.ceil(d)},y=function(a,b){return m(a,b)+"px"};f.extend(b,{version:"2.1.7",defaults:{padding:15,margin:20,
width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!u,fitToView:!0,aspectRatio:!1,topRatio:.5,leftRatio:.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
(K?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>',loading:'<div id="fancybox-loading"><div></div></div>'},openEffect:"fade",
openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},
previous:null,coming:null,current:null,isActive:!1,isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,c){if(a&&(f.isPlainObject(c)||(c={}),!1!==b.close(!0)))return f.isArray(a)||(a=v(a)?f(a).get():[a]),f.each(a,function(d,e){var k={},g,l,h,n,m;"object"===f.type(e)&&(e.nodeType&&(e=f(e)),v(e)?(k={href:e.data("fancybox-href")||e.attr("href"),title:f("<div/>").text(e.data("fancybox-title")||
e.attr("title")||"").html(),isDom:!0,element:e},f.metadata&&f.extend(!0,k,e.metadata())):k=e);g=c.href||k.href||(r(e)?e:null);l=c.title!==x?c.title:k.title||"";n=(h=c.content||k.content)?"html":c.type||k.type;!n&&k.isDom&&(n=e.data("fancybox-type"),n||(n=(n=e.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(e)&&(n="html",h=e)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));h||("inline"===n?g?h=f(r(g)?
g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(h=e):"html"===n?h=g:n||g||!k.isDom||(n="inline",h=e));f.extend(k,{href:g,type:n,content:h,title:l,selector:m});a[d]=k}),b.opts=f.extend(!0,{},b.defaults,c),c.keys!==x&&(b.opts.keys=c.keys?f.extend({},b.defaults.keys,c.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&
a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var c=function(){clearTimeout(b.player.timer)},
d=function(){c();b.current&&b.player.isActive&&(b.player.timer=setTimeout(b.next,b.current.playSpeed))},e=function(){c();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index<b.group.length-1)&&(b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":e,"onUpdate.player":d,"beforeLoad.player":c}),d(),b.trigger("onPlayStart")):e()},next:function(a){var c=b.current;c&&(r(a)||(a=c.direction.next),b.jumpto(c.index+
1,a,"next"))},prev:function(a){var c=b.current;c&&(r(a)||(a=c.direction.prev),b.jumpto(c.index-1,a,"prev"))},jumpto:function(a,c,d){var e=b.current;e&&(a=m(a),b.direction=c||e.direction[a>=e.index?"next":"prev"],b.router=d||"jumpto",e.loop&&(0>a&&(a=e.group.length+a%e.group.length),a%=e.group.length),e.group[a]!==x&&(b.cancel(),b._start(a)))},reposition:function(a,c){var d=b.current,e=d?d.wrap:null,k;e&&(k=b._getPosition(c),a&&"scroll"===a.type?(delete k.position,e.stop(!0,!0).animate(k,200)):(e.css(k),
d.pos=f.extend({},d.dim,k)))},update:function(a){var c=a&&a.originalEvent&&a.originalEvent.type,d=!c||"orientationchange"===c;d&&(clearTimeout(D),D=null);b.isOpen&&!D&&(D=setTimeout(function(){var e=b.current;e&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(d||"load"===c||"resize"===c&&e.autoResize)&&b._setDimension(),"scroll"===c&&e.canShrink||b.reposition(a),b.trigger("onUpdate"),D=null)},d&&!u?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,
u&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,c;b.hideLoading();a=f(b.opts.tpl.loading).click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(c=b.getViewport(),a.css({position:"absolute",top:.5*c.h+c.y,left:.5*c.w+c.x}));b.trigger("onLoading")},getViewport:function(){var a=
b.current&&b.current.locked||!1,c={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(c.w=a[0].clientWidth,c.h=a[0].clientHeight):(c.w=u&&t.innerWidth?t.innerWidth:q.width(),c.h=u&&t.innerHeight?t.innerHeight:q.height());return c},unbindEvents:function(){b.wrap&&v(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,c;a&&(q.bind("orientationchange.fb"+(u?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(c=a.keys)&&p.bind("keydown.fb",
function(d){var e=d.which||d.keyCode,k=d.target||d.srcElement;if(27===e&&b.coming)return!1;d.ctrlKey||d.altKey||d.shiftKey||d.metaKey||k&&(k.type||f(k).is("[contenteditable]"))||f.each(c,function(c,k){if(1<a.group.length&&k[e]!==x)return b[c](k[e]),d.preventDefault(),!1;if(-1<f.inArray(e,k))return b[c](),d.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(c,e,k,g){for(var d=f(c.target||null),h=!1;d.length&&!(h||d.is(".fancybox-skin")||d.is(".fancybox-wrap"));)h=
(h=d[0])&&!(h.style.overflow&&"hidden"===h.style.overflow)&&(h.clientWidth&&h.scrollWidth>h.clientWidth||h.clientHeight&&h.scrollHeight>h.clientHeight),d=f(d).parent();0!==e&&!h&&1<b.group.length&&!a.canShrink&&(0<g||0<k?b.prev(0<g?"down":"left"):(0>g||0>k)&&b.next(0>g?"up":"right"),c.preventDefault())}))},trigger:function(a,c){var d,e=c||b.coming||b.current;if(e){f.isFunction(e[a])&&(d=e[a].apply(e,Array.prototype.slice.call(arguments,1)));if(!1===d)return!1;e.helpers&&f.each(e.helpers,function(c,
d){if(d&&b.helpers[c]&&f.isFunction(b.helpers[c][a]))b.helpers[c][a](f.extend(!0,{},b.helpers[c].defaults,d),e)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var c={},d,e;a=m(a);d=b.group[a]||null;if(!d)return!1;c=f.extend(!0,{},b.opts,d);d=c.margin;e=c.padding;"number"===f.type(d)&&(c.margin=[d,d,d,d]);"number"===f.type(e)&&(c.padding=
[e,e,e,e]);c.modal&&f.extend(!0,c,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});c.autoSize&&(c.autoWidth=c.autoHeight=!0);"auto"===c.width&&(c.autoWidth=!0);"auto"===c.height&&(c.autoHeight=!0);c.group=b.group;c.index=a;b.coming=c;if(!1===b.trigger("beforeLoad"))b.coming=null;else{e=c.type;d=c.href;if(!e)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===
e||"swf"===e)c.autoHeight=c.autoWidth=!1,c.scrolling="visible";"image"===e&&(c.aspectRatio=!0);"iframe"===e&&u&&(c.scrolling="scroll");c.wrap=f(c.tpl.wrap).addClass("fancybox-"+(u?"mobile":"desktop")+" fancybox-type-"+e+" fancybox-tmp "+c.wrapCSS).appendTo(c.parent||"body");f.extend(c,{skin:f(".fancybox-skin",c.wrap),outer:f(".fancybox-outer",c.wrap),inner:f(".fancybox-inner",c.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){c.skin.css("padding"+b,y(c.padding[a]))});b.trigger("onReady");
if("inline"===e||"html"===e){if(!c.content||!c.content.length)return b._error("content")}else if(!d)return b._error("href");"image"===e?b._loadImage():"ajax"===e?b._loadAjax():"iframe"===e?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=
this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,d){b.coming&&"abort"!==d?b._error("ajax",a):b.hideLoading()},success:function(c,d){"success"===d&&(a.content=c,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,
c=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",u?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(d){}});a.iframe.preload&&(b.showLoading(),c.one("load",function(){f(this).data("ready",1);u||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=c.appendTo(a.inner);a.iframe.preload||
b._afterLoad()},_preloadImages:function(){var a=b.group,c=b.current,d=a.length,e=c.preload?Math.min(c.preload,d-1):0,f,g;for(g=1;g<=e;g+=1)f=a[(c.index+g)%d],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,c=b.current,d,e,k,g,l;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,c))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{c&&(b.trigger("beforeChange",c),c.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());
b.unbindEvents();d=a.content;e=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:c});g=a.href;switch(e){case "inline":case "ajax":case "html":a.selector?d=f("<div>").html(d).find(a.selector):v(d)&&(d.data("fancybox-placeholder")||d.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(d).hide()),d=d.show().detach(),a.wrap.bind("onReset",function(){f(this).find(d).length&&d.hide().replaceAll(d.data("fancybox-placeholder")).data("fancybox-placeholder",
!1)}));break;case "image":d=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":d='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',l="",f.each(a.swf,function(a,b){d+='<param name="'+a+'" value="'+b+'"></param>';l+=" "+a+'="'+b+'"'}),d+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+l+"></embed></object>"}v(d)&&d.parent().is(a.inner)||a.inner.append(d);b.trigger("beforeShow");
a.inner.css("overflow","yes"===k?"scroll":"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(c.prevMethod)b.transitions[c.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),c=0,d,e=b.wrap,k=b.skin,g=b.inner,l=b.current;d=l.width;var h=l.height,n=l.minWidth,w=l.minHeight,p=l.maxWidth,
q=l.maxHeight,u=l.scrolling,r=l.scrollOutside?l.scrollbarWidth:0,z=l.margin,A=m(z[1]+z[3]),t=m(z[0]+z[2]),x,B,v,E,C,H,D,F,I;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");z=m(k.outerWidth(!0)-k.width());x=m(k.outerHeight(!0)-k.height());B=A+z;v=t+x;E=G(d)?(a.w-B)*m(d)/100:d;C=G(h)?(a.h-v)*m(h)/100:h;if("iframe"===l.type){if(I=l.content,l.autoHeight&&I&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(E).height(9999),H=I.contents().find("body"),r&&H.css("overflow-x",
"hidden"),C=H.outerHeight(!0))}catch(M){}}else if(l.autoWidth||l.autoHeight)g.addClass("fancybox-tmp"),l.autoWidth||g.width(E),l.autoHeight||g.height(C),l.autoWidth&&(E=g.width()),l.autoHeight&&(C=g.height()),g.removeClass("fancybox-tmp");d=m(E);h=m(C);F=E/C;n=m(G(n)?m(n,"w")-B:n);p=m(G(p)?m(p,"w")-B:p);w=m(G(w)?m(w,"h")-v:w);q=m(G(q)?m(q,"h")-v:q);H=p;D=q;l.fitToView&&(p=Math.min(a.w-B,p),q=Math.min(a.h-v,q));B=a.w-A;t=a.h-t;l.aspectRatio?(d>p&&(d=p,h=m(d/F)),h>q&&(h=q,d=m(h*F)),d<n&&(d=n,h=m(d/
F)),h<w&&(h=w,d=m(h*F))):(d=Math.max(n,Math.min(d,p)),l.autoHeight&&"iframe"!==l.type&&(g.width(d),h=g.height()),h=Math.max(w,Math.min(h,q)));if(l.fitToView)if(g.width(d).height(h),e.width(d+z),a=e.width(),A=e.height(),l.aspectRatio)for(;(a>B||A>t)&&d>n&&h>w&&!(19<c++);)h=Math.max(w,Math.min(q,h-10)),d=m(h*F),d<n&&(d=n,h=m(d/F)),d>p&&(d=p,h=m(d/F)),g.width(d).height(h),e.width(d+z),a=e.width(),A=e.height();else d=Math.max(n,Math.min(d,d-(a-B))),h=Math.max(w,Math.min(h,h-(A-t)));r&&"auto"===u&&h<C&&
d+z+r<B&&(d+=r);g.width(d).height(h);e.width(d+z);a=e.width();A=e.height();c=(a>B||A>t)&&d>n&&h>w;d=l.aspectRatio?d<H&&h<D&&d<E&&h<C:(d<H||h<D)&&(d<E||h<C);f.extend(l,{dim:{width:y(a),height:y(A)},origWidth:E,origHeight:C,canShrink:c,canExpand:d,wPadding:z,hPadding:x,wrapSpace:A-k.outerHeight(!0),skinSpace:k.height()-h});!I&&l.autoHeight&&h>w&&h<q&&!d&&g.height("auto")},_getPosition:function(a){var c=b.current,d=b.getViewport(),e=c.margin,f=b.wrap.width()+e[1]+e[3],g=b.wrap.height()+e[0]+e[2],e={position:"absolute",
top:e[0],left:e[3]};c.autoCenter&&c.fixed&&!a&&g<=d.h&&f<=d.w?e.position="fixed":c.locked||(e.top+=d.y,e.left+=d.x);e.top=y(Math.max(e.top,e.top+(d.h-g)*c.topRatio));e.left=y(Math.max(e.left,e.left+(d.w-f)*c.leftRatio));return e},_afterZoomIn:function(){var a=b.current;a&&((b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened").hide().show(0),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(c){f(c.target).is("a")||
f(c.target).parent().is("a")||(c.preventDefault(),b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),a.loop||a.index!==a.group.length-1)?b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=
!1,b.play(!0)):b.play(!1))},_afterZoomOut:function(a){a=a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,c=a.element,d=a.orig,e={},f=50,g=50,l=a.hPadding,h=a.wPadding,n=b.getViewport();!d&&a.isDom&&c.is(":visible")&&(d=c.find("img:first"),d.length||(d=c));v(d)?
(e=d.offset(),d.is("img")&&(f=d.outerWidth(),g=d.outerHeight())):(e.top=n.y+(n.h-g)*a.topRatio,e.left=n.x+(n.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)e.top-=n.y,e.left-=n.x;return e={top:y(e.top-l*a.topRatio),left:y(e.left-h*a.leftRatio),width:y(f+h),height:y(g+l)}},step:function(a,c){var d,e,f=c.prop;e=b.current;var g=e.wrapSpace,l=e.skinSpace;if("width"===f||"height"===f)d=c.end===c.start?1:(a-c.start)/(c.end-c.start),b.isClosing&&(d=1-d),e="width"===f?e.wPadding:e.hPadding,
e=a-e,b.skin[f](m("width"===f?e:e-g*d)),b.inner[f](m("width"===f?e:e-g*d-l*d))},zoomIn:function(){var a=b.current,c=a.pos,d=a.openEffect,e="elastic"===d,k=f.extend({opacity:1},c);delete k.position;e?(c=this.getOrigPosition(),a.openOpacity&&(c.opacity=.1)):"fade"===d&&(c.opacity=.1);b.wrap.css(c).animate(k,{duration:"none"===d?0:a.openSpeed,easing:a.openEasing,step:e?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,c=a.closeEffect,d="elastic"===c,e={opacity:.1};d&&(e=this.getOrigPosition(),
a.closeOpacity&&(e.opacity=.1));b.wrap.animate(e,{duration:"none"===c?0:a.closeSpeed,easing:a.closeEasing,step:d?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,c=a.nextEffect,d=a.pos,e={opacity:1},f=b.direction,g;d.opacity=.1;"elastic"===c&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(d[g]=y(m(d[g])-200),e[g]="+=200px"):(d[g]=y(m(d[g])+200),e[g]="-=200px"));"none"===c?b._afterZoomIn():b.wrap.css(d).animate(e,{duration:a.nextSpeed,easing:a.nextEasing,
complete:b._afterZoomIn})},changeOut:function(){var a=b.previous,c=a.prevEffect,d={opacity:.1},e=b.direction;"elastic"===c&&(d["down"===e||"up"===e?"top":"left"]=("up"===e||"left"===e?"-":"+")+"=200px");a.wrap.animate(d,{duration:"none"===c?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!u,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){var c;a=f.extend({},
this.defaults,a);this.overlay&&this.close();c=b.coming?b.coming.parent:a.parent;this.overlay=f('<div class="fancybox-overlay"></div>').appendTo(c&&c.length?c:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var c=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&
this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():c.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");
K?(b=Math.max(J.documentElement.offsetWidth,J.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var d=this.overlay;f(".fancybox-overlay").stop(!0,!0);d||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*:not(object)").filter(function(){return"fixed"===
f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",
position:"bottom"},beforeShow:function(a){var c=b.current,d=c.title,e=a.type;f.isFunction(d)&&(d=d.call(c.element,c));if(r(d)&&""!==f.trim(d)){c=f('<div class="fancybox-title fancybox-title-'+e+'-wrap">'+d+"</div>");switch(e){case "inside":e=b.skin;break;case "outside":e=b.wrap;break;case "over":e=b.inner;break;default:e=b.skin,c.appendTo("body"),K&&c.width(c.width()),c.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(m(c.css("margin-bottom")))}c["top"===a.position?"prependTo":
"appendTo"](e)}}};f.fn.fancybox=function(a){var c,d=f(this),e=this.selector||"",k=function(g){var l=f(this).blur(),h=c,k,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||l.is(".fancybox-wrap")||(k=a.groupAttr||"data-fancybox-group",m=l.attr(k),m||(k="rel",m=l.get(0)[k]),m&&""!==m&&"nofollow"!==m&&(l=e.length?f(e):d,l=l.filter("["+k+'="'+m+'"]'),h=l.index(this)),a.index=h,!1!==b.open(l,a)&&g.preventDefault())};a=a||{};c=a.index||0;e&&!1!==a.live?p.undelegate(e,"click.fb-start").delegate(e+":not('.fancybox-item, .fancybox-nav')",
"click.fb-start",k):d.unbind("click.fb-start").bind("click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,c;f.scrollbarWidth===x&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===x&&(f.support.fixedPosition=function(){var a=f('<div style="position:fixed;top:20px;"></div>').appendTo("body"),
b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(t).width();L.addClass("fancybox-lock-test");c=f(t).width();L.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(c-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,725 @@
@charset "utf-8";
body {
background: #f8f8f8;
color: #666;
}
a {
text-decoration: none !important;
}
a,
h1,
h2,
h3,
h4,
h5,
h6 {
color: #333333;
}
a:hover {
color: #ff9900;
}
#playtop {
display: none !important;
}
.text-red {
color: red;
}
.text-muted {
color: #999999;
}
.form-control:focus {
border: 1px solid #ff9900;
transition: border 0.5s ease-in 0s;
}
.form-control:hover {
border: 1px solid #ff9900;
transition: border 0.5s ease-in 0s;
}
.btn,
.btn:hover,
.btn .icon {
color: #333333;
}
.btn {
border: 1px solid #eeeeee;
}
.btn-default {
background-color: #f5f5f5;
color: #333333;
}
.btn-default:hover {
background-color: #f0eeee;
}
.btn-primary {
background-color: #ff9900;
border: 1px solid #ff9900;
color: #ffffff;
}
.btn-primary .icon {
color: #ffffff;
}
.btn-primary:hover {
background-color: #ff6600;
border: 1px solid #ff6600;
color: #ffffff;
}
.btn-primary:hover .icon {
color: #ffffff;
}
.dropdown-menu {
background-color: #ffffff;
border: 1px solid #eeeeee;
}
.dropdown-menu:before {
background-color: #ffffff;
border-color: #eeeeee;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:focus,
.dropdown-menu > .active > a:hover {
background-color: #ff9900;
color: #ffffff;
}
.split-line {
background-color: #eeeeee;
}
.top-line:before {
border-top: 1px solid #eeeeee;
}
.bottom-line:after {
border-bottom: 1px solid #eeeeee;
}
.top-line-dot:before {
border-top: 1px dotted #eeeeee;
}
.bottom-line-dot:before {
border-bottom: 1px dotted #eeeeee;
}
.badge {
background-color: #eeeeee;
}
.badge-first {
background-color: #ff4a4a;
color: #ffffff;
}
.badge-second {
background-color: #ff7701;
color: #ffffff;
}
.badge-third {
background-color: #ffb400;
color: #ffffff;
}
.nav-head > li.active > a,
.nav-tabs > li.active > a {
border-bottom: 2px solid #ff9900;
color: #ff9900;
}
.nav-tag > li > a,
.nav-page > li > a {
background-color: #ffffff;
border: 1px solid #eeeeee;
color: #333333;
}
.nav-tag > li > a:hover,
.nav-tag > li.active a,
.nav-page > li > a:hover,
.nav-page > li.active > a {
background-color: #ff9900;
border: 1px solid #ff9900;
color: #ffffff;
}
.nav-page > li > a:hover > .icon {
color: #fff;
}
.tag-btn li a {
background-color: #f8f8f8;
color: #999999;
}
.tag-btn li a:hover,
.tag li.active a {
background-color: #ff9900;
color: #ffffff;
}
.tag-type li a {
background-color: #ffffff;
border: 1px solid #eeeeee;
color: #999999;
}
.tag-type li a:hover,
.tag-type li.active a {
background-color: #ff9900;
border: 1px solid #ff9900;
color: #ffffff;
}
.tag-btn li a.active,
.tag-text li a.active,
.tag-type li a.active {
color: #ff9900;
}
.pic-tag {
background-color: rgba(0, 0, 0, 0.6);
color: #ffffff;
}
.pic-tag.active,
.pic-tag-h {
background-color: #ff0000;
color: #fff;
border-top-left-radius: 12px;
border-bottom-right-radius: 13px;
}
.pic-text {
color: #ffffff;
}
.stui-pannel-bg {
background-color: #ffffff;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.stui_nav__taddar .item .icon,
.stui_nav__taddar .item .title {
color: #999;
}
.stui_nav__taddar .item.active .title,
.stui_nav__taddar .item.active .icon {
color: #ff9900;
}
.stui_nav__taddar.fixed {
background-color: #ffffff;
}
.stui-vodlist__bg {
background-color: #ffffff;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.stui-vodlist__bg:hover {
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.08);
}
.stui-link__pic li a {
background-color: #ffffff;
border: 1px solid #f5f5f5;
}
.stui-link__pic li a:hover {
border: 1px solid #ff9900;
}
.popup {
background-color: #f8f8f8;
}
.popup-head {
background-color: #ffffff;
}
.autocomplete-suggestions {
background-color: #ffffff;
border: 1px solid #eeeeee;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
}
.autocomplete-suggestion {
border-top: 1px solid #eeeeee;
}
@media (max-width: 767px) {
.form-control {
color: #999999;
border: 1px solid #ff9900;
}
.form-control:focus {
border: 1px solid #24baf1;
transition: border 0.5s ease-in 0s;
}
.form-control:hover {
border: 1px solid #24baf1;
transition: border 0.5s ease-in 0s;
}
.stui-pannel-bg,
.stui-vodlist__bg,
.stui-vodlist__bg:hover {
box-shadow: none;
}
.m-top-line:before {
border-top: 1px solid #eeeeee;
}
.m-bottom-line:after {
border-bottom: 1px solid #eeeeee;
}
.m-top-line-dot:before {
border-top: 1px dotted #eeeeee;
}
.m-bottom-line-dot:before {
border-bottom: 1px dotted #eeeeee;
}
}
.stui-header__top {
background-color: #ffffff;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
}
.stui-header__menu li a {
color: #000000;
}
.stui-header__menu li.active a {
height: 40px;
color: #ff9900;
border-bottom: 3px solid #ff9900;
}
.stui-header__search .submit .icon {
color: #000;
}
.stui-header__user li a,
.stui-header__user li a .icon {
color: #333333;
}
.stui-screen__list li a {
color: #333333;
}
.stui-screen__list li.active a {
background-color: #ff9900;
color: #ffffff;
}
.stui-content__playlist li a:link {
border: 1px solid #eee;
}
.stui-content__playlist li a:visited {
border: 1px solid #ff9900;
}
.stui-content__playlist li a:hover {
border: 1px solid #ff9900;
background: #ff9900;
color: #ffffff;
}
.stui-player__video {
background-color: #000000;
}
.stui-page li a,
.stui-page li .num {
background-color: #ffffff;
border: 1px solid #eeeeee;
}
.stui-page li a:hover,
.stui-page li.active a,
.stui-page li.active .num {
text-decoration: none !important;
background-color: #ff9900;
color: #ffffff;
border: 1px solid #ff9900;
}
.stui-extra li a,
.stui-extra li span {
background-color: #ffffff;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
}
.stui-extra li a.backtop {
background-color: rgba(0, 0, 0, 0.6);
color: #ffffff;
}
.stui-extra li .sideslip {
background-color: #ffffff;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
}
.stui-extra li .sideslip:before {
background-color: #ffffff;
border-color: rgba(0, 0, 0, 0.1);
}
@media (max-width: 1024px) {
.stui-header__menu:before {
border-top: 1px solid #eeeeee;
}
}
@media (max-width: 767px) {
.stui-screen__list li.active a {
background: none;
color: #ff9900;
}
.stui-header__menu li.active a {
background: none;
color: #333333;
}
}
.comment {
margin-top: 5px;
padding: 10px;
border: 1px solid #24baf1;
border-radius: 10px;
box-shadow: 3px 3px 3px #c6d9e7, 3px -3px 3px #c6d9e7, -3px 3px 3px #c6d9e7,
-3px -3px 3px #c6d9e7;
}
.cmt_msg {
padding: 15px;
font-family: "Microsoft YaHei";
}
.cmt_msg .cmt_form {
margin-bottom: 10px;
}
.clearfix::after {
height: 0px;
clear: both;
font-size: 0px;
display: block;
visibility: hidden;
content: " ";
}
.cmt_msg .face_wrap img {
width: 55px;
height: 55px;
cursor: default;
}
.cmt_msg .input_wrap {
width: 90%;
position: relative;
}
.fl {
float: left;
display: inline;
}
.cmt_msg .input_wrap textarea {
resize: none;
outline: none;
width: 100%;
height: 60px;
line-height: 1.4;
overflow: auto;
padding-top: 8px;
padding-left: 1%;
border: 1px solid #ff6264;
border-radius: 7px;
}
.cmt_msg .smt_wrap {
width: 95%;
line-height: 30px;
font-size: 12px;
margin-top: 10px;
}
.cmt_msg .smt_wrap .total {
font-size: 16px;
font-weight: 600;
margin-top: 5px;
}
.cmt_msg .smt_wrap span em {
font-style: normal;
color: red;
}
.cmt_msg .smt_wrap .cmt_text {
background: rgb(251, 251, 251);
padding: 0px 8px;
border-radius: 7px;
border: 1px solid rgb(204, 204, 204);
width: 50px;
height: 30px;
line-height: 30px;
margin-left: 10px;
vertical-align: middle;
}
.cmt_msg .smt_wrap .cmt_verify {
width: 80px;
height: 30px;
line-height: 30px;
border-radius: 7px;
vertical-align: middle;
cursor: pointer;
}
.cmt_msg .smt_wrap .cmt_post {
background-color: #3dbb2b;
border: currentColor;
width: 81px;
height: 30px;
text-align: center;
color: rgb(255, 255, 255);
line-height: 30px;
font-size: 14px;
margin-left: 20px;
display: inline-block;
cursor: pointer;
vertical-align: middle;
border-radius: 7px;
}
center {
display: block;
text-align: -webkit-center;
}
.cmt_msg .cmt_item {
padding: 20px 0px;
width: 100%;
color: rgb(153, 153, 153);
border-bottom-color: rgb(215, 215, 215);
border-bottom-width: 1px;
border-bottom-style: dotted;
_zoom: 1;
}
.cmt_msg .item_con {
width: 90%;
padding-left: 2%;
}
.cmt_msg .item_con p {
margin-bottom: 8px;
}
.fr {
float: right;
_display: inline;
}
.cmt_msg .item_con .name {
color: rgb(43, 140, 230);
cursor: default;
}
.cmt_msg .item_con a {
color: rgb(153, 153, 153);
cursor: default;
}
.cmt_msg .item_con .con {
color: rgb(51, 51, 51);
line-height: 20px;
overflow: hidden;
margin-top: 10px;
-ms-word-wrap: break-word;
}
.cmt_msg .inner {
padding: 3px;
border: 1px solid #24baf1;
border-radius: 15px;
width: auto;
background-color: rgb(254, 254, 241);
}
.admin_qlogo {
width: 38px;
height: 38px;
border-radius: 50%;
margin-left: 10px;
margin-right: 10px;
}
.cmt_msg .inner .top {
margin: 8px 0px 8px 3px;
}
.page {
height: 100%;
width: 460px;
margin: 0 auto;
}
.page li {
float: left;
margin-right: 5px;
}
.page li a {
color: #000;
border: 1px solid #3dbb2b;
padding: 3px 8px;
border-radius: 5px;
}
.page li.active a {
background-color: #3dbb2b;
color: #ffffff;
}
@media (max-width: 767px) {
.cmt_msg .cmt_form {
margin-bottom: 10px;
}
.clearfix::after {
height: 0px;
clear: both;
font-size: 0px;
display: block;
visibility: hidden;
content: " ";
}
.cmt_msg .face_wrap img {
width: 50px;
height: 50px;
}
.cmt_msg .input_wrap {
width: 70%;
position: relative;
}
.fl {
float: left;
display: inline;
}
.cmt_msg .input_wrap textarea {
resize: none;
outline: none;
width: 100%;
height: 50px;
line-height: 1.4;
overflow: auto;
padding-top: 8px;
padding-left: 1%;
border: 1px solid #ff6264;
border-radius: 7px;
}
.cmt_msg .smt_wrap {
width: 100%;
line-height: 30px;
font-size: 12px;
margin-top: 10px;
}
.cmt_msg .smt_wrap .total {
font-size: 14px;
font-weight: 600;
margin-top: 5px;
}
.cmt_msg .smt_wrap span em {
font-style: normal;
color: red;
}
.cmt_msg .smt_wrap .cmt_text {
background: rgb(251, 251, 251);
padding: 0px 8px;
border-radius: 7px;
border: 1px solid rgb(204, 204, 204);
width: 50px;
height: 30px;
line-height: 30px;
margin-left: 10px;
vertical-align: middle;
}
.cmt_msg .smt_wrap .cmt_verify {
width: 80px;
height: 30px;
line-height: 30px;
border-radius: 7px;
vertical-align: middle;
cursor: pointer;
}
.cmt_msg .smt_wrap .cmt_post {
background-color: #3dbb2b;
border: currentColor;
width: 81px;
height: 30px;
text-align: center;
color: rgb(255, 255, 255);
line-height: 30px;
font-size: 14px;
margin-left: 20px;
display: inline-block;
cursor: pointer;
vertical-align: middle;
border-radius: 7px;
}
center {
display: block;
text-align: -webkit-center;
}
.cmt_msg .cmt_item {
padding: 20px 0px;
width: 100%;
color: rgb(153, 153, 153);
border-bottom-color: rgb(215, 215, 215);
border-bottom-width: 1px;
border-bottom-style: dotted;
_zoom: 1;
}
.cmt_msg .item_con {
width: 70%;
padding-left: 2%;
}
.cmt_msg .item_con p {
margin-bottom: 8px;
}
.fr {
float: right;
_display: inline;
}
.cmt_msg .item_con .name {
color: rgb(43, 140, 230);
cursor: default;
}
.cmt_msg .item_con a {
color: rgb(153, 153, 153);
cursor: default;
}
.cmt_msg .item_con .con {
color: rgb(51, 51, 51);
line-height: 20px;
overflow: hidden;
margin-top: 10px;
-ms-word-wrap: break-word;
}
.cmt_msg .inner {
padding: 3px;
border: 1px solid #24baf1;
border-radius: 15px;
width: auto;
background-color: rgb(254, 254, 241);
}
.admin_qlogo {
width: 25px;
height: 25px;
border-radius: 50%;
margin-left: 10px;
margin-right: 10px;
}
.cmt_msg .inner .top {
margin: 8px 0px 8px 3px;
}
.page {
height: 100%;
width: 300px;
margin: 0 auto;
}
.page li {
float: left;
margin-right: 5px;
}
.page li a {
color: #000;
border: 1px solid #3dbb2b;
padding: 3px 8px;
border-radius: 5px;
}
.page li.active a {
background-color: #3dbb2b;
color: #ffffff;
}
}
.flex {
display: flex;
}
.justify-between {
justify-content: space-between;
}
.items-center {
align-items: center;
}
.text-left {
text-align: left;
}
.stui-header__menu li a {
width: 100%;
display: block;
text-align: left;
}
.dropdown-menu.dropdown-content {
overflow-x: hidden;
}
.dropdown-menu.dropdown-content li {
width: 100%;
margin-top: 5px;
padding-right: 5px;
padding: 5px;
}
.dropdown-menu.dropdown-content li a {
width: 100%;
display: block;
text-align: left;
}
.dropdown-menu.dropdown-content li:hover {
background-color: #d7d7d7;
}
@media (max-width: 1024px) {
.stui-header__menu .dropdown .dropdown-content {
display: none !important;
position: absolute;
left: 0;
top: 100%;
z-index: 9999;
}
.stui-header__menu .dropdown.open .dropdown-content {
display: block !important;
}
}

View File

@ -0,0 +1,512 @@
@charset "utf-8";
body {
padding-top:100px
}
.stui-header__top {
position:fixed;
top:0;
z-index:999;
width:100%;
min-height:80px
}
.top-fixed-down {
margin-top:-80px
}
.stui-header__side {
float:right
}
.stui-header__logo,.stui-header__menu {
float:left
}
.stui-header__logo {
margin-top:15px
}
.stui-header__logo .logo {
display:block;
width:150px;
height:50px;
background:url(../img/logo.png) no-repeat;
background-position:50% 50%;
background-size:cover
}
.stui-header__menu {
position:relative;
margin-left:10px
}
.stui-header__menu li {
float:left;
margin-top:25px;
margin-right:20px
}
.stui-header__menu li a {
display:inline-block;
padding:3px 8px 4px;
font-size:16px;
font-weight:400
}
.stui-header__search {
float:left;
position:relative;
margin-top:25px;
width:250px
}
.stui-header__search .submit {
display: block;
position: absolute;
top: 0;
right: 0;
width: 35px;
height: 35px;
line-height: 30px;
text-align: center;
background: 0 0;
border: 0;
cursor: pointer;
}
.stui-header__search .submit .icon {
font-size:17px;
}
.stui-header__user {
float:right
}
.stui-header__user li {
float:left;
margin-top:30px;
margin-left:20px
}
.stui-header__user li a {
display:inline-block;
line-height:20px
}
.stui-header__user li a .icon {
font-size:18px
}
.stui-content__detail,.stui-content__thumb {
display:table-cell;
vertical-align:top
}
.stui-content__thumb .v-thumb {
width:190px
}
.stui-content__thumb .w-thumb {
width:300px
}
.stui-content__detail {
width:100%;
padding:0px 20px 10px 20px;
}
.stui-content__detail .title {
margin:0px 0 10px;
line-height:30px
}
.stui-content__detail .data {
margin-bottom:10px
}
.stui-content__detail .data li {
float:left;
margin-right:20px
}
.stui-content__detail .desc {
padding-left:42px
}
.stui-content__detail .desc .left {
margin-left:-42px
}
.stui-content__detail .play-btn {
padding-left:42px;
margin-top:20px
}
.stui-content__detail .play-btn .shere {
margin-top:5px
}
.stui-player__detail {
margin-top:20px
}
.stui-player__detail .title {
margin:0 0 10px
}
.stui-player__detail .detail-content {
padding-top:10px
}
.stui-player__detail .desc {
padding-left:42px
}
.stui-player__detail .desc .left {
margin-left:-42px
}
.stui-screen__list {
position:relative;
padding:10px 0 5px
}
.stui-screen__list li {
float:left;
margin-right:10px;
margin-bottom:10px
}
.stui-screen__list li span {
display:inline-block;
padding:3px 0 3px
}
.stui-screen__list li a {
display:inline-block;
padding:3px 10px;
border-radius:2px
}
.stui-screen__list.letter-list li a {
padding:3px 5px
}
.stui-screen__list.letter-list li.active a {
padding:3px 10px
}
.stui-page {
margin-bottom:30px
}
.stui-page li {
display:inline-block;
margin-left:10px
}
.stui-page li .num,.stui-page li a {
display:inline-block;
padding:5px 15px;
border-radius:5px
}
.stui-extra {
position:fixed;
right:50px;
bottom:50px
}
.stui-extra li {
position:relative;
padding:15px 10px 0
}
.stui-extra li a,.stui-extra li span {
display:block;
width:50px;
height:50px;
line-height:50px;
text-align:center;
border-radius:4px;
font-size:18px;
cursor:pointer
}
.stui-extra li a .icon,.stui-extra li span .icon {
font-size:18px
}
.stui-extra li a img {
margin-top:15px;
width:20px;
height:20px
}
.stui-extra li .sideslip {
display:none;
position:absolute;
bottom:0;
right:100%
}
.stui-extra li .sideslip:before {
content:" ";
width:10px;
height:10px;
-webkit-transform:rotate(-45deg);
-ms-transform:rotate(-45deg);
transform:rotate(-45deg);
border-width:0 1px 1px 0;
position:absolute;
bottom:20px;
right:-6px;
border-style:solid
}
.stui-extra li:hover .sideslip {
display:block
}
@media (min-width:768px) {
.container {
width:750px
}
}@media (min-width:992px) {
.container {
width:920px
}
}@media (min-width:1200px) {
.container {
width:1170px
}
}@media (max-width:1024px) {
body {
padding-top:110px
}
.top-fixed-down {
margin-top:-100px
}
.stui-header__side {
float:none;
position:absolute;
top:0;
left:150px;
right:0;
width:auto
}
.stui-header__logo,.stui-header__menu {
float:none
}
.stui-header__logo {
margin:10px 0 10px
}
.stui-header__logo .logo {
width:127px;
height:30px;
background:url(../img/logo.png) no-repeat;
background-position:50% 50%;
background-size:cover
}
.stui-header__search {
float:right;
margin-top:10px
}
.stui-header__menu {
margin:0;
padding:0;
height:40px;
line-height:40px
}
.stui-header__menu:before {
content:" ";
position:absolute;
left:0;
top:0;
right:0;
width:100%;
height:1px;
-webkit-transform-origin:0 0;
transform-origin:0 0;
-webkit-transform:scaleY(.5);
transform:scaleY(.5)
}
.stui-header__menu li {
margin-top:0;
margin-right:20px
}
.stui-header__menu li a {
padding:0;
font-size:14px;
white-space:nowrap
}
.stui-header__menu li.active a {
position:relative
}
.stui-header__menu li.active a:before {
content:" ";
position:absolute;
left:50%;
bottom:0;
width:20px;
margin-left:-10px;
height:2px;
}
.stui-header__user li {
margin-top:15px
}
.stui-header__user li a {
width:20px;
height:20px
}
}@media (max-width:767px) {
.stui-header__logo {
margin-left:10px
}
.stui-header__search {
position:absolute;
top:0;
left:0;
width:100%
}
.stui-header__menu {
padding-left:10px
}
.stui-header__user {
padding-right:10px
}
.stui-content__thumb .v-thumb {
width:115px
}
.stui-content__thumb .w-thumb {
width:160px
}
.stui-content__detail {
padding:0 10px
}
.stui-content__detail .title {
margin:10px 0 10px;
font-size:16px;
line-height:18px
}
.stui-content__detail .data {
margin:0 0 10px;
font-size:12px
}
.stui-content__detail .play-btn {
margin:0;
padding:0
}
.stui-content__playlist li a {
padding:5px 10px;
font-size:12px
}
.stui-player__detail {
margin-top:10px
}
.stui-player__detail .data .title {
font-size:16px
}
.stui-screen__list {
padding:5px 0 5px;
overflow:hidden
}
.stui-screen__list li {
margin-right:15px;
margin-bottom:0
}
.stui-screen__list li span {
padding:2px 0 2px
}
.stui-screen__list li a {
padding:2px 0 2px;
background:0 0;
white-space:nowrap
}
.stui-screen__list.letter-list li a,.stui-screen__list.letter-list li.active a {
padding:2px 0 2px
}
.stui-mobile__type li {
padding:0 20px
}
.stui-mobile__type li a {
display:block;
padding:10px 0;
text-align:center
}
.stui-page li {
float:left;
width:20%;
margin:0;
padding:0 5px 0 5px
}
.stui-page li a,.stui-page__box li .num {
display:block;
padding:5px 0;
text-align:center
}
.stui-extra {
right:15px;
bottom:15px
}
.stui-extra li {
padding:8px 0 0
}
.stui-extra li a,.stui-extra li span {
width:35px;
height:35px;
line-height:35px;
font-size:16px
}
.stui-extra li a .icon,.stui-extra li span .icon {
font-size:16px
}
.stui-extra li a img {
margin-top:8px;
width:18px;
height:18px
}
.stui-foot {
padding:20px 0
}
}.bdsharebuttonbox {
line-height:30px;
height:30px;
overflow:hidden;
vertical-align:top
}
.bdsharebuttonbox a,.bdsharebuttonbox span {
width:24px;
height:24px;
display:inline-block;
margin-right:5px;
background:url(../img/share.png/index.html) no-repeat;
cursor:pointer;
margin-bottom:0;
opacity:.8
}
.bdsharebuttonbox a:hover {
opacity:1
}
.bdsharebuttonbox a.bds_tsina {
background-position:0 0
}
.bdsharebuttonbox a.bds_weixin {
background-position:0 -33px
}
.bdsharebuttonbox a.bds_qzone {
background-position:0 -65px
}
.bdsharebuttonbox a.bds_sqq {
background-position:0 -98px
}
.bdsharebuttonbox a.bds_renren {
background-position:0 -131px
}
.bdsharebuttonbox a.bds_tqq {
background-position:0 -163px
}
.bdsharebuttonbox a.bds_diandian {
background-position:0 -356px
}
.bdsharebuttonbox a.bds_youdao {
background-position:0 -388px
}
.bdsharebuttonbox a.bds_ty {
background-position:0 -420px
}
.bdsharebuttonbox a.bds_fbook {
background-position:0 -452px
}
.bdsharebuttonbox a.bds_twi {
background-position:0 -484px
}
.bdsharebuttonbox a.bds_kaixin001 {
background-position:0 -228px
}
.bdsharebuttonbox a.bds_taobao {
background-position:0 -196px
}
.bdsharebuttonbox a.bds_douban {
background-position:0 -324px
}
.bdsharebuttonbox a.bds_mail {
background-position:0 -548px
}
.bdsharebuttonbox a.bds_copy {
background-position:0 -516px
}
.bdsharebuttonbox a.bds_bdhome {
background-position:0 -292px
}
.bdsharebuttonbox a.bds_tqf {
background-position:0 -260px
}
.bdsharebuttonbox a.bds_more {
background-position:0 -577px
}
.bdsharebuttonbox span.bds_shere {
background-position:0 -606px
}
.bdsharebuttonbox a.bds_count {
background:0 0;
width:auto;
height:auto;
position:relative;
top:-6px
}
.bdsharebuttonbox a.bds_count {
margin:0 2px
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,7 @@
<html><head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body></html>

View File

@ -0,0 +1,7 @@
<html><head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body></html>

View File

@ -0,0 +1,7 @@
<html><head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,243 @@
/*!
* Lazy Load - jQuery plugin for lazy loading images
*
* Copyright (c) 2007-2015 Mika Tuupola
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* Project home:
* http://www.appelsiini.net/projects/lazyload
*
* Version: 1.9.7
*
*/
(function($, window, document, undefined) {
var $window = $(window);
$.fn.lazyload = function(options) {
var elements = this;
var $container;
var settings = {
threshold : 0,
failure_limit : 0,
event : "scroll",
effect : "show",
container : window,
data_attribute : "original",
skip_invisible : false,
appear : null,
load : null,
placeholder : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
};
function update() {
var counter = 0;
elements.each(function() {
var $this = $(this);
if (settings.skip_invisible && !$this.is(":visible")) {
return;
}
if ($.abovethetop(this, settings) ||
$.leftofbegin(this, settings)) {
/* Nothing. */
} else if (!$.belowthefold(this, settings) &&
!$.rightoffold(this, settings)) {
$this.trigger("appear");
/* if we found an image we'll load, reset the counter */
counter = 0;
} else {
if (++counter > settings.failure_limit) {
return false;
}
}
});
}
if(options) {
/* Maintain BC for a couple of versions. */
if (undefined !== options.failurelimit) {
options.failure_limit = options.failurelimit;
delete options.failurelimit;
}
if (undefined !== options.effectspeed) {
options.effect_speed = options.effectspeed;
delete options.effectspeed;
}
$.extend(settings, options);
}
/* Cache container as jQuery as object. */
$container = (settings.container === undefined ||
settings.container === window) ? $window : $(settings.container);
/* Fire one scroll event per scroll. Not one scroll event per image. */
if (0 === settings.event.indexOf("scroll")) {
$container.bind(settings.event, function() {
return update();
});
}
this.each(function() {
var self = this;
var $self = $(self);
self.loaded = false;
/* If no src attribute given use data:uri. */
if ($self.attr("src") === undefined || $self.attr("src") === false) {
if ($self.is("img")) {
$self.attr("src", settings.placeholder);
}
}
/* When appear is triggered load original image. */
$self.one("appear", function() {
if (!this.loaded) {
if (settings.appear) {
var elements_left = elements.length;
settings.appear.call(self, elements_left, settings);
}
$("<img />")
.bind("load", function() {
var original = $self.attr("data-" + settings.data_attribute);
$self.hide();
if ($self.is("img")) {
$self.attr("src", original);
} else {
$self.css("background-image", "url('" + original + "')");
}
$self[settings.effect](settings.effect_speed);
self.loaded = true;
/* Remove image from array so it is not looped next time. */
var temp = $.grep(elements, function(element) {
return !element.loaded;
});
elements = $(temp);
if (settings.load) {
var elements_left = elements.length;
settings.load.call(self, elements_left, settings);
}
})
.attr("src", $self.attr("data-" + settings.data_attribute));
}
});
/* When wanted event is triggered load original image */
/* by triggering appear. */
if (0 !== settings.event.indexOf("scroll")) {
$self.bind(settings.event, function() {
if (!self.loaded) {
$self.trigger("appear");
}
});
}
});
/* Check if something appears when window is resized. */
$window.bind("resize", function() {
update();
});
/* With IOS5 force loading images when navigating with back button. */
/* Non optimal workaround. */
if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
$window.bind("pageshow", function(event) {
if (event.originalEvent && event.originalEvent.persisted) {
elements.each(function() {
$(this).trigger("appear");
});
}
});
}
/* Force initial check if images should appear. */
$(document).ready(function() {
update();
});
return this;
};
/* Convenience methods in jQuery namespace. */
/* Use as $.belowthefold(element, {threshold : 100, container : window}) */
$.belowthefold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
} else {
fold = $(settings.container).offset().top + $(settings.container).height();
}
return fold <= $(element).offset().top - settings.threshold;
};
$.rightoffold = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.width() + $window.scrollLeft();
} else {
fold = $(settings.container).offset().left + $(settings.container).width();
}
return fold <= $(element).offset().left - settings.threshold;
};
$.abovethetop = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollTop();
} else {
fold = $(settings.container).offset().top;
}
return fold >= $(element).offset().top + settings.threshold + $(element).height();
};
$.leftofbegin = function(element, settings) {
var fold;
if (settings.container === undefined || settings.container === window) {
fold = $window.scrollLeft();
} else {
fold = $(settings.container).offset().left;
}
return fold >= $(element).offset().left + settings.threshold + $(element).width();
};
$.inviewport = function(element, settings) {
return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
!$.belowthefold(element, settings) && !$.abovethetop(element, settings);
};
/* Custom selectors for your convenience. */
/* Use as $("img:below-the-fold").something() or */
/* $("img").filter(":below-the-fold").something() which is faster */
$.extend($.expr[":"], {
"below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
"above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
"in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); },
/* Maintain BC for couple of versions. */
"above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
"right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); },
"left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); }
});
})(jQuery, window, document);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,185 @@
/*!
* Stui v1.1.0 Copyright 2016-2018 http://v.shoutu.cn
* Email 726662013@qq.com,admin@shoutu.cn
*/
var stui = {
browser: {
url: document.URL,
domain: document.domain,
title: document.title,
language: (navigator.browserLanguage || navigator.language).toLowerCase(),
canvas: function () {
return !!document.createElement("canvas").getContext
}(),
useragent: function () {
var a = navigator.userAgent;
return {
mobile: !!a.match(/AppleWebKit.*Mobile.*/),
ios: !!a.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
android: -1 < a.indexOf("Android") || -1 < a.indexOf("Linux"),
iPhone: -1 < a.indexOf("iPhone") || -1 < a.indexOf("Mac"),
iPad: -1 < a.indexOf("iPad"),
trident: -1 < a.indexOf("Trident"),
presto: -1 < a.indexOf("Presto"),
webKit: -1 < a.indexOf("AppleWebKit"),
gecko: -1 < a.indexOf("Gecko") && -1 == a.indexOf("KHTML"),
weixin: -1 < a.indexOf("MicroMessenger")
}
}()
},
mobile: {
popup: function () {
$popblock = $(".popup");
$(".open-popup").click(function () {
$popblock.addClass("popup-visible");
$("body").append('<div class="mask"></div>');
$(".close-popup").click(function () {
$popblock.removeClass("popup-visible");
$(".mask").remove();
$("body").removeClass("modal-open")
});
$(".mask").click(function () {
$popblock.removeClass("popup-visible");
$(this).remove();
$("body").removeClass("modal-open")
})
})
},
slide: function () {
$.getScript(SitePath + "statics/js/flickity.pkgd.min.js", function () {
$(".type-slide").each(function (a) {
$index = $(this).find('.active').index() * 1;
if ($index > 3) {
$index = $index - 3;
} else {
$index = 0;
}
$(this).flickity({
cellAlign: 'left',
freeScroll: true,
contain: true,
prevNextButtons: false,
pageDots: false,
initialIndex: $index
});
})
})
},
share: function () {
$(".open-share").click(function () {
stui.browser.useragent.weixin ? $("body").append('<div class="mobile-share share-weixin"></div>') : $("body").append('<div class="mobile-share share-other"></div>');
$(".mobile-share").click(function () {
$(".mobile-share").remove();
$("body").removeClass("modal-open")
})
})
}
},
flickity: {
carousel: function () {
$.getScript(SitePath + "statics/js/flickity.pkgd.min.js", function () {
$('.carousel_default').flickity({
cellAlign: 'left',
contain: true,
wrapAround: true,
autoPlay: true,
prevNextButtons: false
});
$('.carousel_wide').flickity({
cellAlign: 'center',
contain: true,
wrapAround: true,
autoPlay: true,
});
$('.carousel_center').flickity({
cellAlign: 'center',
contain: true,
wrapAround: true,
autoPlay: true,
prevNextButtons: false
});
$('.carousel_right').flickity({
cellAlign: 'left',
wrapAround: true,
contain: true,
pageDots: false
});
})
}
},
images: {
lazyload: function () {
$.getScript(SitePath + "statics/js/jquery.lazyload.js", function () {
$(".lazyload").lazyload({
effect: "fadeIn",
threshold: 200,
failurelimit: 15,
skip_invisible: !1
})
})
},
qrcode: function () {
$("img.qrcode").attr("src", "" + encodeURIComponent(stui.browser.url) + "")
}
},
common: {
bootstrap: function () {
$.getScript(SitePath + "statics/js/bootstrap.min.js", function () {
$('a[data-toggle="tab"]').on("shown.bs.tab", function (a) {
var b = $(a.target).text();
$(a.relatedTarget).text();
$("span.active-tab").html(b)
})
})
},
headroom: function () {
$.getScript(SitePath + "statics/js/headroom.min.js", function () {
$("#header-top", function () {
(new Headroom(document.querySelector("#header-top"), {
tolerance: 5,
offset: 205,
classes: {
initial: "top-fixed",
pinned: "top-fixed-up",
unpinned: "top-fixed-up"
}
})).init()
});
})
},
collapse: function () {
$(".detail").on("click", ".detail-more", function () {
$detailContent = $(".detail-content");
$detailSketch = $(".detail-sketch");
"none" == $detailContent.css("display") ? ($(this).html('Rút gọn <i class="icon iconfont icon-less"></i>'), $detailContent.show(), $detailSketch.hide()) : ($(this).html('Xem thêm <i class="icon iconfont icon-moreunfold"></i>'), $detailContent.hide(), $detailSketch.show())
})
},
scrolltop: function () {
var a = $(window);
$scrollTopLink = $("a.backtop");
a.scroll(function () {
500 < $(this).scrollTop() ? $scrollTopLink.css("display", "block") : $scrollTopLink.css("display", "none")
});
$scrollTopLink.on("click", function () {
$("html, body").animate({
scrollTop: 0
}, 400);
return !1
})
}
}
};
$(document).ready(function () {
if (stui.browser.useragent.mobile) {
stui.mobile.slide();
stui.mobile.popup();
stui.mobile.share();
}
stui.flickity.carousel();
stui.images.lazyload();
stui.images.qrcode();
stui.common.bootstrap();
stui.common.headroom();
stui.common.collapse();
stui.common.scrolltop()
});

View File

@ -0,0 +1,52 @@
@extends('themes::themerrdyw.layout')
@php
$years = Cache::remember('all_years', \Backpack\Settings\app\Models\Setting::get('site_cache_ttl', 5 * 60), function () {
return \VsMov\Core\Models\Movie::select('publish_year')
->distinct()
->pluck('publish_year')
->sortDesc();
});
@endphp
@section('content')
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head active bottom-line clearfix">
<h3 class="title"><img
src="{{ asset('/themes/rrdyw/statics/icon/dIYNSKsIQLBx.png') }}">{{ $section_name ?? 'Danh Sách Phim' }}
</h3>
<ul class="nav nav-page pull-right">
</ul>
</div>
@include('themes::themerrdyw.inc.catalog_filter')
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist clearfix">
@if (count($data))
@foreach ($data as $movie)
<li class="col-md-6 col-sm-4 col-xs-3">
@include('themes::themerrdyw.inc.section.movie_card')
</li>
@endforeach
@else
<p class="text-danger">Không dữ liệu cho mục này</p>
@endif
</ul>
</div>
</div>
</div>
<!-- 筛选列表 -->
<ul class="stui-page text-center cleafix">
{{ $data->appends(request()->all())->links("themes::themerrdyw.inc.pagination") }}
</ul>
<!-- 列表翻页-->
</div>
@endsection

View File

@ -0,0 +1,413 @@
@extends('themes::themerrdyw.layout')
@section('content')
<style>
.activeplay {
background-color: #FF9900;
color: #FFFFFF;
border: 1px solid #FF9900;
}
.active-server {
background: #d9a0a0 !important;
color: #FFF !important;
}
.playactive {
color: #FFF !important;
background: #c92626 !important;
}
#streaming-sv {
cursor: pointer !important;
}
</style>
<div class="row">
@if ($currentMovie->notify || $currentMovie->showtimes)
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
@if ($currentMovie->showtimes)
<p><strong>Lịch chiếu : </strong> {{$currentMovie->showtimes}}</p>
@endif
@if ($currentMovie->notify )
<p><strong>Thông báo : </strong> {{$currentMovie->notify}}</p>
@endif
</div>
</div>
</div>
@endif
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel-bd">
<div class="stui-player col-pd">
<div class="stui-player__video embed-responsive embed-responsive-16by9 clearfix"
id="player-wrapper">
</div>
<div class="stui-player__detail detail">
<h4 class="title"><a href="{{ $currentMovie->getUrl() }}">{{$currentMovie->name}}</a> -
Tập {{ $episode->name }}</h4>
<p class="data margin-0">
<span class="text-muted hidden-xs">Quốc gia</span> {!! $currentMovie->regions->map(function ($region) {
return '<a href="' . $region->getUrl() . '" title="' . $region->name . '">' . $region->name . '</a>';
})->implode(', ') !!}
<span class="split-line"></span><span
class="text-muted hidden-xs">Năm </span>{{ $currentMovie->publish_year }}
<span class="split-line"></span><a class="detail-more" href="javascript:">Đổi Server<i
class="icon iconfont icon-moreunfold"></i></a>
</p>
<div class="detail-content" style="display: none;margin-top: 20px">
@foreach ($currentMovie->episodes->where('slug', $episode->slug)->where('server', $episode->server) as $server)
<a onclick="chooseStreamingServer(this)" data-type="{{ $server->type }}" id="streaming-sv"
data-id="{{ $server->id }}" data-link="{{ $server->link }}"
class="streaming-server tag-link"
style="background: #303033;color: #FFF;padding: 10px;border-radius: 10px;margin: 5px">
Nguồn #{{ $loop->index + 1 }}
</a>
@endforeach
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 播放器-->
@foreach ($currentMovie->episodes->sortBy([['server', 'asc']])->groupBy('server') as $server => $data)
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head bottom-line active clearfix">
<h3 class="title">
<img src="{{ asset('/themes/rrdyw/statics/icon/icon_1.png') }}"
alt="">{{ $server }}</h3>
</div>
</div>
<div class="stui-pannel_bd col-pd clearfix">
<ul class="stui-content__playlist column10 clearfix">
@foreach ($data->sortBy('name', SORT_NATURAL)->groupBy('name') as $name => $item)
<li><a @if ($item->contains($episode)) class="activeplay" @endif href="{{ $item->sortByDesc('type')->first()->getUrl() }}" target="_self"> {{ $name }}</a></li>
@endforeach
</ul>
</div>
</div>
</div>
@endforeach
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head bottom-line active clearfix">
<h3 class="title"><img src="{{ asset('/themes/rrdyw/statics/icon/icon_23.png') }}"
alt="404">Bình luận</h3></div>
</div>
<div class="stui-pannel_bd col-pd clearfix">
<div style="width: 100%; background-color: #fff;margin-top: 10px">
<div class="fb-comments w-full" data-href="{{ $currentMovie->getUrl() }}" data-width="100%"
data-numposts="5" data-colorscheme="light" data-lazy="true">
</div>
</div>
</div>
</div>
</div>
<!-- 播放列表-->
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<h3 class="title">
<img src="{{ asset('/themes/rrdyw/statics/icon/icon_6.png') }}"> thể bạn thích
</h3>
</div>
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist__bd clearfix">
@foreach ($movie_related as $movie)
<li class="col-md-6 col-sm-4 col-xs-3">
@include('themes::themerrdyw.inc.section.movie_card')
</li>
@endforeach
</ul>
</div>
</div>
</div>
<!-- 猜你喜欢-->
</div>
@endsection
@push('scripts')
<script src="{{ asset('/themes/rrdyw/plugins/jquery-raty/jquery.raty.js') }}"></script>
<link href="{{ asset('/themes/rrdyw/plugins/jquery-raty/jquery.raty.css') }}" rel="stylesheet" type="text/css"/>
<script>
var rated = false;
$('#movies-rating-star').raty({
score: {{$currentMovie->getRatingStar()}},
number: 10,
numberMax: 10,
hints: ['quá tệ', 'tệ', 'không hay', 'không hay lắm', 'bình thường', 'xem được', 'có vẻ hay', 'hay',
'rất hay', 'siêu phẩm'
],
starOff: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-off.png') }}',
starOn: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-on.png') }}',
starHalf: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-half.png') }}',
click: function (score, evt) {
if (rated) return
fetch("{{ route('movie.rating', ['movie' => $currentMovie->slug]) }}", {
method: 'POST',
headers: {
"Content-Type": "application/json",
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]')
.getAttribute(
'content')
},
body: JSON.stringify({
rating: score
})
});
rated = true;
$('#movies-rating-star').data('raty').readOnly(true);
$('#movies-rating-msg').html(`Bạn đã đánh giá ${score} sao cho phim này!`);
}
});
</script>
<script src="/themes/rrdyw/player/js/p2p-media-loader-core.min.js"></script>
<script src="/themes/rrdyw/player/js/p2p-media-loader-hlsjs.min.js"></script>
<script src="/js/jwplayer-8.9.3.js"></script>
<script src="/js/hls.min.js"></script>
<script src="/js/jwplayer.hlsjs.min.js"></script>
<script>
var episode_id = {{ $episode->id }};
const wrapper = document.getElementById('player-wrapper');
const vastAds = "{{ Setting::get('jwplayer_advertising_file') }}";
function chooseStreamingServer(el) {
const type = el.dataset.type;
const link = el.dataset.link.replace(/^http:\/\//i, 'https://');
const id = el.dataset.id;
const newUrl =
location.protocol +
"//" +
location.host +
location.pathname.replace(`-${episode_id}`, `-${id}`);
history.pushState({
path: newUrl
}, "", newUrl);
episode_id = id;
Array.from(document.getElementsByClassName('streaming-server')).forEach(server => {
server.classList.remove('active-server');
})
el.classList.add('active-server');
link.replace('http://', 'https://');
renderPlayer(type, link, id);
}
function renderPlayer(type, link, id) {
if (type == 'embed') {
if (vastAds) {
wrapper.innerHTML = `<div id="fake_jwplayer"></div>`;
const fake_player = jwplayer("fake_jwplayer");
const objSetupFake = {
key: "{{ Setting::get('jwplayer_license') }}",
aspectratio: "16:9",
width: "100%",
file: "/themes/vung/player/1s_blank.mp4",
volume: 100,
mute: false,
autostart: true,
advertising: {
tag: "{{ Setting::get('jwplayer_advertising_file') }}",
client: "vast",
vpaidmode: "insecure",
skipoffset: {{ (int) Setting::get('jwplayer_advertising_skipoffset') ?: 5 }}, // Bỏ qua quảng cáo trong vòng 5 giây
skipmessage: "Bỏ qua sau xx giây",
skiptext: "Bỏ qua"
}
};
fake_player.setup(objSetupFake);
fake_player.on('complete', function (event) {
$("#fake_jwplayer").remove();
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
allowfullscreen="" allow='autoplay'></iframe>`
fake_player.remove();
});
fake_player.on('adSkipped', function (event) {
$("#fake_jwplayer").remove();
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
allowfullscreen="" allow='autoplay'></iframe>`
fake_player.remove();
});
fake_player.on('adComplete', function (event) {
$("#fake_jwplayer").remove();
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
allowfullscreen="" allow='autoplay'></iframe>`
fake_player.remove();
});
} else {
if (wrapper) {
wrapper.innerHTML = `<iframe width="100%" height="100%" src="${link}" frameborder="0" scrolling="no"
allowfullscreen="" allow='autoplay'></iframe>`
}
}
return;
}
if (type == 'm3u8' || type == 'mp4') {
wrapper.innerHTML = `<div id="jwplayer"></div>`;
const player = jwplayer("jwplayer");
const objSetup = {
key: "{{ Setting::get('jwplayer_license') }}",
aspectratio: "16:9",
width: "100%",
image: "{{ $currentMovie->getPosterUrl() }}",
file: link,
playbackRateControls: true,
playbackRates: [0.25, 0.75, 1, 1.25],
sharing: {
sites: [
"reddit",
"facebook",
"twitter",
"googleplus",
"email",
"linkedin",
],
},
volume: 100,
mute: false,
autostart: true,
logo: {
file: "{{ Setting::get('jwplayer_logo_file') }}",
link: "{{ Setting::get('jwplayer_logo_link') }}",
position: "{{ Setting::get('jwplayer_logo_position') }}",
},
advertising: {
tag: "{{ Setting::get('jwplayer_advertising_file') }}",
client: "vast",
vpaidmode: "insecure",
skipoffset: {{ (int) Setting::get('jwplayer_advertising_skipoffset') ?: 5 }}, // Bỏ qua quảng cáo trong vòng 5 giây
skipmessage: "Bỏ qua sau xx giây",
skiptext: "Bỏ qua"
}
};
if (type == 'm3u8') {
const segments_in_queue = 50;
var engine_config = {
debug: !1,
segments: {
forwardSegmentCount: 50,
},
loader: {
cachedSegmentExpiration: 864e5,
cachedSegmentsCount: 1e3,
requiredSegmentsPriority: segments_in_queue,
httpDownloadMaxPriority: 9,
httpDownloadProbability: 0.06,
httpDownloadProbabilityInterval: 1e3,
httpDownloadProbabilitySkipIfNoPeers: !0,
p2pDownloadMaxPriority: 50,
httpFailedSegmentTimeout: 500,
simultaneousP2PDownloads: 20,
simultaneousHttpDownloads: 2,
// httpDownloadInitialTimeout: 12e4,
// httpDownloadInitialTimeoutPerSegment: 17e3,
httpDownloadInitialTimeout: 0,
httpDownloadInitialTimeoutPerSegment: 17e3,
httpUseRanges: !0,
maxBufferLength: 300,
// useP2P: false,
},
};
if (Hls.isSupported() && p2pml.hlsjs.Engine.isSupported()) {
var engine = new p2pml.hlsjs.Engine(engine_config);
player.setup(objSetup);
jwplayer_hls_provider.attach();
p2pml.hlsjs.initJwPlayer(player, {
liveSyncDurationCount: segments_in_queue, // To have at least 7 segments in queue
maxBufferLength: 300,
loader: engine.createLoaderClass(),
});
} else {
player.setup(objSetup);
}
} else {
player.setup(objSetup);
}
const resumeData = 'OPCMS-PlayerPosition-' + id;
player.on('ready', function () {
if (typeof (Storage) !== 'undefined') {
if (localStorage[resumeData] == '' || localStorage[resumeData] == 'undefined') {
console.log("No cookie for position found");
var currentPosition = 0;
} else {
if (localStorage[resumeData] == "null") {
localStorage[resumeData] = 0;
} else {
var currentPosition = localStorage[resumeData];
}
console.log("Position cookie found: " + localStorage[resumeData]);
}
player.once('play', function () {
console.log('Checking position cookie!');
console.log(Math.abs(player.getDuration() - currentPosition));
if (currentPosition > 180 && Math.abs(player.getDuration() - currentPosition) >
5) {
player.seek(currentPosition);
}
});
window.onunload = function () {
localStorage[resumeData] = player.getPosition();
}
} else {
console.log('Your browser is too old!');
}
});
player.on('complete', function () {
if (typeof (Storage) !== 'undefined') {
localStorage.removeItem(resumeData);
} else {
console.log('Your browser is too old!');
}
})
function formatSeconds(seconds) {
var date = new Date(1970, 0, 1);
date.setSeconds(seconds);
return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
}
}
</script>
<script>
document.addEventListener("DOMContentLoaded", function () {
const episode = '{{ $episode->id }}';
let playing = document.querySelector(`[data-id="${episode}"]`);
if (playing) {
playing.click();
return;
}
const servers = document.getElementsByClassName('streaming-server');
if (servers[0]) {
servers[0].click();
}
});
</script>
{!! setting('site_scripts_facebook_sdk') !!}
@endpush

View File

@ -0,0 +1,49 @@
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li><span class="text-muted">Danh mục</span></li>
<li class="@if (request('types') == 'series') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&sorts={{request('sorts')}}&types=series">Phim
bộ</a></li>
<li class="@if (request('types') == 'single') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&sorts={{request('sorts')}}&types=single">Phim
lẻ</a></li>
</ul>
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li><span class="text-muted">Thể loại</span></li>
@foreach (\VsMov\Core\Models\Category::fromCache()->all() as $item)
<li class="@if (request('categorys') == $item->id) active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&years={{request('years')}}&types={{request('types')}}&sorts={{request('sorts')}}&categorys={{$item->id}}">{{ $item->name }}</a>
</li>
@endforeach
</ul>
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li><span class="text-muted">Quốc gia</span></li>
@foreach (\VsMov\Core\Models\Region::fromCache()->all() as $item)
<li class=" @if (request('regions') == $item->id) active @endif"><a
href="/?search={{request('search')}}&regions={{$item->id}}&years={{request('years')}}&types={{request('types')}}&sorts={{request('sorts')}}&categorys={{request('categorys')}}">{{ $item->name }}</a>
</li>
@endforeach
</ul>
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li><span class="text-muted">Năm</span></li>
@foreach ($years as $year)
<li class=" @if (request('years') == $year) active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&types={{request('types')}}&sorts={{request('sorts')}}&years={{ $year }}">{{ $year }}</a>
</li>
@endforeach
</ul>
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li><span class="text-muted">Xắp sếp</span></li>
<li class="@if (request('sorts') == 'update') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&types={{request('types')}}&sorts=update">Thời
gian cập nhật</a></li>
<li class="@if (request('sorts') == 'create') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&types={{request('types')}}&sorts=create">Thời
gian đăng</a></li>
<li class="@if (request('sorts') == 'year') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&types={{request('types')}}&sorts=year">Năm
sản xuất</a></li>
<li class="@if (request('sorts') == 'view') active @endif"><a
href="/?search={{request('search')}}&regions={{request('regions')}}&categorys={{request('categorys')}}&years={{request('years')}}&types={{request('types')}}&sorts=view">Lượt
xem</a></li>
</ul>

View File

@ -0,0 +1,182 @@
@php
$logo = setting('site_logo', '');
$brand = setting('site_brand', '');
$title = isset($title) ? $title : setting('site_homepage_title', '');
@endphp
<style>
#result {
margin-top: 20px;
background-color: #e0d6d6;
list-style-type: none;
width: 500px;
position: absolute;
top: 32px;
z-index: 100;
padding-left: 0;
}
.column {
float: left;
padding: 5px;
}
.left {
text-align: center;
width: 20%;
}
.right {
width: 80%;
}
.rowsearch:after {
content: "";
display: table;
clear: both;
}
#result .rowsearch {
display: flex;
justify-content: center;
align-items: center;
}
#result .rowsearch p {
margin-bottom: 1px;
}
.rowsearch:hover {
background-color: #ece4e4;
}
.dropdown-content {
display: none;
position: absolute;
background-color: #ffffff;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(232, 204, 204, 0.2);
z-index: 1;
max-height: 300px;
overflow: auto;
}
.dropdown:hover .dropdown-content {
display: block;
}
</style>
<header class="stui-header__top clearfix" id="header-top">
<div class="container">
<div class="row">
<div class="stui-header_bd clearfix">
<div class="stui-header__logo">
<a class="" href="/">
@if ($logo)
{!! $logo !!}
@else
{!! $brand !!}
@endif</a>
</div>
<div class="stui-header__side">
<div class="stui-header__search">
<form action="/" method="get" name="formsearch" id="formsearch">
<input type="text" id="wd" name="s" class="sin form-control" value="{{ request('search') }}" autocomplete="off" placeholder="Tìm kiếm...">
<input type="submit" id="searchbutton" value="" class="hide">
<button class="submit" id="submit" onclick="$('#formsearch').submit();">
<i class="icon iconfont icon-search"></i>
</button>
</form>
<div class="" id="result"></div>
</div>
</div>
<ul class="stui-header__menu type-slide">
@foreach ($menu as $item)
@if (count($item['children']))
<li class="nav-menu-item dropdown has-dropdown">
<a href="{{$item['link']}}" title="{{$item['name']}}" >
<span class="nav-menu-item-name">{{$item['name']}}</span>
</a>
<ul class="dropdown-menu dropdown-content">
@foreach ($item['children'] as $children)
<li>
<a class="dropdown-item" href="{{$children['link']}}"
title="{{$children['name']}}">{{$children['name']}}</a>
</li>
@endforeach
</ul>
</li>
@else
<li><a href="{{$item['link']}}">{{$item['name']}}</a></li>
@endif
@endforeach
</ul>
</div>
</div>
</div>
</header>
<script type="text/javascript">
$('#wd').on('keyup',function(){
$("#result").html('');
$value = $(this).val();
if(!$value){
$("#result").html('');
return;
}
$.ajax({
type: 'get',
url: '{{ URL::to('search') }}',
data: {
'search': $value
},
success:function(data){
$("#result").html('')
$.each(data, function(key, value){
$('#result').append('<a href="'+value.slug+'"><div class="rowsearch"> <div class="column left"> <img src="'+value.image+'" width="50" /> </div> <div class="column right"><p> '+value.title+' ' + '</p><p> '+value.original_title+'| '+value.year+' </p></div> </div></a>' )
});
}
});
})
document.body.addEventListener("click", function (event) {
$("#result").html('');
});
$.ajaxSetup({ headers: { 'csrftoken' : '{{ csrf_token() }}' } });
</script>
<script>
$(function() {
function isMobile() {
return window.innerWidth <= 1024;
}
// Xử lý click menu dropdown trên mobile
$('.stui-header__menu .dropdown > a').on('click', function(e) {
if (isMobile()) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
// Xóa dropdown cũ nếu có
$('#mobile-dropdown-portal').remove();
var $parent = $(this).parent();
var $dropdown = $parent.find('.dropdown-content').first().clone();
var offset = $(this).offset();
var height = $(this).outerHeight();
// Tạo dropdown mới ở body
var $portal = $('<ul id=\"mobile-dropdown-portal\" class=\"dropdown-menu dropdown-content\" style=\"display:block; position:fixed; left:' + offset.left + 'px; top:' + (offset.top + height) + 'px; z-index:99999; background:#fff; min-width:160px; box-shadow:0 8px 16px 0 rgba(0,0,0,0.2);\"></ul>');
$portal.append($dropdown.children());
$('body').append($portal);
// Đóng khi click ra ngoài
setTimeout(function() {
$(document).one('touchstart click', function(ev) {
if (!$(ev.target).closest('#mobile-dropdown-portal').length) {
$('#mobile-dropdown-portal').remove();
}
});
}, 10);
}
});
});
</script>

View File

@ -0,0 +1,19 @@
<ul class="stui-page text-center cleafix">
<ul class="myui-page text-center clearfix">
@if ($paginator->hasPages())
@foreach ($elements as $element)
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active"><a aria-="page" class="btn ">{{ $page }}</a></li>
@else
<li class=""><a class="btn" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
@endif
</ul>
</ul>

View File

@ -0,0 +1,12 @@
<div class="stui-vodlist__box">
<a class="stui-vodlist__thumb lazyload" href="{{$movie->getUrl()}}" title="{{$movie->name}}"
data-original="{{$movie->getThumbUrl()}}">
<span class="play hidden-xs"></span></a>
<div class="stui-vodlist__detail">
<h4 class="title text-overflow">
<a href="{{$movie->getUrl()}}" title="{{$movie->name}}">{{$movie->name}}</a>
</h4>
</div>
</div>

View File

@ -0,0 +1,74 @@
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box clearfix">
<div class="col-lg-wide-75 col-xs-1 padding-0">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix"><a class="more text-muted pull-right"
href="{{ $item['link'] }}">Xem thêm <i class="icon iconfont icon-more"></i></a>
<h3 class="title"><img src="{{ asset('/themes/rrdyw/statics/icon/icon_1.png') }}"><a
href="{{ $item['link'] }}">{{ $item['label'] }}</a></h3>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<ul class="stui-vodlist clearfix">
@foreach ($item['data'] as $movie)
<li class="col-md-5 col-sm-4 col-xs-3">
@include('themes::themerrdyw.inc.section.movie_card')
</li>
@endforeach
</ul>
</div>
</div>
<div class="col-lg-wide-25 hidden-md hidden-sm hidden-xs">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<h3 class="title"><img src="{{ asset('/themes/rrdyw/statics/icon/icon_23.png') }}">Xem nhiều</h3>
</div>
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist__media active col-pd clearfix">
@foreach ($item['topview'] as $key => $movie)
@if ($key + 1 < 4)
<li>
<div class="thumb"><a class="m-thumb stui-vodlist__thumb lazyload"
href="{{ $movie->getUrl() }}" title="{{ $movie->name }}"
data-original="{{ $movie->getThumbUrl() }}"><span
class="pic-tag pic-tag-h">{{ $key + 1 }}</span></a></div>
<div class="detail detail-side">
<h4 class="title"><a href="{{ $movie->getUrl() }}"><i
class="icon iconfont icon-more text-muted pull-right"></i>
{{ $movie->name }}</a>
</h4>
<p class="font-12">
<span class="text-muted">Quốc gia {!! $movie->regions->map(function ($region) {
return '<a href="' . $region->getUrl() . '" title="' . $region->name . '">' . $region->name . '</a>';
})->implode(', ') !!}</span>
</p>
<p class="font-12 margin-0">
<span class="text-muted">Diễn viên{!! $movie->actors->take(2)->map(function ($director) {
return '<a href="' . $director->getUrl() . '" title="' . $director->name . '">' . $director->name . '</a>';
})->implode(', ') !!}</span>
</p>
</div>
</li>
@else
<li>
<a href="{{ $movie->getUrl() }}" title="{{ $movie->name }}">
<span class="flex justify-between items-center">
<span class="badge">{{ $key + 1 }}</span>
<span class="text-overflow text-left">{{ $movie->name }}</span>
<span class="text-muted">{{ $movie->quality }}</span>
</span>
</a>
</li>
@endif
@endforeach
</ul>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,15 @@
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
<h3 class="title">
<img src="{{ asset('/themes/rrdyw/statics/icon/icon_6.png') }}">{{$item['label']}}</h3>
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist__bd clearfix">
@foreach ($item['data'] as $movie)
<li class="col-md-6 col-sm-4 col-xs-3">
@include('themes::themerrdyw.inc.section.movie_card')
</li>
@endforeach
</ul>
</div>
</div>

View File

@ -0,0 +1,55 @@
@extends('themes::themerrdyw.layout')
@php
use VsMov\Core\Models\Movie;
$data = Cache::remember('site.movies.latest', setting('site_cache_ttl', 5 * 60), function () {
$lists = preg_split('/[\n\r]+/', get_theme_option('latest'));
$data = [];
foreach ($lists as $list) {
if (trim($list)) {
$list = explode('|', $list);
[$label, $relation, $field, $val, $sortKey, $alg, $limit, $link, $show_template] = array_merge($list, ['Phim mới cập nhật', '', '', 'type', 'series', 'created_at', 'desc', 8, '/', 'section_thumb']);
try {
$data[] = [
'label' => $label,
'show_template' => $show_template,
'data' => Movie::when($relation, function ($query) use ($relation, $field, $val) {
$query->whereHas($relation, function ($rel) use ($field, $val) {
$rel->where($field, $val);
});
})
->when(!$relation, function ($query) use ($field, $val) {
$query->where($field, $val);
})
->orderBy($sortKey, $alg)
->limit($limit)
->get(),
'topview' => Movie::when($relation, function ($query) use ($relation, $field, $val) {
$query->whereHas($relation, function ($rel) use ($field, $val) {
$rel->where($field, $val);
});
})
->when(!$relation, function ($query) use ($field, $val) {
$query->where($field, $val);
})
->orderBy('view_total', 'desc')
->limit(10)
->get(),
'link' => $link ?: '#',
];
} catch (\Exception $e) {
}
}
}
return $data;
});
@endphp
@section('content')
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
@foreach($data as $item)
@include("themes::themerrdyw.inc.section." . $item["show_template"])
@endforeach
</div>
</div>
@endsection

View File

@ -0,0 +1,69 @@
@extends('themes::layout')
@php
$menu = \VsMov\Core\Models\Menu::getTree();
$tops = Cache::remember('site.movies.tops', setting('site_cache_ttl', 5 * 60), function () {
$lists = preg_split('/[\n\r]+/', get_theme_option('hotest'));
$data = [];
foreach ($lists as $list) {
if (trim($list)) {
$list = explode('|', $list);
[$label, $relation, $field, $val, $sortKey, $alg, $limit, $template] = array_merge($list, ['Phim hot', '', 'type', 'series', 'view_total', 'desc', 4, 'top_thumb']);
try {
$data[] = [
'label' => $label,
'template' => $template,
'data' => \VsMov\Core\Models\Movie::when($relation, function ($query) use ($relation, $field, $val) {
$query->whereHas($relation, function ($rel) use ($field, $val) {
$rel->where($field, $val);
});
})
->when(!$relation, function ($query) use ($field, $val) {
$query->where($field, $val);
})
->orderBy($sortKey, $alg)
->limit($limit)
->get(),
];
} catch (\Exception $e) {
# code
}
}
}
return $data;
});
@endphp
@push('header')
<link rel="stylesheet" href="{{ asset('/themes/rrdyw/statics/font/iconfont.css') }}" type="text/css">
<link rel="stylesheet" href="{{ asset('/themes/rrdyw/statics/css/stui_block.css') }}" type="text/css">
<link rel="stylesheet" href="{{ asset('/themes/rrdyw/statics/css/stui_default.css') }}" type="text/css">
<link rel="stylesheet" href="{{ asset('/themes/rrdyw/statics/css/stui_custom.css') }}" type="text/css">
<script type="text/javascript" src="{{ asset('/themes/rrdyw/statics/js/jquery.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('/themes/rrdyw/statics/js/stui_default.js') }}"></script>
<script>
var SitePath = '{{ asset('/themes/rrdyw') }}/',
SiteAid = '10',
SiteTid = '',
SiteId = '';
</script>
@endpush
@section('body')
@include('themes::themerrdyw.inc.nav')
@if (get_theme_option('ads_header'))
{!! get_theme_option('ads_header') !!}
@endif
<div class="container">
@yield('content')
</div>
@endsection
@section('footer')
<div class="container">
{!! get_theme_option('footer') !!}
@if (get_theme_option('ads_catfish'))
{!! get_theme_option('ads_catfish') !!}
@endif
{!! setting('site_scripts_google_analytics') !!}
</div>
@endsection

View File

@ -0,0 +1,199 @@
@extends('themes::themerrdyw.layout')
@php
$watch_url = '';
if (!$currentMovie->is_copyright && count($currentMovie->episodes) && $currentMovie->episodes[0]['link'] != '') {
$watch_url = $currentMovie->episodes
->sortBy([['server', 'asc']])
->groupBy('server')
->first()
->sortByDesc('name', SORT_NATURAL)
->groupBy('name')
->last()
->sortByDesc('type')
->first()
->getUrl();
}
@endphp
@section('content')
<div class="row">
@if ($currentMovie->notify || $currentMovie->showtimes)
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
@if ($currentMovie->showtimes)
<p><strong>Lịch chiếu : </strong> {{$currentMovie->showtimes}}</p>
@endif
@if ($currentMovie->notify )
<p><strong>Thông báo : </strong> {{$currentMovie->notify}}</p>
@endif
</div>
</div>
</div>
@endif
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_bd clearfix">
<div class="col-md-wide-75 col-xs-1">
<div class="stui-content clearfix">
<div class="stui-content__thumb"><a class="stui-vodlist__thumb v-thumb lazyload"
href="{{ $watch_url }}"
title="{{ $currentMovie->name }}"
data-original="{{ $currentMovie->getThumbUrl() }}"
style="background-image: url({{ $currentMovie->getThumbUrl() }});"><span
class="play active hidden-xs"></span><span
class="pic-text text-right">{{$currentMovie->getStatus()}}</span></a></div>
<div class="stui-content__detail">
<h3 class="title">{{ $currentMovie->name }}</h3>
<p class="data"><span class="text-muted">Năm </span>{{ $currentMovie->publish_year }}</p>
<p class="data"><span class="text-muted">Đạo diễn </span>{!! $currentMovie->directors->map(function ($director) {
return '<a href="' . $director->getUrl() . '" title="' . $director->name . '">' . $director->name . '</a>';
})->implode(', ') !!}
</p>
<p class="data"><span class="text-muted">Diễn viên</span>{!! $currentMovie->actors->map(function ($director) {
return '<a href="' . $director->getUrl() . '" title="' . $director->name . '">' . $director->name . '</a>';
})->implode(', ') !!}</p>
<p class="data"><span class="text-muted">Quốc gia</span> {!! $currentMovie->regions->map(function ($region) {
return '<a href="' . $region->getUrl() . '" title="' . $region->name . '">' . $region->name . '</a>';
})->implode(', ') !!}</p>
<p class="data"><span class="text-muted">Thời lượng </span> {{$currentMovie->episode_time}}</p>
<p class="desc detail hidden-xs"><span class="left text-muted">Nội dung</span><span
class="detail-sketch">  {!! strip_tags($currentMovie->content) !!}</span></p>
<div class="play-btn clearfix">
@if($watch_url)
<a class="btn btn-primary" href="{{ $watch_url }}">Xem phim</a>
@endif
@if ($currentMovie->trailer_url && strpos($currentMovie->trailer_url, 'youtube'))
@php
parse_str( parse_url( $currentMovie->trailer_url, PHP_URL_QUERY ), $my_array_of_vars );
$video_id = $my_array_of_vars['v'] ?? null;
@endphp
<a class="btn btn-primary fancybox fancybox.iframe"
href="https://www.youtube.com/embed/{{$video_id}}">Trailer</a>
@endif
</div>
</div>
</div>
</div>
<div class="col-md-wide-25 hidden-md hidden-sm hidden-xs">
<div class="text-center" style="padding: 15px;margin-top: 50px">
<div class="rating-content">
<div id="movies-rating-star" style="height: 18px;"></div>
<div style="margin-top: 5px">
({{$currentMovie->getRatingStar()}}
sao
/
{{$currentMovie->getRatingCount()}} đánh giá)
</div>
<div id="movies-rating-msg"></div>
</div>
<div style="margin-top: 20px">
<p class="font-12">Đánh giá</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head bottom-line active clearfix">
<h3 class="title"><img src="{{ asset('/themes/rrdyw/statics/icon/icon_23.png') }}"
alt="404">Bình luận</h3></div>
</div>
<div class="stui-pannel_bd col-pd clearfix">
<div style="width: 100%; background-color: #fff;margin-top: 10px">
<div class="fb-comments w-full" data-href="{{ $currentMovie->getUrl() }}" data-width="100%"
data-numposts="5" data-colorscheme="light" data-lazy="true">
</div>
</div>
</div>
</div>
</div>
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<h3 class="title">
<img src="{{ asset('/themes/rrdyw/statics/icon/icon_6.png') }}"> thể bạn thích
</h3>
</div>
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist__bd clearfix">
@foreach ($movie_related as $movie)
<li class="col-md-6 col-sm-4 col-xs-3">
@include('themes::themerrdyw.inc.section.movie_card')
</li>
@endforeach
</ul>
</div>
</div>
</div>
</div>
@push('scripts')
<script src="{{ asset('/themes/rrdyw/plugins/jquery-raty/jquery.raty.js') }}"></script>
<link href="{{ asset('/themes/rrdyw/plugins/jquery-raty/jquery.raty.css') }}" rel="stylesheet" type="text/css" />
<script>
var rated = false;
$('#movies-rating-star').raty({
score: {{$currentMovie->getRatingStar()}},
number: 10,
numberMax: 10,
hints: ['quá tệ', 'tệ', 'không hay', 'không hay lắm', 'bình thường', 'xem được', 'có vẻ hay', 'hay',
'rất hay', 'siêu phẩm'
],
starOff: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-off.png') }}',
starOn: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-on.png') }}',
starHalf: '{{ asset('/themes/rrdyw/plugins/jquery-raty/images/star-half.png') }}',
click: function(score, evt) {
if (rated) return
fetch("{{ route('movie.rating', ['movie' => $currentMovie->slug]) }}", {
method: 'POST',
headers: {
"Content-Type": "application/json",
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]')
.getAttribute(
'content')
},
body: JSON.stringify({
rating: score
})
});
rated = true;
$('#movies-rating-star').data('raty').readOnly(true);
$('#movies-rating-msg').html(`Bạn đã đánh giá ${score} sao cho phim này!`);
}
});
</script>
<script src="{{ asset('/themes/rrdyw/source/jquery.fancybox.pack.js?v=2.1.5') }}"></script>
<link rel="stylesheet" type="text/css" href="{{ asset('/themes/rrdyw/source/jquery.fancybox.css?v=2.1.5') }}" media="screen"/>
<script type="text/javascript">
$(document).ready(function () {
$(".fancybox").fancybox({
maxWidth : 800,
maxHeight : 600,
fitToView : false,
width : '70%',
height : '70%',
autoSize : false,
closeClick : false,
openEffect : 'none',
closeEffect : 'none'
});
});
</script>
{!! setting('site_scripts_facebook_sdk') !!}
@endpush
@endsection

56
routes/web.php Normal file
View File

@ -0,0 +1,56 @@
<?php
use Illuminate\Support\Facades\Route;
use VsMov\ThemeRrdyw\Controllers\ThemeRrdywController;
// --------------------------
// Custom Backpack Routes
// --------------------------
// This route file is loaded automatically by Backpack\Base.
// Routes you generate using Backpack\Generators will be placed here.
Route::group([
'middleware' => array_merge(
(array) config('backpack.base.web_middleware', 'web'),
),
], function () {
Route::get('/', [ThemeRrdywController::class, 'index']);
Route::get('/search', [ThemeRrdywController::class, 'ajaxSearch']);
Route::get(setting('site_routes_category', '/the-loai/{category}'), [ThemeRrdywController::class, 'getMovieOfCategory'])
->where(['category' => '.+', 'id' => '[0-9]+'])
->name('categories.movies.index');
Route::get(setting('site_routes_region', '/quoc-gia/{region}'), [ThemeRrdywController::class, 'getMovieOfRegion'])
->where(['region' => '.+', 'id' => '[0-9]+'])
->name('regions.movies.index');
Route::get(setting('site_routes_tag', '/tu-khoa/{tag}'), [ThemeRrdywController::class, 'getMovieOfTag'])
->where(['tag' => '.+', 'id' => '[0-9]+'])
->name('tags.movies.index');
Route::get(setting('site_routes_types', '/danh-sach/{type}'), [ThemeRrdywController::class, 'getMovieOfType'])
->where(['type' => '.+', 'id' => '[0-9]+'])
->name('types.movies.index');
Route::get(setting('site_routes_actors', '/dien-vien/{actor}'), [ThemeRrdywController::class, 'getMovieOfActor'])
->where(['actor' => '.+', 'id' => '[0-9]+'])
->name('actors.movies.index');
Route::get(setting('site_routes_directors', '/dao-dien/{director}'), [ThemeRrdywController::class, 'getMovieOfDirector'])
->where(['director' => '.+', 'id' => '[0-9]+'])
->name('directors.movies.index');
Route::get(setting('site_routes_episode', '/phim/{movie}/{episode}-{id}'), [ThemeRrdywController::class, 'getEpisode'])
->where(['movie' => '.+', 'movie_id' => '[0-9]+', 'episode' => '.+', 'id' => '[0-9]+'])
->name('episodes.show');
Route::post(sprintf('/%s/{movie}/{episode}/report', config('vsmov.routes.movie', 'phim')), [ThemeRrdywController::class, 'reportEpisode'])->name('episodes.report');
Route::post(sprintf('/%s/{movie}/rate', config('vsmov.routes.movie', 'phim')), [ThemeRrdywController::class, 'rateMovie'])->name('movie.rating');
Route::get(setting('site_routes_movie', '/phim/{movie}'), [ThemeRrdywController::class, 'getMovieOverview'])
->where(['movie' => '.+', 'id' => '[0-9]+'])
->name('movies.show');
});

View File

@ -0,0 +1,314 @@
<?php
namespace VsMov\ThemeRrdyw\Controllers;
use Backpack\Settings\app\Models\Setting;
use Illuminate\Http\Request;
use VsMov\Core\Models\Actor;
use VsMov\Core\Models\Catalog;
use VsMov\Core\Models\Category;
use VsMov\Core\Models\Director;
use VsMov\Core\Models\Episode;
use VsMov\Core\Models\Movie;
use VsMov\Core\Models\Region;
use VsMov\Core\Models\Tag;
use Illuminate\Support\Facades\Cache;
class ThemeRrdywController
{
public function index(Request $request)
{
if ($request['search'] || $request['categorys']|| $request['years']|| $request['regions']|| $request['types']|| $request['sorts']) {
$data = Movie::when(!empty($request['categorys']), function ($movie) {
$movie->whereHas('categories', function ($categories) {
$categories->where('id', request('categorys'));
});
})->when(!empty($request['regions']), function ($movie) {
$movie->whereHas('regions', function ($regions) {
$regions->where('id', request('regions'));
});
})->when(!empty($request['years']), function ($movie) {
$movie->where('publish_year', request('years'));
})->when(!empty($request['types']), function ($movie) {
$movie->where('type', request('types'));
})->when(!empty($request['search']), function ($query) {
$query->where(function ($query) {
$query->where('name', 'like', '%' . request('search') . '%')
->orWhere('origin_name', 'like', '%' . request('search') . '%');
})->orderBy('name', 'desc');
})->when(!empty($request['sorts']), function ($movie) {
if (request('sorts') == 'create') {
return $movie->orderBy('created_at', 'desc');
}
if (request('sorts') == 'update') {
return $movie->orderBy('updated_at', 'desc');
}
if (request('sorts') == 'year') {
return $movie->orderBy('publish_year', 'desc');
}
if (request('sorts') == 'view') {
return $movie->orderBy('view_total', 'desc');
}
})->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $data,
'search' => $request['search'],
'section_name' => "Tìm kiếm phim: $request->search"
]);
}
return view('themes::themerrdyw.index', [
'title' => Setting::get('site_homepage_title')
]);
}
public function getMovieOverview(Request $request)
{
/** @var Movie */
$movie = Movie::fromCache()->find($request->movie ?: $request->id);
if (is_null($movie)) abort(404);
$movie->generateSeoTags();
$movie->increment('view_total', 1);
$movie->increment('view_day', 1);
$movie->increment('view_week', 1);
$movie->increment('view_month', 1);
$movie_related_cache_key = 'movie_related:' . $movie->id;
$movie_related = Cache::get($movie_related_cache_key);
if(is_null($movie_related)) {
$movie_related = $movie->categories[0]->movies()->inRandomOrder()->limit(get_theme_option('movie_related_limit', 10))->get();
Cache::put($movie_related_cache_key, $movie_related, setting('site_cache_ttl', 5 * 60));
}
$movie_related_top = $movie->categories[0]->movies()->orderBy('view_total', 'desc')->limit(get_theme_option('movie_related_limit', 10))->get();
return view('themes::themerrdyw.single', [
'currentMovie' => $movie,
'title' => $movie->getTitle(),
'movie_related' => $movie_related,
'movie_related_top' => $movie_related_top
]);
}
public function getEpisode(Request $request)
{
$movie = Movie::fromCache()->find($request->movie ?: $request->movie_id)->load('episodes');
if (is_null($movie)) abort(404);
/** @var Episode */
$episode_id = $request->id;
$episode = $movie->episodes->when($episode_id, function ($collection, $episode_id) {
return $collection->where('id', $episode_id);
})->firstWhere('slug', $request->episode);
if (is_null($episode)) abort(404);
$episode->generateSeoTags();
$movie->increment('view_total', 1);
$movie->increment('view_day', 1);
$movie->increment('view_week', 1);
$movie->increment('view_month', 1);
$movie_related_cache_key = 'movie_related:' . $movie->id;
$movie_related = Cache::get($movie_related_cache_key);
if(is_null($movie_related)) {
$movie_related = $movie->categories[0]->movies()->inRandomOrder()->limit(get_theme_option('movie_related_limit', 10))->get();
Cache::put($movie_related_cache_key, $movie_related, setting('site_cache_ttl', 5 * 60));
}
$movie_related_top = $movie->categories[0]->movies()->orderBy('view_total', 'desc')->limit(get_theme_option('movie_related_limit', 10))->get();
return view('themes::themerrdyw.episode', [
'currentMovie' => $movie,
'movie_related' => $movie_related,
'movie_related_top' => $movie_related_top,
'episode' => $episode,
'title' => $episode->getTitle()
]);
}
public function getMovieOfCategory(Request $request)
{
/** @var Category */
$category = Category::fromCache()->find($request->category ?: $request->id);
if (is_null($category)) abort(404);
$category->generateSeoTags();
$movies = $category->movies()->orderBy('created_at', 'desc')->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'category' => $category,
'title' => $category->seo_title ?: $category->getTitle(),
'section_name' => "Phim thể loại $category->name"
]);
}
public function getMovieOfRegion(Request $request)
{
/** @var Region */
$region = Region::fromCache()->find($request->region ?: $request->id);
if (is_null($region)) abort(404);
$region->generateSeoTags();
$movies = $region->movies()->orderBy('created_at', 'desc')->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'region' => $region,
'title' => $region->seo_title ?: $region->getTitle(),
'section_name' => "Phim quốc gia $region->name"
]);
}
public function getMovieOfActor(Request $request)
{
/** @var Actor */
$actor = Actor::fromCache()->find($request->actor ?: $request->id);
if (is_null($actor)) abort(404);
$actor->generateSeoTags();
$movies = $actor->movies()->orderBy('created_at', 'desc')->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'person' => $actor,
'title' => $actor->getTitle(),
'section_name' => "Diễn viên $actor->name"
]);
}
public function getMovieOfDirector(Request $request)
{
/** @var Director */
$director = Director::fromCache()->find($request->director ?: $request->id);
if (is_null($director)) abort(404);
$director->generateSeoTags();
$movies = $director->movies()->orderBy('created_at', 'desc')->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'person' => $director,
'title' => $director->getTitle(),
'section_name' => "Đạo diễn $director->name"
]);
}
public function getMovieOfTag(Request $request)
{
/** @var Tag */
$tag = Tag::fromCache()->find($request->tag ?: $request->id);
if (is_null($tag)) abort(404);
$tag->generateSeoTags();
$movies = $tag->movies()->orderBy('created_at', 'desc')->paginate(get_theme_option('per_page_limit'));
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'tag' => $tag,
'title' => $tag->getTitle(),
'section_name' => "Tags: $tag->name"
]);
}
public function getMovieOfType(Request $request)
{
/** @var Catalog */
$catalog = Catalog::fromCache()->find($request->type ?: $request->id);
if (is_null($catalog)) abort(404);
$catalog->generateSeoTags();
$cache_key = 'catalog:' . $catalog->id . ':page:' . ($request['page'] ?: 1);
$movies = Cache::get($cache_key);
if(is_null($movies)) {
$value = explode('|', trim($catalog->value));
[$relation_config, $field, $val, $sortKey, $alg] = array_merge($value, ['', 'is_copyright', 0, 'created_at', 'desc']);
$relation_config = explode(',', $relation_config);
[$relation_table, $relation_field, $relation_val] = array_merge($relation_config, ['', '', '']);
try {
$movies = \VsMov\Core\Models\Movie::when($relation_table, function ($query) use ($relation_table, $relation_field, $relation_val, $field, $val) {
$query->whereHas($relation_table, function ($rel) use ($relation_field, $relation_val, $field, $val) {
$rel->where($relation_field, $relation_val)->where(array_combine(explode(",", $field), explode(",", $val)));
});
})->when(!$relation_table, function ($query) use ($field, $val) {
$query->where(array_combine(explode(",", $field), explode(",", $val)));
})
->orderBy($sortKey, $alg)
->paginate(get_theme_option('per_page_limit'));
Cache::put($cache_key, $movies, setting('site_cache_ttl', 5 * 60));
} catch (\Exception $e) {}
}
return view('themes::themerrdyw.catalog', [
'data' => $movies,
'section_name' => "Danh sách $catalog->name"
]);
}
public function reportEpisode(Request $request, $movie, $slug)
{
$movie = Movie::fromCache()->find($movie)->load('episodes');
$episode = $movie->episodes->when(request('id'), function ($collection) {
return $collection->where('id', request('id'));
})->firstWhere('slug', $slug);
$episode->update([
'report_message' => request('message', ''),
'has_report' => true
]);
return response([], 204);
}
public function rateMovie(Request $request, $movie)
{
$movie = Movie::fromCache()->find($movie);
$movie->refresh()->increment('rating_count', 1, [
'rating_star' => $movie->rating_star + ((int) request('rating') - $movie->rating_star) / ($movie->rating_count + 1)
]);
return response()->json(['status' => true, 'rating_star' => number_format($movie->rating_star, 1), 'rating_count' => $movie->rating_count]);
}
public function ajaxSearch(Request $request)
{
if ($request->ajax()) {
$output = array();
$movies = Movie::where('name', 'LIKE', '%' . $request->search . '%')->orWhere('origin_name', 'LIKE', '%' . $request->search . '%')->limit(5)->get();
if ($movies) {
foreach ($movies as $key => $movie) {
$output[] = array(
'title' => $movie->name,
'original_title' => $movie->origin_name,
'year' => $movie->publish_year,
'total_episode' => $movie->episode_total,
'image' => $movie->thumb_url,
'image_poster' => $movie->poster_url,
'slug' => $movie->getUrl(),
);
}
}
return Response($output);
}
}
}

View File

@ -0,0 +1,139 @@
<?php
namespace VsMov\ThemeRrdyw;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class ThemeRrdywServiceProvider extends ServiceProvider
{
public function register()
{
$this->setupDefaultThemeCustomizer();
}
public function boot()
{
$this->loadViewsFrom(__DIR__ . '/../resources/views/', 'themes');
$this->publishes([
__DIR__ . '/../resources/assets' => public_path('themes/rrdyw')
], 'rrdyw-assets');
}
protected function setupDefaultThemeCustomizer()
{
config(['themes' => array_merge(config('themes', []), [
'rrdyw' => [
'name' => 'Theme Rrdyw',
'author' => 'dev.VsMov.cc',
'package_name' => 'vsmov/theme-rrdyw',
'publishes' => ['rrdyw-assets'],
'preview_image' => '',
'options' => [
[
'name' => 'per_page_limit',
'label' => 'Pages limit',
'type' => 'number',
'value' => 24,
'wrapperAttributes' => [
'class' => 'form-group col-md-4',
],
'tab' => 'List'
],
[
'name' => 'movie_related_limit',
'label' => 'Movies related limit',
'type' => 'number',
'value' => 12,
'wrapperAttributes' => [
'class' => 'form-group col-md-4',
],
'tab' => 'List'
],
[
'name' => 'latest',
'label' => 'Home Page',
'type' => 'code',
'hint' => 'display_label|relation|find_by_field|value|limit|show_more_url|show_template (section_thumb|section_side)',
'value' => <<<EOT
Phim chiếu rạp||is_shown_in_theater|1|updated_at|desc|16|/danh-sach/phim-chieu-rap|section_thumb
Phim bộ mới||type|series|updated_at|desc|15|/danh-sach/phim-bo|section_side
Phim lẻ mới||type|single|updated_at|desc|15|/danh-sach/phim-le|section_side
Hoạt hình|categories|slug|hoat-hinh|updated_at|desc|15|/the-loai/hoat-hinh|section_side
EOT,
'attributes' => [
'rows' => 5
],
'tab' => 'List'
],
[
'name' => 'additional_css',
'label' => 'Additional CSS',
'type' => 'code',
'value' => "",
'tab' => 'Custom CSS'
],
[
'name' => 'body_attributes',
'label' => 'Body attributes',
'type' => 'text',
'value' => "",
'tab' => 'Custom CSS'
],
[
'name' => 'additional_header_js',
'label' => 'Header JS',
'type' => 'code',
'value' => "",
'tab' => 'Custom JS'
],
[
'name' => 'additional_body_js',
'label' => 'Body JS',
'type' => 'code',
'value' => "",
'tab' => 'Custom JS'
],
[
'name' => 'additional_footer_js',
'label' => 'Footer JS',
'type' => 'code',
'value' => "",
'tab' => 'Custom JS'
],
[
'name' => 'footer',
'label' => 'Footer',
'type' => 'code',
'value' => <<<EOT
<div class="row">
<div class="stui-foot clearfix">
<p class="text-muted text-center visible-xs">Copyright © 2008-2018</p>
<center>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">Tuyên bố trang trọng: Trang web này nhằm mục đích cung cấp một môi trường giao tiếp tốt cho phần lớn những người đam phim ảnh truyền hình. Chúng tôi không đàn áp, sản xuất hoặc lưu trữ bất kỳ tệp âm thanh video nào. Tất cả các nguồn trên trang web đều được sao chép từ các kênh công cộng trên Internet.</font></font></p>
<p><font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> chỉ dành cho mục đích giao lưu, học hỏi giữa các dân mạng thử nghiệm. Vui lòng không sử dụng cho mục đích thương mại. Vui lòng ủng hộ phiên bản chính hãng! Trang web này hoàn toàn một trang web phúc lợi công cộng tuân thủ nghiêm ngặt luật pháp quy định của Trung Quốc đại lục. Email khiếu nại báo cáo: rrdyw#gmail.COM</font></font></p>
</center>
</div>
</div>
EOT,
'tab' => 'Custom HTML'
],
[
'name' => 'ads_header',
'label' => 'Ads header',
'type' => 'code',
'value' => '',
'tab' => 'Ads'
],
[
'name' => 'ads_catfish',
'label' => 'Ads catfish',
'type' => 'code',
'value' => '',
'tab' => 'Ads'
]
],
]
])]);
}
}

BIN
src/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 KiB