Browse Source

Charts listing on dashboard

pull/5180/head
Ruud 10 years ago
parent
commit
8bbe4b3908
  1. 2
      couchpotato/core/media/movie/_base/static/list.js
  2. 49
      couchpotato/core/media/movie/_base/static/movie.actions.js
  3. 6
      couchpotato/core/media/movie/_base/static/movie.scss
  4. 66
      couchpotato/core/media/movie/charts/main.py
  5. 14
      couchpotato/core/media/movie/charts/static/charts.js
  6. 9
      couchpotato/core/media/movie/suggestion/main.py
  7. 2
      couchpotato/static/scripts/combined.base.min.js
  8. 51
      couchpotato/static/scripts/combined.plugins.min.js
  9. 2
      couchpotato/static/scripts/page/home.js
  10. 124
      couchpotato/static/style/combined.min.css

2
couchpotato/core/media/movie/_base/static/list.js

@ -527,7 +527,7 @@ var MovieList = new Class({
getSavedView: function(){
var self = this;
return Cookie.read(self.options.identifier+'_view');
return self.options.force_view ? self.options.view : Cookie.read(self.options.identifier+'_view');
},
search: function(){

49
couchpotato/core/media/movie/_base/static/movie.actions.js

@ -733,7 +733,7 @@ MA.SuggestSeen = new Class({
createButton: function(){
var self = this;
return new Element('a.add', {
return new Element('a.seen', {
'text': 'Already seen',
'title': 'Already seen it!',
'events': {
@ -778,7 +778,7 @@ MA.SuggestIgnore = new Class({
createButton: function(){
var self = this;
return new Element('a.add', {
return new Element('a.ignore', {
'text': 'Ignore',
'title': 'Don\'t suggest this movie anymore',
'events': {
@ -807,6 +807,51 @@ MA.SuggestIgnore = new Class({
});
MA.ChartIgnore = new Class({
Extends: SuggestBase,
icon: 'error',
create: function() {
var self = this;
self.button = self.createButton();
self.detail_button = self.createButton();
},
createButton: function(){
var self = this;
return new Element('a.ignore', {
'text': 'Hide',
'title': 'Don\'t show this movie in charts',
'events': {
'click': self.markAsHidden.bind(self)
}
});
},
markAsHidden: function(e){
var self = this;
(e).preventDefault();
Api.request('charts.ignore', {
'data': {
'imdb': self.getIMDB()
},
'onComplete': function(json){
if(self.movie.details){
self.movie.details.close();
}
self.movie.destroy();
}
});
}
});
MA.Readd = new Class({
Extends: MovieAction,

6
couchpotato/core/media/movie/_base/static/movie.scss

@ -224,6 +224,12 @@ $mass_edit_height: 44px;
}
}
}
.rating .vote {
display: inline-block;
min-width: 60px;
text-align: right;
}
}
}

66
couchpotato/core/media/movie/charts/main.py

@ -1,5 +1,6 @@
import time
from couchpotato.core.helpers.variable import getTitle
from couchpotato import Env
from couchpotato.core.helpers.variable import getTitle, splitString
from couchpotato.core.logger import CPLog
from couchpotato.api import addApiView
@ -17,10 +18,7 @@ class Charts(Plugin):
def __init__(self):
addApiView('charts.view', self.automationView)
addEvent('app.load', self.setCrons)
def setCrons(self):
fireEvent('schedule.interval', 'charts.update_cache', self.updateViewCache, hours = self.update_interval)
addApiView('charts.ignore', self.ignoreView)
def automationView(self, force_update = False, **kwargs):
@ -31,10 +29,40 @@ class Charts(Plugin):
if not charts:
charts = self.updateViewCache()
ignored = splitString(Env.prop('charts_ignore', default = ''))
# Create a list the movie/list.js can use
for chart in charts:
medias = []
for media in chart.get('list', []):
identifier = media.get('imdb')
if identifier in ignored:
continue
# Cache poster
poster = media.get('images', {}).get('poster', [])
cached_poster = fireEvent('file.download', url = poster[0], single = True) if len(poster) > 0 else False
files = {'image_poster': [cached_poster] } if cached_poster else {}
medias.append({
'status': 'suggested',
'title': getTitle(media),
'type': 'movie',
'info': media,
'files': files,
'identifiers': {
'imdb': identifier
}
})
chart['list'] = medias
return {
'success': True,
'count': len(charts),
'charts': charts
'charts': charts,
'ignored': ignored,
}
def updateViewCache(self):
@ -54,20 +82,6 @@ class Charts(Plugin):
chart['hide_wanted'] = self.conf('hide_wanted')
chart['hide_library'] = self.conf('hide_library')
# Create a list the movie/list.js can use
medias = []
for media in chart.get('list'):
medias.append({
'status': 'suggested',
'title': getTitle(media),
'type': 'movie',
'info': media,
'identifiers': {
'imdb': media.get('imdb')
}
})
chart['list'] = medias
self.setCache('charts_cached', charts, timeout = self.update_interval * 3600)
except:
log.error('Failed refreshing charts')
@ -75,3 +89,15 @@ class Charts(Plugin):
self.update_in_progress = False
return charts
def ignoreView(self, imdb = None, **kwargs):
ignored = splitString(Env.prop('charts_ignore', default = ''))
if imdb:
ignored.append(imdb)
Env.prop('charts_ignore', ','.join(set(ignored)))
return {
'result': True
}

14
couchpotato/core/media/movie/charts/static/charts.js

@ -73,7 +73,7 @@ var Charts = new Class({
'identifier': chart.name.toLowerCase().replace(/[^a-z0-9]+/g, '_'),
'title': chart.name,
'description': '<a href="'+chart.url+'">See source</a>',
'actions': [MA.Add, MA.SuggestIgnore, MA.SuggestSeen, MA.IMDB, MA.Trailer],
'actions': [MA.Add, MA.ChartIgnore, MA.IMDB, MA.Trailer],
'load_more': false,
'view': 'thumb',
'force_view': true,
@ -112,18 +112,6 @@ var Charts = new Class({
}
},
hide: function(){
this.el.hide();
},
afterAdded: function(m){
$(m).getElement('div.chart_number')
.addClass('chart_in_wanted')
.set('title', 'Movie in wanted list');
},
toElement: function(){
return this.el;
}

9
couchpotato/core/media/movie/suggestion/main.py

@ -47,15 +47,18 @@ class Suggestion(Plugin):
medias = []
for suggestion in suggestions[:int(limit)]:
# Cache poster
poster = suggestion.get('images', {}).get('poster', [])
cached_poster = fireEvent('file.download', url = poster[0], single = True) if len(poster) > 0 else False
files = {'image_poster': [cached_poster] } if cached_poster else {}
medias.append({
'status': 'suggested',
'title': getTitle(suggestion),
'type': 'movie',
'info': suggestion,
'files': {
'image_poster': [fireEvent('file.download', url = poster[0], single = True)]
} if len(poster) > 0 else {},
'files': files,
'identifiers': {
'imdb': suggestion.get('imdb')
}

2
couchpotato/static/scripts/combined.base.min.js

@ -970,7 +970,7 @@ Page.Home = new Class({
return;
}
self.chain = new Chain();
self.chain.chain(self.createAvailable.bind(self), self.createSoon.bind(self), self.createSuggestions.bind(self), self.createLate.bind(self));
self.chain.chain(self.createAvailable.bind(self), self.createSoon.bind(self), self.createSuggestions.bind(self), self.createCharts.bind(self), self.createLate.bind(self));
self.chain.callChain();
},
createAvailable: function() {

51
couchpotato/static/scripts/combined.plugins.min.js

@ -461,7 +461,7 @@ var MovieList = new Class({
click: self.loadMore.bind(self)
}
}) : null);
self.changeView(self.getSavedView() || self.options.view || "thumb");
self.changeView((self.options.force_view ? self.options.view : self.getSavedView() || self.options.view) || "thumb");
if (self.options.navigation) self.createNavigation();
if (self.options.api_call) self.getMovies();
App.on("movie.added", self.movieAdded.bind(self));
@ -801,7 +801,7 @@ var MovieList = new Class({
},
getSavedView: function() {
var self = this;
return Cookie.read(self.options.identifier + "_view");
return self.options.force_view ? self.options.view : Cookie.read(self.options.identifier + "_view");
},
search: function() {
var self = this;
@ -1533,7 +1533,7 @@ MA.SuggestSeen = new Class({
},
createButton: function() {
var self = this;
return new Element("a.add", {
return new Element("a.seen", {
text: "Already seen",
title: "Already seen it!",
events: {
@ -1569,7 +1569,7 @@ MA.SuggestIgnore = new Class({
},
createButton: function() {
var self = this;
return new Element("a.add", {
return new Element("a.ignore", {
text: "Ignore",
title: "Don't suggest this movie anymore",
events: {
@ -1594,6 +1594,41 @@ MA.SuggestIgnore = new Class({
}
});
MA.ChartIgnore = new Class({
Extends: SuggestBase,
icon: "error",
create: function() {
var self = this;
self.button = self.createButton();
self.detail_button = self.createButton();
},
createButton: function() {
var self = this;
return new Element("a.ignore", {
text: "Hide",
title: "Don't show this movie in charts",
events: {
click: self.markAsHidden.bind(self)
}
});
},
markAsHidden: function(e) {
var self = this;
e.preventDefault();
Api.request("charts.ignore", {
data: {
imdb: self.getIMDB()
},
onComplete: function(json) {
if (self.movie.details) {
self.movie.details.close();
}
self.movie.destroy();
}
});
}
});
MA.Readd = new Class({
Extends: MovieAction,
create: function() {
@ -2368,7 +2403,7 @@ var Charts = new Class({
identifier: chart.name.toLowerCase().replace(/[^a-z0-9]+/g, "_"),
title: chart.name,
description: '<a href="' + chart.url + '">See source</a>',
actions: [ MA.Add, MA.SuggestIgnore, MA.SuggestSeen, MA.IMDB, MA.Trailer ],
actions: [ MA.Add, MA.ChartIgnore, MA.IMDB, MA.Trailer ],
load_more: false,
view: "thumb",
force_view: true,
@ -2395,12 +2430,6 @@ var Charts = new Class({
self.shown_once = true;
}
},
hide: function() {
this.el.hide();
},
afterAdded: function(m) {
$(m).getElement("div.chart_number").addClass("chart_in_wanted").set("title", "Movie in wanted list");
},
toElement: function() {
return this.el;
}

2
couchpotato/static/scripts/page/home.js

@ -25,7 +25,7 @@ Page.Home = new Class({
self.createAvailable.bind(self),
self.createSoon.bind(self),
self.createSuggestions.bind(self),
//self.createCharts.bind(self),
self.createCharts.bind(self),
self.createLate.bind(self)
);

124
couchpotato/static/style/combined.min.css

@ -1,4 +1,4 @@
.movies>.description a:hover,.page.movie_details .releases .buttons a:hover{text-decoration:underline}
.movies>.description a:hover,.page.movie_details .releases .buttons a:hover,.page.settings fieldset h2 .hint a{text-decoration:underline}
.search_form{display:inline-block;z-index:11;width:44px;position:relative}
.search_form .icon-search{position:absolute;z-index:2;top:50%;left:0;height:100%;text-align:center;color:#FFF;font-size:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
.search_form .wrapper{position:absolute;left:44px;bottom:0;background:#ac0000;border-radius:3px 0 0 3px;display:none;box-shadow:0 0 15px 2px rgba(0,0,0,.15)}
@ -86,6 +86,7 @@
.list_list .movie .data .info .eta{font-size:.8em;opacity:.5;margin-right:4px}
.list_list .movie .data .info .quality{clear:both;overflow:hidden}
.list_list .movie .data .info .quality span{float:left;font-size:.7em;margin:2px 0 0 2px}
.list_list .movie .data .info .rating .vote{display:inline-block;min-width:60px;text-align:right}
.list_list .movie .actions{position:absolute;right:10px;top:0;bottom:0;display:none;z-index:10}
.list_list .movie .actions .action{display:inline-block}
.list_list .movie .actions a{height:100%;display:block;background:#FFF;padding:10px;width:auto;float:right;color:#000}
@ -139,7 +140,7 @@
@media (max-width:480px){.page.movie_details .overlay{left:0;border-radius:0}
.page.movie_details .overlay .close{width:44px}
}
.page.movie_details .content{position:fixed;z-index:2;top:0;bottom:0;right:0;left:176px;background:#FFF;border-radius:3px 0 0 3px;overflow-y:auto;-webkit-transform:translateX(100%) translateZ(0);transform:translateX(100%) translateZ(0);transition:-webkit-transform 350ms cubic-bezier(.9,0,.1,1);transition:transform 350ms cubic-bezier(.9,0,.1,1)}
.page.movie_details .content{position:fixed;z-index:2;top:0;bottom:0;right:0;left:176px;background:#FFF;border-radius:3px 0 0 3px;overflow-y:auto;-webkit-transform:translateX(100%)translateZ(0);transform:translateX(100%)translateZ(0);transition:-webkit-transform 350ms cubic-bezier(.9,0,.1,1);transition:transform 350ms cubic-bezier(.9,0,.1,1)}
.page.movie_details .content>.head{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;padding:0 20px;position:relative;z-index:2}
@media (max-width:480px){.page.movie_details .content{left:44px}
.page.movie_details .content>.head{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 10px;line-height:1em}
@ -173,7 +174,7 @@
.page.movie_details .content>.head .buttons{margin-left:auto}
.page.movie_details .content .section{padding:10px}
}
.page.movie_details .files span,.page.movie_details .releases .item span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding:6.67px 0}
.page.movie_details .files span,.page.movie_details .releases .item span{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding:6.67px 0}
.page.movie_details.show{pointer-events:auto}
.page.movie_details.show .overlay{opacity:1;transition-delay:0s}
.page.movie_details.show .overlay .close{opacity:1;transition-delay:300ms}
@ -230,7 +231,7 @@
.page.movie_details .releases .actions{min-width:80px;max-width:80px}
.page.movie_details .trailer_container{background:#000;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;max-width:100%;cursor:pointer}
.alph_nav .menus .button,.alph_nav .menus .counter{line-height:80px;padding:0 10px}
.page.movie_details .trailer_container .background{opacity:.3;transition:all 300ms;-webkit-transform:scale(1.05) translateZ(0);transform:scale(1.05) translateZ(0);background:center no-repeat;background-size:cover;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}
.page.movie_details .trailer_container .background{opacity:.3;transition:all 300ms;-webkit-transform:scale(1.05)translateZ(0);transform:scale(1.05)translateZ(0);background:center no-repeat;background-size:cover;position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}
.page.movie_details .trailer_container .icon-play{opacity:.9;position:absolute;z-index:2;text-align:center;width:100%;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);transition:all 300ms;color:#FFF;font-size:110px}
@media (max-width:1024px){.page.movie_details .trailer_container .icon-play{font-size:55px}
}
@ -291,6 +292,7 @@
@media all and (max-width:600px){.charts .chart{width:100%}
}
.charts .chart .media_result .data{left:150px;background:#4e5969;border:none}
#category_ordering li:last-child,#profile_ordering li:last-child,.api_docs .api .params tr:last-child td,.api_docs .api .params tr:last-child th{border:0}
.charts .chart .media_result .data .info{top:10px;left:15px;right:15px;bottom:10px;overflow:hidden}
.charts .chart .media_result .data .info h2{white-space:normal;max-height:120px;font-size:18px;line-height:18px}
.charts .chart .media_result .data .info .genres,.charts .chart .media_result .data .info .rating,.charts .chart .media_result .data .info .year{position:static;display:block;padding:0;opacity:.6}
@ -309,6 +311,7 @@
.charts .chart .media_result .chart_number{color:#fff;position:absolute;top:0;padding:10px;font:700 2em/1em Helvetica,Sans-Serif;width:50px;height:100%;text-align:center;border-left:8px solid transparent}
.charts .chart .media_result.chart_in_wanted .chart_number{border-color:rgba(0,255,40,.3)}
.charts .chart .media_result.chart_in_library .chart_number{border-color:rgba(0,202,32,.3)}
.page.wizard .tabs li:hover a,.toggle_menu a:hover{border-color:#047792}
.charts .chart .media_result .actions{position:absolute;top:10px;right:10px;display:none;width:90px}
.charts .chart .media_result:hover .actions{display:block}
.charts .chart .media_result:hover h2 .title{opacity:0}
@ -316,40 +319,13 @@
.charts .chart .media_result .actions a{margin-left:10px;vertical-align:middle}
.toggle_menu{height:50px}
.toggle_menu a{display:block;width:50%;float:left;color:rgba(255,255,255,.6);border-bottom:1px solid rgba(255,255,255,.06667)}
.toggle_menu a:hover{border-color:#047792;border-width:4px;color:#fff}
.toggle_menu a:hover{border-width:4px;color:#fff}
.toggle_menu a.active{border-bottom:4px solid #04bce6;color:#fff}
#category_ordering li,#profile_ordering li,.add_new_profile{border-bottom:1px solid #eaeaea}
.toggle_menu a:last-child{float:right}
.toggle_menu h2{height:40px}
@media all and (max-width:480px){.toggle_menu h2{font-size:16px;text-align:center;height:30px}
}
.suggestions{clear:both;padding-top:10px;margin-bottom:30px}
.suggestions>h2{height:40px}
.suggestions .media_result{display:inline-block;width:33.333%;height:150px}
@media all and (max-width:960px){.suggestions .media_result{width:50%}
}
@media all and (max-width:600px){.suggestions .media_result{width:100%}
}
.suggestions .media_result .data{left:100px;background:#4e5969;border:none}
.suggestions .media_result .data .info{top:10px;left:15px;right:15px;bottom:10px;overflow:hidden}
.suggestions .media_result .data .info h2{white-space:normal;max-height:120px;font-size:18px;line-height:18px}
.suggestions .media_result .data .info .genres,.suggestions .media_result .data .info .rating,.suggestions .media_result .data .info .year{position:static;display:block;padding:0;opacity:.6}
.suggestions .media_result .data .info .year{margin:10px 0 0}
.suggestions .media_result .data .info .rating{font-size:20px;float:right;margin-top:-20px}
.suggestions .media_result .data .info .rating:before{content:"\e031";font-family:Elusive-Icons;font-size:14px;margin:0 5px 0 0;vertical-align:bottom}
.suggestions .media_result .data .info .genres{font-size:11px;font-style:italic;text-align:right}
.suggestions .media_result .data .info .plot{display:block;font-size:11px;overflow:hidden;text-align:justify;height:100%;z-index:2;top:64px;position:absolute;background:#4e5969;cursor:pointer;transition:all .4s ease-in-out;padding:0 3px 10px 0}
.suggestions .media_result .data:before{content:'';display:block;height:10px;right:0;left:0;bottom:10px;position:absolute;background:linear-gradient(0deg,#4e5969 0,rgba(78,89,105,0) 100%);z-index:3;pointer-events:none}
.suggestions .media_result .data .info .plot.full{top:0;overflow:auto}
.suggestions .media_result .data{cursor:default}
.suggestions .media_result .options{left:100px}
.suggestions .media_result .options select[name=category],.suggestions .media_result .options select[name=profile],.suggestions .media_result .options select[name=title]{width:100%}
.suggestions .media_result .button{position:absolute;margin:2px 0 0;right:15px;bottom:15px}
.suggestions .media_result .thumbnail{width:100px}
.suggestions .media_result .actions{position:absolute;top:10px;right:10px;display:none;width:140px}
.suggestions .media_result:hover .actions{display:block}
.suggestions .media_result:hover h2 .title{opacity:0}
.suggestions .media_result .data.open .actions{display:none}
.suggestions .media_result .actions a{margin-left:10px;vertical-align:middle}
.add_new_category{padding:20px;display:block;text-align:center;font-size:20px}
.category{margin-bottom:20px;position:relative}
.category>.delete{position:absolute;padding:16px;right:0;cursor:pointer;opacity:.6;color:#fd5353}
@ -359,8 +335,7 @@
.category .formHint{opacity:.1}
.category:hover .formHint{opacity:1}
#category_ordering ul{float:left;margin:0;width:275px;padding:0}
#category_ordering li{cursor:-webkit-grab;cursor:grab;border-bottom:1px solid #eaeaea;padding:5px;list-style:none}
#category_ordering li:last-child{border:0}
#category_ordering li{cursor:-webkit-grab;cursor:grab;padding:5px;list-style:none}
#category_ordering li .check{margin:2px 10px 0 0;vertical-align:top}
#category_ordering li>span{display:inline-block;height:20px;vertical-align:top;line-height:20px}
#category_ordering li .handle{width:20px;float:right}
@ -388,7 +363,7 @@
.report_popup.report_popup .bug{width:80%;height:80%;max-height:800px;max-width:800px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column nowrap}
.report_popup.report_popup .bug textarea{display:block;width:100%;background:#FFF;padding:20px;overflow:auto;color:#666;height:70%;font-size:12px}
.do_report.do_report{z-index:10000;position:absolute;padding:10px;background:#ac0000;color:#FFF}
.add_new_profile{padding:20px;display:block;text-align:center;font-size:20px;border-bottom:1px solid #eaeaea}
.add_new_profile{padding:20px;display:block;text-align:center;font-size:20px}
.profile{margin-bottom:20px}
.profile .quality_label input{font-weight:700}
.profile .ctrlHolder .types{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:360px}
@ -405,9 +380,8 @@
.profile .ctrlHolder.wait_for.wait_for .advanced{display:none;color:#ac0000}
.show_advanced .profile .ctrlHolder.wait_for.wait_for .advanced{display:inline}
#profile_ordering ul{list-style:none;margin:0;width:275px;padding:0}
#profile_ordering li{border-bottom:1px solid #eaeaea;padding:5px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
#profile_ordering li{padding:5px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
#profile_ordering li:hover{background:#eaeaea}
#profile_ordering li:last-child{border:0}
#profile_ordering li input[type=checkbox]{margin:2px 10px 0 0;vertical-align:top}
#profile_ordering li>span{display:inline-block;height:20px;vertical-align:top;line-height:20px}
#profile_ordering li>span.profile_label{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto}
@ -431,7 +405,6 @@
.page.wizard .tab_wrapper .tabs{padding:0;margin:0 auto;display:block;height:100%;width:100%;max-width:960px}
.page.wizard .tabs li{display:inline-block;height:100%}
.page.wizard .tabs li a{padding:20px 10px;height:100%;display:block;color:#FFF;font-weight:400;border-bottom:4px solid transparent}
.page.wizard .tabs li:hover a{border-color:#047792}
.page.wizard .tabs li.done a{border-color:#04bce6}
.page.wizard .tab_wrapper .pointer{border-right:10px solid transparent;border-left:10px solid transparent;border-top:10px solid #5c697b;display:block;position:absolute;top:44px}
.page.wizard .tab_content{margin:20px 0 160px}
@ -447,7 +420,6 @@
.api_docs .api .params{background:#fafafa;width:100%}
.api_docs .api .params h3{clear:both;float:left;width:100px}
.api_docs .api .params td,.api_docs .api .params th{padding:3px 5px;border-bottom:1px solid #eee}
.api_docs .api .params tr:last-child td,.api_docs .api .params tr:last-child th{border:0}
.api_docs .api .params .param{vertical-align:top}
.api_docs .api .params .param th{text-align:left;width:100px}
.api_docs .api .params .param .type{font-style:italic;margin-right:10px;width:100px;color:#666}
@ -466,6 +438,13 @@
.api_docs .database table textarea{font-size:12px;width:100%;height:200px}
.api_docs .database table input[type=submit]{display:block}
.page.login,body{display:-webkit-flex;display:-ms-flexbox}
@font-face{font-family:icons;src:url(../fonts/icons.eot?74719538);src:url(../fonts/icons.eot?74719538#iefix)format("embedded-opentype"),url(../fonts/icons.woff?74719538)format("woff"),url(../fonts/icons.ttf?74719538)format("truetype"),url(../fonts/icons.svg?74719538#icons)format("svg");font-weight:400;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Light-webfont.eot);src:url(../fonts/OpenSans-Light-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Light-webfont.woff)format("woff"),url(../fonts/OpenSans-Light-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Light-webfont.svg#OpenSansRegular)format("svg");font-weight:200;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Regular-webfont.eot);src:url(../fonts/OpenSans-Regular-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Regular-webfont.woff)format("woff"),url(../fonts/OpenSans-Regular-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular)format("svg");font-weight:400;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Italic-webfont.eot);src:url(../fonts/OpenSans-Italic-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Italic-webfont.woff)format("woff"),url(../fonts/OpenSans-Italic-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic)format("svg");font-weight:400;font-style:italic}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Bold-webfont.eot);src:url(../fonts/OpenSans-Bold-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Bold-webfont.woff)format("woff"),url(../fonts/OpenSans-Bold-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Bold-webfont.svg#OpenSansBold)format("svg");font-weight:700;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-BoldItalic-webfont.eot);src:url(../fonts/OpenSans-BoldItalic-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-BoldItalic-webfont.woff)format("woff"),url(../fonts/OpenSans-BoldItalic-webfont.ttf)format("truetype"),url(../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic)format("svg");font-weight:700;font-style:italic}
@font-face{font-family:Lobster;src:url(../fonts/Lobster-webfont.eot);src:url(../fonts/Lobster-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/Lobster-webfont.woff2)format("woff2"),url(../fonts/Lobster-webfont.woff)format("woff"),url(../fonts/Lobster-webfont.ttf)format("truetype"),url(../fonts/Lobster-webfont.svg#lobster_14regular)format("svg");font-weight:400;font-style:normal}
.page.login{background:#FFF;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-size:1.25em}
.page.login h1{padding:0 0 10px;font-size:60px;font-family:Lobster;font-weight:400;color:#ac0000;text-align:center}
.page.login form{padding:0;width:300px}
@ -474,7 +453,7 @@
.page.login input[type=password],.page.login input[type=text]{width:100%!important}
.page.login .remember_me{font-size:15px;float:left;width:150px}
.page.login .button{float:right;margin:0;transition:none}
@font-face{font-family:icons;src:url(../fonts/icons.eot?74719542);src:url(../fonts/icons.eot?74719542#iefix) format("embedded-opentype"),url(../fonts/icons.woff?747195412) format("woff"),url(../fonts/icons.ttf?74719542) format("truetype"),url(../fonts/icons.svg?74719542#icons) format("svg");font-weight:400;font-style:normal}
@font-face{font-family:icons;src:url(../fonts/icons.eot?74719542);src:url(../fonts/icons.eot?74719542#iefix)format("embedded-opentype"),url(../fonts/icons.woff?747195412)format("woff"),url(../fonts/icons.ttf?74719542)format("truetype"),url(../fonts/icons.svg?74719542#icons)format("svg");font-weight:400;font-style:normal}
[class*=" icon-"]:before,[class^=icon-]:before{font-family:icons;font-style:normal;font-weight:400;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
.icon-left-arrow:before{content:'\e800'}
.icon-settings:before{content:'\e801'}
@ -505,12 +484,12 @@
.icon-star:before{content:'\e81a'}
.icon-star-empty:before{content:'\e81b'}
.icon-star-half:before{content:'\e81c'}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Light-webfont.eot);src:url(../fonts/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light-webfont.woff) format("woff"),url(../fonts/OpenSans-Light-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Light-webfont.svg#OpenSansRegular) format("svg");font-weight:200;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Regular-webfont.eot);src:url(../fonts/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Regular-webfont.woff) format("woff"),url(../fonts/OpenSans-Regular-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular) format("svg");font-weight:400;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Italic-webfont.eot);src:url(../fonts/OpenSans-Italic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Italic-webfont.woff) format("woff"),url(../fonts/OpenSans-Italic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic) format("svg");font-weight:400;font-style:italic}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Bold-webfont.eot);src:url(../fonts/OpenSans-Bold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Bold-webfont.woff) format("woff"),url(../fonts/OpenSans-Bold-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Bold-webfont.svg#OpenSansBold) format("svg");font-weight:700;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-BoldItalic-webfont.eot);src:url(../fonts/OpenSans-BoldItalic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-BoldItalic-webfont.woff) format("woff"),url(../fonts/OpenSans-BoldItalic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic) format("svg");font-weight:700;font-style:italic}
@font-face{font-family:Lobster;src:url(../fonts/Lobster-webfont.eot);src:url(../fonts/Lobster-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/Lobster-webfont.woff2) format("woff2"),url(../fonts/Lobster-webfont.woff) format("woff"),url(../fonts/Lobster-webfont.ttf) format("truetype"),url(../fonts/Lobster-webfont.svg#lobster_14regular) format("svg");font-weight:400;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Light-webfont.eot);src:url(../fonts/OpenSans-Light-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Light-webfont.woff)format("woff"),url(../fonts/OpenSans-Light-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Light-webfont.svg#OpenSansRegular)format("svg");font-weight:200;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Regular-webfont.eot);src:url(../fonts/OpenSans-Regular-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Regular-webfont.woff)format("woff"),url(../fonts/OpenSans-Regular-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular)format("svg");font-weight:400;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Italic-webfont.eot);src:url(../fonts/OpenSans-Italic-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Italic-webfont.woff)format("woff"),url(../fonts/OpenSans-Italic-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic)format("svg");font-weight:400;font-style:italic}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-Bold-webfont.eot);src:url(../fonts/OpenSans-Bold-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-Bold-webfont.woff)format("woff"),url(../fonts/OpenSans-Bold-webfont.ttf)format("truetype"),url(../fonts/OpenSans-Bold-webfont.svg#OpenSansBold)format("svg");font-weight:700;font-style:normal}
@font-face{font-family:OpenSans;src:url(../fonts/OpenSans-BoldItalic-webfont.eot);src:url(../fonts/OpenSans-BoldItalic-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/OpenSans-BoldItalic-webfont.woff)format("woff"),url(../fonts/OpenSans-BoldItalic-webfont.ttf)format("truetype"),url(../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic)format("svg");font-weight:700;font-style:italic}
@font-face{font-family:Lobster;src:url(../fonts/Lobster-webfont.eot);src:url(../fonts/Lobster-webfont.eot?#iefix)format("embedded-opentype"),url(../fonts/Lobster-webfont.woff2)format("woff2"),url(../fonts/Lobster-webfont.woff)format("woff"),url(../fonts/Lobster-webfont.ttf)format("truetype"),url(../fonts/Lobster-webfont.svg#lobster_14regular)format("svg");font-weight:400;font-style:normal}
*{margin:0;padding:0;box-sizing:border-box;text-rendering:optimizeSpeed}
body,html{font-size:14px;line-height:1.5;font-family:OpenSans,"Helvetica Neue",Helvetica,Arial,Geneva,sans-serif;font-weight:300;height:100%;margin:0;padding:0;background:#111;overflow:hidden}
body{display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap}
@ -518,8 +497,8 @@ a{display:inline-block;position:relative;overflow:hidden;text-decoration:none;cu
input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#FFF;border:1px solid #b7b7b7}
.button{color:#ac0000;font-weight:300;padding:5px;cursor:pointer;border:1px solid #ac0000;border-radius:3px;margin:0 5px;transition:all 150ms}
.button:hover{background:#ac0000;color:#FFF}
.ripple{position:absolute;height:10px;width:10px;border-radius:50%;background:#ac0000;-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1);opacity:.2;transition:all 1.5s ease}
.ripple.animate{-webkit-transform:translate(-50%,-50%) scale(100);transform:translate(-50%,-50%) scale(100);opacity:0}
.ripple{position:absolute;height:10px;width:10px;border-radius:50%;background:#ac0000;-webkit-transform:translate(-50%,-50%)scale(1);transform:translate(-50%,-50%)scale(1);opacity:.2;transition:all 1.5s ease}
.ripple.animate{-webkit-transform:translate(-50%,-50%)scale(100);transform:translate(-50%,-50%)scale(100);opacity:0}
.header{width:132px;min-width:132px;position:relative;z-index:100}
@media (max-width:480px){.header{width:44px;min-width:44px;z-index:21}
}
@ -597,7 +576,7 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.more_menu{line-height:1em}
.more_menu .button{font-size:24px;cursor:pointer}
.more_menu .wrapper{display:none;position:absolute;right:0;background:#ac0000;z-index:5000;border-radius:3px 0 0 3px;-webkit-transform-origin:80% 0;transform-origin:80% 0}
.more_menu .wrapper:before{-webkit-transform:rotate(45deg) translateY(-60%);transform:rotate(45deg) translateY(-60%);content:'';display:block;position:absolute;background:#ac0000;height:10px;width:10px;left:-9px;bottom:11px;z-index:1;opacity:1;border-radius:3px}
.more_menu .wrapper:before{-webkit-transform:rotate(45deg)translateY(-60%);transform:rotate(45deg)translateY(-60%);content:'';display:block;position:absolute;background:#ac0000;height:10px;width:10px;left:-9px;bottom:11px;z-index:1;opacity:1;border-radius:3px}
.mask,.messages{right:0;bottom:0}
.more_menu .wrapper ul{background:#FFF;position:relative;z-index:2;overflow:hidden;border-radius:3px 0 0 3px}
.more_menu .wrapper ul li{display:block;line-height:1em;border-top:1px solid #eaeaea}
@ -623,20 +602,20 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.mask .message,.mask .spinner{position:absolute;top:50%;left:50%}
.mask .message{color:#FFF;text-align:center;width:320px;margin:-49px 0 0 -160px;font-size:16px}
.mask .message h1{font-size:1.5em}
.mask .spinner{width:22px;height:22px;display:block;background:#fff;margin-top:-11px;margin-left:-11px;outline:transparent solid 1px;-webkit-animation:rotating 2.5s cubic-bezier(.9,0,.1,1) infinite normal;animation:rotating 2.5s cubic-bezier(.9,0,.1,1) infinite normal;-webkit-transform:scale(0);transform:scale(0)}
.mask .spinner{width:22px;height:22px;display:block;background:#fff;margin-top:-11px;margin-left:-11px;outline:transparent solid 1px;-webkit-animation:rotating 2.5s cubic-bezier(.9,0,.1,1)infinite normal;animation:rotating 2.5s cubic-bezier(.9,0,.1,1)infinite normal;-webkit-transform:scale(0);transform:scale(0)}
.page.settings.active,.table .item{display:-webkit-flex;display:-ms-flexbox}
.mask.with_message .spinner{margin-top:-88px}
.mask.show{pointer-events:auto;opacity:1}
.mask.show .spinner{-webkit-transform:scale(1);transform:scale(1)}
.mask.hide{opacity:0}
.mask.hide .spinner{-webkit-transform:scale(0);transform:scale(0)}
@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0) scale(1.6);transform:rotate(0) scale(1.6);border-radius:1px}
48%{-webkit-transform:rotate(360deg) scale(1);transform:rotate(360deg) scale(1);border-radius:50%}
100%{-webkit-transform:rotate(720deg) scale(1.6);transform:rotate(720deg) scale(1.6);border-radius:1px}
@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0)scale(1.6);transform:rotate(0)scale(1.6);border-radius:1px}
48%{-webkit-transform:rotate(360deg)scale(1);transform:rotate(360deg)scale(1);border-radius:50%}
100%{-webkit-transform:rotate(720deg)scale(1.6);transform:rotate(720deg)scale(1.6);border-radius:1px}
}
@keyframes rotating{0%{-webkit-transform:rotate(0) scale(1.6);transform:rotate(0) scale(1.6);border-radius:1px}
48%{-webkit-transform:rotate(360deg) scale(1);transform:rotate(360deg) scale(1);border-radius:50%}
100%{-webkit-transform:rotate(720deg) scale(1.6);transform:rotate(720deg) scale(1.6);border-radius:1px}
@keyframes rotating{0%{-webkit-transform:rotate(0)scale(1.6);transform:rotate(0)scale(1.6);border-radius:1px}
48%{-webkit-transform:rotate(360deg)scale(1);transform:rotate(360deg)scale(1);border-radius:50%}
100%{-webkit-transform:rotate(720deg)scale(1.6);transform:rotate(720deg)scale(1.6);border-radius:1px}
}
.table .head{font-weight:700}
.table .item{display:flex;border-bottom:1px solid rgba(0,0,0,.2)}
@ -667,7 +646,7 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
@media (max-width:480px){.page.settings fieldset h2{display:block}
.page.settings fieldset h2 .hint{margin:0;display:block}
}
.page.settings fieldset h2 .hint a{font-weight:400;color:#ac0000;text-decoration:underline}
.page.settings fieldset h2 .hint a{font-weight:400;color:#ac0000}
.page.settings fieldset .ctrlHolder{padding:6.67px 20px;border-bottom:1px solid #eaeaea;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-align-items:center;-ms-flex-align:center;align-items:center}
.page.settings fieldset .ctrlHolder:last-child{border-bottom:0}
.page.settings fieldset .ctrlHolder label{display:inline-block;min-width:150px}
@ -763,4 +742,31 @@ input,select,textarea{font-size:1em;font-weight:300;padding:6.67px;background:#F
.page.settings .directory_list .actions:last-child>span{padding:0 5px;text-shadow:none}
.page.settings .directory_list .actions:last-child>.clear{left:20px;position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);margin:0}
.page.settings .directory_list .actions:last-child>.cancel{color:rgba(0,0,0,.4)}
.page.settings .directory_list .actions:last-child>.save{margin-right:0}
.page.settings .directory_list .actions:last-child>.save{margin-right:0}
.uniForm legend{font-weight:700;font-size:100%;margin:0;padding:1.5em 0}
.uniForm .ctrlHolder{padding:1em;border-bottom:1px solid #efefef}
.uniForm .ctrlHolder.focused{background:#fffcdf}
.uniForm .buttonHolder{background:#efefef;text-align:right;margin:1.5em 0 0;padding:1.5em;border-radius:4px}
.uniForm .buttonHolder .primaryAction{padding:10px 22px;line-height:1;background:#254a86;border:1px solid #163362;font-size:12px;font-weight:700;color:#fff;border-radius:4px;box-shadow:1px 1px 0 #fff;text-shadow:-1px -1px 0 rgba(0,0,0,.25)}
.uniForm .buttonHolder .primaryAction:active{position:relative;top:1px}
.uniForm .secondaryAction{text-align:left}
.uniForm button.secondaryAction{background:0 0;border:none;color:#777;margin:1.25em 0 0;padding:0}
.uniForm .inlineLabels .label em,.uniForm .inlineLabels label em{font-style:normal;font-weight:700}
.uniForm label small{font-size:.75em;color:#777}
.uniForm .textInput,.uniForm textarea{padding:4px 2px;border:1px solid #aaa;background:#fff}
.uniForm textarea{height:12em}
.uniForm ul li label{font-size:.85em}
.uniForm .ctrlHolder .textInput:focus,.uniForm .ctrlHolder textarea:focus{outline:0}
.uniForm .formHint{font-size:.85em;color:#777}
.uniForm .inlineLabels .formHint{padding-top:.5em}
.uniForm .ctrlHolder.focused .formHint{color:#333}
.uniForm #errorMsg{background:#ffdfdf;border:1px solid #f3afb5;margin:0 0 1.5em;padding:0 1.5em;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px}
.uniForm #errorMsg ol{margin:0 0 1.5em;padding:0}
.uniForm #errorMsg ol li{margin:0 0 3px 1.5em;padding:7px;background:#f6bec1;position:relative;font-size:.85em;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px}
.uniForm .ctrlHolder.error,.uniForm .ctrlHolder.focused.error{background:#ffdfdf;border:1px solid #f3afb5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px}
.uniForm .ctrlHolder.error input.error,.uniForm .ctrlHolder.error select.error,.uniForm .ctrlHolder.error textarea.error{color:#af4c4c;margin:0 0 6px;padding:4px}
.uniForm #okMsg{background:#c8ffbf;border:1px solid #a2ef95;margin:0 0 1.5em;padding:0 1.5em;text-align:center;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px}
.uniForm #OKMsg p{margin:0}
.uniForm .col{margin-bottom:1.5em}
.uniForm .col.first{width:49%;float:left;clear:none}
.uniForm .col.last{width:49%;float:right;clear:none;margin-right:0}
Loading…
Cancel
Save