mirror of
https://github.com/chinchang/web-maker.git
synced 2025-07-12 17:46:26 +02:00
port settings code to new db and refactors here n there
This commit is contained in:
14
src/db.js
14
src/db.js
@ -8,11 +8,12 @@
|
||||
if (dbPromise) {
|
||||
return dbPromise;
|
||||
}
|
||||
utils.log('Initializing firestore');
|
||||
dbPromise = new Promise((resolve, reject) => {
|
||||
if (db) {
|
||||
return resolve(db);
|
||||
}
|
||||
firebase
|
||||
return firebase
|
||||
.firestore()
|
||||
.enablePersistence()
|
||||
.then(function() {
|
||||
@ -37,6 +38,14 @@
|
||||
return dbPromise;
|
||||
}
|
||||
|
||||
async function getUser(userId) {
|
||||
const remoteDb = await getDb();
|
||||
return remoteDb.doc(`users/${userId}`).get().then(doc => {
|
||||
const user = doc.data();
|
||||
Object.assign(window.user, user);
|
||||
});
|
||||
}
|
||||
|
||||
var local = {
|
||||
get: (obj, cb) => {
|
||||
const retVal = {};
|
||||
@ -58,13 +67,14 @@
|
||||
});
|
||||
setTimeout(() => {
|
||||
if (cb) {
|
||||
cb();
|
||||
return cb();
|
||||
}
|
||||
}, FAUX_DELAY);
|
||||
}
|
||||
};
|
||||
window.db = {
|
||||
getDb,
|
||||
getUser,
|
||||
local: chrome && chrome.storage ? chrome.storage.local : local,
|
||||
sync: chrome && chrome.storage ? chrome.storage.sync : local
|
||||
};
|
||||
|
@ -1,44 +1,45 @@
|
||||
(() => {
|
||||
window.itemService = {
|
||||
async getItem(id) {
|
||||
var db = await window.db.getDb();
|
||||
return db.doc(`items/${id}`).get().then(doc => {
|
||||
var remoteDb = await window.db.getDb();
|
||||
return remoteDb.doc(`items/${id}`).get().then(doc => {
|
||||
return doc.data();
|
||||
});
|
||||
},
|
||||
async getUserItemIds() {
|
||||
if (window.user && window.user.items) {
|
||||
return new Promise(resolve => {
|
||||
resolve(window.user.items);
|
||||
});
|
||||
}
|
||||
var remoteDb = await window.db.getDb();
|
||||
return remoteDb.doc(`users/${window.user.uid}`).get().then(doc => {
|
||||
return doc.data().items;
|
||||
});
|
||||
},
|
||||
|
||||
async getAllItems() {
|
||||
var d = deferred();
|
||||
var remoteDb = await window.db.getDb();
|
||||
let itemIds = await this.getUserItemIds();
|
||||
itemIds = Object.getOwnPropertyNames(itemIds || {});
|
||||
console.log('itemids', itemIds);
|
||||
|
||||
remoteDb
|
||||
.doc(`users/${window.user.uid}`)
|
||||
.get()
|
||||
.then(doc => {
|
||||
return doc.data().items;
|
||||
})
|
||||
.then(itemIdsObj => {
|
||||
var itemIds = Object.getOwnPropertyNames(itemIdsObj || {});
|
||||
console.log('itemids', itemIds);
|
||||
if (!itemIds.length) {
|
||||
d.resolve([]);
|
||||
}
|
||||
|
||||
if (!itemIds.length) {
|
||||
d.resolve([]);
|
||||
const items = [];
|
||||
for (let i = 0; i < itemIds.length; i++) {
|
||||
const id = itemIds[i];
|
||||
utils.log('Starting to fetch item ', id);
|
||||
this.getItem(id).then(item => {
|
||||
items.push(item);
|
||||
// Check if we have all items now.
|
||||
if (itemIds.length === items.length) {
|
||||
d.resolve(items);
|
||||
}
|
||||
|
||||
var items = [];
|
||||
for (let i = 0; i < itemIds.length; i++) {
|
||||
const id = itemIds[i];
|
||||
utils.log('Starting to fetch item ', id);
|
||||
this.getItem(id).then(item => {
|
||||
items.push(item);
|
||||
// Check if we have all items now.
|
||||
if (itemIds.length === items.length) {
|
||||
d.resolve(items);
|
||||
}
|
||||
});
|
||||
}
|
||||
return items;
|
||||
});
|
||||
}
|
||||
return d.promise;
|
||||
},
|
||||
|
||||
@ -83,7 +84,20 @@
|
||||
},
|
||||
|
||||
async setItemForUser(itemId) {
|
||||
var remoteDb = await window.db.getDb();
|
||||
if (window.IS_EXTENSION) {
|
||||
return window.db.local.get(
|
||||
{
|
||||
items: {}
|
||||
},
|
||||
function(result) {
|
||||
result.items[itemId] = true;
|
||||
window.db.local.set({
|
||||
items: result.items
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
const remoteDb = await window.db.getDb();
|
||||
return remoteDb
|
||||
.collection('users')
|
||||
.doc(window.user.uid)
|
||||
|
169
src/script.js
169
src/script.js
@ -19,6 +19,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
window.scope = scope;
|
||||
}
|
||||
|
||||
const defaultSettings = {
|
||||
preserveLastCode: true,
|
||||
replaceNewTab: false,
|
||||
htmlMode: 'html',
|
||||
jsMode: 'js',
|
||||
cssMode: 'css',
|
||||
isCodeBlastOn: false,
|
||||
indentWith: 'spaces',
|
||||
indentSize: 2,
|
||||
editorTheme: 'monokai',
|
||||
keymap: 'sublime',
|
||||
fontSize: 16,
|
||||
refreshOnResize: false,
|
||||
autoPreview: true,
|
||||
editorFont: 'FiraCode',
|
||||
editorCustomFont: '',
|
||||
autoSave: true,
|
||||
autoComplete: true,
|
||||
preserveConsoleLogs: true,
|
||||
lightVersion: false,
|
||||
lineWrap: true
|
||||
};
|
||||
var HtmlModes = {
|
||||
HTML: 'html',
|
||||
MARKDOWN: 'markdown',
|
||||
@ -301,8 +323,9 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
|
||||
function saveSetting(setting, value) {
|
||||
const d = deferred();
|
||||
var obj = {};
|
||||
obj[setting] = value;
|
||||
const obj = {
|
||||
[setting]: value
|
||||
};
|
||||
db.local.set(obj, d.resolve);
|
||||
return d.promise;
|
||||
}
|
||||
@ -323,21 +346,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
});
|
||||
// Push into the items hash if its a new item being saved
|
||||
if (isNewItem) {
|
||||
if (!window.IS_EXTENSION) {
|
||||
itemService.setItemForUser(currentItem.id);
|
||||
return;
|
||||
}
|
||||
db.local.get(
|
||||
{
|
||||
items: {}
|
||||
},
|
||||
function(result) {
|
||||
result.items[currentItem.id] = true;
|
||||
db.local.set({
|
||||
items: result.items
|
||||
});
|
||||
}
|
||||
);
|
||||
itemService.setItemForUser(currentItem.id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1716,6 +1725,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
db.sync.set(obj, function() {
|
||||
alertsService.add('Setting saved');
|
||||
});
|
||||
window.db.getDb(remoteDb => {
|
||||
remoteDb
|
||||
.collection('users')
|
||||
.doc(window.user.uid)
|
||||
.update({
|
||||
[`settings.${settingName}`]: prefs[settingName]
|
||||
})
|
||||
.then(arg => {
|
||||
console.log(`Setting "${settingName}" for user`, arg);
|
||||
})
|
||||
.catch(error => console.log(error));
|
||||
});
|
||||
trackEvent('ui', 'updatePref-' + settingName, prefs[settingName]);
|
||||
}
|
||||
|
||||
@ -2006,6 +2027,17 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
};
|
||||
|
||||
scope.login = function(e) {
|
||||
firebase.auth().signInAnonymously().then().catch(function(error) {
|
||||
// Handle Errors here.
|
||||
utils.log(error);
|
||||
});
|
||||
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
function init() {
|
||||
var config = {
|
||||
apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc',
|
||||
authDomain: 'web-maker-app.firebaseapp.com',
|
||||
@ -2018,30 +2050,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
|
||||
firebase.auth().onAuthStateChanged(function(user) {
|
||||
if (user) {
|
||||
utils.log(user);
|
||||
utils.log('You are -> ', user);
|
||||
scope.user = window.user = user;
|
||||
// itemService.setUser();
|
||||
// ...
|
||||
window.db.getUser(user.uid).then(() => {
|
||||
Object.assign(prefs, user.settings);
|
||||
updateSettingsInUi();
|
||||
scope.updateSetting();
|
||||
});
|
||||
} else {
|
||||
// User is signed out.
|
||||
// ...
|
||||
}
|
||||
// ...
|
||||
});
|
||||
|
||||
firebase.auth().signInAnonymously().then().catch(function(error) {
|
||||
// Handle Errors here.
|
||||
utils.log(error);
|
||||
});
|
||||
|
||||
if (e) {
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
function init() {
|
||||
scope.login();
|
||||
|
||||
var lastCode;
|
||||
|
||||
CodeMirror.modeURL = `lib/codemirror/mode/%N/%N.js`;
|
||||
@ -2376,71 +2396,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
||||
);
|
||||
|
||||
// Get synced `preserveLastCode` setting to get back last code (or not).
|
||||
db.sync.get(
|
||||
{
|
||||
preserveLastCode: true,
|
||||
replaceNewTab: false,
|
||||
htmlMode: 'html',
|
||||
jsMode: 'js',
|
||||
cssMode: 'css',
|
||||
isCodeBlastOn: false,
|
||||
indentWith: 'spaces',
|
||||
indentSize: 2,
|
||||
editorTheme: 'monokai',
|
||||
keymap: 'sublime',
|
||||
fontSize: 16,
|
||||
refreshOnResize: false,
|
||||
autoPreview: true,
|
||||
editorFont: 'FiraCode',
|
||||
editorCustomFont: '',
|
||||
autoSave: true,
|
||||
autoComplete: true,
|
||||
preserveConsoleLogs: true,
|
||||
lightVersion: false,
|
||||
lineWrap: true
|
||||
},
|
||||
function syncGetCallback(result) {
|
||||
if (result.preserveLastCode && lastCode) {
|
||||
unsavedEditCount = 0;
|
||||
if (lastCode.id) {
|
||||
db.local.get(lastCode.id, function(itemResult) {
|
||||
utils.log('Load item ', lastCode.id);
|
||||
currentItem = itemResult[lastCode.id];
|
||||
refreshEditor();
|
||||
});
|
||||
} else {
|
||||
utils.log('Load last unsaved item', lastCode);
|
||||
currentItem = lastCode;
|
||||
db.sync.get(defaultSettings, function syncGetCallback(result) {
|
||||
if (result.preserveLastCode && lastCode) {
|
||||
unsavedEditCount = 0;
|
||||
if (lastCode.id) {
|
||||
db.local.get(lastCode.id, function(itemResult) {
|
||||
utils.log('Load item ', lastCode.id);
|
||||
currentItem = itemResult[lastCode.id];
|
||||
refreshEditor();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createNewItem();
|
||||
utils.log('Load last unsaved item', lastCode);
|
||||
currentItem = lastCode;
|
||||
refreshEditor();
|
||||
}
|
||||
prefs.preserveLastCode = result.preserveLastCode;
|
||||
prefs.replaceNewTab = result.replaceNewTab;
|
||||
prefs.htmlMode = result.htmlMode;
|
||||
prefs.cssMode = result.cssMode;
|
||||
prefs.jsMode = result.jsMode;
|
||||
prefs.isCodeBlastOn = result.isCodeBlastOn;
|
||||
prefs.indentSize = result.indentSize;
|
||||
prefs.indentWith = result.indentWith;
|
||||
prefs.editorTheme = result.editorTheme;
|
||||
prefs.keymap = result.keymap;
|
||||
prefs.fontSize = result.fontSize;
|
||||
prefs.refreshOnResize = result.refreshOnResize;
|
||||
prefs.autoPreview = result.autoPreview;
|
||||
prefs.editorFont = result.editorFont;
|
||||
prefs.editorCustomFont = result.editorCustomFont;
|
||||
prefs.autoSave = result.autoSave;
|
||||
prefs.autoComplete = result.autoComplete;
|
||||
prefs.preserveConsoleLogs = result.preserveConsoleLogs;
|
||||
prefs.lightVersion = result.lightVersion;
|
||||
prefs.lineWrap = result.lineWrap;
|
||||
|
||||
updateSettingsInUi();
|
||||
scope.updateSetting();
|
||||
} else {
|
||||
createNewItem();
|
||||
}
|
||||
);
|
||||
Object.assign(prefs, result);
|
||||
|
||||
updateSettingsInUi();
|
||||
scope.updateSetting();
|
||||
});
|
||||
|
||||
// Check for new version notifications
|
||||
db.sync.get(
|
||||
|
Reference in New Issue
Block a user