├── .gitignore ├── README.md ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Netlify CMS Widget Simple UUID 2 | 3 | Instructions: 4 | 5 | 1) Install the widget: 6 | ``` 7 | npm i netlify-cms-widget-simple-uuid 8 | ``` 9 | 10 | 2) Import the widget in your main netlify cms file: 11 | ``` 12 | import idWidget from 'netlify-cms-widget-simple-uuid'; 13 | ``` 14 | 15 | 3) Register the widget like this: 16 | 17 | ``` 18 | CMS.registerWidget('id', idWidget.Control, idWidget.Preview); 19 | ``` 20 | 21 | 4) Add the id field to your collection like this (the collection here is just an example): 22 | 23 | ``` 24 | collections: 25 | - name: "post" 26 | label: "Post" 27 | folder: "post" 28 | create: true 29 | slug: "{{slug}}" 30 | fields: 31 | - {label: "ID", name: "id", widget: "id"} 32 | ``` 33 | 34 | Enjoy! 35 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import { createElement as h } from 'react'; 2 | import createReactClass from 'create-react-class'; 3 | import { v1 as uuidv1 } from 'uuid'; 4 | 5 | const IdControl = createReactClass({ 6 | componentDidMount: function () { 7 | const value = this.props.value ? this.props.value : uuidv1(); 8 | this.props.onChange(value) 9 | }, 10 | 11 | handleChange: function(e) { 12 | this.props.onChange(e.target.value.trim()); 13 | }, 14 | 15 | render: function() { 16 | return h('input', { 17 | type: 'text', 18 | disabled: 'disabled', 19 | value: this.props.value, 20 | onChange: this.handleChange, 21 | className: this.props.classNameWrapper 22 | }); 23 | } 24 | }); 25 | 26 | const IdPreview = createReactClass({ 27 | render: function() { 28 | return h('p', {}, this.props.value); 29 | } 30 | }); 31 | 32 | export default { IdControl, IdPreview }; 33 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netlify-cms-uuidv1", 3 | "version": "0.0.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "asap": { 8 | "version": "2.0.6", 9 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 10 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 11 | }, 12 | "core-js": { 13 | "version": "1.2.7", 14 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", 15 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" 16 | }, 17 | "create-react-class": { 18 | "version": "15.6.3", 19 | "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", 20 | "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", 21 | "requires": { 22 | "fbjs": "^0.8.9", 23 | "loose-envify": "^1.3.1", 24 | "object-assign": "^4.1.1" 25 | } 26 | }, 27 | "encoding": { 28 | "version": "0.1.12", 29 | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", 30 | "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", 31 | "requires": { 32 | "iconv-lite": "~0.4.13" 33 | } 34 | }, 35 | "fbjs": { 36 | "version": "0.8.17", 37 | "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", 38 | "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", 39 | "requires": { 40 | "core-js": "^1.0.0", 41 | "isomorphic-fetch": "^2.1.1", 42 | "loose-envify": "^1.0.0", 43 | "object-assign": "^4.1.0", 44 | "promise": "^7.1.1", 45 | "setimmediate": "^1.0.5", 46 | "ua-parser-js": "^0.7.18" 47 | } 48 | }, 49 | "iconv-lite": { 50 | "version": "0.4.24", 51 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 52 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 53 | "requires": { 54 | "safer-buffer": ">= 2.1.2 < 3" 55 | } 56 | }, 57 | "is-stream": { 58 | "version": "1.1.0", 59 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 60 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 61 | }, 62 | "isomorphic-fetch": { 63 | "version": "2.2.1", 64 | "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", 65 | "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", 66 | "requires": { 67 | "node-fetch": "^1.0.1", 68 | "whatwg-fetch": ">=0.10.0" 69 | } 70 | }, 71 | "js-tokens": { 72 | "version": "4.0.0", 73 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 74 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 75 | }, 76 | "loose-envify": { 77 | "version": "1.4.0", 78 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 79 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 80 | "requires": { 81 | "js-tokens": "^3.0.0 || ^4.0.0" 82 | } 83 | }, 84 | "node-fetch": { 85 | "version": "1.7.3", 86 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", 87 | "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", 88 | "requires": { 89 | "encoding": "^0.1.11", 90 | "is-stream": "^1.0.1" 91 | } 92 | }, 93 | "object-assign": { 94 | "version": "4.1.1", 95 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 96 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 97 | }, 98 | "promise": { 99 | "version": "7.3.1", 100 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 101 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 102 | "requires": { 103 | "asap": "~2.0.3" 104 | } 105 | }, 106 | "prop-types": { 107 | "version": "15.7.2", 108 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", 109 | "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", 110 | "requires": { 111 | "loose-envify": "^1.4.0", 112 | "object-assign": "^4.1.1", 113 | "react-is": "^16.8.1" 114 | } 115 | }, 116 | "react": { 117 | "version": "16.11.0", 118 | "resolved": "https://registry.npmjs.org/react/-/react-16.11.0.tgz", 119 | "integrity": "sha512-M5Y8yITaLmU0ynd0r1Yvfq98Rmll6q8AxaEe88c8e7LxO8fZ2cNgmFt0aGAS9wzf1Ao32NKXtCl+/tVVtkxq6g==", 120 | "requires": { 121 | "loose-envify": "^1.1.0", 122 | "object-assign": "^4.1.1", 123 | "prop-types": "^15.6.2" 124 | } 125 | }, 126 | "react-is": { 127 | "version": "16.11.0", 128 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", 129 | "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==" 130 | }, 131 | "safer-buffer": { 132 | "version": "2.1.2", 133 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 134 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 135 | }, 136 | "setimmediate": { 137 | "version": "1.0.5", 138 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 139 | "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" 140 | }, 141 | "ua-parser-js": { 142 | "version": "0.7.20", 143 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", 144 | "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" 145 | }, 146 | "uuid": { 147 | "version": "3.3.3", 148 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", 149 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" 150 | }, 151 | "whatwg-fetch": { 152 | "version": "3.0.0", 153 | "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", 154 | "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" 155 | } 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "netlify-cms-widget-simple-uuid", 3 | "version": "0.0.2", 4 | "description": "A simple uuid, read-only, auto-generated widget", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Salvatore Formisano", 10 | "license": "ISC", 11 | "dependencies": { 12 | "create-react-class": "^15.6.3", 13 | "react": "^16.11.0", 14 | "uuid": "^3.3.3" 15 | } 16 | } 17 | --------------------------------------------------------------------------------