diff options
| -rw-r--r-- | ext/bg/js/api.js | 40 | ||||
| -rw-r--r-- | ext/bg/js/backend.js | 40 | 
2 files changed, 40 insertions, 40 deletions
| diff --git a/ext/bg/js/api.js b/ext/bg/js/api.js index 95ac782e..4c55c6e3 100644 --- a/ext/bg/js/api.js +++ b/ext/bg/js/api.js @@ -21,44 +21,8 @@ function apiOptionsGet(optionsContext) {      return utilBackend()._onApiOptionsGet({optionsContext});  } -async function apiOptionsSet(changedOptions, optionsContext, source) { -    const options = await apiOptionsGet(optionsContext); - -    function getValuePaths(obj) { -        const valuePaths = []; -        const nodes = [{obj, path: []}]; -        while (nodes.length > 0) { -            const node = nodes.pop(); -            for (const key of Object.keys(node.obj)) { -                const path = node.path.concat(key); -                const obj = node.obj[key]; -                if (obj !== null && typeof obj === 'object') { -                    nodes.unshift({obj, path}); -                } else { -                    valuePaths.push([obj, path]); -                } -            } -        } -        return valuePaths; -    } - -    function modifyOption(path, value, options) { -        let pivot = options; -        for (const key of path.slice(0, -1)) { -            if (!hasOwn(pivot, key)) { -                return false; -            } -            pivot = pivot[key]; -        } -        pivot[path[path.length - 1]] = value; -        return true; -    } - -    for (const [value, path] of getValuePaths(changedOptions)) { -        modifyOption(path, value, options); -    } - -    await apiOptionsSave(source); +function apiOptionsSet(changedOptions, optionsContext, source) { +    return utilBackend()._onApiOptionsSet({changedOptions, optionsContext, source});  }  function apiOptionsGetFull() { diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 6e3dfae6..74cd2ab4 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -194,8 +194,44 @@ class Backend {          return this.getFullOptions();      } -    _onApiOptionsSet({changedOptions, optionsContext, source}) { -        return apiOptionsSet(changedOptions, optionsContext, source); +    async _onApiOptionsSet({changedOptions, optionsContext, source}) { +        const options = await this.getOptions(optionsContext); + +        function getValuePaths(obj) { +            const valuePaths = []; +            const nodes = [{obj, path: []}]; +            while (nodes.length > 0) { +                const node = nodes.pop(); +                for (const key of Object.keys(node.obj)) { +                    const path = node.path.concat(key); +                    const obj = node.obj[key]; +                    if (obj !== null && typeof obj === 'object') { +                        nodes.unshift({obj, path}); +                    } else { +                        valuePaths.push([obj, path]); +                    } +                } +            } +            return valuePaths; +        } + +        function modifyOption(path, value, options) { +            let pivot = options; +            for (const key of path.slice(0, -1)) { +                if (!hasOwn(pivot, key)) { +                    return false; +                } +                pivot = pivot[key]; +            } +            pivot[path[path.length - 1]] = value; +            return true; +        } + +        for (const [value, path] of getValuePaths(changedOptions)) { +            modifyOption(path, value, options); +        } + +        await this._optionsSave({source});      }      _onApiOptionsSave({source}) { |