UNPKG

vilike

Version:

A lightweight counts of visit and like plugin.

213 lines (195 loc) 5.46 kB
/* * Vilike.js * (c) 2021 Feng L.H. * Released under the MIT License. */ import fetch from 'cross-fetch'; 'use strict'; const Vilike = {}; Vilike.version = '0.3.0'; const BASE_API_PATH = 'https://api.countapi.xyz'; /** * @description: Execute views/likes by pkey/skey * @param {String} pkey Primary Key * @param {String} skey Sub Key * @param {Number} mode Use localstorage or not * @return {Object} */ Vilike.exec = function (pkey, skey, mode) { return new Promise(function (resolve, reject) { if ( pkey === undefined || pkey === '' || skey === undefined || skey === '' ) { reject('pkey and skey must be set.'); return; } switch (mode){ case 0: fetchJson(`${BASE_API_PATH}/hit/${pkey}/${skey}`) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); break; case 1: const keyVal = localStorage.getItem(pkey); let newRes = {}; if (keyVal === null){ localStorage.setItem(pkey, skey); fetchJson(`${BASE_API_PATH}/hit/${pkey}/${skey}`) .then((res) => { Object.assign(newRes,res,{isHit:true}); resolve(newRes); }) .catch((err) => { reject(err); }); }else{ fetchJson(`${BASE_API_PATH}/get/${pkey}/${skey}`) .then((res) => { Object.assign(newRes,res,{isHit:true}); resolve(newRes); }) .catch((err) => { reject(err); }); } break; default: reject('mode must be 0 or 1'); } }); }; /** * @description: Create new data by customized * @param {String} pkey Primary Key * @param {String} skey Sub Key * @param {String} value Initial Value * @param {String} ctrl Allows the key to be resetted * @param {String} upperbound Restrict update to not add more than this number. * @return {Object} */ Vilike.create = function (pkey, skey, value, ctrl, upperbound) { return new Promise(function (resolve, reject) { if ( pkey === undefined || pkey === '' || skey === undefined || skey === '' ) { reject('pkey and skey must be set.'); return; } value = value === undefined || value === '' ? 0 : value; ctrl = ctrl === undefined || ctrl === '' ? 0 : ctrl; upperbound = upperbound === undefined || upperbound === '' ? 1 : upperbound; fetchJson( `${BASE_API_PATH}/create?namespace=${pkey}&key=${skey}&value=${value}&enable_reset=${ctrl}&update_upperbound=${upperbound}&update_lowerbound=0` ) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); }; /** * @description: Update value from countapi.xyz /set/ and /update/ method * @param {String} pkey Primary Key * @param {String} skey Sub Key * @param {String} value Target value or addition value * @param {Number} type update value by 0 / add value by 1 * @return {Object} */ Vilike.update = function (pkey, skey, value, type) { return new Promise(function (resolve, reject) { if ( pkey === undefined || pkey === '' || skey === undefined || skey === '' ) { reject('pkey and skey must be set.'); return; } switch (type) { case 0: value = value === undefined || value === '' ? 0 : value; fetchJson(`${BASE_API_PATH}/set/${pkey}/${skey}?value=${value}`) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); break; case 1: value = value === undefined || value === '' ? 1 : value; fetchJson(`${BASE_API_PATH}/update/${pkey}/${skey}?amount=${value}`) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); break; default: reject('type must be 0 or 1.'); } }); }; /** * @description: Fetch info by pkey/skey * @param {String} pkey Primary Key * @param {String} skey Sub Key * @return {Object} */ Vilike.info = function (pkey, skey) { return new Promise(function (resolve, reject) { if ( pkey === undefined || pkey === '' || skey === undefined || skey === '' ) { reject('pkey and skey must be set.'); return; } fetchJson(`${BASE_API_PATH}/info/${pkey}/${skey}`) .then((res) => { resolve(res); }) .catch((err) => { reject(err); }); }); }; /** * @description: Fetch json from api * @param {String} url response from url * @return {Object} */ function fetchJson(url) { return new Promise((resolve) => { fetch(url) .then(res => { return res.json(); }) .then(function(data) { resolve(data); }) .catch(err => { console.error(err); }); }); } if (typeof window !== 'undefined') { window.Vilike = Vilike; } export default Vilike;