From 9bcdf905ddd93bd37be4783679b23cb698bfb301 Mon Sep 17 00:00:00 2001 From: Artyom Abubakirov Date: Fri, 13 Jul 2018 18:29:22 +0500 Subject: [PATCH] Dashboard for 4 streams --- package-lock.json | 129 ++++++++++++++++++----------------- static/css/dashboard.css | 2 + static/css/dashboard.css.map | 1 + static/css/dashboard.less | 49 +++++++++++++ static/dashboard.html | 25 +++++++ static/img/dragdrop.png | Bin 0 -> 25205 bytes static/js/dashboard.js | 81 ++++++++++++++++++++++ 7 files changed, 226 insertions(+), 61 deletions(-) mode change 100644 => 100755 package-lock.json create mode 100755 static/css/dashboard.css create mode 100755 static/css/dashboard.css.map create mode 100755 static/css/dashboard.less create mode 100755 static/dashboard.html create mode 100755 static/img/dragdrop.png create mode 100755 static/js/dashboard.js diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index f305cc9..47f493c --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.6", "negotiator": "0.5.3" } }, @@ -33,7 +33,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.8.0" } }, "backo2": { @@ -85,8 +85,8 @@ "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz", "integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=", "requires": { - "bindings": "1.2.1", - "nan": "2.10.0" + "bindings": "1.2.x", + "nan": "^2.0.5" } }, "callsite": { @@ -172,7 +172,7 @@ "cookie": "0.3.1", "debug": "2.3.3", "engine.io-parser": "1.3.2", - "ws": "1.1.5" + "ws": "~1.1.5" }, "dependencies": { "accepts": { @@ -180,7 +180,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, @@ -223,7 +223,7 @@ "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.5", + "ws": "~1.1.5", "xmlhttprequest-ssl": "1.5.3", "yeast": "0.1.2" }, @@ -289,30 +289,30 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.12.4.tgz", "integrity": "sha1-j+wlECVbxrLlgQfEgjnA+jB8GqI=", "requires": { - "accepts": "1.2.13", + "accepts": "~1.2.7", "content-disposition": "0.5.0", - "content-type": "1.0.4", + "content-type": "~1.0.1", "cookie": "0.1.2", "cookie-signature": "1.0.6", - "debug": "2.2.0", - "depd": "1.0.1", + "debug": "~2.2.0", + "depd": "~1.0.1", "escape-html": "1.0.1", - "etag": "1.6.0", + "etag": "~1.6.0", "finalhandler": "0.3.6", "fresh": "0.2.4", "merge-descriptors": "1.0.0", - "methods": "1.1.2", - "on-finished": "2.2.1", - "parseurl": "1.3.2", + "methods": "~1.1.1", + "on-finished": "~2.2.1", + "parseurl": "~1.3.0", "path-to-regexp": "0.1.3", - "proxy-addr": "1.0.10", + "proxy-addr": "~1.0.8", "qs": "2.4.2", - "range-parser": "1.0.3", + "range-parser": "~1.0.2", "send": "0.12.3", - "serve-static": "1.9.3", - "type-is": "1.6.16", + "serve-static": "~1.9.3", + "type-is": "~1.6.2", "utils-merge": "1.0.0", - "vary": "1.0.1" + "vary": "~1.0.0" } }, "extend": { @@ -325,9 +325,9 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.3.6.tgz", "integrity": "sha1-2vnEFhsbBuABRmsUEd/baXO+E4s=", "requires": { - "debug": "2.2.0", + "debug": "~2.2.0", "escape-html": "1.0.1", - "on-finished": "2.2.1" + "on-finished": "~2.2.1" } }, "forwarded": { @@ -385,38 +385,43 @@ }, "kurento-client": { "version": "github:Kurento/kurento-client-js#efb160e85a4b1f376307fe1979c9fbcb5f978393", + "from": "kurento-client@github:Kurento/kurento-client-js#efb160e85a4b1f376307fe1979c9fbcb5f978393", "requires": { - "async": "2.0.1", + "async": "~2.0.1", "error-tojson": "0.0.1", - "es6-promise": "4.2.4", - "extend": "3.0.1", - "inherits": "2.0.3", + "es6-promise": "^4.0.5", + "extend": "^3.0.0", + "inherits": "~2.0.3", "kurento-client-core": "github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0", "kurento-client-elements": "github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81", "kurento-client-filters": "github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0", "kurento-jsonrpc": "github:Kurento/kurento-jsonrpc-js#7d07108feb18dae90b4d08567afd28db0b2138a6", - "minimist": "1.2.0", + "minimist": "^1.2.0", "promise": "7.1.1", "promisecallback": "0.0.4", "reconnect-ws": "github:KurentoForks/reconnect-ws#f287385d75861654528c352e60221f95c9209f8a" } }, "kurento-client-core": { - "version": "github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0" + "version": "github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0", + "from": "kurento-client-core@github:Kurento/kurento-client-core-js#2160f8e6938f138b52b72a5c5c354d1e5fce1ca0" }, "kurento-client-elements": { - "version": "github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81" + "version": "github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81", + "from": "kurento-client-elements@github:Kurento/kurento-client-elements-js#cbd1ff67fbf0faddc9f6f266bb33e449bc9e1f81" }, "kurento-client-filters": { - "version": "github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0" + "version": "github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0", + "from": "kurento-client-filters@github:Kurento/kurento-client-filters-js#51308da53e432a2db9559dcdb308d87951417bf0" }, "kurento-jsonrpc": { "version": "github:Kurento/kurento-jsonrpc-js#7d07108feb18dae90b4d08567afd28db0b2138a6", + "from": "kurento-jsonrpc@github:Kurento/kurento-jsonrpc-js#7d07108feb18dae90b4d08567afd28db0b2138a6", "requires": { - "bufferutil": "1.2.1", - "inherits": "2.0.3", - "utf-8-validate": "1.2.2", - "ws": "1.1.5" + "bufferutil": "1.2.x", + "inherits": "^2.0.1", + "utf-8-validate": "1.2.x", + "ws": "^1.1.1" } }, "lodash": { @@ -454,7 +459,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "minimist": { @@ -505,7 +510,7 @@ "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseqs": { @@ -513,7 +518,7 @@ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -521,7 +526,7 @@ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -539,7 +544,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz", "integrity": "sha1-SJZUxpJha4qlWwck+oCbt9tJxb8=", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promisecallback": { @@ -552,7 +557,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", "integrity": "sha1-DUCoL4Afw1VWfS7LZe/j8HfxIcU=", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.0", "ipaddr.js": "1.0.5" } }, @@ -568,15 +573,17 @@ }, "reconnect-core": { "version": "github:KurentoForks/reconnect-core#921d43e91578abb2fb2613f585c010c1939cf734", + "from": "reconnect-core@github:KurentoForks/reconnect-core#921d43e91578abb2fb2613f585c010c1939cf734", "requires": { - "backoff": "2.3.0" + "backoff": "~2.3.0" } }, "reconnect-ws": { "version": "github:KurentoForks/reconnect-ws#f287385d75861654528c352e60221f95c9209f8a", + "from": "reconnect-ws@github:KurentoForks/reconnect-ws#f287385d75861654528c352e60221f95c9209f8a", "requires": { "reconnect-core": "github:KurentoForks/reconnect-core#921d43e91578abb2fb2613f585c010c1939cf734", - "websocket-stream": "0.5.1" + "websocket-stream": "~0.5.1" } }, "send": { @@ -584,16 +591,16 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.12.3.tgz", "integrity": "sha1-zRLcWP3iHk+RkCs5sv2gWnptm9w=", "requires": { - "debug": "2.2.0", - "depd": "1.0.1", + "debug": "~2.2.0", + "depd": "~1.0.1", "destroy": "1.0.3", "escape-html": "1.0.1", - "etag": "1.6.0", + "etag": "~1.6.0", "fresh": "0.2.4", "mime": "1.3.4", "ms": "0.7.1", - "on-finished": "2.2.1", - "range-parser": "1.0.3" + "on-finished": "~2.2.1", + "range-parser": "~1.0.2" } }, "serve-static": { @@ -602,7 +609,7 @@ "integrity": "sha1-X42gcyOtOF/z3FQfGnkXsuQ261c=", "requires": { "escape-html": "1.0.1", - "parseurl": "1.3.2", + "parseurl": "~1.3.0", "send": "0.12.3", "utils-merge": "1.0.0" } @@ -613,7 +620,7 @@ "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", "requires": { "debug": "2.3.3", - "engine.io": "1.8.5", + "engine.io": "~1.8.4", "has-binary": "0.1.7", "object-assign": "4.1.0", "socket.io-adapter": "0.5.0", @@ -669,7 +676,7 @@ "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "2.3.3", - "engine.io-client": "1.8.5", + "engine.io-client": "~1.8.4", "has-binary": "0.1.7", "indexof": "0.0.1", "object-component": "0.0.3", @@ -730,7 +737,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "ultron": { @@ -743,8 +750,8 @@ "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz", "integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=", "requires": { - "bindings": "1.2.1", - "nan": "2.4.0" + "bindings": "~1.2.1", + "nan": "~2.4.0" }, "dependencies": { "nan": { @@ -770,8 +777,8 @@ "integrity": "sha1-YizR8FZvuEzgpNb4VFJvPcTXDkg=", "requires": { "isbuffer": "0.0.0", - "through": "2.3.8", - "ws": "0.4.32" + "through": "~2.3.4", + "ws": "~0.4.30" }, "dependencies": { "nan": { @@ -784,10 +791,10 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz", "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=", "requires": { - "commander": "2.1.0", - "nan": "1.0.0", - "options": "0.0.6", - "tinycolor": "0.0.1" + "commander": "~2.1.0", + "nan": "~1.0.0", + "options": ">=0.0.5", + "tinycolor": "0.x" } } } @@ -797,8 +804,8 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "options": ">=0.0.5", + "ultron": "1.0.x" } }, "wtf-8": { diff --git a/static/css/dashboard.css b/static/css/dashboard.css new file mode 100755 index 0000000..7b6e606 --- /dev/null +++ b/static/css/dashboard.css @@ -0,0 +1,2 @@ +.dashboard{min-height:100vh;min-width:100%}.dashboard--elem{position:relative;border:1px dashed gainsboro;width:50%;float:left;height:50vh;background-image:url('../img/dragdrop.png');background-repeat:no-repeat;background-position:center center;background-size:100px 100px}.dashboard--elem.small{display:none}.dashboard--elem.small--panel{display:none}.dashboard--elem.fullscreen{display:block !important;height:100vh !important;width:100% !important}.dashboard--elem--panel{z-index:999;position:absolute;left:15px;top:15px;background-color:black;border-radius:15px;color:white;text-align:center;padding:10px}.dashboard--elem--panel span{cursor:pointer;margin-left:10px}.dashboard--elem--panel span:first-child{margin-left:0} +/*# sourceMappingURL=dashboard.css.map */ \ No newline at end of file diff --git a/static/css/dashboard.css.map b/static/css/dashboard.css.map new file mode 100755 index 0000000..b26b41b --- /dev/null +++ b/static/css/dashboard.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["dashboard.less"],"names":[],"mappings":"AAEA,WACI,iBACA,cAAA,CACA,iBACI,kBACA,4BACA,UACA,WACA,YACA,4CACA,4BACA,kCACA,2BAAA,CAEA,uBACI,YAAA,CACA,8BACI,YAAA,CAIR,4BACI,yBACA,wBACA,qBAAA,CAGJ,wBACI,YACA,kBACA,UACA,SACA,uBACA,mBACA,YACA,kBACA,YAAA,CATJ,6BAcQ,eACA,gBAAA,CAJA,yCACI,aAAA,CAAA","file":"to.css"} \ No newline at end of file diff --git a/static/css/dashboard.less b/static/css/dashboard.less new file mode 100755 index 0000000..3ad8ced --- /dev/null +++ b/static/css/dashboard.less @@ -0,0 +1,49 @@ +//autoprefixer: true, sourceMap: true, compress: true + +.dashboard { + min-height: 100vh; + min-width: 100%; + &--elem{ + position: relative; + border: 1px dashed gainsboro; + width: 50%; + float: left; + height: 50vh; + background-image: url('../img/dragdrop.png'); + background-repeat: no-repeat; + background-position: center center; + background-size: 100px 100px; + + &.small { + display: none; + &--panel{ + display: none; + } + } + + &.fullscreen { + display: block!important; + height: 100vh!important; + width: 100%!important; + } + + &--panel{ + z-index: 999; + position: absolute; + left: 15px; + top: 15px; + background-color: black; + border-radius: 15px; + color:white; + text-align: center; + padding: 10px; + span{ + &:first-child{ + margin-left: 0px; + } + cursor: pointer; + margin-left: 10px; + } + } + } +} \ No newline at end of file diff --git a/static/dashboard.html b/static/dashboard.html new file mode 100755 index 0000000..981016c --- /dev/null +++ b/static/dashboard.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/static/img/dragdrop.png b/static/img/dragdrop.png new file mode 100755 index 0000000000000000000000000000000000000000..3e960d49865599222109a55692759278aeb0f0b7 GIT binary patch literal 25205 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 { + + var counter = 0; + + function generatePanel(i) { + return '
' + + ' ' + + '' + + ' ' + + '
'; + } + + // add event listeners + function bindEvents(id) { + $( '#close' + id)[0].addEventListener('click', streamClose); + $( '#reload' + id)[0].addEventListener('click', streamReload); + $( '#full' + id)[0].addEventListener('click', streamFull); + } + + // close frame with stream + function streamClose(e) { + e.preventDefault(); + e.stopPropagation(); + $(this)[0].removeEventListener('click', streamClose); + let parent = $(this).parent('.dashboard--elem--panel').parent('.dashboard--elem'); + parent.empty(); + if(parent.hasClass('fullscreen')){ + parent.removeClass('fullscreen'); + $('.dashboard--elem').removeClass('hide'); + } + } + + // reload stream + function streamReload(e) { + e.preventDefault(); + e.stopPropagation(); + let elem = $(this).parent('.dashboard--elem--panel').parent('.dashboard--elem'); + let idStr = $(this).attr('id'); + let id = parseInt(idStr.match(/(\d+)$/)[0]); + let html = elem.html(); + elem.empty(); + elem.html(html); + + bindEvents(id); + } + + function streamFull(e) { + e.preventDefault(); + e.stopPropagation(); + let parent = $(this).parent('.dashboard--elem--panel').parent('.dashboard--elem'); + if(parent.hasClass('fullscreen')){ + parent.removeClass('fullscreen'); + $('.dashboard--elem').removeClass('hide'); + } else { + $('.dashboard--elem').addClass('hide'); + parent.addClass('fullscreen'); + } + } + + + $('.dashboard--elem').on('drop', function (e) { + console.log('drop'); + e.preventDefault(); + let target = e.target; + let url = e.originalEvent.dataTransfer.getData('URL'); + + if(!url || url.indexOf('https://gto.to/?r=') === -1){ + return false; + } + $(target).empty(); + let panel = generatePanel(counter); + $( this ).append( panel + '' ); + + bindEvents(counter); + counter++; + return false; + }); + +}); \ No newline at end of file