update settings object merging
This commit is contained in:
parent
a6ba156c38
commit
9e04379d9c
@ -70,6 +70,8 @@ define(
|
|||||||
|
|
||||||
function save ( newSettings ) {
|
function save ( newSettings ) {
|
||||||
if ( useLocalForage ) {
|
if ( useLocalForage ) {
|
||||||
|
newSettings = getValidSettings( newSettings );
|
||||||
|
|
||||||
if ( worker ) {
|
if ( worker ) {
|
||||||
sendMessageToWorker( 'save', newSettings );
|
sendMessageToWorker( 'save', newSettings );
|
||||||
} else {
|
} else {
|
||||||
@ -142,24 +144,29 @@ define(
|
|||||||
if ( newSettings ) {
|
if ( newSettings ) {
|
||||||
settings = newSettings || defaultSettings;
|
settings = newSettings || defaultSettings;
|
||||||
|
|
||||||
if ( settings !== defaultSettings ) {
|
if ( objectHelper.isEqual( getValidSettings( settings ), settings ) ) {
|
||||||
for ( var name in defaultSettings ) {
|
|
||||||
if ( ! settings[name] ) {
|
|
||||||
settings[name] = defaultSettings[name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( var name in settings ) {
|
for ( var name in settings ) {
|
||||||
publishers.update.dispatch( name, settings[name].value, settings[name].options );
|
publishers.update.dispatch( name, settings[name].value, settings[name].options );
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
save( getValidSettings( settings ) );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
settings = defaultSettings;
|
settings = defaultSettings;
|
||||||
save( settings );
|
save( settings );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getValidSettings ( settings ) {
|
||||||
|
if ( settings&& defaultSettings && settings !== defaultSettings ) {
|
||||||
|
settings = objectHelper.merge( settings, defaultSettings );
|
||||||
|
}
|
||||||
|
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.getSetting = getSetting;
|
self.getSetting = getSetting;
|
||||||
self.getSettingValue = getSettingValue;
|
self.getSettingValue = getSettingValue;
|
||||||
self.getSettings = getSettings;
|
self.getSettings = getSettings;
|
||||||
|
|||||||
@ -27,9 +27,39 @@ define(
|
|||||||
return JSON.parse( JSON.stringify( obj ) );
|
return JSON.parse( JSON.stringify( obj ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isEqual ( obj1, obj2 ) {
|
||||||
|
return JSON.stringify( obj1 ) === JSON.stringify( obj2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://stackoverflow.com/a/383245/229189
|
||||||
|
// add missing properties from obj2
|
||||||
|
function merge ( obj1, obj2 ) {
|
||||||
|
obj1 = getCopy( obj1 );
|
||||||
|
obj2 = getCopy( obj2 );
|
||||||
|
|
||||||
|
for ( var p in obj2 ) {
|
||||||
|
try {
|
||||||
|
// Property in destination object set; update its value.
|
||||||
|
if ( typeof obj2[p] === 'object' ) {
|
||||||
|
obj1[p] = merge( obj1[p], obj2[p] );
|
||||||
|
} else {
|
||||||
|
if ( typeof obj1[p] === 'undefined' && typeof obj2[p] !== 'undefined' ) {
|
||||||
|
obj1[p] = obj2[p];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch ( e ) {
|
||||||
|
obj1[p] = obj2[p];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj1;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getObjectByString: getObjectByString,
|
getObjectByString: getObjectByString,
|
||||||
getCopy: getCopy
|
getCopy: getCopy,
|
||||||
|
merge: merge,
|
||||||
|
isEqual: isEqual
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Loading…
x
Reference in New Issue
Block a user