Changeset 2981927
- Timestamp:
- 10/21/2023 05:53:25 AM (10 months ago)
- Location:
- to-the-top-block
- Files:
-
- 6 deleted
- 14 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
to-the-top-block/tags/1.4/README.md
r2874624 r2981927 27 27 ## Changelog 28 28 29 30 31 32 29 33 ### 1.3.0 (2023.03.04) 30 34 31 - Test against W ordPress6.235 - Test against W 6.2 32 36 33 37 ### 1.2.0 (2022.07.12) -
to-the-top-block/tags/1.4/build/index.asset.php
r2874624 r2981927 1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-element'), 'version' => ' d6f634404765b4cd8ead');1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-element'), 'version' => 'd'); -
to-the-top-block/tags/1.4/build/index.css
r2874624 r2981927 1 /*!****************************************************************************************************************************************************************************************************************************************!*\ 2 !*** 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 ***! 3 \****************************************************************************************************************************************************************************************************************************************/ 4 .wp-block-nielslange-smntcs-to-the-top-block textarea { 5 background: transparent; 6 } 7 8 /*# sourceMappingURL=index.css.map*/ 1 .wp-block-nielslange-smntcs-to-the-top-block textarea{background:transparent} -
to-the-top-block/tags/1.4/build/index.js
r2874624 r2981927 1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/edit.tsx": 6 /*!**********************!*\ 7 !*** ./src/edit.tsx ***! 8 \**********************/ 9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "Edit": () => (/* binding */ Edit) 14 /* harmony export */ }); 15 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 16 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 17 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); 18 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); 20 21 22 /** 23 * External dependencies 24 */ 25 26 /** 27 * Internal dependencies 28 */ 29 30 31 const Edit = _ref => { 32 let { 33 attributes, 34 setAttributes 35 } = _ref; 36 const { 37 alignment, 38 label 39 } = attributes; 40 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", (0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.useBlockProps)(), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.BlockControls, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.AlignmentToolbar, { 41 value: alignment, 42 onChange: value => setAttributes({ 43 alignment: value 44 }) 45 })), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { 46 href: "#to-the-top" 47 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.PlainText, { 48 style: { 49 textAlign: alignment 50 }, 51 value: label, 52 onChange: value => setAttributes({ 53 label: value 54 }) 55 }))); 56 }; 57 58 /***/ }), 59 60 /***/ "./src/index.tsx": 61 /*!***********************!*\ 62 !*** ./src/index.tsx ***! 63 \***********************/ 64 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 65 66 __webpack_require__.r(__webpack_exports__); 67 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 68 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); 69 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit */ "./src/edit.tsx"); 70 /* harmony import */ var _save__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./save */ "./src/save.tsx"); 71 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss"); 72 /** 73 * External dependencies 74 */ 75 76 /** 77 * Internal dependencies 78 */ 79 80 81 82 83 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)('nielslange/smntcs-to-the-top-block', { 84 edit: _edit__WEBPACK_IMPORTED_MODULE_1__.Edit, 85 save: _save__WEBPACK_IMPORTED_MODULE_2__.save, 86 example: {} 87 }); 88 89 /***/ }), 90 91 /***/ "./src/save.tsx": 92 /*!**********************!*\ 93 !*** ./src/save.tsx ***! 94 \**********************/ 95 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 96 97 __webpack_require__.r(__webpack_exports__); 98 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 99 /* harmony export */ "save": () => (/* binding */ save) 100 /* harmony export */ }); 101 /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); 102 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 103 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 104 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); 105 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__); 106 107 108 109 /** 110 * External dependencies 111 */ 112 113 const save = _ref => { 114 let { 115 attributes 116 } = _ref; 117 const { 118 alignment, 119 label 120 } = attributes; 121 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)("p", (0,_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps.save(), { 122 style: { 123 textAlign: alignment 124 } 125 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)("a", { 126 href: "#to-the-top" 127 }, label)); 128 }; 129 130 /***/ }), 131 132 /***/ "./src/editor.scss": 133 /*!*************************!*\ 134 !*** ./src/editor.scss ***! 135 \*************************/ 136 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 137 138 __webpack_require__.r(__webpack_exports__); 139 // extracted by mini-css-extract-plugin 140 141 142 /***/ }), 143 144 /***/ "./src/style.scss": 145 /*!************************!*\ 146 !*** ./src/style.scss ***! 147 \************************/ 148 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 149 150 __webpack_require__.r(__webpack_exports__); 151 // extracted by mini-css-extract-plugin 152 153 154 /***/ }), 155 156 /***/ "@wordpress/block-editor": 157 /*!*************************************!*\ 158 !*** external ["wp","blockEditor"] ***! 159 \*************************************/ 160 /***/ ((module) => { 161 162 module.exports = window["wp"]["blockEditor"]; 163 164 /***/ }), 165 166 /***/ "@wordpress/blocks": 167 /*!********************************!*\ 168 !*** external ["wp","blocks"] ***! 169 \********************************/ 170 /***/ ((module) => { 171 172 module.exports = window["wp"]["blocks"]; 173 174 /***/ }), 175 176 /***/ "@wordpress/element": 177 /*!*********************************!*\ 178 !*** external ["wp","element"] ***! 179 \*********************************/ 180 /***/ ((module) => { 181 182 module.exports = window["wp"]["element"]; 183 184 /***/ }), 185 186 /***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": 187 /*!************************************************************!*\ 188 !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! 189 \************************************************************/ 190 /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 191 192 __webpack_require__.r(__webpack_exports__); 193 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 194 /* harmony export */ "default": () => (/* binding */ _extends) 195 /* harmony export */ }); 196 function _extends() { 197 _extends = Object.assign ? Object.assign.bind() : function (target) { 198 for (var i = 1; i < arguments.length; i++) { 199 var source = arguments[i]; 200 201 for (var key in source) { 202 if (Object.prototype.hasOwnProperty.call(source, key)) { 203 target[key] = source[key]; 204 } 205 } 206 } 207 208 return target; 209 }; 210 return _extends.apply(this, arguments); 211 } 212 213 /***/ }) 214 215 /******/ }); 216 /************************************************************************/ 217 /******/ // The module cache 218 /******/ var __webpack_module_cache__ = {}; 219 /******/ 220 /******/ // The require function 221 /******/ function __webpack_require__(moduleId) { 222 /******/ // Check if module is in cache 223 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 224 /******/ if (cachedModule !== undefined) { 225 /******/ return cachedModule.exports; 226 /******/ } 227 /******/ // Create a new module (and put it into the cache) 228 /******/ var module = __webpack_module_cache__[moduleId] = { 229 /******/ // no module.id needed 230 /******/ // no module.loaded needed 231 /******/ exports: {} 232 /******/ }; 233 /******/ 234 /******/ // Execute the module function 235 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 236 /******/ 237 /******/ // Return the exports of the module 238 /******/ return module.exports; 239 /******/ } 240 /******/ 241 /******/ // expose the modules object (__webpack_modules__) 242 /******/ __webpack_require__.m = __webpack_modules__; 243 /******/ 244 /************************************************************************/ 245 /******/ /* webpack/runtime/chunk loaded */ 246 /******/ (() => { 247 /******/ var deferred = []; 248 /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 249 /******/ if(chunkIds) { 250 /******/ priority = priority || 0; 251 /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 252 /******/ deferred[i] = [chunkIds, fn, priority]; 253 /******/ return; 254 /******/ } 255 /******/ var notFulfilled = Infinity; 256 /******/ for (var i = 0; i < deferred.length; i++) { 257 /******/ var [chunkIds, fn, priority] = deferred[i]; 258 /******/ var fulfilled = true; 259 /******/ for (var j = 0; j < chunkIds.length; j++) { 260 /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 261 /******/ chunkIds.splice(j--, 1); 262 /******/ } else { 263 /******/ fulfilled = false; 264 /******/ if(priority < notFulfilled) notFulfilled = priority; 265 /******/ } 266 /******/ } 267 /******/ if(fulfilled) { 268 /******/ deferred.splice(i--, 1) 269 /******/ var r = fn(); 270 /******/ if (r !== undefined) result = r; 271 /******/ } 272 /******/ } 273 /******/ return result; 274 /******/ }; 275 /******/ })(); 276 /******/ 277 /******/ /* webpack/runtime/compat get default export */ 278 /******/ (() => { 279 /******/ // getDefaultExport function for compatibility with non-harmony modules 280 /******/ __webpack_require__.n = (module) => { 281 /******/ var getter = module && module.__esModule ? 282 /******/ () => (module['default']) : 283 /******/ () => (module); 284 /******/ __webpack_require__.d(getter, { a: getter }); 285 /******/ return getter; 286 /******/ }; 287 /******/ })(); 288 /******/ 289 /******/ /* webpack/runtime/define property getters */ 290 /******/ (() => { 291 /******/ // define getter functions for harmony exports 292 /******/ __webpack_require__.d = (exports, definition) => { 293 /******/ for(var key in definition) { 294 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 295 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 296 /******/ } 297 /******/ } 298 /******/ }; 299 /******/ })(); 300 /******/ 301 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 302 /******/ (() => { 303 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 304 /******/ })(); 305 /******/ 306 /******/ /* webpack/runtime/make namespace object */ 307 /******/ (() => { 308 /******/ // define __esModule on exports 309 /******/ __webpack_require__.r = (exports) => { 310 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 311 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 312 /******/ } 313 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 314 /******/ }; 315 /******/ })(); 316 /******/ 317 /******/ /* webpack/runtime/jsonp chunk loading */ 318 /******/ (() => { 319 /******/ // no baseURI 320 /******/ 321 /******/ // object to store loaded and loading chunks 322 /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 323 /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 324 /******/ var installedChunks = { 325 /******/ "index": 0, 326 /******/ "./style-index": 0 327 /******/ }; 328 /******/ 329 /******/ // no chunk on demand loading 330 /******/ 331 /******/ // no prefetching 332 /******/ 333 /******/ // no preloaded 334 /******/ 335 /******/ // no HMR 336 /******/ 337 /******/ // no HMR manifest 338 /******/ 339 /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 340 /******/ 341 /******/ // install a JSONP callback for chunk loading 342 /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 343 /******/ var [chunkIds, moreModules, runtime] = data; 344 /******/ // add "moreModules" to the modules object, 345 /******/ // then flag all "chunkIds" as loaded and fire callback 346 /******/ var moduleId, chunkId, i = 0; 347 /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 348 /******/ for(moduleId in moreModules) { 349 /******/ if(__webpack_require__.o(moreModules, moduleId)) { 350 /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 351 /******/ } 352 /******/ } 353 /******/ if(runtime) var result = runtime(__webpack_require__); 354 /******/ } 355 /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 356 /******/ for(;i < chunkIds.length; i++) { 357 /******/ chunkId = chunkIds[i]; 358 /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 359 /******/ installedChunks[chunkId][0](); 360 /******/ } 361 /******/ installedChunks[chunkId] = 0; 362 /******/ } 363 /******/ return __webpack_require__.O(result); 364 /******/ } 365 /******/ 366 /******/ var chunkLoadingGlobal = globalThis["webpackChunksmntcs_to_the_top_block"] = globalThis["webpackChunksmntcs_to_the_top_block"] || []; 367 /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 368 /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 369 /******/ })(); 370 /******/ 371 /************************************************************************/ 372 /******/ 373 /******/ // startup 374 /******/ // Load entry module and return exports 375 /******/ // This entry module depends on other loaded chunks and execution need to be delayed 376 /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.tsx"))) 377 /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 378 /******/ 379 /******/ })() 380 ; 381 //# sourceMappingURL=index.js.map 1 (()=>{"use strict";var e,t={764:()=>{const e=window.wp.blocks,t=window.wp.element,r=window.wp.blockEditor;function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},n.apply(this,arguments)}(0,e.registerBlockType)("nielslange/smntcs-to-the-top-block",{edit:e=>{let{attributes:n,setAttributes:o}=e;const{alignment:l,label:a}=n;return(0,t.createElement)("p",(0,r.useBlockProps)(),(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(r.AlignmentToolbar,{value:l,onChange:e=>o({alignment:e})})),(0,t.createElement)("a",{href:"#to-the-top"},(0,t.createElement)(r.PlainText,{style:{textAlign:l},value:a,onChange:e=>o({label:e})})))},save:e=>{let{attributes:o}=e;const{alignment:l,label:a}=o;return(0,t.createElement)("p",n({},r.useBlockProps.save(),{style:{textAlign:l}}),(0,t.createElement)("a",{href:"#to-the-top"},a))},example:{}})}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var l=r[e]={exports:{}};return t[e](l,l.exports,n),l.exports}n.m=t,e=[],n.O=(t,r,o,l)=>{if(!r){var a=1/0;for(p=0;p<e.length;p++){for(var[r,o,l]=e[p],s=!0,i=0;i<r.length;i++)(!1&l||a>=l)&&Object.keys(n.O).every((e=>n.O[e](r[i])))?r.splice(i--,1):(s=!1,l<a&&(a=l));if(s){e.splice(p--,1);var c=o();void 0!==c&&(t=c)}}return t}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[r,o,l]},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={826:0,431:0};n.O.j=t=>0===e[t];var t=(t,r)=>{var o,l,[a,s,i]=r,c=0;if(a.some((t=>0!==e[t]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(i)var p=i(n)}for(t&&t(r);c<a.length;c++)l=a[c],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(p)},r=globalThis.webpackChunksmntcs_to_the_top_block=globalThis.webpackChunksmntcs_to_the_top_block||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o=n.O(void 0,[431],(()=>n(764)));o=n.O(o)})(); -
to-the-top-block/tags/1.4/build/style-index.css
r2874624 r2981927 1 /*!***************************************************************************************************************************************************************************************************************************************!*\ 2 !*** 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 ***! 3 \***************************************************************************************************************************************************************************************************************************************/ 4 html { 5 scroll-behavior: smooth; 6 } 7 8 /*# sourceMappingURL=style-index.css.map*/ 1 html{scroll-behavior:smooth} -
to-the-top-block/tags/1.4/readme.txt
r2874624 r2981927 3 3 Contributors: nielslange 4 4 Tags: back to top, scroll to top, scroll top, scroll up, scroll to top block 5 Tested up to: 6. 25 Tested up to: 6. 6 6 Requires at least: 5.0 7 Stable tag: 1. 3.07 Stable tag: 1. 8 8 Requires PHP: 7.0 9 9 License: GPL-2.0-or-later … … 37 37 == Changelog == 38 38 39 40 41 42 39 43 = 1.3.0 (2023.03.04) = 40 * Test against WordPress 6.2 44 45 - Test against WP 6.2 41 46 42 47 = 1.2.0 (2022.07.12) = 43 * Update screenshots 44 * Update tags 48 49 - Update screenshots 50 - Update tags 45 51 46 52 = 1.1.0 (2022.07.07) = 47 * Add build folder to repo due to WordPress.org deploy action 53 54 - Add build folder to repo due to WordPress.org deploy action 48 55 49 56 = 1.0.0 (2022.07.01) = 50 * Initial release 57 58 - Initial release -
to-the-top-block/tags/1.4/to-the-top-block.php
r2874624 r2981927 1 1 <?php 2 2 /** 3 * Plugin Name: SMNTCS To The Top Block 4 * Description: Adds a jump to the top link to your pages, posts or custom post types. 5 * Requires at least: 5.0 6 * Requires PHP: 7.0 7 * Version: 1.3.0 8 * Author: Niels Lange 9 * License: GPL-2.0-or-later 10 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 * Text Domain: smntcs-to-the-top-block 3 * Plugin Name: SMNTCS To The Top Block 4 * Plugin URI: https://github.com/nielslange/smntcs-to-the-top-block 5 * Description: Adds a jump to the top link to your pages, posts or custom post types. 6 * Author: Niels Lange <info@nielslange.de> 7 * Author URI: https://nielslange.de 8 * Text Domain: smntcs-to-the-top-block 9 * Version: 1.4 10 * Requires at least: 5.0 11 * Requires PHP: 7.0 12 * License: GPL v2 or later 13 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 12 14 */ 13 15 -
to-the-top-block/trunk/README.md
r2874624 r2981927 27 27 ## Changelog 28 28 29 30 31 32 29 33 ### 1.3.0 (2023.03.04) 30 34 31 - Test against W ordPress6.235 - Test against W 6.2 32 36 33 37 ### 1.2.0 (2022.07.12) -
to-the-top-block/trunk/build/index.asset.php
r2874624 r2981927 1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-element'), 'version' => ' d6f634404765b4cd8ead');1 <?php return array('dependencies' => array('wp-block-editor', 'wp-blocks', 'wp-element'), 'version' => 'd'); -
to-the-top-block/trunk/build/index.css
r2874624 r2981927 1 /*!****************************************************************************************************************************************************************************************************************************************!*\ 2 !*** 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 ***! 3 \****************************************************************************************************************************************************************************************************************************************/ 4 .wp-block-nielslange-smntcs-to-the-top-block textarea { 5 background: transparent; 6 } 7 8 /*# sourceMappingURL=index.css.map*/ 1 .wp-block-nielslange-smntcs-to-the-top-block textarea{background:transparent} -
to-the-top-block/trunk/build/index.js
r2874624 r2981927 1 /******/ (() => { // webpackBootstrap 2 /******/ "use strict"; 3 /******/ var __webpack_modules__ = ({ 4 5 /***/ "./src/edit.tsx": 6 /*!**********************!*\ 7 !*** ./src/edit.tsx ***! 8 \**********************/ 9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 10 11 __webpack_require__.r(__webpack_exports__); 12 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 13 /* harmony export */ "Edit": () => (/* binding */ Edit) 14 /* harmony export */ }); 15 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 16 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 17 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); 18 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__); 19 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss"); 20 21 22 /** 23 * External dependencies 24 */ 25 26 /** 27 * Internal dependencies 28 */ 29 30 31 const Edit = _ref => { 32 let { 33 attributes, 34 setAttributes 35 } = _ref; 36 const { 37 alignment, 38 label 39 } = attributes; 40 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", (0,_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.useBlockProps)(), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.BlockControls, null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.AlignmentToolbar, { 41 value: alignment, 42 onChange: value => setAttributes({ 43 alignment: value 44 }) 45 })), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("a", { 46 href: "#to-the-top" 47 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_1__.PlainText, { 48 style: { 49 textAlign: alignment 50 }, 51 value: label, 52 onChange: value => setAttributes({ 53 label: value 54 }) 55 }))); 56 }; 57 58 /***/ }), 59 60 /***/ "./src/index.tsx": 61 /*!***********************!*\ 62 !*** ./src/index.tsx ***! 63 \***********************/ 64 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 65 66 __webpack_require__.r(__webpack_exports__); 67 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); 68 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); 69 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit */ "./src/edit.tsx"); 70 /* harmony import */ var _save__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./save */ "./src/save.tsx"); 71 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss"); 72 /** 73 * External dependencies 74 */ 75 76 /** 77 * Internal dependencies 78 */ 79 80 81 82 83 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)('nielslange/smntcs-to-the-top-block', { 84 edit: _edit__WEBPACK_IMPORTED_MODULE_1__.Edit, 85 save: _save__WEBPACK_IMPORTED_MODULE_2__.save, 86 example: {} 87 }); 88 89 /***/ }), 90 91 /***/ "./src/save.tsx": 92 /*!**********************!*\ 93 !*** ./src/save.tsx ***! 94 \**********************/ 95 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 96 97 __webpack_require__.r(__webpack_exports__); 98 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 99 /* harmony export */ "save": () => (/* binding */ save) 100 /* harmony export */ }); 101 /* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js"); 102 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 103 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 104 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); 105 /* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__); 106 107 108 109 /** 110 * External dependencies 111 */ 112 113 const save = _ref => { 114 let { 115 attributes 116 } = _ref; 117 const { 118 alignment, 119 label 120 } = attributes; 121 return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)("p", (0,_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.useBlockProps.save(), { 122 style: { 123 textAlign: alignment 124 } 125 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)("a", { 126 href: "#to-the-top" 127 }, label)); 128 }; 129 130 /***/ }), 131 132 /***/ "./src/editor.scss": 133 /*!*************************!*\ 134 !*** ./src/editor.scss ***! 135 \*************************/ 136 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 137 138 __webpack_require__.r(__webpack_exports__); 139 // extracted by mini-css-extract-plugin 140 141 142 /***/ }), 143 144 /***/ "./src/style.scss": 145 /*!************************!*\ 146 !*** ./src/style.scss ***! 147 \************************/ 148 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 149 150 __webpack_require__.r(__webpack_exports__); 151 // extracted by mini-css-extract-plugin 152 153 154 /***/ }), 155 156 /***/ "@wordpress/block-editor": 157 /*!*************************************!*\ 158 !*** external ["wp","blockEditor"] ***! 159 \*************************************/ 160 /***/ ((module) => { 161 162 module.exports = window["wp"]["blockEditor"]; 163 164 /***/ }), 165 166 /***/ "@wordpress/blocks": 167 /*!********************************!*\ 168 !*** external ["wp","blocks"] ***! 169 \********************************/ 170 /***/ ((module) => { 171 172 module.exports = window["wp"]["blocks"]; 173 174 /***/ }), 175 176 /***/ "@wordpress/element": 177 /*!*********************************!*\ 178 !*** external ["wp","element"] ***! 179 \*********************************/ 180 /***/ ((module) => { 181 182 module.exports = window["wp"]["element"]; 183 184 /***/ }), 185 186 /***/ "./node_modules/@babel/runtime/helpers/esm/extends.js": 187 /*!************************************************************!*\ 188 !*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***! 189 \************************************************************/ 190 /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 191 192 __webpack_require__.r(__webpack_exports__); 193 /* harmony export */ __webpack_require__.d(__webpack_exports__, { 194 /* harmony export */ "default": () => (/* binding */ _extends) 195 /* harmony export */ }); 196 function _extends() { 197 _extends = Object.assign ? Object.assign.bind() : function (target) { 198 for (var i = 1; i < arguments.length; i++) { 199 var source = arguments[i]; 200 201 for (var key in source) { 202 if (Object.prototype.hasOwnProperty.call(source, key)) { 203 target[key] = source[key]; 204 } 205 } 206 } 207 208 return target; 209 }; 210 return _extends.apply(this, arguments); 211 } 212 213 /***/ }) 214 215 /******/ }); 216 /************************************************************************/ 217 /******/ // The module cache 218 /******/ var __webpack_module_cache__ = {}; 219 /******/ 220 /******/ // The require function 221 /******/ function __webpack_require__(moduleId) { 222 /******/ // Check if module is in cache 223 /******/ var cachedModule = __webpack_module_cache__[moduleId]; 224 /******/ if (cachedModule !== undefined) { 225 /******/ return cachedModule.exports; 226 /******/ } 227 /******/ // Create a new module (and put it into the cache) 228 /******/ var module = __webpack_module_cache__[moduleId] = { 229 /******/ // no module.id needed 230 /******/ // no module.loaded needed 231 /******/ exports: {} 232 /******/ }; 233 /******/ 234 /******/ // Execute the module function 235 /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 236 /******/ 237 /******/ // Return the exports of the module 238 /******/ return module.exports; 239 /******/ } 240 /******/ 241 /******/ // expose the modules object (__webpack_modules__) 242 /******/ __webpack_require__.m = __webpack_modules__; 243 /******/ 244 /************************************************************************/ 245 /******/ /* webpack/runtime/chunk loaded */ 246 /******/ (() => { 247 /******/ var deferred = []; 248 /******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 249 /******/ if(chunkIds) { 250 /******/ priority = priority || 0; 251 /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 252 /******/ deferred[i] = [chunkIds, fn, priority]; 253 /******/ return; 254 /******/ } 255 /******/ var notFulfilled = Infinity; 256 /******/ for (var i = 0; i < deferred.length; i++) { 257 /******/ var [chunkIds, fn, priority] = deferred[i]; 258 /******/ var fulfilled = true; 259 /******/ for (var j = 0; j < chunkIds.length; j++) { 260 /******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 261 /******/ chunkIds.splice(j--, 1); 262 /******/ } else { 263 /******/ fulfilled = false; 264 /******/ if(priority < notFulfilled) notFulfilled = priority; 265 /******/ } 266 /******/ } 267 /******/ if(fulfilled) { 268 /******/ deferred.splice(i--, 1) 269 /******/ var r = fn(); 270 /******/ if (r !== undefined) result = r; 271 /******/ } 272 /******/ } 273 /******/ return result; 274 /******/ }; 275 /******/ })(); 276 /******/ 277 /******/ /* webpack/runtime/compat get default export */ 278 /******/ (() => { 279 /******/ // getDefaultExport function for compatibility with non-harmony modules 280 /******/ __webpack_require__.n = (module) => { 281 /******/ var getter = module && module.__esModule ? 282 /******/ () => (module['default']) : 283 /******/ () => (module); 284 /******/ __webpack_require__.d(getter, { a: getter }); 285 /******/ return getter; 286 /******/ }; 287 /******/ })(); 288 /******/ 289 /******/ /* webpack/runtime/define property getters */ 290 /******/ (() => { 291 /******/ // define getter functions for harmony exports 292 /******/ __webpack_require__.d = (exports, definition) => { 293 /******/ for(var key in definition) { 294 /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 295 /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 296 /******/ } 297 /******/ } 298 /******/ }; 299 /******/ })(); 300 /******/ 301 /******/ /* webpack/runtime/hasOwnProperty shorthand */ 302 /******/ (() => { 303 /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 304 /******/ })(); 305 /******/ 306 /******/ /* webpack/runtime/make namespace object */ 307 /******/ (() => { 308 /******/ // define __esModule on exports 309 /******/ __webpack_require__.r = (exports) => { 310 /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 311 /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 312 /******/ } 313 /******/ Object.defineProperty(exports, '__esModule', { value: true }); 314 /******/ }; 315 /******/ })(); 316 /******/ 317 /******/ /* webpack/runtime/jsonp chunk loading */ 318 /******/ (() => { 319 /******/ // no baseURI 320 /******/ 321 /******/ // object to store loaded and loading chunks 322 /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 323 /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 324 /******/ var installedChunks = { 325 /******/ "index": 0, 326 /******/ "./style-index": 0 327 /******/ }; 328 /******/ 329 /******/ // no chunk on demand loading 330 /******/ 331 /******/ // no prefetching 332 /******/ 333 /******/ // no preloaded 334 /******/ 335 /******/ // no HMR 336 /******/ 337 /******/ // no HMR manifest 338 /******/ 339 /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 340 /******/ 341 /******/ // install a JSONP callback for chunk loading 342 /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 343 /******/ var [chunkIds, moreModules, runtime] = data; 344 /******/ // add "moreModules" to the modules object, 345 /******/ // then flag all "chunkIds" as loaded and fire callback 346 /******/ var moduleId, chunkId, i = 0; 347 /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 348 /******/ for(moduleId in moreModules) { 349 /******/ if(__webpack_require__.o(moreModules, moduleId)) { 350 /******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 351 /******/ } 352 /******/ } 353 /******/ if(runtime) var result = runtime(__webpack_require__); 354 /******/ } 355 /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 356 /******/ for(;i < chunkIds.length; i++) { 357 /******/ chunkId = chunkIds[i]; 358 /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 359 /******/ installedChunks[chunkId][0](); 360 /******/ } 361 /******/ installedChunks[chunkId] = 0; 362 /******/ } 363 /******/ return __webpack_require__.O(result); 364 /******/ } 365 /******/ 366 /******/ var chunkLoadingGlobal = globalThis["webpackChunksmntcs_to_the_top_block"] = globalThis["webpackChunksmntcs_to_the_top_block"] || []; 367 /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 368 /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 369 /******/ })(); 370 /******/ 371 /************************************************************************/ 372 /******/ 373 /******/ // startup 374 /******/ // Load entry module and return exports 375 /******/ // This entry module depends on other loaded chunks and execution need to be delayed 376 /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.tsx"))) 377 /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 378 /******/ 379 /******/ })() 380 ; 381 //# sourceMappingURL=index.js.map 1 (()=>{"use strict";var e,t={764:()=>{const e=window.wp.blocks,t=window.wp.element,r=window.wp.blockEditor;function n(){return n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},n.apply(this,arguments)}(0,e.registerBlockType)("nielslange/smntcs-to-the-top-block",{edit:e=>{let{attributes:n,setAttributes:o}=e;const{alignment:l,label:a}=n;return(0,t.createElement)("p",(0,r.useBlockProps)(),(0,t.createElement)(r.BlockControls,null,(0,t.createElement)(r.AlignmentToolbar,{value:l,onChange:e=>o({alignment:e})})),(0,t.createElement)("a",{href:"#to-the-top"},(0,t.createElement)(r.PlainText,{style:{textAlign:l},value:a,onChange:e=>o({label:e})})))},save:e=>{let{attributes:o}=e;const{alignment:l,label:a}=o;return(0,t.createElement)("p",n({},r.useBlockProps.save(),{style:{textAlign:l}}),(0,t.createElement)("a",{href:"#to-the-top"},a))},example:{}})}},r={};function n(e){var o=r[e];if(void 0!==o)return o.exports;var l=r[e]={exports:{}};return t[e](l,l.exports,n),l.exports}n.m=t,e=[],n.O=(t,r,o,l)=>{if(!r){var a=1/0;for(p=0;p<e.length;p++){for(var[r,o,l]=e[p],s=!0,i=0;i<r.length;i++)(!1&l||a>=l)&&Object.keys(n.O).every((e=>n.O[e](r[i])))?r.splice(i--,1):(s=!1,l<a&&(a=l));if(s){e.splice(p--,1);var c=o();void 0!==c&&(t=c)}}return t}l=l||0;for(var p=e.length;p>0&&e[p-1][2]>l;p--)e[p]=e[p-1];e[p]=[r,o,l]},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={826:0,431:0};n.O.j=t=>0===e[t];var t=(t,r)=>{var o,l,[a,s,i]=r,c=0;if(a.some((t=>0!==e[t]))){for(o in s)n.o(s,o)&&(n.m[o]=s[o]);if(i)var p=i(n)}for(t&&t(r);c<a.length;c++)l=a[c],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(p)},r=globalThis.webpackChunksmntcs_to_the_top_block=globalThis.webpackChunksmntcs_to_the_top_block||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var o=n.O(void 0,[431],(()=>n(764)));o=n.O(o)})(); -
to-the-top-block/trunk/build/style-index.css
r2874624 r2981927 1 /*!***************************************************************************************************************************************************************************************************************************************!*\ 2 !*** 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 ***! 3 \***************************************************************************************************************************************************************************************************************************************/ 4 html { 5 scroll-behavior: smooth; 6 } 7 8 /*# sourceMappingURL=style-index.css.map*/ 1 html{scroll-behavior:smooth} -
to-the-top-block/trunk/readme.txt
r2874624 r2981927 3 3 Contributors: nielslange 4 4 Tags: back to top, scroll to top, scroll top, scroll up, scroll to top block 5 Tested up to: 6. 25 Tested up to: 6. 6 6 Requires at least: 5.0 7 Stable tag: 1. 3.07 Stable tag: 1. 8 8 Requires PHP: 7.0 9 9 License: GPL-2.0-or-later … … 37 37 == Changelog == 38 38 39 40 41 42 39 43 = 1.3.0 (2023.03.04) = 40 * Test against WordPress 6.2 44 45 - Test against WP 6.2 41 46 42 47 = 1.2.0 (2022.07.12) = 43 * Update screenshots 44 * Update tags 48 49 - Update screenshots 50 - Update tags 45 51 46 52 = 1.1.0 (2022.07.07) = 47 * Add build folder to repo due to WordPress.org deploy action 53 54 - Add build folder to repo due to WordPress.org deploy action 48 55 49 56 = 1.0.0 (2022.07.01) = 50 * Initial release 57 58 - Initial release -
to-the-top-block/trunk/to-the-top-block.php
r2874624 r2981927 1 1 <?php 2 2 /** 3 * Plugin Name: SMNTCS To The Top Block 4 * Description: Adds a jump to the top link to your pages, posts or custom post types. 5 * Requires at least: 5.0 6 * Requires PHP: 7.0 7 * Version: 1.3.0 8 * Author: Niels Lange 9 * License: GPL-2.0-or-later 10 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 11 * Text Domain: smntcs-to-the-top-block 3 * Plugin Name: SMNTCS To The Top Block 4 * Plugin URI: https://github.com/nielslange/smntcs-to-the-top-block 5 * Description: Adds a jump to the top link to your pages, posts or custom post types. 6 * Author: Niels Lange <info@nielslange.de> 7 * Author URI: https://nielslange.de 8 * Text Domain: smntcs-to-the-top-block 9 * Version: 1.4 10 * Requires at least: 5.0 11 * Requires PHP: 7.0 12 * License: GPL v2 or later 13 * License URI: https://www.gnu.org/licenses/gpl-2.0.html 12 14 */ 13 15
Note: See TracChangeset
for help on using the changeset viewer.