mirror of
https://github.com/chinchang/web-maker.git
synced 2025-07-13 01:56:24 +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) {
|
if (dbPromise) {
|
||||||
return dbPromise;
|
return dbPromise;
|
||||||
}
|
}
|
||||||
|
utils.log('Initializing firestore');
|
||||||
dbPromise = new Promise((resolve, reject) => {
|
dbPromise = new Promise((resolve, reject) => {
|
||||||
if (db) {
|
if (db) {
|
||||||
return resolve(db);
|
return resolve(db);
|
||||||
}
|
}
|
||||||
firebase
|
return firebase
|
||||||
.firestore()
|
.firestore()
|
||||||
.enablePersistence()
|
.enablePersistence()
|
||||||
.then(function() {
|
.then(function() {
|
||||||
@ -37,6 +38,14 @@
|
|||||||
return dbPromise;
|
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 = {
|
var local = {
|
||||||
get: (obj, cb) => {
|
get: (obj, cb) => {
|
||||||
const retVal = {};
|
const retVal = {};
|
||||||
@ -58,13 +67,14 @@
|
|||||||
});
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (cb) {
|
if (cb) {
|
||||||
cb();
|
return cb();
|
||||||
}
|
}
|
||||||
}, FAUX_DELAY);
|
}, FAUX_DELAY);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
window.db = {
|
window.db = {
|
||||||
getDb,
|
getDb,
|
||||||
|
getUser,
|
||||||
local: chrome && chrome.storage ? chrome.storage.local : local,
|
local: chrome && chrome.storage ? chrome.storage.local : local,
|
||||||
sync: chrome && chrome.storage ? chrome.storage.sync : local
|
sync: chrome && chrome.storage ? chrome.storage.sync : local
|
||||||
};
|
};
|
||||||
|
@ -1,44 +1,45 @@
|
|||||||
(() => {
|
(() => {
|
||||||
window.itemService = {
|
window.itemService = {
|
||||||
async getItem(id) {
|
async getItem(id) {
|
||||||
var db = await window.db.getDb();
|
var remoteDb = await window.db.getDb();
|
||||||
return db.doc(`items/${id}`).get().then(doc => {
|
return remoteDb.doc(`items/${id}`).get().then(doc => {
|
||||||
return doc.data();
|
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() {
|
async getAllItems() {
|
||||||
var d = deferred();
|
var d = deferred();
|
||||||
var remoteDb = await window.db.getDb();
|
let itemIds = await this.getUserItemIds();
|
||||||
|
itemIds = Object.getOwnPropertyNames(itemIds || {});
|
||||||
|
console.log('itemids', itemIds);
|
||||||
|
|
||||||
remoteDb
|
if (!itemIds.length) {
|
||||||
.doc(`users/${window.user.uid}`)
|
d.resolve([]);
|
||||||
.get()
|
}
|
||||||
.then(doc => {
|
|
||||||
return doc.data().items;
|
|
||||||
})
|
|
||||||
.then(itemIdsObj => {
|
|
||||||
var itemIds = Object.getOwnPropertyNames(itemIdsObj || {});
|
|
||||||
console.log('itemids', itemIds);
|
|
||||||
|
|
||||||
if (!itemIds.length) {
|
const items = [];
|
||||||
d.resolve([]);
|
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;
|
return d.promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -83,7 +84,20 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
async setItemForUser(itemId) {
|
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
|
return remoteDb
|
||||||
.collection('users')
|
.collection('users')
|
||||||
.doc(window.user.uid)
|
.doc(window.user.uid)
|
||||||
|
169
src/script.js
169
src/script.js
@ -19,6 +19,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
window.scope = scope;
|
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 = {
|
var HtmlModes = {
|
||||||
HTML: 'html',
|
HTML: 'html',
|
||||||
MARKDOWN: 'markdown',
|
MARKDOWN: 'markdown',
|
||||||
@ -301,8 +323,9 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
|
|
||||||
function saveSetting(setting, value) {
|
function saveSetting(setting, value) {
|
||||||
const d = deferred();
|
const d = deferred();
|
||||||
var obj = {};
|
const obj = {
|
||||||
obj[setting] = value;
|
[setting]: value
|
||||||
|
};
|
||||||
db.local.set(obj, d.resolve);
|
db.local.set(obj, d.resolve);
|
||||||
return d.promise;
|
return d.promise;
|
||||||
}
|
}
|
||||||
@ -323,21 +346,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
});
|
});
|
||||||
// Push into the items hash if its a new item being saved
|
// Push into the items hash if its a new item being saved
|
||||||
if (isNewItem) {
|
if (isNewItem) {
|
||||||
if (!window.IS_EXTENSION) {
|
itemService.setItemForUser(currentItem.id);
|
||||||
itemService.setItemForUser(currentItem.id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
db.local.get(
|
|
||||||
{
|
|
||||||
items: {}
|
|
||||||
},
|
|
||||||
function(result) {
|
|
||||||
result.items[currentItem.id] = true;
|
|
||||||
db.local.set({
|
|
||||||
items: result.items
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1716,6 +1725,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
db.sync.set(obj, function() {
|
db.sync.set(obj, function() {
|
||||||
alertsService.add('Setting saved');
|
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]);
|
trackEvent('ui', 'updatePref-' + settingName, prefs[settingName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2006,6 +2027,17 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
};
|
};
|
||||||
|
|
||||||
scope.login = function(e) {
|
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 = {
|
var config = {
|
||||||
apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc',
|
apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc',
|
||||||
authDomain: 'web-maker-app.firebaseapp.com',
|
authDomain: 'web-maker-app.firebaseapp.com',
|
||||||
@ -2018,30 +2050,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
|
|||||||
|
|
||||||
firebase.auth().onAuthStateChanged(function(user) {
|
firebase.auth().onAuthStateChanged(function(user) {
|
||||||
if (user) {
|
if (user) {
|
||||||
utils.log(user);
|
utils.log('You are -> ', user);
|
||||||
scope.user = window.user = user;
|
scope.user = window.user = user;
|
||||||
// itemService.setUser();
|
window.db.getUser(user.uid).then(() => {
|
||||||
// ...
|
Object.assign(prefs, user.settings);
|
||||||
|
updateSettingsInUi();
|
||||||
|
scope.updateSetting();
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
// User is signed out.
|
// 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;
|
var lastCode;
|
||||||
|
|
||||||
CodeMirror.modeURL = `lib/codemirror/mode/%N/%N.js`;
|
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).
|
// Get synced `preserveLastCode` setting to get back last code (or not).
|
||||||
db.sync.get(
|
db.sync.get(defaultSettings, function syncGetCallback(result) {
|
||||||
{
|
if (result.preserveLastCode && lastCode) {
|
||||||
preserveLastCode: true,
|
unsavedEditCount = 0;
|
||||||
replaceNewTab: false,
|
if (lastCode.id) {
|
||||||
htmlMode: 'html',
|
db.local.get(lastCode.id, function(itemResult) {
|
||||||
jsMode: 'js',
|
utils.log('Load item ', lastCode.id);
|
||||||
cssMode: 'css',
|
currentItem = itemResult[lastCode.id];
|
||||||
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;
|
|
||||||
refreshEditor();
|
refreshEditor();
|
||||||
}
|
});
|
||||||
} else {
|
} else {
|
||||||
createNewItem();
|
utils.log('Load last unsaved item', lastCode);
|
||||||
|
currentItem = lastCode;
|
||||||
|
refreshEditor();
|
||||||
}
|
}
|
||||||
prefs.preserveLastCode = result.preserveLastCode;
|
} else {
|
||||||
prefs.replaceNewTab = result.replaceNewTab;
|
createNewItem();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
);
|
Object.assign(prefs, result);
|
||||||
|
|
||||||
|
updateSettingsInUi();
|
||||||
|
scope.updateSetting();
|
||||||
|
});
|
||||||
|
|
||||||
// Check for new version notifications
|
// Check for new version notifications
|
||||||
db.sync.get(
|
db.sync.get(
|
||||||
|
Reference in New Issue
Block a user