// Copyright (c) IPython Development Team. // Distributed under the terms of the Modified BSD License. define([ 'jquery', 'base/js/utils', ], function($, utils) { var ConfigSection = function(section_name, options) { this.section_name = section_name; this.base_url = options.base_url; this.data = {}; var that = this; /* .loaded is a promise, fulfilled the first time the config is loaded * from the server. Code can do: * conf.loaded.then(function() { ... using conf.data ... }); */ this._one_load_finished = false; this.loaded = new Promise(function(resolve, reject) { that._finish_firstload = resolve; }); }; ConfigSection.prototype.api_url = function() { return utils.url_join_encode(this.base_url, 'api/config', this.section_name); }; ConfigSection.prototype._load_done = function() { if (!this._one_load_finished) { this._one_load_finished = true; this._finish_firstload(); } }; ConfigSection.prototype.load = function() { var that = this; return utils.promising_ajax(this.api_url(), { cache: false, type: "GET", dataType: "json", }).then(function(data) { that.data = data; that._load_done(); return data; }); }; ConfigSection.prototype.update = function(newdata) { var that = this; return utils.promising_ajax(this.api_url(), { processData: false, type : "PATCH", data: JSON.stringify(newdata), dataType : "json", contentType: 'application/json', }).then(function(data) { that.data = data; that._load_done(); return data; }); }; return {ConfigSection: ConfigSection}; });