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 | })();
|