проигрыватель
This commit is contained in:
1 parent
3344af5fca
commit
18213f4df0
13 files changed
+291
-70
No files matched your search
@@ -0,0 +1,31 @@
|
||||
function События()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.обработчики = [];
|
||||
};
|
||||
|
||||
this.подписать = function(обработчик)
|
||||
{
|
||||
this.обработчики.push(обработчик);
|
||||
};
|
||||
|
||||
this.отписать = function(обработчик) {
|
||||
var номер = this.обработчики.indexOf(обработчик);
|
||||
if (номер != -1)
|
||||
{
|
||||
this.обработчики.splice(номер, 1);
|
||||
}
|
||||
};
|
||||
|
||||
this.уведомить = function(событие) {
|
||||
for (var номер in this.обработчики)
|
||||
{
|
||||
var обработчик = this.обработчики[номер];
|
||||
обработчик.обработатьСобытие(событие);
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
function вZ64(строка)
|
||||
{
|
||||
var байты = new TextEncoder("utf-8").encode(строка);
|
||||
var архив = pako.deflate(байты, { to: 'string' });
|
||||
return base64js.fromByteArray(архив);
|
||||
}
|
||||
|
||||
function изZ64(строка)
|
||||
{
|
||||
var архив = base64js.toByteArray(строка);
|
||||
var байты = pako.inflate(архив);
|
||||
return new TextDecoder("utf-8").decode(байты);
|
||||
}
|
||||
|
||||
function uuid()
|
||||
{
|
||||
// https://stackoverflow.com/a/2117523
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
|
||||
/[xy]/g,
|
||||
function(c)
|
||||
{
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
function ПараметрыЗапуска()
|
||||
{
|
||||
this.создать = function() {
|
||||
this.параметры = {};
|
||||
var запрос = window.location.search.substring(1);
|
||||
var аргументы = запрос.split("&");
|
||||
for (var номер in аргументы)
|
||||
{
|
||||
var арг = аргументы[номер];
|
||||
var позицияЗнака = арг.indexOf("=");
|
||||
// Лишь ключ.
|
||||
if (позицияЗнака == -1)
|
||||
{
|
||||
var ключ = decodeURIComponent(арг);
|
||||
this.параметры[ключ] = null;
|
||||
}
|
||||
// Ключ со значением.
|
||||
else
|
||||
{
|
||||
var сыройКлюч = арг.slice(0, позицияЗнака);
|
||||
var сыроеЗначение = арг.slice(позицияЗнака + 1);
|
||||
var ключ = decodeURIComponent(сыройКлюч);
|
||||
var значение = decodeURIComponent(сыроеЗначение);
|
||||
this.параметры[ключ] = значение;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
function Игра()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.события = new События();
|
||||
this.пз = new ПараметрыЗапуска();
|
||||
this.исполнитьКод();
|
||||
};
|
||||
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var z64 = this.пз.параметры["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = изZ64(z64);
|
||||
/**/console.debug("Игра.исполнитьКод:", код);
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -3,6 +3,18 @@ function Игра()
|
||||
this.создать = function()
|
||||
{
|
||||
this.события = new События();
|
||||
this.пз = new ПараметрыЗапуска();
|
||||
this.исполнитьКод();
|
||||
};
|
||||
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var z64 = this.пз.параметры["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = изZ64(z64);
|
||||
/**/console.debug("Игра.исполнитьКод:", код);
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<script src="../общее/base64-js/base64js.min.js"></script>
|
||||
<script src="../общее/pako/pako.min.js"></script>
|
||||
<script src="matter-js/matter.min.js"></script>
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
@@ -12,8 +13,10 @@
|
||||
<div id="корень"></div>
|
||||
<div id="отладка"></div>
|
||||
|
||||
<script src="../общее/100.события.js"></script>
|
||||
<script src="700.игра.js"></script>
|
||||
<script src="../общее/100.События.js"></script>
|
||||
<script src="../общее/200.функции.js"></script>
|
||||
<script src="../общее/300.ПараметрыЗапуска.js"></script>
|
||||
<script src="700.Игра.js"></script>
|
||||
<script>
|
||||
var игра = new Игра();
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
https://github.com/liabru/matter-js/blob/master/build/matter.min.js
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
/*!
|
||||
* matter-js 0.17.1 by @liabru
|
||||
* http://brm.io/matter-js/
|
||||
* License MIT
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Matter",[],t):"object"==typeof exports?exports.Matter=t():e.Matter=t()}(this,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=22)}([function(e,t){var n={};e.exports=n,function(){n._nextId=0,n._seed=0,n._nowStartTime=+new Date,n._warnedOnce={},n._decomp=null,n.extend=function(e,t){var i,o;"boolean"==typeof t?(i=2,o=t):(i=1,o=!0);for(var r=i;r<arguments.length;r++){var a=arguments[r];if(a)for(var s in a)o&&a[s]&&a[s].constructor===Object?e[s]&&e[s].constructor!==Object?e[s]=a[s]:(e[s]=e[s]||{},n.extend(e[s],o,a[s])):e[s]=a[s]}return e},n.clone=function(e,t){return n.extend({},t,e)},n.keys=function(e){if(Object.keys)return Object.keys(e);var t=[];for(var n in e)t.push(n);return t},n.values=function(e){var t=[];if(Object.keys){for(var n=Object.keys(e),i=0;i<n.length;i++)t.push(e[n[i]]);return t}for(var o in e)t.push(e[o]);return t},n.get=function(e,t,n,i){t=t.split(".").slice(n,i);for(var o=0;o<t.length;o+=1)e=e[t[o]];return e},n.set=function(e,t,i,o,r){var a=t.split(".").slice(o,r);return n.get(e,t,0,-1)[a[a.length-1]]=i,i},n.shuffle=function(e){for(var t=e.length-1;t>0;t--){var i=Math.floor(n.random()*(t+1)),o=e[t];e[t]=e[i],e[i]=o}return e},n.choose=function(e){return e[Math.floor(n.random()*e.length)]},n.isElement=function(e){return"undefined"!=typeof HTMLElement?e instanceof HTMLElement:!!(e&&e.nodeType&&e.nodeName)},n.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},n.isFunction=function(e){return"function"==typeof e},n.isPlainObject=function(e){return"object"==typeof e&&e.constructor===Object},n.isString=function(e){return"[object String]"===toString.call(e)},n.clamp=function(e,t,n){return e<t?t:e>n?n:e},n.sign=function(e){return e<0?-1:1},n.now=function(){if("undefined"!=typeof window&&window.performance){if(window.performance.now)return window.performance.now();if(window.performance.webkitNow)return window.performance.webkitNow()}return Date.now?Date.now():new Date-n._nowStartTime},n.random=function(t,n){return n=void 0!==n?n:1,(t=void 0!==t?t:0)+e()*(n-t)};var e=function(){return n._seed=(9301*n._seed+49297)%233280,n._seed/233280};n.colorToNumber=function(e){return 3==(e=e.replace("#","")).length&&(e=e.charAt(0)+e.charAt(0)+e.charAt(1)+e.charAt(1)+e.charAt(2)+e.charAt(2)),parseInt(e,16)},n.logLevel=1,n.log=function(){console&&n.logLevel>0&&n.logLevel<=3&&console.log.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},n.info=function(){console&&n.logLevel>0&&n.logLevel<=2&&console.info.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},n.warn=function(){console&&n.logLevel>0&&n.logLevel<=3&&console.warn.apply(console,["matter-js:"].concat(Array.prototype.slice.call(arguments)))},n.warnOnce=function(){var e=Array.prototype.slice.call(arguments).join(" ");n._warnedOnce[e]||(n.warn(e),n._warnedOnce[e]=!0)},n.deprecated=function(e,t,i){e[t]=n.chain((function(){n.warnOnce("🔅 deprecated 🔅",i)}),e[t])},n.nextId=function(){return n._nextId++},n.indexOf=function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0;n<e.length;n++)if(e[n]===t)return n;return-1},n.map=function(e,t){if(e.map)return e.map(t);for(var n=[],i=0;i<e.length;i+=1)n.push(t(e[i]));return n},n.topologicalSort=function(e){var t=[],i=[],o=[];for(var r in e)i[r]||o[r]||n._topologicalSort(r,i,o,e,t);return t},n._topologicalSort=function(e,t,i,o,r){var a=o[e]||[];i[e]=!0;for(var s=0;s<a.length;s+=1){var l=a[s];i[l]||(t[l]||n._topologicalSort(l,t,i,o,r))}i[e]=!1,t[e]=!0,r.push(e)},n.chain=function(){for(var e=[],t=0;t<arguments.length;t+=1){var n=arguments[t];n._chained?e.push.apply(e,n._chained):e.push(n)}var i=function(){for(var t,n=new Array(arguments.length),i=0,o=arguments.length;i<o;i++)n[i]=arguments[i];for(i=0;i<e.length;i+=1){var r=e[i].apply(t,n);void 0!==r&&(t=r)}return t};return i._chained=e,i},n.chainPathBefore=function(e,t,i){return n.set(e,t,n.chain(i,n.get(e,t)))},n.chainPathAfter=function(e,t,i){return n.set(e,t,n.chain(n.get(e,t),i))},n.setDecomp=functLine truncated
|
||||
@@ -0,0 +1,89 @@
|
||||
function Редактор(события, имяРедактора, имяВоспроизведения)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.установитьAce();
|
||||
this.улавливатьЗавершениеРедактирования();
|
||||
this.пз = new ПараметрыЗапуска();
|
||||
this.задатьКодПриЗапуске();
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.задатьКодПриЗапуске = function()
|
||||
{
|
||||
var z64 = this.пз.параметры["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = изZ64(z64);
|
||||
this.ace.session.setValue(код);
|
||||
}
|
||||
};
|
||||
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = вZ64(содержимое);
|
||||
var путь = window.location.pathname + "?z64=" + z64;
|
||||
history.pushState(null, "", путь);
|
||||
|
||||
var воспроизведение = document.getElementById("воспроизведение");
|
||||
var адрес = "../проигрыватель/index.html?z64=" + z64;
|
||||
воспроизведение.src = адрес;
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "завершили редактирование")
|
||||
{
|
||||
this.проверитьКорректностьКода();
|
||||
}
|
||||
else if (событие == "код корректен")
|
||||
{
|
||||
this.исполнитьКод();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.установитьAce = function()
|
||||
{
|
||||
var область = document.getElementById(имяРедактора);
|
||||
this.ace = window.ace.edit(имяРедактора);
|
||||
this.ace.session.setMode("ace/mode/javascript");
|
||||
this.ace.session.setUseWrapMode(true);
|
||||
}
|
||||
|
||||
this.улавливатьЗавершениеРедактирования = function()
|
||||
{
|
||||
var тут = this;
|
||||
this.ace.session.on("change", function(дельта) {
|
||||
const билет = uuid();
|
||||
тут.билет = билет;
|
||||
setTimeout(
|
||||
function()
|
||||
{
|
||||
if (билет == тут.билет)
|
||||
{
|
||||
события.уведомить("завершили редактирование");
|
||||
}
|
||||
},
|
||||
1000
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
this.проверитьКорректностьКода = function()
|
||||
{
|
||||
try
|
||||
{
|
||||
eval(this.ace.session.getValue());
|
||||
события.уведомить("код корректен");
|
||||
}
|
||||
catch (ошибка)
|
||||
{
|
||||
события.уведомить("код некорректен");
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
function Редактор(события, имяОбласти)
|
||||
function Редактор(события, имяРедактора, имяВоспроизведения)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.установитьAce();
|
||||
this.улавливатьЗавершениеРедактирования();
|
||||
this.разобратьПараметрыЗапуска();
|
||||
this.пз = new ПараметрыЗапуска();
|
||||
this.задатьКодПриЗапуске();
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.задатьКодПриЗапуске = function()
|
||||
{
|
||||
var z64 = this.параметрыЗапуска["z64"];
|
||||
var z64 = this.пз.параметры["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = this.изZ64(z64);
|
||||
var код = изZ64(z64);
|
||||
this.ace.session.setValue(код);
|
||||
}
|
||||
};
|
||||
@@ -22,9 +22,13 @@ function Редактор(события, имяОбласти)
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = this.вZ64(содержимое);
|
||||
var z64 = вZ64(содержимое);
|
||||
var путь = window.location.pathname + "?z64=" + z64;
|
||||
history.pushState(null, "", путь);
|
||||
|
||||
var воспроизведение = document.getElementById("воспроизведение");
|
||||
var адрес = "../проигрыватель/index.html?z64=" + z64;
|
||||
воспроизведение.src = адрес;
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
@@ -39,37 +43,11 @@ function Редактор(события, имяОбласти)
|
||||
}
|
||||
};
|
||||
|
||||
this.разобратьПараметрыЗапуска = function()
|
||||
{
|
||||
this.параметрыЗапуска = {};
|
||||
var запрос = window.location.search.substring(1);
|
||||
var аргументы = запрос.split("&");
|
||||
for (var номер in аргументы)
|
||||
{
|
||||
var арг = аргументы[номер];
|
||||
var позицияЗнака = арг.indexOf("=");
|
||||
// Лишь ключ.
|
||||
if (позицияЗнака == -1)
|
||||
{
|
||||
var ключ = decodeURIComponent(арг);
|
||||
this.параметрыЗапуска[ключ] = null;
|
||||
}
|
||||
// Ключ со значением.
|
||||
else
|
||||
{
|
||||
var сыройКлюч = арг.slice(0, позицияЗнака);
|
||||
var сыроеЗначение = арг.slice(позицияЗнака + 1);
|
||||
var ключ = decodeURIComponent(сыройКлюч);
|
||||
var значение = decodeURIComponent(сыроеЗначение);
|
||||
this.параметрыЗапуска[ключ] = значение;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.установитьAce = function()
|
||||
{
|
||||
var область = document.getElementById(имяОбласти);
|
||||
this.ace = window.ace.edit(имяОбласти);
|
||||
var область = document.getElementById(имяРедактора);
|
||||
this.ace = window.ace.edit(имяРедактора);
|
||||
this.ace.session.setMode("ace/mode/javascript");
|
||||
this.ace.session.setUseWrapMode(true);
|
||||
}
|
||||
@@ -78,7 +56,7 @@ function Редактор(события, имяОбласти)
|
||||
{
|
||||
var тут = this;
|
||||
this.ace.session.on("change", function(дельта) {
|
||||
const билет = тут.uuid();
|
||||
const билет = uuid();
|
||||
тут.билет = билет;
|
||||
setTimeout(
|
||||
function()
|
||||
@@ -106,33 +84,6 @@ function Редактор(события, имяОбласти)
|
||||
}
|
||||
};
|
||||
|
||||
this.вZ64 = function(строка)
|
||||
{
|
||||
var байты = new TextEncoder("utf-8").encode(строка);
|
||||
var архив = pako.deflate(байты, { to: 'string' });
|
||||
return base64js.fromByteArray(архив);
|
||||
};
|
||||
|
||||
this.изZ64 = function(строка)
|
||||
{
|
||||
var архив = base64js.toByteArray(строка);
|
||||
var байты = pako.inflate(архив);
|
||||
return new TextDecoder("utf-8").decode(байты);
|
||||
};
|
||||
|
||||
this.uuid = function()
|
||||
{
|
||||
// https://stackoverflow.com/a/2117523
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
|
||||
/[xy]/g,
|
||||
function(c)
|
||||
{
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
function Пульт(события, имяОшибки, имяПуска)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
var ошибка = document.getElementById(имяОшибки);
|
||||
|
||||
var пуск = document.getElementById(имяПуска);
|
||||
пуск.addEventListener("click", function(событие) {
|
||||
/**/console.debug("НАДО запустить");
|
||||
});
|
||||
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "код корректен")
|
||||
{
|
||||
this.показатьОшибку(false);
|
||||
}
|
||||
else if (событие == "код некорректен")
|
||||
{
|
||||
this.показатьОшибку(true);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.показатьОшибку = function(показать)
|
||||
{
|
||||
ошибка.innerHTML = показать ? "⚠" : " ";
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
function Муром()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.события = new События();
|
||||
this.редактор = new Редактор(this.события, "редактор");
|
||||
this.пульт = new Пульт(this.события, "ошибка", "пуск");
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -40,9 +40,9 @@
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: calc(50% - 2em);
|
||||
border: 0px none;
|
||||
}
|
||||
</style>
|
||||
<style>
|
||||
|
||||
.впульте
|
||||
{
|
||||
margin: 0 auto;
|
||||
@@ -55,12 +55,14 @@
|
||||
<span id="ошибка" class="впульте"> </span>
|
||||
<a id="пуск" class="впульте uk-icon-button uk-margin-top" uk-icon="play" uk-tooltip="Пуск"></a>
|
||||
</div>
|
||||
<div id="воспроизведение"></div>
|
||||
<iframe id="воспроизведение"></iframe>
|
||||
|
||||
<script src="../общее/100.события.js"></script>
|
||||
<script src="100.редактор.js"></script>
|
||||
<script src="200.пульт.js"></script>
|
||||
<script src="700.муром.js"></script>
|
||||
<script src="../общее/100.События.js"></script>
|
||||
<script src="../общее/200.функции.js"></script>
|
||||
<script src="../общее/300.ПараметрыЗапуска.js"></script>
|
||||
<script src="100.Редактор.js"></script>
|
||||
<script src="200.Пульт.js"></script>
|
||||
<script src="700.Муром.js"></script>
|
||||
<script>
|
||||
var муром = new Муром();
|
||||
</script>
|
||||
|
||||
Reference in new issue
Block a user