From 8bbe4b3908caaad500f009da5bca0fda0ad30b32 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sun, 19 Jul 2015 20:10:32 +0200 Subject: [PATCH] Charts listing on dashboard --- couchpotato/core/media/movie/_base/static/list.js | 2 +- .../core/media/movie/_base/static/movie.actions.js | 49 +++++++- .../core/media/movie/_base/static/movie.scss | 6 + couchpotato/core/media/movie/charts/main.py | 66 +++++++---- .../core/media/movie/charts/static/charts.js | 14 +-- couchpotato/core/media/movie/suggestion/main.py | 9 +- couchpotato/static/scripts/combined.base.min.js | 2 +- couchpotato/static/scripts/combined.plugins.min.js | 51 +++++++-- couchpotato/static/scripts/page/home.js | 2 +- couchpotato/static/style/combined.min.css | 124 +++++++++++---------- 10 files changed, 214 insertions(+), 111 deletions(-) diff --git a/couchpotato/core/media/movie/_base/static/list.js b/couchpotato/core/media/movie/_base/static/list.js index 68cfba4..eab834a 100644 --- a/couchpotato/core/media/movie/_base/static/list.js +++ b/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(){ diff --git a/couchpotato/core/media/movie/_base/static/movie.actions.js b/couchpotato/core/media/movie/_base/static/movie.actions.js index 265d682..3bd5392 100644 --- a/couchpotato/core/media/movie/_base/static/movie.actions.js +++ b/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, diff --git a/couchpotato/core/media/movie/_base/static/movie.scss b/couchpotato/core/media/movie/_base/static/movie.scss index be92895..52f6bf4 100644 --- a/couchpotato/core/media/movie/_base/static/movie.scss +++ b/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; + } } } diff --git a/couchpotato/core/media/movie/charts/main.py b/couchpotato/core/media/movie/charts/main.py index 5aa5679..e949a8a 100644 --- a/couchpotato/core/media/movie/charts/main.py +++ b/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 + } diff --git a/couchpotato/core/media/movie/charts/static/charts.js b/couchpotato/core/media/movie/charts/static/charts.js index 1036840..b011613 100644 --- a/couchpotato/core/media/movie/charts/static/charts.js +++ b/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': 'See source', - '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; } diff --git a/couchpotato/core/media/movie/suggestion/main.py b/couchpotato/core/media/movie/suggestion/main.py index bd16f1a..5cb68a3 100755 --- a/couchpotato/core/media/movie/suggestion/main.py +++ b/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') } diff --git a/couchpotato/static/scripts/combined.base.min.js b/couchpotato/static/scripts/combined.base.min.js index 2963332..7dd249b 100644 --- a/couchpotato/static/scripts/combined.base.min.js +++ b/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() { diff --git a/couchpotato/static/scripts/combined.plugins.min.js b/couchpotato/static/scripts/combined.plugins.min.js index 8946311..19adefd 100644 --- a/couchpotato/static/scripts/combined.plugins.min.js +++ b/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: 'See source', - 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; } diff --git a/couchpotato/static/scripts/page/home.js b/couchpotato/static/scripts/page/home.js index 59bbecf..d37cbc2 100644 --- a/couchpotato/static/scripts/page/home.js +++ b/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) ); diff --git a/couchpotato/static/style/combined.min.css b/couchpotato/static/style/combined.min.css index 406aa23..73cd80a 100644 --- a/couchpotato/static/style/combined.min.css +++ b/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} \ No newline at end of file +.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} \ No newline at end of file