diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..53ba16a --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env", "react"] +} \ No newline at end of file diff --git a/.claspignore b/.claspignore new file mode 100644 index 0000000..866740f --- /dev/null +++ b/.claspignore @@ -0,0 +1 @@ +dist/main.js \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..e69de29 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..148fe23 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,16 @@ +{ + "root": true, + "parser": "babel-eslint", + "extends": ["eslint:recommended", "google", "plugin:prettier/recommended"], + "plugins": ["prettier", "googleappsscript"], + "env": { + "googleappsscript/googleappsscript": true + }, + "globals": { + }, + "rules": { + "prettier/prettier": "error", + "import/prefer-default-export": 0, + "no-console": 0 + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..3f584f6 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "printWidth": 120, + "singleQuote": true +} diff --git a/appsscript.json b/appsscript.json new file mode 100644 index 0000000..06ebce7 --- /dev/null +++ b/appsscript.json @@ -0,0 +1,9 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + }, + "oauthScopes": [ + "https://www.googleapis.com/auth/script.container.ui", + "https://www.googleapis.com/auth/spreadsheets" + ] +} \ No newline at end of file diff --git a/dist/appsscript.json b/dist/appsscript.json new file mode 100644 index 0000000..06ebce7 --- /dev/null +++ b/dist/appsscript.json @@ -0,0 +1,9 @@ +{ + "timeZone": "America/New_York", + "dependencies": { + }, + "oauthScopes": [ + "https://www.googleapis.com/auth/script.container.ui", + "https://www.googleapis.com/auth/spreadsheets" + ] +} \ No newline at end of file diff --git a/dist/code.js b/dist/code.js new file mode 100644 index 0000000..bea9515 --- /dev/null +++ b/dist/code.js @@ -0,0 +1,181 @@ +function onOpen() { +} +function openDialog() { +} +function getSheetsData() { +} +function addSheet() { +} +function deleteSheet() { +}/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) { + +// Use ES6/7 code +var onOpen = function onOpen() { + SpreadsheetApp.getUi() // Or DocumentApp or FormApp. + .createMenu('Dialog').addItem('Add sheets', 'openDialog').addToUi(); +}; + +var openDialog = function openDialog() { + var html = HtmlService.createHtmlOutputFromFile('dialog'); + SpreadsheetApp.getUi() // Or DocumentApp or FormApp. + .showModalDialog(html, 'Sheet Editor'); +}; + +var getSheets = function getSheets() { + return SpreadsheetApp.getActive().getSheets(); +}; + +var getActiveSheetName = function getActiveSheetName() { + return SpreadsheetApp.getActive().getSheetName(); +}; + +var getSheetsData = function getSheetsData() { + var activeSheetName = getActiveSheetName(); + return getSheets().map(function (sheet, index) { + var sheetName = sheet.getName(); + return { + text: sheetName, + sheetIndex: index, + isActive: sheetName === activeSheetName + }; + }); +}; + +var addSheet = function addSheet(sheetTitle) { + SpreadsheetApp.getActive().insertSheet(sheetTitle); + return getSheetsData(); +}; + +var deleteSheet = function deleteSheet(sheetIndex) { + var sheets = getSheets(); + SpreadsheetApp.getActive().deleteSheet(sheets[sheetIndex]); + return getSheetsData(); +}; + +//Must expose public functions +global.onOpen = onOpen; +global.openDialog = openDialog; +global.getSheetsData = getSheetsData; +global.addSheet = addSheet; +global.deleteSheet = deleteSheet; +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1))) + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1, eval)("this"); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/dist/dialog.html b/dist/dialog.html new file mode 100644 index 0000000..d5b18d7 --- /dev/null +++ b/dist/dialog.html @@ -0,0 +1,36 @@ + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/dist/main.js b/dist/main.js new file mode 100644 index 0000000..db619c5 --- /dev/null +++ b/dist/main.js @@ -0,0 +1,22 @@ +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){"use strict";e.exports=n(10)},function(e,t,n){e.exports=n(20)()},function(e,t,n){"use strict"; +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,i,l=function(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),u=1;uO.length&&O.push(e)}function L(e,t,n,r){var o=typeof e;"undefined"!==o&&"boolean"!==o||(e=null);var a=!1;if(null===e)a=!0;else switch(o){case"string":case"number":a=!0;break;case"object":switch(e.$$typeof){case u:case c:a=!0}}if(a)return n(r,e,""===t?"."+U(e,0):t),1;if(a=0,t=""===t?".":t+":",Array.isArray(e))for(var i=0;ithis.eventPool.length&&this.eventPool.push(e)}function Ee(e){e.eventPool=[],e.getPooled=ke,e.release=xe}i(we.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=l.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=l.thatReturnsTrue)},persist:function(){this.isPersistent=l.thatReturnsTrue},isPersistent:l.thatReturnsFalse,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;for(t=0;t=Ne),Me=String.fromCharCode(32),Re={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},Le=!1;function Ue(e,t){switch(e){case"keyup":return-1!==Ce.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function De(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Fe=!1;var Ie={eventTypes:Re,extractEvents:function(e,t,n,r){var o=void 0,a=void 0;if(Se)e:{switch(e){case"compositionstart":o=Re.compositionStart;break e;case"compositionend":o=Re.compositionEnd;break e;case"compositionupdate":o=Re.compositionUpdate;break e}o=void 0}else Fe?Ue(e,n)&&(o=Re.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=Re.compositionStart);return o?(Oe&&(Fe||o!==Re.compositionStart?o===Re.compositionEnd&&Fe&&(a=ve()):(me._root=r,me._startText=ye(),Fe=!0)),o=_e.getPooled(o,t,n,r),a?o.data=a:null!==(a=De(n))&&(o.data=a),ee(o),a=o):a=null,(e=Pe?function(e,t){switch(e){case"compositionend":return De(t);case"keypress":return 32!==t.which?null:(Le=!0,Me);case"textInput":return(e=t.data)===Me&&Le?null:e;default:return null}}(e,n):function(e,t){if(Fe)return"compositionend"===e||!Se&&Ue(e,t)?(e=ve(),me._root=null,me._startText=null,me._fallbackText=null,Fe=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1