├── .dockerignore ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── composer.json ├── docker-compose.yml ├── docker ├── .bashrc ├── Dockerfile └── entrypoint.sh ├── drush ├── README.md └── policy.drush.inc ├── phpunit.xml.dist ├── scripts ├── composer │ └── ScriptHandler.php └── test.sh └── web ├── .csslintrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .htaccess ├── autoload.php ├── index.php ├── modules └── custom │ └── .gitkeep ├── profiles ├── .gitkeep └── react │ ├── config │ └── install │ │ ├── automated_cron.settings.yml │ │ ├── block.block.bartik_account_menu.yml │ │ ├── block.block.bartik_branding.yml │ │ ├── block.block.bartik_breadcrumbs.yml │ │ ├── block.block.bartik_content.yml │ │ ├── block.block.bartik_footer.yml │ │ ├── block.block.bartik_help.yml │ │ ├── block.block.bartik_local_actions.yml │ │ ├── block.block.bartik_local_tasks.yml │ │ ├── block.block.bartik_main_menu.yml │ │ ├── block.block.bartik_messages.yml │ │ ├── block.block.bartik_page_title.yml │ │ ├── block.block.bartik_powered.yml │ │ ├── block.block.bartik_search.yml │ │ ├── block.block.bartik_tools.yml │ │ ├── block.block.seven_breadcrumbs.yml │ │ ├── block.block.seven_content.yml │ │ ├── block.block.seven_help.yml │ │ ├── block.block.seven_local_actions.yml │ │ ├── block.block.seven_login.yml │ │ ├── block.block.seven_messages.yml │ │ ├── block.block.seven_page_title.yml │ │ ├── block.block.seven_primary_local_tasks.yml │ │ ├── block.block.seven_secondary_local_tasks.yml │ │ ├── block_content.type.basic.yml │ │ ├── comment.type.comment.yml │ │ ├── contact.form.feedback.yml │ │ ├── core.base_field_override.node.page.promote.yml │ │ ├── core.entity_form_display.block_content.basic.default.yml │ │ ├── core.entity_form_display.comment.comment.default.yml │ │ ├── core.entity_form_display.node.article.default.yml │ │ ├── core.entity_form_display.node.page.default.yml │ │ ├── core.entity_form_display.user.user.default.yml │ │ ├── core.entity_view_display.block_content.basic.default.yml │ │ ├── core.entity_view_display.comment.comment.default.yml │ │ ├── core.entity_view_display.node.article.default.yml │ │ ├── core.entity_view_display.node.article.rss.yml │ │ ├── core.entity_view_display.node.article.teaser.yml │ │ ├── core.entity_view_display.node.page.default.yml │ │ ├── core.entity_view_display.node.page.teaser.yml │ │ ├── core.entity_view_display.user.user.compact.yml │ │ ├── core.entity_view_display.user.user.default.yml │ │ ├── editor.editor.basic_html.yml │ │ ├── editor.editor.full_html.yml │ │ ├── field.field.block_content.basic.body.yml │ │ ├── field.field.comment.comment.comment_body.yml │ │ ├── field.field.node.article.body.yml │ │ ├── field.field.node.article.comment.yml │ │ ├── field.field.node.article.field_image.yml │ │ ├── field.field.node.article.field_tags.yml │ │ ├── field.field.node.page.body.yml │ │ ├── field.field.user.user.user_picture.yml │ │ ├── field.storage.node.comment.yml │ │ ├── field.storage.node.field_image.yml │ │ ├── field.storage.node.field_tags.yml │ │ ├── field.storage.user.user_picture.yml │ │ ├── filter.format.basic_html.yml │ │ ├── filter.format.full_html.yml │ │ ├── filter.format.restricted_html.yml │ │ ├── node.type.article.yml │ │ ├── node.type.page.yml │ │ ├── rdf.mapping.comment.comment.yml │ │ ├── rdf.mapping.node.article.yml │ │ ├── rdf.mapping.node.page.yml │ │ ├── rdf.mapping.taxonomy_term.tags.yml │ │ ├── system.cron.yml │ │ ├── system.theme.yml │ │ ├── system0.theme │ │ ├── taxonomy.vocabulary.tags.yml │ │ └── user.role.administrator.yml │ ├── react.info.yml │ ├── react.install │ ├── react.routing.yml │ ├── react.services.yml │ └── src │ ├── Controller │ └── SPAController.php │ ├── PathProcessor │ └── SPAPathProcessor.php │ └── Theme │ └── SPAThemeNegotiator.php ├── robots.txt ├── sites ├── default │ ├── config │ │ ├── .gitkeep │ │ └── .htaccess │ ├── default.services.yml │ ├── default.settings.php │ ├── services.yml │ └── settings.php ├── development.services.yml ├── example.settings.local.php ├── example.sites.php └── template.settings.local.php ├── themes └── custom │ ├── .gitkeep │ └── spa │ ├── .babelrc │ ├── .eslintignore │ ├── .eslintrc │ ├── .gitignore │ ├── README.md │ ├── html.html.twig │ ├── jest.config.json │ ├── nightwatch.conf.js │ ├── package.json │ ├── postcss.config.js │ ├── screenshot.png │ ├── spa.info.yml │ ├── spa.libraries.yml │ ├── spa.theme │ ├── src │ ├── components │ │ ├── Application.css │ │ ├── Application.js │ │ ├── Application.story.js │ │ └── __tests__ │ │ │ └── Application.js │ └── index.js │ ├── storybook │ ├── .storybook │ │ ├── addons.js │ │ ├── config.js │ │ └── webpack.config.js │ └── stories │ │ └── index.js │ ├── tests │ └── e2e │ │ ├── main.test.js │ │ └── pages │ │ └── home.js │ ├── webpack.config.js │ └── yarn.lock ├── update.php └── web.config /.dockerignore: -------------------------------------------------------------------------------- 1 | # =============================================== 2 | # Temporary data -------------------------------- 3 | # =============================================== 4 | 5 | .mysql 6 | .idea 7 | 8 | # =============================================== 9 | # Drupal configuration -------------------------- 10 | # =============================================== 11 | 12 | web/sites/default/settings.local.php 13 | web/sites/*/files 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # =============================================== 2 | # Temporary data -------------------------------- 3 | # =============================================== 4 | 5 | .mysql 6 | .idea 7 | 8 | # =============================================== 9 | # Drupal configuration -------------------------- 10 | # =============================================== 11 | 12 | web/sites/default/settings.local.php 13 | web/sites/*/files 14 | 15 | # =============================================== 16 | # Dependencies ---------------------------------- 17 | # =============================================== 18 | 19 | vendor 20 | drush/contrib 21 | web/core 22 | web/modules/contrib 23 | web/libraries 24 | web/themes/contrib 25 | web/profiles/contrib 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash # Use bash syntax 2 | .PHONY: run in mysql stop clean build 3 | 4 | run: 5 | docker-compose run --service-ports --rm app 6 | 7 | in: 8 | docker exec -it $(shell docker-compose ps | grep _app_run_ | cut -d" " -f 1) /bin/bash 9 | 10 | test: 11 | docker-compose run --service-ports --rm app scripts/test.sh 12 | 13 | mysql: 14 | docker exec -it drupal-react-boilerplate-database mysql -h localhost -u root -ppassword drupal 15 | 16 | stop: 17 | docker-compose stop 18 | 19 | clean: 20 | docker-compose down 21 | 22 | build: 23 | docker-compose build app 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Drupal React Boilerplate 2 | 3 | This project is a kickstart to get a [React](https://facebook.github.io/react/) application served and backed by [Drupal 8](https://www.drupal.org/) in an easy and preconfigured environment with Docker. 4 | 5 | > This is and extension to the [drupal-boilerplate](https://github.com/TallerWebSolutions/drupal-boilerplate). 6 | 7 | ## Quick start 8 | 9 | 1. Clone this repo using `git clone --depth=1 https://github.com/TallerWebSolutions/drupal-boilerplate.git && cd drupal-boilerplate` 10 | 1. Install [Docker Compose](https://docs.docker.com/compose/); 11 | 1. Run `make run`; 12 | 1. Make a coffee. It takes a while the first time you run it. 13 | 1. Go to `cd /drupal/app/web/themes/custom/spa` 14 | 1. Run `yarn` ([what is Yarn?](https://yarnpkg.com/)) 15 | 1. Enjoy! 16 | 17 | ## Overview 18 | 19 | This boilerplate is a starting point for developers looking for replacing the end-user interface of Drupal with a front-end built with React. It sets up all the app's building process using [webpack](https://webpack.github.io/), so getting started is a pece of cake. In fact, if you followed the quick start you already builded the application once. 20 | 21 | ### Tell me more 22 | 23 | The Drupal work (building modules, for instance) is done in the same way the [drupal-project](https://github.com/drupal-composer/drupal-project) does. Follow that guide if you have any problems. 24 | 25 | The React work is done inside `web/themes/custom/spa`. It has basically the structure of a single page application project, with the addition that it is a Drupal theme too. Have a look at that directory for more information. 26 | 27 | There is also a profile called "react". This profile's purpose is to setup the theme configuration (serve the theme on specific urls only) and serve initial site-wide configuration. 28 | 29 | ### Keep in mind that... 30 | 31 | 1. The app is basically a theme. 32 | 1. The theme is intentionally served only on the `app/*` url. This avoid conflicts with other administrative interfaces. 33 | 1. This does no server side rendering. 34 | 1. There is no pre-configured connection between the app and the backend. 35 | 36 | ## How should I extend it? 37 | 38 | Well, this project is a boilerplate, so don't expect nor worry about keeping it possible to update your code at any time. You should probably just take over, rename the theme if want, and control how the profile does it work too. 39 | 40 | #### Docker containers 41 | 42 | This project uses Docker Compose to create a container for the application, one for the database, and one for Selenium to run e2e tests. The application container is based on the [taller/drupal-node](https://hub.docker.com/r/taller/drupal-node/) image, which includes: 43 | 44 | 1. NGINX 45 | 1. php5-fpm 46 | 1. Composer 47 | 1. Drush 48 | 1. Node (7.0) 49 | 1. npm 50 | 1. yarn 51 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drupal-composer/drupal-project", 3 | "description": "Project template for Drupal 8 projects with composer", 4 | "type": "project", 5 | "license": "GPL-2.0+", 6 | "authors": [ 7 | { 8 | "name": "", 9 | "role": "" 10 | } 11 | ], 12 | "repositories": [ 13 | { 14 | "type": "composer", 15 | "url": "https://packagist.drupal-composer.org" 16 | } 17 | ], 18 | "require": { 19 | "composer/installers": "^1.0.20", 20 | "drupal-composer/drupal-scaffold": "^2.0.1", 21 | "cweagans/composer-patches": "~1.0", 22 | "drupal/core": "~8.0", 23 | "drush/drush": "~8.0", 24 | "drupal/console": "~1.0", 25 | "drupal/config_installer": "^8.1" 26 | }, 27 | "require-dev": { 28 | "behat/mink": "~1.7", 29 | "behat/mink-goutte-driver": "~1.2", 30 | "jcalderonzumba/gastonjs": "~1.0.2", 31 | "jcalderonzumba/mink-phantomjs-driver": "~0.3.1", 32 | "mikey179/vfsStream": "~1.2", 33 | "phpunit/phpunit": "~4.8", 34 | "symfony/css-selector": "~2.8" 35 | }, 36 | "conflict": { 37 | "drupal/drupal": "*" 38 | }, 39 | "minimum-stability": "dev", 40 | "prefer-stable": true, 41 | "autoload": { 42 | "classmap": [ 43 | "scripts/composer/ScriptHandler.php" 44 | ] 45 | }, 46 | "scripts": { 47 | "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold", 48 | "pre-install-cmd": [ 49 | "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" 50 | ], 51 | "pre-update-cmd": [ 52 | "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" 53 | ], 54 | "post-install-cmd": [ 55 | "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" 56 | ], 57 | "post-update-cmd": [ 58 | "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" 59 | ] 60 | }, 61 | "extra": { 62 | "installer-paths": { 63 | "web/core": ["type:drupal-core"], 64 | "web/modules/contrib/{$name}": ["type:drupal-module"], 65 | "web/libraries/{$name}": ["type:drupal-library"], 66 | "web/profiles/contrib/{$name}": ["type:drupal-profile"], 67 | "web/themes/contrib/{$name}": ["type:drupal-theme"], 68 | "drush/contrib/{$name}": ["type:drupal-drush"] 69 | }, 70 | 71 | "patches": { 72 | 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | 3 | services: 4 | # This container is never builded - it's used only 5 | # for reusing configuration, 6 | meta: 7 | image: busybox # Necessary to make this container valid. 8 | environment: 9 | - MYSQL_USER=drupal 10 | - MYSQL_DATABASE=drupal 11 | - MYSQL_PASSWORD=password 12 | - MYSQL_ROOT_PASSWORD=password 13 | 14 | app: 15 | extends: meta 16 | image: drupal-react-boilerplate # Only needed to override "meta" image. 17 | build: ./docker 18 | hostname: app 19 | ports: 20 | - "80:80" 21 | cap_add: 22 | - ALL 23 | links: 24 | - database:database-host 25 | - selenium:selenium-host 26 | volumes: 27 | # 1 - Use ssh config from host. 28 | # 2 - Use git config from host. 29 | # 3 - Place app files. 30 | - $HOME/.ssh:/drupal/.ssh 31 | - $HOME/.gitconfig:/drupal/.gitconfig 32 | - $PWD:/drupal/app 33 | 34 | database: 35 | extends: meta 36 | image: mysql:5.6 37 | container_name: 'drupal-react-boilerplate-database' 38 | # volumes: 39 | # Persist database outside container. 40 | # @TODO: this does not work on docker-machine, and therefore it's commented out so 41 | # to avoid misleading behavior on that environment. Everything works just fine 42 | # without this mounted volume, but database wont persist after you shutdown the 43 | # database container. 44 | # - $PWD/.mysql/:/var/lib/mysql 45 | 46 | selenium: 47 | image: selenium/standalone-chrome 48 | container_name: drupal-react-boilerplate-selenium 49 | -------------------------------------------------------------------------------- /docker/.bashrc: -------------------------------------------------------------------------------- 1 | # System-wide .bashrc file for interactive bash(1) shells. 2 | 3 | # To enable the settings / commands in this file for login shells as well, 4 | # this file has to be sourced in /etc/profile. 5 | 6 | # If not running interactively, don't do anything 7 | [ -z "$PS1" ] && return 8 | 9 | # check the window size after each command and, if necessary, 10 | # update the values of LINES and COLUMNS. 11 | shopt -s checkwinsize 12 | 13 | # set variable identifying the chroot you work in (used in the prompt below) 14 | if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then 15 | debian_chroot=$(cat /etc/debian_chroot) 16 | fi 17 | 18 | # Get the current git branch (useful for PS1) 19 | parse_git_branch() { 20 | git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' 21 | } 22 | 23 | PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$\n' 24 | 25 | # enable bash completion in interactive shells 26 | if ! shopt -oq posix; then 27 | if [ -f /usr/share/bash-completion/bash_completion ]; then 28 | . /usr/share/bash-completion/bash_completion 29 | elif [ -f /etc/bash_completion ]; then 30 | . /etc/bash_completion 31 | fi 32 | fi 33 | 34 | # sudo hint 35 | if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then 36 | case " $(groups) " in *\ admin\ *) 37 | if [ -x /usr/bin/sudo ]; then 38 | cat <<-EOF 39 | To run a command as administrator (user "root"), use "sudo ". 40 | See "man sudo_root" for details. 41 | 42 | EOF 43 | fi 44 | esac 45 | fi 46 | 47 | # if the command-not-found package is installed, use it 48 | if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then 49 | function command_not_found_handle { 50 | # check because c-n-f could've been removed in the meantime 51 | if [ -x /usr/lib/command-not-found ]; then 52 | /usr/lib/command-not-found -- "$1" 53 | return $? 54 | elif [ -x /usr/share/command-not-found/command-not-found ]; then 55 | /usr/share/command-not-found/command-not-found -- "$1" 56 | return $? 57 | else 58 | printf "%s: command not found\n" "$1" >&2 59 | return 127 60 | fi 61 | } 62 | fi 63 | 64 | # Add locals to PATH. 65 | PATH="$HOME/app/vendor/bin:$PATH" 66 | PATH="$HOME/app/web/themes/custom/spa/node_modules/.bin:$PATH" 67 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM taller/drupal-node 2 | 3 | # Build-time configuration. 4 | # ------------------------- 5 | # This is mostly useful to override on CIs. 6 | 7 | ARG APP_NAME=drupal 8 | ARG GROUP_ID=1000 9 | ARG USER_ID=1000 10 | 11 | 12 | # Configure environment. 13 | # ---------------------- 14 | 15 | ENV APP_NAME=${APP_NAME} 16 | ENV GROUP_ID=${GROUP_ID} 17 | ENV GROUP_NAME=${APP_NAME} USER_ID=${USER_ID} USER_NAME=${APP_NAME} 18 | 19 | 20 | # Create group and user. 21 | # ---------------------- 22 | 23 | RUN groupadd --gid ${GROUP_ID} ${GROUP_NAME} \ 24 | && echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \ 25 | && useradd -u ${USER_ID} -G users,www-data,sudo -g ${GROUP_NAME} -d /${APP_NAME} --shell /bin/bash -m ${APP_NAME} \ 26 | && echo "secret\nsecret" | passwd ${USER_NAME} 27 | 28 | 29 | # Import files. 30 | # ------------- 31 | 32 | COPY ./.bashrc /${APP_NAME}/.bashrc 33 | RUN chown ${USER_NAME}:${GROUP_NAME} /${APP_NAME}/.bashrc 34 | 35 | 36 | # Make site available. 37 | # -------------------- 38 | 39 | RUN rm -Rf /var/www/drupal \ 40 | && ln -s /${USER_NAME}/app/web /var/www/drupal 41 | 42 | 43 | # Setup user and initialization directory. 44 | # ---------------------------------------- 45 | 46 | USER ${USER_NAME} 47 | WORKDIR /${USER_NAME}/app 48 | 49 | 50 | # Install prestissimo for faster composer installs. 51 | # ------------------------------------------------- 52 | 53 | RUN sudo cp -R /root/.composer /${USER_NAME}/.composer \ 54 | && sudo chown ${USER_NAME}:${GROUP_NAME} -R /${USER_NAME}/.composer 55 | 56 | 57 | # Configure entrypoint. 58 | # --------------------- 59 | 60 | COPY ./entrypoint.sh /etc/entrypoint.sh 61 | RUN sudo chmod +x /etc/entrypoint.sh 62 | CMD ["/bin/bash"] 63 | ENTRYPOINT ["/etc/entrypoint.sh"] 64 | -------------------------------------------------------------------------------- /docker/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # Start services and loggers. 6 | # --------------------------- 7 | 8 | sudo service php5-fpm restart > /tmp/php.log 9 | sudo service nginx restart > /tmp/nginx.log 10 | 11 | 12 | # Await database. 13 | # ---------------. 14 | 15 | while ! nc -q 1 database-host 3306 2 | 3 | 10 | 11 | 12 | ./test/ 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /scripts/composer/ScriptHandler.php: -------------------------------------------------------------------------------- 1 | exists($root . '/'. $dir)) { 34 | $fs->mkdir($root . '/'. $dir); 35 | $fs->touch($root . '/'. $dir . '/.gitkeep'); 36 | } 37 | } 38 | 39 | // Prepare the settings file for installation 40 | if (!$fs->exists($root . '/sites/default/settings.php') and $fs->exists($root . '/sites/default/default.settings.php')) { 41 | $fs->copy($root . '/sites/default/default.settings.php', $root . '/sites/default/settings.php'); 42 | $fs->chmod($root . '/sites/default/settings.php', 0666); 43 | $event->getIO()->write("Create a sites/default/settings.php file with chmod 0666"); 44 | } 45 | 46 | // Prepare the services file for installation 47 | if (!$fs->exists($root . '/sites/default/services.yml') and $fs->exists($root . '/sites/default/default.services.yml')) { 48 | $fs->copy($root . '/sites/default/default.services.yml', $root . '/sites/default/services.yml'); 49 | $fs->chmod($root . '/sites/default/services.yml', 0666); 50 | $event->getIO()->write("Create a sites/default/services.yml file with chmod 0666"); 51 | } 52 | 53 | // Create the files directory with chmod 0777 54 | if (!$fs->exists($root . '/sites/default/files')) { 55 | $oldmask = umask(0); 56 | $fs->mkdir($root . '/sites/default/files', 0777); 57 | umask($oldmask); 58 | $event->getIO()->write("Create a sites/default/files directory with chmod 0777"); 59 | } 60 | } 61 | 62 | /** 63 | * Checks if the installed version of Composer is compatible. 64 | * 65 | * Composer 1.0.0 and higher consider a `composer install` without having a 66 | * lock file present as equal to `composer update`. We do not ship with a lock 67 | * file to avoid merge conflicts downstream, meaning that if a project is 68 | * installed with an older version of Composer the scaffolding of Drupal will 69 | * not be triggered. We check this here instead of in drupal-scaffold to be 70 | * able to give immediate feedback to the end user, rather than failing the 71 | * installation after going through the lengthy process of compiling and 72 | * downloading the Composer dependencies. 73 | * 74 | * @see https://github.com/composer/composer/pull/5035 75 | */ 76 | public static function checkComposerVersion(Event $event) { 77 | $composer = $event->getComposer(); 78 | $io = $event->getIO(); 79 | 80 | $version = $composer::VERSION; 81 | 82 | // If Composer is installed through git we have no easy way to determine if 83 | // it is new enough, just display a warning. 84 | if ($version === '@package_version@') { 85 | $io->writeError('You are running a development version of Composer. If you experience problems, please update Composer to the latest stable version.'); 86 | } 87 | elseif (Comparator::lessThan($version, '1.0.0')) { 88 | $io->writeError('Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing.'); 89 | exit(1); 90 | } 91 | } 92 | 93 | public static function installLibraryDependencies(Event $event) { 94 | $fs = new Filesystem(); 95 | $root = getcwd(); 96 | 97 | if ($fs->exists($root . '/bower.json')) { 98 | $event->getIO()->write('Installing Library dependencies.'); 99 | 100 | $process = new Process('bower install', $root); 101 | $process->setTimeout(600); // Will timeout if whole process exceeds 10min. 102 | $process->setIdleTimeout(120); // Will timeout if idle for 2min. 103 | 104 | try { 105 | $process->run(function ($type, $buffer) { 106 | echo $buffer; 107 | }); 108 | } catch (ProcessFailedException $e) { 109 | echo $e->getMessage(); 110 | } 111 | } 112 | } 113 | 114 | public static function installWebAppDependencies(Event $event) { 115 | $fs = new Filesystem(); 116 | $root = static::getDrupalRoot(getcwd()); 117 | $webapp_path = $root . '/themes/custom/webapp'; 118 | 119 | if ($fs->exists($webapp_path . '/package.json')) { 120 | $event->getIO()->write('Installing Web App dependencies.'); 121 | 122 | $process = new Process('npm install', $webapp_path); 123 | $process->setTimeout(600); // Will timeout if whole process exceeds 10min. 124 | $process->setIdleTimeout(120); // Will timeout if idle for 2min. 125 | 126 | try { 127 | $process->run(function ($type, $buffer) { 128 | echo $buffer; 129 | }); 130 | } catch (ProcessFailedException $e) { 131 | echo $e->getMessage(); 132 | } 133 | } 134 | } 135 | 136 | } 137 | -------------------------------------------------------------------------------- /scripts/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Drupal tests 4 | /usr/bin/php ./web/core/scripts/run-tests.sh --php /usr/bin/php --sqlite /tmp/test.sqlite --verbose --color Drupal 5 | 6 | # SPA tests 7 | # @TODO: fix bash.bashrc nvm installing. 8 | source /usr/local/nvm/nvm.sh 9 | (cd /drupal/app/web/themes/custom/spa && npm run test) 10 | -------------------------------------------------------------------------------- /web/.csslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "important": true, 3 | "adjoining-classes": false, 4 | "known-properties": true, 5 | "box-sizing": false, 6 | "box-model": true, 7 | "overqualified-elements": true, 8 | "display-property-grouping": true, 9 | "bulletproof-font-face": false, 10 | "compatible-vendor-prefixes": false, 11 | "regex-selectors": false, 12 | "errors": false, 13 | "duplicate-background-images": true, 14 | "duplicate-properties": true, 15 | "empty-rules": true, 16 | "selector-max-approaching": false, 17 | "gradients": false, 18 | "fallback-colors": false, 19 | "font-sizes": false, 20 | "font-faces": false, 21 | "floats": false, 22 | "star-property-hack": true, 23 | "outline-none": true, 24 | "import": true, 25 | "ids": true, 26 | "underscore-property-hack": true, 27 | "rules-count": false, 28 | "qualified-headings": true, 29 | "selector-max": false, 30 | "shorthand": true, 31 | "text-indent": true, 32 | "unique-headings": true, 33 | "universal-selector": false, 34 | "unqualified-attributes": true, 35 | "vendor-prefix": true, 36 | "zero-units": true 37 | } 38 | -------------------------------------------------------------------------------- /web/.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.json] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /web/.eslintignore: -------------------------------------------------------------------------------- 1 | core/assets/vendor/**/* 2 | core/modules/locale/tests/locale_test.js 3 | vendor/**/* 4 | sites/**/files/**/* 5 | libraries/**/* 6 | sites/**/libraries/**/* 7 | profiles/**/libraries/**/* 8 | **/js_test_files/**/* 9 | -------------------------------------------------------------------------------- /web/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc" 3 | } 4 | -------------------------------------------------------------------------------- /web/.gitattributes: -------------------------------------------------------------------------------- 1 | # Drupal git normalization 2 | # @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html 3 | # @see https://www.drupal.org/node/1542048 4 | 5 | # Normally these settings would be done with macro attributes for improved 6 | # readability and easier maintenance. However macros can only be defined at the 7 | # repository root directory. Drupal avoids making any assumptions about where it 8 | # is installed. 9 | 10 | # Define text file attributes. 11 | # - Treat them as text. 12 | # - Ensure no CRLF line-endings, neither on checkout nor on checkin. 13 | # - Detect whitespace errors. 14 | # - Exposed by default in `git diff --color` on the CLI. 15 | # - Validate with `git diff --check`. 16 | # - Deny applying with `git apply --whitespace=error-all`. 17 | # - Fix automatically with `git apply --whitespace=fix`. 18 | 19 | *.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 20 | *.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 21 | *.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 22 | *.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 23 | *.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html 24 | *.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 25 | *.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 26 | *.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 27 | *.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 28 | *.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 29 | *.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 30 | *.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 31 | *.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 32 | *.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 33 | *.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 34 | *.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 35 | *.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 36 | *.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 37 | *.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 38 | *.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 39 | *.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 40 | *.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 41 | *.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 42 | *.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 43 | 44 | # Define binary file attributes. 45 | # - Do not treat them as text. 46 | # - Include binary diff in patches instead of "binary files differ." 47 | *.gif -text diff 48 | *.gz -text diff 49 | *.ico -text diff 50 | *.jpeg -text diff 51 | *.jpg -text diff 52 | *.png -text diff 53 | *.phar -text diff 54 | *.exe -text diff 55 | *.svgz -text diff 56 | *.ttf -text diff 57 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | # 2 | # Apache/PHP/Drupal settings: 3 | # 4 | 5 | # Protect files and directories from prying eyes. 6 | 7 | 8 | Require all denied 9 | 10 | 11 | Order allow,deny 12 | 13 | 14 | 15 | # Don't show directory listings for URLs which map to a directory. 16 | Options -Indexes 17 | 18 | # Set the default handler. 19 | DirectoryIndex index.php index.html index.htm 20 | 21 | # Add correct encoding for SVGZ. 22 | AddType image/svg+xml svg svgz 23 | AddEncoding gzip svgz 24 | 25 | # Most of the following PHP settings cannot be changed at runtime. See 26 | # sites/default/default.settings.php and 27 | # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be 28 | # changed at runtime. 29 | 30 | # PHP 5, Apache 1 and 2. 31 | 32 | php_value assert.active 0 33 | php_flag session.auto_start off 34 | php_value mbstring.http_input pass 35 | php_value mbstring.http_output pass 36 | php_flag mbstring.encoding_translation off 37 | # PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is 38 | # not set. 39 | php_value always_populate_raw_post_data -1 40 | 41 | 42 | # Requires mod_expires to be enabled. 43 | 44 | # Enable expirations. 45 | ExpiresActive On 46 | 47 | # Cache all files for 2 weeks after access (A). 48 | ExpiresDefault A1209600 49 | 50 | 51 | # Do not allow PHP scripts to be cached unless they explicitly send cache 52 | # headers themselves. Otherwise all scripts would have to overwrite the 53 | # headers set by mod_expires if they want another caching behavior. This may 54 | # fail if an error occurs early in the bootstrap process, and it may cause 55 | # problems if a non-Drupal PHP file is installed in a subdirectory. 56 | ExpiresActive Off 57 | 58 | 59 | 60 | # Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to 61 | # work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is 62 | # not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of 63 | # http://example.com/), the path to index.php will need to be adjusted. 64 | 65 | FallbackResource /index.php 66 | 67 | 68 | # Various rewrite rules. 69 | 70 | RewriteEngine on 71 | 72 | # Set "protossl" to "s" if we were accessed via https://. This is used later 73 | # if you enable "www." stripping or enforcement, in order to ensure that 74 | # you don't bounce between http and https. 75 | RewriteRule ^ - [E=protossl] 76 | RewriteCond %{HTTPS} on 77 | RewriteRule ^ - [E=protossl:s] 78 | 79 | # Make sure Authorization HTTP header is available to PHP 80 | # even when running as CGI or FastCGI. 81 | RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 82 | 83 | # Block access to "hidden" directories whose names begin with a period. This 84 | # includes directories used by version control systems such as Subversion or 85 | # Git to store control files. Files whose names begin with a period, as well 86 | # as the control files used by CVS, are protected by the FilesMatch directive 87 | # above. 88 | # 89 | # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is 90 | # not possible to block access to entire directories from .htaccess because 91 | # is not allowed here. 92 | # 93 | # If you do not have mod_rewrite installed, you should remove these 94 | # directories from your webroot or otherwise protect them from being 95 | # downloaded. 96 | RewriteRule "(^|/)\.(?!well-known)" - [F] 97 | 98 | # If your site can be accessed both with and without the 'www.' prefix, you 99 | # can use one of the following settings to redirect users to your preferred 100 | # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option: 101 | # 102 | # To redirect all users to access the site WITH the 'www.' prefix, 103 | # (http://example.com/foo will be redirected to http://www.example.com/foo) 104 | # uncomment the following: 105 | # RewriteCond %{HTTP_HOST} . 106 | # RewriteCond %{HTTP_HOST} !^www\. [NC] 107 | # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 108 | # 109 | # To redirect all users to access the site WITHOUT the 'www.' prefix, 110 | # (http://www.example.com/foo will be redirected to http://example.com/foo) 111 | # uncomment the following: 112 | # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 113 | # RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 114 | 115 | # Modify the RewriteBase if you are using Drupal in a subdirectory or in a 116 | # VirtualDocumentRoot and the rewrite rules are not working properly. 117 | # For example if your site is at http://example.com/drupal uncomment and 118 | # modify the following line: 119 | # RewriteBase /drupal 120 | # 121 | # If your site is running in a VirtualDocumentRoot at http://example.com/, 122 | # uncomment the following line: 123 | # RewriteBase / 124 | 125 | # Redirect common PHP files to their new locations. 126 | RewriteCond %{REQUEST_URI} ^(.*)?/(install.php) [OR] 127 | RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild.php) 128 | RewriteCond %{REQUEST_URI} !core 129 | RewriteRule ^ %1/core/%2 [L,QSA,R=301] 130 | 131 | # Rewrite install.php during installation to see if mod_rewrite is working 132 | RewriteRule ^core/install.php core/install.php?rewrite=ok [QSA,L] 133 | 134 | # Pass all requests not referring directly to files in the filesystem to 135 | # index.php. 136 | RewriteCond %{REQUEST_FILENAME} !-f 137 | RewriteCond %{REQUEST_FILENAME} !-d 138 | RewriteCond %{REQUEST_URI} !=/favicon.ico 139 | RewriteRule ^ index.php [L] 140 | 141 | # For security reasons, deny access to other PHP files on public sites. 142 | # Note: The following URI conditions are not anchored at the start (^), 143 | # because Drupal may be located in a subdirectory. To further improve 144 | # security, you can replace '!/' with '!^/'. 145 | # Allow access to PHP files in /core (like authorize.php or install.php): 146 | RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$ 147 | # Allow access to test-specific PHP files: 148 | RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php 149 | # Allow access to Statistics module's custom front controller. 150 | # Copy and adapt this rule to directly execute PHP files in contributed or 151 | # custom modules or to run another PHP application in the same directory. 152 | RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics.php$ 153 | # Deny access to any other PHP files that do not match the rules above. 154 | # Specifically, disallow autoload.php from being served directly. 155 | RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F] 156 | 157 | # Rules to correctly serve gzip compressed CSS and JS files. 158 | # Requires both mod_rewrite and mod_headers to be enabled. 159 | 160 | # Serve gzip compressed CSS files if they exist and the client accepts gzip. 161 | RewriteCond %{HTTP:Accept-encoding} gzip 162 | RewriteCond %{REQUEST_FILENAME}\.gz -s 163 | RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 164 | 165 | # Serve gzip compressed JS files if they exist and the client accepts gzip. 166 | RewriteCond %{HTTP:Accept-encoding} gzip 167 | RewriteCond %{REQUEST_FILENAME}\.gz -s 168 | RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 169 | 170 | # Serve correct content types, and prevent mod_deflate double gzip. 171 | RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] 172 | RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] 173 | 174 | 175 | # Serve correct encoding type. 176 | Header set Content-Encoding gzip 177 | # Force proxies to cache gzipped & non-gzipped css/js files separately. 178 | Header append Vary Accept-Encoding 179 | 180 | 181 | 182 | 183 | # Various header fixes. 184 | 185 | # Disable content sniffing, since it's an attack vector. 186 | Header always set X-Content-Type-Options nosniff 187 | # Disable Proxy header, since it's an attack vector. 188 | RequestHeader unset Proxy 189 | 190 | -------------------------------------------------------------------------------- /web/autoload.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /web/modules/custom/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TallerWebSolutions/drupal-react-boilerplate/471f0791d7db3f9a843361245b86feec3118d092/web/modules/custom/.gitkeep -------------------------------------------------------------------------------- /web/profiles/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TallerWebSolutions/drupal-react-boilerplate/471f0791d7db3f9a843361245b86feec3118d092/web/profiles/.gitkeep -------------------------------------------------------------------------------- /web/profiles/react/config/install/automated_cron.settings.yml: -------------------------------------------------------------------------------- 1 | interval: 10800 2 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_account_menu.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - system.menu.account 6 | module: 7 | - system 8 | theme: 9 | - bartik 10 | id: bartik_account_menu 11 | theme: bartik 12 | region: secondary_menu 13 | weight: 0 14 | provider: null 15 | plugin: 'system_menu_block:account' 16 | settings: 17 | id: 'system_menu_block:account' 18 | label: 'User account menu' 19 | provider: system 20 | label_display: '0' 21 | level: 1 22 | depth: 1 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_branding.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - bartik 8 | id: bartik_branding 9 | theme: bartik 10 | region: header 11 | weight: 0 12 | provider: null 13 | plugin: system_branding_block 14 | settings: 15 | id: system_branding_block 16 | label: 'Site branding' 17 | provider: system 18 | label_display: '0' 19 | use_site_logo: true 20 | use_site_name: true 21 | use_site_slogan: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - bartik 8 | id: bartik_breadcrumbs 9 | theme: bartik 10 | region: breadcrumb 11 | weight: 0 12 | provider: null 13 | plugin: system_breadcrumb_block 14 | settings: 15 | id: system_breadcrumb_block 16 | label: Breadcrumbs 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_content.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - bartik 8 | id: bartik_content 9 | theme: bartik 10 | region: content 11 | weight: 0 12 | provider: null 13 | plugin: system_main_block 14 | settings: 15 | id: system_main_block 16 | label: 'Main page content' 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_footer.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - system.menu.footer 6 | module: 7 | - system 8 | theme: 9 | - bartik 10 | id: bartik_footer 11 | theme: bartik 12 | region: footer_fifth 13 | weight: 0 14 | provider: null 15 | plugin: 'system_menu_block:footer' 16 | settings: 17 | id: 'system_menu_block:footer' 18 | label: 'Footer menu' 19 | provider: system 20 | label_display: '0' 21 | level: 1 22 | depth: 0 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_help.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - help 6 | theme: 7 | - bartik 8 | id: bartik_help 9 | theme: bartik 10 | region: content 11 | weight: -30 12 | provider: null 13 | plugin: help_block 14 | settings: 15 | id: help_block 16 | label: Help 17 | provider: help 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_local_actions.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - bartik 6 | id: bartik_local_actions 7 | theme: bartik 8 | region: content 9 | weight: -20 10 | provider: null 11 | plugin: local_actions_block 12 | settings: 13 | id: local_actions_block 14 | label: 'Primary admin actions' 15 | provider: core 16 | label_display: '0' 17 | visibility: { } 18 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_local_tasks.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - bartik 6 | id: bartik_local_tasks 7 | theme: bartik 8 | region: content 9 | weight: -40 10 | provider: null 11 | plugin: local_tasks_block 12 | settings: 13 | id: local_tasks_block 14 | label: Tabs 15 | provider: core 16 | label_display: '0' 17 | primary: true 18 | secondary: true 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_main_menu.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - system.menu.main 6 | module: 7 | - system 8 | theme: 9 | - bartik 10 | id: bartik_main_menu 11 | theme: bartik 12 | region: primary_menu 13 | weight: 0 14 | provider: null 15 | plugin: 'system_menu_block:main' 16 | settings: 17 | id: 'system_menu_block:main' 18 | label: 'Main navigation' 19 | provider: system 20 | label_display: '0' 21 | level: 1 22 | depth: 1 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_messages.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - bartik 8 | id: bartik_messages 9 | theme: bartik 10 | region: highlighted 11 | weight: 0 12 | provider: null 13 | plugin: system_messages_block 14 | settings: 15 | id: system_messages_block 16 | label: 'Status messages' 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_page_title.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - bartik 6 | id: bartik_page_title 7 | theme: bartik 8 | region: content 9 | weight: -50 10 | provider: null 11 | plugin: page_title_block 12 | settings: 13 | id: page_title_block 14 | label: 'Page title' 15 | provider: core 16 | label_display: '0' 17 | visibility: { } 18 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_powered.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - bartik 8 | id: bartik_powered 9 | theme: bartik 10 | region: footer_fifth 11 | weight: 10 12 | provider: null 13 | plugin: system_powered_by_block 14 | settings: 15 | id: system_powered_by_block 16 | label: 'Powered by Drupal' 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_search.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - search 6 | theme: 7 | - bartik 8 | id: bartik_search 9 | theme: bartik 10 | region: sidebar_first 11 | weight: -1 12 | provider: null 13 | plugin: search_form_block 14 | settings: 15 | id: search_form_block 16 | label: Search 17 | provider: search 18 | label_display: visible 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.bartik_tools.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - system.menu.tools 6 | module: 7 | - system 8 | theme: 9 | - bartik 10 | id: bartik_tools 11 | theme: bartik 12 | region: sidebar_first 13 | weight: 0 14 | provider: null 15 | plugin: 'system_menu_block:tools' 16 | settings: 17 | id: 'system_menu_block:tools' 18 | label: Tools 19 | provider: system 20 | label_display: visible 21 | level: 1 22 | depth: 0 23 | visibility: { } 24 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_breadcrumbs.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - seven 8 | id: seven_breadcrumbs 9 | theme: seven 10 | region: breadcrumb 11 | weight: 0 12 | provider: null 13 | plugin: system_breadcrumb_block 14 | settings: 15 | id: system_breadcrumb_block 16 | label: Breadcrumbs 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_content.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - seven 8 | id: seven_content 9 | theme: seven 10 | region: content 11 | weight: 0 12 | provider: null 13 | plugin: system_main_block 14 | settings: 15 | id: system_main_block 16 | label: 'Main page content' 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_help.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - help 6 | theme: 7 | - seven 8 | id: seven_help 9 | theme: seven 10 | region: help 11 | weight: 0 12 | provider: null 13 | plugin: help_block 14 | settings: 15 | id: help_block 16 | label: Help 17 | provider: help 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_local_actions.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - seven 6 | id: seven_local_actions 7 | theme: seven 8 | region: content 9 | weight: -10 10 | provider: null 11 | plugin: local_actions_block 12 | settings: 13 | id: local_actions_block 14 | label: 'Primary admin actions' 15 | provider: core 16 | label_display: '0' 17 | visibility: { } 18 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_login.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - user 6 | theme: 7 | - seven 8 | id: seven_login 9 | theme: seven 10 | region: content 11 | weight: 10 12 | provider: null 13 | plugin: user_login_block 14 | settings: 15 | id: user_login_block 16 | label: 'User login' 17 | provider: user 18 | label_display: visible 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_messages.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - system 6 | theme: 7 | - seven 8 | id: seven_messages 9 | theme: seven 10 | region: highlighted 11 | weight: 0 12 | provider: null 13 | plugin: system_messages_block 14 | settings: 15 | id: system_messages_block 16 | label: 'Status messages' 17 | provider: system 18 | label_display: '0' 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_page_title.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - seven 6 | id: seven_page_title 7 | theme: seven 8 | region: header 9 | weight: -30 10 | provider: null 11 | plugin: page_title_block 12 | settings: 13 | id: page_title_block 14 | label: 'Page title' 15 | provider: core 16 | label_display: '0' 17 | visibility: { } 18 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_primary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - seven 6 | id: seven_primary_local_tasks 7 | theme: seven 8 | region: header 9 | weight: 0 10 | provider: null 11 | plugin: local_tasks_block 12 | settings: 13 | id: local_tasks_block 14 | label: 'Primary tabs' 15 | provider: core 16 | label_display: '0' 17 | primary: true 18 | secondary: false 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block.block.seven_secondary_local_tasks.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | theme: 5 | - seven 6 | id: seven_secondary_local_tasks 7 | theme: seven 8 | region: pre_content 9 | weight: 0 10 | provider: null 11 | plugin: local_tasks_block 12 | settings: 13 | id: local_tasks_block 14 | label: 'Secondary tabs' 15 | provider: core 16 | label_display: '0' 17 | primary: false 18 | secondary: true 19 | visibility: { } 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/block_content.type.basic.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: { } 4 | id: basic 5 | label: 'Basic block' 6 | revision: 0 7 | description: 'A basic block contains a title and a body.' 8 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/comment.type.comment.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: { } 4 | id: comment 5 | label: 'Default comments' 6 | target_entity_type_id: node 7 | description: 'Allows commenting on content' 8 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/contact.form.feedback.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: { } 4 | id: feedback 5 | label: 'Website feedback' 6 | recipients: 7 | - admin@example.com 8 | reply: '' 9 | weight: 0 10 | message: 'Your message has been sent.' 11 | redirect: '' 12 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.base_field_override.node.page.promote.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - node.type.page 6 | id: node.page.promote 7 | field_name: promote 8 | entity_type: node 9 | bundle: page 10 | label: 'Promoted to front page' 11 | description: '' 12 | required: false 13 | translatable: false 14 | default_value: 15 | - 16 | value: 0 17 | default_value_callback: '' 18 | settings: 19 | on_label: 'On' 20 | off_label: 'Off' 21 | field_type: boolean 22 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_form_display.block_content.basic.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - block_content.type.basic 6 | - field.field.block_content.basic.body 7 | module: 8 | - text 9 | id: block_content.basic.default 10 | targetEntityType: block_content 11 | bundle: basic 12 | mode: default 13 | content: 14 | body: 15 | type: text_textarea_with_summary 16 | weight: -4 17 | settings: 18 | rows: 9 19 | summary_rows: 3 20 | placeholder: '' 21 | third_party_settings: { } 22 | info: 23 | type: string_textfield 24 | weight: -5 25 | settings: 26 | size: 60 27 | placeholder: '' 28 | third_party_settings: { } 29 | hidden: { } 30 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_form_display.comment.comment.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - comment.type.comment 6 | - field.field.comment.comment.comment_body 7 | module: 8 | - text 9 | id: comment.comment.default 10 | targetEntityType: comment 11 | bundle: comment 12 | mode: default 13 | content: 14 | author: 15 | weight: -2 16 | comment_body: 17 | type: text_textarea 18 | weight: 11 19 | settings: 20 | rows: 5 21 | placeholder: '' 22 | third_party_settings: { } 23 | subject: 24 | type: string_textfield 25 | weight: 10 26 | settings: 27 | size: 60 28 | placeholder: '' 29 | third_party_settings: { } 30 | hidden: { } 31 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_form_display.node.article.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.field.node.article.body 6 | - field.field.node.article.comment 7 | - field.field.node.article.field_image 8 | - field.field.node.article.field_tags 9 | - image.style.thumbnail 10 | - node.type.article 11 | module: 12 | - comment 13 | - image 14 | - path 15 | - text 16 | id: node.article.default 17 | targetEntityType: node 18 | bundle: article 19 | mode: default 20 | content: 21 | body: 22 | type: text_textarea_with_summary 23 | weight: 1 24 | settings: 25 | rows: 9 26 | summary_rows: 3 27 | placeholder: '' 28 | third_party_settings: { } 29 | comment: 30 | type: comment_default 31 | weight: 20 32 | settings: { } 33 | third_party_settings: { } 34 | created: 35 | type: datetime_timestamp 36 | weight: 10 37 | settings: { } 38 | third_party_settings: { } 39 | field_image: 40 | type: image_image 41 | weight: 4 42 | settings: 43 | progress_indicator: throbber 44 | preview_image_style: thumbnail 45 | third_party_settings: { } 46 | field_tags: 47 | type: entity_reference_autocomplete_tags 48 | weight: 3 49 | settings: { } 50 | third_party_settings: { } 51 | path: 52 | type: path 53 | weight: 30 54 | settings: { } 55 | third_party_settings: { } 56 | promote: 57 | type: boolean_checkbox 58 | settings: 59 | display_label: true 60 | weight: 15 61 | third_party_settings: { } 62 | sticky: 63 | type: boolean_checkbox 64 | settings: 65 | display_label: true 66 | weight: 16 67 | third_party_settings: { } 68 | title: 69 | type: string_textfield 70 | weight: 0 71 | settings: 72 | size: 60 73 | placeholder: '' 74 | third_party_settings: { } 75 | uid: 76 | type: entity_reference_autocomplete 77 | weight: 5 78 | settings: 79 | match_operator: CONTAINS 80 | size: 60 81 | placeholder: '' 82 | third_party_settings: { } 83 | hidden: { } 84 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_form_display.node.page.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.field.node.page.body 6 | - node.type.page 7 | module: 8 | - path 9 | - text 10 | id: node.page.default 11 | targetEntityType: node 12 | bundle: page 13 | mode: default 14 | content: 15 | body: 16 | type: text_textarea_with_summary 17 | weight: 31 18 | settings: 19 | rows: 9 20 | summary_rows: 3 21 | placeholder: '' 22 | third_party_settings: { } 23 | created: 24 | type: datetime_timestamp 25 | weight: 10 26 | settings: { } 27 | third_party_settings: { } 28 | path: 29 | type: path 30 | weight: 30 31 | settings: { } 32 | third_party_settings: { } 33 | promote: 34 | type: boolean_checkbox 35 | settings: 36 | display_label: true 37 | weight: 15 38 | third_party_settings: { } 39 | sticky: 40 | type: boolean_checkbox 41 | settings: 42 | display_label: true 43 | weight: 16 44 | third_party_settings: { } 45 | title: 46 | type: string_textfield 47 | weight: -5 48 | settings: 49 | size: 60 50 | placeholder: '' 51 | third_party_settings: { } 52 | uid: 53 | type: entity_reference_autocomplete 54 | weight: 5 55 | settings: 56 | match_operator: CONTAINS 57 | size: 60 58 | placeholder: '' 59 | third_party_settings: { } 60 | hidden: { } 61 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_form_display.user.user.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.field.user.user.user_picture 6 | - image.style.thumbnail 7 | module: 8 | - image 9 | - user 10 | id: user.user.default 11 | targetEntityType: user 12 | bundle: user 13 | mode: default 14 | content: 15 | account: 16 | weight: -10 17 | contact: 18 | weight: 5 19 | language: 20 | weight: 0 21 | timezone: 22 | weight: 6 23 | user_picture: 24 | type: image_image 25 | settings: 26 | progress_indicator: throbber 27 | preview_image_style: thumbnail 28 | third_party_settings: { } 29 | weight: -1 30 | hidden: { } 31 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.block_content.basic.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - block_content.type.basic 6 | - field.field.block_content.basic.body 7 | module: 8 | - text 9 | id: block_content.basic.default 10 | targetEntityType: block_content 11 | bundle: basic 12 | mode: default 13 | content: 14 | body: 15 | label: hidden 16 | type: text_default 17 | weight: 0 18 | settings: { } 19 | third_party_settings: { } 20 | hidden: { } 21 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.comment.comment.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - comment.type.comment 6 | - field.field.comment.comment.comment_body 7 | module: 8 | - text 9 | id: comment.comment.default 10 | targetEntityType: comment 11 | bundle: comment 12 | mode: default 13 | content: 14 | comment_body: 15 | label: hidden 16 | type: text_default 17 | weight: 0 18 | settings: { } 19 | third_party_settings: { } 20 | links: 21 | weight: 100 22 | hidden: { } 23 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.node.article.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - core.entity_view_display.comment.comment.default 6 | - field.field.node.article.body 7 | - field.field.node.article.comment 8 | - field.field.node.article.field_image 9 | - field.field.node.article.field_tags 10 | - image.style.large 11 | - node.type.article 12 | module: 13 | - comment 14 | - image 15 | - text 16 | - user 17 | id: node.article.default 18 | targetEntityType: node 19 | bundle: article 20 | mode: default 21 | content: 22 | body: 23 | type: text_default 24 | weight: 0 25 | settings: { } 26 | third_party_settings: { } 27 | label: hidden 28 | comment: 29 | type: comment_default 30 | weight: 110 31 | label: above 32 | settings: 33 | view_mode: default 34 | pager_id: 0 35 | third_party_settings: { } 36 | field_image: 37 | type: image 38 | weight: -1 39 | settings: 40 | image_style: large 41 | image_link: '' 42 | third_party_settings: { } 43 | label: hidden 44 | field_tags: 45 | type: entity_reference_label 46 | weight: 10 47 | label: above 48 | settings: 49 | link: true 50 | third_party_settings: { } 51 | links: 52 | weight: 100 53 | hidden: 54 | field_image: true 55 | field_tags: true 56 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.node.article.rss.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - core.entity_view_mode.node.rss 6 | - field.field.node.article.body 7 | - field.field.node.article.comment 8 | - field.field.node.article.field_image 9 | - field.field.node.article.field_tags 10 | - node.type.article 11 | module: 12 | - user 13 | id: node.article.rss 14 | targetEntityType: node 15 | bundle: article 16 | mode: rss 17 | content: 18 | links: 19 | weight: 100 20 | hidden: 21 | body: true 22 | comment: true 23 | field_image: true 24 | field_tags: true 25 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.node.article.teaser.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - core.entity_view_mode.node.teaser 6 | - field.field.node.article.body 7 | - field.field.node.article.comment 8 | - field.field.node.article.field_image 9 | - field.field.node.article.field_tags 10 | - image.style.medium 11 | - node.type.article 12 | module: 13 | - image 14 | - text 15 | - user 16 | id: node.article.teaser 17 | targetEntityType: node 18 | bundle: article 19 | mode: teaser 20 | content: 21 | body: 22 | type: text_summary_or_trimmed 23 | weight: 0 24 | settings: 25 | trim_length: 600 26 | third_party_settings: { } 27 | label: hidden 28 | field_image: 29 | type: image 30 | weight: -1 31 | settings: 32 | image_style: medium 33 | image_link: content 34 | third_party_settings: { } 35 | label: hidden 36 | field_tags: 37 | type: entity_reference_label 38 | weight: 10 39 | settings: 40 | link: true 41 | third_party_settings: { } 42 | label: above 43 | links: 44 | weight: 100 45 | hidden: 46 | comment: true 47 | field_image: true 48 | field_tags: true 49 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.node.page.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.field.node.page.body 6 | - node.type.page 7 | module: 8 | - text 9 | - user 10 | id: node.page.default 11 | targetEntityType: node 12 | bundle: page 13 | mode: default 14 | content: 15 | body: 16 | label: hidden 17 | type: text_default 18 | weight: 100 19 | settings: { } 20 | third_party_settings: { } 21 | links: 22 | weight: 101 23 | hidden: { } 24 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.node.page.teaser.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - core.entity_view_mode.node.teaser 6 | - field.field.node.page.body 7 | - node.type.page 8 | module: 9 | - text 10 | - user 11 | id: node.page.teaser 12 | targetEntityType: node 13 | bundle: page 14 | mode: teaser 15 | content: 16 | body: 17 | label: hidden 18 | type: text_summary_or_trimmed 19 | weight: 100 20 | settings: 21 | trim_length: 600 22 | third_party_settings: { } 23 | links: 24 | weight: 101 25 | hidden: { } 26 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.user.user.compact.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - core.entity_view_mode.user.compact 6 | - field.field.user.user.user_picture 7 | - image.style.thumbnail 8 | module: 9 | - image 10 | - user 11 | id: user.user.compact 12 | targetEntityType: user 13 | bundle: user 14 | mode: compact 15 | content: 16 | user_picture: 17 | type: image 18 | weight: 0 19 | settings: 20 | image_style: thumbnail 21 | image_link: content 22 | third_party_settings: { } 23 | label: hidden 24 | hidden: 25 | member_for: true 26 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/core.entity_view_display.user.user.default.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.field.user.user.user_picture 6 | - image.style.thumbnail 7 | module: 8 | - image 9 | - user 10 | id: user.user.default 11 | targetEntityType: user 12 | bundle: user 13 | mode: default 14 | content: 15 | member_for: 16 | weight: 5 17 | user_picture: 18 | type: image 19 | weight: 0 20 | settings: 21 | image_style: thumbnail 22 | image_link: content 23 | third_party_settings: { } 24 | label: hidden 25 | hidden: { } 26 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/editor.editor.basic_html.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - filter.format.basic_html 6 | module: 7 | - ckeditor 8 | format: basic_html 9 | editor: ckeditor 10 | settings: 11 | toolbar: 12 | rows: 13 | - 14 | - 15 | name: Formatting 16 | items: 17 | - Bold 18 | - Italic 19 | - 20 | name: Linking 21 | items: 22 | - DrupalLink 23 | - DrupalUnlink 24 | - 25 | name: Lists 26 | items: 27 | - BulletedList 28 | - NumberedList 29 | - 30 | name: Media 31 | items: 32 | - Blockquote 33 | - DrupalImage 34 | - 35 | name: 'Block Formatting' 36 | items: 37 | - Format 38 | - 39 | name: Tools 40 | items: 41 | - Source 42 | plugins: 43 | stylescombo: 44 | styles: '' 45 | image_upload: 46 | status: true 47 | scheme: public 48 | directory: inline-images 49 | max_size: '' 50 | max_dimensions: 51 | width: 0 52 | height: 0 53 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/editor.editor.full_html.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - filter.format.full_html 6 | module: 7 | - ckeditor 8 | format: full_html 9 | editor: ckeditor 10 | settings: 11 | toolbar: 12 | rows: 13 | - 14 | - 15 | name: Formatting 16 | items: 17 | - Bold 18 | - Italic 19 | - Strike 20 | - Superscript 21 | - Subscript 22 | - '-' 23 | - RemoveFormat 24 | - 25 | name: Linking 26 | items: 27 | - DrupalLink 28 | - DrupalUnlink 29 | - 30 | name: Lists 31 | items: 32 | - BulletedList 33 | - NumberedList 34 | - 35 | name: Media 36 | items: 37 | - Blockquote 38 | - DrupalImage 39 | - Table 40 | - HorizontalRule 41 | - 42 | name: 'Block Formatting' 43 | items: 44 | - Format 45 | - 46 | name: Tools 47 | items: 48 | - ShowBlocks 49 | - Source 50 | plugins: 51 | stylescombo: 52 | styles: '' 53 | image_upload: 54 | status: true 55 | scheme: public 56 | directory: inline-images 57 | max_size: '' 58 | max_dimensions: 59 | width: 0 60 | height: 0 61 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.block_content.basic.body.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - block_content.type.basic 6 | - field.storage.block_content.body 7 | module: 8 | - text 9 | id: block_content.basic.body 10 | field_name: body 11 | entity_type: block_content 12 | bundle: basic 13 | label: Body 14 | description: '' 15 | required: false 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: 20 | display_summary: false 21 | field_type: text_with_summary 22 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.comment.comment.comment_body.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - comment.type.comment 6 | - field.storage.comment.comment_body 7 | module: 8 | - text 9 | id: comment.comment.comment_body 10 | field_name: comment_body 11 | entity_type: comment 12 | bundle: comment 13 | label: Comment 14 | description: '' 15 | required: true 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: { } 20 | field_type: text_long 21 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.node.article.body.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.node.body 6 | - node.type.article 7 | module: 8 | - text 9 | id: node.article.body 10 | field_name: body 11 | entity_type: node 12 | bundle: article 13 | label: Body 14 | description: '' 15 | required: false 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: 20 | display_summary: true 21 | field_type: text_with_summary 22 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.node.article.comment.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.node.comment 6 | - node.type.article 7 | module: 8 | - comment 9 | id: node.article.comment 10 | field_name: comment 11 | entity_type: node 12 | bundle: article 13 | label: Comments 14 | description: '' 15 | required: true 16 | translatable: true 17 | default_value: 18 | - 19 | status: 2 20 | cid: 0 21 | last_comment_name: null 22 | last_comment_timestamp: 0 23 | last_comment_uid: 0 24 | comment_count: 0 25 | default_value_callback: '' 26 | settings: 27 | default_mode: 1 28 | per_page: 50 29 | form_location: true 30 | anonymous: 0 31 | preview: 1 32 | field_type: comment 33 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.node.article.field_image.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.node.field_image 6 | - node.type.article 7 | module: 8 | - image 9 | id: node.article.field_image 10 | field_name: field_image 11 | entity_type: node 12 | bundle: article 13 | label: Image 14 | description: '' 15 | required: false 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: 20 | file_directory: '[date:custom:Y]-[date:custom:m]' 21 | file_extensions: 'png gif jpg jpeg' 22 | max_filesize: '' 23 | max_resolution: '' 24 | min_resolution: '' 25 | alt_field: true 26 | title_field: false 27 | alt_field_required: true 28 | title_field_required: false 29 | default_image: 30 | uuid: null 31 | alt: '' 32 | title: '' 33 | width: null 34 | height: null 35 | handler: 'default:file' 36 | handler_settings: { } 37 | field_type: image 38 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.node.article.field_tags.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.node.field_tags 6 | - node.type.article 7 | - taxonomy.vocabulary.tags 8 | id: node.article.field_tags 9 | field_name: field_tags 10 | entity_type: node 11 | bundle: article 12 | label: Tags 13 | description: 'Enter a comma-separated list. For example: Amsterdam, Mexico City, "Cleveland, Ohio"' 14 | required: false 15 | translatable: true 16 | default_value: { } 17 | default_value_callback: '' 18 | settings: 19 | handler: 'default:taxonomy_term' 20 | handler_settings: 21 | target_bundles: 22 | tags: tags 23 | sort: 24 | field: _none 25 | auto_create: true 26 | field_type: entity_reference 27 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.node.page.body.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.node.body 6 | - node.type.page 7 | module: 8 | - text 9 | id: node.page.body 10 | field_name: body 11 | entity_type: node 12 | bundle: page 13 | label: Body 14 | description: '' 15 | required: false 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: 20 | display_summary: true 21 | field_type: text_with_summary 22 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.field.user.user.user_picture.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | config: 5 | - field.storage.user.user_picture 6 | module: 7 | - image 8 | - user 9 | id: user.user.user_picture 10 | field_name: user_picture 11 | entity_type: user 12 | bundle: user 13 | label: Picture 14 | description: 'Your virtual face or picture.' 15 | required: false 16 | translatable: true 17 | default_value: { } 18 | default_value_callback: '' 19 | settings: 20 | file_extensions: 'png gif jpg jpeg' 21 | file_directory: 'pictures/[date:custom:Y]-[date:custom:m]' 22 | max_filesize: '30 KB' 23 | alt_field: false 24 | title_field: false 25 | max_resolution: 85x85 26 | min_resolution: '' 27 | default_image: 28 | uuid: null 29 | alt: '' 30 | title: '' 31 | width: null 32 | height: null 33 | alt_field_required: false 34 | title_field_required: false 35 | handler: 'default:file' 36 | handler_settings: { } 37 | field_type: image 38 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.storage.node.comment.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - comment 6 | - node 7 | id: node.comment 8 | field_name: comment 9 | entity_type: node 10 | type: comment 11 | settings: 12 | comment_type: comment 13 | module: comment 14 | locked: false 15 | cardinality: 1 16 | translatable: true 17 | indexes: { } 18 | persist_with_no_fields: false 19 | custom_storage: false 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.storage.node.field_image.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - file 6 | - image 7 | - node 8 | id: node.field_image 9 | field_name: field_image 10 | entity_type: node 11 | type: image 12 | settings: 13 | uri_scheme: public 14 | default_image: 15 | uuid: null 16 | alt: '' 17 | title: '' 18 | width: null 19 | height: null 20 | target_type: file 21 | display_field: false 22 | display_default: false 23 | module: image 24 | locked: false 25 | cardinality: 1 26 | translatable: true 27 | indexes: 28 | target_id: 29 | - target_id 30 | persist_with_no_fields: false 31 | custom_storage: false 32 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.storage.node.field_tags.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - node 6 | - taxonomy 7 | id: node.field_tags 8 | field_name: field_tags 9 | entity_type: node 10 | type: entity_reference 11 | settings: 12 | target_type: taxonomy_term 13 | module: core 14 | locked: false 15 | cardinality: -1 16 | translatable: true 17 | indexes: { } 18 | persist_with_no_fields: false 19 | custom_storage: false 20 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/field.storage.user.user_picture.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - file 6 | - image 7 | - user 8 | id: user.user_picture 9 | field_name: user_picture 10 | entity_type: user 11 | type: image 12 | settings: 13 | uri_scheme: public 14 | default_image: 15 | uuid: null 16 | alt: '' 17 | title: '' 18 | width: null 19 | height: null 20 | target_type: file 21 | display_field: false 22 | display_default: false 23 | module: image 24 | locked: false 25 | cardinality: 1 26 | translatable: true 27 | indexes: 28 | target_id: 29 | - target_id 30 | persist_with_no_fields: false 31 | custom_storage: false 32 | -------------------------------------------------------------------------------- /web/profiles/react/config/install/filter.format.basic_html.yml: -------------------------------------------------------------------------------- 1 | langcode: en 2 | status: true 3 | dependencies: 4 | module: 5 | - editor 6 | name: 'Basic HTML' 7 | format: basic_html 8 | weight: 0 9 | roles: 10 | - authenticated 11 | filters: 12 | filter_html: 13 | id: filter_html 14 | provider: filter 15 | status: true 16 | weight: -10 17 | settings: 18 | allowed_html: '