update settings object merging
This commit is contained in:
parent
a6ba156c38
commit
9e04379d9c
@ -70,6 +70,8 @@ define(
|
||||
|
||||
function save ( newSettings ) {
|
||||
if ( useLocalForage ) {
|
||||
newSettings = getValidSettings( newSettings );
|
||||
|
||||
if ( worker ) {
|
||||
sendMessageToWorker( 'save', newSettings );
|
||||
} else {
|
||||
@ -142,24 +144,29 @@ define(
|
||||
if ( newSettings ) {
|
||||
settings = newSettings || defaultSettings;
|
||||
|
||||
if ( settings !== defaultSettings ) {
|
||||
for ( var name in defaultSettings ) {
|
||||
if ( ! settings[name] ) {
|
||||
settings[name] = defaultSettings[name];
|
||||
}
|
||||
if ( objectHelper.isEqual( getValidSettings( settings ), settings ) ) {
|
||||
for ( var name in settings ) {
|
||||
publishers.update.dispatch( name, settings[name].value, settings[name].options );
|
||||
}
|
||||
} else {
|
||||
save( getValidSettings( settings ) );
|
||||
}
|
||||
|
||||
for ( var name in settings ) {
|
||||
publishers.update.dispatch( name, settings[name].value, settings[name].options );
|
||||
}
|
||||
|
||||
} else {
|
||||
settings = defaultSettings;
|
||||
save( settings );
|
||||
}
|
||||
}
|
||||
|
||||
function getValidSettings ( settings ) {
|
||||
if ( settings&& defaultSettings && settings !== defaultSettings ) {
|
||||
settings = objectHelper.merge( settings, defaultSettings );
|
||||
}
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
|
||||
|
||||
self.getSetting = getSetting;
|
||||
self.getSettingValue = getSettingValue;
|
||||
self.getSettings = getSettings;
|
||||
|
||||
@ -27,9 +27,39 @@ define(
|
||||
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 {
|
||||
getObjectByString: getObjectByString,
|
||||
getCopy: getCopy
|
||||
getCopy: getCopy,
|
||||
merge: merge,
|
||||
isEqual: isEqual
|
||||
};
|
||||
}
|
||||
);
|
||||
Loading…
x
Reference in New Issue
Block a user