2017-08-22 00:58:41 +02:00
|
|
|
(function() {
|
2017-09-12 00:33:44 +02:00
|
|
|
'use strict';
|
2017-08-29 23:21:18 +02:00
|
|
|
|
2017-08-22 00:58:41 +02:00
|
|
|
var bubble = {};
|
|
|
|
|
2017-08-28 23:51:21 +02:00
|
|
|
var dom = document.getElementById('bubble');
|
2017-08-29 23:21:18 +02:00
|
|
|
var resolveFn, fragmentTimer, delayTimer = null;
|
2017-08-28 23:51:21 +02:00
|
|
|
var show = function(text, position) {
|
2017-08-29 23:21:18 +02:00
|
|
|
return new Promise(function(resolve) {
|
|
|
|
resolveFn = resolve;
|
|
|
|
|
|
|
|
dom.innerHTML = '';
|
2017-08-22 15:03:49 +02:00
|
|
|
dom.style.left = position[0]*8;
|
2017-08-31 13:54:57 +02:00
|
|
|
dom.style.top = position[1]*8-18;
|
2017-08-22 00:58:41 +02:00
|
|
|
|
2017-08-29 23:21:18 +02:00
|
|
|
var parts = text.split(' ');
|
2017-08-28 23:51:21 +02:00
|
|
|
var showFragment = function() {
|
2017-08-22 15:03:49 +02:00
|
|
|
if (parts.length === 0) {
|
2017-08-29 23:21:18 +02:00
|
|
|
delayTimer = setTimeout(resolve, 3000);
|
2017-08-22 15:03:49 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
dom.innerHTML += parts.shift() + ' ';
|
2017-08-29 23:21:18 +02:00
|
|
|
fragmentTimer = setTimeout(showFragment, 140);
|
2017-08-22 15:03:49 +02:00
|
|
|
};
|
2017-08-28 23:51:21 +02:00
|
|
|
showFragment();
|
2017-08-22 15:03:49 +02:00
|
|
|
});
|
2017-08-22 00:58:41 +02:00
|
|
|
};
|
2017-08-28 23:51:21 +02:00
|
|
|
|
2017-08-29 23:21:18 +02:00
|
|
|
bubble.skip = function(what) {
|
|
|
|
clearTimeout(fragmentTimer);
|
|
|
|
clearTimeout(delayTimer);
|
2017-08-31 12:56:40 +02:00
|
|
|
dom.innerHTML = '';
|
2017-08-29 23:21:18 +02:00
|
|
|
if (resolveFn) resolveFn(what || 'line');
|
2017-08-28 23:51:21 +02:00
|
|
|
};
|
|
|
|
|
2017-08-22 15:03:49 +02:00
|
|
|
bubble.talk = function(texts, position) {
|
2017-08-29 23:21:18 +02:00
|
|
|
if (texts.length === 0) {
|
|
|
|
dom.innerHTML = '';
|
|
|
|
return;
|
|
|
|
}
|
2017-08-31 12:56:40 +02:00
|
|
|
bubble.skip('talk');
|
2017-08-22 23:44:46 +02:00
|
|
|
var text = texts.shift();
|
2017-09-12 22:40:34 +02:00
|
|
|
return show(text, position || [5, 46])
|
2017-08-29 23:21:18 +02:00
|
|
|
.then(function(what) {
|
2017-08-31 12:56:40 +02:00
|
|
|
if (what === 'talk') {
|
|
|
|
return Promise.resolve(what);
|
|
|
|
}
|
2017-08-29 23:21:18 +02:00
|
|
|
return bubble.talk(texts, position);
|
|
|
|
});
|
2017-08-22 15:03:49 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
bubble.story = function(talkList) {
|
2017-08-29 23:21:18 +02:00
|
|
|
if (talkList.length === 0) {
|
|
|
|
dom.innerHTML = '';
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
bubble.skip('story');
|
2017-08-22 23:44:46 +02:00
|
|
|
var params = talkList.shift();
|
2017-08-29 23:21:18 +02:00
|
|
|
return bubble.talk(params[0], params[1])
|
|
|
|
.then(function(what) {
|
2017-08-31 12:56:40 +02:00
|
|
|
if (what === 'story') {
|
|
|
|
return Promise.resolve(what);
|
|
|
|
}
|
2017-08-29 23:21:18 +02:00
|
|
|
return bubble.story(talkList);
|
|
|
|
});
|
2017-08-22 00:58:41 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
bubble.name = 'bubble';
|
|
|
|
muri.modules.push(bubble);
|
|
|
|
}());
|