mirror of
https://github.com/chinchang/web-maker.git
synced 2025-05-06 18:45:31 +02:00
enable opening of saved items + some refactor.
This commit is contained in:
parent
754a1eaa4b
commit
c33eb3e445
@ -278,6 +278,7 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 400px;
|
width: 400px;
|
||||||
|
padding: 20px;
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
background-color: #111;
|
background-color: #111;
|
||||||
transition: 0.3s ease;
|
transition: 0.3s ease;
|
||||||
@ -287,6 +288,25 @@
|
|||||||
.saved-items-pane.is-open {
|
.saved-items-pane.is-open {
|
||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
}
|
}
|
||||||
|
.saved-items-pane__close-btn {
|
||||||
|
position: absolute;
|
||||||
|
left: -32px;
|
||||||
|
opacity: 0;
|
||||||
|
transition: 0.25s ease;
|
||||||
|
}
|
||||||
|
.saved-items-pane.is-open .saved-items-pane__close-btn {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
.saved-item-tile {
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px solid rgba(255,255,255,0.1);
|
||||||
|
margin: 10px 0;
|
||||||
|
display: block;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.saved-item-tile:hover {
|
||||||
|
background: rgba(255,255,255,0.1);
|
||||||
|
}
|
||||||
.notifications-btn {
|
.notifications-btn {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@ -567,7 +587,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="js-saved-items-pane" class="saved-items-pane">
|
<div id="js-saved-items-pane" class="saved-items-pane">
|
||||||
<button class="btn" id="js-saved-items-pane-close-btn">X</button>
|
<button class="btn saved-items-pane__close-btn" id="js-saved-items-pane-close-btn">X</button>
|
||||||
<h3>My Items</h3>
|
<h3>My Items</h3>
|
||||||
<div id="js-saved-items-wrap">
|
<div id="js-saved-items-wrap">
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
, cssMode = CssModes.CSS
|
, cssMode = CssModes.CSS
|
||||||
, sass
|
, sass
|
||||||
, currentItem
|
, currentItem
|
||||||
|
, savedItems
|
||||||
|
|
||||||
// DOM nodes
|
// DOM nodes
|
||||||
, frame = $('#demo-frame')
|
, frame = $('#demo-frame')
|
||||||
@ -122,7 +123,7 @@
|
|||||||
// Save current item to storage
|
// Save current item to storage
|
||||||
function saveItem() {
|
function saveItem() {
|
||||||
var isNewItem = !currentItem.id;
|
var isNewItem = !currentItem.id;
|
||||||
currentItem.id = currentItem.id || ('item-' + generateRandomId());
|
currentItem.id = currentItem.id || ('item-' + utils.generateRandomId());
|
||||||
saveCode();
|
saveCode();
|
||||||
|
|
||||||
// Push into the items hash if its a new item being saved
|
// Push into the items hash if its a new item being saved
|
||||||
@ -144,21 +145,24 @@
|
|||||||
currentItem.css = editur.cm.css.getValue();
|
currentItem.css = editur.cm.css.getValue();
|
||||||
currentItem.js = editur.cm.js.getValue();
|
currentItem.js = editur.cm.js.getValue();
|
||||||
currentItem.updatedOn = Date.now();
|
currentItem.updatedOn = Date.now();
|
||||||
log('saving key', key || currentItem.id, currentItem)
|
utils.log('saving key', key || currentItem.id, currentItem)
|
||||||
currentItem.hoid = currentItem.id;
|
|
||||||
saveSetting(key || currentItem.id, currentItem);
|
saveSetting(key || currentItem.id, currentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateItem(items) {
|
function populateItem(items) {
|
||||||
currentItem = savedItems[];
|
// currentItem = savedItems[];
|
||||||
refreshEditor();
|
refreshEditor();
|
||||||
}
|
}
|
||||||
function populateItemsInSavedPane(items) {
|
function populateItemsInSavedPane(items) {
|
||||||
if (!items || !items.length) return;
|
if (!items || !items.length) return;
|
||||||
var html = '';
|
var html = '';
|
||||||
// TODO: sort desc. by updation date
|
// TODO: sort desc. by updation date
|
||||||
|
items.sort(function (a, b) {
|
||||||
|
return b.updatedOn - a.updatedOn;
|
||||||
|
});
|
||||||
items.forEach(function (item) {
|
items.forEach(function (item) {
|
||||||
html += '<div class="saved-item-tile">' + item.title + '</div>';
|
html += '<a class="js-saved-item-tile saved-item-tile" data-item-id="' + item.id + '">' +
|
||||||
|
'<h3>' + item.title + '</h3><span>Last updated: ' + item.updatedOn + '</span></a>';
|
||||||
})
|
})
|
||||||
savedItemsPane.querySelector('#js-saved-items-wrap').innerHTML = html;
|
savedItemsPane.querySelector('#js-saved-items-wrap').innerHTML = html;
|
||||||
toggleSavedItemsPane();
|
toggleSavedItemsPane();
|
||||||
@ -172,9 +176,11 @@
|
|||||||
var itemIds = Object.getOwnPropertyNames(result.items),
|
var itemIds = Object.getOwnPropertyNames(result.items),
|
||||||
items = [];
|
items = [];
|
||||||
|
|
||||||
|
savedItems = savedItems || [];
|
||||||
for (var i = 0; i < itemIds.length; i++) {
|
for (var i = 0; i < itemIds.length; i++) {
|
||||||
(function (index) {
|
(function (index) {
|
||||||
chrome.storage.local.get(itemIds[index], function (itemResult) {
|
chrome.storage.local.get(itemIds[index], function (itemResult) {
|
||||||
|
savedItems[itemIds[index]] = itemResult[itemIds[index]];
|
||||||
items.push(itemResult[itemIds[index]]);
|
items.push(itemResult[itemIds[index]]);
|
||||||
// Check if we have all items now.
|
// Check if we have all items now.
|
||||||
if (itemIds.length === items.length) {
|
if (itemIds.length === items.length) {
|
||||||
@ -187,15 +193,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createNewItem() {
|
function createNewItem() {
|
||||||
|
var d = new Date();
|
||||||
currentItem = {
|
currentItem = {
|
||||||
title: 'Untitled ' + (new Date).getDate()
|
title: 'Untitled ' + d.getDate() + '-' + d.getMonth() + '-' + d.getHours() + ':' + d.getMinutes(),
|
||||||
|
html: '',
|
||||||
|
css: '',
|
||||||
|
js: '',
|
||||||
|
layoutMode: currentLayoutMode
|
||||||
};
|
};
|
||||||
editur.cm.html.setValue('');
|
refreshEditor();
|
||||||
editur.cm.css.setValue('');
|
}
|
||||||
editur.cm.js.setValue('');
|
function openItem(itemId) {
|
||||||
editur.cm.html.refresh();
|
currentItem = savedItems[itemId];
|
||||||
editur.cm.css.refresh();
|
refreshEditor();
|
||||||
editur.cm.js.refresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshEditor() {
|
function refreshEditor() {
|
||||||
@ -320,8 +330,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
function createPreviewFile(html, css, js) {
|
function createPreviewFile(html, css, js) {
|
||||||
var contents =
|
var contents = '<html>\n<head>\n' +
|
||||||
'<html>\n<head>\n' +
|
|
||||||
'<style>\n' + css + '\n</style>\n</head>\n' +
|
'<style>\n' + css + '\n</style>\n</head>\n' +
|
||||||
'<body>\n' + html + '\n<script>\n' + js + '\n</script></body>\n</html>';
|
'<body>\n' + html + '\n<script>\n' + js + '\n</script></body>\n</html>';
|
||||||
|
|
||||||
@ -329,7 +338,7 @@
|
|||||||
|
|
||||||
var blob = new Blob([ contents ], { type: "text/plain;charset=UTF-8" });
|
var blob = new Blob([ contents ], { type: "text/plain;charset=UTF-8" });
|
||||||
|
|
||||||
function errorHandler() { console.log(arguments); }
|
function errorHandler() { console.utils.log(arguments); }
|
||||||
|
|
||||||
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024 * 5, function(fs){
|
window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024 * 5, function(fs){
|
||||||
fs.root.getFile('preview.html', { create: true }, function(fileEntry) {
|
fs.root.getFile('preview.html', { create: true }, function(fileEntry) {
|
||||||
@ -433,7 +442,7 @@
|
|||||||
layoutBtn2.addEventListener('click', function () { saveSetting('layoutMode', 2); toggleLayout(2); return false; });
|
layoutBtn2.addEventListener('click', function () { saveSetting('layoutMode', 2); toggleLayout(2); return false; });
|
||||||
layoutBtn3.addEventListener('click', function () { saveSetting('layoutMode', 3); toggleLayout(3); return false; });
|
layoutBtn3.addEventListener('click', function () { saveSetting('layoutMode', 3); toggleLayout(3); return false; });
|
||||||
|
|
||||||
onButtonClick(helpBtn, function () {
|
utils.onButtonClick(helpBtn, function () {
|
||||||
helpModal.classList.toggle('is-modal-visible');
|
helpModal.classList.toggle('is-modal-visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -471,11 +480,17 @@
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
onButtonClick(saveHtmlBtn, saveFile);
|
utils.onButtonClick(saveHtmlBtn, saveFile);
|
||||||
onButtonClick(openBtn, openSavedItemsPane);
|
utils.onButtonClick(openBtn, openSavedItemsPane);
|
||||||
onButtonClick(saveBtn, saveItem);
|
utils.onButtonClick(saveBtn, saveItem);
|
||||||
onButtonClick(newBtn, createNewItem);
|
utils.onButtonClick(newBtn, createNewItem);
|
||||||
onButtonClick(savedItemsPaneCloseBtn, toggleSavedItemsPane);
|
utils.onButtonClick(savedItemsPaneCloseBtn, toggleSavedItemsPane);
|
||||||
|
utils.onButtonClick(savedItemsPane, function (e) {
|
||||||
|
if (e.target.classList.contains('js-saved-item-tile')) {
|
||||||
|
openItem(e.target.dataset.itemId);
|
||||||
|
toggleSavedItemsPane();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Attach listeners on mode change menu items
|
// Attach listeners on mode change menu items
|
||||||
var modeItems = [].slice.call($all('.js-modes-menu a'));
|
var modeItems = [].slice.call($all('.js-modes-menu a'));
|
||||||
@ -510,7 +525,7 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
onButtonClick(settingsBtn, function() {
|
utils.onButtonClick(settingsBtn, function() {
|
||||||
if (!chrome.runtime.openOptionsPage) {
|
if (!chrome.runtime.openOptionsPage) {
|
||||||
// New way to open options pages, if supported (Chrome 42+).
|
// New way to open options pages, if supported (Chrome 42+).
|
||||||
// Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=601997
|
// Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=601997
|
||||||
@ -545,12 +560,12 @@
|
|||||||
if (result.preserveLastCode && lastCode) {
|
if (result.preserveLastCode && lastCode) {
|
||||||
if (lastCode.id) {
|
if (lastCode.id) {
|
||||||
chrome.storage.local.get(lastCode.id, function (result) {
|
chrome.storage.local.get(lastCode.id, function (result) {
|
||||||
log('Load item ', lastCode.id)
|
utils.log('Load item ', lastCode.id)
|
||||||
currentItem = result[lastCode.id];
|
currentItem = result[lastCode.id];
|
||||||
refreshEditor();
|
refreshEditor();
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
log('Load last unsaved item');
|
utils.log('Load last unsaved item');
|
||||||
currentItem = lastCode;
|
currentItem = lastCode;
|
||||||
refreshEditor();
|
refreshEditor();
|
||||||
}
|
}
|
||||||
@ -566,8 +581,8 @@
|
|||||||
chrome.storage.sync.get({
|
chrome.storage.sync.get({
|
||||||
lastSeenVersion: ''
|
lastSeenVersion: ''
|
||||||
}, function syncGetCallback(result) {
|
}, function syncGetCallback(result) {
|
||||||
// console.log(result, hasSeenNotifications, version);
|
// console.utils.log(result, hasSeenNotifications, version);
|
||||||
if (!result.lastSeenVersion || semverCompare(result.lastSeenVersion, version) === -1) {
|
if (!result.lastSeenVersion || utils.semverCompare(result.lastSeenVersion, version) === -1) {
|
||||||
notificationsBtn.classList.add('has-new');
|
notificationsBtn.classList.add('has-new');
|
||||||
hasSeenNotifications = false;
|
hasSeenNotifications = false;
|
||||||
}
|
}
|
||||||
|
71
src/utils.js
71
src/utils.js
@ -1,36 +1,45 @@
|
|||||||
// https://github.com/substack/semver-compare/blob/master/index.js
|
(function () {
|
||||||
function semverCompare(a, b) {
|
// https://github.com/substack/semver-compare/blob/master/index.js
|
||||||
var pa = a.split('.');
|
function semverCompare(a, b) {
|
||||||
var pb = b.split('.');
|
var pa = a.split('.');
|
||||||
for (var i = 0; i < 3; i++) {
|
var pb = b.split('.');
|
||||||
var na = Number(pa[i]);
|
for (var i = 0; i < 3; i++) {
|
||||||
var nb = Number(pb[i]);
|
var na = Number(pa[i]);
|
||||||
if (na > nb) { return 1; }
|
var nb = Number(pb[i]);
|
||||||
if (nb > na) { return -1; }
|
if (na > nb) { return 1; }
|
||||||
if (!isNaN(na) && isNaN(nb)) { return 1; }
|
if (nb > na) { return -1; }
|
||||||
if (isNaN(na) && !isNaN(nb)) { return -1; }
|
if (!isNaN(na) && isNaN(nb)) { return 1; }
|
||||||
|
if (isNaN(na) && !isNaN(nb)) { return -1; }
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function generateRandomId(length) {
|
function generateRandomId(len) {
|
||||||
length = length || 10;
|
len = len || 10;
|
||||||
var id = '';
|
var id = '';
|
||||||
for (var i = length; i--;) {
|
for (var i = len; i--;) {
|
||||||
id += String.fromCharCode(~~(Math.random() * 52) + 65);
|
id += String.fromCharCode(~~(Math.random() * 52) + 65);
|
||||||
|
}
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onButtonClick(btn, listener) {
|
function onButtonClick(btn, listener) {
|
||||||
btn.addEventListener('click', function buttonClickListener() {
|
btn.addEventListener('click', function buttonClickListener(e) {
|
||||||
listener();
|
listener(e);
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function log() {
|
|
||||||
if (window.DEBUG) {
|
|
||||||
console.log.apply(console, [].splice.call(arguments, 0));
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
function log() {
|
||||||
|
if (window.DEBUG) {
|
||||||
|
console.log.apply(console, [].splice.call(arguments, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
window.utils = {
|
||||||
|
semverCompare: semverCompare,
|
||||||
|
generateRandomId: generateRandomId,
|
||||||
|
onButtonClick: onButtonClick,
|
||||||
|
log: log
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user