From 8d185a0427d6b9891e5eefbceace17948cb1e1fd Mon Sep 17 00:00:00 2001 From: Alex Cuadra Date: Sat, 22 Feb 2025 11:52:44 -0600 Subject: [PATCH] Changes from WordPress Playground --- main/.editorconfig | 14 ++ main/.gitignore | 36 +++ main/assets/humidity.png | Bin 0 -> 29353 bytes main/assets/wind.png | Bin 0 -> 13883 bytes main/build/block.json | 25 ++ main/build/index.asset.php | 1 + main/build/index.css | 14 ++ main/build/index.css.map | 1 + main/build/index.js | 353 +++++++++++++++++++++++++++ main/build/index.js.map | 1 + main/build/style-index.css | 48 ++++ main/build/style-index.css.map | 1 + main/package-lock.json | 0 main/package.json | 25 ++ main/readme.md | 23 ++ main/src/block.json | 26 ++ main/src/components/CityNameInput.js | 27 ++ main/src/edit.js | 56 +++++ main/src/editor.scss | 10 + main/src/index.js | 52 ++++ main/src/save.js | 34 +++ main/src/style.scss | 42 ++++ main/test/weatherblock.spec.js | 31 +++ main/weatherblock.php | 96 ++++++++ 24 files changed, 916 insertions(+) create mode 100644 main/.editorconfig create mode 100644 main/.gitignore create mode 100644 main/assets/humidity.png create mode 100644 main/assets/wind.png create mode 100644 main/build/block.json create mode 100644 main/build/index.asset.php create mode 100644 main/build/index.css create mode 100644 main/build/index.css.map create mode 100644 main/build/index.js create mode 100644 main/build/index.js.map create mode 100644 main/build/style-index.css create mode 100644 main/build/style-index.css.map create mode 100644 main/package-lock.json create mode 100644 main/package.json create mode 100644 main/readme.md create mode 100644 main/src/block.json create mode 100644 main/src/components/CityNameInput.js create mode 100644 main/src/edit.js create mode 100644 main/src/editor.scss create mode 100644 main/src/index.js create mode 100644 main/src/save.js create mode 100644 main/src/style.scss create mode 100644 main/test/weatherblock.spec.js create mode 100644 main/weatherblock.php diff --git a/main/.editorconfig b/main/.editorconfig new file mode 100644 index 0000000..7cae5d5 --- /dev/null +++ b/main/.editorconfig @@ -0,0 +1,14 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +# WordPress Coding Standards +# https://make.wordpress.org/core/handbook/coding-standards/ + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = tab diff --git a/main/.gitignore b/main/.gitignore new file mode 100644 index 0000000..02e3282 --- /dev/null +++ b/main/.gitignore @@ -0,0 +1,36 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Coverage directory used by tools like istanbul +coverage + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of `npm pack` +*.tgz + +# Output of `wp-scripts plugin-zip` +*.zip + +# dotenv environment variables file +.env + +#IDE folders +.idea +.vscode + +artifacts diff --git a/main/assets/humidity.png b/main/assets/humidity.png new file mode 100644 index 0000000000000000000000000000000000000000..b975e15ea63e9cf419334ee1a9204d6c5e203353 GIT binary patch literal 29353 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 CwR=AR literal 0 HcmV?d00001 diff --git a/main/assets/wind.png b/main/assets/wind.png new file mode 100644 index 0000000000000000000000000000000000000000..1028d570b935b7776e5f5f98eae44306bd4375a6 GIT binary patch literal 13883 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 Kw@8Qd;Qs&|iA3iB literal 0 HcmV?d00001 diff --git a/main/build/block.json b/main/build/block.json new file mode 100644 index 0000000..e124967 --- /dev/null +++ b/main/build/block.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "create-block/weatherblock", + "version": "0.1.0", + "title": "Weather Block", + "category": "widgets", + "icon": "smiley", + "description": "Example static block scaffolded with Create Block tool.", + "attributes": { + "cityName": { + "type": "string" + }, + "measure": { + "type": "string" + } + }, + "supports": { + "html": false + }, + "textdomain": "weatherblock", + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/main/build/index.asset.php b/main/build/index.asset.php new file mode 100644 index 0000000..8ce2308 --- /dev/null +++ b/main/build/index.asset.php @@ -0,0 +1 @@ + array('wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '8ac6586d8ee73f12621c'); diff --git a/main/build/index.css b/main/build/index.css new file mode 100644 index 0000000..9e33d9b --- /dev/null +++ b/main/build/index.css @@ -0,0 +1,14 @@ +/*!****************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./src/editor.scss ***! + \****************************************************************************************************************************************************************************************************************************************/ +/** + * The following styles get applied inside the editor only. + * + * Replace them with your own styles or remove the file completely. + */ +.wp-block-create-block-weatherblock { + border-radius: 2rem; + box-shadow: 5px 10px 8px #888888; +} + +/*# sourceMappingURL=index.css.map*/ \ No newline at end of file diff --git a/main/build/index.css.map b/main/build/index.css.map new file mode 100644 index 0000000..4f3db00 --- /dev/null +++ b/main/build/index.css.map @@ -0,0 +1 @@ +{"version":3,"file":"index.css","mappings":";;;AAAA;;;;EAAA;AAMA;EACC;EACA;AAAD,C","sources":["webpack://weatherblock/./src/editor.scss"],"sourcesContent":["/**\n * The following styles get applied inside the editor only.\n *\n * Replace them with your own styles or remove the file completely.\n */\n\n.wp-block-create-block-weatherblock {\n\tborder-radius: 2rem;\n\tbox-shadow: 5px 10px 8px #888888;\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/main/build/index.js b/main/build/index.js new file mode 100644 index 0000000..7bbf07f --- /dev/null +++ b/main/build/index.js @@ -0,0 +1,353 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/edit.js": +/*!*********************!*\ + !*** ./src/edit.js ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Edit) +/* harmony export */ }); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); +/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_4__); + + +/** + * Retrieves the translation of text. + * + * @see https://developer.wordpress.org/block-editor/packages/packages-i18n/ + */ + + + + +/** + * The edit function describes the structure of your block in the context of the + * editor. This represents what the editor will render when the block is used. + * + * @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#edit + * + * @return {WPElement} Element to render. + */ + +function Edit(props) { + const { + attributes, + setAttributes + } = props; + const { + cityName, + measure + } = attributes; + const blockProps = (0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps)(); + return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", blockProps, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", null, "Type the city\u2019s name below, and get the wheather information."), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_4__.TextControl, { + label: "City name", + value: cityName, + onChange: newCityName => setAttributes({ + cityName: newCityName + }) + })); +} + +/***/ }), + +/***/ "./src/index.js": +/*!**********************!*\ + !*** ./src/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss"); +/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js"); +/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/block.json"); + + +/** + * Internal dependencies + */ + + + +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__, { + /** + * @see ./edit.js + */ + edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"], + + /** + * @see ./save.js + */ + save: () => null +}); + +/***/ }), + +/***/ "./src/editor.scss": +/*!*************************!*\ + !*** ./src/editor.scss ***! + \*************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "./src/style.scss": +/*!************************!*\ + !*** ./src/style.scss ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }), + +/***/ "@wordpress/block-editor": +/*!*************************************!*\ + !*** external ["wp","blockEditor"] ***! + \*************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blockEditor"]; + +/***/ }), + +/***/ "@wordpress/blocks": +/*!********************************!*\ + !*** external ["wp","blocks"] ***! + \********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["blocks"]; + +/***/ }), + +/***/ "@wordpress/components": +/*!************************************!*\ + !*** external ["wp","components"] ***! + \************************************/ +/***/ ((module) => { + +module.exports = window["wp"]["components"]; + +/***/ }), + +/***/ "@wordpress/element": +/*!*********************************!*\ + !*** external ["wp","element"] ***! + \*********************************/ +/***/ ((module) => { + +module.exports = window["wp"]["element"]; + +/***/ }), + +/***/ "@wordpress/i18n": +/*!******************************!*\ + !*** external ["wp","i18n"] ***! + \******************************/ +/***/ ((module) => { + +module.exports = window["wp"]["i18n"]; + +/***/ }), + +/***/ "./src/block.json": +/*!************************!*\ + !*** ./src/block.json ***! + \************************/ +/***/ ((module) => { + +module.exports = JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":2,"name":"create-block/weatherblock","version":"0.1.0","title":"Weather Block","category":"widgets","icon":"smiley","description":"Example static block scaffolded with Create Block tool.","attributes":{"cityName":{"type":"string"},"measure":{"type":"string"}},"supports":{"html":false},"textdomain":"weatherblock","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css"}'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "index": 0, +/******/ "./style-index": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunkweatherblock"] = self["webpackChunkweatherblock"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module depends on other loaded chunks and execution need to be delayed +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.js"))) +/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); +/******/ +/******/ })() +; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/main/build/index.js.map b/main/build/index.js.map new file mode 100644 index 0000000..24d868d --- /dev/null +++ b/main/build/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGe,SAASG,IAAT,CAAcC,KAAd,EAAqB;EAEnC,MAAM;IAAEC,UAAF;IAAcC;EAAd,IAAgCF,KAAtC;EAEA,MAAM;IAAEG,QAAF;IAAYC;EAAZ,IAAwBH,UAA9B;EAEA,MAAMI,UAAU,GAAGR,sEAAa,EAAhC;EAEA,OACC,yEAASQ,UAAT,EACC,kJADD,EAEC,kEAAC,8DAAD;IACC,KAAK,EAAC,WADP;IAEC,KAAK,EAAEF,QAFR;IAGC,QAAQ,EAAGG,WAAD,IAAiBJ,aAAa,CAAC;MAAEC,QAAQ,EAAEG;IAAZ,CAAD;EAHzC,EAFD,CADD;AAWA;;;;;;;;;;;;;;;;ACvCD;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAGAC,oEAAiB,CAAEC,wCAAF,EAAQ;EACxB;AACD;AACA;EACCC,IAAI,EAAEV,6CAJkB;;EAKxB;AACD;AACA;EACCW,IAAI,EAAE,MAAM;AARY,CAAR,CAAjB;;;;;;;;;;;ACXA;;;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WCzBA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA;WACA;WACA,kBAAkB,qBAAqB;WACvC;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC7BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;;;;UEnDA;UACA;UACA;UACA;UACA","sources":["webpack://weatherblock/./src/edit.js","webpack://weatherblock/./src/index.js","webpack://weatherblock/./src/editor.scss?d4ae","webpack://weatherblock/./src/style.scss?5612","webpack://weatherblock/external window [\"wp\",\"blockEditor\"]","webpack://weatherblock/external window [\"wp\",\"blocks\"]","webpack://weatherblock/external window [\"wp\",\"components\"]","webpack://weatherblock/external window [\"wp\",\"element\"]","webpack://weatherblock/external window [\"wp\",\"i18n\"]","webpack://weatherblock/webpack/bootstrap","webpack://weatherblock/webpack/runtime/chunk loaded","webpack://weatherblock/webpack/runtime/compat get default export","webpack://weatherblock/webpack/runtime/define property getters","webpack://weatherblock/webpack/runtime/hasOwnProperty shorthand","webpack://weatherblock/webpack/runtime/make namespace object","webpack://weatherblock/webpack/runtime/jsonp chunk loading","webpack://weatherblock/webpack/before-startup","webpack://weatherblock/webpack/startup","webpack://weatherblock/webpack/after-startup"],"sourcesContent":["/**\n * Retrieves the translation of text.\n *\n * @see https://developer.wordpress.org/block-editor/packages/packages-i18n/\n */\nimport { __ } from '@wordpress/i18n';\nimport { useBlockProps } from '@wordpress/block-editor';\nimport './editor.scss';\nimport { TextControl } from '@wordpress/components';\n\n/**\n * The edit function describes the structure of your block in the context of the\n * editor. This represents what the editor will render when the block is used.\n *\n * @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#edit\n *\n * @return {WPElement} Element to render.\n */\n\n\nexport default function Edit(props) {\n\n\tconst { attributes, setAttributes } = props\n\n\tconst { cityName, measure } = attributes\n\n\tconst blockProps = useBlockProps()\n\n\treturn (\n\t\t
\n\t\t\t

Type the city’s name below, and get the wheather information.

\n\t\t\t setAttributes({ cityName: newCityName})}\n\t\t\t/>\t\n\t\t\t\n\t\t
\n\t);\n}","import { registerBlockType } from '@wordpress/blocks';\nimport './style.scss';\n\n/**\n * Internal dependencies\n */\n\nimport Edit from './edit';\nimport name from './block.json';\n\n\nregisterBlockType( name, {\n\t/**\n\t * @see ./edit.js\n\t */\n\tedit: Edit,\n\t/**\n\t * @see ./save.js\n\t */\n\tsave: () => null,\n\t\n});\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"element\"];","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"index\": 0,\n\t\"./style-index\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkweatherblock\"] = self[\"webpackChunkweatherblock\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"./style-index\"], () => (__webpack_require__(\"./src/index.js\")))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":["__","useBlockProps","TextControl","Edit","props","attributes","setAttributes","cityName","measure","blockProps","newCityName","registerBlockType","name","edit","save"],"sourceRoot":""} \ No newline at end of file diff --git a/main/build/style-index.css b/main/build/style-index.css new file mode 100644 index 0000000..21e686f --- /dev/null +++ b/main/build/style-index.css @@ -0,0 +1,48 @@ +/*!***************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[3].use[3]!./src/style.scss ***! + \***************************************************************************************************************************************************************************************************************************************/ +/** + * The following styles get applied both on the front of your site + * and in the editor. + * + * Replace them with your own styles or remove the file completely. + */ +.wp-block-create-block-weatherblock, .weather-card { + border-radius: 2rem; + box-shadow: 5px 10px 8px #888888; + background-color: #dedbd9; + color: #000000; + padding: 2rem; +} +.wp-block-create-block-weatherblock .main-weather, .weather-card .main-weather { + display: flex; + justify-content: space-evenly; +} +.wp-block-create-block-weatherblock .main-weather h3, .weather-card .main-weather h3 { + font-size: 3.5rem; + font-weight: 900; + margin-bottom: 0; +} +.wp-block-create-block-weatherblock .main-weather .weather-icon, .weather-card .main-weather .weather-icon { + display: flex; + align-items: center; +} +.wp-block-create-block-weatherblock .temp-info, .weather-card .temp-info { + display: grid; + grid-template-columns: repeat(3, 1fr); + justify-items: center; +} +.wp-block-create-block-weatherblock .temp-info img, .weather-card .temp-info img { + width: 20%; +} +.wp-block-create-block-weatherblock .temp-info span, .weather-card .temp-info span { + font-size: 3rem; +} +.wp-block-create-block-weatherblock .temp-info .humidity, .wp-block-create-block-weatherblock .temp-info .wind, .weather-card .temp-info .humidity, .weather-card .temp-info .wind { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +/*# sourceMappingURL=style-index.css.map*/ \ No newline at end of file diff --git a/main/build/style-index.css.map b/main/build/style-index.css.map new file mode 100644 index 0000000..3a90680 --- /dev/null +++ b/main/build/style-index.css.map @@ -0,0 +1 @@ +{"version":3,"file":"./style-index.css","mappings":";;;AAAA;;;;;EAAA;AAOA;EACC;EACA;EACA;EACA;EACA;AAAD;AACC;EACC;EACA;AACF;AAAE;EACC;EACA;EACA;AAEH;AAAE;EACC;EACA;AAEH;AACC;EACC;EACG;EACH;AACF;AAAE;EAAI;AAGN;AAFE;EACC;AAIH;AAFE;EACC;EACA;EACA;EACA;AAIH,C","sources":["webpack://weatherblock/./src/style.scss"],"sourcesContent":["/**\n * The following styles get applied both on the front of your site\n * and in the editor.\n *\n * Replace them with your own styles or remove the file completely.\n */\n\n.wp-block-create-block-weatherblock, .weather-card {\n\tborder-radius: 2rem;\n\tbox-shadow: 5px 10px 8px #888888;\n\tbackground-color: #dedbd9;\n\tcolor: #000000;\n\tpadding: 2rem;\n\t.main-weather{\n\t\tdisplay: flex;\n\t\tjustify-content: space-evenly;\n\t\th3{\t\n\t\t\tfont-size: 3.5rem;\n\t\t\tfont-weight: 900;\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t\t.weather-icon{\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\t}\n\t.temp-info{\n\t\tdisplay: grid;\n \tgrid-template-columns: repeat(3, 1fr);\n\t\tjustify-items: center;\n\t\timg{width: 20%;}\n\t\tspan{\n\t\t\tfont-size: 3rem;\n\t\t}\n\t\t.humidity, .wind{\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t}\n\t}\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/main/package-lock.json b/main/package-lock.json new file mode 100644 index 0000000..e69de29 diff --git a/main/package.json b/main/package.json new file mode 100644 index 0000000..1a23a53 --- /dev/null +++ b/main/package.json @@ -0,0 +1,25 @@ +{ + "name": "weatherblock", + "version": "0.1.0", + "description": "Example static block scaffolded with Create Block tool.", + "author": "The WordPress Contributors", + "license": "GPL-2.0-or-later", + "main": "build/index.js", + "scripts": { + "build": "wp-scripts build", + "format": "wp-scripts format", + "lint:css": "wp-scripts lint-style", + "lint:js": "wp-scripts lint-js", + "packages-update": "wp-scripts packages-update", + "plugin-zip": "wp-scripts plugin-zip", + "start": "wp-scripts start", + "test:e2e": "wp-scripts test-e2e", + "env:start": "wp-env start", + "env:stop": " wp-env start" + }, + "devDependencies": { + "@wordpress/e2e-test-utils": "^7.5.0", + "@wordpress/e2e-tests": "^4.3.0", + "@wordpress/scripts": "^23.0.0" + } +} diff --git a/main/readme.md b/main/readme.md new file mode 100644 index 0000000..73de743 --- /dev/null +++ b/main/readme.md @@ -0,0 +1,23 @@ +# Weather Block +Contributors: Alex Cuadra +Tags: block weather +Tested up to: 5.9 +Stable tag: 0.1.0 +License: GPL-2.0-or-later +License URI: https://www.gnu.org/licenses/gpl-2.0.html + + +## == Description == + +This is a simple block that give the weather in a city that you input. + +## == Installation == + +This section describes how to install the plugin and get it working. + +e.g. + +1. Upload the plugin files to the `/wp-content/plugins/weatherblock` directory, or install the plugin through the WordPress plugins screen directly. +1. Activate the plugin through the 'Plugins' screen in WordPress + + diff --git a/main/src/block.json b/main/src/block.json new file mode 100644 index 0000000..58d329e --- /dev/null +++ b/main/src/block.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://schemas.wp.org/trunk/block.json", + "apiVersion": 2, + "name": "create-block/weatherblock", + "version": "0.1.0", + "title": "Weather Block", + "category": "widgets", + "icon": "smiley", + "description": "Example static block scaffolded with Create Block tool.", + "attributes": { + "cityName":{ + "type": "string" + }, + "background_color": { + "type": "string", + "default": "#cdcdcd" + } + }, + "supports": { + "html": false + }, + "textdomain": "weatherblock", + "editorScript": "file:./index.js", + "editorStyle": "file:./index.css", + "style": "file:./style-index.css" +} \ No newline at end of file diff --git a/main/src/components/CityNameInput.js b/main/src/components/CityNameInput.js new file mode 100644 index 0000000..7eea90a --- /dev/null +++ b/main/src/components/CityNameInput.js @@ -0,0 +1,27 @@ +import React from 'react' + + +const CityNameInput = (props) => { + + const { + label, + value, + onChange, + type = 'text', + } = props; + + const onChangeValue = ( event ) => onChange( event.target.value ); + + return ( + <> +
+ + + ) +} + +export default CityNameInput; diff --git a/main/src/edit.js b/main/src/edit.js new file mode 100644 index 0000000..dd995a0 --- /dev/null +++ b/main/src/edit.js @@ -0,0 +1,56 @@ +/** + * Retrieves the translation of text. + * + * @see https://developer.wordpress.org/block-editor/packages/packages-i18n/ + */ +import { __ } from '@wordpress/i18n'; +import { useBlockProps } from '@wordpress/block-editor'; +import './editor.scss'; +import { TextControl } from '@wordpress/components'; +import {CityNameInput} from 'components/CityNameInput' + +/** + * The edit function describes the structure of your block in the context of the + * editor. This represents what the editor will render when the block is used. + * + * @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#edit + * + * @return {WPElement} Element to render. + */ + + +export default function Edit(props) { + + const { attributes, setAttributes } = props + + const { cityName } = attributes + + const onChangeBackColor = (color) => { + setAttributes({background_color: color}) + } + + const blockProps = useBlockProps() + + return ( +
+ +
+ + Color de fondo + + +
+
+
+

Type the city’s name below, and get the wheather information.

+ setAttributes({ cityName: newCityName})} + /> +
+
+ ); +} \ No newline at end of file diff --git a/main/src/editor.scss b/main/src/editor.scss new file mode 100644 index 0000000..8db57f2 --- /dev/null +++ b/main/src/editor.scss @@ -0,0 +1,10 @@ +/** + * The following styles get applied inside the editor only. + * + * Replace them with your own styles or remove the file completely. + */ + +.wp-block-create-block-weatherblock { + border-radius: 2rem; + box-shadow: 5px 10px 8px #888888; +} diff --git a/main/src/index.js b/main/src/index.js new file mode 100644 index 0000000..54222fc --- /dev/null +++ b/main/src/index.js @@ -0,0 +1,52 @@ +import { registerBlockType } from '@wordpress/blocks'; +import './style.scss'; + +/** + * Internal dependencies + */ + +import Edit from './edit'; +import name from './block.json'; + + +registerBlockType( name, { + /** + * @see ./edit.js + */ + edit: Edit, + /** + * @see ./save.js + */ + save: () => null, + + transforms: { + from: [ + { + type: 'shortcode', + tag:'weather', + transform({attributes: {cityname}}){ + return createBlock('create-block/weatherblock', { + cityName: cityname + }) + } + }, + ], + + }, + + // transforms: { + // from: [ + // { + // type: 'block', + // blocks:['core/shortcode'], + // transform({attributes: {cityname}}){ + // return createBlock('create-block/weatherblock', { + // cityName: cityname + // }) + // } + // }, + // ], + + // }, + +}); diff --git a/main/src/save.js b/main/src/save.js new file mode 100644 index 0000000..31115a4 --- /dev/null +++ b/main/src/save.js @@ -0,0 +1,34 @@ +/** + * Retrieves the translation of text. + * + * @see https://developer.wordpress.org/block-editor/packages/packages-i18n/ + */ +import { __ } from '@wordpress/i18n'; + +/** + * React hook that is used to mark the block wrapper element. + * It provides all the necessary props like the class name. + * + * @see https://developer.wordpress.org/block-editor/packages/packages-block-editor/#useBlockProps + */ +import { useBlockProps } from '@wordpress/block-editor'; + +/** + * The save function defines the way in which the different attributes should + * be combined into the final markup, which is then serialized by the block + * editor into `post_content`. + * + * @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#save + * + * @return {WPElement} Element to render. + */ +export default function save() { + return ( +

+ {__( + 'Weather Block – hello from the saved content!', + 'weatherblock' + )} +

+ ); +} diff --git a/main/src/style.scss b/main/src/style.scss new file mode 100644 index 0000000..685589a --- /dev/null +++ b/main/src/style.scss @@ -0,0 +1,42 @@ +/** + * The following styles get applied both on the front of your site + * and in the editor. + * + * Replace them with your own styles or remove the file completely. + */ + +.wp-block-create-block-weatherblock, .weather-card { + border-radius: 2rem; + box-shadow: 5px 10px 8px #888888; + background-color: #dedbd9; + color: #000000; + padding: 2rem; + .main-weather{ + display: flex; + justify-content: space-evenly; + h3{ + font-size: 3.5rem; + font-weight: 900; + margin-bottom: 0; + } + .weather-icon{ + display: flex; + align-items: center; + } + } + .temp-info{ + display: grid; + grid-template-columns: repeat(3, 1fr); + justify-items: center; + img{width: 20%;} + span{ + font-size: 3rem; + } + .humidity, .wind{ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + } +} diff --git a/main/test/weatherblock.spec.js b/main/test/weatherblock.spec.js new file mode 100644 index 0000000..5d11479 --- /dev/null +++ b/main/test/weatherblock.spec.js @@ -0,0 +1,31 @@ + + +import { createNewPost, insertBlock, wpDataSelect, enablePageDialogAccept, getEditedPostContent, getCurrentPostContent } from '@wordpress/e2e-test-utils' + +jest.setTimeout(30000) + +describe('Pruebas en bloqueclima', () => { + beforeAll( async () => { + await enablePageDialogAccept(); + }) + + beforeEach( async () => { + await createNewPost() + }) + + it('deberia insertar el bloque en el editor', async () => { + + + await insertBlock( 'Bloqueclima' ); + + expect(await page.$( '[data-type="create-block/bloqueclima"]' ) ).not.toBeNull(); + + console.log(await wpDataSelect()) + + expect ( await getEditedPostContent() ).toEqual('') + + }) + + + +}) \ No newline at end of file diff --git a/main/weatherblock.php b/main/weatherblock.php new file mode 100644 index 0000000..6b9f8a0 --- /dev/null +++ b/main/weatherblock.php @@ -0,0 +1,96 @@ + 'render_weather_widget' + ) ); +} +add_action( 'init', 'create_block_weatherblock_block_init' ); + +function render_weather_widget($attributes, $content, $block){ + + $cityname = $attributes['cityName'] ? $attributes['cityName'] : 'managua'; + + + //API variables + $url = 'https://api.openweathermap.org/data/2.5/weather'; + $apiKey = '6b1cd5a24a18ee83c55372465790bed5'; + + $fullUrl = $url . '?q=' . $cityname . '&appid=' . $apiKey; + $response = wp_remote_get($fullUrl); + + + if (is_wp_error($response)) { + error_log("Error: ". $response->get_error_message()); + return false; + } + + if ($cityname !== ''){ + + $body = wp_remote_retrieve_body($response); + + $data = json_decode($body); + + + $city = $data->name; + $temp = $data->main->temp; + $cityweather = $data->weather[0]->description; + $hummidity = $data->main->humidity; + $speed = $data->wind->speed; + $weatherIcon = $data->weather[0]->icon; + + + ob_start(); + ?> +
+
+
+

+

+
+
+ +
+
+ +
+

F

+
+ +

+
+
+ +

+
+
+
+ + +