Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/webroot/rsrc/js/application/diff/DiffInlineContentState.js
12242 views
1
/**
2
* @provides phabricator-diff-inline-content-state
3
* @requires javelin-dom
4
* @javelin
5
*/
6
7
JX.install('DiffInlineContentState', {
8
9
construct : function() {
10
11
},
12
13
properties: {
14
text: null,
15
suggestionText: null,
16
hasSuggestion: false
17
},
18
19
members: {
20
readForm: function(row) {
21
var node;
22
23
try {
24
node = JX.DOM.find(row, 'textarea', 'inline-content-text');
25
this.setText(node.value);
26
} catch (ex) {
27
this.setText(null);
28
}
29
30
node = this._getSuggestionNode(row);
31
if (node) {
32
this.setSuggestionText(node.value);
33
} else {
34
this.setSuggestionText(null);
35
}
36
37
return this;
38
},
39
40
getWireFormat: function() {
41
return {
42
text: this.getText(),
43
suggestionText: this.getSuggestionText(),
44
hasSuggestion: this.getHasSuggestion()
45
};
46
},
47
48
readWireFormat: function(map) {
49
this.setText(map.text || null);
50
this.setSuggestionText(map.suggestionText || null);
51
this.setHasSuggestion(!!map.hasSuggestion);
52
53
return this;
54
},
55
56
getTextForQuote: function() {
57
var text = this.getText();
58
text = '> ' + text.replace(/\n/g, '\n> ') + '\n\n';
59
return text;
60
},
61
62
isStateEmpty: function() {
63
return (this.isTextEmpty() && this.isSuggestionEmpty());
64
},
65
66
isTextEmpty: function() {
67
var text = this.getText();
68
if (text === null) {
69
return true;
70
}
71
72
if (this._isStringSimilar(text, '')) {
73
return true;
74
}
75
76
return false;
77
},
78
79
isSuggestionEmpty: function() {
80
if (!this.getHasSuggestion()) {
81
return true;
82
}
83
84
var suggestion = this.getSuggestionText();
85
if (suggestion === null) {
86
return true;
87
}
88
89
if (this._isStringSimilar(suggestion, '')) {
90
return true;
91
}
92
93
return false;
94
},
95
96
isTextSimilar: function(v) {
97
if (!v) {
98
return false;
99
}
100
101
var us = this.getText();
102
var vs = v.getText();
103
104
return this._isStringSimilar(us, vs);
105
},
106
107
isSuggestionSimilar: function(v) {
108
// If we don't have a comparison state, treat them as dissimilar. This
109
// is expected to occur in old inline comments that did not save an
110
// initial state.
111
112
if (!v) {
113
return false;
114
}
115
116
var us = this.getSuggestionText();
117
var vs = v.getSuggestionText();
118
119
return this._isStringSimilar(us, vs);
120
},
121
122
_isStringSimilar: function(u, v) {
123
u = u || '';
124
v = v || '';
125
return (u === v);
126
},
127
128
_getSuggestionNode: function(row) {
129
try {
130
return JX.DOM.find(row, 'textarea', 'inline-content-suggestion');
131
} catch (ex) {
132
return null;
133
}
134
}
135
}
136
137
});
138
139