UNPKG

3.36 kBJavaScriptView Raw
1(function() {
2 'use strict';
3
4 window.Ractive.controller('pl-messages-message', function(component, data, el, config, done) {
5
6 var DISPLAY_TEXT_TIME = 3000,
7 DISPLAY_WORD_TIME = 150,
8
9 Message = component({
10 plName: 'pl-messages-message',
11 data: data
12 }),
13 _message = null;
14
15 function _hideMessage(index, callback) {
16 if (index === 0) {
17 callback();
18
19 return;
20 }
21
22 var words = Message.get('words');
23
24 words.forEach(function(word, i) {
25 Message.set('words[' + i + '].out', true);
26 });
27
28 setTimeout(function() {
29 callback();
30 }, 350);
31 }
32
33 function _displayMessage(message, index, args) {
34 _hideMessage(index, function() {
35
36 if (message.length == index) {
37 if (args.callback) {
38 args.callback();
39 }
40
41 return;
42 }
43
44 var words = (message[index].match(/<(\w+)[^>]*>.*?<\/\1>\.?|\S+/g) || ['']).map(function(word) {
45 return {
46 word: word,
47 display: false,
48 out: false
49 };
50 });
51
52 Message.set('words', words);
53
54 if (args.lineCallback) {
55 args.lineCallback(Message);
56 }
57
58 setTimeout(function() {
59 words.forEach(function(word, i) {
60
61 setTimeout(function() {
62 Message.set('words[' + i + '].display', true);
63 }, args.displayWordTime * i);
64
65 });
66
67 setTimeout(function() {
68
69 if (args.displayedLineCallback) {
70 args.displayedLineCallback(Message);
71 }
72
73 index++;
74
75 setTimeout(function() {
76 if (message.length == index && args.freezeLastLine) {
77 if (args.callback) {
78 args.callback();
79 }
80 }
81 else {
82 _displayMessage(message, index, args);
83 }
84 }, args.displayTextTime);
85
86 }, (args.displayWordTime * words.length) + 350);
87
88 });
89
90 });
91 }
92
93 Message.on('reset', function() {
94 _message = null;
95 Message.set('words', null);
96 });
97
98 Message.on('play', function(args) {
99 args = args || {};
100 if (!args.message) {
101 return;
102 }
103
104 args.message = typeof args.message == 'string' ? [args.message] : args.message;
105
106 setTimeout(function() {
107
108 args = $.extend(true, {
109 callback: null,
110 lineCallback: null,
111 displayedLineCallback: null,
112 displayTextTime: DISPLAY_TEXT_TIME,
113 displayWordTime: DISPLAY_WORD_TIME,
114 freezeLastLine: false
115 }, args);
116
117 args.displayTextTime = !args.displayTextTime && args.displayTextTime !== 0 ? DISPLAY_TEXT_TIME : args.displayTextTime;
118 args.displayWordTime = !args.displayWordTime && args.displayWordTime !== 0 ? DISPLAY_WORD_TIME : args.displayWordTime;
119
120 _message = args.message;
121
122 _displayMessage(args.message, 0, args);
123 });
124 });
125
126 Message.on('hideMessage', function(callback) {
127 if (!_message || !_message.length) {
128 if (callback) {
129 callback();
130 }
131
132 return;
133 }
134
135 _hideMessage(_message.length - 1, function() {
136 if (callback) {
137 callback();
138 }
139 });
140 });
141
142 done();
143 });
144
145})();