-
Notifications
You must be signed in to change notification settings - Fork 62
/
PlaygroundStore.js
128 lines (89 loc) · 2.85 KB
/
PlaygroundStore.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import AppDispatcher from '../dispatcher/AppDispatcher';
import PlaygroundConstants from '../constants/PlaygroundConstants';
import PlaygroundSettingsStore from '../stores/PlaygroundSettingsStore';
import assign from 'object-assign';
import Immutable from 'immutable';
import events from 'events';
let EventEmitter = events.EventEmitter;
import postcss from 'postcss';
import cssvariables from 'postcss-css-variables';
let CHANGE_EVENT = 'CHANGE_EVENT';
let keyboardActionStream = assign({}, EventEmitter.prototype);
let playgroundProcessor = postcss()
.use(cssvariables());
let postcssUnprocessedInputText = '';
let processingResult = Immutable.Map({
input: '',
output: '',
error: null
});
let PlaygroundStore = assign({}, EventEmitter.prototype, {
getKeyboardActionStream: function() {
return keyboardActionStream;
},
getInputText: function() {
return postcssUnprocessedInputText;
},
getOutputResult: function() {
return processingResult;
},
emitChange: function() {
this.emit(CHANGE_EVENT);
},
addChangeListener: function(callback) {
this.on(CHANGE_EVENT, callback);
},
removeChangeListener: function(callback) {
this.removeListener(CHANGE_EVENT, callback);
},
dispatchToken: AppDispatcher.register(function(action) {
switch(action.actionType) {
case PlaygroundConstants.PLAYGROUND_KEYBOARD_ACTION:
keyboardActionStream.emit('KEYBOARD_ACTION');
break;
// Whenever the plugin option updates,
// we need to update the output
case PlaygroundConstants.PLAYGROUND_SET_POSTCSS_CSS_VARIABLES_PRESERVE:
AppDispatcher.waitFor([
PlaygroundSettingsStore.dispatchToken
]);
updateProcessor(PlaygroundSettingsStore.getPluginSettings());
break;
case PlaygroundConstants.PLAYGROUND_INPUT_UPDATED:
postcssUnprocessedInputText = action.value;
PlaygroundStore.emitChange();
break;
case PlaygroundConstants.PLAYGROUND_START_PROCESS_INPUT:
updateOutput();
break;
default:
// no op
}
// No errors. Needed by promise in Dispatcher.
return true;
})
});
function updateProcessor(settings) {
settings = settings || {};
playgroundProcessor = postcss()
.use(cssvariables(settings.get('postcss-css-variables').toObject()));
// Whenever the plugin option updates,
// we need to update the output
updateOutput();
}
function updateOutput() {
processingResult = processingResult.set('input', postcssUnprocessedInputText);
playgroundProcessor.process(postcssUnprocessedInputText).then(function(result) {
_setOuput(result.css, null);
}).catch(function(error) {
// Because there was an error, reset the output text
_setOuput('', error);
//console.warn(error);
});
}
function _setOuput(text, error) {
processingResult = processingResult.set('output', text);
processingResult = processingResult.set('error', error);
PlaygroundStore.emitChange();
}
export default PlaygroundStore;