159 changed files with 37872 additions and 19963 deletions
@ -0,0 +1,16 @@ |
|||
# http://editorconfig.org |
|||
root = true |
|||
|
|||
[*] |
|||
indent_style = tab |
|||
indent_size = 4 |
|||
end_of_line = lf |
|||
charset = utf-8 |
|||
trim_trailing_whitespace = true |
|||
insert_final_newline = true |
|||
|
|||
[*.py] |
|||
indent_style = space |
|||
|
|||
[*.md] |
|||
trim_trailing_whitespace = false |
@ -1,5 +1,8 @@ |
|||
*.pyc |
|||
/data/ |
|||
/_env/ |
|||
/_source/ |
|||
.project |
|||
.pydevproject |
|||
node_modules |
|||
.tmp |
|||
|
@ -0,0 +1,198 @@ |
|||
'use strict'; |
|||
|
|||
module.exports = function(grunt){ |
|||
require('jit-grunt')(grunt); |
|||
require('time-grunt')(grunt); |
|||
|
|||
grunt.loadNpmTasks('grunt-shell-spawn'); |
|||
|
|||
// Configurable paths
|
|||
var config = { |
|||
python: grunt.file.exists('./_env/bin/python') ? './_env/bin/python' : 'python', |
|||
tmp: '.tmp', |
|||
base: 'couchpotato', |
|||
css_dest: 'couchpotato/static/style/combined.min.css', |
|||
scripts_vendor_dest: 'couchpotato/static/scripts/combined.vendor.min.js', |
|||
scripts_base_dest: 'couchpotato/static/scripts/combined.base.min.js', |
|||
scripts_plugins_dest: 'couchpotato/static/scripts/combined.plugins.min.js' |
|||
}; |
|||
|
|||
var vendor_scripts_files = [ |
|||
'couchpotato/static/scripts/vendor/mootools.js', |
|||
'couchpotato/static/scripts/vendor/mootools_more.js', |
|||
'couchpotato/static/scripts/vendor/Array.stableSort.js', |
|||
'couchpotato/static/scripts/vendor/history.js', |
|||
'couchpotato/static/scripts/vendor/dynamics.js', |
|||
'couchpotato/static/scripts/vendor/fastclick.js' |
|||
]; |
|||
|
|||
var scripts_files = [ |
|||
'couchpotato/static/scripts/library/uniform.js', |
|||
'couchpotato/static/scripts/library/question.js', |
|||
'couchpotato/static/scripts/library/scrollspy.js', |
|||
'couchpotato/static/scripts/couchpotato.js', |
|||
'couchpotato/static/scripts/api.js', |
|||
'couchpotato/static/scripts/page.js', |
|||
'couchpotato/static/scripts/block.js', |
|||
'couchpotato/static/scripts/block/navigation.js', |
|||
'couchpotato/static/scripts/block/header.js', |
|||
'couchpotato/static/scripts/block/footer.js', |
|||
'couchpotato/static/scripts/block/menu.js', |
|||
'couchpotato/static/scripts/page/home.js', |
|||
'couchpotato/static/scripts/page/settings.js', |
|||
'couchpotato/static/scripts/page/about.js', |
|||
'couchpotato/static/scripts/page/login.js' |
|||
]; |
|||
|
|||
grunt.initConfig({ |
|||
|
|||
// Project settings
|
|||
config: config, |
|||
|
|||
// Make sure code styles are up to par and there are no obvious mistakes
|
|||
jshint: { |
|||
options: { |
|||
reporter: require('jshint-stylish'), |
|||
unused: false, |
|||
camelcase: false, |
|||
devel: true |
|||
}, |
|||
all: [ |
|||
'<%= config.base %>/{,**/}*.js', |
|||
'!<%= config.base %>/static/scripts/vendor/{,**/}*.js', |
|||
'!<%= config.base %>/static/scripts/combined.*.js' |
|||
] |
|||
}, |
|||
|
|||
// Compiles Sass to CSS and generates necessary files if requested
|
|||
sass: { |
|||
options: { |
|||
compass: true, |
|||
update: true, |
|||
sourcemap: 'none' |
|||
}, |
|||
server: { |
|||
files: [{ |
|||
expand: true, |
|||
cwd: '<%= config.base %>/', |
|||
src: ['**/*.scss'], |
|||
dest: '<%= config.tmp %>/styles/', |
|||
ext: '.css' |
|||
}] |
|||
} |
|||
}, |
|||
|
|||
// Empties folders to start fresh
|
|||
clean: { |
|||
server: '.tmp' |
|||
}, |
|||
|
|||
// Add vendor prefixed styles
|
|||
autoprefixer: { |
|||
options: { |
|||
browsers: ['last 2 versions'], |
|||
remove: false, |
|||
cascade: false |
|||
}, |
|||
dist: { |
|||
files: [{ |
|||
expand: true, |
|||
cwd: '<%= config.tmp %>/styles/', |
|||
src: '{,**/}*.css', |
|||
dest: '<%= config.tmp %>/styles/' |
|||
}] |
|||
} |
|||
}, |
|||
|
|||
cssmin: { |
|||
dist: { |
|||
options: { |
|||
keepBreaks: true |
|||
}, |
|||
files: { |
|||
'<%= config.css_dest %>': ['<%= config.tmp %>/styles/**/*.css'] |
|||
} |
|||
} |
|||
}, |
|||
|
|||
uglify: { |
|||
options: { |
|||
mangle: false, |
|||
compress: false, |
|||
beautify: true, |
|||
screwIE8: true |
|||
}, |
|||
vendor: { |
|||
files: { |
|||
'<%= config.scripts_vendor_dest %>': vendor_scripts_files |
|||
} |
|||
}, |
|||
base: { |
|||
files: { |
|||
'<%= config.scripts_base_dest %>': scripts_files |
|||
} |
|||
}, |
|||
plugins: { |
|||
files: { |
|||
'<%= config.scripts_plugins_dest %>': ['<%= config.base %>/core/**/*.js'] |
|||
} |
|||
} |
|||
}, |
|||
|
|||
shell: { |
|||
runCouchPotato: { |
|||
command: '<%= config.python %> CouchPotato.py', |
|||
options: { |
|||
stdout: true, |
|||
stderr: true |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// COOL TASKS ==============================================================
|
|||
watch: { |
|||
scss: { |
|||
files: ['<%= config.base %>/**/*.{scss,sass}'], |
|||
tasks: ['sass:server', 'autoprefixer', 'cssmin'] |
|||
}, |
|||
js: { |
|||
files: [ |
|||
'<%= config.base %>/**/*.js', |
|||
'!<%= config.base %>/static/scripts/combined.*.js' |
|||
], |
|||
tasks: ['uglify:base', 'uglify:plugins', 'jshint'] |
|||
}, |
|||
livereload: { |
|||
options: { |
|||
livereload: 35729 |
|||
}, |
|||
files: [ |
|||
'<%= config.css_dest %>', |
|||
'<%= config.scripts_vendor_dest %>', |
|||
'<%= config.scripts_base_dest %>', |
|||
'<%= config.scripts_plugins_dest %>' |
|||
] |
|||
} |
|||
}, |
|||
|
|||
concurrent: { |
|||
options: { |
|||
logConcurrentOutput: true |
|||
}, |
|||
tasks: ['shell:runCouchPotato', 'watch'] |
|||
} |
|||
|
|||
}); |
|||
|
|||
grunt.registerTask('default', [ |
|||
'clean:server', |
|||
'sass:server', |
|||
'autoprefixer', |
|||
'cssmin', |
|||
'uglify:vendor', |
|||
'uglify:base', |
|||
'uglify:plugins', |
|||
'concurrent' |
|||
]); |
|||
|
|||
}; |
@ -0,0 +1,44 @@ |
|||
# First, require any additional compass plugins installed on your system. |
|||
# require 'zen-grids' |
|||
# require 'susy' |
|||
# require 'breakpoint' |
|||
|
|||
|
|||
# Toggle this between :development and :production when deploying the CSS to the |
|||
# live server. Development mode will retain comments and spacing from the |
|||
# original Sass source and adds line numbering comments for easier debugging. |
|||
environment = :development |
|||
# environment = :development |
|||
|
|||
# In development, we can turn on the FireSass-compatible debug_info. |
|||
firesass = false |
|||
# firesass = true |
|||
|
|||
|
|||
# Location of the your project's resources. |
|||
|
|||
|
|||
# Set this to the root of your project. All resource locations above are |
|||
# considered to be relative to this path. |
|||
http_path = "/" |
|||
|
|||
# To use relative paths to assets in your compiled CSS files, set this to true. |
|||
# relative_assets = true |
|||
|
|||
|
|||
## |
|||
## You probably don't need to edit anything below this. |
|||
## |
|||
sass_dir = "./couchpotato/static/style" |
|||
css_dir = "./couchpotato/static/style" |
|||
|
|||
# You can select your preferred output style here (can be overridden via the command line): |
|||
# output_style = :expanded or :nested or :compact or :compressed |
|||
output_style = (environment == :development) ? :expanded : :compressed |
|||
|
|||
# To disable debugging comments that display the original location of your selectors. Uncomment: |
|||
# line_comments = false |
|||
|
|||
# Pass options to sass. For development, we turn on the FireSass-compatible |
|||
# debug_info if the firesass config variable above is true. |
|||
sass_options = (environment == :development && firesass == true) ? {:debug_info => true} : {} |
@ -0,0 +1,131 @@ |
|||
import re |
|||
import json |
|||
import traceback |
|||
|
|||
from couchpotato.core.helpers.variable import tryInt, getIdentifier |
|||
from couchpotato.core.logger import CPLog |
|||
from couchpotato.core.media._base.providers.torrent.base import TorrentProvider |
|||
|
|||
|
|||
log = CPLog(__name__) |
|||
|
|||
|
|||
class Base(TorrentProvider): |
|||
|
|||
urls = { |
|||
'test': 'https://hd4free.xyz/', |
|||
'detail': 'https://hd4free.xyz/details.php?id=%s', |
|||
'search': 'https://hd4free.xyz/searchapi.php?apikey=%s&username=%s&imdbid=%s&internal=%s', |
|||
'download': 'https://hd4free.xyz/download.php?torrent=%s&torrent_pass=%s', |
|||
} |
|||
|
|||
http_time_between_calls = 1 # Seconds |
|||
|
|||
def _search(self, movie, quality, results): |
|||
data = self.getJsonData(self.urls['search'] % (self.conf('apikey'), self.conf('username'), getIdentifier(movie), self.conf('internal_only'))) |
|||
|
|||
if data: |
|||
try: |
|||
#for result in data[]: |
|||
for key, result in data.iteritems(): |
|||
if tryInt(result['total_results']) == 0: |
|||
return |
|||
torrentscore = self.conf('extra_score') |
|||
releasegroup = result['releasegroup'] |
|||
resolution = result['resolution'] |
|||
encoding = result['encoding'] |
|||
freeleech = tryInt(result['freeleech']) |
|||
seeders = tryInt(result['seeders']) |
|||
torrent_desc = '/ %s / %s / %s / %s seeders' % (releasegroup, resolution, encoding, seeders) |
|||
|
|||
if freeleech > 0 and self.conf('prefer_internal'): |
|||
torrent_desc += '/ Internal' |
|||
torrentscore += 200 |
|||
|
|||
if seeders == 0: |
|||
torrentscore = 0 |
|||
|
|||
name = result['release_name'] |
|||
year = tryInt(result['year']) |
|||
|
|||
results.append({ |
|||
'id': tryInt(result['torrentid']), |
|||
'name': re.sub('[^A-Za-z0-9\-_ \(\).]+', '', '%s (%s) %s' % (name, year, torrent_desc)), |
|||
'url': self.urls['download'] % (result['torrentid'], result['torrentpass']), |
|||
'detail_url': self.urls['detail'] % result['torrentid'], |
|||
'size': tryInt(result['size']), |
|||
'seeders': tryInt(result['seeders']), |
|||
'leechers': tryInt(result['leechers']), |
|||
'age': tryInt(result['age']), |
|||
'score': torrentscore |
|||
}) |
|||
except: |
|||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc())) |
|||
config = [{ |
|||
'name': 'hd4free', |
|||
'groups': [ |
|||
{ |
|||
'tab': 'searcher', |
|||
'list': 'torrent_providers', |
|||
'name': 'HD4Free', |
|||
'wizard': True, |
|||
'description': '<a href="https://hd4free.xyz">HD4Free</a>', |
|||
'icon': 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABX1BMVEUF6nsH33cJ03EJ1XIJ1nMKzXIKz28Lym4MxGsMxWsMx2wNvmgNv2kNwGkNwWwOuGgOuWYOuWcOumcOu2cOvmgPtWQPtmUPt2UPt2YQr2IQsGIQsGMQsmMQs2QRqmARq2ARrmERrmISpV4SpmASp14SqF8ToFsToFwToVwTo10TpV0UnFoUn1sVllcVmFgWkFUWklYXjVQXjlMXkFUYh1EYilIYi1MZhlEafk0af04agE4agU4beEobeUsbe0wcdUkeaUQebUYfZEMfZ0QgX0AgYEAgYUEhWj4iVz0iWD0jTzkkSzcmQTMmQzQnPTInPjInPzIoNy8oOC8oODAoOTAoOjApMi0pNC4pNS4qLCoqLSsqLisqMCwrJygrKCgrKCkrKSkrKikrKiorKyosIyYsIycsJCcsJScsJigtHyUuGCIuGiMuGyMuHCMuHCQvEyAvFSEvFiEvFyE0ABU0ABY5lYz4AAAA3ElEQVR4AWNIQAMMiYmJCYkIkMCQnpKWkZ4KBGlARlpaLEOor194kI+Pj6+PT0CET0AYg46Alr22NDeHkBinnq6SkitDrolDgYtaapajdpGppoFfGkMhv2GxE0uuPwNfsk6mhHMOQ54isxmbUJKCtWx+tIZQcDpDtqSol7qIMqsRu3dIhJxxFkOBoF2JG5O7lSqjh5S/tkkWQ5SBTbqnfkymv2WGLa95YCSDhZiMvKIwj4GJCpesuDivK0N6VFRUYlRyfHJUchQQJDMkxsfHJcTHAxEIxMVj+BZDAACjwkqhYgsTAAAAAABJRU5ErkJggg==', |
|||
'options': [ |
|||
{ |
|||
'name': 'enabled', |
|||
'type': 'enabler', |
|||
'default': False, |
|||
}, |
|||
{ |
|||
'name': 'username', |
|||
'default': '', |
|||
'description': 'Enter your site username.', |
|||
}, |
|||
{ |
|||
'name': 'apikey', |
|||
'default': '', |
|||
'label': 'API Key', |
|||
'description': 'Enter your site api key. This can be find on <a href="https://hd4free.xyz/usercp.php?action=security">Profile Security</a>', |
|||
}, |
|||
{ |
|||
'name': 'seed_ratio', |
|||
'label': 'Seed ratio', |
|||
'type': 'float', |
|||
'default': 0, |
|||
'description': 'Will not be (re)moved until this seed ratio is met. HD4Free minimum is 1:1.', |
|||
}, |
|||
{ |
|||
'name': 'seed_time', |
|||
'label': 'Seed time', |
|||
'type': 'int', |
|||
'default': 0, |
|||
'description': 'Will not be (re)moved until this seed time (in hours) is met. HD4Free minimum is 72 hours.', |
|||
}, |
|||
{ |
|||
'name': 'prefer_internal', |
|||
'advanced': True, |
|||
'type': 'bool', |
|||
'default': 1, |
|||
'description': 'Favors internal releases over non-internal releases.', |
|||
}, |
|||
{ |
|||
'name': 'internal_only', |
|||
'advanced': True, |
|||
'label': 'Internal Only', |
|||
'type': 'bool', |
|||
'default': False, |
|||
'description': 'Only download releases marked as HD4Free internal', |
|||
}, |
|||
{ |
|||
'name': 'extra_score', |
|||
'advanced': True, |
|||
'label': 'Extra Score', |
|||
'type': 'int', |
|||
'default': 0, |
|||
'description': 'Starting score for each release found via this provider.', |
|||
} |
|||
], |
|||
}, |
|||
], |
|||
}] |
@ -1,277 +0,0 @@ |
|||
.search_form { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
position: absolute; |
|||
right: 105px; |
|||
top: 0; |
|||
text-align: right; |
|||
height: 100%; |
|||
transition: all .4s cubic-bezier(0.9,0,0.1,1); |
|||
z-index: 20; |
|||
border: 0 solid transparent; |
|||
border-bottom-width: 4px; |
|||
} |
|||
.search_form:hover { |
|||
border-color: #047792; |
|||
} |
|||
|
|||
@media all and (max-width: 480px) { |
|||
.search_form { |
|||
right: 44px; |
|||
} |
|||
} |
|||
|
|||
.search_form.focused, |
|||
.search_form.shown { |
|||
border-color: #04bce6; |
|||
} |
|||
|
|||
.search_form .input { |
|||
height: 100%; |
|||
overflow: hidden; |
|||
width: 45px; |
|||
transition: all .4s cubic-bezier(0.9,0,0.1,1); |
|||
} |
|||
|
|||
.search_form.focused .input, |
|||
.search_form.shown .input { |
|||
width: 380px; |
|||
background: #4e5969; |
|||
} |
|||
|
|||
.search_form .input input { |
|||
border-radius: 0; |
|||
display: block; |
|||
border: 0; |
|||
background: none; |
|||
color: #FFF; |
|||
font-size: 25px; |
|||
height: 100%; |
|||
width: 100%; |
|||
opacity: 0; |
|||
padding: 0 40px 0 10px; |
|||
transition: all .4s ease-in-out .2s; |
|||
} |
|||
.search_form.focused .input input, |
|||
.search_form.shown .input input { |
|||
opacity: 1; |
|||
} |
|||
|
|||
.search_form input::-ms-clear { |
|||
width : 0; |
|||
height: 0; |
|||
} |
|||
|
|||
@media all and (max-width: 480px) { |
|||
.search_form .input input { |
|||
font-size: 15px; |
|||
} |
|||
|
|||
.search_form.focused .input, |
|||
.search_form.shown .input { |
|||
width: 277px; |
|||
} |
|||
} |
|||
|
|||
.search_form .input a { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
width: 44px; |
|||
height: 100%; |
|||
cursor: pointer; |
|||
vertical-align: middle; |
|||
text-align: center; |
|||
line-height: 66px; |
|||
font-size: 15px; |
|||
color: #FFF; |
|||
} |
|||
|
|||
.search_form .input a:after { |
|||
content: "\e03e"; |
|||
} |
|||
|
|||
.search_form.shown.filled .input a:after { |
|||
content: "\e04e"; |
|||
} |
|||
|
|||
@media all and (max-width: 480px) { |
|||
.search_form .input a { |
|||
line-height: 44px; |
|||
} |
|||
} |
|||
|
|||
.search_form .results_container { |
|||
text-align: left; |
|||
position: absolute; |
|||
background: #5c697b; |
|||
margin: 4px 0 0; |
|||
width: 470px; |
|||
min-height: 50px; |
|||
box-shadow: 0 20px 20px -10px rgba(0,0,0,0.55); |
|||
display: none; |
|||
} |
|||
@media all and (max-width: 480px) { |
|||
.search_form .results_container { |
|||
width: 320px; |
|||
} |
|||
} |
|||
.search_form.focused.filled .results_container, |
|||
.search_form.shown.filled .results_container { |
|||
display: block; |
|||
} |
|||
|
|||
.search_form .results { |
|||
max-height: 570px; |
|||
overflow-x: hidden; |
|||
} |
|||
|
|||
.media_result { |
|||
overflow: hidden; |
|||
height: 50px; |
|||
position: relative; |
|||
} |
|||
|
|||
.media_result .options { |
|||
position: absolute; |
|||
height: 100%; |
|||
top: 0; |
|||
left: 30px; |
|||
right: 0; |
|||
padding: 13px; |
|||
border: 1px solid transparent; |
|||
border-width: 1px 0; |
|||
border-radius: 0; |
|||
box-shadow: inset 0 1px 8px rgba(0,0,0,0.25); |
|||
} |
|||
.media_result .options > .in_library_wanted { |
|||
margin-top: -7px; |
|||
} |
|||
|
|||
.media_result .options > div { |
|||
border: 0; |
|||
} |
|||
|
|||
.media_result .options .thumbnail { |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.media_result .options select { |
|||
vertical-align: middle; |
|||
display: inline-block; |
|||
margin-right: 10px; |
|||
} |
|||
.media_result .options select[name=title] { width: 170px; } |
|||
.media_result .options select[name=profile] { width: 90px; } |
|||
.media_result .options select[name=category] { width: 80px; } |
|||
|
|||
@media all and (max-width: 480px) { |
|||
|
|||
.media_result .options select[name=title] { width: 90px; } |
|||
.media_result .options select[name=profile] { width: 50px; } |
|||
.media_result .options select[name=category] { width: 50px; } |
|||
|
|||
} |
|||
|
|||
.media_result .options .button { |
|||
vertical-align: middle; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.media_result .options .message { |
|||
height: 100%; |
|||
font-size: 20px; |
|||
color: #fff; |
|||
line-height: 20px; |
|||
} |
|||
|
|||
.media_result .data { |
|||
position: absolute; |
|||
height: 100%; |
|||
top: 0; |
|||
left: 30px; |
|||
right: 0; |
|||
background: #5c697b; |
|||
cursor: pointer; |
|||
border-top: 1px solid rgba(255,255,255, 0.08); |
|||
transition: all .4s cubic-bezier(0.9,0,0.1,1); |
|||
} |
|||
.media_result .data.open { |
|||
left: 100% !important; |
|||
} |
|||
|
|||
.media_result:last-child .data { border-bottom: 0; } |
|||
|
|||
.media_result .in_wanted, .media_result .in_library { |
|||
position: absolute; |
|||
bottom: 2px; |
|||
left: 14px; |
|||
font-size: 11px; |
|||
} |
|||
|
|||
.media_result .thumbnail { |
|||
width: 34px; |
|||
min-height: 100%; |
|||
display: block; |
|||
margin: 0; |
|||
vertical-align: top; |
|||
} |
|||
|
|||
.media_result .info { |
|||
position: absolute; |
|||
top: 20%; |
|||
left: 15px; |
|||
right: 7px; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.media_result .info h2 { |
|||
margin: 0; |
|||
font-weight: normal; |
|||
font-size: 20px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.search_form .info h2 { |
|||
position: absolute; |
|||
width: 100%; |
|||
} |
|||
|
|||
.media_result .info h2 .title { |
|||
display: block; |
|||
margin: 0; |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.search_form .info h2 .title { |
|||
position: absolute; |
|||
width: 88%; |
|||
} |
|||
|
|||
.media_result .info h2 .year { |
|||
padding: 0 5px; |
|||
text-align: center; |
|||
position: absolute; |
|||
width: 12%; |
|||
right: 0; |
|||
} |
|||
|
|||
@media all and (max-width: 480px) { |
|||
|
|||
.search_form .info h2 .year { |
|||
font-size: 12px; |
|||
margin-top: 7px; |
|||
} |
|||
|
|||
} |
|||
|
|||
.search_form .mask, |
|||
.media_result .mask { |
|||
position: absolute; |
|||
height: 100%; |
|||
width: 100%; |
|||
left: 0; |
|||
top: 0; |
|||
} |
@ -0,0 +1,503 @@ |
|||
@import "_mixins"; |
|||
|
|||
.search_form { |
|||
display: inline-block; |
|||
z-index: 11; |
|||
width: 44px; |
|||
position: relative; |
|||
|
|||
* { |
|||
transform: translateZ(0); |
|||
} |
|||
|
|||
.icon-search { |
|||
position: absolute; |
|||
z-index: 2; |
|||
top: 50%; |
|||
left: 0; |
|||
height: 100%; |
|||
text-align: center; |
|||
color: #FFF; |
|||
font-size: 20px; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
.wrapper { |
|||
position: absolute; |
|||
left: 44px; |
|||
bottom: 0; |
|||
background: $primary_color; |
|||
border-radius: $border_radius 0 0 $border_radius; |
|||
display: none; |
|||
box-shadow: 0 0 15px 2px rgba(0,0,0,.15); |
|||
|
|||
&:before { |
|||
transform: rotate(45deg); |
|||
content: ''; |
|||
display: block; |
|||
position: absolute; |
|||
height: 10px; |
|||
width: 10px; |
|||
background: $primary_color; |
|||
left: -6px; |
|||
bottom: 16px; |
|||
z-index: 1; |
|||
} |
|||
} |
|||
|
|||
.input { |
|||
background: $background_color; |
|||
border-radius: $border_radius 0 0 $border_radius; |
|||
position: relative; |
|||
left: 4px; |
|||
height: 44px; |
|||
overflow: hidden; |
|||
width: 100%; |
|||
|
|||
input { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
height: 100%; |
|||
width: 100%; |
|||
z-index: 1; |
|||
|
|||
&::-ms-clear { |
|||
width : 0; |
|||
height: 0; |
|||
} |
|||
|
|||
&:focus { |
|||
background: rgba($theme_off, .2); |
|||
|
|||
&::-webkit-input-placeholder { |
|||
color: $text_color; |
|||
opacity: .7; |
|||
} |
|||
&::-moz-placeholder { |
|||
color: $text_color; |
|||
opacity: .7; |
|||
} |
|||
&:-ms-input-placeholder { |
|||
color: $text_color; |
|||
opacity: .7; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
&.filled { |
|||
&.focused .icon-search:before, |
|||
.page.home & .icon-search:before { |
|||
content: '\e80e'; |
|||
} |
|||
|
|||
.input input { |
|||
background: rgba($theme_off, .4); |
|||
} |
|||
} |
|||
|
|||
&.focused, |
|||
&.shown, |
|||
.page.home & { |
|||
border-color: #04bce6; |
|||
|
|||
.wrapper { |
|||
display: block; |
|||
width: 380px; |
|||
transform-origin: 0 90%; |
|||
|
|||
@include media-phablet { |
|||
width: 260px; |
|||
} |
|||
} |
|||
|
|||
.input { |
|||
|
|||
input { |
|||
opacity: 1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.results_container { |
|||
min-height: 50px; |
|||
text-align: left; |
|||
position: relative; |
|||
left: 4px; |
|||
display: none; |
|||
background: $background_color; |
|||
border-radius: $border_radius 0 0 0; |
|||
overflow: hidden; |
|||
|
|||
.results { |
|||
max-height: 280px; |
|||
overflow-x: hidden; |
|||
|
|||
.media_result { |
|||
overflow: hidden; |
|||
height: 50px; |
|||
position: relative; |
|||
|
|||
@include media-phablet { |
|||
font-size: 12px; |
|||
} |
|||
|
|||
.options { |
|||
position: absolute; |
|||
height: 100%; |
|||
top: 0; |
|||
left: 30px; |
|||
right: 0; |
|||
background: rgba(0,0,0,.3); |
|||
display: flex; |
|||
align-items: center; |
|||
|
|||
@include media-phablet { |
|||
left: 0; |
|||
} |
|||
|
|||
> .in_library_wanted { |
|||
margin-top: -7px; |
|||
} |
|||
|
|||
> div { |
|||
border: 0; |
|||
display: flex; |
|||
padding: 10px; |
|||
align-items: stretch; |
|||
justify-content: space-between; |
|||
|
|||
@include media-phablet { |
|||
padding: 3px; |
|||
} |
|||
} |
|||
|
|||
select { |
|||
display: block; |
|||
height: 100%; |
|||
width: 100%; |
|||
|
|||
@include media-phablet { |
|||
min-width: 0; |
|||
margin-right: 2px; |
|||
} |
|||
} |
|||
|
|||
.title { |
|||
margin-right: 5px; |
|||
width: 210px; |
|||
|
|||
@include media-phablet { |
|||
width: 140px; |
|||
margin-right: 2px; |
|||
} |
|||
} |
|||
|
|||
.profile, .category { |
|||
margin: 0 5px 0 0; |
|||
|
|||
@include media-phablet { |
|||
margin-right: 2px; |
|||
} |
|||
} |
|||
|
|||
.add { |
|||
width: 42px; |
|||
flex: 1 auto; |
|||
|
|||
a { |
|||
color: #FFF; |
|||
} |
|||
} |
|||
|
|||
.button { |
|||
display: block; |
|||
background: $primary_color; |
|||
text-align: center; |
|||
margin: 0; |
|||
} |
|||
|
|||
.message { |
|||
font-size: 20px; |
|||
color: #fff; |
|||
} |
|||
|
|||
} |
|||
|
|||
.thumbnail { |
|||
width: 30px; |
|||
min-height: 100%; |
|||
display: block; |
|||
margin: 0; |
|||
vertical-align: top; |
|||
|
|||
@include media-phablet { |
|||
display: none; |
|||
} |
|||
} |
|||
|
|||
.data { |
|||
position: absolute; |
|||
height: 100%; |
|||
top: 0; |
|||
left: 30px; |
|||
right: 0; |
|||
cursor: pointer; |
|||
border-top: 1px solid rgba(255,255,255, 0.08); |
|||
transition: all .4s cubic-bezier(0.9,0,0.1,1); |
|||
transform: translateX(0); |
|||
background: $background_color; |
|||
|
|||
@include media-phablet { |
|||
left: 0; |
|||
} |
|||
|
|||
&:hover { |
|||
transform: translateX(2%); |
|||
} |
|||
|
|||
&.open { |
|||
transform: translateX(100%); |
|||
} |
|||
|
|||
.info { |
|||
position: absolute; |
|||
top: 20%; |
|||
left: 15px; |
|||
right: 7px; |
|||
vertical-align: middle; |
|||
|
|||
h2 { |
|||
margin: 0; |
|||
font-weight: 300; |
|||
font-size: 1.25em; |
|||
padding: 0; |
|||
position: absolute; |
|||
width: 100%; |
|||
display: flex; |
|||
|
|||
.title { |
|||
display: inline-block; |
|||
margin: 0; |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
flex: 1 auto; |
|||
} |
|||
|
|||
.year { |
|||
opacity: .4; |
|||
padding: 0 5px; |
|||
width: auto; |
|||
display: none; |
|||
} |
|||
|
|||
.in_wanted, |
|||
.in_library { |
|||
position: absolute; |
|||
top: 15px; |
|||
left: 0; |
|||
font-size: 11px; |
|||
color: $primary_color; |
|||
} |
|||
|
|||
&.in_library_wanted { |
|||
.title { |
|||
margin-top: -7px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
&:hover .info h2 .year { |
|||
display: inline-block; |
|||
} |
|||
|
|||
&:last-child .data { |
|||
border-bottom: 0; |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
&.focused.filled, |
|||
&.shown.filled { |
|||
.results_container { |
|||
display: block; |
|||
} |
|||
|
|||
.input { |
|||
border-radius: 0 0 0 $border_radius; |
|||
} |
|||
} |
|||
|
|||
.page.home & { |
|||
$input_height: 66px; |
|||
$input_height_mobile: 44px; |
|||
|
|||
display: block; |
|||
padding: $padding; |
|||
width: 100%; |
|||
max-width: 500px; |
|||
margin: 0 auto; |
|||
height: $input_height + 2*$padding; |
|||
position: relative; |
|||
margin-top: $padding; |
|||
|
|||
@include media-phablet { |
|||
margin-top: $padding/2; |
|||
height: $input_height_mobile + $padding; |
|||
} |
|||
|
|||
.icon-search { |
|||
display: block; |
|||
color: #000; |
|||
right: $padding; |
|||
top: $padding; |
|||
width: $input_height; |
|||
height: $input_height; |
|||
line-height: $input_height; |
|||
left: auto; |
|||
transform: none; |
|||
font-size: 2em; |
|||
opacity: .5; |
|||
|
|||
@include media-phablet { |
|||
right: $padding/2; |
|||
width: $input_height_mobile; |
|||
height: $input_height_mobile; |
|||
line-height: $input_height_mobile; |
|||
right: $padding/2; |
|||
top: $padding/2; |
|||
font-size: 1.5em; |
|||
} |
|||
} |
|||
|
|||
.wrapper { |
|||
border-radius: 0; |
|||
box-shadow: none; |
|||
bottom: auto; |
|||
top: $padding; |
|||
left: $padding; |
|||
right: $padding; |
|||
position: absolute; |
|||
width: auto; |
|||
|
|||
@include media-phablet { |
|||
right: $padding/2; |
|||
top: $padding/2; |
|||
left: $padding/2; |
|||
} |
|||
|
|||
&:before { |
|||
display: none; |
|||
} |
|||
|
|||
.input { |
|||
border-radius: 0; |
|||
left: 0; |
|||
position: absolute; |
|||
top: 0; |
|||
height: $input_height; |
|||
|
|||
@include media-phablet { |
|||
height: $input_height_mobile; |
|||
} |
|||
|
|||
input { |
|||
box-shadow: 0; |
|||
font-size: 2em; |
|||
font-weight: 400; |
|||
|
|||
@include media-phablet { |
|||
font-size: 1em; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.results_container { |
|||
min-height: $input_height; |
|||
position: absolute; |
|||
top: $input_height; |
|||
left: 0; |
|||
right: 0; |
|||
border: 1px solid #b7b7b7; |
|||
border-top: 0; |
|||
|
|||
@include media-phablet { |
|||
top: $input_height_mobile; |
|||
min-height: $input_height_mobile; |
|||
} |
|||
|
|||
|
|||
@include media-phablet-and-up { |
|||
.results { |
|||
max-height: 400px; |
|||
|
|||
.media_result { |
|||
height: $input_height; |
|||
|
|||
|
|||
@include media-phablet { |
|||
height: $input_height_mobile; |
|||
} |
|||
|
|||
.thumbnail { |
|||
width: 40px; |
|||
} |
|||
|
|||
.options { |
|||
left: 40px; |
|||
|
|||
.title { |
|||
margin-right: 5px; |
|||
width: 320px; |
|||
|
|||
@include media-phablet { |
|||
width: 140px; |
|||
margin-right: 2px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.data { |
|||
left: 40px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
@include media-phablet { |
|||
.results { |
|||
.media_result { |
|||
height: $input_height_mobile; |
|||
|
|||
.options { |
|||
|
|||
.title { |
|||
|
|||
width: 140px; |
|||
margin-right: 2px; |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
.big_search { |
|||
background: $theme_off; |
|||
} |
@ -0,0 +1,154 @@ |
|||
var MovieDetails = new Class({ |
|||
|
|||
Extends: BlockBase, |
|||
|
|||
sections: null, |
|||
buttons: null, |
|||
|
|||
initialize: function(parent, options){ |
|||
var self = this; |
|||
|
|||
self.sections = {}; |
|||
|
|||
var category = parent.get('category'), |
|||
profile = parent.profile; |
|||
|
|||
self.el = new Element('div',{ |
|||
'class': 'page active movie_details level_' + (options.level || 0) |
|||
}).adopt( |
|||
self.overlay = new Element('div.overlay', { |
|||
'events': { |
|||
'click': self.close.bind(self) |
|||
} |
|||
}).grab( |
|||
new Element('a.close.icon-left-arrow') |
|||
), |
|||
self.content = new Element('div.scroll_content').grab( |
|||
new Element('div.head').adopt( |
|||
new Element('h1').grab( |
|||
self.title_dropdown = new BlockMenu(self, { |
|||
'class': 'title', |
|||
'button_text': parent.getTitle() + (parent.get('year') ? ' (' + parent.get('year') + ')' : ''), |
|||
'button_class': 'icon-dropdown' |
|||
}) |
|||
), |
|||
self.buttons = new Element('div.buttons') |
|||
) |
|||
) |
|||
); |
|||
|
|||
self.addSection('description', new Element('div', { |
|||
'text': parent.get('plot') |
|||
})); |
|||
|
|||
|
|||
// Title dropdown
|
|||
var titles = parent.get('info').titles; |
|||
$(self.title_dropdown).addEvents({ |
|||
'click:relay(li a)': function(e, el){ |
|||
(e).stopPropagation(); |
|||
|
|||
// Update category
|
|||
Api.request('movie.edit', { |
|||
'data': { |
|||
'id': parent.get('_id'), |
|||
'default_title': el.get('text') |
|||
} |
|||
}); |
|||
|
|||
$(self.title_dropdown).getElements('.icon-ok').removeClass('icon-ok'); |
|||
el.addClass('icon-ok'); |
|||
|
|||
self.title_dropdown.button.set('text', el.get('text') + (parent.get('year') ? ' (' + parent.get('year') + ')' : '')); |
|||
|
|||
} |
|||
}); |
|||
|
|||
titles.each(function(t){ |
|||
self.title_dropdown.addLink(new Element('a', { |
|||
'text': t, |
|||
'class': parent.get('title') == t ? 'icon-ok' : '' |
|||
})); |
|||
}); |
|||
|
|||
}, |
|||
|
|||
addSection: function(name, section_el){ |
|||
var self = this; |
|||
name = name.toLowerCase(); |
|||
|
|||
self.content.grab( |
|||
self.sections[name] = new Element('div', { |
|||
'class': 'section section_' + name |
|||
}).grab(section_el) |
|||
); |
|||
}, |
|||
|
|||
addButton: function(button){ |
|||
var self = this; |
|||
|
|||
self.buttons.grab(button); |
|||
}, |
|||
|
|||
open: function(){ |
|||
var self = this; |
|||
|
|||
self.el.addClass('show'); |
|||
|
|||
if(!App.mobile_screen){ |
|||
$(self.content).getElements('> .head, > .section').each(function(section, nr){ |
|||
dynamics.css(section, { |
|||
opacity: 0, |
|||
translateY: 100 |
|||
}); |
|||
|
|||
dynamics.animate(section, { |
|||
opacity: 1, |
|||
translateY: 0 |
|||
}, { |
|||
type: dynamics.spring, |
|||
frequency: 200, |
|||
friction: 300, |
|||
duration: 1200, |
|||
delay: 500 + (nr * 100) |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
}, |
|||
|
|||
close: function(){ |
|||
var self = this; |
|||
|
|||
var ended = function() { |
|||
self.el.dispose(); |
|||
self.overlay.removeEventListener('transitionend', ended); |
|||
}; |
|||
self.overlay.addEventListener('transitionend', ended, false); |
|||
|
|||
// animate out
|
|||
|
|||
if(!App.mobile_screen){ |
|||
$(self.content).getElements('> .head, > .section').reverse().each(function(section, nr){ |
|||
dynamics.animate(section, { |
|||
opacity: 0, |
|||
translateY: 100 |
|||
}, { |
|||
type: dynamics.spring, |
|||
frequency: 200, |
|||
friction: 300, |
|||
duration: 1200, |
|||
delay: (nr * 50) |
|||
}); |
|||
}); |
|||
|
|||
dynamics.setTimeout(function(){ |
|||
self.el.removeClass('show'); |
|||
}, 200); |
|||
} |
|||
else { |
|||
self.el.removeClass('show'); |
|||
} |
|||
} |
|||
|
|||
}); |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,50 @@ |
|||
Page.Movies = new Class({ |
|||
|
|||
Extends: PageBase, |
|||
|
|||
name: 'movies', |
|||
icon: 'movie', |
|||
sub_pages: ['Wanted', 'Manage'], |
|||
default_page: 'Wanted', |
|||
current_page: null, |
|||
|
|||
initialize: function(parent, options){ |
|||
var self = this; |
|||
self.parent(parent, options); |
|||
|
|||
self.navigation = new BlockNavigation(); |
|||
$(self.navigation).inject(self.content, 'top'); |
|||
|
|||
}, |
|||
|
|||
defaultAction: function(action, params){ |
|||
var self = this; |
|||
|
|||
if(self.current_page){ |
|||
self.current_page.hide(); |
|||
|
|||
if(self.current_page.list && self.current_page.list.navigation) |
|||
self.current_page.list.navigation.dispose(); |
|||
} |
|||
|
|||
var route = new Route(); |
|||
route.parse(action); |
|||
|
|||
var page_name = route.getPage() != 'index' ? route.getPage().capitalize() : self.default_page; |
|||
|
|||
var page = self.sub_pages.filter(function(page){ |
|||
return page.name == page_name; |
|||
}).pick()['class']; |
|||
|
|||
page.open(route.getAction() || 'index', params); |
|||
page.show(); |
|||
|
|||
if(page.list && page.list.navigation) |
|||
page.list.navigation.inject(self.navigation); |
|||
|
|||
self.current_page = page; |
|||
self.navigation.activate(page_name.toLowerCase()); |
|||
|
|||
} |
|||
|
|||
}); |
@ -1,95 +0,0 @@ |
|||
from xml.etree.ElementTree import QName |
|||
import datetime |
|||
import re |
|||
|
|||
from couchpotato.core.helpers.rss import RSS |
|||
from couchpotato.core.helpers.variable import tryInt, splitString |
|||
from couchpotato.core.logger import CPLog |
|||
from couchpotato.core.media.movie.providers.automation.base import Automation |
|||
|
|||
|
|||
log = CPLog(__name__) |
|||
|
|||
autoload = 'Rottentomatoes' |
|||
|
|||
|
|||
class Rottentomatoes(Automation, RSS): |
|||
|
|||
interval = 1800 |
|||
|
|||
def getIMDBids(self): |
|||
|
|||
movies = [] |
|||
|
|||
rotten_tomatoes_namespace = 'http://www.rottentomatoes.com/xmlns/rtmovie/' |
|||
urls = dict(zip(splitString(self.conf('automation_urls')), [tryInt(x) for x in splitString(self.conf('automation_urls_use'))])) |
|||
|
|||
for url in urls: |
|||
|
|||
if not urls[url]: |
|||
continue |
|||
|
|||
rss_movies = self.getRSSData(url) |
|||
rating_tag = str(QName(rotten_tomatoes_namespace, 'tomatometer_percent')) |
|||
|
|||
for movie in rss_movies: |
|||
|
|||
value = self.getTextElement(movie, "title") |
|||
result = re.search('(?<=%\s).*', value) |
|||
|
|||
if result: |
|||
|
|||
rating = tryInt(self.getTextElement(movie, rating_tag)) |
|||
name = result.group(0) |
|||
|
|||
print rating, tryInt(self.conf('tomatometer_percent')) |
|||
if rating < tryInt(self.conf('tomatometer_percent')): |
|||
log.info2('%s seems to be rotten...', name) |
|||
else: |
|||
log.info2('Found %s with fresh rating %s', (name, rating)) |
|||
year = datetime.datetime.now().strftime("%Y") |
|||
imdb = self.search(name, year) |
|||
|
|||
if imdb and self.isMinimalMovie(imdb): |
|||
movies.append(imdb['imdb']) |
|||
|
|||
return movies |
|||
|
|||
|
|||
config = [{ |
|||
'name': 'rottentomatoes', |
|||
'groups': [ |
|||
{ |
|||
'tab': 'automation', |
|||
'list': 'automation_providers', |
|||
'name': 'rottentomatoes_automation', |
|||
'label': 'Rottentomatoes', |
|||
'description': 'Imports movies from rottentomatoes rss feeds specified below.', |
|||
'options': [ |
|||
{ |
|||
'name': 'automation_enabled', |
|||
'default': False, |
|||
'type': 'enabler', |
|||
}, |
|||
{ |
|||
'name': 'automation_urls_use', |
|||
'label': 'Use', |
|||
'default': '1', |
|||
}, |
|||
{ |
|||
'name': 'automation_urls', |
|||
'label': 'url', |
|||
'type': 'combined', |
|||
'combine': ['automation_urls_use', 'automation_urls'], |
|||
'default': 'http://www.rottentomatoes.com/syndication/rss/in_theaters.xml', |
|||
}, |
|||
{ |
|||
'name': 'tomatometer_percent', |
|||
'default': '80', |
|||
'label': 'Tomatometer', |
|||
'description': 'Use as extra scoring requirement', |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}] |
@ -0,0 +1,11 @@ |
|||
from couchpotato.core.logger import CPLog |
|||
from couchpotato.core.media._base.providers.torrent.hd4free import Base |
|||
from couchpotato.core.media.movie.providers.base import MovieProvider |
|||
|
|||
log = CPLog(__name__) |
|||
|
|||
autoload = 'HD4Free' |
|||
|
|||
|
|||
class HD4Free(MovieProvider, Base): |
|||
pass |
@ -1,162 +0,0 @@ |
|||
.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 .rating, |
|||
.suggestions .media_result .data .info .genres, |
|||
.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, |
|||
rgba(78, 89, 105, 1) 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=title] { width: 100%; } |
|||
.suggestions .media_result .options select[name=profile] { width: 100%; } |
|||
.suggestions .media_result .options select[name=category] { width: 100%; } |
|||
|
|||
.suggestions .media_result .button { |
|||
position: absolute; |
|||
margin: 2px 0 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; |
|||
} |
|||
|
@ -1,173 +0,0 @@ |
|||
var SuggestList = new Class({ |
|||
|
|||
Implements: [Options, Events], |
|||
|
|||
shown_once: false, |
|||
|
|||
initialize: function(options){ |
|||
var self = this; |
|||
self.setOptions(options); |
|||
|
|||
self.create(); |
|||
}, |
|||
|
|||
create: function(){ |
|||
var self = this; |
|||
|
|||
self.el = new Element('div.suggestions', { |
|||
'events': { |
|||
'click:relay(a.delete)': function(e, el){ |
|||
(e).stop(); |
|||
|
|||
$(el).getParent('.media_result').destroy(); |
|||
|
|||
Api.request('suggestion.ignore', { |
|||
'data': { |
|||
'imdb': el.get('data-ignore') |
|||
}, |
|||
'onComplete': self.fill.bind(self) |
|||
}); |
|||
|
|||
}, |
|||
'click:relay(a.eye-open)': function(e, el){ |
|||
(e).stop(); |
|||
|
|||
$(el).getParent('.media_result').destroy(); |
|||
|
|||
Api.request('suggestion.ignore', { |
|||
'data': { |
|||
'imdb': el.get('data-seen'), |
|||
'mark_seen': 1 |
|||
}, |
|||
'onComplete': self.fill.bind(self) |
|||
}); |
|||
|
|||
} |
|||
} |
|||
}); |
|||
|
|||
var cookie_menu_select = Cookie.read('suggestions_charts_menu_selected') || 'suggestions'; |
|||
if( cookie_menu_select === 'suggestions') |
|||
self.show(); |
|||
else |
|||
self.hide(); |
|||
|
|||
self.fireEvent.delay(0, self, 'created'); |
|||
|
|||
}, |
|||
|
|||
fill: function(json){ |
|||
|
|||
var self = this; |
|||
|
|||
if(!json || json.count == 0){ |
|||
self.el.hide(); |
|||
} |
|||
else { |
|||
|
|||
Object.each(json.suggestions, function(movie){ |
|||
|
|||
var m = new Block.Search.MovieItem(movie, { |
|||
'onAdded': function(){ |
|||
self.afterAdded(m, movie) |
|||
} |
|||
}); |
|||
m.data_container.grab( |
|||
new Element('div.actions').adopt( |
|||
new Element('a.add.icon2', { |
|||
'title': 'Add movie with your default quality', |
|||
'data-add': movie.imdb, |
|||
'events': { |
|||
'click': m.showOptions.bind(m) |
|||
} |
|||
}), |
|||
$(new MA.IMDB(m)), |
|||
$(new MA.Trailer(m, { |
|||
'height': 150 |
|||
})), |
|||
new Element('a.delete.icon2', { |
|||
'title': 'Don\'t suggest this movie again', |
|||
'data-ignore': movie.imdb |
|||
}), |
|||
new Element('a.eye-open.icon2', { |
|||
'title': 'Seen it, like it, don\'t add', |
|||
'data-seen': movie.imdb |
|||
}) |
|||
) |
|||
); |
|||
m.data_container.removeEvents('click'); |
|||
|
|||
var plot = false; |
|||
if(m.info.plot && m.info.plot.length > 0) |
|||
plot = m.info.plot; |
|||
|
|||
// Add rating
|
|||
m.info_container.adopt( |
|||
m.rating = m.info.rating && m.info.rating.imdb && m.info.rating.imdb.length == 2 && parseFloat(m.info.rating.imdb[0]) > 0 ? new Element('span.rating', { |
|||
'text': parseFloat(m.info.rating.imdb[0]), |
|||
'title': parseInt(m.info.rating.imdb[1]) + ' votes' |
|||
}) : null, |
|||
m.genre = m.info.genres && m.info.genres.length > 0 ? new Element('span.genres', { |
|||
'text': m.info.genres.slice(0, 3).join(', ') |
|||
}) : null, |
|||
m.plot = plot ? new Element('span.plot', { |
|||
'text': plot, |
|||
'events': { |
|||
'click': function(){ |
|||
this.toggleClass('full') |
|||
} |
|||
} |
|||
}) : null |
|||
); |
|||
|
|||
$(m).inject(self.el); |
|||
|
|||
}); |
|||
|
|||
} |
|||
|
|||
self.fireEvent('loaded'); |
|||
|
|||
}, |
|||
|
|||
afterAdded: function(m, movie){ |
|||
var self = this; |
|||
|
|||
setTimeout(function(){ |
|||
$(m).destroy(); |
|||
|
|||
Api.request('suggestion.ignore', { |
|||
'data': { |
|||
'imdb': movie.imdb, |
|||
'remove_only': true |
|||
}, |
|||
'onComplete': self.fill.bind(self) |
|||
}); |
|||
|
|||
}, 3000); |
|||
|
|||
}, |
|||
|
|||
show: function(){ |
|||
var self = this; |
|||
|
|||
self.el.show(); |
|||
|
|||
if(!self.shown_once){ |
|||
self.api_request = Api.request('suggestion.view', { |
|||
'onComplete': self.fill.bind(self) |
|||
}); |
|||
|
|||
self.shown_once = true; |
|||
} |
|||
}, |
|||
|
|||
hide: function(){ |
|||
this.el.hide(); |
|||
}, |
|||
|
|||
toElement: function(){ |
|||
return this.el; |
|||
} |
|||
|
|||
}); |
@ -1,199 +0,0 @@ |
|||
.page.log .nav { |
|||
display: block; |
|||
text-align: center; |
|||
padding: 0 0 30px; |
|||
margin: 0; |
|||
font-size: 20px; |
|||
position: fixed; |
|||
width: 100%; |
|||
bottom: 0; |
|||
left: 0; |
|||
background: #4E5969; |
|||
z-index: 100; |
|||
} |
|||
|
|||
.page.log .nav li { |
|||
display: inline-block; |
|||
padding: 5px 10px; |
|||
margin: 0; |
|||
} |
|||
|
|||
.page.log .nav li.select, |
|||
.page.log .nav li.clear { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.page.log .nav li:hover:not(.active):not(.filter) { |
|||
background: rgba(255, 255, 255, 0.1); |
|||
} |
|||
|
|||
.page.log .nav li.active { |
|||
font-weight: bold; |
|||
cursor: default; |
|||
background: rgba(255,255,255,.1); |
|||
} |
|||
|
|||
@media all and (max-width: 480px) { |
|||
.page.log .nav { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.page.log .nav li { |
|||
padding: 5px; |
|||
} |
|||
} |
|||
|
|||
.page.log .nav li.hint { |
|||
text-align: center; |
|||
width: 400px; |
|||
left: 50%; |
|||
margin-left: -200px; |
|||
font-style: italic; |
|||
font-size: 11px; |
|||
position: absolute; |
|||
right: 20px; |
|||
opacity: .5; |
|||
bottom: 5px; |
|||
} |
|||
|
|||
.page.log .loading { |
|||
text-align: center; |
|||
font-size: 20px; |
|||
padding: 50px; |
|||
} |
|||
|
|||
.page.log .container { |
|||
padding: 30px 0 60px; |
|||
overflow: hidden; |
|||
line-height: 150%; |
|||
font-size: 11px; |
|||
color: #FFF; |
|||
} |
|||
|
|||
.page.log .container select { |
|||
vertical-align: top; |
|||
} |
|||
|
|||
.page.log .container .time { |
|||
clear: both; |
|||
color: lightgrey; |
|||
font-size: 10px; |
|||
border-top: 1px solid rgba(255, 255, 255, 0.1); |
|||
position: relative; |
|||
overflow: hidden; |
|||
padding: 0 3px; |
|||
font-family: Lucida Console, Monaco, Nimbus Mono L, monospace, serif; |
|||
} |
|||
.page.log .container .time.highlight { |
|||
background: rgba(255, 255, 255, 0.1); |
|||
} |
|||
.page.log .container .time span { |
|||
padding: 5px 0 3px; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.page.log[data-filter=INFO] .error, |
|||
.page.log[data-filter=INFO] .debug, |
|||
.page.log[data-filter=ERROR] .debug, |
|||
.page.log[data-filter=ERROR] .info, |
|||
.page.log[data-filter=DEBUG] .info, |
|||
.page.log[data-filter=DEBUG] .error { |
|||
display: none; |
|||
} |
|||
|
|||
.page.log .container .type { |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
.page.log .container .message { |
|||
float: right; |
|||
width: 86%; |
|||
white-space: pre-wrap; |
|||
} |
|||
|
|||
.page.log .container .error { color: #FFA4A4; } |
|||
.page.log .container .debug span { opacity: .6; } |
|||
|
|||
.do_report { |
|||
position: absolute; |
|||
padding: 10px; |
|||
} |
|||
|
|||
.page.log .report { |
|||
position: fixed; |
|||
width: 100%; |
|||
height: 100%; |
|||
background: rgba(0,0,0,.7); |
|||
left: 0; |
|||
top: 0; |
|||
z-index: 99999; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.page.log .report .button { |
|||
display: inline-block; |
|||
margin: 10px 0; |
|||
padding: 10px; |
|||
} |
|||
|
|||
.page.log .report .bug { |
|||
width: 800px; |
|||
height: 80%; |
|||
position: absolute; |
|||
left: 50%; |
|||
top: 50%; |
|||
margin: 0 0 0 -400px; |
|||
transform: translate(0, -50%); |
|||
} |
|||
|
|||
.page.log .report .bug textarea { |
|||
display: block; |
|||
width: 100%; |
|||
background: #FFF; |
|||
padding: 20px; |
|||
overflow: auto; |
|||
color: #666; |
|||
height: 70%; |
|||
font-size: 12px; |
|||
} |
|||
|
|||
.page.log .container .time ::-webkit-selection { |
|||
background-color: #000; |
|||
color: #FFF; |
|||
} |
|||
|
|||
.page.log .container .time ::-moz-selection { |
|||
background-color: #000; |
|||
color: #FFF; |
|||
} |
|||
|
|||
.page.log .container .time ::-ms-selection { |
|||
background-color: #000; |
|||
color: #FFF; |
|||
} |
|||
|
|||
.page.log .container .time.highlight ::selection { |
|||
background-color: transparent; |
|||
color: inherit; |
|||
} |
|||
|
|||
.page.log .container .time.highlight ::-webkit-selection { |
|||
background-color: transparent; |
|||
color: inherit; |
|||
} |
|||
|
|||
.page.log .container .time.highlight ::-moz-selection { |
|||
background-color: transparent; |
|||
color: inherit; |
|||
} |
|||
|
|||
.page.log .container .time.highlight ::-ms-selection { |
|||
background-color: transparent; |
|||
color: inherit; |
|||
} |
|||
|
|||
.page.log .container .time.highlight ::selection { |
|||
background-color: transparent; |
|||
color: inherit; |
|||
} |
@ -0,0 +1,159 @@ |
|||
@import "_mixins"; |
|||
|
|||
.page.log { |
|||
|
|||
.nav { |
|||
text-align: right; |
|||
padding: 0; |
|||
margin: 0; |
|||
|
|||
li { |
|||
display: inline-block; |
|||
padding: 5px 10px; |
|||
margin: 0; |
|||
|
|||
&.select, &.clear { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
&:hover:not(.active):not(.filter) { |
|||
background: rgba(255, 255, 255, 0.1); |
|||
} |
|||
|
|||
&.active { |
|||
font-weight: bold; |
|||
cursor: default; |
|||
background: rgba(255,255,255,.1); |
|||
} |
|||
} |
|||
} |
|||
|
|||
.hint { |
|||
font-style: italic; |
|||
opacity: .5; |
|||
margin-top: 3px; |
|||
} |
|||
|
|||
.container { |
|||
padding: $padding; |
|||
overflow: hidden; |
|||
line-height: 150%; |
|||
|
|||
&.loading { |
|||
text-align: center; |
|||
font-size: 20px; |
|||
padding: 100px 50px; |
|||
} |
|||
|
|||
select { |
|||
vertical-align: top; |
|||
} |
|||
|
|||
.time { |
|||
clear: both; |
|||
font-size: .75em; |
|||
border-top: 1px solid rgba(255, 255, 255, 0.1); |
|||
overflow: hidden; |
|||
padding: 0 3px; |
|||
font-family: Lucida Console, Monaco, Nimbus Mono L, monospace, serif; |
|||
display: flex; |
|||
|
|||
&.highlight { |
|||
background: $theme_off; |
|||
} |
|||
|
|||
span { |
|||
padding: 5px 0 3px; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
width: 90px; |
|||
} |
|||
|
|||
::selection { |
|||
background-color: #000; |
|||
color: #FFF; |
|||
} |
|||
} |
|||
|
|||
.type.type { |
|||
margin-left: 10px; |
|||
width: 40px; |
|||
} |
|||
|
|||
.message { |
|||
white-space: pre-wrap; |
|||
flex: 1 auto; |
|||
} |
|||
|
|||
|
|||
.error { color: #FFA4A4; } |
|||
.debug span { opacity: .6; } |
|||
} |
|||
|
|||
|
|||
|
|||
[data-filter=INFO] .error, |
|||
[data-filter=INFO] .debug, |
|||
[data-filter=ERROR] .debug, |
|||
[data-filter=ERROR] .info, |
|||
[data-filter=DEBUG] .info, |
|||
[data-filter=DEBUG] .error { |
|||
display: none; |
|||
} |
|||
} |
|||
|
|||
.report_popup.report_popup { |
|||
position: fixed; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 0; |
|||
top: 0; |
|||
z-index: 99999; |
|||
font-size: 14px; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
opacity: 1; |
|||
color: #FFF; |
|||
pointer-events: auto; |
|||
|
|||
.button { |
|||
margin: 10px 0; |
|||
padding: 10px; |
|||
color: $background_color; |
|||
background: $primary_color; |
|||
} |
|||
|
|||
.bug { |
|||
width: 80%; |
|||
height: 80%; |
|||
max-height: 800px; |
|||
max-width: 800px; |
|||
|
|||
display: flex; |
|||
flex-flow: column nowrap; |
|||
|
|||
> span { |
|||
margin: $padding/2 0 $padding 0; |
|||
} |
|||
|
|||
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: $primary_color; |
|||
color: #FFF; |
|||
} |
@ -1,197 +0,0 @@ |
|||
.add_new_profile { |
|||
padding: 20px; |
|||
display: block; |
|||
text-align: center; |
|||
font-size: 20px; |
|||
border-bottom: 1px solid rgba(255,255,255,0.2); |
|||
} |
|||
|
|||
.profile { |
|||
border-bottom: 1px solid rgba(255,255,255,0.2); |
|||
position: relative; |
|||
} |
|||
|
|||
.profile > .delete { |
|||
position: absolute; |
|||
padding: 16px; |
|||
right: 0; |
|||
cursor: pointer; |
|||
opacity: 0.6; |
|||
color: #fd5353; |
|||
} |
|||
.profile > .delete:hover { |
|||
opacity: 1; |
|||
} |
|||
|
|||
.profile .ctrlHolder:hover { |
|||
background: none; |
|||
} |
|||
|
|||
.profile .qualities { |
|||
min-height: 80px; |
|||
} |
|||
|
|||
.profile .formHint { |
|||
width: 210px !important; |
|||
vertical-align: top !important; |
|||
margin: 0 !important; |
|||
padding-left: 3px !important; |
|||
opacity: 0.1; |
|||
} |
|||
.profile:hover .formHint { |
|||
opacity: 1; |
|||
} |
|||
|
|||
.profile .wait_for { |
|||
padding-top: 0; |
|||
padding-bottom: 20px; |
|||
} |
|||
|
|||
.profile .wait_for input { |
|||
margin: 0 5px !important; |
|||
} |
|||
|
|||
.profile .wait_for .minimum_score_input { |
|||
width: 40px !important; |
|||
text-align: left; |
|||
} |
|||
|
|||
.profile .types { |
|||
padding: 0; |
|||
margin: 0 20px 0 -4px; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.profile .types li { |
|||
padding: 3px 5px; |
|||
border-bottom: 1px solid rgba(255,255,255,0.2); |
|||
list-style: none; |
|||
} |
|||
.profile .types li:last-child { border: 0; } |
|||
|
|||
.profile .types li > * { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
line-height: 0; |
|||
margin-right: 10px; |
|||
} |
|||
|
|||
.profile .type .check { |
|||
margin-top: -1px; |
|||
} |
|||
|
|||
.profile .quality_type select { |
|||
width: 120px; |
|||
margin-left: -1px; |
|||
} |
|||
|
|||
.profile .types li.is_empty .check, |
|||
.profile .types li.is_empty .delete, |
|||
.profile .types li.is_empty .handle, |
|||
.profile .types li.is_empty .check_label { |
|||
visibility: hidden; |
|||
} |
|||
|
|||
.profile .types .type label { |
|||
display: inline-block; |
|||
width: auto; |
|||
float: none; |
|||
text-transform: uppercase; |
|||
font-size: 11px; |
|||
font-weight: normal; |
|||
margin-right: 20px; |
|||
text-shadow: none; |
|||
vertical-align: bottom; |
|||
padding: 0; |
|||
height: 17px; |
|||
} |
|||
.profile .types .type label .check { |
|||
margin-right: 5px; |
|||
} |
|||
.profile .types .type label .check_label { |
|||
display: inline-block; |
|||
vertical-align: top; |
|||
height: 16px; |
|||
line-height: 13px; |
|||
} |
|||
|
|||
.profile .types .type .threed { |
|||
display: none; |
|||
} |
|||
|
|||
.profile .types .type.allow_3d .threed { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.profile .types .type .handle { |
|||
background: url('../../images/handle.png') center; |
|||
display: inline-block; |
|||
height: 20px; |
|||
width: 20px; |
|||
cursor: -moz-grab; |
|||
cursor: -webkit-grab; |
|||
cursor: grab; |
|||
margin: 0; |
|||
} |
|||
|
|||
.profile .types .type .delete { |
|||
height: 20px; |
|||
width: 20px; |
|||
line-height: 20px; |
|||
visibility: hidden; |
|||
cursor: pointer; |
|||
font-size: 13px; |
|||
color: #fd5353; |
|||
} |
|||
.profile .types .type:not(.allow_3d) .delete { |
|||
margin-left: 55px; |
|||
} |
|||
|
|||
.profile .types .type:hover:not(.is_empty) .delete { |
|||
visibility: visible; |
|||
} |
|||
|
|||
#profile_ordering { |
|||
|
|||
} |
|||
|
|||
#profile_ordering ul { |
|||
float: left; |
|||
margin: 0; |
|||
width: 275px; |
|||
padding: 0; |
|||
} |
|||
|
|||
#profile_ordering li { |
|||
border-bottom: 1px solid rgba(255,255,255,0.2); |
|||
padding: 0 5px; |
|||
} |
|||
#profile_ordering li:last-child { border: 0; } |
|||
|
|||
#profile_ordering li .check { |
|||
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 .handle { |
|||
background: url('../../images/handle.png') center; |
|||
width: 20px; |
|||
float: right; |
|||
cursor: -webkit-grab; |
|||
cursor: -moz-grab; |
|||
cursor: grab; |
|||
} |
|||
|
|||
#profile_ordering .formHint { |
|||
clear: none; |
|||
float: right; |
|||
width: 250px; |
|||
margin: 0; |
|||
} |
@ -0,0 +1,150 @@ |
|||
@import "_mixins"; |
|||
|
|||
.add_new_profile { |
|||
padding: 20px; |
|||
display: block; |
|||
text-align: center; |
|||
font-size: 20px; |
|||
border-bottom: 1px solid $theme_off; |
|||
} |
|||
|
|||
.profile { |
|||
margin-bottom: 20px; |
|||
|
|||
.quality_label input { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.ctrlHolder { |
|||
|
|||
.types { |
|||
flex: 1 1 auto; |
|||
min-width: 360px; |
|||
|
|||
.type { |
|||
display: flex; |
|||
flex-row: row nowrap; |
|||
align-items: center; |
|||
padding: 2px 0; |
|||
|
|||
label { |
|||
min-width: 0; |
|||
margin-left: $padding/2; |
|||
|
|||
span { |
|||
font-size: .9em; |
|||
} |
|||
} |
|||
|
|||
input[type=checkbox] { |
|||
margin-right: 3px; |
|||
} |
|||
|
|||
.delete, .handle { |
|||
margin-left: $padding/4; |
|||
width: 20px; |
|||
font-size: 20px; |
|||
opacity: .1; |
|||
text-align: center; |
|||
cursor: pointer; |
|||
|
|||
&.handle { |
|||
cursor: move; |
|||
cursor: grab; |
|||
} |
|||
|
|||
&:hover { |
|||
opacity: 1; |
|||
} |
|||
} |
|||
|
|||
&.is_empty { |
|||
.delete, .handle { |
|||
display: none; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
&.wait_for.wait_for { |
|||
display: block; |
|||
|
|||
input { |
|||
min-width: 0; |
|||
width: 40px; |
|||
text-align: center; |
|||
margin: 0 2px; |
|||
} |
|||
|
|||
.advanced { |
|||
display: none; |
|||
color: $primary_color; |
|||
|
|||
.show_advanced & { |
|||
display: inline; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
.formHint { |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
#profile_ordering { |
|||
ul { |
|||
list-style: none; |
|||
margin: 0; |
|||
width: 275px; |
|||
padding: 0; |
|||
} |
|||
|
|||
li { |
|||
border-bottom: 1px solid $theme_off; |
|||
padding: 5px; |
|||
display: flex; |
|||
align-items: center; |
|||
|
|||
&:hover { |
|||
background: $theme_off; |
|||
} |
|||
|
|||
&:last-child { border: 0; } |
|||
|
|||
input[type=checkbox] { |
|||
margin: 2px 10px 0 0; |
|||
vertical-align: top; |
|||
} |
|||
|
|||
> span { |
|||
display: inline-block; |
|||
height: 20px; |
|||
vertical-align: top; |
|||
line-height: 20px; |
|||
|
|||
&.profile_label { |
|||
flex: 1 1 auto; |
|||
} |
|||
} |
|||
|
|||
.handle { |
|||
font-size: 20px; |
|||
width: 20px; |
|||
float: right; |
|||
cursor: move; |
|||
cursor: grab; |
|||
opacity: .5; |
|||
text-align: center; |
|||
|
|||
&:hover { |
|||
opacity: 1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.formHint { |
|||
} |
|||
} |
@ -1,26 +0,0 @@ |
|||
.group_sizes { |
|||
|
|||
} |
|||
|
|||
.group_sizes .head { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.group_sizes .ctrlHolder { |
|||
padding-top: 4px !important; |
|||
padding-bottom: 4px !important; |
|||
font-size: 12px; |
|||
} |
|||
|
|||
.group_sizes .label { |
|||
max-width: 120px; |
|||
} |
|||
|
|||
.group_sizes .min, .group_sizes .max { |
|||
text-align: center; |
|||
width: 50px; |
|||
max-width: 50px; |
|||
margin: 0 5px !important; |
|||
padding: 0 3px; |
|||
display: inline-block; |
|||
} |
@ -0,0 +1,19 @@ |
|||
@import "_mixins"; |
|||
|
|||
.group_sizes { |
|||
|
|||
.item { |
|||
.label { |
|||
min-width: 150px; |
|||
} |
|||
|
|||
.min, .max { |
|||
display: inline-block; |
|||
width: 70px !important; |
|||
min-width: 0 !important; |
|||
margin-right: $padding/2; |
|||
text-align: center; |
|||
} |
|||
} |
|||
|
|||
} |
@ -1,84 +0,0 @@ |
|||
.page.wizard .uniForm { |
|||
margin: 0 0 30px; |
|||
width: 83%; |
|||
} |
|||
|
|||
.page.wizard h1 { |
|||
padding: 10px 0; |
|||
display: block; |
|||
font-size: 30px; |
|||
margin: 80px 5px 0; |
|||
} |
|||
|
|||
.page.wizard .description { |
|||
padding: 10px 5px; |
|||
font-size: 1.45em; |
|||
line-height: 1.4em; |
|||
display: block; |
|||
} |
|||
|
|||
.page.wizard .tab_wrapper { |
|||
background: #5c697b; |
|||
height: 65px; |
|||
font-size: 1.75em; |
|||
position: fixed; |
|||
top: 0; |
|||
margin: 0; |
|||
width: 100%; |
|||
left: 0; |
|||
z-index: 2; |
|||
box-shadow: 0 0 10px rgba(0,0,0,0.1); |
|||
} |
|||
|
|||
.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: normal; |
|||
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; |
|||
} |
|||
|
|||
.page.wizard form > div { |
|||
min-height: 300px; |
|||
} |
|||
|
|||
.page.wizard .button.green { |
|||
padding: 20px; |
|||
font-size: 25px; |
|||
margin: 10px 0 80px; |
|||
display: block; |
|||
} |
|||
|
|||
.page.wizard .tab_nzb_providers { |
|||
margin: 20px 0 0 0; |
|||
} |
@ -1,245 +1,202 @@ |
|||
Page.Wizard = new Class({ |
|||
|
|||
Extends: Page.Settings, |
|||
|
|||
order: 70, |
|||
name: 'wizard', |
|||
has_tab: false, |
|||
wizard_only: true, |
|||
|
|||
headers: { |
|||
'welcome': { |
|||
'title': 'Welcome to the new CouchPotato', |
|||
'description': 'To get started, fill in each of the following settings as much as you can.', |
|||
'content': new Element('div', { |
|||
'styles': { |
|||
'margin': '0 0 0 30px' |
|||
} |
|||
}) |
|||
}, |
|||
'general': { |
|||
'title': 'General', |
|||
'description': 'If you want to access CP from outside your local network, you better secure it a bit with a username & password.' |
|||
}, |
|||
'downloaders': { |
|||
'title': 'What download apps are you using?', |
|||
'description': 'CP needs an external download app to work with. Choose one below. For more downloaders check settings after you have filled in the wizard. If your download app isn\'t in the list, use the default Blackhole.' |
|||
}, |
|||
'searcher': { |
|||
'label': 'Providers', |
|||
'title': 'Are you registered at any of these sites?', |
|||
'description': 'CP uses these sites to search for movies. A few free are enabled by default, but it\'s always better to have more.' |
|||
}, |
|||
'renamer': { |
|||
'title': 'Move & rename the movies after downloading?', |
|||
'description': 'The coolest part of CP is that it can move and organize your downloaded movies automagically. Check settings and you can even download trailers, subtitles and other data when it has finished downloading. It\'s awesome!' |
|||
}, |
|||
'automation': { |
|||
'title': 'Easily add movies to your wanted list!', |
|||
'description': 'You can easily add movies from your favorite movie site, like IMDB, Rotten Tomatoes, Apple Trailers and more. Just install the extension or drag the bookmarklet to your bookmarks.' + |
|||
'<br />Once installed, just click the bookmarklet on a movie page and watch the magic happen ;)', |
|||
'content': function(){ |
|||
return App.createUserscriptButtons().setStyles({ |
|||
'background-image': "url('https://couchpota.to/media/images/userscript.gif')" |
|||
}) |
|||
} |
|||
}, |
|||
'finish': { |
|||
'title': 'Finishing Up', |
|||
'description': 'Are you done? Did you fill in everything as much as possible?' + |
|||
'<br />Be sure to check the settings to see what more CP can do!<br /><br />' + |
|||
'<div class="wizard_support">After you\'ve used CP for a while, and you like it (which of course you will), consider supporting CP. Maybe even by writing some code. <br />Or by getting a subscription at <a href="https://usenetserver.com/partners/?a_aid=couchpotato&a_bid=3f357c6f">Usenet Server</a> or <a href="http://www.newshosting.com/partners/?a_aid=couchpotato&a_bid=a0b022df">Newshosting</a>.</div>', |
|||
'content': new Element('div').adopt( |
|||
new Element('a.button.green', { |
|||
'styles': { |
|||
'margin-top': 20 |
|||
}, |
|||
'text': 'I\'m ready to start the awesomeness, wow this button is big and green!', |
|||
'events': { |
|||
'click': function(e){ |
|||
(e).preventDefault(); |
|||
Api.request('settings.save', { |
|||
'data': { |
|||
'section': 'core', |
|||
'name': 'show_wizard', |
|||
'value': 0 |
|||
}, |
|||
'useSpinner': true, |
|||
'spinnerOptions': { |
|||
'target': self.el |
|||
}, |
|||
'onComplete': function(){ |
|||
window.location = App.createUrl('wanted'); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
}) |
|||
) |
|||
} |
|||
}, |
|||
groups: ['welcome', 'general', 'downloaders', 'searcher', 'renamer', 'automation', 'finish'], |
|||
|
|||
open: function(action, params){ |
|||
var self = this; |
|||
|
|||
if(!self.initialized){ |
|||
App.fireEvent('unload'); |
|||
App.getBlock('header').hide(); |
|||
|
|||
self.parent(action, params); |
|||
|
|||
self.addEvent('create', function(){ |
|||
self.orderGroups(); |
|||
}); |
|||
|
|||
self.initialized = true; |
|||
|
|||
self.scroll = new Fx.Scroll(document.body, { |
|||
'transition': 'quint:in:out' |
|||
}); |
|||
} |
|||
else |
|||
(function(){ |
|||
var sc = self.el.getElement('.wgroup_'+action); |
|||
self.scroll.start(0, sc.getCoordinates().top-80); |
|||
}).delay(1) |
|||
}, |
|||
|
|||
orderGroups: function(){ |
|||
var self = this; |
|||
|
|||
var form = self.el.getElement('.uniForm'); |
|||
var tabs = self.el.getElement('.tabs'); |
|||
|
|||
self.groups.each(function(group){ |
|||
|
|||
if(self.headers[group]){ |
|||
var group_container = new Element('.wgroup_'+group, { |
|||
'styles': { |
|||
'opacity': 0.2 |
|||
}, |
|||
'tween': { |
|||
'duration': 350 |
|||
} |
|||
}); |
|||
|
|||
if(self.headers[group].include){ |
|||
self.headers[group].include.each(function(inc){ |
|||
group_container.addClass('wgroup_'+inc); |
|||
}) |
|||
} |
|||
|
|||
var content = self.headers[group].content; |
|||
group_container.adopt( |
|||
new Element('h1', { |
|||
'text': self.headers[group].title |
|||
}), |
|||
self.headers[group].description ? new Element('span.description', { |
|||
'html': self.headers[group].description |
|||
}) : null, |
|||
content ? (typeOf(content) == 'function' ? content() : content) : null |
|||
).inject(form); |
|||
} |
|||
|
|||
var tab_navigation = tabs.getElement('.t_'+group); |
|||
|
|||
if(!tab_navigation && self.headers[group] && self.headers[group].include){ |
|||
tab_navigation = []; |
|||
self.headers[group].include.each(function(inc){ |
|||
tab_navigation.include(tabs.getElement('.t_'+inc)); |
|||
}) |
|||
} |
|||
|
|||
if(tab_navigation && group_container){ |
|||
tabs.adopt(tab_navigation); // Tab navigation
|
|||
|
|||
if(self.headers[group] && self.headers[group].include){ |
|||
|
|||
self.headers[group].include.each(function(inc){ |
|||
self.el.getElement('.tab_'+inc).inject(group_container); |
|||
}); |
|||
|
|||
new Element('li.t_'+group).adopt( |
|||
new Element('a', { |
|||
'href': App.createUrl('wizard/'+group), |
|||
'text': (self.headers[group].label || group).capitalize() |
|||
}) |
|||
).inject(tabs) |
|||
|
|||
} |
|||
else |
|||
self.el.getElement('.tab_'+group).inject(group_container); // Tab content
|
|||
|
|||
if(tab_navigation.getElement && self.headers[group]){ |
|||
var a = tab_navigation.getElement('a'); |
|||
a.set('text', (self.headers[group].label || group).capitalize()); |
|||
var url_split = a.get('href').split('wizard')[1].split('/'); |
|||
if(url_split.length > 3) |
|||
a.set('href', a.get('href').replace(url_split[url_split.length-3]+'/', '')); |
|||
|
|||
} |
|||
} |
|||
else { |
|||
new Element('li.t_'+group).adopt( |
|||
new Element('a', { |
|||
'href': App.createUrl('wizard/'+group), |
|||
'text': (self.headers[group].label || group).capitalize() |
|||
}) |
|||
).inject(tabs); |
|||
} |
|||
|
|||
if(self.headers[group] && self.headers[group].event) |
|||
self.headers[group].event.call() |
|||
}); |
|||
|
|||
// Remove toggle
|
|||
self.el.getElement('.advanced_toggle').destroy(); |
|||
|
|||
// Hide retention
|
|||
self.el.getElement('.section_nzb').hide(); |
|||
|
|||
// Add pointer
|
|||
new Element('.tab_wrapper').wraps(tabs); |
|||
|
|||
// Add nav
|
|||
var minimum = self.el.getSize().y-window.getSize().y; |
|||
self.groups.each(function(group, nr){ |
|||
|
|||
var g = self.el.getElement('.wgroup_'+group); |
|||
if(!g || !g.isVisible()) return; |
|||
var t = self.el.getElement('.t_'+group); |
|||
if(!t) return; |
|||
|
|||
var func = function(){ |
|||
// Activate all previous ones
|
|||
self.groups.each(function(groups2, nr2){ |
|||
var t2 = self.el.getElement('.t_'+groups2); |
|||
t2[nr2 > nr ? 'removeClass' : 'addClass' ]('done'); |
|||
}); |
|||
g.tween('opacity', 1); |
|||
}; |
|||
|
|||
if(nr == 0) |
|||
func(); |
|||
|
|||
new ScrollSpy( { |
|||
min: function(){ |
|||
var c = g.getCoordinates(); |
|||
var top = c.top-(window.getSize().y/2); |
|||
return top > minimum ? minimum : top |
|||
}, |
|||
max: function(){ |
|||
var c = g.getCoordinates(); |
|||
return c.top+(c.height/2) |
|||
}, |
|||
onEnter: func, |
|||
onLeave: function(){ |
|||
g.tween('opacity', 0.2) |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
} |
|||
|
|||
}); |
|||
Page.Wizard = new Class({ |
|||
|
|||
Extends: Page.Settings, |
|||
|
|||
order: 70, |
|||
name: 'wizard', |
|||
current: 'welcome', |
|||
has_tab: false, |
|||
wizard_only: true, |
|||
|
|||
headers: { |
|||
'welcome': { |
|||
'title': 'Welcome to the new CouchPotato', |
|||
'description': 'To get started, fill in each of the following settings as much as you can.', |
|||
'content': new Element('div', { |
|||
'styles': { |
|||
'margin': '0 0 0 30px' |
|||
} |
|||
}) |
|||
}, |
|||
'general': { |
|||
'title': 'General', |
|||
'description': 'If you want to access CP from outside your local network, you better secure it a bit with a username & password.' |
|||
}, |
|||
'downloaders': { |
|||
'title': 'What download apps are you using?', |
|||
'description': 'CP needs an external download app to work with. Choose one below. For more downloaders check settings after you have filled in the wizard. If your download app isn\'t in the list, use the default Blackhole.' |
|||
}, |
|||
'searcher': { |
|||
'label': 'Providers', |
|||
'title': 'Are you registered at any of these sites?', |
|||
'description': 'CP uses these sites to search for movies. A few free are enabled by default, but it\'s always better to have more.' |
|||
}, |
|||
'renamer': { |
|||
'title': 'Move & rename the movies after downloading?', |
|||
'description': 'The coolest part of CP is that it can move and organize your downloaded movies automagically. Check settings and you can even download trailers, subtitles and other data when it has finished downloading. It\'s awesome!' |
|||
}, |
|||
'automation': { |
|||
'title': 'Easily add movies to your wanted list!', |
|||
'description': 'You can easily add movies from your favorite movie site, like IMDB, Rotten Tomatoes, Apple Trailers and more. Just install the extension or drag the bookmarklet to your bookmarks.' + |
|||
'<br />Once installed, just click the bookmarklet on a movie page and watch the magic happen ;)', |
|||
'content': function(){ |
|||
return App.createUserscriptButtons().setStyles({ |
|||
'background-image': "url('https://couchpota.to/media/images/userscript.gif')" |
|||
}); |
|||
} |
|||
}, |
|||
'finish': { |
|||
'title': 'Finishing Up', |
|||
'description': 'Are you done? Did you fill in everything as much as possible?' + |
|||
'<br />Be sure to check the settings to see what more CP can do!<br /><br />' + |
|||
'<div class="wizard_support">After you\'ve used CP for a while, and you like it (which of course you will), consider supporting CP. Maybe even by writing some code. <br />Or by getting a subscription at <a href="https://usenetserver.com/partners/?a_aid=couchpotato&a_bid=3f357c6f">Usenet Server</a> or <a href="http://www.newshosting.com/partners/?a_aid=couchpotato&a_bid=a0b022df">Newshosting</a>.</div>', |
|||
'content': new Element('div').grab( |
|||
new Element('a.button.green', { |
|||
'styles': { |
|||
'margin-top': 20 |
|||
}, |
|||
'text': 'I\'m ready to start the awesomeness!', |
|||
'events': { |
|||
'click': function(e){ |
|||
(e).preventDefault(); |
|||
Api.request('settings.save', { |
|||
'data': { |
|||
'section': 'core', |
|||
'name': 'show_wizard', |
|||
'value': 0 |
|||
}, |
|||
'useSpinner': true, |
|||
'spinnerOptions': { |
|||
'target': self.el |
|||
}, |
|||
'onComplete': function(){ |
|||
window.location = App.createUrl('wanted'); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
}) |
|||
) |
|||
} |
|||
}, |
|||
|
|||
groups: ['welcome', 'general', 'downloaders', 'searcher', 'renamer', 'automation', 'finish'], |
|||
|
|||
open: function(action, params){ |
|||
var self = this; |
|||
|
|||
if(!self.initialized){ |
|||
App.fireEvent('unload'); |
|||
App.getBlock('header').hide(); |
|||
|
|||
self.parent(action, params); |
|||
|
|||
self.el.addClass('settings'); |
|||
|
|||
self.addEvent('create', function(){ |
|||
self.orderGroups(); |
|||
}); |
|||
|
|||
self.initialized = true; |
|||
|
|||
self.scroll = new Fx.Scroll(document.body, { |
|||
'transition': 'quint:in:out' |
|||
}); |
|||
} |
|||
else |
|||
(function(){ |
|||
var sc = self.el.getElement('.wgroup_'+action); |
|||
self.scroll.start(0, sc.getCoordinates().top-80); |
|||
}).delay(1); |
|||
}, |
|||
|
|||
orderGroups: function(){ |
|||
var self = this; |
|||
|
|||
var form = self.el.getElement('.uniForm'); |
|||
var tabs = self.el.getElement('.tabs').hide(); |
|||
|
|||
self.groups.each(function(group){ |
|||
|
|||
var group_container; |
|||
if(self.headers[group]){ |
|||
group_container = new Element('.wgroup_'+group); |
|||
|
|||
if(self.headers[group].include){ |
|||
self.headers[group].include.each(function(inc){ |
|||
group_container.addClass('wgroup_'+inc); |
|||
}); |
|||
} |
|||
|
|||
var content = self.headers[group].content; |
|||
group_container.adopt( |
|||
new Element('h1', { |
|||
'text': self.headers[group].title |
|||
}), |
|||
self.headers[group].description ? new Element('span.description', { |
|||
'html': self.headers[group].description |
|||
}) : null, |
|||
content ? (typeOf(content) == 'function' ? content() : content) : null |
|||
).inject(form); |
|||
} |
|||
|
|||
var tab_navigation = tabs.getElement('.t_'+group); |
|||
|
|||
if(!tab_navigation && self.headers[group] && self.headers[group].include){ |
|||
tab_navigation = []; |
|||
self.headers[group].include.each(function(inc){ |
|||
tab_navigation.include(tabs.getElement('.t_'+inc)); |
|||
}); |
|||
} |
|||
|
|||
if(tab_navigation && group_container){ |
|||
tabs.adopt(tab_navigation); // Tab navigation
|
|||
|
|||
if(self.headers[group] && self.headers[group].include){ |
|||
|
|||
self.headers[group].include.each(function(inc){ |
|||
self.el.getElement('.tab_'+inc).inject(group_container); |
|||
}); |
|||
|
|||
new Element('li.t_'+group).grab( |
|||
new Element('a', { |
|||
'href': App.createUrl('wizard/'+group), |
|||
'text': (self.headers[group].label || group).capitalize() |
|||
}) |
|||
).inject(tabs); |
|||
|
|||
} |
|||
else |
|||
self.el.getElement('.tab_'+group).inject(group_container); // Tab content
|
|||
|
|||
if(tab_navigation.getElement && self.headers[group]){ |
|||
var a = tab_navigation.getElement('a'); |
|||
a.set('text', (self.headers[group].label || group).capitalize()); |
|||
var url_split = a.get('href').split('wizard')[1].split('/'); |
|||
if(url_split.length > 3) |
|||
a.set('href', a.get('href').replace(url_split[url_split.length-3]+'/', '')); |
|||
|
|||
} |
|||
} |
|||
else { |
|||
new Element('li.t_'+group).grab( |
|||
new Element('a', { |
|||
'href': App.createUrl('wizard/'+group), |
|||
'text': (self.headers[group].label || group).capitalize() |
|||
}) |
|||
).inject(tabs); |
|||
} |
|||
|
|||
if(self.headers[group] && self.headers[group].event) |
|||
self.headers[group].event.call(); |
|||
}); |
|||
|
|||
// Remove toggle
|
|||
self.el.getElement('.advanced_toggle').destroy(); |
|||
|
|||
// Hide retention
|
|||
self.el.getElement('.section_nzb').hide(); |
|||
|
|||
} |
|||
|
|||
}); |
|||
|
@ -0,0 +1,62 @@ |
|||
@import "_mixins"; |
|||
|
|||
.page.wizard { |
|||
|
|||
.navigation.navigation { |
|||
display: none; |
|||
} |
|||
|
|||
.tab_content.tab_content { |
|||
display: block; |
|||
|
|||
fieldset { |
|||
|
|||
.ctrlHolder, h2 { |
|||
padding: $padding/4; |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
h1 { |
|||
padding: 10px 0; |
|||
display: block; |
|||
font-size: 30px; |
|||
margin: 80px 5px 0; |
|||
font-weight: 300; |
|||
} |
|||
|
|||
.description { |
|||
padding: $padding/2 $padding/4; |
|||
font-size: 1.45em; |
|||
line-height: 1.4em; |
|||
display: block; |
|||
} |
|||
|
|||
form.uniForm.containers { |
|||
margin: 0; |
|||
} |
|||
|
|||
form > div { |
|||
min-height: 300px; |
|||
max-width: $mq-desktop; |
|||
padding: $padding; |
|||
margin: 0 auto; |
|||
|
|||
@include media-phablet { |
|||
padding: $padding/2; |
|||
} |
|||
} |
|||
|
|||
.button.green { |
|||
padding: 20px; |
|||
font-size: 25px; |
|||
margin: 10px 0 80px; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.tab_nzb_providers { |
|||
margin: 20px 0 0 0; |
|||
} |
|||
|
|||
} |
Binary file not shown.
Before Width: | Height: | Size: 213 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 4.2 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,190 @@ |
|||
{ |
|||
"name": "icons", |
|||
"css_prefix_text": "icon-", |
|||
"css_use_suffix": false, |
|||
"hinting": true, |
|||
"units_per_em": 1000, |
|||
"ascent": 850, |
|||
"glyphs": [ |
|||
{ |
|||
"uid": "48cc210e59ff4bc56b6c8fba6eb384b8", |
|||
"css": "emo-coffee", |
|||
"code": 59401, |
|||
"src": "fontelico" |
|||
}, |
|||
{ |
|||
"uid": "078fec38562c3f83a1201a908040c141", |
|||
"css": "emo-sunglasses", |
|||
"code": 59402, |
|||
"src": "fontelico" |
|||
}, |
|||
{ |
|||
"uid": "04688d76a33ce7a7950e40fae79c08ac", |
|||
"css": "emo-cry", |
|||
"code": 59400, |
|||
"src": "fontelico" |
|||
}, |
|||
{ |
|||
"uid": "9dd9e835aebe1060ba7190ad2b2ed951", |
|||
"css": "search", |
|||
"code": 59394, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "474656633f79ea2f1dad59ff63f6bf07", |
|||
"css": "star", |
|||
"code": 59418, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "d17030afaecc1e1c22349b99f3c4992a", |
|||
"css": "star-empty", |
|||
"code": 59419, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "84cf1fcc3fec556e7eaeb19679ca2dc9", |
|||
"css": "star-half", |
|||
"code": 59420, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "872d9516df93eb6b776cc4d94bd97dac", |
|||
"css": "movie", |
|||
"code": 59416, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "b1887b423d2fd15c345e090320c91ca0", |
|||
"css": "thumbs", |
|||
"code": 59397, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "f805bb95d40c7ef2bc51b3d50d4f2e5c", |
|||
"css": "list", |
|||
"code": 59398, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "12f4ece88e46abd864e40b35e05b11cd", |
|||
"css": "ok", |
|||
"code": 59408, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "5211af474d3a9848f67f945e2ccaf143", |
|||
"css": "cancel", |
|||
"code": 59406, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "44e04715aecbca7f266a17d5a7863c68", |
|||
"css": "plus", |
|||
"code": 59411, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "3d4ea8a78dc34efe891f3a0f3d961274", |
|||
"css": "info", |
|||
"code": 59403, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "d7271d490b71df4311e32cdacae8b331", |
|||
"css": "home", |
|||
"code": 59415, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "c5fd349cbd3d23e4ade333789c29c729", |
|||
"css": "eye", |
|||
"code": 59412, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "9a76bc135eac17d2c8b8ad4a5774fc87", |
|||
"css": "download", |
|||
"code": 59404, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "f48ae54adfb27d8ada53d0fd9e34ee10", |
|||
"css": "delete", |
|||
"code": 59405, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "e99461abfef3923546da8d745372c995", |
|||
"css": "settings", |
|||
"code": 59393, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "bc71f4c6e53394d5ba46b063040014f1", |
|||
"css": "redo", |
|||
"code": 59407, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "a73c5deb486c8d66249811642e5d719a", |
|||
"css": "refresh", |
|||
"code": 59414, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "4109c474ff99cad28fd5a2c38af2ec6f", |
|||
"css": "filter", |
|||
"code": 59396, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "026007bd17bfc67f3fe013199676f620", |
|||
"css": "donate", |
|||
"code": 59421, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "94103e1b3f1e8cf514178ec5912b4469", |
|||
"css": "dropdown", |
|||
"code": 59409, |
|||
"src": "fontawesome" |
|||
}, |
|||
{ |
|||
"uid": "2cfb3f2b46b34a1790aec0aa846297b6", |
|||
"css": "menu", |
|||
"code": 59417, |
|||
"src": "entypo" |
|||
}, |
|||
{ |
|||
"uid": "c311c48d79488965b0fab7f9cd12b6b5", |
|||
"css": "left-arrow", |
|||
"code": 59392, |
|||
"src": "entypo" |
|||
}, |
|||
{ |
|||
"uid": "cb13afd4722a849d48056540bb74c47e", |
|||
"css": "play", |
|||
"code": 59410, |
|||
"src": "entypo" |
|||
}, |
|||
{ |
|||
"uid": "d10920db2e79c997c5e783279291970c", |
|||
"css": "dots", |
|||
"code": 59395, |
|||
"src": "entypo" |
|||
}, |
|||
{ |
|||
"uid": "51fb22f9ff9d7f60c95ef31e4c59502d", |
|||
"css": "notifications", |
|||
"code": 59399, |
|||
"src": "mfglabs" |
|||
}, |
|||
{ |
|||
"uid": "3ab229dd9bccaaaf6c71096da4b72c04", |
|||
"css": "error", |
|||
"code": 59413, |
|||
"src": "elusive" |
|||
} |
|||
] |
|||
} |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,52 @@ |
|||
var BlockHeader = new Class({ |
|||
|
|||
Extends: BlockNavigation, |
|||
|
|||
create: function(){ |
|||
var self = this, |
|||
animation_options = { |
|||
type: dynamics.spring |
|||
}, |
|||
couch, potato; |
|||
|
|||
self.parent(); |
|||
|
|||
self.el.adopt( |
|||
self.logo = new Element('a.logo', { |
|||
'href': App.createUrl(''), |
|||
'events': { |
|||
'mouseenter': function(){ |
|||
dynamics.animate(couch, { |
|||
opacity: 0, |
|||
translateX: -50 |
|||
}, animation_options); |
|||
|
|||
dynamics.animate(potato, { |
|||
opacity: 1, |
|||
translateX: 0 |
|||
}, animation_options); |
|||
}, |
|||
'mouseleave': function(){ |
|||
dynamics.animate(couch, { |
|||
opacity: 1, |
|||
translateX: 0 |
|||
}, animation_options); |
|||
|
|||
dynamics.animate(potato, { |
|||
opacity: 0, |
|||
translateX: 50 |
|||
}, animation_options); |
|||
} |
|||
} |
|||
}).adopt( |
|||
couch = new Element('span[text=Couch]'), |
|||
potato = new Element('span[text=Potato]') |
|||
), |
|||
self.nav |
|||
); |
|||
|
|||
|
|||
|
|||
} |
|||
|
|||
}); |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue