Merge pull request #150 from mattermost/mm-895

MM-895 Reorganization of browser storage.
Этот коммит содержится в:
Joram Wilander
2015-07-08 14:47:49 -04:00
родитель a65b2a2df5 ce5639a629
Коммит 11dde6c44b
16 изменённых файлов: 234 добавлений и 124 удалений

Просмотреть файл

@@ -17,6 +17,7 @@ import (
) )
const ( const (
// Also change web/react/stores/browser_store.jsx BROWSER_STORE_VERSION
ETAG_ROOT_VERSION = "11" ETAG_ROOT_VERSION = "11"
) )

Просмотреть файл

@@ -5,12 +5,16 @@
to the server on page load. This is to prevent other React controls from spamming to the server on page load. This is to prevent other React controls from spamming
AsyncClient with requests. */ AsyncClient with requests. */
var BrowserStore = require('../stores/browser_store.jsx');
var AsyncClient = require('../utils/async_client.jsx'); var AsyncClient = require('../utils/async_client.jsx');
var SocketStore = require('../stores/socket_store.jsx'); var SocketStore = require('../stores/socket_store.jsx');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
module.exports = React.createClass({ module.exports = React.createClass({
componentDidMount: function() { componentDidMount: function() {
// Initalize stores
BrowserStore.initalize();
/* Start initial aysnc loads */ /* Start initial aysnc loads */
AsyncClient.getMe(); AsyncClient.getMe();
AsyncClient.getPosts(true); AsyncClient.getPosts(true);

Просмотреть файл

@@ -3,6 +3,7 @@
var Client = require('../utils/client.jsx'); var Client = require('../utils/client.jsx');
var PostStore = require('../stores/post_store.jsx'); var PostStore = require('../stores/post_store.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
var utils = require('../utils/utils.jsx'); var utils = require('../utils/utils.jsx');
var AsyncClient = require('../utils/async_client.jsx'); var AsyncClient = require('../utils/async_client.jsx');
var AppDispatcher = require('../dispatcher/app_dispatcher.jsx'); var AppDispatcher = require('../dispatcher/app_dispatcher.jsx');
@@ -54,9 +55,9 @@ module.exports = React.createClass({
var self = this; var self = this;
$(this.refs.modal.getDOMNode()).on('show.bs.modal', function(e) { $(this.refs.modal.getDOMNode()).on('show.bs.modal', function(e) {
var newState = {}; var newState = {};
if(sessionStorage.getItem('edit_state_transfer')) { if(BrowserStore.getItem('edit_state_transfer')) {
newState = JSON.parse(sessionStorage.getItem('edit_state_transfer')); newState = JSON.parse(BrowserStore.getItem('edit_state_transfer'));
sessionStorage.removeItem('edit_state_transfer'); BrowserStore.removeItem('edit_state_transfer');
} else { } else {
var button = e.relatedTarget; var button = e.relatedTarget;
newState = { title: $(button).attr('data-title'), channel_id: $(button).attr('data-channelid'), post_id: $(button).attr('data-postid'), comments: $(button).attr('data-comments') }; newState = { title: $(button).attr('data-title'), channel_id: $(button).attr('data-channelid'), post_id: $(button).attr('data-postid'), comments: $(button).attr('data-comments') };

Просмотреть файл

@@ -13,7 +13,7 @@ module.exports = React.createClass({
if (updatedPost.message.length === 0) { if (updatedPost.message.length === 0) {
var tempState = this.state; var tempState = this.state;
delete tempState.editText; delete tempState.editText;
sessionStorage.setItem('edit_state_transfer', JSON.stringify(tempState)); BrowserStore.setItem('edit_state_transfer', JSON.stringify(tempState));
$("#edit_post").modal('hide'); $("#edit_post").modal('hide');
$("#delete_post").modal('show'); $("#delete_post").modal('show');
return; return;

Просмотреть файл

@@ -7,6 +7,7 @@
var utils = require('../utils/utils.jsx'); var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx'); var client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
var FindTeamDomain = React.createClass({ var FindTeamDomain = React.createClass({
@@ -21,7 +22,7 @@ var FindTeamDomain = React.createClass({
return; return;
} }
if (!utils.isLocalStorageSupported()) { if (!BrowserStore.isLocalStorageSupported()) {
state.server_error = "This service requires local storage to be enabled. Please enable it or exit private browsing."; state.server_error = "This service requires local storage to be enabled. Please enable it or exit private browsing.";
this.setState(state); this.setState(state);
return; return;
@@ -114,7 +115,7 @@ module.exports = React.createClass({
return; return;
} }
if (!utils.isLocalStorageSupported()) { if (!BrowserStore.isLocalStorageSupported()) {
state.server_error = "This service requires local storage to be enabled. Please enable it or exit private browsing."; state.server_error = "This service requires local storage to be enabled. Please enable it or exit private browsing.";
this.setState(state); this.setState(state);
return; return;

Просмотреть файл

@@ -5,11 +5,12 @@
var utils = require('../utils/utils.jsx'); var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx'); var client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var constants = require('../utils/constants.jsx') var BrowserStore = require('../stores/browser_store.jsx');
var constants = require('../utils/constants.jsx');
WelcomePage = React.createClass({ WelcomePage = React.createClass({
submitNext: function (e) { submitNext: function (e) {
if (!utils.isLocalStorageSupported()) { if (!BrowserStore.isLocalStorageSupported()) {
this.setState({ storage_error: "This service requires local storage to be enabled. Please enable it or exit private browsing."} ); this.setState({ storage_error: "This service requires local storage to be enabled. Please enable it or exit private browsing."} );
return; return;
} }
@@ -32,7 +33,7 @@ WelcomePage = React.createClass({
this.setState(state); this.setState(state);
return; return;
} }
else if (!utils.isLocalStorageSupported()) { else if (!BrowserStore.isLocalStorageSupported()) {
state.email_error = "This service requires local storage to be enabled. Please enable it or exit private browsing."; state.email_error = "This service requires local storage to be enabled. Please enable it or exit private browsing.";
this.setState(state); this.setState(state);
return; return;
@@ -595,7 +596,7 @@ PasswordPage = React.createClass({
module.exports = React.createClass({ module.exports = React.createClass({
updateParent: function(state, skipSet) { updateParent: function(state, skipSet) {
localStorage.setItem(this.props.hash, JSON.stringify(state)); BrowserStore.setGlobalItem(this.props.hash, JSON.stringify(state));
if (!skipSet) { if (!skipSet) {
this.setState(state); this.setState(state);
@@ -604,7 +605,7 @@ module.exports = React.createClass({
getInitialState: function() { getInitialState: function() {
var props = null; var props = null;
try { try {
props = JSON.parse(localStorage.getItem(this.props.hash)); props = JSON.parse(BrowserStore.getGlobalItem(this.props.hash));
} }
catch(parse_error) { catch(parse_error) {
} }

Просмотреть файл

@@ -5,7 +5,7 @@
var utils = require('../utils/utils.jsx'); var utils = require('../utils/utils.jsx');
var client = require('../utils/client.jsx'); var client = require('../utils/client.jsx');
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
module.exports = React.createClass({ module.exports = React.createClass({
handleSubmit: function(e) { handleSubmit: function(e) {
@@ -53,7 +53,7 @@ module.exports = React.createClass({
UserStore.setLastEmail(this.state.user.email); UserStore.setLastEmail(this.state.user.email);
UserStore.setCurrentUser(data); UserStore.setCurrentUser(data);
if (this.props.hash > 0) if (this.props.hash > 0)
localStorage.setItem(this.props.hash, JSON.stringify({wizard: "finished"})); BrowserStore.setGlobalItem(this.props.hash, JSON.stringify({wizard: "finished"}));
window.location.href = '/channels/town-square'; window.location.href = '/channels/town-square';
}.bind(this), }.bind(this),
function(err) { function(err) {
@@ -75,7 +75,7 @@ module.exports = React.createClass({
getInitialState: function() { getInitialState: function() {
var props = null; var props = null;
try { try {
props = JSON.parse(localStorage.getItem(this.props.hash)); props = JSON.parse(BrowserStore.getGlobalItem(this.props.hash));
} }
catch(parse_error) { catch(parse_error) {
} }

77
web/react/stores/browser_store.jsx Обычный файл
Просмотреть файл

@@ -0,0 +1,77 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information.
var UserStore = require('../stores/user_store.jsx');
// Also change model/utils.go ETAG_ROOT_VERSION
var BROWSER_STORE_VERSION = '.1';
module.exports.initalize = function() {
var currentVersion = localStorage.getItem("local_storage_version");
if (currentVersion !== BROWSER_STORE_VERSION) {
localStorage.clear();
sessionStorage.clear();
localStorage.setItem("local_storage_version", BROWSER_STORE_VERSION);
}
}
module.exports.setItem = function(name, value) {
var user_id = UserStore.getCurrentId();
localStorage.setItem(user_id + "_" + name, value);
};
module.exports.getItem = function(name) {
var user_id = UserStore.getCurrentId();
return localStorage.getItem(user_id + "_" + name);
};
module.exports.removeItem = function(name) {
var user_id = UserStore.getCurrentId();
localStorage.removeItem(user_id + "_" + name);
};
module.exports.setGlobalItem = function(name, value) {
localStorage.setItem(name, value);
};
module.exports.getGlobalItem = function(name) {
return localStorage.getItem(name);
};
module.exports.removeGlobalItem = function(name) {
localStorage.removeItem(name);
};
module.exports.clear = function() {
localStorage.clear();
sessionStorage.clear();
};
// Preforms the given action on each item that has the given prefix
// Signiture for action is action(key, value)
module.exports.actionOnItemsWithPrefix = function (prefix, action) {
var user_id = UserStore.getCurrentId();
var id_len = user_id.length;
var prefix_len = prefix.length;
for (key in localStorage) {
if (key.substring(id_len, id_len + prefix_len) === prefix) {
var userkey = key.substring(id_len);
action(userkey, BrowserStore.getItem(key));
}
}
};
module.exports.isLocalStorageSupported = function() {
try {
sessionStorage.setItem("testSession", '1');
sessionStorage.removeItem("testSession");
localStorage.setItem("testLocal", '1');
localStorage.removeItem("testLocal", '1');
return true;
}
catch (e) {
return false;
}
}

Просмотреть файл

@@ -8,6 +8,8 @@ var assign = require('object-assign');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');
var CHANGE_EVENT = 'change'; var CHANGE_EVENT = 'change';
var MORE_CHANGE_EVENT = 'change'; var MORE_CHANGE_EVENT = 'change';
@@ -87,18 +89,18 @@ var ChannelStore = assign({}, EventEmitter.prototype, {
}, },
setCurrentId: function(id) { setCurrentId: function(id) {
if (id == null) if (id == null)
sessionStorage.removeItem("current_channel_id"); BrowserStore.removeItem("current_channel_id");
else else
sessionStorage.setItem("current_channel_id", id); BrowserStore.setItem("current_channel_id", id);
}, },
setLastVisitedName: function(name) { setLastVisitedName: function(name) {
if (name == null) if (name == null)
localStorage.removeItem("last_visited_name"); BrowserStore.removeItem("last_visited_name");
else else
localStorage.setItem("last_visited_name", name); BrowserStore.setItem("last_visited_name", name);
}, },
getLastVisitedName: function() { getLastVisitedName: function() {
return localStorage.getItem("last_visited_name"); return BrowserStore.getItem("last_visited_name");
}, },
resetCounts: function(id) { resetCounts: function(id) {
var cm = this._getChannelMembers(); var cm = this._getChannelMembers();
@@ -115,7 +117,7 @@ var ChannelStore = assign({}, EventEmitter.prototype, {
this._storeChannelMembers(cm); this._storeChannelMembers(cm);
}, },
getCurrentId: function() { getCurrentId: function() {
return sessionStorage.getItem("current_channel_id"); return BrowserStore.getItem("current_channel_id");
}, },
getCurrent: function() { getCurrent: function() {
var currentId = ChannelStore.getCurrentId(); var currentId = ChannelStore.getCurrentId();
@@ -163,54 +165,70 @@ var ChannelStore = assign({}, EventEmitter.prototype, {
return extra; return extra;
}, },
_storeChannels: function(channels) { _storeChannels: function(channels) {
sessionStorage.setItem("channels", JSON.stringify(channels)); BrowserStore.setItem("channels", JSON.stringify(channels));
}, },
_getChannels: function() { _getChannels: function() {
var channels = []; var channels = [];
try { try {
channels = JSON.parse(sessionStorage.channels); channels = JSON.parse(BrowserStore.getItem("channels"));
} }
catch (err) { catch (err) {
} }
if (channels == null) {
channels = [];
}
return channels; return channels;
}, },
_storeChannelMembers: function(channelMembers) { _storeChannelMembers: function(channelMembers) {
sessionStorage.setItem("channel_members", JSON.stringify(channelMembers)); BrowserStore.setItem("channel_members", JSON.stringify(channelMembers));
}, },
_getChannelMembers: function() { _getChannelMembers: function() {
var members = {}; var members = {};
try { try {
members = JSON.parse(sessionStorage.channel_members); members = JSON.parse(BrowserStore.getItem("channel_members"));
} }
catch (err) { catch (err) {
} }
if (members == null) {
members = {};
}
return members; return members;
}, },
_storeMoreChannels: function(channels) { _storeMoreChannels: function(channels) {
sessionStorage.setItem("more_channels", JSON.stringify(channels)); BrowserStore.setItem("more_channels", JSON.stringify(channels));
}, },
_getMoreChannels: function() { _getMoreChannels: function() {
var channels = []; var channels = [];
try { try {
channels = JSON.parse(sessionStorage.more_channels); channels = JSON.parse(BrowserStore.getItem("more_channels"));
} }
catch (err) { catch (err) {
} }
if (channels == null) {
channels = [];
}
return channels; return channels;
}, },
_storeExtraInfos: function(extraInfos) { _storeExtraInfos: function(extraInfos) {
sessionStorage.setItem("extra_infos", JSON.stringify(extraInfos)); BrowserStore.setItem("extra_infos", JSON.stringify(extraInfos));
}, },
_getExtraInfos: function() { _getExtraInfos: function() {
var members = {}; var members = {};
try { try {
members = JSON.parse(sessionStorage.extra_infos); members = JSON.parse(BrowserStore.getItem("extra_infos"));
} }
catch (err) { catch (err) {
} }
if (members == null) {
members = {};
}
return members; return members;
} }

Просмотреть файл

@@ -8,6 +8,8 @@ var assign = require('object-assign');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');
var CHANGE_EVENT = 'change'; var CHANGE_EVENT = 'change';
var ErrorStore = assign({}, EventEmitter.prototype, { var ErrorStore = assign({}, EventEmitter.prototype, {
@@ -24,12 +26,12 @@ var ErrorStore = assign({}, EventEmitter.prototype, {
this.removeListener(CHANGE_EVENT, callback); this.removeListener(CHANGE_EVENT, callback);
}, },
handledError: function() { handledError: function() {
sessionStorage.removeItem("last_error"); BrowserStore.removeItem("last_error");
}, },
getLastError: function() { getLastError: function() {
var error = null; var error = null;
try { try {
error = JSON.parse(sessionStorage.last_error); error = JSON.parse(BrowserStore.last_error);
} }
catch (err) { catch (err) {
} }
@@ -38,7 +40,7 @@ var ErrorStore = assign({}, EventEmitter.prototype, {
}, },
_storeLastError: function(error) { _storeLastError: function(error) {
sessionStorage.setItem("last_error", JSON.stringify(error)); BrowserStore.setItem("last_error", JSON.stringify(error));
}, },
}); });

Просмотреть файл

@@ -7,6 +7,7 @@ var assign = require('object-assign');
var ChannelStore = require('../stores/channel_store.jsx'); var ChannelStore = require('../stores/channel_store.jsx');
var UserStore = require('../stores/user_store.jsx'); var UserStore = require('../stores/user_store.jsx');
var BrowserStore = require('../stores/browser_store.jsx');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
@@ -105,12 +106,12 @@ var PostStore = assign({}, EventEmitter.prototype, {
this.emitChange(); this.emitChange();
}, },
_storePosts: function(channelId, posts) { _storePosts: function(channelId, posts) {
sessionStorage.setItem("posts_" + channelId, JSON.stringify(posts)); BrowserStore.setItem("posts_" + channelId, JSON.stringify(posts));
}, },
getPosts: function(channelId) { getPosts: function(channelId) {
var posts = null; var posts = null;
try { try {
posts = JSON.parse(sessionStorage.getItem("posts_" + channelId)); posts = JSON.parse(BrowserStore.getItem("posts_" + channelId));
} }
catch (err) { catch (err) {
} }
@@ -118,14 +119,14 @@ var PostStore = assign({}, EventEmitter.prototype, {
return posts; return posts;
}, },
storeSearchResults: function(results, is_mention_search) { storeSearchResults: function(results, is_mention_search) {
sessionStorage.setItem("search_results", JSON.stringify(results)); BrowserStore.setItem("search_results", JSON.stringify(results));
is_mention_search = is_mention_search ? true : false; // force to bool is_mention_search = is_mention_search ? true : false; // force to bool
sessionStorage.setItem("is_mention_search", JSON.stringify(is_mention_search)); BrowserStore.setItem("is_mention_search", JSON.stringify(is_mention_search));
}, },
getSearchResults: function() { getSearchResults: function() {
var results = null; var results = null;
try { try {
results = JSON.parse(sessionStorage.getItem("search_results")); results = JSON.parse(BrowserStore.getItem("search_results"));
} }
catch (err) { catch (err) {
} }
@@ -135,7 +136,7 @@ var PostStore = assign({}, EventEmitter.prototype, {
getIsMentionSearch: function() { getIsMentionSearch: function() {
var result = false; var result = false;
try { try {
result = JSON.parse(sessionStorage.getItem("is_mention_search")); result = JSON.parse(BrowserStore.getItem("is_mention_search"));
} }
catch (err) { catch (err) {
} }
@@ -143,12 +144,12 @@ var PostStore = assign({}, EventEmitter.prototype, {
return result; return result;
}, },
storeSelectedPost: function(post_list) { storeSelectedPost: function(post_list) {
sessionStorage.setItem("select_post", JSON.stringify(post_list)); BrowserStore.setItem("select_post", JSON.stringify(post_list));
}, },
getSelectedPost: function() { getSelectedPost: function() {
var post_list = null; var post_list = null;
try { try {
post_list = JSON.parse(sessionStorage.getItem("select_post")); post_list = JSON.parse(BrowserStore.getItem("select_post"));
} }
catch (err) { catch (err) {
} }
@@ -156,37 +157,35 @@ var PostStore = assign({}, EventEmitter.prototype, {
return post_list; return post_list;
}, },
storeSearchTerm: function(term) { storeSearchTerm: function(term) {
sessionStorage.setItem("search_term", term); BrowserStore.setItem("search_term", term);
}, },
getSearchTerm: function() { getSearchTerm: function() {
return sessionStorage.getItem("search_term"); return BrowserStore.getItem("search_term");
}, },
storeCurrentDraft: function(draft) { storeCurrentDraft: function(draft) {
var channel_id = ChannelStore.getCurrentId(); var channel_id = ChannelStore.getCurrentId();
var user_id = UserStore.getCurrentId(); var user_id = UserStore.getCurrentId();
localStorage.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft)); BrowserStore.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft));
}, },
getCurrentDraft: function() { getCurrentDraft: function() {
var channel_id = ChannelStore.getCurrentId(); var channel_id = ChannelStore.getCurrentId();
var user_id = UserStore.getCurrentId(); var user_id = UserStore.getCurrentId();
return JSON.parse(localStorage.getItem("draft_" + channel_id + "_" + user_id)); return JSON.parse(BrowserStore.getItem("draft_" + channel_id + "_" + user_id));
}, },
storeDraft: function(channel_id, user_id, draft) { storeDraft: function(channel_id, user_id, draft) {
localStorage.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft)); BrowserStore.setItem("draft_" + channel_id + "_" + user_id, JSON.stringify(draft));
}, },
getDraft: function(channel_id, user_id) { getDraft: function(channel_id, user_id) {
return JSON.parse(localStorage.getItem("draft_" + channel_id + "_" + user_id)); return JSON.parse(BrowserStore.getItem("draft_" + channel_id + "_" + user_id));
}, },
clearDraftUploads: function() { clearDraftUploads: function() {
for (key in localStorage) { BrowserStore.actionOnItemsWithPrefix("draft_", function (key, value) {
if (key.substring(0,6) === "draft_") { var d = JSON.parse(value);
var d = JSON.parse(localStorage.getItem(key)); if (d) {
if (d) { d['uploadsInProgress'] = 0;
d['uploadsInProgress'] = 0; BrowserStore.setItem(key, JSON.stringify(d));
localStorage.setItem(key, JSON.stringify(d)); }
} });
}
}
} }
}); });

Просмотреть файл

@@ -10,6 +10,8 @@ var client = require('../utils/client.jsx');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');
var CHANGE_EVENT = 'change'; var CHANGE_EVENT = 'change';
var conn; var conn;

Просмотреть файл

@@ -7,7 +7,7 @@ var assign = require('object-assign');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');
var CHANGE_EVENT = 'change'; var CHANGE_EVENT = 'change';
@@ -42,12 +42,12 @@ var TeamStore = assign({}, EventEmitter.prototype, {
}, },
setCurrentId: function(id) { setCurrentId: function(id) {
if (id == null) if (id == null)
sessionStorage.removeItem("current_team_id"); BrowserStore.removeItem("current_team_id");
else else
sessionStorage.setItem("current_team_id", id); BrowserStore.setItem("current_team_id", id);
}, },
getCurrentId: function() { getCurrentId: function() {
return sessionStorage.getItem("current_team_id"); return BrowserStore.getItem("current_team_id");
}, },
getCurrent: function() { getCurrent: function() {
var currentId = TeamStore.getCurrentId(); var currentId = TeamStore.getCurrentId();
@@ -63,17 +63,21 @@ var TeamStore = assign({}, EventEmitter.prototype, {
this._storeTeams(teams); this._storeTeams(teams);
}, },
_storeTeams: function(teams) { _storeTeams: function(teams) {
sessionStorage.setItem("user_teams", JSON.stringify(teams)); BrowserStore.setItem("user_teams", JSON.stringify(teams));
}, },
_getTeams: function() { _getTeams: function() {
var teams = {}; var teams = {};
try { try {
teams = JSON.parse(sessionStorage.user_teams); teams = JSON.parse(BrowserStore.getItem("user_teams"));
} }
catch (err) { catch (err) {
} }
if (teams == null) {
teams = {};
}
return teams; return teams;
} }
}); });

Просмотреть файл

@@ -8,6 +8,7 @@ var client = require('../utils/client.jsx');
var Constants = require('../utils/constants.jsx'); var Constants = require('../utils/constants.jsx');
var ActionTypes = Constants.ActionTypes; var ActionTypes = Constants.ActionTypes;
var BrowserStore = require('../stores/browser_store.jsx');
var CHANGE_EVENT = 'change'; var CHANGE_EVENT = 'change';
var CHANGE_EVENT_SESSIONS = 'change_sessions'; var CHANGE_EVENT_SESSIONS = 'change_sessions';
@@ -64,12 +65,12 @@ var UserStore = assign({}, EventEmitter.prototype, {
}, },
setCurrentId: function(id) { setCurrentId: function(id) {
if (id == null) if (id == null)
sessionStorage.removeItem("current_user_id"); BrowserStore.removeGlobalItem("current_user_id");
else else
sessionStorage.setItem("current_user_id", id); BrowserStore.setGlobalItem("current_user_id", id);
}, },
getCurrentId: function(skipFetch) { getCurrentId: function(skipFetch) {
var current_id = sessionStorage.current_user_id; var current_id = BrowserStore.getGlobalItem("current_user_id");
// this is a speical case to force fetch the // this is a speical case to force fetch the
// current user if it's missing // current user if it's missing
@@ -96,16 +97,24 @@ var UserStore = assign({}, EventEmitter.prototype, {
this.setCurrentId(user.id); this.setCurrentId(user.id);
}, },
getLastDomain: function() { getLastDomain: function() {
return localStorage.last_domain; var last_domain = BrowserStore.getItem("last_domain");
if (last_domain == null) {
last_domain = "";
}
return last_domain;
}, },
setLastDomain: function(domain) { setLastDomain: function(domain) {
localStorage.setItem("last_domain", domain); BrowserStore.setItem("last_domain", domain);
}, },
getLastEmail: function() { getLastEmail: function() {
return localStorage.last_email; var last_email = BrowserStore.getItem("last_email");
if (last_email == null) {
last_email = "";
}
return last_email;
}, },
setLastEmail: function(email) { setLastEmail: function(email) {
localStorage.setItem("last_email", email); BrowserStore.setItem("last_email", email);
}, },
removeCurrentUser: function() { removeCurrentUser: function() {
this.setCurrentId(null); this.setCurrentId(null);
@@ -144,89 +153,89 @@ var UserStore = assign({}, EventEmitter.prototype, {
this._storeProfiles(ps); this._storeProfiles(ps);
}, },
_storeProfiles: function(profiles) { _storeProfiles: function(profiles) {
sessionStorage.setItem("profiles", JSON.stringify(profiles)); BrowserStore.setGlobalItem("profiles", JSON.stringify(profiles));
var profileUsernameMap = {}; var profileUsernameMap = {};
for (var id in profiles) { for (var id in profiles) {
profileUsernameMap[profiles[id].username] = profiles[id]; profileUsernameMap[profiles[id].username] = profiles[id];
} }
sessionStorage.setItem("profileUsernameMap", JSON.stringify(profileUsernameMap)); BrowserStore.setGlobalItem("profileUsernameMap", JSON.stringify(profileUsernameMap));
}, },
_getProfiles: function() { _getProfiles: function() {
var profiles = {}; var profiles = {};
try { try {
profiles = JSON.parse(sessionStorage.getItem("profiles")); profiles = JSON.parse(BrowserStore.getGlobalItem("profiles"));
if (profiles == null) {
profiles = {};
}
} }
catch (err) { catch (err) {
} }
if (profiles == null) {
profiles = {};
}
return profiles; return profiles;
}, },
_getProfilesUsernameMap: function() { _getProfilesUsernameMap: function() {
var profileUsernameMap = {}; var profileUsernameMap = {};
try { try {
profileUsernameMap = JSON.parse(sessionStorage.getItem("profileUsernameMap")); profileUsernameMap = JSON.parse(BrowserStore.getGlobalItem("profileUsernameMap"));
if (profileUsernameMap == null) {
profileUsernameMap = {};
}
} }
catch (err) { catch (err) {
} }
if (profileUsernameMap == null) {
profileUsernameMap = {};
}
return profileUsernameMap; return profileUsernameMap;
}, },
setSessions: function(sessions) { setSessions: function(sessions) {
sessionStorage.setItem("sessions", JSON.stringify(sessions)); BrowserStore.setItem("sessions", JSON.stringify(sessions));
}, },
getSessions: function() { getSessions: function() {
var sessions = []; var sessions = [];
try { try {
sessions = JSON.parse(sessionStorage.getItem("sessions")); sessions = JSON.parse(BrowserStore.getItem("sessions"));
if (sessions == null) {
sessions = [];
}
} }
catch (err) { catch (err) {
} }
if (sessions == null) {
sessions = [];
}
return sessions; return sessions;
}, },
setAudits: function(audits) { setAudits: function(audits) {
sessionStorage.setItem("audits", JSON.stringify(audits)); BrowserStore.setItem("audits", JSON.stringify(audits));
}, },
getAudits: function() { getAudits: function() {
var audits = []; var audits = [];
try { try {
audits = JSON.parse(sessionStorage.getItem("audits")); audits = JSON.parse(BrowserStore.getItem("audits"));
if (audits == null) {
audits = [];
}
} }
catch (err) { catch (err) {
} }
if (audits == null) {
audits = [];
}
return audits; return audits;
}, },
setTeams: function(teams) { setTeams: function(teams) {
sessionStorage.setItem("teams", JSON.stringify(teams)); BrowserStore.setItem("teams", JSON.stringify(teams));
}, },
getTeams: function() { getTeams: function() {
var teams = []; var teams = [];
try { try {
teams = JSON.parse(sessionStorage.getItem("teams")); teams = JSON.parse(BrowserStore.getItem("teams"));
if (teams == null) {
teams = [];
}
} }
catch (err) { catch (err) {
} }
if (teams == null) {
teams = [];
}
return teams; return teams;
}, },
@@ -249,17 +258,21 @@ var UserStore = assign({}, EventEmitter.prototype, {
} }
}, },
getLastVersion: function() { getLastVersion: function() {
return sessionStorage.last_version; var last_version = BrowserStore.getItem("last_version");
if (last_version == null) {
last_version = "";
}
return last_version;
}, },
setLastVersion: function(version) { setLastVersion: function(version) {
sessionStorage.setItem("last_version", version); BrowserStore.setItem("last_version", version);
}, },
setStatuses: function(statuses) { setStatuses: function(statuses) {
this._setStatuses(statuses); this._setStatuses(statuses);
this.emitStatusesChange(); this.emitStatusesChange();
}, },
_setStatuses: function(statuses) { _setStatuses: function(statuses) {
sessionStorage.setItem("statuses", JSON.stringify(statuses)); BrowserStore.setItem("statuses", JSON.stringify(statuses));
}, },
setStatus: function(user_id, status) { setStatus: function(user_id, status) {
var statuses = this.getStatuses(); var statuses = this.getStatuses();
@@ -270,15 +283,15 @@ var UserStore = assign({}, EventEmitter.prototype, {
getStatuses: function() { getStatuses: function() {
var statuses = {}; var statuses = {};
try { try {
statuses = JSON.parse(sessionStorage.getItem("statuses")); statuses = JSON.parse(BrowserStore.getItem("statuses"));
if (statuses == null) {
statuses = {};
}
} }
catch (err) { catch (err) {
} }
if (statuses == null) {
statuses = {};
}
return statuses; return statuses;
}, },
getStatus: function(id) { getStatus: function(id) {

Просмотреть файл

@@ -1,6 +1,7 @@
// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. // Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
var BrowserStore = require('../stores/browser_store.jsx');
module.exports.track = function(category, action, label, prop, val) { module.exports.track = function(category, action, label, prop, val) {
global.window.snowplow('trackStructEvent', category, action, label, prop, val); global.window.snowplow('trackStructEvent', category, action, label, prop, val);
@@ -204,7 +205,7 @@ module.exports.resetPassword = function(data, success, error) {
module.exports.logout = function() { module.exports.logout = function() {
module.exports.track('api', 'api_users_logout'); module.exports.track('api', 'api_users_logout');
sessionStorage.clear(); BrowserStore.clear();
window.location.href = "/logout"; window.location.href = "/logout";
}; };

Просмотреть файл

@@ -97,20 +97,6 @@ module.exports.getCookie = function(name) {
if (parts.length == 2) return parts.pop().split(";").shift(); if (parts.length == 2) return parts.pop().split(";").shift();
} }
module.exports.isLocalStorageSupported = function() {
try {
sessionStorage.setItem("testSession", '1');
sessionStorage.removeItem("testSession");
localStorage.setItem("testLocal", '1');
localStorage.removeItem("testLocal", '1');
return true;
}
catch (e) {
return false;
}
}
module.exports.notifyMe = function(title, body, channel) { module.exports.notifyMe = function(title, body, channel) {
if ("Notification" in window && Notification.permission !== 'denied') { if ("Notification" in window && Notification.permission !== 'denied') {