##// END OF EJS Templates
Smooth notebook scrolling on pager closing....
Smooth notebook scrolling on pager closing. avoid brutal jump of notebook on closing pager, when notebook is scroll to max

File last commit:

r19545:3a7bc354
r19944:6a3f889e
Show More
config.js
129 lines | 3.8 KiB | application/javascript | JavascriptLexer
// Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
define([
'jquery',
'base/js/utils',
],
function($, utils) {
"use strict";
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;
});
};
/**
* Modify the config values stored. Update the local data immediately,
* send the change to the server, and use the updated data from the server
* when the reply comes.
*/
ConfigSection.prototype.update = function(newdata) {
$.extend(true, this.data, newdata); // true -> recursive update
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;
});
};
var ConfigWithDefaults = function(section, defaults, classname) {
this.section = section;
this.defaults = defaults;
this.classname = classname;
};
ConfigWithDefaults.prototype._class_data = function() {
if (this.classname) {
return this.section.data[this.classname] || {};
} else {
return this.section.data
}
};
/**
* Wait for config to have loaded, then get a value or the default.
* Returns a promise.
*/
ConfigWithDefaults.prototype.get = function(key) {
var that = this;
return this.section.loaded.then(function() {
return this._class_data()[key] || this.defaults[key]
});
};
/**
* Return a config value. If config is not yet loaded, return the default
* instead of waiting for it to load.
*/
ConfigWithDefaults.prototype.get_sync = function(key) {
return this._class_data()[key] || this.defaults[key];
};
/**
* Set a config value. Send the update to the server, and change our
* local copy of the data immediately.
* Returns a promise which is fulfilled when the server replies to the
* change.
*/
ConfigWithDefaults.prototype.set = function(key, value) {
var d = {};
d[key] = value;
if (this.classname) {
var d2 = {};
d2[this.classname] = d;
return this.section.update(d2);
} else {
return this.section.update(d);
}
};
return {ConfigSection: ConfigSection,
ConfigWithDefaults: ConfigWithDefaults,
};
});