Adrian Florczak 2 жил өмнө
parent
commit
9934338ea0

+ 9 - 1
build/block.json

@@ -15,5 +15,13 @@
   "editorScript": "file:./index.js",
   "editorStyle": "file:./index.css",
   "style": "file:./style-index.css",
-  "viewScript": "file:./view.js"
+  "render": "file:./render.php",
+  "viewScript": "file:./view.js",
+  "attributes": {
+    "content": {
+      "type": "string",
+      "source": "html",
+      "selector": "p"
+    }
+  }
 }

+ 1 - 1
build/index.asset.php

@@ -1 +1 @@
-<?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'd8b8c99b421b1f099841');
+<?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '86b49256a7df923c8197');

+ 4 - 1
build/index.css

@@ -1 +1,4 @@
-.wp-block-create-block-tsu-financial-progress-block{border:1px dotted red}
+/*!****************************************************************************************************************************************************************************************************************************************!*\
+  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***!
+  \****************************************************************************************************************************************************************************************************************************************/
+

+ 415 - 1
build/index.js

@@ -1 +1,415 @@
-(()=>{"use strict";var r,e={250:()=>{const r=window.wp.blocks,e=window.React,o=window.wp.i18n,n=window.wp.blockEditor,s=JSON.parse('{"u2":"create-block/tsu-financial-progress-block"}');(0,r.registerBlockType)(s.u2,{edit:function(){return(0,e.createElement)("p",{...(0,n.useBlockProps)()},(0,o.__)("Tsu Financial Progress Block – hello from the editor!","tsu-financial-progress-block"))},save:function(){return(0,e.createElement)("p",{...n.useBlockProps.save()},"Tsu Financial Progress Block – hello from the saved content!")}})}},o={};function n(r){var s=o[r];if(void 0!==s)return s.exports;var t=o[r]={exports:{}};return e[r](t,t.exports,n),t.exports}n.m=e,r=[],n.O=(e,o,s,t)=>{if(!o){var i=1/0;for(p=0;p<r.length;p++){for(var[o,s,t]=r[p],l=!0,a=0;a<o.length;a++)(!1&t||i>=t)&&Object.keys(n.O).every((r=>n.O[r](o[a])))?o.splice(a--,1):(l=!1,t<i&&(i=t));if(l){r.splice(p--,1);var c=s();void 0!==c&&(e=c)}}return e}t=t||0;for(var p=r.length;p>0&&r[p-1][2]>t;p--)r[p]=r[p-1];r[p]=[o,s,t]},n.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={826:0,431:0};n.O.j=e=>0===r[e];var e=(e,o)=>{var s,t,[i,l,a]=o,c=0;if(i.some((e=>0!==r[e]))){for(s in l)n.o(l,s)&&(n.m[s]=l[s]);if(a)var p=a(n)}for(e&&e(o);c<i.length;c++)t=i[c],n.o(r,t)&&r[t]&&r[t][0](),r[t]=0;return n.O(p)},o=globalThis.webpackChunktsu_financial_progress_block=globalThis.webpackChunktsu_financial_progress_block||[];o.forEach(e.bind(null,0)),o.push=e.bind(null,o.push.bind(o))})();var s=n.O(void 0,[431],(()=>n(250)));s=n.O(s)})();
+/******/ (() => { // 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 react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__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");
+
+/**
+ * Retrieves the translation of text.
+ *
+ * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-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/reference-guides/packages/packages-block-editor/#useblockprops
+ */
+
+
+/**
+ * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
+ * Those files can contain any CSS code that gets applied to the editor.
+ *
+ * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
+ */
+
+
+/**
+ * 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/reference-guides/block-api/block-edit-save/#edit
+ *
+ * @return {Element} Element to render.
+ */
+function Edit({
+  attributes,
+  setAttributes
+}) {
+  const blockProps = (0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps)();
+  const onChangeContent = newContent => {
+    setAttributes({
+      content: newContent
+    });
+  };
+  return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.RichText, {
+    ...blockProps,
+    tagName: "p",
+    onChange: onChangeContent,
+    allowedFormats: ['core/bold', 'core/italic'],
+    value: attributes.content,
+    placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Write your text...')
+  });
+}
+
+/***/ }),
+
+/***/ "./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 _save__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./save */ "./src/save.js");
+/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./block.json */ "./src/block.json");
+/**
+ * Registers a new block provided a unique name and an object defining its behavior.
+ *
+ * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
+ */
+
+
+/**
+ * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
+ * All files containing `style` keyword are bundled together. The code used
+ * gets applied both to the front of your site and to the editor.
+ *
+ * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
+ */
+
+
+/**
+ * Internal dependencies
+ */
+
+
+
+
+/**
+ * Every block starts by registering a new block type definition.
+ *
+ * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
+ */
+(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_4__.name, {
+  /**
+   * @see ./edit.js
+   */
+  edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"],
+  /**
+   * @see ./save.js
+   */
+  save: _save__WEBPACK_IMPORTED_MODULE_3__["default"]
+});
+
+/***/ }),
+
+/***/ "./src/save.js":
+/*!*********************!*\
+  !*** ./src/save.js ***!
+  \*********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (/* binding */ save)
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
+/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__);
+
+/**
+ * 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/reference-guides/packages/packages-block-editor/#useblockprops
+ */
+
+
+/**
+ * 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/reference-guides/block-api/block-edit-save/#save
+ *
+ * @return {Element} Element to render.
+ */
+function save({
+  attributes
+}) {
+  const blockProps = _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.useBlockProps.save();
+  return (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.RichText.Content, {
+    ...blockProps,
+    tagName: "p",
+    value: attributes.content
+  });
+}
+
+/***/ }),
+
+/***/ "./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
+
+
+/***/ }),
+
+/***/ "react":
+/*!************************!*\
+  !*** external "React" ***!
+  \************************/
+/***/ ((module) => {
+
+module.exports = window["React"];
+
+/***/ }),
+
+/***/ "@wordpress/block-editor":
+/*!*************************************!*\
+  !*** external ["wp","blockEditor"] ***!
+  \*************************************/
+/***/ ((module) => {
+
+module.exports = window["wp"]["blockEditor"];
+
+/***/ }),
+
+/***/ "@wordpress/blocks":
+/*!********************************!*\
+  !*** external ["wp","blocks"] ***!
+  \********************************/
+/***/ ((module) => {
+
+module.exports = window["wp"]["blocks"];
+
+/***/ }),
+
+/***/ "@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":3,"name":"create-block/tsu-financial-progress-block","version":"0.1.0","title":"Tsu Financial Progress Block","category":"widgets","icon":"smiley","description":"Example block scaffolded with Create Block tool.","example":{},"supports":{"html":false},"textdomain":"tsu-financial-progress-block","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js","attributes":{"content":{"type":"string","source":"html","selector":"p"}}}');
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// 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, fn, priority] = deferred[i];
+/******/ 				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, moreModules, runtime] = data;
+/******/ 			// 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 = globalThis["webpackChunktsu_financial_progress_block"] = globalThis["webpackChunktsu_financial_progress_block"] || [];
+/******/ 		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

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/index.js.map


+ 69 - 0
build/render.php

@@ -0,0 +1,69 @@
+
+<?php
+    $slug = $content;
+
+    if (!$slug) {
+        // Pobierz wartość niestandardowego pola 'slug_zrzutka' dla aktualnego postu
+        $slug_zrzutka_value = get_post_meta(get_the_ID(), '_slug_zrzutka', true);
+
+        // Wyświetl wartość (jeśli istnieje)
+        if (!empty($slug_zrzutka_value)) {
+            $slug = $slug_zrzutka_value;
+        }
+    }
+
+
+    $url = "https://zrzutka.pl/" . $slug;
+
+    // Używamy cURL do pobrania zawartości strony
+    $ch = curl_init();
+    curl_setopt($ch, CURLOPT_URL, $url);
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+    curl_setopt($ch, CURLOPT_VERBOSE, true);
+    // curl_setopt($ch, CURLOPT_STDERR, $wrapper);
+    
+    $html = curl_exec($ch);
+    curl_close($ch);
+
+    // Sprawdzamy, czy udało się pobrać zawartość
+    if (!$html) {
+        return "Nie udało się pobrać zawartości ze strony.";
+    }
+
+    // Tworzymy nowy obiekt DOMDocument i wczytujemy pobraną zawartość
+    $dom = new DOMDocument;
+    @$dom->loadHTML($html); // @ jest używane, aby stłumić ostrzeżenia generowane przez niepoprawny HTML
+
+    // Tworzymy obiekt DOMXPath do wyszukiwania elementów
+    $xpath = new DOMXPath($dom);
+
+    // Szukamy elementu z klasą 'h3' w obrębie diva o atrybucie 'data-action' równym 'chip-show-amounts'
+    $amountNode = $xpath->query('//div[@data-action="chip-show-amounts"]//div[@class="h3 m-0"]')->item(0);
+
+    // Szukamy elementu z sumą ceny
+    $sumNode = $xpath->query('//div[@data-action="chip-show-amounts"]//span[@data-action="chip-target-sum"]')->item(0);
+
+    // Wyświetlamy znalezione wartości
+    if ($amountNode && $sumNode) {
+        $amount = strip_tags(trim($amountNode->textContent));
+        $sum = strip_tags(trim($sumNode->textContent));
+
+        // Parsowanie kwot jako liczby całkowite
+        $amountNumber = intval(str_replace(' ', '', $amount));
+        $sumNumber = intval(str_replace(' ', '', $sum));
+
+        // Obliczamy procentowy udział
+        $percent = ($amountNumber / $sumNumber) * 100;
+
+        // Tworzymy pasek postępu
+        $progressBar = "<div style='width: 100%; margin-top: 0.25em; background-color: #e0e0e0; border-radius: 20px; height: 20px; overflow: hidden;'>
+                    <div style='width: $percent%; background-color: #e64164; text-align: center; color: white; border-radius: 10px; padding: 5px; height: 50%;'></div>
+                </div>
+                <p class='has-small-font-size'>Mamy już <strong>$amountNumber zł</strong> z <strong>$sumNumber zł</strong>!</p>
+                ";
+        return $progressBar;
+    } else {
+        return "";
+    }
+?>

+ 4 - 1
build/style-index.css

@@ -1 +1,4 @@
-.wp-block-create-block-tsu-financial-progress-block{background-color:#21759b;color:#fff;padding:2px}
+/*!***************************************************************************************************************************************************************************************************************************************!*\
+  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***!
+  \***************************************************************************************************************************************************************************************************************************************/
+

+ 1 - 1
build/view.asset.php

@@ -1 +1 @@
-<?php return array('dependencies' => array(), 'version' => '2f7c2bb898172e003617');
+<?php return array('dependencies' => array(), 'version' => '8f5d2ea1f67f383083b3');

+ 35 - 1
build/view.js

@@ -1 +1,35 @@
-console.log("Hello World! (from create-block-tsu-financial-progress-block block)");
+/******/ (() => { // webpackBootstrap
+var __webpack_exports__ = {};
+/*!*********************!*\
+  !*** ./src/view.js ***!
+  \*********************/
+/**
+ * Use this file for JavaScript code that you want to run in the front-end
+ * on posts/pages that contain this block.
+ *
+ * When this file is defined as the value of the `viewScript` property
+ * in `block.json` it will be enqueued on the front end of the site.
+ *
+ * Example:
+ *
+ * ```js
+ * {
+ *   "viewScript": "file:./view.js"
+ * }
+ * ```
+ *
+ * If you're not making any changes to this file because your project doesn't need any
+ * JavaScript running in the front-end, then you should delete this file and remove
+ * the `viewScript` property from `block.json`.
+ *
+ * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#view-script
+ */
+
+/* eslint-disable no-console */
+// console.log(
+// 	'Hello World! (from create-block-tsu-financial-progress-block block)'
+// );
+/* eslint-enable no-console */
+/******/ })()
+;
+//# sourceMappingURL=view.js.map

+ 1 - 0
build/view.js.map

@@ -0,0 +1 @@
+{"version":3,"file":"view.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8B","sources":["webpack://tsu-financial-progress-block/./src/view.js"],"sourcesContent":["/**\r\n * Use this file for JavaScript code that you want to run in the front-end\r\n * on posts/pages that contain this block.\r\n *\r\n * When this file is defined as the value of the `viewScript` property\r\n * in `block.json` it will be enqueued on the front end of the site.\r\n *\r\n * Example:\r\n *\r\n * ```js\r\n * {\r\n *   \"viewScript\": \"file:./view.js\"\r\n * }\r\n * ```\r\n *\r\n * If you're not making any changes to this file because your project doesn't need any\r\n * JavaScript running in the front-end, then you should delete this file and remove\r\n * the `viewScript` property from `block.json`.\r\n *\r\n * @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/#view-script\r\n */\r\n\r\n/* eslint-disable no-console */\r\n// console.log(\r\n// \t'Hello World! (from create-block-tsu-financial-progress-block block)'\r\n// );\r\n/* eslint-enable no-console */\r\n"],"names":[],"sourceRoot":""}

+ 9 - 1
src/block.json

@@ -15,5 +15,13 @@
 	"editorScript": "file:./index.js",
 	"editorStyle": "file:./index.css",
 	"style": "file:./style-index.css",
-	"viewScript": "file:./view.js"
+	"render": "file:./render.php",
+	"viewScript": "file:./view.js",
+	"attributes": {
+		"content": {
+			"type": "string",
+			"source": "html",
+			"selector": "p"
+		}
+	}
 }

+ 17 - 8
src/edit.js

@@ -11,7 +11,7 @@ import { __ } from '@wordpress/i18n';
  *
  * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops
  */
-import { useBlockProps } from '@wordpress/block-editor';
+import { useBlockProps, RichText } from '@wordpress/block-editor';
 
 /**
  * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
@@ -29,13 +29,22 @@ import './editor.scss';
  *
  * @return {Element} Element to render.
  */
-export default function Edit() {
+export default function Edit( { attributes, setAttributes } ) {
+
+	const blockProps = useBlockProps();
+
+	const onChangeContent = ( newContent ) => {
+		setAttributes( { content:  newContent } );
+	}
+
 	return (
-		<p { ...useBlockProps() }>
-			{ __(
-				'Tsu Financial Progress Block – hello from the editor!',
-				'tsu-financial-progress-block'
-			) }
-		</p>
+		<RichText 
+			{ ...blockProps }
+			tagName="p"
+			onChange={ onChangeContent }
+			allowedFormats={ [ 'core/bold', 'core/italic' ] }
+			value={ attributes.content }
+			placeholder={ __( 'Write your text...' ) }
+		/>
 	);
 }

+ 0 - 9
src/editor.scss

@@ -1,9 +0,0 @@
-/**
- * The following styles get applied inside the editor only.
- *
- * Replace them with your own styles or remove the file completely.
- */
-
-.wp-block-create-block-tsu-financial-progress-block {
-	border: 1px dotted #f00;
-}

+ 69 - 0
src/render.php

@@ -0,0 +1,69 @@
+
+<?php
+    $slug = $content;
+
+    if (!$slug) {
+        // Pobierz wartość niestandardowego pola 'slug_zrzutka' dla aktualnego postu
+        $slug_zrzutka_value = get_post_meta(get_the_ID(), '_slug_zrzutka', true);
+
+        // Wyświetl wartość (jeśli istnieje)
+        if (!empty($slug_zrzutka_value)) {
+            $slug = $slug_zrzutka_value;
+        }
+    }
+
+
+    $url = "https://zrzutka.pl/" . $slug;
+
+    // Używamy cURL do pobrania zawartości strony
+    $ch = curl_init();
+    curl_setopt($ch, CURLOPT_URL, $url);
+    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+    curl_setopt($ch, CURLOPT_VERBOSE, true);
+    // curl_setopt($ch, CURLOPT_STDERR, $wrapper);
+    
+    $html = curl_exec($ch);
+    curl_close($ch);
+
+    // Sprawdzamy, czy udało się pobrać zawartość
+    if (!$html) {
+        return "Nie udało się pobrać zawartości ze strony.";
+    }
+
+    // Tworzymy nowy obiekt DOMDocument i wczytujemy pobraną zawartość
+    $dom = new DOMDocument;
+    @$dom->loadHTML($html); // @ jest używane, aby stłumić ostrzeżenia generowane przez niepoprawny HTML
+
+    // Tworzymy obiekt DOMXPath do wyszukiwania elementów
+    $xpath = new DOMXPath($dom);
+
+    // Szukamy elementu z klasą 'h3' w obrębie diva o atrybucie 'data-action' równym 'chip-show-amounts'
+    $amountNode = $xpath->query('//div[@data-action="chip-show-amounts"]//div[@class="h3 m-0"]')->item(0);
+
+    // Szukamy elementu z sumą ceny
+    $sumNode = $xpath->query('//div[@data-action="chip-show-amounts"]//span[@data-action="chip-target-sum"]')->item(0);
+
+    // Wyświetlamy znalezione wartości
+    if ($amountNode && $sumNode) {
+        $amount = strip_tags(trim($amountNode->textContent));
+        $sum = strip_tags(trim($sumNode->textContent));
+
+        // Parsowanie kwot jako liczby całkowite
+        $amountNumber = intval(str_replace(' ', '', $amount));
+        $sumNumber = intval(str_replace(' ', '', $sum));
+
+        // Obliczamy procentowy udział
+        $percent = ($amountNumber / $sumNumber) * 100;
+
+        // Tworzymy pasek postępu
+        $progressBar = "<div style='width: 100%; margin-top: 0.25em; background-color: #e0e0e0; border-radius: 20px; height: 20px; overflow: hidden;'>
+                    <div style='width: $percent%; background-color: #e64164; text-align: center; color: white; border-radius: 10px; padding: 5px; height: 50%;'></div>
+                </div>
+                <p class='has-small-font-size'>Mamy już <strong>$amountNumber zł</strong> z <strong>$sumNumber zł</strong>!</p>
+                ";
+        return $progressBar;
+    } else {
+        return "";
+    }
+?>

+ 10 - 5
src/save.js

@@ -4,7 +4,7 @@
  *
  * @see https://developer.wordpress.org/block-editor/reference-guides/packages/packages-block-editor/#useblockprops
  */
-import { useBlockProps } from '@wordpress/block-editor';
+import { useBlockProps, RichText } from '@wordpress/block-editor';
 
 /**
  * The save function defines the way in which the different attributes should
@@ -15,10 +15,15 @@ import { useBlockProps } from '@wordpress/block-editor';
  *
  * @return {Element} Element to render.
  */
-export default function save() {
+export default function save( { attributes } ) {
+
+	const blockProps = useBlockProps.save();
+
 	return (
-		<p { ...useBlockProps.save() }>
-			{ 'Tsu Financial Progress Block – hello from the saved content!' }
-		</p>
+		<RichText.Content
+			{ ...blockProps }
+			tagName = "p"
+			value = { attributes.content }
+		/>
 	);
 }

+ 0 - 12
src/style.scss

@@ -1,12 +0,0 @@
-/**
- * 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-tsu-financial-progress-block {
-	background-color: #21759b;
-	color: #fff;
-	padding: 2px;
-}

+ 3 - 3
src/view.js

@@ -21,7 +21,7 @@
  */
 
 /* eslint-disable no-console */
-console.log(
-	'Hello World! (from create-block-tsu-financial-progress-block block)'
-);
+// console.log(
+// 	'Hello World! (from create-block-tsu-financial-progress-block block)'
+// );
 /* eslint-enable no-console */

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно