├── .eslintrc
├── .gitignore
├── LICENSE
├── README.md
├── app
├── app.html
├── assets
│ ├── images
│ │ └── background.jpg
│ └── stylesheets
│ │ ├── _animations.scss
│ │ ├── _loading.scss
│ │ ├── _side_nav.scss
│ │ ├── _variables.scss
│ │ └── main.scss
├── components
│ ├── App
│ │ ├── App.vue
│ │ ├── AppBar.vue
│ │ ├── Error.vue
│ │ ├── Infos.vue
│ │ ├── SideNav.vue
│ │ └── draft.vue
│ ├── Player
│ │ └── Player.vue
│ └── Show
│ │ ├── Season.vue
│ │ ├── ShowDetails.vue
│ │ ├── ShowItem.vue
│ │ ├── ShowList.vue
│ │ ├── Torrent.vue
│ │ └── curated
│ │ ├── CuratedListItem.vue
│ │ └── CuratedListList.vue
├── i18n
│ ├── locales.js
│ └── nokat.js
├── index.js
├── services
│ ├── engine.js
│ ├── parse.js
│ └── subs.js
├── store
│ └── store.js
└── utils
│ ├── escapeActions.js
│ └── strings.js
├── logo.png
├── main.js
├── package.js
├── package.json
├── server.js
├── webpack.config.base.js
├── webpack.config.development.js
├── webpack.config.production.js
└── webpack.node.js
/.eslintrc:
--------------------------------------------------------------------------------
1 |
2 | {
3 | "env": {
4 | "browser": true,
5 | "node": true
6 | },
7 |
8 | "ecmaFeatures": {
9 | "arrowFunctions": true,
10 | "destructuring": true,
11 | "classes": true,
12 | "defaultParams": true,
13 | "blockBindings": true,
14 | "modules": true,
15 | "objectLiteralComputedProperties": true,
16 | "objectLiteralShorthandMethods": true,
17 | "objectLiteralShorthandProperties": true,
18 | "restParams": true,
19 | "spread": true,
20 | "templateStrings": true
21 | },
22 |
23 | "rules": {
24 | "accessor-pairs": 2,
25 | "array-bracket-spacing": 0,
26 | "block-scoped-var": 0,
27 | "brace-style": [2, "1tbs", { "allowSingleLine": true }],
28 | "camelcase": 0,
29 | "comma-dangle": [2, "never"],
30 | "comma-spacing": [2, { "before": false, "after": true }],
31 | "comma-style": [2, "last"],
32 | "complexity": 0,
33 | "computed-property-spacing": 0,
34 | "consistent-return": 0,
35 | "consistent-this": 0,
36 | "constructor-super": 2,
37 | "curly": [2, "multi-line"],
38 | "default-case": 0,
39 | "dot-location": [2, "property"],
40 | "dot-notation": 0,
41 | "eol-last": 0,
42 | "eqeqeq": [2, "allow-null"],
43 | "func-names": 0,
44 | "func-style": 0,
45 | "generator-star-spacing": [2, { "before": true, "after": true }],
46 | "guard-for-in": 0,
47 | "handle-callback-err": [2, "^(err|error)$" ],
48 | "key-spacing": [2, { "beforeColon": false, "afterColon": true }],
49 | "linebreak-style": 0,
50 | "lines-around-comment": 0,
51 | "max-nested-callbacks": 0,
52 | "new-cap": [2, { "newIsCap": true, "capIsNew": false }],
53 | "new-parens": 2,
54 | "newline-after-var": 0,
55 | "no-alert": 0,
56 | "no-array-constructor": 2,
57 | "no-caller": 2,
58 | "no-catch-shadow": 0,
59 | "no-cond-assign": 2,
60 | "no-console": 0,
61 | "no-constant-condition": 0,
62 | "no-continue": 0,
63 | "no-control-regex": 2,
64 | "no-debugger": 2,
65 | "no-delete-var": 2,
66 | "no-div-regex": 0,
67 | "no-dupe-args": 2,
68 | "no-dupe-keys": 2,
69 | "no-duplicate-case": 2,
70 | "no-else-return": 0,
71 | "no-empty": 0,
72 | "no-empty-character-class": 2,
73 | "no-empty-label": 2,
74 | "no-eq-null": 0,
75 | "no-eval": 2,
76 | "no-ex-assign": 2,
77 | "no-extend-native": 2,
78 | "no-extra-bind": 2,
79 | "no-extra-boolean-cast": 2,
80 | "no-extra-parens": 0,
81 | "no-extra-semi": 0,
82 | "no-fallthrough": 2,
83 | "no-floating-decimal": 2,
84 | "no-func-assign": 2,
85 | "no-implied-eval": 2,
86 | "no-inline-comments": 0,
87 | "no-inner-declarations": [2, "functions"],
88 | "no-invalid-regexp": 2,
89 | "no-irregular-whitespace": 2,
90 | "no-iterator": 2,
91 | "no-label-var": 2,
92 | "no-labels": 2,
93 | "no-lone-blocks": 2,
94 | "no-lonely-if": 0,
95 | "no-loop-func": 0,
96 | "no-mixed-requires": 0,
97 | "no-mixed-spaces-and-tabs": 2,
98 | "no-multi-spaces": 2,
99 | "no-multi-str": 2,
100 | "no-multiple-empty-lines": [2, { "max": 1 }],
101 | "no-native-reassign": 2,
102 | "no-negated-in-lhs": 2,
103 | "no-nested-ternary": 0,
104 | "no-new": 2,
105 | "no-new-func": 0,
106 | "no-new-object": 2,
107 | "no-new-require": 2,
108 | "no-new-wrappers": 2,
109 | "no-obj-calls": 2,
110 | "no-octal": 2,
111 | "no-octal-escape": 2,
112 | "no-param-reassign": 0,
113 | "no-path-concat": 0,
114 | "no-process-env": 0,
115 | "no-process-exit": 0,
116 | "no-proto": 0,
117 | "no-redeclare": 2,
118 | "no-regex-spaces": 2,
119 | "no-restricted-modules": 0,
120 | "no-return-assign": 2,
121 | "no-script-url": 0,
122 | "no-self-compare": 2,
123 | "no-sequences": 2,
124 | "no-shadow": 0,
125 | "no-shadow-restricted-names": 2,
126 | "no-spaced-func": 2,
127 | "no-sparse-arrays": 2,
128 | "no-sync": 0,
129 | "no-ternary": 0,
130 | "no-this-before-super": 2,
131 | "no-throw-literal": 2,
132 | "no-trailing-spaces": 2,
133 | "no-undef": 2,
134 | "no-undef-init": 2,
135 | "no-undefined": 0,
136 | "no-underscore-dangle": 0,
137 | "no-unexpected-multiline": 2,
138 | "no-unneeded-ternary": 2,
139 | "no-unreachable": 2,
140 | "no-unused-expressions": 0,
141 | "no-unused-vars": [2, { "vars": "all", "args": "none" }],
142 | "no-use-before-define": 0,
143 | "no-var": 0,
144 | "no-void": 0,
145 | "no-warning-comments": 0,
146 | "no-with": 2,
147 | "object-curly-spacing": 0,
148 | "object-shorthand": 0,
149 | "one-var": [2, { "initialized": "never" }],
150 | "operator-assignment": 0,
151 | "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }],
152 | "padded-blocks": 0,
153 | "prefer-const": 0,
154 | "quote-props": 0,
155 | "quotes": [2, "single", "avoid-escape"],
156 | "radix": 2,
157 | "semi": [2, "never"],
158 | "semi-spacing": 0,
159 | "sort-vars": 0,
160 | "space-after-keywords": [2, "always"],
161 | "space-before-blocks": [2, "always"],
162 | "space-before-function-paren": [2, "always"],
163 | "space-in-parens": [2, "never"],
164 | "space-infix-ops": 2,
165 | "space-return-throw-case": 2,
166 | "space-unary-ops": [2, { "words": true, "nonwords": false }],
167 | "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!"] }],
168 | "strict": 0,
169 | "use-isnan": 2,
170 | "valid-jsdoc": 0,
171 | "valid-typeof": 2,
172 | "vars-on-top": 0,
173 | "wrap-iife": [2, "any"],
174 | "wrap-regex": 0,
175 | "yoda": [2, "never"]
176 | }
177 | }
178 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # node-waf configuration
20 | .lock-wscript
21 |
22 | # Compiled binary addons (http://nodejs.org/api/addons.html)
23 | build/Release
24 |
25 | # Dependency directory
26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
27 | node_modules
28 |
29 | # OSX
30 | .DS_Store
31 |
32 | # App packaged
33 | dist
34 | release
35 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Lawd-desktop
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # **Lawd**
2 |
3 | ----------
4 |
5 | # Videos
6 | Lawd uses a parse server as its backend to store videos (movies and tv series).
7 | The torrents from the tracker api are transformed and filtered in our parse server.
8 |
9 | On the frontend, I used Vue.js and I find it extremely powerful library for building simple UI.
10 | For streaming, I was caught by the simplicity of use of WebTorrent.js.
11 | So I would like to thank these two fellas for making lawd alive.
12 | But to not forget the kat who offered me rapid access to their daily dump api.
13 |
14 | ## Install
15 |
16 | First, clone the repo via git
17 | And then install dependencies.
18 |
19 | ```bash
20 | $ npm install
21 | ```
22 |
23 | ## Run
24 |
25 | Run this two commands __simultaneously__ in different console tabs.
26 |
27 | ```bash
28 | $ npm run hot-server
29 | $ npm run start-hot
30 | ```
31 |
32 | or run two servers with one command
33 |
34 | ```bash
35 | $ npm run dev
36 | ```
37 |
--------------------------------------------------------------------------------
/app/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Lawd
6 |
16 |
17 |
18 |
19 |
20 |
21 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/assets/images/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stoufa88/lawd-desktop/114e6b4daaec86f6f0c2de13e95184214ad74562/app/assets/images/background.jpg
--------------------------------------------------------------------------------
/app/assets/stylesheets/_animations.scss:
--------------------------------------------------------------------------------
1 |
2 | .fade-transition {
3 | transition: all .3s ease;
4 | }
5 |
6 | /* .expand-enter defines the starting state for entering */
7 | /* .expand-leave defines the ending state for leaving */
8 | .fade-enter, .fade-leave {
9 | opacity: 0.1;
10 | }
11 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/_loading.scss:
--------------------------------------------------------------------------------
1 |
2 | .loading{
3 | background: #fff;
4 | }
5 |
6 | /*
7 | * Usage:
8 | *
9 |
10 | *
11 | */
12 | .loading {
13 | width: 40px;
14 | height: 40px;
15 | margin: 110px auto;
16 | background-color: #fff;
17 | border-radius: 100%;
18 | -webkit-animation: sk-pulseScaleOut 1s infinite ease-in-out;
19 | animation: sk-pulseScaleOut 1s infinite ease-in-out; }
20 |
21 | @-webkit-keyframes sk-pulseScaleOut {
22 | 0% {
23 | -webkit-transform: scale(0);
24 | transform: scale(0); }
25 | 100% {
26 | -webkit-transform: scale(1);
27 | transform: scale(1);
28 | opacity: 0; } }
29 |
30 | @keyframes sk-pulseScaleOut {
31 | 0% {
32 | -webkit-transform: scale(0);
33 | transform: scale(0); }
34 | 100% {
35 | -webkit-transform: scale(1);
36 | transform: scale(1);
37 | opacity: 0; } }
38 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/_side_nav.scss:
--------------------------------------------------------------------------------
1 | .navbar-toggler:focus {
2 | border: none;
3 | outline: none;
4 | }
5 |
6 | #side-menu {
7 | position: fixed;
8 | left: -$side-menu-width;
9 | top: 54px;
10 | height: 100%;
11 | width: $side-menu-width;
12 | background-color: #333;
13 | transition:left 0.2s linear;
14 |
15 | button {
16 | font-size: 2rem;
17 | transform: rotateZ(-90deg);
18 | transition: transform 1s;
19 | margin-top: 50%;
20 | &:hover {
21 | transform: rotateZ(0deg);
22 | }
23 | }
24 |
25 | #nav-footer {
26 | position: absolute;
27 | bottom: 65px;
28 | color: #fff;
29 | }
30 |
31 | > ul {
32 | .nav-item {
33 | border-bottom: 1px solid #424242;
34 |
35 | &:first-child {
36 | border-top: 1px solid #424242;
37 | }
38 |
39 | .nav-item-link {
40 | display: block;
41 | color: #6C7B83;
42 | font-size: 14px;
43 | font-weight: bold;
44 | text-transform: uppercase;
45 | padding: $side-menu-padding-left/2 $side-menu-padding-left;
46 |
47 | &:hover, &:focus, &.is-active {
48 | text-decoration: none;
49 | color: #fff;
50 | }
51 | }
52 | }
53 | }
54 | }
55 |
56 | .side-menu-open {
57 | #side-menu {
58 | left: 0;
59 | }
60 |
61 | .movie-list:not(.loading) {
62 | padding-left: $side-menu-width;
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/_variables.scss:
--------------------------------------------------------------------------------
1 | $font-family-sans-serif: Raleway, Arial, sans-serif;
2 | $font-family-serif: Georgia, "Times New Roman", Times, serif;
3 | $font-family-monospace: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
4 | $font-family-base: $font-family-sans-serif;
5 |
6 | $brand-primary: brown;
7 | $brand-success: #5cb85c;
8 | $brand-info: #5bc0de;
9 | $brand-warning: #f0ad4e;
10 | $brand-danger: #d9534f;
11 | $brand-background: #333;
12 | $brand-accent: #2c3e50;
13 |
14 | $body-bg: $brand-background;
15 | $navbar-bg: $brand-primary;
16 |
17 | $btn-secondary-color: #fff !default;
18 | $btn-secondary-bg: $brand-accent !default;
19 | $btn-secondary-border: darken($btn-secondary-bg, 3%) !default;
20 |
21 | $side-menu-width: 250px;
22 | $side-menu-padding-left: 25px;
23 | $enable-flex: true !default;
24 | $popover-max-width: 350px !default;
25 | $navbar-border-radius: 0px !default;
26 |
27 | $popover-bg: $brand-accent !default;
28 | $popover-title-bg: darken($popover-bg, 3%) !default;
29 |
--------------------------------------------------------------------------------
/app/assets/stylesheets/main.scss:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Raleway:400,900,700italic,700,400italic,300,900italic);
2 | @import './_variables';
3 | @import '~bootstrap/scss/bootstrap.scss';
4 | // @import '~animate.css/animate.min.css';
5 | @import '~font-awesome/css/font-awesome.css';
6 | @import '~video.js/dist/video-js.css';
7 | @import './_loading';
8 | @import './_side_nav';
9 | @import './_animations';
10 |
11 | html {
12 | overflow: hidden;
13 | -webkit-user-select: none;
14 | cursor: default;
15 | }
16 |
17 | ::-webkit-scrollbar {
18 | width: 13px;
19 | background-color: rgb(40, 40, 40);
20 | }
21 |
22 | ::-webkit-scrollbar-thumb {
23 | border: 1px solid rgb(40, 40, 40);
24 | border-radius: 10px;
25 | background: linear-gradient(to right, rgb(90, 90, 90), rgb(80, 80, 80));
26 | }
27 |
28 | ::-webkit-scrollbar-track {
29 | background-color: rgb(40, 40, 40);
30 | }
31 |
32 | .bg-inverse {
33 | background: $navbar-bg;
34 | }
35 |
36 | .close {
37 | position: absolute;
38 | top: 11%;
39 | right: 5%;
40 | font-size: 4rem;
41 | font-weight: 500;
42 | color: #E4E4E4;
43 | opacity: 1;
44 | &:hover {
45 | color: #fff;
46 | }
47 | }
48 |
49 | #main-content {
50 | margin-top: 54px;
51 | padding: 25px 0;
52 | overflow-y: auto;
53 | overflow-x: hidden;
54 | height: calc(100vh - 54px);
55 | background: $body-bg;
56 | }
57 |
58 | .btn-primary:hover,
59 | .btn-primary:active,
60 | .btn-primary:focus
61 | .btn-secondary:hover,
62 | .btn-secondary:active,
63 | .btn-secondary:focus {
64 | border: 1px solid #fff;
65 | outline: 0;
66 | }
67 |
68 | .btn-transparent, .btn-transparent:hover {
69 | background: transparent;
70 | color: white;
71 | border: none;
72 | outline: none;
73 | }
74 |
75 | // -------------------------- Popovers ----------------------------------
76 |
77 | .popover-title {
78 | color: #fff;
79 | }
80 |
81 | .popover-content {
82 | max-height: 16rem;
83 | overflow: auto;
84 | color: #eee;
85 | }
86 |
87 | // -------------------------- App bar ----------------------------------
88 |
89 | .navbar-brand {
90 | text-transform: uppercase;
91 | font-weight: 900;
92 | }
93 |
94 | .sort-button {
95 | margin-right: 75px;
96 | }
97 |
98 | .search-control {
99 | height: 38px;
100 | font-size: 14px;
101 | width: 15rem !important;
102 | }
103 |
104 | .sort-control {
105 | padding-top: 3px;
106 | }
107 |
108 | // --------------------------- Movie list ------------------------------------
109 |
110 | .movie-list div {
111 | margin-left: 5px;
112 | }
113 |
114 | .card {
115 | width: 150px;
116 | padding: 0.75rem;
117 | margin-bottom: 0rem;
118 | margin-right: 2rem;
119 | border: 0;
120 | background: none;
121 | color: white;
122 |
123 | }
124 |
125 | .card .card-block{
126 | padding: 15px 0;
127 | width: 100%;
128 | }
129 |
130 | .card .card-text{
131 | margin-bottom: 0.2rem;
132 | font-size: 12px;
133 | }
134 |
135 | .card .card-text, .card .card-title{
136 | white-space: nowrap;
137 | overflow: hidden;
138 | text-overflow: ellipsis;
139 | }
140 |
141 | .card-top {
142 | img {
143 | width: 150px;
144 | height: 200px;
145 | cursor: pointer;
146 | &:hover, &:focus {
147 | outline: 2px solid #fff;
148 | opacity: 0.3;
149 | background: $body-bg;
150 | }
151 | }
152 | .show-back {
153 | visibility: hidden;
154 | position: absolute;
155 | top: 25%;
156 | left: 46%;
157 | cursor: pointer;
158 | pointer-events: none;
159 | color: #fff;
160 | font-size: 2rem;
161 | }
162 | &:hover {
163 | .show-back {
164 | visibility: visible;
165 | }
166 | }
167 |
168 | }
169 |
170 | // --------------------------- Curated list ------------------------------------
171 | .curated-list h3{
172 | color: rgba(255, 255, 255, 0.69);
173 | }
174 |
175 | // --------------------------- Movie details ------------------------------------
176 |
177 | .movie {
178 | color: #fff;
179 | margin-top: 54px;
180 | overflow-y: auto;
181 | overflow-x: hidden;
182 | height: calc(100vh - 54px);
183 | background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.11), rgba(0, 0, 0, 0.72), black), url('../images/background.jpg');
184 | background-size: cover;
185 | }
186 |
187 | .show-header {
188 | padding: 15px;
189 | &.has-trailer {
190 | margin: -75px -50px 50px -50px;
191 | }
192 | #show-name {
193 | padding-top: 15px;
194 | h1 {
195 | font-weight: bolder;
196 | }
197 | }
198 | #show-trailer {
199 | position: relative;
200 | width: 480px;
201 | display: flex;
202 | margin: 0 auto;
203 | cursor: pointer;
204 | i {
205 | position: absolute;
206 | left: 44%;
207 | top: 35%;
208 | font-size: 5rem;
209 | z-index: 10;
210 | }
211 | &:hover {
212 | i {
213 | visibility: visible !important;
214 | }
215 | img{
216 | opacity: 0.8;
217 | }
218 | }
219 | }
220 | }
221 |
222 | .movie-body {
223 | padding: 25px;
224 | .movie-left-section {
225 | img {
226 | border-radius: 5px;
227 | width: 250px;
228 | }
229 | }
230 |
231 | .movie-center-section {
232 | padding: 0 25px;
233 | .movie-description {
234 | max-height: 15rem;
235 | overflow-y: auto;
236 | }
237 | }
238 |
239 | .movie-right-section h3{
240 | border-bottom: 1px solid #ccc;
241 | }
242 |
243 | .movie-torrents-section {
244 | height: 10rem;
245 | overflow-y: auto;
246 | overflow-x: hidden;
247 | li {
248 | list-style-type: none;
249 | line-height: 34px;
250 | img {
251 | width: 15px;
252 | }
253 | }
254 |
255 | a {
256 | color: #fff;
257 | }
258 |
259 | .season-title {
260 | font-size: 1.5rem;
261 | }
262 |
263 | .season-episodes {
264 | li {
265 | display: inline-flex;
266 | margin-right: 15px;
267 | }
268 | }
269 | }
270 | }
271 |
272 |
273 | // --------------------------- Player ---------------------------------------/
274 |
275 | .vjs_video_3-dimensions, .video-js {
276 | width: 100vw;
277 | height: 100vh;
278 | }
279 |
280 | #toggle-me {
281 | background: #000;
282 | position: absolute;
283 | padding-top: 15px;
284 | left: 15px;
285 | right: 15px;
286 | z-index: 1;
287 | color: white;
288 | }
289 |
--------------------------------------------------------------------------------
/app/components/App/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
46 |
--------------------------------------------------------------------------------
/app/components/App/AppBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | lawd
4 |
5 |
6 |
7 |
8 | ☰
9 |
10 |
11 | lawd
12 |
13 |
22 |
23 |
24 |
25 | {{ filter }}
26 |
27 |
35 |
36 |
37 |
38 |
39 | {{ sort }}
40 |
41 |
49 |
50 |
51 |
52 |
53 |
122 |
--------------------------------------------------------------------------------
/app/components/App/Error.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Check your network
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/app/components/App/Infos.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
11 |
12 |
We do not host any torrent files on Lawd. Lawd torrents
13 | are the result of multiple search engines.
14 |
15 |
16 |
17 | However, we still can remove movies from our application if the copyright owner
18 | would like us to do so. The following procedure will be performed if:
19 |
20 |
21 |
22 | Send your Claim to "copyright.lawd@gmail.com";
23 |
24 | The Claim must be written in English language,
25 | it must be understandable and in polite form;
26 |
27 |
28 | You must present an evidence that shows that you are the copyright
29 | holder or that you are acting on behalf of the copyright holder;
30 |
31 |
32 | You must present an evidence that shows that the content is legally
33 | copyrighted and that you are the copyright holder;
34 |
35 |
36 | Provide the movie name and year of release.
37 |
38 |
39 | Provide sufficient contact information with a valid email address.
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
54 |
--------------------------------------------------------------------------------
/app/components/App/SideNav.vue:
--------------------------------------------------------------------------------
1 |
2 |
21 |
22 |
23 | dmca
24 |
25 |
26 |