Greasy Fork 支持简体中文。

cinemapress

Button auto-complete movie information in CinemaPress.

// ==UserScript==
// @name cinemapress
// @name:ru синемапресс
// @name:zh cinemapress
// @description Button auto-complete movie information in CinemaPress.
// @description:ru Кнопка автозаполнения информации о фильме в CinemaPress.
// @description:zh CinemaPress电影信息自动完成按钮。
// @author CinemaPress
// @homepageURL https://github.com/CinemaPress
// @supportURL https://github.com/CinemaPress/CinemaPress/issues
// @icon https://avatars3.githubusercontent.com/u/16612433?s=200
// @license MIT
// @version 2021.01
// @run-at document-end
// @include http://*/*/movies?id=*
// @include https://*/*/movies?id=*
// @include http://*/*/movies?kp_id=*
// @include https://*/*/movies?kp_id=*
// @include http://*/*/movies?tmdb_id=*
// @include https://*/*/movies?tmdb_id=*
// @include http://*/*/movies?imdb_id=*
// @include https://*/*/movies?imdb_id=*
// @include http://*/*/movies?douban_id=*
// @include https://*/*/movies?douban_id=*
// @include http://*/*/movies?wa_id=*
// @include https://*/*/movies?wa_id=*
// @include http://*/*/movies?tvmaze_id=*
// @include https://*/*/movies?tvmaze_id=*
// @include http://*/*/movies?movie_id=*
// @include https://*/*/movies?movie_id=*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @namespace https://greasyfork.org/users/1307116
// ==/UserScript==

var omdb = getCookie('omdb');
var tmdb = getCookie('tmdb');

if (!omdb) inputOMDb();
if (!tmdb) inputTMDb();

var urls = [];

autoComplete();

function parseData() {
  var movieData = {};

  var icon = document.querySelector('.autoComplete > strong');
  var text = document.querySelector('.autoComplete > span');
  var lang = document.querySelector('[name="lang"]')
    ? document.querySelector('[name="lang"]').value
    : 'en';

  icon.setAttribute('class', 'fa fa-spinner fa-spin');

  tmdb = tmdb
    ? tmdb
    : document.querySelector('[name="tmdb"]')
    ? document.querySelector('[name="tmdb"]').value
    : '';
  if (tmdb) setCookie('tmdb', tmdb, { expires: 3600000 });

  omdb = omdb
    ? omdb
    : document.querySelector('[name="omdb"]')
    ? document.querySelector('[name="omdb"]').value
    : '';
  if (omdb) setCookie('omdb', omdb, { expires: 3600000 });

  var src = document.querySelector('[data-poster="src"]');

  var type = document.querySelector('[name="movie.type"]')
    ? document.querySelector('[name="movie.type"]').options[
        document.querySelector('[name="movie.type"]').selectedIndex
      ].value
    : '';

  var kp_id = document.querySelector('[name="movie.kp_id"]')
    ? document.querySelector('[name="movie.kp_id"]').value
    : document.querySelector('[data-movie_kp_id]')
    ? document.querySelector('[data-movie_kp_id]').dataset.movie_kp_id
    : document.querySelector('[data-id]')
    ? document.querySelector('[data-id]').dataset.id
    : '';
  var tmdb_id = document.querySelector('[name="movie.tmdb_id"]')
    ? document.querySelector('[name="movie.tmdb_id"]').value
    : '';
  var imdb_id = document.querySelector('[name="movie.imdb_id"]')
    ? document.querySelector('[name="movie.imdb_id"]').value
    : '';
  var douban_id = document.querySelector('[name="movie.douban_id"]')
    ? document.querySelector('[name="movie.douban_id"]').value
    : '';
  var tvmaze_id = document.querySelector('[name="movie.tvmaze_id"]')
    ? document.querySelector('[name="movie.tvmaze_id"]').value
    : '';
  var wa_id = document.querySelector('[name="movie.wa_id"]')
    ? document.querySelector('[name="movie.wa_id"]').value
    : '';
  var movie_id = document.querySelector('[name="movie.movie_id"]')
    ? document.querySelector('[name="movie.movie_id"]').value
    : '';

  if (!kp_id && !tmdb_id && !douban_id && !imdb_id && !wa_id && !tvmaze_id) {
    icon.setAttribute('class', 'fa fa-bug');
    text.innerHTML = '  IDs not filled!';
    return;
  }

  if (tmdb && tmdb_id) {
    urls.push(
      'https://api.themoviedb.org/3/' +
        (type === '1' ? 'tv' : 'movie') +
        '/' +
        tmdb_id +
        '?' +
        'language=' +
        lang +
        '&' +
        'append_to_response=credits&' +
        'api_key=' +
        tmdb
    );
  }
  if (
    kp_id &&
    (lang === 'ru' ||
      lang === 'uk' ||
      (!imdb_id && !tmdb_id && !douban_id && !tvmaze_id && !wa_id))
  ) {
    urls.push(
      'https://api1573848848.apicollaps.cc/franchise/details?' +
        'token=eedefb541aeba871dcfc756e6b31c02e&' +
        'kinopoisk_id=' +
        kp_id
    );
    urls.push(
      'https://bazon.cc/api/search?' +
        'token=2848f79ca09d4bbbf419bcdb464b4d11&' +
        'kp=' +
        kp_id
    );
    urls.push('https://pleer.video/' + kp_id + '.json');
    urls.push('https://rating.kinopoisk.ru/' + kp_id + '.xml');
  }
  if (douban_id && (lang === 'zh' || (!imdb_id && !tmdb_id && !kp_id))) {
    urls.push('https://api.douban.com/v2/movie/subject/' + douban_id);
    urls.push('https://movie.douban.com/subject/' + douban_id);
  }
  if (omdb && imdb_id && lang === 'en') {
    urls.push('https://www.omdbapi.com/?i=tt' + imdb_id + '&apikey=' + omdb);
  }

  function api() {
    var url = urls.length ? urls.shift() : undefined;
    if (url) {
      getAPI(url, function(err, res) {
        for (var r in res) {
          if (res.hasOwnProperty(r)) {
            if (lang !== 'ru' && (r === 'translate' || r === 'quality')) {
              continue;
            }
            movieData[r] = res[r] ? res[r] : movieData[r];
            if (
              url.indexOf('omdbapi.com') + 1 &&
              (r === 'imdb_rating' || r === 'imdb_vote')
            ) {
              movieData[r] = res[r];
            }
          }
        }
        api();
      });
    } else {
      if (!movieData.title_ru && !movieData.title_en) {
        icon.setAttribute('class', 'fa fa-bug');
        text.innerHTML = '  No information!';
        console.log(movieData);
        autoComplete();
        return;
      }

      movieData.country = movieData.country
        ? movieData.country.replace(
            /(The United States of America|United States of America|United States|^US$|^US,|,US$)/gi,
            'USA'
          )
        : '';

      if (movieData.title_ru) {
        document.querySelector(
          '[name="movie.title_ru"]'
        ).value = document.querySelector('[name="movie.title_ru"]').value
          ? document.querySelector('[name="movie.title_ru"]').value
          : movieData.title_ru;
      }
      if (movieData.title_en) {
        document.querySelector(
          '[name="movie.title_en"]'
        ).value = document.querySelector('[name="movie.title_en"]').value
          ? document.querySelector('[name="movie.title_en"]').value
          : movieData.title_en;
      }
      if (movieData.type) {
        document.querySelector('[name="movie.type"]').value =
          document.querySelector('[name="movie.type"]').value &&
          document.querySelector('[name="movie.type"]').value === '1'
            ? document.querySelector('[name="movie.type"]').value
            : movieData.type;
      }
      if (movieData.premiere) {
        document.querySelector('[name="movie.premiere"]').value =
          movieData.premiere;
      }
      if (movieData.poster) {
        document.querySelector('[name="movie.poster"]').value =
          movieData.poster;
      }
      if (movieData.pictures) {
        document.querySelector('[name="movie.pictures"]').value =
          movieData.pictures;
      }
      if (movieData.translate) {
        var t = document.querySelector('[name="movie.translate"]');
        t.value = movieData.translate;
        t.style.display = 'block';
        var t1 = document.querySelectorAll('.tagify');
        t1.forEach(function(t) {
          t.style.display = 'none';
        });
      }
      if (movieData.quality) {
        var q = document.querySelector('[name="movie.quality"]');
        q.value = movieData.quality;
        q.style.display = 'block';
        var t2 = document.querySelectorAll('.tagify');
        t2.forEach(function(t) {
          t.style.display = 'none';
        });
      }
      if (movieData.year) {
        document.querySelector('[name="movie.year"]').value = movieData.year;
      }
      if (movieData.country) {
        document.querySelector(
          '[name="movie.country"]'
        ).value = document.querySelector('[name="movie.country"]').value
          ? document.querySelector('[name="movie.country"]').value
          : movieData.country;
      }
      if (movieData.genre) {
        document.querySelector(
          '[name="movie.genre"]'
        ).value = document.querySelector('[name="movie.genre"]').value
          ? document.querySelector('[name="movie.genre"]').value
          : movieData.genre;
      }
      if (movieData.actor) {
        document.querySelector(
          '[name="movie.actor"]'
        ).value = document.querySelector('[name="movie.actor"]').value
          ? document.querySelector('[name="movie.actor"]').value
          : movieData.actor;
      }
      if (movieData.director) {
        document.querySelector(
          '[name="movie.director"]'
        ).value = document.querySelector('[name="movie.director"]').value
          ? document.querySelector('[name="movie.director"]').value
          : movieData.director;
      }
      if (
        movieData.kp_rating &&
        parseInt(movieData.kp_rating) &&
        movieData.kp_vote &&
        parseInt(movieData.kp_vote)
      ) {
        document.querySelector('[name="movie.kp_rating"]').value =
          movieData.kp_rating;
      }
      if (
        movieData.kp_rating &&
        parseInt(movieData.kp_rating) &&
        movieData.kp_vote &&
        parseInt(movieData.kp_vote)
      ) {
        document.querySelector('[name="movie.kp_vote"]').value =
          movieData.kp_vote;
      }
      if (
        movieData.imdb_rating &&
        parseInt(movieData.imdb_rating) &&
        movieData.imdb_vote &&
        parseInt(movieData.imdb_vote)
      ) {
        document.querySelector('[name="movie.imdb_rating"]').value =
          movieData.imdb_rating;
      }
      if (
        movieData.imdb_rating &&
        parseInt(movieData.imdb_rating) &&
        movieData.imdb_vote &&
        parseInt(movieData.imdb_vote)
      ) {
        document.querySelector('[name="movie.imdb_vote"]').value =
          movieData.imdb_vote;
      }
      if (movieData.imdb_id) {
        document.querySelector('[name="movie.imdb_id"]').value =
          movieData.imdb_id;
      }
      if (movieData.tmdb_id) {
        document.querySelector('[name="movie.tmdb_id"]').value =
          movieData.tmdb_id;
      }
      if (
        movieData.description &&
        document.querySelector('[name="movie.description"]').value.length < 900
      ) {
        document.querySelector(
          '[name="movie.description"]'
        ).value = decodeURIComponent(movieData.description)
          .replace(/(\.);([0-9а-яё]|$)/gi, '$1 $2')
          .replace(/([^;]);([0-9а-яё]|$)/gi, '$1. $2')
          .replace(/\s+/g, ' ')
          .replace(/(^\s*)|(\s*)$/g, '');
      }

      if (movieData.poster) {
        src.src =
          movieData.poster === '1'
            ? '/files/poster/medium/' + kp_id + '.jpg'
            : /\/[0-9a-z]*\.(jpg|png)/i.test(movieData.poster)
            ? '/files/poster/medium' + movieData.poster
            : /\/[0-9a-z@.,_\-]\.(jpg|png)/i.test(movieData.poster)
            ? '/files/poster/medium' + movieData.poster
            : movieData.poster;
      }

      autoComplete();
    }
  }
  api();
}

function getAPI(url, callback) {
  GM_xmlhttpRequest({
    method: 'GET',
    url: url,
    timeout: 5000,
    onload: function(response) {
      if (response.readyState === 4 && response.status === 200) {
        var result = {};
        try {
          if (response && response.responseText) {
            if (url.indexOf('movie.douban.com') + 1) {
              var matchDate = /("datePublished":\s*")([0-9]{4}-[0-9]{2}-[0-9]{2})/gi.exec(
                response.responseText
              );
              var matchId = /(title\/tt)([0-9]{1,10})/gi.exec(
                response.responseText
              );
              result.imdb_id = matchId ? matchId[2].replace(/[^0-9]/g, '') : '';
              result.premiere = matchDate
                ? matchDate[2].replace(/[^0-9\-]/g, '')
                : '';
              if (omdb && result.imdb_id) {
                urls.push(
                  'https://www.omdbapi.com/?' +
                    'i=tt' +
                    result.imdb_id +
                    '&' +
                    'apikey=' +
                    omdb
                );
              }
            } else if (url.indexOf('kinopoisk.ru') + 1) {
              var matchDate1 = /(dateCreated"\s*content=")([0-9]{4}-[0-9]{2}-[0-9]{2})/i.exec(
                response.responseText
              );
              var matchDate2 = /(data-date-premier-start-link=")([0-9]{8})/i.exec(
                response.responseText
              );

              var parser, xmlDoc;
              if (window.DOMParser) {
                parser = new DOMParser();
                xmlDoc = parser.parseFromString(
                  response.responseText,
                  'text/xml'
                );
              } else {
                xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
                xmlDoc.async = false;
                xmlDoc.loadXML(response.responseText);
              }

              var rating = xmlDoc.getElementsByTagName('rating');

              if (
                matchDate1 &&
                !isNaN(new Date(matchDate1[2] + '').getFullYear())
              ) {
                result.premiere = matchDate1[2];
              } else if (matchDate2) {
                var info = matchDate2[2];
                var date =
                  info[0] +
                  info[1] +
                  info[2] +
                  info[3] +
                  '-' +
                  info[4] +
                  info[5] +
                  '-' +
                  info[6] +
                  info[7];
                if (info && !isNaN(new Date(date).getFullYear())) {
                  result.premiere = date;
                }
              } else if (
                rating &&
                rating[0] &&
                rating[0].childNodes &&
                rating[0].childNodes[1]
              ) {
                var kp = rating[0].childNodes[0];
                var imdb = rating[0].childNodes[1];

                result = {
                  kp_rating: Math.ceil(parseFloat(kp.textContent) * 10) || 0,
                  kp_vote:
                    kp.attributes &&
                    kp.attributes[0] &&
                    kp.attributes[0].textContent
                      ? kp.attributes[0].textContent
                      : '0',
                  imdb_rating:
                    Math.ceil(parseFloat(imdb.textContent) * 10) || 0,
                  imdb_vote:
                    imdb.attributes &&
                    imdb.attributes[0] &&
                    imdb.attributes[0].textContent
                      ? imdb.attributes[0].textContent
                      : '0'
                };
              }
            } else if (url.indexOf('bazon.cc') + 1) {
              try {
                var result_parse = JSON.parse(response.responseText);
                if (
                  result_parse &&
                  result_parse.results &&
                  result_parse.results[0]
                ) {
                  result = result_parse.results[0];
                }
              } catch (e) {
                console.log(e);
              }
            } else {
              try {
                result = JSON.parse(response.responseText);
              } catch (e) {
                console.log(e);
              }
            }
          }
        } catch (e) {
          console.error(e);
        }
        var res = {};
        if (url.indexOf('pleer.video') + 1) {
          res = parsePleer(result);
        } else if (
          url.indexOf('apicollaps.cc') + 1 ||
          url.indexOf('bazon.cc') + 1
        ) {
          res = parseKP(result);
        } else if (url.indexOf('omdbapi.com') + 1) {
          res = parseOMDb(result);
        } else if (url.indexOf('themoviedb.org') + 1) {
          res = parseTMDb(result);
        } else if (url.indexOf('douban.com') + 1) {
          res = parseDouban(result);
        } else if (url.indexOf('kinopoisk.ru') + 1) {
          res = result;
        }
        callback(null, res);
      } else {
        callback(null, {});
      }
    }
  });
}

function parseTMDb(res) {
  return {
    title_ru: res.title ? res.title : res.name ? res.name : '',
    title_en: res.original_title ? res.original_title : '',
    year: res.release_date
      ? res.release_date.substring(0, 4)
      : res.first_air_date
      ? res.first_air_date.substring(0, 4)
      : '',
    premiere: res.release_date
      ? res.release_date
      : res.first_air_date
      ? res.first_air_date
      : '',
    type: res.number_of_seasons ? '1' : '0',
    genre: (res.genres
      ? res.genres.map(function(v) {
          return v.name;
        })
      : []
    ).join(','),
    country: (res.production_countries
      ? res.production_countries.map(function(v) {
          return v.name;
        })
      : res.origin_country
      ? res.origin_country.map(function(v) {
          return v;
        })
      : []
    ).join(','),
    actor: (res.credits && res.credits.cast
      ? res.credits.cast.map(function(v, i) {
          return i < 10 ? v.name : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    director: (res.created_by
      ? res.created_by.map(function(v, i) {
          return i < 10 ? v.name : null;
        })
      : res.credits && res.credits.crew
      ? res.credits.crew.map(function(v) {
          return v.job === 'Director' ? v.name : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    description: res.overview ? res.overview : '',
    poster: res.poster_path ? res.poster_path : '',
    pictures: res.backdrop_path ? res.backdrop_path : '',
    imdb_rating: res.vote_average ? Math.floor(res.vote_average * 10) : '',
    imdb_vote: res.vote_count ? Math.floor(res.vote_count) : '',
    imdb_id: res.imdb_id ? res.imdb_id.replace(/[^0-9]/g, '') : ''
  };
}

function parseOMDb(res) {
  var month = 'Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sept/Oct/Nov/Dec'.split('/');
  return {
    title_en: res.Title && res.Title !== 'N/A' ? res.Title : '',
    year:
      res.Year && res.Year !== 'N/A'
        ? (res.Year + '').split('-')[0].replace(/[^0-9]/g, '')
        : '',
    premiere: (res.Released && res.Released !== 'N/A'
      ? month.map(function(y, i) {
          if (res.Released.indexOf(y) === -1) return null;
          var d = res.Released.split(y);
          if (d && d.length !== 2) return null;
          var mon = i + 1 < 10 ? '0' + (i + 1) : i + 1;
          return d[1].trim() + '-' + mon + '-' + d[0].trim();
        })
      : []
    )
      .filter(Boolean)
      .join(''),
    type: res.Type && res.Type === 'series' ? '1' : '0',
    genre: (res.Genre && res.Genre !== 'N/A'
      ? res.Genre.split(',').map(function(v) {
          return v.trim();
        })
      : []
    ).join(','),
    country: (res.Country && res.Country !== 'N/A'
      ? res.Country.split(',').map(function(v) {
          return v.trim();
        })
      : []
    ).join(','),
    actor: (res.Actors && res.Actors !== 'N/A'
      ? res.Actors.split(',').map(function(v, i) {
          return i < 10 ? v.trim() : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    director: (res.Director && res.Director !== 'N/A'
      ? res.Director.split(',').map(function(v, i) {
          return i < 10 ? v.trim() : null;
        })
      : res.Writer && res.Writer !== 'N/A'
      ? res.Writer.split(',').map(function(v, i) {
          return i < 10 ? v.trim() : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    description: res.Plot && res.Plot !== 'N/A' ? res.Plot : '',
    poster:
      res.Poster && res.Poster !== 'N/A'
        ? res.Poster.replace(/.*?(\/[a-z0-9]*@).*/i, '$1') + '.jpg'
        : '',
    imdb_rating:
      res.imdbRating && res.imdbRating !== 'N/A'
        ? Math.floor(parseInt(res.imdbRating) * 10)
        : '',
    imdb_vote:
      res.imdbVotes && res.imdbVotes !== 'N/A'
        ? Math.floor(parseInt(res.imdbVotes.replace(/,/g, '')))
        : ''
  };
}

function parseKP(r) {
  if (!r.id && !r.kinopoisk_id) return {};
  var res = r;
  return {
    imdb_id: res.imdb_id ? res.imdb_id.replace(/[^0-9]/g, '') : '',
    title_ru:
      res.name || (res.info && res.info.rus)
        ? (res.name || (res.info && res.info.rus))
            .split('(')[0]
            .split('[')[0]
            .trim()
        : '',
    title_en:
      res.name_eng || (res.info && res.info.orig)
        ? (res.name_eng || (res.info && res.info.orig))
            .split('(')[0]
            .split('[')[0]
            .trim()
        : '',
    year:
      res.year || (res.info && res.info.year)
        ? ((res.year || (res.info && res.info.year)) + '')
            .split('-')[0]
            .replace(/[^0-9]/g, '')
        : '',
    type:
      (res.type && res.type === 'series') || (res.serial && res.serial === '1')
        ? '1'
        : '0',
    genre: (Array.isArray(res.genre)
      ? res.genre
          .map(function(v) {
            return v.toLowerCase();
          })
          .filter(function(g) {
            return g !== 'зарубежные' && g !== 'зарубежный';
          })
      : typeof res.genre === 'object'
      ? Object.keys(res.genre)
          .map(function(g) {
            return res.genre[g].toLowerCase();
          })
          .filter(function(g) {
            return g !== 'зарубежные' && g !== 'зарубежный';
          })
      : res.info && res.info.genre && typeof res.info.genre === 'string'
      ? res.info.genre
          .split(',')
          .map(function(g) {
            return g.trim().toLowerCase();
          })
          .filter(function(g) {
            return g && g !== 'зарубежные' && g !== 'зарубежный';
          })
      : []
    ).join(','),
    country: (Array.isArray(res.country)
      ? res.country.map(function(v) {
          return v.trim();
        })
      : typeof res.country === 'object'
      ? Object.keys(res.country).map(function(c) {
          return res.country[c].trim();
        })
      : res.info && res.info.country && typeof res.info.country === 'string'
      ? res.info.country.split(',').map(function(c) {
          return c.trim();
        })
      : []
    ).join(','),
    actor: (res.actors
      ? res.actors.map(function(v, i) {
          return i < 5 ? v : null;
        })
      : res.info && res.info.actors && typeof res.info.actors === 'string'
      ? res.info.actors.split(',').map(function(a, i) {
          return i < 5 ? a.trim() : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    director: (res.director
      ? res.director.map(function(v, i) {
          return i < 3 ? v : null;
        })
      : res.info && res.info.director && typeof res.info.director === 'string'
      ? res.info.director.split(',').map(function(d) {
          return d.trim();
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    description:
      res.description || (res.info && res.info.description)
        ? res.description || (res.info && res.info.description)
        : '',
    poster: res.poster || (res.info && res.info.poster) ? '1' : '',
    kp_rating: res.kinopoisk
      ? Math.floor(res.kinopoisk * 10)
      : res.info && res.info.rating && res.info.rating.rating_kp
      ? Math.floor(parseFloat(res.info.rating.rating_kp) * 10)
      : '',
    kp_vote:
      res.info && res.info.rating && res.info.rating.vote_num_kp
        ? parseInt(res.info.rating.vote_num_kp)
        : '1000',
    imdb_rating: res.imdb
      ? Math.floor(res.imdb * 10)
      : res.info && res.info.rating && res.info.rating.rating_imdb
      ? Math.floor(parseFloat(res.info.rating.rating_imdb) * 10)
      : '',
    imdb_vote:
      res.info && res.info.rating && res.info.rating.vote_num_imdb
        ? parseInt(res.info.rating.vote_num_imdb)
        : '1000',
    translate:
      res.voiceActing && res.voiceActing[0]
        ? res.voiceActing.filter(function(voice) {
            return !/(укр|eng)/i.test(voice);
          })[0]
        : res.translation
        ? res.translation
        : '',
    quality: res.quality ? res.quality : res.quality ? res.quality : '',
    premiere: res.premier
      ? res.premier
      : res.info && res.info.premiere
      ? res.info.premiere
          .split(' ')
          .reverse()
          .map(function(d) {
            return d
              .toLowerCase()
              .replace('января', '01')
              .replace('февраля', '02')
              .replace('марта', '03')
              .replace('апреля', '04')
              .replace('мая', '05')
              .replace('июня', '06')
              .replace('июля', '07')
              .replace('августа', '08')
              .replace('сентября', '09')
              .replace('октября', '10')
              .replace('ноября', '11')
              .replace('декабря', '12')
              .padStart(2, '0');
          })
          .join('-')
      : ''
  };
}

function parsePleer(r) {
  if (!r.kp_id) return {};
  var res = r;
  return {
    imdb_id: res.imdb_id ? res.imdb_id : '',
    tmdb_id: res.tmdb_id ? res.tmdb_id : '',
    title_ru: res.title_ru ? res.title_ru : '',
    title_en: res.title_en ? res.title_en : '',
    year: res.year ? res.year : '',
    type: res.type ? '1' : '0',
    genre: res.genres ? res.genres : '',
    country: res.countries ? res.countries : '',
    actor: res.actors
      ? res.actors
          .split(',')
          .map(function(v, i) {
            return i <= 4 ? v : null;
          })
          .filter(Boolean)
          .join(',')
      : '',
    director: res.directors
      ? res.directors
          .split(',')
          .map(function(v, i) {
            return i <= 2 ? v : null;
          })
          .filter(Boolean)
          .join(',')
      : '',
    description: res.description ? res.description : '',
    poster: '1',
    pictures: res.pictures ? res.pictures : '',
    kp_rating: res.kp_rating,
    kp_vote: res.kp_vote,
    imdb_rating: res.imdb_rating,
    imdb_vote: res.imdb_vote,
    premiere: res.premiere ? res.premiere : ''
  };
}

function parseDouban(res) {
  return {
    title_ru: res.title ? res.title : '',
    title_en: res.original_title ? res.original_title : '',
    year: res.year ? (res.year + '').split('-')[0].replace(/[^0-9]/g, '') : '',
    type: res.subtype && res.subtype === 'tv' ? '1' : '0',
    genre: (res.genres
      ? res.genres.map(function(v) {
          return v;
        })
      : []
    ).join(','),
    country: (res.countries
      ? res.countries.map(function(v) {
          return v;
        })
      : []
    ).join(','),
    actor: (res.casts
      ? res.casts.map(function(v, i) {
          return i < 10 ? v.name : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    director: (res.directors
      ? res.directors.map(function(v, i) {
          return i < 10 ? v.name : null;
        })
      : []
    )
      .filter(Boolean)
      .join(','),
    description: res.summary ? res.summary : '',
    poster: res.images && res.images.medium ? res.images.medium : '',
    imdb_rating:
      res.rating && res.rating.average
        ? Math.floor(res.rating.average * 10)
        : '',
    imdb_vote: res.ratings_count ? Math.floor(res.ratings_count) : '',
    imdb_id: res.imdb_id ? res.imdb_id : '',
    premiere: res.premiere ? res.premiere : ''
  };
}

function autoComplete() {
  var elem = document.querySelector('.autoComplete');
  if (elem) elem.parentNode.removeChild(elem);
  var autoBtn = document.createElement('a');
  var autoIcon = document.createElement('strong');
  var autoSeparate = document.createElement('i');
  var autoText = document.createElement('span');
  autoBtn.setAttribute('class', 'btn power-on autoComplete');
  autoBtn.setAttribute('href', 'javascript:void(0)');
  autoText.innerHTML = '';
  autoSeparate.innerHTML = '';
  autoIcon.setAttribute('class', 'fa fa-video');
  autoBtn.appendChild(autoIcon);
  autoBtn.appendChild(autoSeparate);
  autoBtn.appendChild(autoText);
  var right = document.querySelector('.window > .actionbar > .pull-right > a');
  if (right) {
    right.parentNode.insertBefore(autoBtn, right);
  }
  autoBtn.addEventListener('click', parseData, false);
  if (window.location.hash && window.location.hash.substring(1)) {
    window.history.forward(1);
    var ids = window.location.hash.substring(1).split(',');
    document.querySelector('[name="movie.kp_id"]').value = ids.shift();
    document.querySelector('[name="movie.id"]').value = '';
    window.location.hash = ids.join(',');
    if (autoBtn.fireEvent) {
      autoBtn.fireEvent('onclick');
    } else {
      var evObj = document.createEvent('Events');
      evObj.initEvent('click', true, false);
      autoBtn.dispatchEvent(evObj);
    }
  }
}

function inputOMDb() {
  var omdbDiv = document.createElement('div');
  var omdbInput = document.createElement('input');
  omdbDiv.setAttribute('class', 'spacer-10');
  omdbInput.setAttribute('class', 'form-control');
  omdbInput.setAttribute('name', 'omdb');
  omdbInput.setAttribute('placeholder', 'OMDb apikey [omdbapi.com]');
  var omdbInsert = document.querySelector('[name="movie.id"]');
  if (omdbInsert) {
    omdbInsert.parentNode.insertBefore(omdbDiv, omdbInsert.nextSibling);
    omdbInsert.parentNode.insertBefore(omdbInput, omdbInsert.nextSibling);
  }
}

function inputTMDb() {
  var tmdbDiv = document.createElement('div');
  var tmdbInput = document.createElement('input');
  tmdbDiv.setAttribute('class', 'spacer-10');
  tmdbInput.setAttribute('class', 'form-control');
  tmdbInput.setAttribute('name', 'tmdb');
  tmdbInput.setAttribute('placeholder', 'TMDb api_key [tmdb.org]');
  var tmdbInsert = document.querySelector('[name="movie.id"]');
  if (tmdbInsert) {
    tmdbInsert.parentNode.insertBefore(tmdbDiv, tmdbInsert.nextSibling);
    tmdbInsert.parentNode.insertBefore(tmdbInput, tmdbInsert.nextSibling);
  }
}

function getCookie(name) {
  var matches = document.cookie.match(
    new RegExp(
      '(?:^|; )' + name.replace(/([.$?*|{}()\[\]\\\/+^])/g, '\\$1') + '=([^;]*)'
    )
  );
  return matches ? decodeURIComponent(matches[1]) : undefined;
}

function setCookie(name, value, options) {
  options = options || {};
  var expires = options.expires;
  if (typeof expires === 'number' && expires) {
    var d = new Date();
    d.setTime(d.getTime() + expires * 1000);
    expires = options.expires = d;
  }
  if (expires && expires.toUTCString) {
    options.expires = expires.toUTCString();
  }
  value = encodeURIComponent(value);
  var updatedCookie = name + '=' + value;
  for (var propName in options) {
    if (options.hasOwnProperty(propName)) {
      updatedCookie += '; ' + propName;
      var propValue = options[propName];
      if (propValue !== true) {
        updatedCookie += '=' + propValue;
      }
    }
  }
  document.cookie = updatedCookie;
}