diff --git a/README.md b/README.md index 8ec80623..4bd59c46 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ To allow any computer user to watch movies easily streaming from torrents, witho ### Status Under development (RC1) for Mac OSX - Windows - Linux. - + ### APIs **Currently used:** @@ -33,9 +33,10 @@ You will need nodejs and grunt: ### Build -Install the node modules: +Install the node modules and fix dependancies issue: $ npm install + $ patch -p1 node_modules/moviedb/node_modules/superagent/index.js superagent-fix-node-webkit.patch Build with: @@ -53,18 +54,6 @@ You can also build for all platforms with: ## Any problem? -### Regarding superagent dependency -Due to [wrong browser verification](https://github.com/visionmedia/superagent/issues/95) on a dependency, this hard fix must be applied. -Replace `node_modules/moviedb/node_modules/superagent/index.js` contents with: -```javascript -// if (typeof window != 'undefined') { -// module.exports = require('./lib/superagent'); -// } else if (process.env.SUPERAGENT_COV) { -// module.exports = require('./lib-cov/node'); -// } else { - module.exports = require('./lib/node'); -// } -``` ### Regarding Video, MP4 H264 Playback - Info: https://github.com/rogerwang/node-webkit/wiki/Support-mp3-and-h264-in-video-and-audio-tag @@ -73,7 +62,7 @@ Replace `node_modules/moviedb/node_modules/superagent/index.js` contents with: ## Development -- Run `compass watch` in Terminal for CSS compiling and listen to future changes. +- Run `compass watch --css-dir css` in Terminal for CSS compiling and listen to future changes. - [How to build with SublimeText](https://github.com/rogerwang/node-webkit/wiki/Debugging-with-Sublime-Text-2-and-3) - Currently Gaze to watch all files and reload the app is disabled due to memory leaks and unstability. - Run node-webkit from the root directory with --debug to enable debugging mode like so ```node-webkit . --debug``` diff --git a/css/app.css b/css/app.css index fec7d21e..fb4b56d9 100644 --- a/css/app.css +++ b/css/app.css @@ -1,4 +1,5 @@ @import url(../css/font-awesome.min.css); +/* line 17, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, @@ -20,94 +21,156 @@ time, mark, audio, video { vertical-align: baseline; } +/* line 22, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ html { line-height: 1; } +/* line 24, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ ol, ul { list-style: none; } +/* line 26, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ table { border-collapse: collapse; border-spacing: 0; } +/* line 28, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ caption, th, td { text-align: left; font-weight: normal; vertical-align: middle; } +/* line 30, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ q, blockquote { quotes: none; } +/* line 103, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: none; } +/* line 32, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ a img { border: none; } +/* line 116, ../../../.gem/ruby/2.1.0/gems/compass-0.12.3/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } @-webkit-keyframes sidebareffect { + /* line 2, ../sass/_animations.scss */ from { -webkit-transform: translate(100%, 0); } + /* line 3, ../sass/_animations.scss */ to { -webkit-transform: translate(0, 0); } } @-webkit-keyframes sidebareffect2 { + /* line 7, ../sass/_animations.scss */ from { -webkit-transform: translate(0, 0); } + /* line 8, ../sass/_animations.scss */ to { -webkit-transform: translate(100%, 0); } } @-webkit-keyframes spin { + /* line 12, ../sass/_animations.scss */ from { -webkit-transform: rotate(0deg); } + /* line 13, ../sass/_animations.scss */ to { -webkit-transform: rotate(360deg); } } @-webkit-keyframes backdropFadeIn { + /* line 17, ../sass/_animations.scss */ from { opacity: 0; } + /* line 18, ../sass/_animations.scss */ to { opacity: 0.2; } } +/* line 54, ../sass/_utils.scss */ +.medium-button { + background: #286dc4; + background-image: linear-gradient(to bottom, #3076ce 0%, #175ab0 100%); + color: #FFF; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + padding: 14px 26px; + border-radius: 2px; + display: inline-block; + margin-top: 10px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); +} +/* line 66, ../sass/_utils.scss */ +.medium-button:hover { + background-image: linear-gradient(to bottom, #4387de 0%, #175ab0 100%); +} +/* line 70, ../sass/_utils.scss */ +.medium-button[disabled] { + background-image: linear-gradient(to bottom, #cccccc 0%, #777777 100%); +} + +/* line 75, ../sass/_utils.scss */ +.small-button { + background: #286dc4; + background-image: linear-gradient(to bottom, #3076ce 0%, #175ab0 100%); + color: #FFF; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + padding: 4px 10px; + border-radius: 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); +} +/* line 85, ../sass/_utils.scss */ +.small-button:hover { + background-image: linear-gradient(to bottom, #4387de 0%, #175ab0 100%); +} +/* line 89, ../sass/_utils.scss */ +.small-button[disabled] { + background-image: linear-gradient(to bottom, #cccccc 0%, #777777 100%); +} + +/* line 1, ../sass/_frame.scss */ body { -webkit-user-select: none; } +/* line 5, ../sass/_frame.scss */ button { -webkit-app-region: no-drag; } +/* line 9, ../sass/_frame.scss */ #header { -webkit-user-select: none; -webkit-app-region: drag; } +/* line 1, ../sass/_tooltip.scss */ .tooltip { position: absolute; z-index: 1030; @@ -119,31 +182,37 @@ button { filter: alpha(opacity=0); } +/* line 11, ../sass/_tooltip.scss */ .tooltip.in { opacity: 0.9; filter: alpha(opacity=90); } +/* line 15, ../sass/_tooltip.scss */ .tooltip.top { margin-top: -3px; padding: 5px 0; } +/* line 19, ../sass/_tooltip.scss */ .tooltip.right { margin-left: 3px; padding: 0 5px; } +/* line 23, ../sass/_tooltip.scss */ .tooltip.bottom { margin-top: 3px; padding: 5px 0; } +/* line 27, ../sass/_tooltip.scss */ .tooltip.left { margin-left: -3px; padding: 0 5px; } +/* line 31, ../sass/_tooltip.scss */ .tooltip-inner { max-width: 200px; padding: 5px 10px !important; @@ -154,6 +223,7 @@ button { border-radius: 4px; } +/* line 40, ../sass/_tooltip.scss */ .tooltip-arrow { position: absolute !important; width: 0; @@ -163,6 +233,7 @@ button { padding: 0 !important; } +/* line 48, ../sass/_tooltip.scss */ .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; @@ -171,6 +242,7 @@ button { border-top-color: #000000; } +/* line 55, ../sass/_tooltip.scss */ .tooltip.top-left .tooltip-arrow { bottom: 0; left: 5px; @@ -178,6 +250,7 @@ button { border-top-color: #000000; } +/* line 61, ../sass/_tooltip.scss */ .tooltip.top-right .tooltip-arrow { bottom: 0; right: 5px; @@ -185,6 +258,7 @@ button { border-top-color: #000000; } +/* line 67, ../sass/_tooltip.scss */ .tooltip.right .tooltip-arrow { top: 50%; left: 0; @@ -193,6 +267,7 @@ button { border-right-color: #000000; } +/* line 74, ../sass/_tooltip.scss */ .tooltip.left .tooltip-arrow { top: 50%; right: 0; @@ -201,6 +276,7 @@ button { border-left-color: #000000; } +/* line 81, ../sass/_tooltip.scss */ .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; @@ -209,6 +285,7 @@ button { border-bottom-color: #000000; } +/* line 88, ../sass/_tooltip.scss */ .tooltip.bottom-left .tooltip-arrow { top: 0; left: 5px; @@ -216,6 +293,7 @@ button { border-bottom-color: #000000; } +/* line 94, ../sass/_tooltip.scss */ .tooltip.bottom-right .tooltip-arrow { top: 0; right: 5px; @@ -224,6 +302,7 @@ button { } /* Global elements */ +/* line 3, ../sass/_layout.scss */ html, body { height: 100%; @@ -231,6 +310,7 @@ body { width: 100%; } +/* line 9, ../sass/_layout.scss */ body { background: #181817; border-radius: 5px; @@ -240,23 +320,28 @@ body { color: white; } +/* line 18, ../sass/_layout.scss */ ::-webkit-input-placeholder { color: rgba(255, 255, 255, 0.4); font-weight: normal; } +/* line 23, ../sass/_layout.scss */ button:hover { cursor: pointer; } +/* line 24, ../sass/_layout.scss */ :focus { outline: 0; } +/* line 25, ../sass/_layout.scss */ a { text-decoration: none; } +/* line 28, ../sass/_layout.scss */ .page { overflow-x: hidden; overflow-y: overlay; @@ -266,43 +351,53 @@ a { position: absolute; width: 100%; } +/* line 11, ../sass/_utils.scss */ .page::-webkit-scrollbar { background: none; width: 9px; } +/* line 15, ../sass/_utils.scss */ .page::-webkit-scrollbar-button { display: none; } +/* line 18, ../sass/_utils.scss */ .page::-webkit-scrollbar-track { display: none; } +/* line 21, ../sass/_utils.scss */ .page::-webkit-scrollbar-track-piece { display: none; } +/* line 24, ../sass/_utils.scss */ .page::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0); background-clip: content-box; border-radius: 10px; border: 2px solid transparent; } +/* line 30, ../sass/_utils.scss */ .page::-webkit-scrollbar-corner { display: none; } +/* line 33, ../sass/_utils.scss */ .page::-webkit-resizer { display: none; } +/* line 38, ../sass/_utils.scss */ .page:hover::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.5); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.15); } +/* line 44, ../sass/_utils.scss */ .page:hover::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.6); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.2); } +/* line 35, ../sass/_layout.scss */ .page.notransition .movie { -webkit-transition-delay: 0s, 0s; -moz-transition-delay: 0s, 0s; @@ -310,6 +405,7 @@ a { transition-delay: 0s, 0s; } +/* line 39, ../sass/_layout.scss */ .btn { -webkit-transition: background-color ease; -webkit-transition-delay: 0.3s; @@ -330,6 +426,7 @@ a { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); } +/* line 55, ../sass/_layout.scss */ .btn-action { background: #bb2720; border: 0; @@ -350,6 +447,7 @@ a { /* -- App */ +/* line 77, ../sass/_layout.scss */ #header { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; @@ -364,58 +462,70 @@ a { width: 100%; background-image: linear-gradient(to bottom, #282828 0%, #1e1e1e 100%); } +/* line 89, ../sass/_layout.scss */ #header h1 { font-size: 13px; } +/* line 93, ../sass/_layout.scss */ #header .btn-set { position: absolute; left: 15px; top: 17px; } +/* line 98, ../sass/_layout.scss */ #header .btn-set.right { right: 7px; left: initial; top: 5px; } +/* line 106, ../sass/_layout.scss */ #header .btn-set.darwin { position: absolute; left: 15px; top: 17px; } +/* line 111, ../sass/_layout.scss */ #header .btn-set.fs-darwin { right: 7px; left: initial; top: 5px; } +/* line 117, ../sass/_layout.scss */ #header .btn-set.linux { right: 7px; left: initial; top: 15px; } +/* line 122, ../sass/_layout.scss */ #header .btn-set.fs-linux { position: absolute; left: 15px; top: 5px; } +/* line 128, ../sass/_layout.scss */ #header .btn-set.win32 { right: 7px; left: initial; top: 15px; } +/* line 133, ../sass/_layout.scss */ #header .btn-set.fs-win32 { position: absolute; left: 15px; top: 5px; } +/* line 139, ../sass/_layout.scss */ #header .btn-set:hover .btn-os { color: rgba(0, 0, 0, 0.8); } +/* line 141, ../sass/_layout.scss */ #header .btn-set button { display: block; float: left; margin: 0 6px 0 0; background: #000; } +/* line 147, ../sass/_layout.scss */ #header .btn-set button.btn-os { border-radius: 30px; border: 0; @@ -427,6 +537,7 @@ a { text-align: center; width: 12px; } +/* line 160, ../sass/_layout.scss */ #header .btn-set button.debug { background: #fff; content: 'D'; @@ -436,15 +547,19 @@ a { text-transform: uppercase; width: auto; } +/* line 170, ../sass/_layout.scss */ #header .btn-set button.close:hover { background: #e74c3c; } +/* line 171, ../sass/_layout.scss */ #header .btn-set button.max:hover { background: #27ae60; } +/* line 172, ../sass/_layout.scss */ #header .btn-set button.min:hover { background: #f1c40f; } +/* line 173, ../sass/_layout.scss */ #header .btn-set button.fullscreen { color: #000; background: transparent; @@ -454,6 +569,7 @@ a { border-radius: 0; display: block; } +/* line 174, ../sass/_layout.scss */ #header .btn-set button.fullscreen::before { content: "\e000"; font-family: VideoJS; @@ -463,10 +579,33 @@ a { display: block; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1); } +/* line 183, ../sass/_layout.scss */ #header .btn-set button.fullscreen.active::before { content: "\e00B"; } +/* line 186, ../sass/_layout.scss */ +#header .btn-set button.fullscreen:hover { + color: #b2b2b2; +} +/* line 188, ../sass/_layout.scss */ +#header .btn-set button.settings { + background: transparent; + background-image: url(../images/settings.png); + background-repeat: no-repeat; + background-position: center center; + margin: 0; + margin-top: 3px; + width: 32px; + height: 29px; + border-radius: 0; + display: block; +} +/* line 200, ../sass/_layout.scss */ +#header .btn-set button.settings:hover { + background-image: url(../images/settings_over.png); +} +/* line 209, ../sass/_layout.scss */ #notification { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; @@ -486,6 +625,7 @@ a { border-top: none; display: none; } +/* line 226, ../sass/_layout.scss */ #notification .btn { position: absolute; top: 6px; @@ -494,6 +634,7 @@ a { background: rgba(0, 0, 0, 0.4); } +/* line 236, ../sass/_layout.scss */ #catalog-select { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; @@ -510,54 +651,66 @@ a { border-right: 1px solid #000; font-family: 'Myriad Pro', 'Lucida Grande', sans-serif; } +/* line 11, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar { background: none; width: 9px; } +/* line 15, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar-button { display: none; } +/* line 18, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar-track { display: none; } +/* line 21, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar-track-piece { display: none; } +/* line 24, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0); background-clip: content-box; border-radius: 10px; border: 2px solid transparent; } +/* line 30, ../sass/_utils.scss */ #catalog-select::-webkit-scrollbar-corner { display: none; } +/* line 33, ../sass/_utils.scss */ #catalog-select::-webkit-resizer { display: none; } +/* line 38, ../sass/_utils.scss */ #catalog-select:hover::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.5); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.15); } +/* line 44, ../sass/_utils.scss */ #catalog-select:hover::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.6); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.2); } +/* line 248, ../sass/_layout.scss */ #catalog-select h4 { margin-top: 40px; color: #404040; font-weight: bold; margin-bottom: 10px; } +/* line 256, ../sass/_layout.scss */ #catalog-select ul li { display: block; font-weight: bold; font-size: 13px; } +/* line 261, ../sass/_layout.scss */ #catalog-select ul li a { -webkit-transition: background-color ease; -webkit-transition-delay: 0.3s; @@ -569,9 +722,11 @@ a { border-radius: 3px; padding: 8px; } +/* line 268, ../sass/_layout.scss */ #catalog-select ul li a:hover { background: #010101; } +/* line 273, ../sass/_layout.scss */ #catalog-select ul li.active a, #catalog-select ul li.active a:hover { background: #286dc4; @@ -581,11 +736,13 @@ a { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); cursor: default; } +/* line 285, ../sass/_layout.scss */ #catalog-select .search { position: absolute; right: 20px; top: 12px; } +/* line 290, ../sass/_layout.scss */ #catalog-select .search input { border: 2px solid rgba(255, 255, 255, 0.4); border-radius: 5px; @@ -597,6 +754,7 @@ a { background: transparent; font-weight: bold; } +/* line 302, ../sass/_layout.scss */ #catalog-select .search i { position: absolute; top: 10px; @@ -604,6 +762,7 @@ a { color: rgba(255, 255, 255, 0.4); } +/* line 313, ../sass/_layout.scss */ .container { height: calc(100% - 45px); overflow: hidden; @@ -611,18 +770,22 @@ a { position: relative; } +/* line 323, ../sass/_layout.scss */ body.has-notification .container { height: calc(100% - 45px - 45px); margin: 90px 0 0 180px; } +/* line 328, ../sass/_layout.scss */ body.has-notification #catalog-select { top: 90px; height: calc(100% - 45px - 45px); } +/* line 333, ../sass/_layout.scss */ body.has-notification #notification { display: block; } +/* line 338, ../sass/_layout.scss */ .popcorn-load { -webkit-transition: opacity ease; -webkit-transition-delay: 1s; @@ -639,15 +802,18 @@ body.has-notification #notification { width: 100%; z-index: 999; } +/* line 350, ../sass/_layout.scss */ .popcorn-load.hidden { opacity: 0; z-index: 0; margin-left: 100%; pointer-events: none; } +/* line 357, ../sass/_layout.scss */ .popcorn-load.hidden .spinner { -webkit-animation: none; } +/* line 361, ../sass/_layout.scss */ .popcorn-load .wrapper { -webkit-transform: translateY(-100%); -moz-transform: translateY(-100%); @@ -660,9 +826,11 @@ body.has-notification #notification { text-align: center; width: 100%; } +/* line 370, ../sass/_layout.scss */ .popcorn-load .text { font-size: 22px; } +/* line 372, ../sass/_layout.scss */ .popcorn-load .spinner { background: url(../images/spinner.svg) no-repeat 0 0; background-size: cover; @@ -672,6 +840,7 @@ body.has-notification #notification { -webkit-animation: 1.05s spin infinite linear; width: 45px; } +/* line 382, ../sass/_layout.scss */ .popcorn-load .progressbar { display: none; height: 14px; @@ -683,6 +852,7 @@ body.has-notification #notification { overflow: hidden; padding: 3px; } +/* line 393, ../sass/_layout.scss */ .popcorn-load .progressbar .progress { -webkit-transition: width 0.2s ease; -moz-transition: width 0.2s ease; @@ -695,6 +865,7 @@ body.has-notification #notification { background: #FFF; border-radius: 40px; } +/* line 404, ../sass/_layout.scss */ .popcorn-load .progressinfo { display: none; position: absolute; @@ -707,6 +878,7 @@ body.has-notification #notification { opacity: 0.5; bottom: -40px; } +/* line 417, ../sass/_layout.scss */ .popcorn-load .btn-close { display: none; position: absolute; @@ -715,19 +887,24 @@ body.has-notification #notification { left: 15px; -webkit-app-region: no-drag; } +/* line 427, ../sass/_layout.scss */ .popcorn-load.withProgressBar .progressbar { display: block; } +/* line 428, ../sass/_layout.scss */ .popcorn-load.withProgressBar .progressinfo { display: block; } +/* line 429, ../sass/_layout.scss */ .popcorn-load.withProgressBar .spinner { display: none; } +/* line 433, ../sass/_layout.scss */ .popcorn-load.cancellable .btn-close { display: block; } +/* line 437, ../sass/_layout.scss */ .popcorn-disclaimer { -webkit-transition: opacity ease; -webkit-transition-delay: 0.3s; @@ -744,20 +921,24 @@ body.has-notification #notification { width: 100%; z-index: 999; } +/* line 449, ../sass/_layout.scss */ .popcorn-disclaimer.hidden { opacity: 0; pointer-events: none; } +/* line 455, ../sass/_layout.scss */ .popcorn-disclaimer.quitting .text, .popcorn-disclaimer.quitting .btn { opacity: 0.0; pointer-events: none; } +/* line 460, ../sass/_layout.scss */ .popcorn-disclaimer .text, .popcorn-disclaimer .btn { -webkit-transition: opacity 2s ease-out; -moz-transition: opacity 2s ease-out; -o-transition: opacity 2s ease-out; transition: opacity 2s ease-out; } +/* line 464, ../sass/_layout.scss */ .popcorn-disclaimer .wrapper { -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); @@ -770,6 +951,7 @@ body.has-notification #notification { text-align: center; width: 100%; } +/* line 473, ../sass/_layout.scss */ .popcorn-disclaimer .text { display: block; font-size: 22px; @@ -778,24 +960,29 @@ body.has-notification #notification { margin: 0px auto; margin-bottom: 15px; } +/* line 482, ../sass/_layout.scss */ .popcorn-disclaimer .btn { padding: 1.1em 3em; font-size: 18px; } +/* line 486, ../sass/_layout.scss */ .popcorn-disclaimer .btn.continue { font-size: 18px; font-weight: bold; background: #53A93F; } +/* line 491, ../sass/_layout.scss */ .popcorn-disclaimer .btn.quit { font-size: 18px; background: #e20f3c; font-weight: normal; } +/* line 2, ../sass/_movielist.scss */ .movie-list { margin-bottom: 15px; } +/* line 5, ../sass/_movielist.scss */ .movie-list li { height: 195px; width: 132px; @@ -806,9 +993,11 @@ body.has-notification #notification { position: relative; background: #000; } +/* line 15, ../sass/_movielist.scss */ .movie-list li:hover i { opacity: 1; } +/* line 17, ../sass/_movielist.scss */ .movie-list li i { -webkit-transition: all ease; -webkit-transition-delay: 0.3s; @@ -831,6 +1020,7 @@ body.has-notification #notification { height: 101%; z-index: 10; } +/* line 36, ../sass/_movielist.scss */ .movie-list li .cover { width: 133px; height: 196px; @@ -841,6 +1031,7 @@ body.has-notification #notification { background: url(../images/posterholder.png) no-repeat 50% 50%; -webkit-transform: translateZ(0); } +/* line 47, ../sass/_movielist.scss */ .movie-list li img { -webkit-transition: all ease; -webkit-transition-delay: 1s; @@ -857,27 +1048,32 @@ body.has-notification #notification { border-radius: 3px; -webkit-transform: translateZ(0); } +/* line 59, ../sass/_movielist.scss */ .movie-list li img.placeholder { -webkit-filter: grayscale(1); -webkit-transform: scale(1.15) translateY(-5px); z-index: 1; border-radius: 3px; } +/* line 66, ../sass/_movielist.scss */ .movie-list li img.real { opacity: 1; z-index: 2; border-radius: 3px; } +/* line 72, ../sass/_movielist.scss */ .movie-list li img.hidden { opacity: 0; visibility: hidden; border-radius: 3px; } +/* line 79, ../sass/_movielist.scss */ .movie-list li a { display: block; height: 196px; width: 133px; } +/* line 85, ../sass/_movielist.scss */ .movie-list li strong { color: #FFF; display: block; @@ -887,10 +1083,12 @@ body.has-notification #notification { text-overflow: ellipsis; white-space: nowrap; } +/* line 95, ../sass/_movielist.scss */ .movie-list li small { font-size: 12px; color: #666; } +/* line 100, ../sass/_movielist.scss */ .movie-list li::before { display: block; content: ''; @@ -903,6 +1101,7 @@ body.has-notification #notification { z-index: 3; } +/* line 116, ../sass/_movielist.scss */ .movie { -webkit-transform: scale(0, 0); -moz-transform: scale(0, 0); @@ -915,306 +1114,357 @@ body.has-notification #notification { transition: opacity 0.3s ease, transform 0.3s ease; opacity: 0; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(1) { -webkit-transition-delay: 0s, 0s; -moz-transition-delay: 0s, 0s; -o-transition-delay: 0s, 0s; transition-delay: 0s, 0s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(2) { -webkit-transition-delay: 0s, 0.1s; -moz-transition-delay: 0s, 0.1s; -o-transition-delay: 0s, 0.1s; transition-delay: 0s, 0.1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(3) { -webkit-transition-delay: 0s, 0.2s; -moz-transition-delay: 0s, 0.2s; -o-transition-delay: 0s, 0.2s; transition-delay: 0s, 0.2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(4) { -webkit-transition-delay: 0s, 0.3s; -moz-transition-delay: 0s, 0.3s; -o-transition-delay: 0s, 0.3s; transition-delay: 0s, 0.3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(5) { -webkit-transition-delay: 0s, 0.4s; -moz-transition-delay: 0s, 0.4s; -o-transition-delay: 0s, 0.4s; transition-delay: 0s, 0.4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(6) { -webkit-transition-delay: 0s, 0.5s; -moz-transition-delay: 0s, 0.5s; -o-transition-delay: 0s, 0.5s; transition-delay: 0s, 0.5s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(7) { -webkit-transition-delay: 0s, 0.6s; -moz-transition-delay: 0s, 0.6s; -o-transition-delay: 0s, 0.6s; transition-delay: 0s, 0.6s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(8) { -webkit-transition-delay: 0s, 0.7s; -moz-transition-delay: 0s, 0.7s; -o-transition-delay: 0s, 0.7s; transition-delay: 0s, 0.7s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(9) { -webkit-transition-delay: 0s, 0.8s; -moz-transition-delay: 0s, 0.8s; -o-transition-delay: 0s, 0.8s; transition-delay: 0s, 0.8s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(10) { -webkit-transition-delay: 0s, 0.9s; -moz-transition-delay: 0s, 0.9s; -o-transition-delay: 0s, 0.9s; transition-delay: 0s, 0.9s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(11) { -webkit-transition-delay: 0s, 1s; -moz-transition-delay: 0s, 1s; -o-transition-delay: 0s, 1s; transition-delay: 0s, 1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(12) { -webkit-transition-delay: 0s, 1.1s; -moz-transition-delay: 0s, 1.1s; -o-transition-delay: 0s, 1.1s; transition-delay: 0s, 1.1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(13) { -webkit-transition-delay: 0s, 1.2s; -moz-transition-delay: 0s, 1.2s; -o-transition-delay: 0s, 1.2s; transition-delay: 0s, 1.2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(14) { -webkit-transition-delay: 0s, 1.3s; -moz-transition-delay: 0s, 1.3s; -o-transition-delay: 0s, 1.3s; transition-delay: 0s, 1.3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(15) { -webkit-transition-delay: 0s, 1.4s; -moz-transition-delay: 0s, 1.4s; -o-transition-delay: 0s, 1.4s; transition-delay: 0s, 1.4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(16) { -webkit-transition-delay: 0s, 1.5s; -moz-transition-delay: 0s, 1.5s; -o-transition-delay: 0s, 1.5s; transition-delay: 0s, 1.5s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(17) { -webkit-transition-delay: 0s, 1.6s; -moz-transition-delay: 0s, 1.6s; -o-transition-delay: 0s, 1.6s; transition-delay: 0s, 1.6s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(18) { -webkit-transition-delay: 0s, 1.7s; -moz-transition-delay: 0s, 1.7s; -o-transition-delay: 0s, 1.7s; transition-delay: 0s, 1.7s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(19) { -webkit-transition-delay: 0s, 1.8s; -moz-transition-delay: 0s, 1.8s; -o-transition-delay: 0s, 1.8s; transition-delay: 0s, 1.8s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(20) { -webkit-transition-delay: 0s, 1.9s; -moz-transition-delay: 0s, 1.9s; -o-transition-delay: 0s, 1.9s; transition-delay: 0s, 1.9s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(21) { -webkit-transition-delay: 0s, 2s; -moz-transition-delay: 0s, 2s; -o-transition-delay: 0s, 2s; transition-delay: 0s, 2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(22) { -webkit-transition-delay: 0s, 2.1s; -moz-transition-delay: 0s, 2.1s; -o-transition-delay: 0s, 2.1s; transition-delay: 0s, 2.1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(23) { -webkit-transition-delay: 0s, 2.2s; -moz-transition-delay: 0s, 2.2s; -o-transition-delay: 0s, 2.2s; transition-delay: 0s, 2.2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(24) { -webkit-transition-delay: 0s, 2.3s; -moz-transition-delay: 0s, 2.3s; -o-transition-delay: 0s, 2.3s; transition-delay: 0s, 2.3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(25) { -webkit-transition-delay: 0s, 2.4s; -moz-transition-delay: 0s, 2.4s; -o-transition-delay: 0s, 2.4s; transition-delay: 0s, 2.4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(26) { -webkit-transition-delay: 0s, 2.5s; -moz-transition-delay: 0s, 2.5s; -o-transition-delay: 0s, 2.5s; transition-delay: 0s, 2.5s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(27) { -webkit-transition-delay: 0s, 2.6s; -moz-transition-delay: 0s, 2.6s; -o-transition-delay: 0s, 2.6s; transition-delay: 0s, 2.6s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(28) { -webkit-transition-delay: 0s, 2.7s; -moz-transition-delay: 0s, 2.7s; -o-transition-delay: 0s, 2.7s; transition-delay: 0s, 2.7s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(29) { -webkit-transition-delay: 0s, 2.8s; -moz-transition-delay: 0s, 2.8s; -o-transition-delay: 0s, 2.8s; transition-delay: 0s, 2.8s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(30) { -webkit-transition-delay: 0s, 2.9s; -moz-transition-delay: 0s, 2.9s; -o-transition-delay: 0s, 2.9s; transition-delay: 0s, 2.9s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(31) { -webkit-transition-delay: 0s, 3s; -moz-transition-delay: 0s, 3s; -o-transition-delay: 0s, 3s; transition-delay: 0s, 3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(32) { -webkit-transition-delay: 0s, 3.1s; -moz-transition-delay: 0s, 3.1s; -o-transition-delay: 0s, 3.1s; transition-delay: 0s, 3.1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(33) { -webkit-transition-delay: 0s, 3.2s; -moz-transition-delay: 0s, 3.2s; -o-transition-delay: 0s, 3.2s; transition-delay: 0s, 3.2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(34) { -webkit-transition-delay: 0s, 3.3s; -moz-transition-delay: 0s, 3.3s; -o-transition-delay: 0s, 3.3s; transition-delay: 0s, 3.3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(35) { -webkit-transition-delay: 0s, 3.4s; -moz-transition-delay: 0s, 3.4s; -o-transition-delay: 0s, 3.4s; transition-delay: 0s, 3.4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(36) { -webkit-transition-delay: 0s, 3.5s; -moz-transition-delay: 0s, 3.5s; -o-transition-delay: 0s, 3.5s; transition-delay: 0s, 3.5s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(37) { -webkit-transition-delay: 0s, 3.6s; -moz-transition-delay: 0s, 3.6s; -o-transition-delay: 0s, 3.6s; transition-delay: 0s, 3.6s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(38) { -webkit-transition-delay: 0s, 3.7s; -moz-transition-delay: 0s, 3.7s; -o-transition-delay: 0s, 3.7s; transition-delay: 0s, 3.7s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(39) { -webkit-transition-delay: 0s, 3.8s; -moz-transition-delay: 0s, 3.8s; -o-transition-delay: 0s, 3.8s; transition-delay: 0s, 3.8s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(40) { -webkit-transition-delay: 0s, 3.9s; -moz-transition-delay: 0s, 3.9s; -o-transition-delay: 0s, 3.9s; transition-delay: 0s, 3.9s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(41) { -webkit-transition-delay: 0s, 4s; -moz-transition-delay: 0s, 4s; -o-transition-delay: 0s, 4s; transition-delay: 0s, 4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(42) { -webkit-transition-delay: 0s, 4.1s; -moz-transition-delay: 0s, 4.1s; -o-transition-delay: 0s, 4.1s; transition-delay: 0s, 4.1s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(43) { -webkit-transition-delay: 0s, 4.2s; -moz-transition-delay: 0s, 4.2s; -o-transition-delay: 0s, 4.2s; transition-delay: 0s, 4.2s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(44) { -webkit-transition-delay: 0s, 4.3s; -moz-transition-delay: 0s, 4.3s; -o-transition-delay: 0s, 4.3s; transition-delay: 0s, 4.3s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(45) { -webkit-transition-delay: 0s, 4.4s; -moz-transition-delay: 0s, 4.4s; -o-transition-delay: 0s, 4.4s; transition-delay: 0s, 4.4s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(46) { -webkit-transition-delay: 0s, 4.5s; -moz-transition-delay: 0s, 4.5s; -o-transition-delay: 0s, 4.5s; transition-delay: 0s, 4.5s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(47) { -webkit-transition-delay: 0s, 4.6s; -moz-transition-delay: 0s, 4.6s; -o-transition-delay: 0s, 4.6s; transition-delay: 0s, 4.6s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(48) { -webkit-transition-delay: 0s, 4.7s; -moz-transition-delay: 0s, 4.7s; -o-transition-delay: 0s, 4.7s; transition-delay: 0s, 4.7s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(49) { -webkit-transition-delay: 0s, 4.8s; -moz-transition-delay: 0s, 4.8s; -o-transition-delay: 0s, 4.8s; transition-delay: 0s, 4.8s; } +/* line 122, ../sass/_movielist.scss */ .movie:nth-child(50) { -webkit-transition-delay: 0s, 4.9s; -moz-transition-delay: 0s, 4.9s; -o-transition-delay: 0s, 4.9s; transition-delay: 0s, 4.9s; } +/* line 127, ../sass/_movielist.scss */ .movie.loaded { opacity: 1; -webkit-transform: scale(1, 1); @@ -1224,6 +1474,7 @@ body.has-notification #notification { transform: scale(1, 1); } +/* line 134, ../sass/_movielist.scss */ .no-results { text-align: center; font-size: 24px; @@ -1236,6 +1487,7 @@ body.has-notification #notification { -webkit-transform: translateY(-50%); } +/* line 148, ../sass/_movielist.scss */ .pagination { border-radius: 4px; display: block; @@ -1244,21 +1496,25 @@ body.has-notification #notification { text-align: center; } +/* line 155, ../sass/_movielist.scss */ .pagination ul li { display: inline-block; } +/* line 158, ../sass/_movielist.scss */ .pagination li:first-child > a, .pagination li:first-child > span { border-bottom-left-radius: 4px; border-top-left-radius: 4px; margin-left: 0; } +/* line 163, ../sass/_movielist.scss */ .pagination li:last-child > a, .pagination li:last-child > span { border-bottom-right-radius: 4px; border-top-right-radius: 4px; } +/* line 167, ../sass/_movielist.scss */ .pagination li > a, .pagination li > span { border: 1px solid rgba(255, 255, 255, 0.2); color: #999999; @@ -1277,17 +1533,20 @@ body.has-notification #notification { background-image: linear-gradient(to bottom, #2a2a2a 0%, #1b1b1b 100%); } +/* line 182, ../sass/_movielist.scss */ .pagination li > a:hover { opacity: 0.8; } +/* line 186, ../sass/_movielist.scss */ .pagination ul li.active a, .pagination li > a:active { background-image: linear-gradient(to bottom, #121212 0%, #191919 100%); box-shadow: 0 1px 0px rgba(255, 255, 255, 0.1), inset 0 1px 1px rgba(0, 0, 0, 0.5); color: #fff; } -sidebar { +/* line 2, ../sass/_moviedetails.scss */ +sidebar, #settings { right: 0; position: absolute; height: 100%; @@ -1298,12 +1557,38 @@ sidebar { -webkit-animation: sidebareffect .5s; -webkit-transform: translateZ(0); } -sidebar.hidden { +/* line 13, ../sass/_moviedetails.scss */ +sidebar.hidden, #settings.hidden { right: -10px; animation: sidebareffect2 .5s; -webkit-animation: sidebareffect2 .5s; -webkit-transform: translate(100%, 0); } +/* line 21, ../sass/_moviedetails.scss */ +sidebar .closer, #settings .closer { + position: absolute; + top: 0; + left: 0; + height: 30px; + width: 30px; + z-index: 300; + cursor: pointer; +} +/* line 30, ../sass/_moviedetails.scss */ +sidebar .closer:hover i, #settings .closer:hover i { + opacity: 1; +} +/* line 32, ../sass/_moviedetails.scss */ +sidebar .closer i, #settings .closer i { + color: #fff; + position: absolute; + left: 8px; + top: 8px; + opacity: 0.5; + text-shadow: 0 0 5px #000; +} + +/* line 44, ../sass/_moviedetails.scss */ sidebar .play { overflow-x: hidden; overflow-y: overlay; @@ -1319,46 +1604,57 @@ sidebar .play { background-size: cover; position: relative; } +/* line 11, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar { background: none; width: 9px; } +/* line 15, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar-button { display: none; } +/* line 18, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar-track { display: none; } +/* line 21, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar-track-piece { display: none; } +/* line 24, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0); background-clip: content-box; border-radius: 10px; border: 2px solid transparent; } +/* line 30, ../sass/_utils.scss */ sidebar .play::-webkit-scrollbar-corner { display: none; } +/* line 33, ../sass/_utils.scss */ sidebar .play::-webkit-resizer { display: none; } +/* line 38, ../sass/_utils.scss */ sidebar .play:hover::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.5); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.15); } +/* line 44, ../sass/_utils.scss */ sidebar .play:hover::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.6); background-clip: content-box; border-radius: 10px; border: 1px solid rgba(255, 255, 255, 0.2); } +/* line 58, ../sass/_moviedetails.scss */ sidebar .play:hover a.play-over { display: block; } +/* line 61, ../sass/_moviedetails.scss */ sidebar .play .backdrop-image { filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); opacity: 0; @@ -1372,9 +1668,11 @@ sidebar .play .backdrop-image { z-index: -1; background-position: center; } +/* line 76, ../sass/_moviedetails.scss */ sidebar .play .loaded { -webkit-animation: backdropFadeIn .5s ease-in forwards; } +/* line 81, ../sass/_moviedetails.scss */ sidebar .play a.play-over { position: absolute; top: 40%; @@ -1388,6 +1686,7 @@ sidebar .play a.play-over { display: none; z-index: 10; } +/* line 95, ../sass/_moviedetails.scss */ sidebar .play .poster { display: block; width: 100%; @@ -1401,6 +1700,7 @@ sidebar .play .poster { background-size: cover; -webkit-transform: translateZ(0); } +/* line 112, ../sass/_moviedetails.scss */ sidebar .play .poster img.big-poster { display: block; position: absolute; @@ -1410,6 +1710,7 @@ sidebar .play .poster img.big-poster { height: 100%; border-radius: 4px; } +/* line 123, ../sass/_moviedetails.scss */ sidebar .play a.play-button { text-align: center; color: #FFF; @@ -1424,38 +1725,22 @@ sidebar .play a.play-button { text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); background: #cc181e; } +/* line 136, ../sass/_moviedetails.scss */ sidebar .play a.play-button:hover { background: #eb282e; } +/* line 139, ../sass/_moviedetails.scss */ sidebar .play .movie-detail { height: 100%; display: table; } -sidebar .play .movie-detail .closer { - position: absolute; - top: 0; - left: 0; - height: 30px; - width: 30px; - z-index: 300; - cursor: pointer; -} -sidebar .play .movie-detail .closer:hover i { - opacity: 1; -} -sidebar .play .movie-detail .closer i { - color: #fff; - position: absolute; - left: 8px; - top: 8px; - opacity: 0.5; - text-shadow: 0 0 5px #000; -} +/* line 144, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont, sidebar .play .movie-detail .side-content { display: table-cell; vertical-align: middle; } +/* line 150, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont { position: relative; width: 40%; @@ -1465,12 +1750,15 @@ sidebar .play .movie-detail .poster-cont { -webkit-box-sizing: border-box; box-sizing: border-box; } +/* line 159, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont:hover .movie-config { bottom: 2px; } +/* line 160, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .poster-inner { position: relative; } +/* line 162, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont img.big-poster { background: #000; width: 100%; @@ -1478,12 +1766,14 @@ sidebar .play .movie-detail .poster-cont img.big-poster { border-radius: 4px; vertical-align: bottom; } +/* line 171, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config h4 { font-weight: bold; font-size: 14px; margin-left: 10px; margin-top: 8px; } +/* line 178, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .quality-cont { position: absolute; bottom: 0; @@ -1495,35 +1785,43 @@ sidebar .play .movie-detail .poster-cont .movie-config .quality-cont { background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.85) 100%); -webkit-transform: translateZ(0); } +/* line 189, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .quality-cont .quality-off { margin-left: 10px; font-size: 12px; } +/* line 197, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config li.options span.extra-data { font-weight: bold; color: #FFF; float: right; font-size: 15px; } +/* line 204, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config li.options span.good { color: #27ae60; } +/* line 205, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config li.options span.bad { color: #c0392b; } +/* line 206, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config li.options span.epic { color: #8e44ad; } +/* line 209, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config input { font-family: inherit; font-size: 100%; line-height: normal; margin: 0; } +/* line 215, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config input[type="radio"] { box-sizing: border-box; padding: 0; } +/* line 221, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch { background: transparent; border-radius: 32px; @@ -1536,6 +1834,7 @@ sidebar .play .movie-detail .poster-cont .movie-config .switch { top: 28px; cursor: pointer; } +/* line 233, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch label { -webkit-transition: color 0.2s ease; -moz-transition: color 0.2s ease; @@ -1548,16 +1847,19 @@ sidebar .play .movie-detail .poster-cont .movie-config .switch label { width: 20px; cursor: pointer; } +/* line 242, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch label:nth-of-type(1) { left: -38px; position: absolute; text-align: right; } +/* line 248, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch label:nth-of-type(2) { position: absolute; right: -30px; text-align: left; } +/* line 255, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input { height: 12px; left: 0; @@ -1568,27 +1870,35 @@ sidebar .play .movie-detail .poster-cont .movie-config .switch input { z-index: 2; cursor: pointer; } +/* line 265, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input:checked { z-index: 0; } +/* line 269, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input:checked ~ label:nth-of-type(1) { color: #286dc4; } +/* line 270, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input:checked ~ label:nth-of-type(2) { color: #FFF; } +/* line 273, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input:checked ~ .toggle { left: 2px; } +/* line 277, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input ~ :checked ~ label:nth-of-type(1) { color: #FFF; } +/* line 278, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input ~ :checked ~ label:nth-of-type(2) { color: #286dc4; } +/* line 281, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .switch input ~ :checked ~ .toggle { left: 13px; } +/* line 285, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .poster-cont .movie-config .toggle { -webkit-transition: left 0.2s ease; -moz-transition: left 0.2s ease; @@ -1603,6 +1913,7 @@ sidebar .play .movie-detail .poster-cont .movie-config .toggle { width: 10px; z-index: 1; } +/* line 300, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content { z-index: 500; width: 60%; @@ -1613,10 +1924,12 @@ sidebar .play .movie-detail .side-content { -webkit-box-sizing: border-box; box-sizing: border-box; } +/* line 310, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title { position: relative; padding: 0; } +/* line 314, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title h2 { font-weight: 200; font-size: 34px; @@ -1624,9 +1937,11 @@ sidebar .play .movie-detail .side-content .title h2 { color: #f5f7fa; padding-right: 30px; } +/* line 322, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .movie-quick-info { margin-bottom: 5px; } +/* line 325, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .movie-quick-info li { display: inline-block; vertical-align: top; @@ -1634,13 +1949,16 @@ sidebar .play .movie-detail .side-content .title .movie-quick-info li { color: #286dc4; font-weight: bold; } +/* line 332, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .movie-quick-info li::after { content: '\b7\a0'; margin-left: 2px; } +/* line 337, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .movie-quick-info li:last-child::after { display: none; } +/* line 341, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .health { font-size: 24px; width: 20px; @@ -1652,41 +1970,50 @@ sidebar .play .movie-detail .side-content .title .health { top: 10px; right: 0; } +/* line 352, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .health.bad { color: red; border-color: red; } +/* line 357, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .health.medium { color: yellow; border-color: yellow; } +/* line 362, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .health.good { color: limegreen; border-color: limegreen; } +/* line 367, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .title .health.excellent { color: green; border-color: green; } +/* line 374, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .rating { display: inline-block; position: relative; font-size: 14px; margin: 0 10px 0 0; } +/* line 380, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .rating ul { color: #f5f7fa; } +/* line 383, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content p { margin-top: 10px; color: #babdc2; font-size: 14px; line-height: 24px; } +/* line 390, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list { margin-top: 10px; margin-bottom: 10px; } +/* line 394, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list h4 { font-size: 12px; color: #f5f7fa; @@ -1694,52 +2021,67 @@ sidebar .play .movie-detail .side-content .subtitles-list h4 { vertical-align: middle; margin-right: 5px; } +/* line 402, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul { display: inline-block; vertical-align: middle; } +/* line 406, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li { display: inline-block; vertical-align: top; } +/* line 410, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li span { width: 22px; height: 16px; display: inline-block; } +/* line 417, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-english { background-image: url(../images/english.png); } +/* line 418, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-french { background-image: url(../images/french.png); } +/* line 419, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-dutch { background-image: url(../images/dutch.png); } +/* line 420, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-portuguese { background-image: url(../images/portuguese.png); } +/* line 421, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-romanian { background-image: url(../images/romanian.png); } +/* line 422, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-spanish { background-image: url(../images/spanish.png); } +/* line 423, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-turkish { background-image: url(../images/turkish.png); } +/* line 424, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-brazilian { background-image: url(../images/brazilian.png); } +/* line 425, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-italian { background-image: url(../images/italian.png); } +/* line 426, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-hungarian { background-image: url(../images/hungarian.png); } +/* line 427, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content .subtitles-list ul li .flag.flag-bulgarian { background-image: url(../images/bulgarian.png); } +/* line 433, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content a.play-button { background: #286dc4; background-image: linear-gradient(to bottom, #3076ce 0%, #175ab0 100%); @@ -1752,30 +2094,37 @@ sidebar .play .movie-detail .side-content a.play-button { margin-top: 10px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } +/* line 445, ../sass/_moviedetails.scss */ sidebar .play .movie-detail .side-content a.play-button:hover { background-image: linear-gradient(to bottom, #4387de 0%, #175ab0 100%); } +/* line 454, ../sass/_moviedetails.scss */ .sidebar-open li.movie { opacity: 0.25; } +/* line 457, ../sass/_moviedetails.scss */ .sidebar-open li.movie.active { opacity: 1; } +/* line 460, ../sass/_moviedetails.scss */ .sidebar-open li.movie.active a { box-shadow: 0 0 0 3px #3498db; border-radius: 3px; } +/* line 464, ../sass/_moviedetails.scss */ .sidebar-open li.movie.active a i { opacity: 0 !important; } +/* line 470, ../sass/_moviedetails.scss */ .subtitles button { background: transparent; border: 0; padding: 0; } +/* line 477, ../sass/_moviedetails.scss */ .dropdown { position: relative; display: inline-block; @@ -1785,16 +2134,19 @@ sidebar .play .movie-detail .side-content a.play-button:hover { margin-right: 20px; margin-top: -8px; } +/* line 487, ../sass/_moviedetails.scss */ .dropdown.active .dropdown-text { background-color: white; z-index: 2; border-radius: 3px 3px 0 0; } +/* line 493, ../sass/_moviedetails.scss */ .dropdown.active .dropdown-content { opacity: 1; visibility: visible; } +/* line 500, ../sass/_moviedetails.scss */ .dropdown-text { cursor: pointer; position: absolute; @@ -1804,6 +2156,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { color: #333; text-shadow: 0 1px #fff; } +/* line 509, ../sass/_moviedetails.scss */ .dropdown-text:after { position: absolute; right: -10px; @@ -1816,6 +2169,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { border-color: #FFF transparent transparent transparent; } +/* line 522, ../sass/_moviedetails.scss */ .dropdown-toggle { font-size: 0; z-index: 1; @@ -1830,10 +2184,12 @@ sidebar .play .movie-detail .side-content a.play-button:hover { height: 37px; width: 60px; } +/* line 536, ../sass/_moviedetails.scss */ .dropdown-toggle:focus { outline: 0; } +/* line 539, ../sass/_moviedetails.scss */ .dropdown-content { list-style-type: none; position: absolute; @@ -1847,16 +2203,61 @@ sidebar .play .movie-detail .side-content a.play-button:hover { width: 40px; text-align: center; } +/* line 552, ../sass/_moviedetails.scss */ .dropdown-content a { display: block; padding: 4px; color: #333; text-shadow: 0 1px #fff; } +/* line 558, ../sass/_moviedetails.scss */ .dropdown-content a:hover { background: #E1E1E1; } +/* line 1, ../sass/_settings.scss */ +#settings { + background-color: #181817; +} +/* line 3, ../sass/_settings.scss */ +#settings form { + margin: 10px 50px 0 50px; +} +/* line 6, ../sass/_settings.scss */ +#settings form h1 { + font-weight: 200; + font-size: 34px; + color: #f5f7fa; + margin-bottom: 20px; +} +/* line 13, ../sass/_settings.scss */ +#settings form h2 { + font-size: 20px; + color: #286dc4; + margin-bottom: 15px; +} +/* line 19, ../sass/_settings.scss */ +#settings form .folder-input { + margin-top: 10px; +} +/* line 23, ../sass/_settings.scss */ +#settings form #settings-cacheLocation-input { + display: none; +} +/* line 27, ../sass/_settings.scss */ +#settings form #settings-cacheLocation-value { + display: inline-block; + min-width: 200px; + background-color: #282828; + border-radius: 2px; + padding: 3px; +} +/* line 35, ../sass/_settings.scss */ +#settings form .option { + margin: 10px 0 10px 20px; +} + +/* line 2, ../sass/_player.scss */ #video-container { display: none; height: 100%; @@ -1868,6 +2269,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { -webkit-app-region: no-drag; } +/* line 16, ../sass/_player.scss */ #video_player_close { position: absolute; z-index: 9999; @@ -1876,6 +2278,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { -webkit-app-region: no-drag; } +/* line 24, ../sass/_player.scss */ .vjs-default-skin .vjs_smallersub_button.vjs-control { float: right; line-height: 1.6em; @@ -1883,6 +2286,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { top: 5px; } +/* line 31, ../sass/_player.scss */ .vjs-default-skin .vjs_biggersub_button.vjs-control { float: right; line-height: 1.6em; @@ -1890,6 +2294,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { top: 6px; } +/* line 38, ../sass/_player.scss */ .vjs-default-skin .vjs_biggersub_button.vjs-control:before { font-family: FontAwesome; content: "\f031"; @@ -1901,6 +2306,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { vertical-align: inherit; } +/* line 49, ../sass/_player.scss */ .vjs-default-skin .vjs_smallersub_button.vjs-control:before { font-family: FontAwesome; content: "\f031"; @@ -1912,6 +2318,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { line-height: 2.4em; } +/* line 62, ../sass/_player.scss */ #video_player.vjs-user-inactive + #video_player_close { -webkit-transition: opacity 0.8s ease; -moz-transition: opacity 0.8s ease; @@ -1921,6 +2328,7 @@ sidebar .play .movie-detail .side-content a.play-button:hover { pointer-events: none; } +/* line 68, ../sass/_player.scss */ #video_player.vjs-user-active + #video_player_close { -webkit-transition: opacity 0.2s ease-out; -moz-transition: opacity 0.2s ease-out; @@ -1930,13 +2338,16 @@ sidebar .play .movie-detail .side-content a.play-button:hover { pointer-events: all; } +/* line 74, ../sass/_player.scss */ #video_player.vjs-user-inactive video { cursor: none; } +/* line 79, ../sass/_player.scss */ #video_player.video-js { font-size: inherit; } +/* line 82, ../sass/_player.scss */ #video_player.video-js .vjs-text-track { font-size: 1em; line-height: 140%; @@ -1944,34 +2355,43 @@ sidebar .play .movie-detail .side-content a.play-button:hover { margin-bottom: 1em; text-shadow: 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black, 0 0 0.2em black; } +/* line 92, ../sass/_player.scss */ #video_player.video-js .vjs-menu-item.vjs-selected { font-weight: bold; color: #286dc4; } +/* line 97, ../sass/_player.scss */ #video_player.video-js .vjs-text-track-display { font-size: 1em; pointer-events: none; } +/* line 101, ../sass/_player.scss */ #video_player.video-js .vjs-loading-spinner { font-size: 1em; } +/* line 102, ../sass/_player.scss */ #video_player.video-js .vjs-big-play-button { font-size: 1em; } +/* line 103, ../sass/_player.scss */ #video_player.video-js .vjs-control-bar { font-size: 10px; } +/* line 104, ../sass/_player.scss */ #video_player.video-js .vjs-menu-item { color: #000; } +/* line 105, ../sass/_player.scss */ #video_player.video-js .vjs-seek-handle { display: none; } +/* line 111, ../sass/_player.scss */ body.watching #header, body.watching #notification, body.watching #catalog-select, body.watching .container { visibility: hidden; } +/* line 2, ../sass/_probablyuseless.scss */ .torrent-health { display: inline-block; padding: 3px 5px; @@ -1981,36 +2401,44 @@ body.watching #header, body.watching #notification, body.watching #catalog-selec font-weight: bold; text-transform: capitalize; } +/* line 11, ../sass/_probablyuseless.scss */ .torrent-health.bad { background: red; } +/* line 12, ../sass/_probablyuseless.scss */ .torrent-health.medium { background: yellow; } +/* line 13, ../sass/_probablyuseless.scss */ .torrent-health.good { background: limegreen; } +/* line 14, ../sass/_probablyuseless.scss */ .torrent-health.excellent { background: green; } +/* line 17, ../sass/_probablyuseless.scss */ .content { float: left; margin-left: 30px; text-shadow: 0 -1px 0 #000; width: 660px; } +/* line 23, ../sass/_probablyuseless.scss */ .content h2 { font-size: 32px; margin: 0; font-weight: bold; } +/* line 30, ../sass/_probablyuseless.scss */ .content p.metadata { color: #196cb2; font-size: 14px; font-weight: 700; margin: 10px 0; } +/* line 37, ../sass/_probablyuseless.scss */ .content p.description { color: #777; font-family: 'Helvetica Neue', sans-serif; @@ -2020,9 +2448,11 @@ body.watching #header, body.watching #notification, body.watching #catalog-selec /* -- Don't find any of this properties anywhere in the popcorn-app */ +/* line 51, ../sass/_probablyuseless.scss */ .tabs { border-bottom: 1px solid #272727; } +/* line 54, ../sass/_probablyuseless.scss */ .tabs li { bottom: -1px; color: #333; @@ -2030,9 +2460,11 @@ body.watching #header, body.watching #notification, body.watching #catalog-selec padding: 10px 20px; position: relative; } +/* line 61, ../sass/_probablyuseless.scss */ .tabs li:hover { color: #FFF; } +/* line 63, ../sass/_probablyuseless.scss */ .tabs li.active { border-bottom: 3px solid #FFF; color: #FFF; @@ -2040,19 +2472,23 @@ body.watching #header, body.watching #notification, body.watching #catalog-selec font-weight: 700; } +/* line 72, ../sass/_probablyuseless.scss */ .tab-content { margin: 20px 0; } +/* line 74, ../sass/_probablyuseless.scss */ .cast ul li { font-size: 15px; font-weight: 700; padding: 10px; position: relative; } +/* line 80, ../sass/_probablyuseless.scss */ .cast ul li:hover { background: #222; } +/* line 82, ../sass/_probablyuseless.scss */ .cast ul li span { color: #444; font-weight: 400; diff --git a/images/maltese.png b/images/maltese.png new file mode 100644 index 00000000..2a6239f3 Binary files /dev/null and b/images/maltese.png differ diff --git a/images/settings.png b/images/settings.png new file mode 100644 index 00000000..1eb0e0c5 Binary files /dev/null and b/images/settings.png differ diff --git a/images/settings_over.png b/images/settings_over.png new file mode 100644 index 00000000..d9832fa4 Binary files /dev/null and b/images/settings_over.png differ diff --git a/index.html b/index.html index cf5b5b34..c43976b0 100644 --- a/index.html +++ b/index.html @@ -21,6 +21,7 @@

Popcorn Time

@@ -40,9 +41,30 @@

Movies

+
+ + - + + + + - + + + + - + + diff --git a/js/app.js b/js/app.js index 6fa879aa..c9c42295 100644 --- a/js/app.js +++ b/js/app.js @@ -33,7 +33,10 @@ var tmpFolder = path.join(os.tmpDir(), 'Popcorn-Time'), // i18n module (translations) - i18n = require("i18n"); + i18n = require("i18n"), + + // Enable User tracking + enableUserTracking = true; isWin = (process.platform === 'win32'); isLinux = (process.platform === 'linux'); @@ -50,10 +53,11 @@ var App = { Controller: {}, View: {}, Model: {}, - Page: {} + Page: {}, + Scrapers: {}, + Providers: {} }; - // render header buttons $("#header").html(_.template($('#header-tpl').html(), {buttons: BUTTON_ORDER})); diff --git a/js/frontend/controllers/filter.js b/js/frontend/controllers/filter.js index ba259e52..5eb98b36 100644 --- a/js/frontend/controllers/filter.js +++ b/js/frontend/controllers/filter.js @@ -3,23 +3,33 @@ App.Controller.FilterGenre = function (genre, page) { if (!App.Page.FilterGenre) { // Create page App.Page.FilterGenre = new App.View.Page({ - id: 'category-list' + id: 'movie-list' }); } - // Create movie list - var movieList = new App.View.MovieList({ + + var Scrapper = App.currentScrapper; + + var movieCollection = new Scrapper([], { searchTerm: null, genre: genre, page: page }); + + movieCollection.fetch(); + + // Create movie list + var movieList = new App.View.MovieList({ + model: movieCollection + }); + // Clean up if first page if (!page || page == '1'){ $('.movie-list').first().empty(); App.Page.FilterGenre.show(); } - + userTracking.pageview('/movies/'+genre + ((page && page > 1) ? '?page='+page : ''), genre.capitalize() + ' Movies').send(); - + setTimeout(function(){ movieList.constructor.busy = false; }, 5000); diff --git a/js/frontend/controllers/home.js b/js/frontend/controllers/home.js index ad4ccf53..6c2ccbd1 100644 --- a/js/frontend/controllers/home.js +++ b/js/frontend/controllers/home.js @@ -6,12 +6,22 @@ App.Controller.Home = function (page) { id: 'movie-list' }); } - // Create movie list - var movieList = new App.View.MovieList({ + + var Scrapper = App.currentScrapper; + + var movieCollection = new Scrapper([], { searchTerm: null, genre: null, page: page }); + + movieCollection.fetch(); + + // Create movie list + var movieList = new App.View.MovieList({ + model: movieCollection + }); + // Clean up if first page if (!page || page == '1'){ $('.movie-list').first().empty(); @@ -23,7 +33,7 @@ App.Controller.Home = function (page) { } userTracking.pageview('/movies/popular'+((page && page > 1) ? '?page='+page : ''), 'Popular Movies').send(); - + setTimeout(function(){ movieList.constructor.busy = false; }, 5000); diff --git a/js/frontend/controllers/search.js b/js/frontend/controllers/search.js index f1f4a1a1..a2825d37 100644 --- a/js/frontend/controllers/search.js +++ b/js/frontend/controllers/search.js @@ -3,16 +3,25 @@ App.Controller.Search = function (searchTerm, page) { if (App.Page.Search) { // Create page App.Page.Search = new App.View.Page({ - id: 'search-list' - }); + id: 'movie-list' + }); } - // Create movie list - var movieList = new App.View.MovieList({ + + var Scrapper = App.currentScrapper; + + var movieCollection = new Scrapper([], { keywords: searchTerm, genre: null, page: page }); - + + movieCollection.fetch(); + + // Create movie list + var movieList = new App.View.MovieList({ + model: movieCollection + }); + // Clean up if first page if (!page || page == '1'){ console.log('Searching for ' + searchTerm); @@ -21,7 +30,7 @@ App.Controller.Search = function (searchTerm, page) { window.initialLoading = true; App.Page.Search.show(); } - + userTracking.pageview('/movies/search?q='+encodeURIComponent(searchTerm)+((page && page > 1) ? '&page='+page : '')).send(); setTimeout(function(){ diff --git a/js/frontend/models/movie.js b/js/frontend/models/movie.js index 2c8c1da9..c172f164 100644 --- a/js/frontend/models/movie.js +++ b/js/frontend/models/movie.js @@ -1,7 +1,7 @@ App.Model.Movie = Backbone.Model.extend({ buildBasicView: function () { - + var model = this; // This is mostly used for reporting @@ -11,7 +11,7 @@ App.Model.Movie = Backbone.Model.extend({ model.view = new App.View.MovieListItem({ model: model }); - + model.trigger('rottenloaded'); }, @@ -23,29 +23,6 @@ App.Model.Movie = Backbone.Model.extend({ return this.get('title'); }, - // DEPRECATED - setRottenInfo: function () { - var model = this; - - App.findMovieInfo(model.get('imdb'), function (data) { - - model.set('infoLoaded', true); - model.set('image', data.image); - model.set('bigImage', data.image); - model.set('backdrop', data.backdrop); - model.set('title', data.title); - model.set('synopsis', data.overview); - model.set('voteAverage', data.voteAverage); - model.set('runtime', data.runtime); - - model.view = new App.View.MovieListItem({ - model: model - }); - - model.trigger('rottenloaded'); - }); - }, - // DEPRECATED setSubtitles: function () { var model = this; @@ -61,10 +38,17 @@ App.Model.Movie = Backbone.Model.extend({ }); }, + fetchMissingData: function() { + if ( !this.get('hasMetadata') ) { + App.Providers.metadata.fetch(this); + } + if ( !this.get('hasSubtitle') ) { + App.Providers.subtitle.fetch(this); + } + }, + initialize: function () { this.buildBasicView(); - //this.setRottenInfo(); - //this.setSubtitles(); this.calculateTorrentHealth(); }, diff --git a/js/frontend/player.js b/js/frontend/player.js index 351f4e06..5bd10214 100644 --- a/js/frontend/player.js +++ b/js/frontend/player.js @@ -8,15 +8,15 @@ var playTorrent = window.playTorrent = function (torrent, subs, movieModel, call // Create a unique file to cache the video (with a microtimestamp) to prevent read conflicts var tmpFilename = ( torrent.toLowerCase().split('/').pop().split('.torrent').shift() ).slice(0,100); tmpFilename = tmpFilename.replace(/([^a-zA-Z0-9-_])/g, '_') + '.mp4'; - var tmpFile = path.join(tmpFolder, tmpFilename); + var tmpFile = path.join(App.settings.cacheLocation, tmpFilename); var numCores = (os.cpus().length > 0) ? os.cpus().length : 1; var numConnections = 100; - // Start Popcornflix (Peerflix) - var popcornflix = require('peerflix'); + // Start Peerflix + var peerflix = require('peerflix'); - videoStreamer = popcornflix(torrent, { + videoStreamer = peerflix(torrent, { // Set the custom temp file path: tmpFile, //port: 554, @@ -68,7 +68,9 @@ var playTorrent = window.playTorrent = function (torrent, subs, movieModel, call $("body").addClass("sidebar-open").removeClass("loading"); // Stop processes - flix.clearCache(); + if(App.settings.autoClearCache) { + flix.clearCache(); + } flix.destroy(); videoStreamer = null; diff --git a/js/frontend/providers/themoviedb.js b/js/frontend/providers/themoviedb.js index eb1538b5..d1527865 100644 --- a/js/frontend/providers/themoviedb.js +++ b/js/frontend/providers/themoviedb.js @@ -1,15 +1,16 @@ // Fix for https://github.com/visionmedia/superagent/issues/95 +var windowBak = window; var mdb = require('moviedb')(vendorAPIs.themoviedb.key), POSTER_PREFIX = 'http://image.tmdb.org/t/p/w342/', BACKDROP_PREFIX = 'http://image.tmdb.org/t/p/original/', last = +new Date(); -App.findMovieInfo = function (imdbId, callback) { +var findMovieInfo = function (imdbId, callback) { var doRequest = function () { // 1 sec because limit is 3 calls every second, and we need to use 2. if (last > +new Date() - 1000) { return setTimeout(function () { - App.findMovieInfo(imdbId, callback); + findMovieInfo(imdbId, callback); }, new Date() - last + 1000); } @@ -67,4 +68,24 @@ App.findMovieInfo = function (imdbId, callback) { doRequest(); } }); -}; \ No newline at end of file +}; + +var MdbProvider = { + fetch: function(model) { + var imdbId = model.get('imdb'); + findMovieInfo(imdbId, function(info){ + model.set({ + title: info.title, + voteAverage:info.voteAverage, + synopsis: info.overview, + runtime: info.runtime, + + image: info.image, + bigImage: info.image, + backdrop: info.backdrop + }); + }); + } +}; + +App.Providers.metadata = MdbProvider; diff --git a/js/frontend/providers/torrents.js b/js/frontend/providers/torrents.js deleted file mode 100644 index ab21f355..00000000 --- a/js/frontend/providers/torrents.js +++ /dev/null @@ -1,90 +0,0 @@ -App.getTorrentsCollection = function (options) { - - var url = 'http://subapi.com/'; - - var supportedLanguages = ['english', 'french', 'dutch', 'portuguese', 'romanian', 'spanish', 'turkish', 'brazilian', - 'italian', 'german', 'hungarian', 'russian', 'ukrainian', 'finnish', 'bulgarian', 'latvian']; - if (options.genre) { - url += options.genre.toLowerCase() + '.json'; - } else { - if (options.keywords) { - url += 'search.json?query=' + options.keywords; - } else { - url += 'popular.json'; - } - } - - if (options.page && options.page.match(/\d+/)) { - var str = url.match(/\?/) ? '&' : '?'; - url += str + 'page=' + options.page; - } - - var MovieTorrentCollection = Backbone.Collection.extend({ - url: url, - model: App.Model.Movie, - parse: function (data) { - - var movies = []; - - data.movies.forEach(function (movie) { - - var videos = {}; - var torrents = {}; - torrent = ''; - quality = ''; - var subtitles = {}; - - // Put the video and torrent list into a {quality: url} format - for( var k in movie.videos ) { - if( typeof videos[movie.videos[k].quality] == 'undefined' ) { - videos[movie.videos[k].quality] = movie.videos[k].url; - } - } - - for( var k in movie.torrents ) { - if( typeof torrents[movie.torrents[k].quality] == 'undefined' ) { - torrents[movie.torrents[k].quality] = movie.torrents[k].url; - } - } - - // Pick the worst quality by default - if( typeof torrents['720p'] != 'undefined' ){ quality = '720p'; torrent = torrents['720p']; } - else if( typeof torrents['1080p'] != 'undefined' ){ quality = '1080p'; torrent = torrents['1080p']; } - - for( var k in movie.subtitles ) { - if( supportedLanguages.indexOf(movie.subtitles[k].language) < 0 ){ continue; } - if( typeof subtitles[movie.subtitles[k].language] == 'undefined' ) { - subtitles[movie.subtitles[k].language] = movie.subtitles[k].url; - } - } - - if( (typeof movie.subtitles == 'undefined' || movie.subtitles.length == 0) && (typeof movie.videos == 'undefined' || movie.videos.length == 0) ){ return; } - - movies.push({ - imdb: movie.imdb_id, - title: movie.title, - year: movie.year, - runtime: movie.runtime, - synopsis: movie.synopsis, - voteAverage:movie.vote_average, - - image: movie.poster, - bigImage: movie.poster, - backdrop: movie.backdrop, - - quality: quality, - torrent: torrent, - torrents: torrents, - videos: videos, - subtitles: subtitles, - seeders: movie.seeders, - leechers: movie.leechers - }); - }); - - return movies; - } - }); - - return new MovieTorrentCollection(); -}; diff --git a/js/frontend/scrapers/scrapers.js b/js/frontend/scrapers/scrapers.js new file mode 100644 index 00000000..5e426037 --- /dev/null +++ b/js/frontend/scrapers/scrapers.js @@ -0,0 +1 @@ +App.currentScrapper = App.Scrapers.Yts; \ No newline at end of file diff --git a/js/frontend/scrapers/subapi.js b/js/frontend/scrapers/subapi.js new file mode 100644 index 00000000..4766e83b --- /dev/null +++ b/js/frontend/scrapers/subapi.js @@ -0,0 +1,91 @@ +var url = 'http://subapi.com/'; + +var supportedLanguages = ['english', 'french', 'dutch', 'portuguese', 'romanian', 'spanish', 'turkish', 'brazilian', + 'italian', 'german', 'hungarian', 'russian', 'ukrainian', 'finnish', 'bulgarian', 'latvian']; + +var SubApi = Backbone.Collection.extend({ + url: url, + model: App.Model.Movie, + + initialize: function(models, options) { + if (options.genre) { + this.url += options.genre.toLowerCase() + '.json'; + } else { + if (options.keywords) { + this.url += 'search.json?query=' + options.keywords; + } else { + this.url += 'popular.json'; + } + } + + if (options.page && options.page.match(/\d+/)) { + var str = this.url.match(/\?/) ? '&' : '?'; + this.url += str + 'page=' + options.page; + } + }, + + parse: function (data) { + + var movies = []; + + data.movies.forEach(function (movie) { + + var videos = {}; + var torrents = {}; + torrent = ''; + quality = ''; + var subtitles = {}; + + // Put the video and torrent list into a {quality: url} format + for( var k in movie.videos ) { + if( typeof videos[movie.videos[k].quality] == 'undefined' ) { + videos[movie.videos[k].quality] = movie.videos[k].url; + } + } + + for( var k in movie.torrents ) { + if( typeof torrents[movie.torrents[k].quality] == 'undefined' ) { + torrents[movie.torrents[k].quality] = movie.torrents[k].url; + } + } + + // Pick the worst quality by default + if( typeof torrents['720p'] != 'undefined' ){ quality = '720p'; torrent = torrents['720p']; } + else if( typeof torrents['1080p'] != 'undefined' ){ quality = '1080p'; torrent = torrents['1080p']; } + + for( var k in movie.subtitles ) { + if( supportedLanguages.indexOf(movie.subtitles[k].language) < 0 ){ continue; } + if( typeof subtitles[movie.subtitles[k].language] == 'undefined' ) { + subtitles[movie.subtitles[k].language] = movie.subtitles[k].url; + } + } + + if( (typeof movie.subtitles == 'undefined' || movie.subtitles.length == 0) && (typeof movie.videos == 'undefined' || movie.videos.length == 0) ){ return; } + + movies.push({ + imdb: movie.imdb_id, + title: movie.title, + year: movie.year, + runtime: movie.runtime, + synopsis: movie.synopsis, + voteAverage:movie.vote_average, + + image: movie.poster, + bigImage: movie.poster, + backdrop: movie.backdrop, + + quality: quality, + torrent: torrent, + torrents: torrents, + videos: videos, + subtitles: subtitles, + seeders: movie.seeders, + leechers: movie.leechers + }); + }); + + return movies; + } +}); + +App.Scrapers.SubApi = SubApi; \ No newline at end of file diff --git a/js/frontend/scrapers/yts.js b/js/frontend/scrapers/yts.js new file mode 100644 index 00000000..9fce3a49 --- /dev/null +++ b/js/frontend/scrapers/yts.js @@ -0,0 +1,89 @@ +var url = 'http://yts.re/api/list.json?sort=seeds&limit=50'; + +var Yts = Backbone.Collection.extend({ + url: url, + model: App.Model.Movie, + + initialize: function(models, options) { + if (options.keywords) { + this.url += '&keywords=' + options.keywords; + } + + if (options.genre) { + this.url += '&genre=' + options.genre; + } + + if (options.page && options.page.match(/\d+/)) { + this.url += '&set=' + options.page; + } + }, + + parse: function (data) { + var movies = [], + memory = {}; + + if (data.error || typeof data.MovieList === 'undefined') { + return movies; + } + + data.MovieList.forEach(function (movie) { + // No imdb, no movie. + if( typeof movie.ImdbCode != 'string' || movie.ImdbCode.replace('tt', '') == '' ){ return; } + + var torrents = {}; + torrents[movie.Quality] = movie.TorrentUrl; + + // Temporary object + var movieModel = { + imdb: movie.ImdbCode.replace('tt', ''), + title: movie.MovieTitleClean, + year: movie.MovieYear, + runtime: 0, + synopsis: "", + voteAverage:parseInt(movie.MovieRating, 10), + + image: movie.CoverImage, + bigImage: movie.CoverImage.replace(/_med\./, '_large.'), + backdrop: "", + + quality: movie.Quality, + torrent: movie.TorrentUrl, + torrents: torrents, + videos: {}, + subtitles: {}, + seeders: movie.TorrentSeeds, + leechers: movie.TorrentPeers, + + // YTS do not provide metadata and subtitle + hasMetadata:false, + hasSubtitle:true + }; + + var stored = memory[movieModel.imdb]; + + // Create it on memory map if it doesn't exist. + if (typeof stored === 'undefined') { + stored = memory[movieModel.imdb] = movieModel; + } + + if (stored.quality !== movieModel.quality && movieModel.quality === '720p') { + stored.torrent = movieModel.torrent; + stored.quality = '720p'; + } + + // Set it's correspondent quality torrent URL. + stored.torrents[movie.Quality] = movie.TorrentUrl; + + // Push it if not currently on array. + if (movies.indexOf(stored) === -1) { + movies.push(stored); + } + }); + + console.log('Torrents found:', data.MovieList.length); + + return movies; + } +}); + +App.Scrapers.Yts = Yts; \ No newline at end of file diff --git a/js/frontend/settings.js b/js/frontend/settings.js new file mode 100644 index 00000000..a5660ce6 --- /dev/null +++ b/js/frontend/settings.js @@ -0,0 +1,38 @@ +(function() { + +var localStorageKey = "user_settings"; + +// Default settings +var defaultSettings = { + cacheLocation: path.join(os.tmpDir(), 'Popcorn-Time'), + autoClearCache: true +}; + +if( !localStorage[localStorageKey] ) { + localStorage[localStorageKey] = "{}"; +} + +var Settings = function(){ + this.load(); +}; + +Settings.prototype.load = function() { + _.extend(this, JSON.parse(localStorage[localStorageKey])); + _.defaults(this, defaultSettings); +}; + +Settings.prototype.save = function() { + var self = this; + var data = {}; + _.each(this, function(v, k) { + if(self.hasOwnProperty(k)) { + data[k] = v; + } + }); + + localStorage[localStorageKey] = JSON.stringify(data); +}; + +App.settings = new Settings(); + +})(); \ No newline at end of file diff --git a/js/frontend/ui.js b/js/frontend/ui.js index 0792bb09..6f87b9fc 100644 --- a/js/frontend/ui.js +++ b/js/frontend/ui.js @@ -34,6 +34,7 @@ App.loader(true, i18n.__('loading')); // Handles general UI buttons, like maximization, etc jQuery(function ($) { + App.settingsPage = new App.View.Settings(); // Maximize, minimize $('.btn-os.max').on('click', function () { @@ -56,12 +57,20 @@ jQuery(function ($) { $('.btn-os.close').on('click', function () { win.close(); }); - + $('.btn-os.fullscreen').on('click', function () { win.toggleFullscreen(); $('.btn-os.fullscreen').toggleClass('active'); }); + $('.btn-os.settings').on('click', function () { + if( App.sidebar.isVisible() ) { + App.sidebar.hide(); + } + if( !App.settingsPage.isVisible() ) { + App.settingsPage.show(); + } + }); // The app loading close button $('.popcorn-load .btn-close').click(function(event){ @@ -98,6 +107,7 @@ jQuery(function ($) { App.Router.on('route', function () { // Ensure sidebar is hidden App.sidebar.hide(); + App.settingsPage.hide(); }); @@ -115,7 +125,7 @@ jQuery(function ($) { $('#catalog-select ul li.active').removeClass('active'); } }); - + $('.search i').on('click', function (evt) { var term = $.trim($('.search input').val()); diff --git a/js/frontend/views/listview.js b/js/frontend/views/listview.js index 78238b77..9174589f 100644 --- a/js/frontend/views/listview.js +++ b/js/frontend/views/listview.js @@ -15,12 +15,8 @@ App.View.MovieList = Backbone.View.extend({ // Bind element on existing list this.$el = $('.movie-list').first(); - this.collection = App.getTorrentsCollection(options); - - this.collection.fetch(); - - this.listenTo(this.collection, 'sync', this.render); - this.listenTo(this.collection, 'rottenloaded', this.render); + this.listenTo(this.model, 'sync', this.render); + this.listenTo(this.model, 'rottenloaded', this.render); }, empty: function () { @@ -34,14 +30,14 @@ App.View.MovieList = Backbone.View.extend({ App.loader(false); } - if (this.collection.length === 0) { + if (this.model.length === 0) { return this.empty(); } var movieList = this; - $.each(this.collection.models, function (index) { + $.each(this.model.models, function (index) { // Only append not yet appended elements this.view.render(); diff --git a/js/frontend/views/movie.js b/js/frontend/views/movie.js index 05da9162..4dffdbae 100644 --- a/js/frontend/views/movie.js +++ b/js/frontend/views/movie.js @@ -3,11 +3,11 @@ App.View.MovieListItem = Marionette.ItemView.extend({ className: 'movie', model: App.Model.Movie, id: function() { - return 'movie-'+this.model.get('imdb') + return 'movie-'+this.model.get('imdb'); }, events: { - 'click a': 'select' + 'click a': 'select', }, initialize: function () { diff --git a/js/frontend/views/page.js b/js/frontend/views/page.js index c3adc9d5..e88346f9 100644 --- a/js/frontend/views/page.js +++ b/js/frontend/views/page.js @@ -14,8 +14,8 @@ App.View.Page = Backbone.View.extend({ show: function () { // Fuck you UI. var $el = this.$el.hide(), - $pages = $('.page').addClass('notransition'), - $movies = $('.movie').removeClass('loaded'); + $pages = $el.find('.page').addClass('notransition'), + $movies = $el.find('.movie').removeClass('loaded'); // ontransitionend could be buggy here. setTimeout(function () { diff --git a/js/frontend/views/settings.js b/js/frontend/views/settings.js new file mode 100644 index 00000000..daa0f759 --- /dev/null +++ b/js/frontend/views/settings.js @@ -0,0 +1,90 @@ +var SettingsTemplate = $('#settings-tpl').html(); + +var checkboxToBool = function (val) { + return val === 'on'?true:false; +}; + +App.View.Settings = Backbone.View.extend({ + el: '#settings', + template: _.template(SettingsTemplate), + + events: { + 'click .closer': 'hide', + 'click .save': 'save', + 'click #settings-cacheLocation-browse': 'browseLocation', + 'click #settings-cacheLocation-value': 'browseLocation', + 'change #settings-cacheLocation-input': 'locationChanged', + 'change input': 'makeDirty' + }, + + getSettingsValue: function () { + var data = {}; + + var checked = this.$el.find('input[type=checkbox]').each(function(i, input){ + input = $(input); + data[input.attr('name')] = input.is(':checked'); + }); + + this.$el.find('input').not(checked).each(function(i, input) { + input = $(input); + data[input.attr('name')] = input.val(); + }); + + this.$el.find('input[not_empty]').each(function(i, input) { + input = $(input); + if(_.isEmpty(input.val())) { + delete data[input.attr('name')]; + } + }); + + return data; + }, + + save: function (evt) { + evt.preventDefault(); + var data = this.getSettingsValue(); + _.extend(App.settings, data); + App.settings.save(); + this.resetDirty(); + }, + + render: function () { + this.$el.html(this.template(App.settings)); + }, + + isVisible: function () { + return !this.$el.is('.hidden'); + }, + + hide: function () { + $('body').removeClass('sidebar-open'); + this.$el.addClass('hidden'); + }, + + show: function () { + $('body').removeClass().addClass('sidebar-open'); + this.$el.removeClass('hidden'); + this.render(); + this.resetDirty(); + }, + + makeDirty: function () { + this.$el.find('.save').removeAttr('disabled'); + }, + + resetDirty: function () { + this.$el.find('.save').attr('disabled','disabled'); + }, + + browseLocation: function (evt) { + evt.preventDefault(); + $('#settings-cacheLocation-input').click(); + }, + + locationChanged: function (evt) { + var newLoc = $('#settings-cacheLocation-input').val(); + if(newLoc) { + $('#settings-cacheLocation-value').text(newLoc); + } + } +}); diff --git a/js/frontend/views/sidebar.js b/js/frontend/views/sidebar.js index 7e5c8333..5d4dbdbc 100644 --- a/js/frontend/views/sidebar.js +++ b/js/frontend/views/sidebar.js @@ -92,7 +92,8 @@ App.View.Sidebar = Backbone.View.extend({ load: function (model) { // TODO: QUEUE PLAY BUTTON - this.listenTo(model, 'change:subtitles', this.render); + this.listenTo(model, 'change', this.render); + model.fetchMissingData(); this.model = model; this.render(); diff --git a/js/language.js b/js/language.js index 240469ed..478e90f7 100644 --- a/js/language.js +++ b/js/language.js @@ -2,7 +2,7 @@ i18n.configure({ defaultLocale: 'en', locales: ['ar', 'bg', 'ca', 'da', 'de', 'el', 'en', 'es', 'eu', 'fr', 'he', 'hu', 'it', 'ja', 'kr', - 'lt', 'lv', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sk', 'sv', 'tr', 'uk', 'zh-cn', 'zh-tw'], + 'lt', 'lv', 'mt', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sk', 'sv', 'tr', 'uk', 'zh-cn', 'zh-tw'], directory: './language' }); diff --git a/js/tracking.js b/js/tracking.js index 9c03536a..a1a75917 100644 --- a/js/tracking.js +++ b/js/tracking.js @@ -1,6 +1,13 @@ // Tracking var getTrackingId = function(){ - +<<<<<<< HEAD + //Check if user tracking is enabled + if( !enableUserTracking ) return null; + +======= + // Disable tracking TODO: Remove all tracking code + return null; +>>>>>>> upstream/master var clientId = Settings.get('trackingId'); if( typeof clientId == 'undefined' || clientId == null || clientId == '' ) { @@ -25,9 +32,6 @@ var getTrackingId = function(){ return clientId; }; -var ua = require('universal-analytics'); - - if( getTrackingId() == null ) { // Don't report anything if we don't have a trackingId var dummyMethod = function(){ return {send:function(){}}; }; @@ -82,9 +86,9 @@ else if( typeof __isUpgradeInstall != 'undefined' && __isUpgradeInstall == true // Todo: Remove Upgrade in the next version to prevent double counting of device stats (we'd send stats once per version) -if( (typeof __isNewInstall != 'undefined' && __isNewInstall == true) || +if( (typeof __isNewInstall != 'undefined' && __isNewInstall == true) || (typeof __isUpgradeInstall != 'undefined' && __isUpgradeInstall == true) ) { - + // General Device Stats userTracking.event('Device Stats', 'Version', Settings.get('version') + (isDebug ? '-debug' : '') ).send(); userTracking.event('Device Stats', 'Type', getOperatingSystem().capitalize()).send(); diff --git a/js/updater.js b/js/updater.js deleted file mode 100644 index 3b8f1e20..00000000 --- a/js/updater.js +++ /dev/null @@ -1,34 +0,0 @@ - -// Check if there's a newer version and shows a prompt if that's the case -var checkForUpdates = function() { - var http = require('http'); - - var currentOs = getOperatingSystem(); - // We may want to change this in case the detection fails - if( ! currentOs ){ return; } - - http.get(Settings.get('updateNotificationUrl'), function(res){ - var data = ''; - res.on('data', function(chunk){ data += chunk; }); - - res.on('end', function(){ - try { - var updateInfo = JSON.parse(data); - } catch(e){ return; } - - if( ! updateInfo ){ return; } - - if( updateInfo[currentOs].version > Settings.get('version') ) { - // Check if there's a newer version and show the update notification - $('#notification').html( - i18n.__('UpgradeVersionDescription', updateInfo[currentOs].versionName) + - ' '+ i18n.__('UpgradeVersion') + '' - ); - $('body').addClass('has-notification'); - } - }); - - }) -}; - -checkForUpdates(); diff --git a/language/en.json b/language/en.json index f2aab380..5d726dcd 100644 --- a/language/en.json +++ b/language/en.json @@ -1,63 +1,70 @@ { - "quit": "Quit", - "cancel": "Cancel", - "beforeQuit": "Are you sure you want to quit?", - "loading": "Please wait...", - "loadingVideo": "Buffering video, please wait", - "searchLoading": "Searching...", - "noResults": "No results found for your query.", - "search": "Search", - "movies": "Movies", - "subtitledIn": "Subtitled in", - "quality": "Quality", - "watchItNow": "Watch It Now", - "durationUnit": "min", - "connecting": "Connecting...", - "startingDownload": "Starting Download...", - "downloading": "Downloading...", - "UpgradeVersion": "Update Popcorn Time", - "UpgradeVersionDescription": "Popcorn Time %s was just released. You should get it now!", - "legalDisclaimer": "Popcorn Time downloads and seeds movies using torrents, which may not be legal in your country.", - "legalDisclaimerResponsible": "We are not responsible for any problems that may arise, so make sure you understand our Terms and Conditions before using the app.", - "legalDisclaimerAccept": "I understand", - "legalDisclaimerCancel": "Leave", - "genres": { - "all": "Popular", - "action": "Action", - "adventure": "Adventure", - "animation": "Animation", - "biography": "Biography", - "comedy": "Comedy", - "crime": "Crime", - "documentary": "Documentary", - "drama": "Drama", - "family": "Family", - "fantasy": "Fantasy", - "film-noir": "Film-Noir", - "history": "History", - "horror": "Horror", - "music": "Music", - "musical": "Musical", - "mystery": "Mystery", - "romance": "Romance", - "sci-fi": "Sci-Fi", - "short": "Short", - "sport": "Sport", - "thriller": "Thriller", - "war": "War", - "western": "Western" - }, - "french": "French", - "english": "English", - "spanish": "Spanish", - "swedish": "Swedish", - "portuguese": "Portuguese", - "romanian": "Romanian", - "turkish": "Turkish", - "dutch": "Dutch", - "italian": "Italian", - "danish": "Danish", - "arabic": "Arabic", - "korean": "Korean", - "hungarian": "Hungarian", - "bulgarian": "Bulgarian"} + "quit": "Quit", + "cancel": "Cancel", + "beforeQuit": "Are you sure you want to quit?", + "loading": "Please wait...", + "loadingVideo": "Buffering video, please wait", + "searchLoading": "Searching...", + "noResults": "No results found for your query.", + "search": "Search", + "movies": "Movies", + "subtitledIn": "Subtitled in", + "quality": "Quality", + "watchItNow": "Watch It Now", + "durationUnit": "min", + "connecting": "Connecting...", + "startingDownload": "Starting Download...", + "downloading": "Downloading...", + "UpgradeVersion": "Update Popcorn Time", + "UpgradeVersionDescription": "Popcorn Time %s was just released. You should get it now!", + "legalDisclaimer": "Popcorn Time downloads and seeds movies using torrents, which may not be legal in your country.", + "legalDisclaimerResponsible": "We are not responsible for any problems that may arise, so make sure you understand our Terms and Conditions before using the app.", + "legalDisclaimerAccept": "I understand", + "legalDisclaimerCancel": "Leave", + "genres": { + "all": "Popular", + "action": "Action", + "adventure": "Adventure", + "animation": "Animation", + "biography": "Biography", + "comedy": "Comedy", + "crime": "Crime", + "documentary": "Documentary", + "drama": "Drama", + "family": "Family", + "fantasy": "Fantasy", + "film-noir": "Film-Noir", + "history": "History", + "horror": "Horror", + "music": "Music", + "musical": "Musical", + "mystery": "Mystery", + "romance": "Romance", + "sci-fi": "Sci-Fi", + "short": "Short", + "sport": "Sport", + "thriller": "Thriller", + "war": "War", + "western": "Western" + }, + "french": "French", + "english": "English", + "spanish": "Spanish", + "swedish": "Swedish", + "portuguese": "Portuguese", + "romanian": "Romanian", + "turkish": "Turkish", + "dutch": "Dutch", + "italian": "Italian", + "danish": "Danish", + "arabic": "Arabic", + "korean": "Korean", + "hungarian": "Hungarian", + "bulgarian": "Bulgarian", + "Settings": "Settings", + "Cache": "Cache", + "Cache location": "Cache location", + "Browse...": "Browse...", + "Save": "Save", + "Auto clear cache": "Auto clear cache" +} \ No newline at end of file diff --git a/language/fr.json b/language/fr.json index 8e3fe38a..a774d139 100644 --- a/language/fr.json +++ b/language/fr.json @@ -66,5 +66,12 @@ "arabic": "Arabe", "korean": "Coréen", "hungarian": "Hongrois", - "bulgarian": "Bulgare" + "bulgarian": "Bulgare", + + "Settings": "Paramètres", + "Cache": "Cache", + "Cache location": "Répertoire de téléchargement", + "Browse...": "Parcourir...", + "Save": "Enregistrer", + "Auto clear cache": "Vider automatiquement la cache" } diff --git a/language/mt.json b/language/mt.json new file mode 100644 index 00000000..8885b01d --- /dev/null +++ b/language/mt.json @@ -0,0 +1,64 @@ +{ + "quit": "Ohroġ", + "cancel": "Ikkanċella", + "beforeQuit": "Ċert li trid tohroġ?", + "loading": "Stenna ftit...", + "loadingVideo": "Il-video qiegħed jillowdja, stenna ftit", + "searchLoading": "Qed infittex...", + "noResults": "L-ebda riżultati ma instabu.", + "search": "Fittex", + "movies": "Films", + "subtitledIn": "Sottotitolat fi", + "quality": "Kwalità", + "watchItNow": "Ara issa", + "durationUnit": "min", + "connecting": "Qed tikkonnetja...", + "startingDownload": "Ser nibda niddownloadja...", + "downloading": "Qed niddownloadja...", + "UpgradeVersion": "Updatja Popcorn Time", + "UpgradeVersionDescription": "Popcorn Time %s għadu kif ħareg. Imissek tniżżlu issa!", + "legalDisclaimer": "Popcorn Time jiddownloadja u jisseedja films billi juża torrents, li jistaw ma jkunux legali fil-pajjiż tiegħek.", + "legalDisclaimerResponsible": "Aħna maħniex responsabbli għal kwalunkwe` problemi illi jistaw jinqalaw, kun żgur li tifhem it-termini u il-kundizzjonijiet qabel ma tuża` din l-applikazzjoni.", + "legalDisclaimerAccept": "Nifhem", + "legalDisclaimerCancel": "Nitlaq", + "genres": { + "all": "Popolari", + "action": "Azzjoni", + "adventure": "Avventura", + "animation": "Animazzjoni", + "biography": "Bijografija", + "comedy": "Kummidja", + "crime": "Krimini", + "documentary": "Dokumentarju", + "drama": "Drama", + "family": "Familja", + "fantasy": "Fantażija", + "film-noir": "Film-Noir", + "history": "Storja", + "horror": "Orrur", + "music": "Mużika", + "musical": "Mużikali", + "mystery": "Misteru", + "romance": "Rumanz", + "sci-fi": "Xjenza", + "short": "Qasir", + "sport": "Sport", + "thriller": "Thriller", + "war": "Gwerra", + "western": "Western" + }, + "french": "Franċiż", + "english": "Ingliż", + "spanish": "Spanjol", + "swedish": "Żvediż", + "portuguese": "Portugiż", + "romanian": "Rumen", + "turkish": "Tork", + "dutch": "Ġermaniż", + "italian": "Taljan", + "danish": "Daniż", + "arabic": "Għarbi", + "korean": "Korean", + "hungarian": "Hungeriż", + "bulgarian": "Bulgariż", + "maltese": "Malti"} diff --git a/package.json b/package.json index 7205320f..48a72c87 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,13 @@ "name": "Popcorn-Time", "repository": { "type": "git", - "url": "https://github.com/popcorn-time/popcorn-app.git" + "url": "https://github.com/isra17/popcorn-app.git" }, "main": "app://host/index.html", "version": "0.2.0", "repository": { "type": "git", - "url": "https://github.com/popcorn-time/popcorn-app" + "url": "https://github.com/isra17/popcorn-app" }, "window": { "title": "Popcorn Time", @@ -32,7 +32,7 @@ "network-address" : "git+https://github.com/gpt-modules/network-address.git", "node-uuid" : "git+https://github.com/gpt-modules/node-uuid.git", "numeral" : "git+https://github.com/gpt-modules/numeral-js.git", - "popcornflix" : "git+https://github.com/popcorn-time/popcornflix.git", + "peerflix" : "git+https://github.com/mafintosh/peerflix.git", "request" : "git+https://github.com/gpt-modules/request.git", "universal-analytics" : "git+https://github.com/gpt-modules/universal-analytics.git", "url" : "git+https://github.com/gpt-modules/url.git", diff --git a/sass/_layout.scss b/sass/_layout.scss index 12a5deea..5e8c0ed1 100644 --- a/sass/_layout.scss +++ b/sass/_layout.scss @@ -135,7 +135,7 @@ a { text-decoration: none; } left: 15px; top: 5px; } - + &:hover .btn-os { color: rgba(0, 0, 0, 0.8); } button { @@ -183,7 +183,24 @@ a { text-decoration: none; } &.fullscreen.active::before { content: "\e00B"; } - + &.fullscreen:hover{color:#b2b2b2;} + + &.settings { + background: transparent; + background-image: url(../images/settings.png); + background-repeat: no-repeat; + background-position: center center; + margin: 0; + margin-top: 3px; + width: 32px; + height: 29px; + border-radius: 0; + display:block; + + &:hover { + background-image: url(../images/settings_over.png); + } + } } } } @@ -372,13 +389,13 @@ body.has-notification { border: 2px solid #FFF; overflow: hidden; padding: 3px; - + .progress { @include transition(width 0.2s ease); display: block; height: 14px; width: 0%; - min-width: 5.5%; + min-width: 5.5%; background: #FFF; border-radius: 40px; } @@ -405,7 +422,7 @@ body.has-notification { left: 15px; -webkit-app-region: no-drag; } - + &.withProgressBar { .progressbar { display: block; } .progressinfo { display: block; } @@ -465,7 +482,7 @@ body.has-notification { .btn { padding: 1.1em 3em; font-size:18px; - + &.continue { font-size: 18px; font-weight: bold; diff --git a/sass/_moviedetails.scss b/sass/_moviedetails.scss index 4e0d6c36..a4009164 100644 --- a/sass/_moviedetails.scss +++ b/sass/_moviedetails.scss @@ -1,5 +1,5 @@ -// Sidebar -sidebar { +// Page loaded on the left +sidebar, #settings { right: 0; position: absolute; height: 100%; @@ -17,6 +17,30 @@ sidebar { -webkit-transform: translate(100%, 0); } + // To close sidebar - .movie-detail + .closer { + position: absolute; + top: 0; + left: 0; + height: 30px; + width: 30px; + z-index: 300; + cursor: pointer; + + &:hover i { opacity: 1; } + + i { + color: #fff; + position: absolute; + left: 8px; + top: 8px; + opacity: 0.5; + text-shadow: 0 0 5px #000; + } + } +} + +sidebar { .play { @include scrollable(); background: #000; @@ -75,7 +99,7 @@ sidebar { // By using padding-bottom with a fixed width we can create a container that always keeps that ratio. width: 100%; padding-bottom: 100% * 1.5; - + overflow: hidden; border-radius: 4px; background: #000; @@ -116,28 +140,6 @@ sidebar { height: 100%; display: table; - // To close sidebar - .movie-detail - .closer { - position: absolute; - top: 0; - left: 0; - height: 30px; - width: 30px; - z-index: 300; - cursor: pointer; - - &:hover i { opacity: 1; } - - i { - color: #fff; - position: absolute; - left: 8px; - top: 8px; - opacity: 0.5; - text-shadow: 0 0 5px #000; - } - } - .poster-cont, .side-content { display: table-cell; @@ -423,6 +425,7 @@ sidebar { &.flag-italian { background-image: url(../images/italian.png); } &.flag-hungarian { background-image: url(../images/hungarian.png); } &.flag-bulgarian { background-image: url(../images/bulgarian.png); } + &.flag-maltese { background-image: url(../images/maltese.png); } } } } @@ -487,7 +490,7 @@ sidebar { z-index: 2; border-radius: 3px 3px 0 0; } - + .dropdown-content { opacity: 1; visibility: visible; diff --git a/sass/_settings.scss b/sass/_settings.scss new file mode 100644 index 00000000..3b0e9166 --- /dev/null +++ b/sass/_settings.scss @@ -0,0 +1,39 @@ +#settings { + background-color: #181817; + form { + margin: 10px 50px 0 50px; + + h1 { + font-weight: 200; + font-size: 34px; + color: #f5f7fa; + margin-bottom: 20px; + } + + h2 { + font-size: 20px; + color: #286dc4; + margin-bottom: 15px; + } + + .folder-input { + margin-top: 10px; + } + + #settings-cacheLocation-input { + display: none; + } + + #settings-cacheLocation-value { + display: inline-block; + min-width: 200px; + background-color: #282828; + border-radius: 2px; + padding: 3px; + } + + .option { + margin: 10px 0 10px 20px; + } + } +} \ No newline at end of file diff --git a/sass/_utils.scss b/sass/_utils.scss index c4da3e81..5af52f6f 100644 --- a/sass/_utils.scss +++ b/sass/_utils.scss @@ -49,5 +49,44 @@ } } } +} +.medium-button { + background: #286dc4; + background-image: linear-gradient(to bottom, #3076ce 0%, #175ab0 100%); + color: #FFF; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + padding: 14px 26px; + border-radius: 2px; + display: inline-block; + margin-top: 10px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + + &:hover { + background-image: linear-gradient(to bottom, #4387de 0%, #175ab0 100%); + } + + &[disabled] { + background-image: linear-gradient(to bottom, #ccc 0%, #777 100%); + } +} + +.small-button { + background: #286dc4; + background-image: linear-gradient(to bottom, #3076ce 0%, #175ab0 100%); + color: #FFF; + font-weight: bold; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + padding: 4px 10px; + border-radius: 2px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); + + &:hover { + background-image: linear-gradient(to bottom, #4387de 0%, #175ab0 100%); + } + + &[disabled] { + background-image: linear-gradient(to bottom, #ccc 0%, #777 100%); + } } \ No newline at end of file diff --git a/sass/app.scss b/sass/app.scss index a204c9a6..41c5fcee 100644 --- a/sass/app.scss +++ b/sass/app.scss @@ -11,6 +11,7 @@ @import '_layout'; @import '_movielist'; @import '_moviedetails'; +@import '_settings'; @import '_player'; @import '_probablyuseless'; diff --git a/superagent-fix-node-webkit.patch b/superagent-fix-node-webkit.patch new file mode 100644 index 00000000..e65e8cbb --- /dev/null +++ b/superagent-fix-node-webkit.patch @@ -0,0 +1,8 @@ +--- node_modules/moviedb/node_modules/superagent/index.js 2012-10-09 11:48:42.000000000 -0400 ++++ node_modules-mod/moviedb/node_modules/superagent/index.js 2014-03-14 18:55:42.794616590 -0400 +@@ -1,4 +1,4 @@ +-if (typeof window != 'undefined') { ++if (typeof window != 'undefined' && !(typeof process != 'undefined' && process.versions['node-webkit'])) { + module.exports = require('./lib/superagent'); + } else if (process.env.SUPERAGENT_COV) { + module.exports = require('./lib-cov/node'); diff --git a/test.txt b/test.txt new file mode 100644 index 00000000..e69de29b