mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Save editor settings in /settings/user
This commit is contained in:
		@@ -18,6 +18,9 @@
 | 
				
			|||||||
RED.settings = (function () {
 | 
					RED.settings = (function () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var loadedSettings = {};
 | 
					    var loadedSettings = {};
 | 
				
			||||||
 | 
					    var userSettings = {};
 | 
				
			||||||
 | 
					    var settingsDirty = false;
 | 
				
			||||||
 | 
					    var pendingSave;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var hasLocalStorage = function () {
 | 
					    var hasLocalStorage = function () {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@@ -31,7 +34,12 @@ RED.settings = (function () {
 | 
				
			|||||||
        if (!hasLocalStorage()) {
 | 
					        if (!hasLocalStorage()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        localStorage.setItem(key, JSON.stringify(value));
 | 
					        if (key === "auth-tokens") {
 | 
				
			||||||
 | 
					            localStorage.setItem(key, JSON.stringify(value));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            userSettings[key] = value;
 | 
				
			||||||
 | 
					            saveUserSettings();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -44,14 +52,23 @@ RED.settings = (function () {
 | 
				
			|||||||
        if (!hasLocalStorage()) {
 | 
					        if (!hasLocalStorage()) {
 | 
				
			||||||
            return undefined;
 | 
					            return undefined;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return JSON.parse(localStorage.getItem(key));
 | 
					        if (key === "auth-tokens") {
 | 
				
			||||||
 | 
					            return JSON.parse(localStorage.getItem(key));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            return userSettings[key];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var remove = function (key) {
 | 
					    var remove = function (key) {
 | 
				
			||||||
        if (!hasLocalStorage()) {
 | 
					        if (!hasLocalStorage()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        localStorage.removeItem(key);
 | 
					        if (key === "auth_tokens") {
 | 
				
			||||||
 | 
					            localStorage.removeItem(key);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            delete userSettings[key];
 | 
				
			||||||
 | 
					            saveUserSettings();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var setProperties = function(data) {
 | 
					    var setProperties = function(data) {
 | 
				
			||||||
@@ -68,6 +85,10 @@ RED.settings = (function () {
 | 
				
			|||||||
        loadedSettings = data;
 | 
					        loadedSettings = data;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var setUserSettings = function(data) {
 | 
				
			||||||
 | 
					        userSettings = data;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var init = function (done) {
 | 
					    var init = function (done) {
 | 
				
			||||||
        var accessTokenMatch = /[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);
 | 
					        var accessTokenMatch = /[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);
 | 
				
			||||||
        if (accessTokenMatch) {
 | 
					        if (accessTokenMatch) {
 | 
				
			||||||
@@ -106,7 +127,7 @@ RED.settings = (function () {
 | 
				
			|||||||
                    RED.settings.remove("auth-tokens");
 | 
					                    RED.settings.remove("auth-tokens");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                console.log("Node-RED: " + data.version);
 | 
					                console.log("Node-RED: " + data.version);
 | 
				
			||||||
                done();
 | 
					                loadUserSettings(done);
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            error: function(jqXHR,textStatus,errorThrown) {
 | 
					            error: function(jqXHR,textStatus,errorThrown) {
 | 
				
			||||||
                if (jqXHR.status === 401) {
 | 
					                if (jqXHR.status === 401) {
 | 
				
			||||||
@@ -115,12 +136,50 @@ RED.settings = (function () {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    RED.user.login(function() { load(done); });
 | 
					                    RED.user.login(function() { load(done); });
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    console.log("Unexpected error:",jqXHR.status,textStatus);
 | 
					                    console.log("Unexpected error loading settings:",jqXHR.status,textStatus);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function loadUserSettings(done) {
 | 
				
			||||||
 | 
					        $.ajax({
 | 
				
			||||||
 | 
					            headers: {
 | 
				
			||||||
 | 
					                "Accept": "application/json"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            dataType: "json",
 | 
				
			||||||
 | 
					            cache: false,
 | 
				
			||||||
 | 
					            url: 'settings/user',
 | 
				
			||||||
 | 
					            success: function (data) {
 | 
				
			||||||
 | 
					                setUserSettings(data);
 | 
				
			||||||
 | 
					                done();
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            error: function(jqXHR,textStatus,errorThrown) {
 | 
				
			||||||
 | 
					                console.log("Unexpected error loading user settings:",jqXHR.status,textStatus);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function saveUserSettings() {
 | 
				
			||||||
 | 
					        if (pendingSave) {
 | 
				
			||||||
 | 
					            clearTimeout(pendingSave);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        pendingSave = setTimeout(function() {
 | 
				
			||||||
 | 
					            pendingSave = null;
 | 
				
			||||||
 | 
					            $.ajax({
 | 
				
			||||||
 | 
					                method: 'POST',
 | 
				
			||||||
 | 
					                contentType: 'application/json',
 | 
				
			||||||
 | 
					                url: 'settings/user',
 | 
				
			||||||
 | 
					                data: JSON.stringify(userSettings),
 | 
				
			||||||
 | 
					                success: function (data) {
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                error: function(jqXHR,textStatus,errorThrown) {
 | 
				
			||||||
 | 
					                    console.log("Unexpected error saving user settings:",jqXHR.status,textStatus);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        },300);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function theme(property,defaultValue) {
 | 
					    function theme(property,defaultValue) {
 | 
				
			||||||
        if (!RED.settings.editorTheme) {
 | 
					        if (!RED.settings.editorTheme) {
 | 
				
			||||||
            return defaultValue;
 | 
					            return defaultValue;
 | 
				
			||||||
@@ -148,5 +207,4 @@ RED.settings = (function () {
 | 
				
			|||||||
        remove: remove,
 | 
					        remove: remove,
 | 
				
			||||||
        theme: theme
 | 
					        theme: theme
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
})
 | 
					})();
 | 
				
			||||||
();
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,7 +197,7 @@ RED.userSettings = (function() {
 | 
				
			|||||||
                allSettings[opt.setting] = opt;
 | 
					                allSettings[opt.setting] = opt;
 | 
				
			||||||
                if (opt.onchange) {
 | 
					                if (opt.onchange) {
 | 
				
			||||||
                    var value = RED.settings.get(opt.setting);
 | 
					                    var value = RED.settings.get(opt.setting);
 | 
				
			||||||
                    if (value === null && opt.hasOwnProperty('default')) {
 | 
					                    if ((value === null || value === undefined) && opt.hasOwnProperty('default')) {
 | 
				
			||||||
                        value = opt.default;
 | 
					                        value = opt.default;
 | 
				
			||||||
                        RED.settings.set(opt.setting,value);
 | 
					                        RED.settings.set(opt.setting,value);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user