|
@@ -29,12 +29,35 @@ App.ConfigDiffView = Em.View.extend({
|
|
|
}).sort().join("\n");
|
|
|
return difflib.stringAsLines(values);
|
|
|
};
|
|
|
- var initialValues = trimAndSort(this.get('config.initialValue'));
|
|
|
- var recommendedValues = trimAndSort(this.get('config.recommendedValue'));
|
|
|
+ var initialValues = trimAndSort(this.get('config.initialValue')),
|
|
|
+ recommendedValues = trimAndSort(this.get('config.recommendedValue')),
|
|
|
+ opcodes = new difflib.SequenceMatcher(initialValues, recommendedValues).get_opcodes();
|
|
|
+ if (initialValues.length === 1 && recommendedValues.length === 1) {
|
|
|
+ // changes in properties with single-line values shouldn't be highlighted
|
|
|
+ opcodes[0][0] = 'equal';
|
|
|
+ }
|
|
|
+ if (!initialValues.length) {
|
|
|
+ if (recommendedValues.length > 1) {
|
|
|
+ // initial and recommended values should have the same number of rows
|
|
|
+ initialValues = Array(recommendedValues.length - 1).join('.').split('.');
|
|
|
+ }
|
|
|
+ initialValues.unshift(Em.I18n.t('popup.dependent.configs.table.undefined'));
|
|
|
+ opcodes[0][0] = 'not-defined'; // class name for cell corresponding to undefined property
|
|
|
+ opcodes[0][2] = recommendedValues.length; // specifying rows number explicitly to avoid omitting of 'Property undefined' message
|
|
|
+ }
|
|
|
+ if (!recommendedValues.length) {
|
|
|
+ if (initialValues.length > 1) {
|
|
|
+ // initial and recommended values should have the same number of rows
|
|
|
+ recommendedValues = Array(initialValues.length - 1).join('.').split('.');
|
|
|
+ }
|
|
|
+ recommendedValues.unshift(Em.I18n.t('popup.dependent.configs.table.removed'));
|
|
|
+ opcodes[0][0] = 'is-removed'; // class name for cell corresponding to removed property
|
|
|
+ opcodes[0][4] = initialValues.length; // specifying rows number explicitly to avoid omitting of 'Property removed' message
|
|
|
+ }
|
|
|
return new Handlebars.SafeString(diffview.buildView({
|
|
|
baseTextLines: initialValues,
|
|
|
newTextLines: recommendedValues,
|
|
|
- opcodes: new difflib.SequenceMatcher(initialValues, recommendedValues).get_opcodes()
|
|
|
+ opcodes: opcodes
|
|
|
}).outerHTML);
|
|
|
}.property('config.initialValues', 'config.recommendedValues')
|
|
|
});
|