From d2921f92575da368d86aae12732cf14a579e58f6 Mon Sep 17 00:00:00 2001 From: HiveTrending Date: Sun, 2 May 2021 13:37:10 -0700 Subject: [PATCH] Initial commit --- .gitignore | 2 + axios.min.js | 3 ++ css/hep.css | 49 +++++++++++++++++ hive-engine-price.js | 66 +++++++++++++++++++++++ hive-engine-price.php | 121 ++++++++++++++++++++++++++++++++++++++++++ img/hiveengine.png | Bin 0 -> 2794 bytes img/leodex.png | Bin 0 -> 3411 bytes img/tribaldex.png | Bin 0 -> 1064 bytes index.php | 2 + 9 files changed, 243 insertions(+) create mode 100644 axios.min.js create mode 100644 css/hep.css create mode 100644 hive-engine-price.js create mode 100644 hive-engine-price.php create mode 100644 img/hiveengine.png create mode 100644 img/leodex.png create mode 100644 img/tribaldex.png create mode 100644 index.php diff --git a/.gitignore b/.gitignore index a32768a..642acb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS_Store + # ignore everything in the root except the "wp-content" directory. !wp-content/ diff --git a/axios.min.js b/axios.min.js new file mode 100644 index 0000000..fc6c8b6 --- /dev/null +++ b/axios.min.js @@ -0,0 +1,3 @@ +/* axios v0.21.1 | (c) 2020 by Matt Zabriskie */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.axios=t():e.axios=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){var t=new i(e),n=s(i.prototype.request,t);return o.extend(n,i.prototype,t),o.extend(n,t),n}var o=n(2),s=n(3),i=n(4),a=n(22),u=n(10),c=r(u);c.Axios=i,c.create=function(e){return r(a(c.defaults,e))},c.Cancel=n(23),c.CancelToken=n(24),c.isCancel=n(9),c.all=function(e){return Promise.all(e)},c.spread=n(25),c.isAxiosError=n(26),e.exports=c,e.exports.default=c},function(e,t,n){"use strict";function r(e){return"[object Array]"===R.call(e)}function o(e){return"undefined"==typeof e}function s(e){return null!==e&&!o(e)&&null!==e.constructor&&!o(e.constructor)&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function i(e){return"[object ArrayBuffer]"===R.call(e)}function a(e){return"undefined"!=typeof FormData&&e instanceof FormData}function u(e){var t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer}function c(e){return"string"==typeof e}function f(e){return"number"==typeof e}function p(e){return null!==e&&"object"==typeof e}function d(e){if("[object Object]"!==R.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Date]"===R.call(e)}function h(e){return"[object File]"===R.call(e)}function m(e){return"[object Blob]"===R.call(e)}function y(e){return"[object Function]"===R.call(e)}function g(e){return p(e)&&y(e.pipe)}function v(e){return"undefined"!=typeof URLSearchParams&&e instanceof URLSearchParams}function x(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function w(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)}function b(e,t){if(null!==e&&"undefined"!=typeof e)if("object"!=typeof e&&(e=[e]),r(e))for(var n=0,o=e.length;n=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},s.forEach(["delete","get","head"],function(e){u.headers[e]={}}),s.forEach(["post","put","patch"],function(e){u.headers[e]=s.merge(a)}),e.exports=u},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){r.forEach(e,function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])})}},function(e,t,n){"use strict";var r=n(2),o=n(13),s=n(16),i=n(5),a=n(17),u=n(20),c=n(21),f=n(14);e.exports=function(e){return new Promise(function(t,n){var p=e.data,d=e.headers;r.isFormData(p)&&delete d["Content-Type"];var l=new XMLHttpRequest;if(e.auth){var h=e.auth.username||"",m=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";d.Authorization="Basic "+btoa(h+":"+m)}var y=a(e.baseURL,e.url);if(l.open(e.method.toUpperCase(),i(y,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,l.onreadystatechange=function(){if(l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))){var r="getAllResponseHeaders"in l?u(l.getAllResponseHeaders()):null,s=e.responseType&&"text"!==e.responseType?l.response:l.responseText,i={data:s,status:l.status,statusText:l.statusText,headers:r,config:e,request:l};o(t,n,i),l=null}},l.onabort=function(){l&&(n(f("Request aborted",e,"ECONNABORTED",l)),l=null)},l.onerror=function(){n(f("Network Error",e,null,l)),l=null},l.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(f(t,e,"ECONNABORTED",l)),l=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||c(y))&&e.xsrfCookieName?s.read(e.xsrfCookieName):void 0;g&&(d[e.xsrfHeaderName]=g)}if("setRequestHeader"in l&&r.forEach(d,function(e,t){"undefined"==typeof p&&"content-type"===t.toLowerCase()?delete d[t]:l.setRequestHeader(t,e)}),r.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),e.responseType)try{l.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){l&&(l.abort(),n(e),l=null)}),p||(p=null),l.send(p)})}},function(e,t,n){"use strict";var r=n(14);e.exports=function(e,t,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var r=n(15);e.exports=function(e,t,n,o,s){var i=new Error(e);return r(i,t,n,o,s)}},function(e,t){"use strict";e.exports=function(e,t,n,r,o){return e.config=t,n&&(e.code=n),e.request=r,e.response=o,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){return{write:function(e,t,n,o,s,i){var a=[];a.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(s)&&a.push("domain="+s),i===!0&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(e,t,n){"use strict";var r=n(18),o=n(19);e.exports=function(e,t){return e&&!r(t)?o(e,t):t}},function(e,t){"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},function(e,t){"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},function(e,t,n){"use strict";var r=n(2),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,s,i={};return e?(r.forEach(e.split("\n"),function(e){if(s=e.indexOf(":"),t=r.trim(e.substr(0,s)).toLowerCase(),n=r.trim(e.substr(s+1)),t){if(i[t]&&o.indexOf(t)>=0)return;"set-cookie"===t?i[t]=(i[t]?i[t]:[]).concat([n]):i[t]=i[t]?i[t]+", "+n:n}}),i):i}},function(e,t,n){"use strict";var r=n(2);e.exports=r.isStandardBrowserEnv()?function(){function e(e){var t=e;return n&&(o.setAttribute("href",t),t=o.href),o.setAttribute("href",t),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,""):"",host:o.host,search:o.search?o.search.replace(/^\?/,""):"",hash:o.hash?o.hash.replace(/^#/,""):"",hostname:o.hostname,port:o.port,pathname:"/"===o.pathname.charAt(0)?o.pathname:"/"+o.pathname}}var t,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement("a");return t=e(window.location.href),function(n){var o=r.isString(n)?e(n):n;return o.protocol===t.protocol&&o.host===t.host}}():function(){return function(){return!0}}()},function(e,t,n){"use strict";var r=n(2);e.exports=function(e,t){function n(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function o(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(e[o],t[o])}t=t||{};var s={},i=["url","method","data"],a=["headers","auth","proxy","params"],u=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],c=["validateStatus"];r.forEach(i,function(e){r.isUndefined(t[e])||(s[e]=n(void 0,t[e]))}),r.forEach(a,o),r.forEach(u,function(o){r.isUndefined(t[o])?r.isUndefined(e[o])||(s[o]=n(void 0,e[o])):s[o]=n(void 0,t[o])}),r.forEach(c,function(r){r in t?s[r]=n(e[r],t[r]):r in e&&(s[r]=n(void 0,e[r]))});var f=i.concat(a).concat(u).concat(c),p=Object.keys(e).concat(Object.keys(t)).filter(function(e){return f.indexOf(e)===-1});return r.forEach(p,o),s}},function(e,t){"use strict";function n(e){this.message=e}n.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},n.prototype.__CANCEL__=!0,e.exports=n},function(e,t,n){"use strict";function r(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(e){t=e});var n=this;e(function(e){n.reason||(n.reason=new o(e),t(n.reason))})}var o=n(23);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var e,t=new r(function(t){e=t});return{token:t,cancel:e}},e.exports=r},function(e,t){"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},function(e,t){"use strict";e.exports=function(e){return"object"==typeof e&&e.isAxiosError===!0}}])}); +//# sourceMappingURL=axios.min.map \ No newline at end of file diff --git a/css/hep.css b/css/hep.css new file mode 100644 index 0000000..278f4e5 --- /dev/null +++ b/css/hep.css @@ -0,0 +1,49 @@ +/* hep.css */ + +div.hep_widget_container { + text-align: center; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border: 1px solid #969696; + /*background-color: #EBEBEB;*/ +} + +div.hep_widget_container h4 { + margin: 0px; +} + +div.hep_widget_container h5 { + margin-top: 20px; + margin-bottom: 20px; +} + +div.hep_widget_container h6 { + margin: 0px; +} + +div.hep_widget_header { + /*background-color: #277da1ff;*/ +} + +div.hep_widget_content { + /*background-color: #EBEBEB;*/ + + padding-left: 10px; + padding-right: 10px; +} + +div.hep_widget_exchanges { + display:inline-block; + width: 100%; + border-top: 1px solid #969696; + min-width: 127px; + /*background-color: #EBEBEB;*/ +} + +div.hep_widget_exchanges > a { + padding: 10px; + margin-left: auto; + margin-right: auto; + display: inline-block; +} diff --git a/hive-engine-price.js b/hive-engine-price.js new file mode 100644 index 0000000..4daa23f --- /dev/null +++ b/hive-engine-price.js @@ -0,0 +1,66 @@ +// hive-engine-price.js + +const rpc = 'https://api.hive-engine.com/rpc/contracts'; + +function getSellBook(token) { + return new Promise((resolve, reject) => { + const query = {'id': 1, + jsonrpc: '2.0', + method: 'find', + params: { + contract: 'market', + table: 'sellBook', + query: { + symbol: token + } + }} + let nextBlock = false + axios.post(rpc, query).then((result) => { + return resolve(result.data.result) + }).catch((err) => { + console.log(err) + return reject(err) + }) + }) +} + +function getHivePrice() { + return new Promise((resolve, reject) => { + const coingecko_api = 'https://api.coingecko.com/api/v3/simple/price?ids=hive&vs_currencies=USD' + axios.get(coingecko_api).then((result) => { + return resolve(result.data.hive.usd) + }).catch((err) => { + console.log(err) + return reject(err) + }) + }) +} + +function getTokenPrice(token, content_div_id) { + var hivePrice = getHivePrice() + var sellBook = getSellBook(token) + + Promise.all([hivePrice,sellBook]).then((result) => { + let hivePrice = result[0] + + let sellBook = result[1] + sellBook = sellBook.sort( (a,b) => Number(a.price) - Number(b.price) ) + + var targetDiv = document.querySelector('div#' + content_div_id) + + let sellOrder = sellBook[0] + + let quantity = sellOrder.quantity + let symbol = sellOrder.symbol + let price = sellOrder.price + targetDiv.innerHTML = (`${Number(price).toFixed(3)} HIVE
${(price * hivePrice).toFixed(3)} USD`) + }) +} + +Array.from(document.querySelectorAll('div.hep_widget_content')).forEach( (div) => { + let token_name = div.getAttribute('data-token-name') + let div_id = div.getAttribute('id') + getTokenPrice(token_name.toUpperCase(), div_id) +}) + + diff --git a/hive-engine-price.php b/hive-engine-price.php new file mode 100644 index 0000000..13b36db --- /dev/null +++ b/hive-engine-price.php @@ -0,0 +1,121 @@ + __( 'Show Hive-Engine token prices', 'hep_widget_domain' ), ) +); +} + + +// Creating widget front-end + +public function widget( $args, $instance ) { +$token = apply_filters( 'widget_title', $instance['token'] ); + +$content_div_id = 'hep_widget_content_' . $this->id; + + +// before and after widget arguments are defined by themes +echo $args['before_widget']; +if ( ! empty( $token ) ) +//echo $args['before_title'] . $this->name . $args['after_title']; + +// This is where you run the code and display the output +echo __( '', 'hep_widget_domain' ); +echo __( '
', 'hep_widget_domain' ); + +// Widget content header +echo __( '
', 'hep_widget_domain' ); +echo __( '

$' . $token . '

Current Price:
', 'hep_widget_domain' ); +echo __( '
', 'hep_widget_domain' ); + +echo __( get_header_textcolor(), 'hep_widget_domain'); + +// Width content body +echo __( '
', 'hep_widget_domain' ); + +echo __( '
+ + + +
' + , 'hep_widget_domain' ); + +echo __( '
', 'hep_widget_domain' ); +echo __( '', 'hep_widget_domain' ); + +echo $args['after_widget']; +} + +// Widget Backend +public function form( $instance ) { +if ( isset( $instance[ 'token' ] ) ) { +$token = $instance[ 'token' ]; +} +else { +$token = __( 'PIZZA', 'hep_widget_domain' ); +} + +// Widget admin form +?> +

+ + +

+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 literal 0 HcmV?d00001 diff --git a/img/leodex.png b/img/leodex.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f55c8aa7c46521842614189cc1f41bdf854cf2 GIT binary patch literal 3411 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 literal 0 HcmV?d00001 diff --git a/img/tribaldex.png b/img/tribaldex.png new file mode 100644 index 0000000000000000000000000000000000000000..36b13f612500cd3757162beef128253f7ebf1c4b GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}0jUw5X}-P; zT0k}j0~4bV12aeo5Hhr9GO&Qz3=C>Ont_3N0V6_o0TWzSVF5FO4N|x-+UG6MkjTuC zh>{3jAFJg2T)o7U{G?R9irfN_0tTB3D*7iAWdWaj57fXq!y$}cUk zRZ;?31P2gzmSmy6c9hZE<061EG)MtG=Mf3E#~ z_KaHK@^E=uk2jJHci9+PH?J+6zv6+*?HfD-rTcZSFr7<0uEs1Iu{+pcTkX!(2e3PV3k&zP+bp`l`jcxqH&YhFW2a8j z1G?vOWjJoGxV)}u$JlKF?7 z<$zuC(|47536a~EGt~S2{&D-$jA