diff --git a/webmaker/src/components/ContentWrap.jsx b/webmaker/src/components/ContentWrap.jsx index 5251d43..be1cfb2 100644 --- a/webmaker/src/components/ContentWrap.jsx +++ b/webmaker/src/components/ContentWrap.jsx @@ -2,7 +2,7 @@ import { h, Component } from 'preact'; import UserCodeMirror from './UserCodeMirror.jsx'; import { computeHtml, computeCss, computeJs } from '../computes'; import { HtmlModes, CssModes, JsModes } from '../codeModes'; -import { log } from '../utils'; +import { log, writeFile } from '../utils'; import { SplitPane } from './SplitPane.jsx'; import { trackEvent } from '../analytics'; @@ -142,59 +142,6 @@ export default class ContentWrap extends Component { return contents; } - writeFile(name, blob, cb) { - var fileWritten = false; - function getErrorHandler(type) { - return function() { - utils.log(arguments); - trackEvent('fn', 'error', type); - // When there are too many write errors, show a message. - writeFile.errorCount = (writeFile.errorCount || 0) + 1; - if (writeFile.errorCount === 4) { - setTimeout(function() { - alert( - "Oops! Seems like your preview isn't updating. It's recommended to switch to the web app: https://webmakerapp.com/app/.\n\n If you still want to get the extension working, please try the following steps until it fixes:\n - Refresh Web Maker\n - Restart browser\n - Update browser\n - Reinstall Web Maker (don't forget to export all your creations from saved items pane (click the OPEN button) before reinstalling)\n\nIf nothing works, please tweet out to @webmakerApp." - ); - trackEvent('ui', 'writeFileMessageSeen'); - }, 1000); - } - }; - } - - // utils.log('writing file ', name); - window.webkitRequestFileSystem( - window.TEMPORARY, - 1024 * 1024 * 5, - function(fs) { - fs.root.getFile( - name, - { create: true }, - function(fileEntry) { - fileEntry.createWriter(fileWriter => { - function onWriteComplete() { - if (fileWritten) { - // utils.log('file written ', name); - return cb(); - } - fileWritten = true; - // Set the write pointer to starting of file - fileWriter.seek(0); - fileWriter.write(blob); - return false; - } - fileWriter.onwriteend = onWriteComplete; - // Empty the file contents - fileWriter.truncate(0); - // utils.log('truncating file ', name); - }, getErrorHandler('createWriterFail')); - }, - getErrorHandler('getFileFail') - ); - }, - getErrorHandler('webkitRequestFileSystemFail') - ); - } - createPreviewFile(html, css, js) { const shouldInlineJs = !window.webkitRequestFileSystem || !window.IS_EXTENSION; diff --git a/webmaker/src/utils.js b/webmaker/src/utils.js index baa50d8..509fc84 100644 --- a/webmaker/src/utils.js +++ b/webmaker/src/utils.js @@ -1,3 +1,6 @@ + import { + trackEvent + } from './analytics'; window.DEBUG = document.cookie.indexOf('wmdebug') > -1; window.$ = document.querySelector.bind(document); @@ -215,16 +218,60 @@ } } - window.utils = { - semverCompare, - generateRandomId, - onButtonClick, - addInfiniteLoopProtection, - getHumanDate, - log, - once, - downloadFile - }; + export function writeFile(name, blob, cb) { + var fileWritten = false; + + function getErrorHandler(type) { + return function () { + log(arguments); + trackEvent('fn', 'error', type); + // When there are too many write errors, show a message. + writeFile.errorCount = (writeFile.errorCount || 0) + 1; + if (writeFile.errorCount === 4) { + setTimeout(function () { + alert( + "Oops! Seems like your preview isn't updating. It's recommended to switch to the web app: https://webmakerapp.com/app/.\n\n If you still want to get the extension working, please try the following steps until it fixes:\n - Refresh Web Maker\n - Restart browser\n - Update browser\n - Reinstall Web Maker (don't forget to export all your creations from saved items pane (click the OPEN button) before reinstalling)\n\nIf nothing works, please tweet out to @webmakerApp." + ); + trackEvent('ui', 'writeFileMessageSeen'); + }, 1000); + } + }; + } + + // utils.log('writing file ', name); + window.webkitRequestFileSystem( + window.TEMPORARY, + 1024 * 1024 * 5, + function (fs) { + fs.root.getFile( + name, { + create: true + }, + function (fileEntry) { + fileEntry.createWriter(fileWriter => { + function onWriteComplete() { + if (fileWritten) { + // utils.log('file written ', name); + return cb(); + } + fileWritten = true; + // Set the write pointer to starting of file + fileWriter.seek(0); + fileWriter.write(blob); + return false; + } + fileWriter.onwriteend = onWriteComplete; + // Empty the file contents + fileWriter.truncate(0); + // utils.log('truncating file ', name); + }, getErrorHandler('createWriterFail')); + }, + getErrorHandler('getFileFail') + ); + }, + getErrorHandler('webkitRequestFileSystemFail') + ); + } window.chrome = window.chrome || {}; window.chrome.i18n = {