From ec5aac4705b95341f0ea064b21c0979655268d86 Mon Sep 17 00:00:00 2001 From: lizhihua <275091674@qq.com> Date: Sat, 13 Jan 2018 16:33:11 +0800 Subject: [PATCH] Merge branch 'master' into cn (#433) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update /content/loaders & /content/plugins * update /content/loaders & /content/plugins * update /content/loaders & /content/plugins * update contributors * update /content/loaders & /content/plugins * fix LinkDropdown * 修复 npm 命令错误导致编译不成功的问题 * update /content/loaders & /content/plugins * update /content/loaders & /content/plugins * update /content/loaders & /content/plugins * docs(plugins): fix typo in module-concatenation-plugin.md (#1683) * docs(concepts): simplify the introduction (#1673) Make the `index` page more beginner friendly with less technical lingo and complex details. Resolves #1416 * docs(plugins): add “scope hoisting” intro in module-concatenation-plugin (#1684) This adds a link between “concatenation behavior” and “scope hoisting”. Without this, a new person might be confused what exactly “scope hoisting” is (because it appears without any visible connection to the previous content). * docs(api): fix some method signatures in loaders.md (#1685) In actual fact the parameters passed to `emitWarning` / `emitError` must be an instance of Error. * update /content/loaders & /content/plugins * docs(guides): consistent quoute use in typescript.md (#1687) * docs(api/guides): document new --concatenate-modules flag (#1686) Document the new `--concatenate-modules` flag in both the CLI documentation and production guide. Add section on the `ModuleConcatenationPlugin` in the production guide (as we include this plugin under `-p`, it also makes sense to mention it in this guide. * docs(guides): fix issues with examples in shimming.md (#1680) Rename plugin identifier and require webpack when it is used in the configuration examples. * docs(guides): add middleware tip to the hmr guide Resolves #1682 * Revert "A new --concatenate-modules flag" (#1692) * update master * update /content/loaders & /content/plugins * docs(concepts): fix grammar in output.md (#1694) * docs(contribute): update writing-a-loader (#1691) Use normal function instead of arrow function to fix scope in loader example. * docs(plugins): add external example in SourceMapDevToolPlugin (#1676) Demonstrate how one might use the plugin to host source maps externally. * docs(config): update dev-server open option (#1693) State the ability to open in specific browser. * fix bugs * update /content/loaders & /content/plugins * docs(api): improve formatting and grammar in loaders.md * docs(api): clarify fourth parameter of `this.callback` in loaders.md Add some lead in descriptions to the `Examples` section and clarify that meta data can be passed along via the fourth parameter to `this.callback` and accepted as the third parameter to a loader function. Resolves #1607 * docs(api): populate missing link in loaders.md * docs(plugins): correct example in html-webpack-plugin (#1698) * docs(guides): update an example in production.md (#1696) Switch to shortened form when using the `DefinePlugin` to define the `process.env.NODE_ENV` value. This avoids a bug which is mentioned in the plugin's documentation: https://webpack.js.org/plugins/define-plugin/#feature-flags * fix(markdown): fix overflowing inline code (#1701) Change the css to fix the text inside code tag which was overflowing the parent div. * docs(concepts): update concepts wording (#1702) Add "static" to "module bundler". Some feedback here was given to me on twitter to make sure we are clear with what these terms mean. * update /content/loaders & /content/plugins * docs(config): fix dead link to webpack-dev-server example (#1704) * docs(concepts): use fragment links in usage instructions (#1705) This is just a quality of life adjustment that updates the list of ways to use loaders with fragment links to the relevant section in the docs. In their current state, the section feels like a dead end, abruptly cutting off with three bullet points and no examples. While one can read on and figure it out, there is a break in focus that is quite distracting. * docs(guides): add windows usage tip in getting-started (#1671) * doc(guides): fix grammatical error in build-performance (#1709) Change "less" to "fewer". * docs(guides): correct two small typos * docs(api): remove inadvertent double verb (#1714) * docs(contribute): fix grammar in writing-a-plugin (#1715) * docs(config): add semicolon for consistency (#1716) The final code block was missing a semicolon from the end of the first line; added it in to match the other require statements. * docs(contributing): add note about debian OS (#1721) Related issue: #1718 * docs(guides): add output example to shimming doc (#1720) * docs(plugins): use `.includes` over `.indexOf` (#1719) Really minor but I think `.includes` is more readable to the unfamiliar with javascript. * docs(guides): use `npx` in getting-started (#1708) Keep the mention the webpack binary's path but use the `npx` utility now that it ships with Node. Fix some punctuation and grammar. Clarify why npm scripts are still useful even over `npx`. * update /src/content/loaders & /src/content/plugins * docs(contribute): link compiler docs in writing-a-plugin (#1700) While authoring plugins the list of hooks is essential knowledge, so a link to hooks documentation page should be accessible in the top of writing a plugin guide. * docs(guides): fix `source-map` discrepancy in production.md (#1711) The `webpack.prod.js` code example in the "Specify the Evironment" section shows `cheap-module-source-map` for the `devtool` field which is not recommended for production. This section should show `source-map` to be consistent with the webpack.prod.js in the previous "Source Mapping" section. * docs(guides): rename 'runtime' to 'manifest' in caching.md (#1713) Preserve CommonsChunkPlugin boilerplate naming consistency as referenced in the CommonsChunkPlugin documentation (see below) when extracting webpack runtime and manifest boilerplate. https://webpack.js.org/plugins/commons-chunk-plugin#manifest-file * docs(guides): update output to webpack 3.9.1 (#1724) * docs(plugins): update the source-map-devtool-plugin (#1707) Clean up formatting a bit and add undocumented options from webpack/webpack#5986. Update the external source maps example to demonstrate path stripping. * docs(contribute): correct an example in the writers-guide (#1727) In a section which states the properties must be sorted alphabetically, sort the examples alphabetically. * docs(config): improve formatting and add note about library entry points in output.md * docs(guides): mention complex entry point configuration in author-libraries Note that `entry` arrays are not recommended, provide a way to properly expose stylesheets, and add a link to an `entry` object example. * docs(config): improve formatting and clarify the string usage in externals Resolves #1726 * docs(config): fix minor proselint error in externals * docs(api): clarify the `pitch` method and how it can be used in loaders.md Resolves #449 Resolves #116 Refactored and enhanced the existing section using much of @sokra's explanation from: https://github.com/webpack/webpack/issues/360 * docs(contribute): fix `import` statement in writing-a-loader.md (#1732) `validateOptions` is exported as a default module. * docs(config): update devtool production recommendations * docs(api): remove obsolete cli flag (#1733) The `--save` option has been removed from webpack's CLI. See the following pull request for reference: https://github.com/webpack/webpack/pull/3896 * docs(concepts): add warning about incompatible `import` statements Resolves #1736 * docs(config): fix typescript setup in configuration-languages (#1734) Resolves #1735 * docs: use full `npm install` over `npm i` (#1740) Most of the guides use the full command, so it's best to stay consistent. * docs(guides): fix diff display for webpack.config.js entry object Resolves #1743 * docs: fix typos * docs: add tbroadley to contributor lists * docs(contribute): correct schema example in `writing-a-loader.md` (#1753) * docs(guides): add pwa guide (#1737) Add `progressive-web-application.md` guide which documents how to use the `workbox-webpack-plugin` to build an offline app. More on PWAs in webpack can be added here by future contributors. Resolves #1145 * docs(guides): highlight css splitting in production Resolves #1741 * docs(plugins): use `.includes` over `.indexOf` Consistent usage of `.includes` * docs(config): omit invalid `detailed` option in stats.md (#1757) * fix(mobile): correctly sort pages in mobile sidebar (#1759) * chore(vote): port voting app, update deps, and simplify config (#1717) Port the voting app to a it's own repository and expose that section of the site more prominently (in the header). This commit also... - Simplifies the webpack config slightly and allows external styles. - Updates issue template to highlight content from other repositories. - Updates some outdated dependencies. * docs(readme): reformat at 80 characters and include browserstack link By including this, _BrowserStack_ will allow us to do free testing of the site on their platform. * refactor(notification): simplify notification message and bump the version * fix(splash): fix visualization artifacts (#1762) Rebuild and clean up visualization in Sketch. Include via an inline SVG rather than an `` tag. Add a `TODO` in regards to an even cleaner setup post build refactoring. Resolves #1752 * chore: pick up vote fix and update yarn lock file * chore(vote): pick up another vote patch * Update index.md (#423) * update: git merge -> git rebase * Update index.md * Update README.md * Update .travis.yml * docs: fix formatting and grammar (#1765) Fix typos, improve grammar, and change ` ` to a normal space character. * docs(concepts): change loader order from chonological to reverse (#1767) When one starts to learn about loaders it's very confusing. [This](https://webpack.js.org/contribute/writing-a-loader/#complex-usage) explains the behaviour much better. * update UPDATE.md --- .github/ISSUE_TEMPLATE.md | 2 + README.md | 44 +- UPDATE.md | 5 + browserstack-logo.png | Bin 0 -> 36164 bytes package.json | 23 +- src/assets/homepage-modules.svg | 1 - src/components/Navigation/Links.json | 4 + .../NotificationBar/NotificationBar.jsx | 21 +- .../NotificationBar/NotificationBar.scss | 14 +- src/components/Site/Site.jsx | 10 +- src/components/SplashViz/SplashViz.jsx | 6 +- src/components/SplashViz/SplashViz.scss | 7 +- src/components/SplashViz/SplashVizSVG.js | 200 ++++ src/components/StarterKits/StarterKits.jsx | 6 +- src/components/Vote/App.jsx | 411 -------- src/components/Vote/App.scss | 228 ----- src/components/Vote/Button/Button.jsx | 132 --- src/components/Vote/Button/Button.scss | 57 -- src/components/Vote/Influence.jsx | 21 - src/components/Vote/Influence.scss | 19 - src/components/Vote/Vote.jsx | 33 +- src/components/Vote/Vote.scss | 7 + src/components/Vote/api.dev.js | 161 --- src/components/Vote/api.js | 139 --- src/content/api/cli.md | 2 +- src/content/api/hot-module-replacement.md | 3 +- src/content/api/index.md | 2 + src/content/api/loaders.md | 124 ++- src/content/api/module-variables.md | 1 + src/content/concepts/index.md | 4 +- src/content/concepts/loaders.md | 5 +- .../configuration/configuration-languages.md | 43 + src/content/configuration/devtool.md | 2 +- src/content/configuration/externals.md | 48 +- src/content/configuration/output.md | 57 +- src/content/configuration/performance.md | 3 +- src/content/configuration/resolve.md | 1 + src/content/configuration/stats.md | 1 - src/content/configuration/target.md | 1 + src/content/contribute/debugging.md | 3 +- src/content/contribute/index.md | 3 +- src/content/contribute/writers-guide.md | 2 +- src/content/contribute/writing-a-loader.md | 10 +- src/content/contribute/writing-a-plugin.md | 8 +- src/content/guides/asset-management.md | 2 +- src/content/guides/author-libraries.md | 12 +- src/content/guides/build-performance.md | 1 + src/content/guides/caching.md | 60 +- src/content/guides/environment-variables.md | 1 + src/content/guides/getting-started.md | 42 +- src/content/guides/integrations.md | 8 +- src/content/guides/output-management.md | 7 +- src/content/guides/production.md | 8 +- .../guides/progressive-web-application.md | 157 +++ src/content/guides/shimming.md | 4 +- src/content/guides/tree-shaking.md | 2 +- src/content/plugins/commons-chunk-plugin.md | 4 +- .../plugins/limit-chunk-count-plugin.md | 1 + .../plugins/source-map-dev-tool-plugin.md | 45 +- webpack.config.js | 12 +- yarn.lock | 921 +++++++++++++----- 61 files changed, 1495 insertions(+), 1666 deletions(-) create mode 100644 UPDATE.md create mode 100644 browserstack-logo.png delete mode 100755 src/assets/homepage-modules.svg create mode 100644 src/components/SplashViz/SplashVizSVG.js delete mode 100755 src/components/Vote/App.jsx delete mode 100755 src/components/Vote/App.scss delete mode 100755 src/components/Vote/Button/Button.jsx delete mode 100755 src/components/Vote/Button/Button.scss delete mode 100755 src/components/Vote/Influence.jsx delete mode 100755 src/components/Vote/Influence.scss delete mode 100755 src/components/Vote/api.dev.js delete mode 100755 src/components/Vote/api.js create mode 100644 src/content/guides/progressive-web-application.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index fa6f49039a4a..b5d199815e2c 100755 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,4 +1,6 @@ - [ ] Check the current issues to ensure you aren't creating a duplicate. - [ ] Consider making small typo fixes and such directly as pull requests. +- [ ] For the voting application, go to https://github.com/webpack-contrib/voting-app. +- [ ] For loader/plugin docs, consider opening an issue in the corresponding repository. - [ ] No existing issue? Go ahead and open a new one. - __Remove these instructions from your PR as they are for your eyes only.__ diff --git a/README.md b/README.md index a7cc545215d3..cdc73866bb6a 100755 --- a/README.md +++ b/README.md @@ -44,37 +44,37 @@ npm start # webpack.js.org -[![build status](https://secure.travis-ci.org/webpack/webpack.js.org.svg)](http://travis-ci.org/webpack/webpack.js.org) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) +[![Build Status][13]][10] +[![Standard Version][12]][11] Guides, documentation, and all things webpack. ## Content Progress -Now that we've covered much of the backlog of _missing documentation_, we are starting -to heavily review each section of the site's content to sort and structure it appropriately. -The following issues should provide a pretty good idea of where things are, and where -they are going: +Now that we've covered much of the backlog of _missing documentation_, we are +starting to heavily review each section of the site's content to sort and +structure it appropriately. The following issues should provide a pretty good +idea of where things are, and where they are going: - [Guides - Review and Simplify][1] -- [Concepts - Review, Organize, Define Clear Goals][2] +- [Concepts - Review and Organize][2] +- [API - v4 Rewrite][8] -We haven't created issues for the other sections yet, but they will be coming soon. For -dev-related work please see [General - Current Longterm Plan][3], which will soon be -replaced by a more dev-specific issue. +We haven't created issues for the other sections yet, but they will be coming +soon. For dev-related work please see [General - Updates & Fixes][3]. ## Translation -If you hope to localize this documentation please jump to the [translate branch][4]. +To help translate this documentation please jump to the [translate branch][4]. ## Contributing -Read through the [writer's guide][7] if you're interested in editing the content on this -site. See the [contributors page][5] to learn how to set up and start working on the site -locally. +Read through the [writer's guide][7] if you're interested in editing the +content on this site. See the [contributors page][5] to learn how to set up and +start working on the site locally. ## License @@ -82,10 +82,24 @@ locally. The content is available under the [Creative Commons BY 4.0][6] license. +## Special Thanks + +_BrowserStack_ has graciously allowed us to do cross-browser and cross-os +testing of the site at no cost... + +[![BrowserStackLogo](./browserstack-logo.png)][9] + + [1]: https://github.com/webpack/webpack.js.org/issues/1258 [2]: https://github.com/webpack/webpack.js.org/issues/1386 -[3]: https://github.com/webpack/webpack.js.org/issues/1380 +[3]: https://github.com/webpack/webpack.js.org/issues/1525 [4]: https://github.com/webpack/webpack.js.org/tree/translation [5]: https://github.com/webpack/webpack.js.org/blob/master/.github/CONTRIBUTING.md [6]: https://creativecommons.org/licenses/by/4.0/ [7]: https://webpack.js.org/writers-guide +[8]: https://github.com/webpack/webpack.js.org/pull/1754 +[9]: http://browserstack.com/ +[10]: http://travis-ci.org/webpack/webpack.js.org +[11]: https://github.com/conventional-changelog/standard-version +[12]: https://img.shields.io/badge/release-standard%20version-brightgreen.svg +[13]: https://secure.travis-ci.org/webpack/webpack.js.org.svg diff --git a/UPDATE.md b/UPDATE.md new file mode 100644 index 000000000000..14b8bbb3fc7c --- /dev/null +++ b/UPDATE.md @@ -0,0 +1,5 @@ +## 更新记录 + +### 2018.01.13 +* 合并记录:合并 master 分支 +* 合并记录:https://github.com/webpack-china/webpack.js.org/pull/433 diff --git a/browserstack-logo.png b/browserstack-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f1deff83be7ec942563310b7f9caca7950185812 GIT binary patch literal 36164 zcmeFabyQu;^7whMph1EY90I{PxD(vnT@LQS-QC@t0KwhegF_%_u;3Qlf(^O%y?5{9 z`(D;}&HUz%nU%BPu&b-9diSTRt9x(QoDf-Qk(Y2dZ~y?{rI@IoJOBXJ{d8;%^Wy2< z>#(!y=?AQhsG1!B0FV0f8w`+|js*a~HJb_u$jX{n+gsb2SlbYa2?!9{*jgKzS{MQV z&I@IU#^ahQy2DXx#_AWqv>cQIID(&4;Jy(}lSq-V_s)bDRYYc5Q=%4DeoLaW7ItcwGDluV4oS z5G4hCfU$#`2YdnoK4=jp41&?K1F+~4B{l)7>;QU0*bp(m93McpK*oj>K(9b{jrddu zlxqjfAp=7Cw}(H2eLMp5&L9^}f|y7K=#ry^k^-1`0mojoSdpYGSHH&O!J2X|Nvo^k#?nD>i>EzQY2vRT>4uZ!!jf`ask*&%YMjQ7+ zN*PMX8X*__xS?_oE49_3ypnSj?~56_SA3r>KRz0!oS87JAMZ-W%Vs-7E`Q@ehz9QS zvI-dvhzz9}42^&7)4}Bsf(z(m6=_x^6CaPRX_7BuOBjuVu`sU0J2=Pyym}QkhuU$i zMMntmt`t>Bjfd)_fPVL*ur{C#K=T7o{JM~-h6qrn>s?a_1*f*`9|!^Hgn&}?fnCT( z>emHhSp|%(A}+5Ybs>WRqha9R0kETAGN>X9>oKG8!CC|!%7VG+(oJ^}v4PXryc+8k zYJ_85qvi7F!SYX{2Pe=);6o~6De<@H*<+h5I6{=L@;x1 zOo*CMXhh5>{7e{KG1@|xg>EO3cHX|gLI>#uCco_Oa<77+hLz|sm=iC>qUtfL6fS+a z-)jZ(n4>yijPwSr&au5t=cI+f3`1STSX2JSvPx;=&}j74<*TJ8uNCAKp3K1hx3Uu} zXM7&8tVo@3y6&Vk^OJ!S%wwk$ziT8&a33Lh@ynJ4|Q_%={Cdx^hEf8+ax{f*`u;R$MpI0GSjG`Of3DXi(sqHud}`&9d|^K>R* zWs~RAl28r}Yz?Ni^RGicrrgf$y6J@i^&j%nqYDSExH%6BFczR19kCXz|2u>P@g&(F7 zQ&v*9ADOj=HK>$IR7=G6%V#hx>+3rl6E86iF%Abf*zl+_*g3)+9QQRRT$nT1mpqzv zT~E$QrU-U&o0Xg8nuqPL_Oz$)zD&)+Psi;YPIDGsiD%^>m1PxmNIlj*RD$(%PQ5dz z99<3Xg0Ck_8^)*^p5LA)32YAJ3xw-2>!IxdlGx>`<}nLP2}eax^y98Gty}iv^^=gj zAk!lomco(5PmYyhFTgI~l;o7+O-)JbODkhE2fk*QW!O&HPGe2xt-|Sk(v; ztK3jEQu|)rY8s%@9;!k&XA8R_mFYo}C^h^*0C8^S4Gw&R8zT+{N5KxaKnlGkM)EU9eqG+RR!r zU0=Jwx0$zP+0itmeD(V}%j3wykhRW3;IZVca$SF`=jr3w=c)C8^HBAG{vZP$4*nSe z2V59D13U?;9(v7>-?tv};`rPdT$|gPbncC_(D4njx~RRV(5ETc5?M794J;fC+!>vpTY9BJ zrNs3l(#%%cnjT*VoI9>RU$^_Gz*4;`C)*EcRZkPAt#ve%mUGlWp8od$QH- zY;>D0#mmKK4E)4b0bU976cb;npL~FvK=ffKYIXKlM8TOtiGl=Nrwg%5BB#M7&4%p@ zNgdOLOR9*v>4I#t$d8%xHH3=r>Tnfe9l3xVDI?jf%#kQH6t&x${=SoM1s3v-wwJIW zfus_)JR-ctV$u!M>guG28XNT{x49^4!KEyigBe+il*U8(r{-|*eMq4XT;r`ntukTj z7zA3m?Sj=C3-TrT`$;_GNS_`Jv8_^c)dp;PHcOJODpt!sYKN3cs?ApoIV-Idclmbu zHh+o#qE=E-QKg~Kymh~DU1u5K8UPgl!3+5?A^Sm|lxk0HyWMI$s*ym5*Rjk=v%~KG zN?-3J;Z;j)b!^3J$k*j}29F9iGV8CWSR5^FmuuY^^=b^x+Gw;j_QbzPoJl~}2U=P# z_b)5A9^PLDEYc;7QZCl`RSQ(*RdCg|Ius6$jdFG<8z_D)J1?>*{#>T6bMZdOX0~i; zx#jiM&LPG8*{1R2c-t4BFQd#x%!Y2TZfBP~ij!Qx>%S{)Ve3{rn>iBpoMD)lC4t@7J(m`@#%PY zy~LtUh7>R7L{;VbT9dz>)7UusiUZL`cYYWc=D33`=eXu+qy1_1;wGvJn~HilhmK|Y zmi^(iL*f2FOL|MHb>ml)wq4hnGB?MoT@CGqvE|Daj}yeBu`exaPAx}$%ln5Zvs1HF z2YAhN?T=f0%YIcsP*KNGp#&w|v~Ib#AGVx^SJHl@-%4NHUg)^t+@G&`>#lARG zQM(I!DPMkFb-9o3nHXI2UQ46fYR7V?@L<0z-jTWBEz#C!<+)6{(wP;0CH!LL({gyn z(y{dI(!*8FvQxNlB+pIsz1{)ng#1v(A&WhWv!mC`g{S_S>csqpb=cZ+MWCG*XB?j( z>D1620O$k&q$D7mTL`=}VLBUO-^r!yeDZQ~GbrACWX;@}1OQeMWET;U;Q?z=;9kZUO+B)2I(jBLAUh3^k>lx$iJtHuFJd0Jrz0*~ z10xQ3LE(Qi_at!>o7mgiaL~~?IXTffG16Mw8b6t{v(wQt&@nL3Jk_AFbFs45bEdJf zBl*+GKm7_0YWr|4p1NGES-XYF7MG8A$&w6Z7pPbXmj z`j;OY2V09j_!xlb3@r>TpG@qYP9FFlPr>G&7d!tl|F_flm-@f<-rm&cufh2@+n<{M zYG&wc`d`d`YW_6)BNYA|A+D$R;}Ebl)U&s?RkXIY;Q2Gk{<>6qx>9?JDrQ<{!naa- zAXBTKS8xt7O7rA}{vTfct?qL_)&{0VF8?bpf7SeVA5u~r zVpewcdR8DqF+rZEzSEkT8gMYO((8ka7?^1c=nd&-3 z=Wzb-5d7)?Z|48K4JQ*rt6zoxpRWF>_1~S?SsU3q>De0c89znHf192EJ~#jL`|pO& z8{ne*nXxTQ|6dpiJ3Yt$X9L0b6x-|u%=9#d2Ko#%OnPi=H2V5_j5G#DEKIB{AVx+I z=qcR)e=-n%MKZ`l&&t@)fQRm%efwv@|EI?8f0YyeZ;ai4%l`l8CeiaH?te3l{*R5` zpY!qGbK^hr?f=ZBTm~QxBWqhrJ$oKgOFd&lIvXovF1o)8|B4u{zg7_eYYS^zDQg2m zo~KpmKNbH+tEXGFvVY#G#&pZWUT$TJ|n z7JuXVHJ@kN-?*Lu`L*~P*RT0J)BeWw49Ks=-?)Cw=b835u4h1gE&j&!Yd+7kzi~YS z@@w%ou3z(cru~iU8IWI#zj6JV&ok|BT+e{~TKtXc*LJqT$gjoUxPHy&nf5oXXFz@}{>JrdKF_qj zaXka_Yw?@Cz|PK1Jt+gAAv5LlK9Hj$*s9hzz#^W8t{`7-8&qs8@vZvEjkp;Ne0H zEZ1Q5U~ABGQM%!s*VrHn8^CRfK`v02o{yN4++UWTU(c5;Xl#i!L-yj~<6g=l_tn>l zB}S5*A2ZG7u2yVS()VUZ3vNjh>gzUaxQGJ^=)1H&J!>{>>BtVeJqDd5V0-5C*lcU=sS@dq7%B?4YYr-xU}=BbIj4Gb3IWsdnWh2Kn> z{X#Hv1_*BGRR*T>HYJ8RCMM3H7qPaT96QANm5{YgB?D(Da^9egsEwx2K?*l%ivYvx zu#c)l{s1uIvtBGlw4hM;jj5~Ca+#Ikg`8aTuBY}V$u#OMb~Rz57$m&yyp2iNQDrLL zRfVTweIVoF-p!GCWd>dbN$OqQUAR|I49J(u;TMFX1fNLCxsV7j(wv;Ku6F=8&bbd$cLH=RN-KVX@9J3jGx6ufO#B+7LM7KvDIISZvF+pm}n9Qm894^x5zI5R%t%;lGIID*u6N>!b?ilM!* z6jb=x!Ca@Z;Fd*L8GeUta15ud9kL@;W3TcRYzV)>CMa-|IcwG_lMt7>Rj|;L~JDi z)9GmxJVcmS$A4=MX0*Wc11(sVgc!L>m=wC9EZ`(F7VBgR-$W-HVglPIQJJ3G=irj? zvwu`VFg{(DPK)*4-8XB5R&KVO{q^R8_FQwb&mn(=2vIr`Cg2Dxlk@g1Q!jYko3Ldq za_>wlvrSki;>lnvK?E^;Gb--fH?fT}(e|*htpFWdv~JOLC8p)tegYMPK<2LRkR72Y zLIkzs6PfQEU9y?h{1gPE5~K%tYaSH>BobTY99_Kfh6Yt^E{6U9u9s%ua|K}yVGAwA zM&%n9YhaGipa0(LhZLHykIH2BJ9Nl31~F66yBo+Tn*h??gkCLhCFGB-@7!?hBh;y+ zdkLv<)Ml;~;H>527K=Xd;wU(?kzq|bE8uX6!hx%uPcRGZ2K5MPP#N2|nd}UA1%BIC zdgFo_^Uzd-_-Ff!(qKHWBhupWI9#X*dHCb+-V#n3JV<$~d=5?})7%AmgpNY`M1JSd{;2TmTNK-@u7VQ93*H z6UUt!M z3nd%J0H(V5WBD1jn`2;+9fVm)ehN}JGe5$1@nb&aak8C=DDLX4rNl}WD?7#>t1 zy9I&)GNN1*V0@*JA%Tz)GjKjGF2voKI27*wpR#MM+gU+OW|B5i;KZLrv+IXINAIEf z=_GeLfFF*?nHg@G#N=`(;@dk2l%#iDC#%DRl$Sr2?2W>-Z>1(Y(cr2JkOgFcFWY<~ zXSo)#tm6Y_T4^3Cdb5^Ig7iYQUyY17>tq7N zbxJXSuY`_5P81vcPI)(x1g-6Ta~sh0-UDp|&86er@;JDxLiW~96>C{eDQuF&Wh?Q( z20NIH|C^fsNGgQ^Lti&0(&=g47$&Cm$LEG04s9uW6k+6-P(?>1r1 zd1dYoU`Is*;eEjI>4(50zOVvs%kVssOT4+NA+3q>v53qm6Uh3?Q}W)L*FI=SQAXN_u`6?sa0rjVw$?_AJPOf$M~5 zV|;fciNXg)%mfBh*zP~@ER!+xATZl=*ME=5(Sos}A)f5d#lt=dLIoXE^v3JMkV48w zU#ZU*gOA$2iZtx-d~w^&ef{MY3z?N+=g2^9*;ooFp_6?A>0eAcBkV_QT8l(7J}$?; zY}{u&WWSPzyv;qti_PbFi{@zu%OSSx{dp0En7EXSD~ zgWymPcN5S-NlNn<3!93rbizuRQr{~2uc{3M6EddUnv9wBozzgwr3fLl_{f7kqD&uu z^gWhahO2GxMe!h0IEg@zxr?XCe>JcXhC7>&J!FQ~Z|O=1L++z1DaZbVYq44NB!$6) zRcI$X+kVNjHD9f|&?&DVSA|dz(V2oQV&&)B(b3O;?HNv0*@e%fNNQ%T8)^(qL9AL- z^_X9ImVhZAM<)_M4o-xPovRp-6(#tU5d)R#lPY{=&g8(s!lJ%3PoS`dim9&w4zkIl z$WBMPsRs_J&Q?_s4VN~pt!9z|s3Di!TV385kMfwD>1kFDWTAz)QBmJmMZA?xewe{; z-BfGM2Xp0U0`F1*GAm}JP5+E9Z|Z(xw~n5#I}<<3%q25*g;*qGqLq$^rVcz@GHJYy zU56exWhcd8xTTj%WFtYIwI%&{Jt*Lx+@QAs`zPL|$dKLCLRb(}Cc=u{+UPYZec^ll z)icnq9vJwe(O2aJ82H{w>woon&C!UQQ|O|rc@o#glU5Mm&@sk-8JfcR^&Z+KP$&6~ zD5;rS#Am0=ccmz5u>DGRu(Q)oE7|(&6fqar_3X3^x219v)+LTg*d%xb(^xxIQq={s zHIX=NZ;3LBet0^0G7K~8K~YuShfi+c6o{iynD3-v_{*@RUkTUg3%-%06q4E(Xs7c@ zk3JV0%s$^q+Oh_lK8Fm|?(Zwvy{NW70Tp}$Z-{UXpGGUZGOd19yqEojVi+eOXsKe1 zL?YE^-)!0wD0KJ%)^_|rL`b9n1<191#QzE;*K;w6Pbv%VwFE6AbU3rM{KgM@j-r135JkkZI2R(1+U z2P?^hWZM+nUmb`~Zb6(&NIJ|NRhKysy`6W?gn~`ht3(J2{ozX7>|!I&fYZ(R0@W3Q z(V7iajgl(+v~t_Q!{I{yuz9m);jdxSNL32SNo|GI~ z$sr!=HV$nipHm3P`hJFmNVGkwY^cT@a@nGtR9H{s9Ym#Qjm`XB&f{H6#|vE66?j_G zUb$|2=Ki?y&Z4KRj4MUN_40Z}>Ttv~1RoJ+2Jxa$LQ%z`W_MHtbyJ2Y8J~H9qBF_Y zO_;x4ni-?(9gIIR7go?$4CVQlUgvk(!7dr$&}jbeOy_V1zG{|KF-yaI1k;lIl!Q`) zAQsX}o*cZob&r2rER3-KW;soMT3Ot&gC&SoJXeD}xLygl4?^dlKR!JT^JW>hVWlZ8 z%HvE=nRc*cX8(zyh!_l%Q8`uCkD`g4dmhC;B0E2ZP`P&9v;D{DUFL0+aHPeH7{YZ} z{3m4AOvFcF0>1j-gp;XR0nFc#1me-(t-0(F`i*VL^;s#Z&=t2Ft(MIB4Pj2EP%j`M zY8Bxhmj$SP4(05oMCvEF|4b5JlvK_hoW*tjRzSvJ>_*u2CWW9&=tz0l2EH2rSdUa} zI05HN-CUAnvRS3bnjZN5JIU^zkZFWUD%Zv_BaD7d6K^?64m(XUA=kpQgH-HbE39?ky9*XyW~SvI(wI;U`gkRLZX_mHtEoDGPLtltok^iiXn z1B;G3g3S(sL8tuLuFxkvaPw}~InIj?*GON5yZzJ)QZ7urdwCt3vrIiyl>M_C%tY=` zHjaCR;5DD`f}Mh=l>CXVWAW(R*uQL+eEPn`JB(9GISNt$hSa^-XQc>OO_KXG!$zDo znghRtM(_h$Yvl*R!xAeBl~DSiPrS)W5TWkO#)p}H4r&>c$31+wt7YN$7w;8m-JldO zb@;x1;T-0e#*!&`;fXC|A7VOlJ)kgE7(L4?qETTZ-CbZRrjyN{uOe4gLa?5|jJo~e zJe?rA={>lI6+t)Z&W3j|_X^ya(?Zj+4;@8>(#_YXhS+iE^3A8qyaD3LUEH-VqYVX< zZ(dVy7@NNFYVMs&F{ZyeSRrKO;*cmj&D0&R@3#4(>UZHAkK(%|)=i@KvSQAUoD@Rm zk+hBA0n}T@OE`i)vE&gw=u6;z9*+LDw=0QBnTYR&EmUm#o8Fd&n8yZl)zit6!6WDJ zMlTo|#8eAia62X&9YrI4W7$)#J@{UjmhWp2sJ?5dgc?rFhDv#G^p0wgCdB-fW!*WZ zgaj5&^slacL#imV?kAOPeNcZ+1~wdiXP}K$N!jlE!LM}-Lb1_krw1(?47FK&q$kv2 zbd!}W7SzQ*-pL`s)NRF7is#P>kRhm@4qnCFcMk-Ypii$d_@D1McT1YvR|QqJAickm zLU7-pv0t%6ZEo?poTdL_R#3M!`H}za3~~()-$kbr!>b|Kue?N}AE!9O&G4pWr2{P$2Pkht$I;KT+1Cfmp~UQL!9V&hZmgX8TPRR6K)9)J{#HhZ7A03 z*C2O`@RLCbGC!`9Os(_#!^OADUa!R-KMVBIBm3fsg|wMP3*tw8;M(VOL2`_T;vA}p z;6d>l>%3;?scTcRS7L7dX5BM_&C(%<9W{RMOyxFE4B2i^GyAlBV1zhs!z4kdFx>|h z=2-X{Y*1fxl_+C*&II%>abM@}&hw(uqf-c*n<*1n67UI`<72*(p$g4gx$ zMKIr$gd7+c*xmiUrR8;LtZBQO-}`<<$K%-VtNm~pLcGMe=baYm(F0n-1^Jp(_*k{1 zIfs!1wJK&Qe;lybTE>3sBSGf5YNo`of0Zo?p?T`(d9XT8{^>|cTT4W(G$pTFrd6Q{ zcSAQ6XZK4HVVGG2^wbD2NN5EO4rV-K_a4~(a;Jc9JQ<{Kvr(nK1b$48da9qA_6zbAu}jql)6Bg>Gw> zlEG^z?-W0Td^yOS$@KP+>uoRBPSn1A)0%b1D(BQelRnb~qfCkZb{(6mrM?k?0)&MWiOuK`;S()~_@hiEkb*w=EhxP+(38 zrIgMLvA35rn))O~6Yq0JUZ4}dUO6)O9oVssl#HZ#plc1J=kRn$l5J&yDMM6$@*K1q zngYRv)hg|(cJ{YSm4OQ2_Tu*TrsMI7SxiGQdf&d!5xA4Op1u8;xn+k^@qPnbX9Ybx zCju{u|8an&LynTEKfPOJ;pOlf;W6HhEOQgP57nOtg-=%{#RQgZJN_YHB=071@i znGC8qvZoQgFrrER+l1k}Q4t;n2}rO=-UsI~wlhfme@D~P$%|u=9tELla`DV;sjz-y*B2iqv5+5`{ zp15DH$Z6nyTH7*I9;y6w4GjFlXq$so+M3^U9_=3riNkga!18?;c@**-0Fee{Lfpo` zx1-Vv1Zp)?#CDTVu zdXH=s;p!`gr&J?uqXRziT<~V6hRz;0Yykm3ol;sDV%HwO`k}ycNQhy!sc@IH@_ zk!l-mh7~pA=@^p$OLu6UJ zaPBCK==6~(wx3kjG^0`|8^h0Uu35pZ3LPXUj%ICQ7Gy+;p2`udBEVzkJxXL#*>ngG zcKHM;l>|M&7RrxwrTDwwlFql?XR9&m#Homj=fBz%&(Ep59`w4w^hbu|^RA~P@h5~c z4_;dmMNexLDU*U?PYu!+AA!4!L!lm>(HM{&HqRA}ld|3$=Nh@X6-f?ei?MS02Kr2= zt*^yd$TYuv1o3!)uRRbKUgwCM)Su+d3V}+IwF2WlrtXLdVcj`$GJ0N^RkvuvC1#S( zP&mOByDeKIz4*P-(@K&mej5cE+u!P|itD>B%o=JuqBpK)@r~+2p8{a@a%6RH>n*=J z-(S=$BlSd=RJ5nId~Xix>gs|Zc7BJ_iZDMwz^6Q1Ahfl{#Fbu5Kq2V@K+c5OF2W&{mU~)SmMhNlxxJWtkm+$mWcm zR(UxkPkeRA-%FGlFdE{LDIz0-MDQ5owaUx$=;C-V*X1y)Jv^*)$i=TPnMl@l#-s{#d;$oXD;Q*Fr7BuTe0eAIy9!#dBmg1`E+U zh$6M_hSdn&_;&NGU1&k3A918Otd>S<8w@eBkErsBVdK+QI-L0~MQR~RnbkL7lN;Er z%)x3Ex@m$58vP|{$5E!o_gL~Np9WOwsmKL9gp_bLwl6{NO0e>YImc(RH%;EYhK_=0k!P4#LE>k^=u#thj27+E&E9k-YIk zbvA++Z3j?0TWxN#V}@4GadU0oI8oK*ZlX++H`)8BmJB&BzBF&-6GU%VWYqW-?%-qw z=h6pd6=j5Lq+!vbCkZs9hZi)sNjWE-?_U&I1FLYc-jA_Jxv)+#wkz7=oi)$L$GPFN z{oba#6S}~MVB*1jZwd$|b}>8A01;p=hSZqsVwDvUBB&infkJjT#g2FYQ9lPZ1`%eU zr)9z|T0##yf#2`YIH3J_3#0%)M3ip!S*hGkpLVEa4sY=+c=63va&NLI*))LG&9Z*M z!xJ9$n!zdCo~hNEe8D3t^)w^h(hF(61LF4J&c_2kEM= zX;j$);5p3GVSbqHyoG-V#j@zr_lTRrw=3+1aFYH&=;Pq4MW%|rBr z=R~Ms=^Kew$~M7pLWPWaM!wn{-(1#hh)L!3p|f5}V`Y=m`OFtb_uNna@4WqG>zrdc zLB5O4L>731Ztkt;*KDxuLnqHdu>l6B+DCXvoAGUh_9-a$(Edq(Ry{b0+9|>nggZ;W zE1j_8zH8R%uhiv4DmOGY!HZ!O8IQI>f1VM+6DHtJz43_TFZt!*9F zJ+>U!aTN=}!`=koM_rBIUqhX9FFxENt`2wV*i0CvFrAQUg5RCea|w`xtu*-gmy_K- zrh8m6)~no;9S@Op-z;8YvkfkvWk-PKjRMwclF?$Nr6R))9Js@j*|(sNZdJU!Dj~Xi zx(MdoG}G<8S`NK;8d5U~E%bKL7wcj2+bnAmGos_~80wsHiSDMeet;{Zk+Pdo3znhJ z=MNBacLek~Voj!gaDsIPV+5ALWEt9qb4`(2N;dSFX%}d47Qu_eBJ73%Wv18!TT4Rr zck=5|&B^&M!6m<)1iYka_* z?|#XR(-QTF+lW^qKGMu`#i&~`2yJ2P@UpUYbj4#nbiu_kl<-p9qZ834^GjeFO$55K zWJQjH;w^H)f`kX!_A=Q@M{17(buRpR>|y?mrpL1O3hnJxG1_>aHOLI$g`!aVc+Db& zEQx){H*w*j6QLmoP0v^f zZoEJbJ^evIniqh1ir& zvBEnX$*XA2eyLCO!I*B9qxF+x{{Smil1E*iXd^l~XePy?m$6J}Vl0?5f{xYs z2xql|t#R*@`%XQ^%n}olw>rev37?Ow-ybku&Efo+(+_YjFYDy!SR z3c5_C#u(%(%aI=fdS+}DNgdjz;3?L>s-xW>b>_@~UK%}S+Fx?HA=aKw7Oq$o!aD7Esko($_=DwYWXJr?G zH(EdJ$a(rzot$CC_&wzUZdghSmWA$nOX-`@uthYr`44ezwS7k(w>GTb_z+)iHIBf| z=>wNO^o*&)Z%hl#$-KDk=c4w<%}64;^~ZZVa?G3xZAU%O_{o^Md{$%FX%PIyYun7j zdbzgGQp!&sF!7SfadY;J4(sZh{?{wI8aBhjOie*5r3?caVDHXrQIix9Z)8r7E%8 zpx!81-i1b$Nv9+U7-DHz0a-wEGBQNaGh^=y?Gl)@1)n%dZe&ziRT+^iMO<<%YhG!a zh(te@bY0O^mKWnm)w_tjCYdwJn0x;r=*p|XC*Zi9Z1D$nf88CG+ql~yJMXBvq1{q8 zCw<7;qC)*uB1U%|Y@EndbX#NzkdJqpb=T_wN}DFQa!gakdG|wfPFa%_P{lMriA36wwu=^z}-?@=EoWP)%ESmb`^++k>wK2 zrCUQcnoD&VDT}Nm!%GL(xOKOD4-9LFo%j0VpOZ9g$n)35^mx9%xBf_1D3#ihtIWolGRXo{Idrx=t?_Zy57A#t|FN~$oB zG6XQ!Yh#ol2s_-HxN!G=(`L-ABQdb&pK%zzyxL@>{ZM_X+PcOqN!2&i?8cr)-*umt z_Q|=dP!KXY#sLBXHU-8P#@#M_1D-#Y%}o%$<#`X@))lg z<`)E&TI3W?`ZGx0x{QQcys`XbKr9p0x2waWy`<3_{ZQmBi|w5yn|t!VT|vuOD0UT-+0(DU(~cL2-5~hv{=*s%I7Uvw47r;?3oPF*efXu zL#~C$-a@rGgJhE#N4InqWO`;E@rOnQY}c`{kO8E9dBqw!QI}V3r>bV#I-zf+P$?n= zZN7wB-8n<&B@CPxl;`^#z}HM1`&_uZ+0YNkf>GR$5y~Vdy9MUYVh|TZEgQv%I)(b>Pb&>;7{GC|eUuiLKw`qvVP&sSItv8~f?o155SuFKD zf|p-@L=P(PN>4dmVmKb4iCouP1ts5n;;p4!3QBcR{z@lIyq>uu?gAe zUQm>y8b;{5ZhY`5-rA+1Ft zn#ytN&u42I<9!#&)3HW~d9_!Zu*`INn!_DCtE_3I=(E9ZUM{y(54Jykh`7K1yu30@ zACq=gEwlFmS%-*QbjK`w*ln59{~t66jTA_)J50RnN|s5jq;G zvnGe69i^ATjyBaJ5#j@_bO@436x&IYgFi|6(c<>SM+cy)h8<(1irh{1%BPHzKDtQt zZY$KXuGl2ub+LS-M$D+WL5#qgqcXuAsUG1usOfj4$bF1OyV`yu)ms)rUpQLgprNv< zUllJvVzFP==GYY3e-kCdA)(e-AJL`Qa!^m(I$S1_Q!P5XUm{g{n>X5Hsb0*pi!!nD zO&3{%svpBfE8s%VCxuQbEzc90EZ>Mvd=a^VN~14sgc5Q=5e%}L4wxh(Z~*H{_9`(P zmTYePvg$RAL3@6*p!if8ie@Xrz&j@C@%##dK5K0;CiYO}&_3F-+yL()SO#ux$&Mc~ zux^R;T1C}WSjRJ8v=9tVxwve(znDN$sB74Z3&?m=ye{OsMV9PCBj?+^cP!stLr9P^ zLiiG|!f8N1IJWKBcr?l+-DxdUsF- zA=iW{-u8G|^!TQV)YwHvGW*Pxs?V}_iW}{OOZ3-%GKd%tJPYI65bun+E=PP0gz>(* zsBSnuSWa70bM|lp@ z<`N1#S}<<#B>F3gxBMS{N`>v;?8p&pn)_k}UQ*ntR+qR#n?uv)P}TU-r?R&)xMxD?rFhp+IRJR$bqU5m$QZqErPAiG&p^EWcckvO%dXeF{o=hW51cb zy(9~7N@JeW1)A6ayMw(<@|{k2_Ow&-BN3!`G5IgLoqv`&(Qi zxI@ikNK@qWREo7}S&dF$BnQI&wV0~(0yQS%O(@lHjF^+3mRyR^$4{ECXeD;9c>`gy zUF0B=rewD4`M2|N7iUvdn-=L!DI%QfJxtBHXAXdeT^mL`;VGQ=LSg1L@#obBDjHzc z=%cUa9TR3Ql^tyekc_#*-FMq2A`0e@+N(;F;ST!zs5k@77CElx%yup2Ad?M zI1!f|`h2a&(N9I+B|Hu~fq#DOOu6wIS|gVHo)%MUCPV_Pi-Aui+ca`##>P z%i@MtWT8Vlo{DIWJCw`;^?m1%4;ydO-N`tYPhcIhuDBAVqfQHymhQ3~+NcLb#hb&H z;u@+v4g%|=Sf}ZeC(o~i(dx)QeMj2GnGJs6;;`Ds=F!B^tM55F>haHd%pPE?$@6ymh3H?E=0S2HbK~k>jqmJbAL&9UYAnMWS zk9{I=#H0iCqxt);&YPSoJ%&e*B8llPU4@Q1}qh^cXR_>0f zvHU|0t}wmp%#VS9tv)E}WeTXcm}_$Z5r6*5p;kKe#SJbNgb55J!lq<)_)Ipq*a`@p zp<4uv;jl4fnCoPQv85p7jT878UDI^^;qr%jM;5rfJ2lZ^5m&t>7uI678fb-E)DcP~ zB$m0AHx6Efqh9VEFX4CUk~J#=)baL#U37L3D$^(?AU`hld5G4SEiesox>KI8dad?v z^jT@Hua<(g!M*5L2v}u4BDI!jTkA<~`EC|}^?{}Y2cq?OA^{Ik44Dh>7&gYv&J^v0 z`b#vfH#5iWw)PrUhjBxSSq}63(NoO8tJS};t$^;)lg>uMGJE`3@4RoVu7PP*ZJ9-r z9-!Os6g8%FAY_)yXc_B~}(q5kfs# z%^YWxTjHNNvZR<(?ZW@m4P=*+@_~a)2?<_4M0u!wa2$BW`Lw?8iyqsV-A8f6w8ECgHF5Q6l^`1%Er7>~ds-Hj~9JqHwBl)l-jx&y= zEE;8>G3*BXK3Y<$(lnv|#cdjj%y^3;;#L;u zhY;^@VcIacH)7O~0&b|%&TJdT+gopiwGJ{{GoY^!ZT3!Qi41&H6Bb<~;{$Eu3G?31 zY(YeJ>?LU0+`!L0e)5wHN33y}GP<-}$n6#HjB5n_;f?zYTs)<`h9=QGA`(^T8 zHAKouqO~k=U9sCoP>LvXBa8oU`x;yW3y|8B|?rN z?%cs-#C_ERG}%I9Qz>KbW2$MCP(R`Fi{dX|Db+`6i>x}$Z|12ttP2Ws`8fy~!a*27 zHBBb_K#My=Kp8ldFWq%X$-GMvl!*(}SwAiVvh+lfN#(>rSF0UP8<_%hBv87I=lX#v zy_dEo>I37zT|~Pn$Z}$jx}YQ4PG9LXmG~Lrr$2FVA&Iy<#YNPq?Ey-uZ4R-uSWM zaQ}6NMQh*Fhb$tL9bNng`&3Tdi+4VbbIfe31j(bw82d7fSh|JRpjd-Y$eZqrtNC%C zt8%}_gbBN1?&QlPzbrfnnTSX-?y`ttrf@DSm)OkJpco%ZNOTYHcG@dAFZsd$$OoFB%u#53$MCT(08K_Kc7P(!%xW5JA0+veW%p-;3ZzKOA9=; zS=Rt__Fd+;VNxz|#ooP;Ay*F%#Pov}L$YTt^gHCr8x)us$*@I@=;_M}Q-ijlWwkRY z7L{DT>1SPpcA_QPHARKz)62Ew^(%T6FYG~nhP8W><<+~EMZ$xdZg4b(v_lhB#)WGeX1RnyQt{H#K|8g9>E?l)qfS-hCIl6)Xt6aj z{ps`1a&r;ST0vlKu(pPRq>$P$>`*&s!OcJo!wFd-8Q-1lFu>x@Nie#*}*b{b7ic|ksxB~ zRTG;Xi|%qOko92qeX~Tk0M{N0^g$1ben|>)8`eDA)R7-?f!~GX+%%BH>tVv@2FEzi z8qtoc%$#Lx0r$cwjK$Zqc|9sn5dw%q$%SHcF@!sI8S9# zJKSceF2IcV@-k&jFcov%s@E`CoDe$_v2f0<3QXb64%uS=cFV)+fLPSR*YOEExZygk6a5niMvfBytc|9%Eu8JqX)y!C5m`{?_+3Fk$q=6(BuzB zsGok<=;yfIgqX=sj7-Jf`;MQ2O09!^``Wl5JPaT?bV|46Al)qp(gR5MNJ=9$beF(T0||IzpR z`}yqataY8ecAoophZsCRZ3dgn{VBjA_gTKK=}d^uZi3t@FG%{bQC7A%y&{ZDE)mL^ zM(p9`Z(v&&fxY@kR#fmFVWzF^=n780W~g(0!45WO8Z1vzAm(I5+^;otDUVcN#0X)2 zk6_v&Yib#gU*_~^9!p4{+7<|!j(Gl|V?>Ex)=%WVZMNAl((6^mJ%6#xjWpV$tQ}Dd zx$xf8ZKKW+sF##E7Bhm~e7mF_?=D`lzkrDw%2ock&2}_+`yO^Pe`SvIyiO-z$D;+Y z>ijFW(tVf4dui)WoqOyI8M`x^p@n0H3yA1Qb9_&Z8-SZ7DG?wMrtDQ@$-F?q^#%`_`B`HHU1P&FEI?mrSW zoG|6t6N}R3T(iS#jGoW8;Fs4Xel?J2Jr6bToPsBDDLY2JZ0Q?63CrUH2d;LC=G1eF+9X=( z!9?QicwI}Y3d}(&2cLtA9b9ntSM*Iu)5@c%e|Av+~1;J=6dwBx0YN>mBlxM*s;AzT-^?y8gq;9Tl-8O^NcmS zgb(0A7-0MYCR1WCE+J!|(%0L?mK`;;Y8Au$u1^7SY;#HTA*<{cX2bcTcIu`tS@Ef_ z3)bABlDb2;64~+@#nrD!1lHyoYwq!5t+lT00PPulOv65{aOAP#$!7 zoS-us@~FFX#CN=ZDseKC2?|xXEm5yrQYH3h%>Qya8>v8Gw@W=CapKP+b$ctR`yOgC zQ@#j4Yt|C89r|%KFYfu0%Wu@qbG4Sk)?mX|vF^2sF2Y7JOMcjNeRF_Y&WD+^NEbP9 zc}6`i>5KK#m4LDmi@}(D3XZh2Gx?->B3Pz35&KY@c`|>2Xy$T(@z1Kgr7r^Nl^wJW{ z)toT0a5z5LM7T;t%4cL6y&L^>zp+9tD6VL+&2Y@j@-tWHh5GX0im7E~uar3Zy>Km) z#1yBz%~9|%%cZFAv{B+yuPV0!Pa7{IUHOHOt;B4@dHTk&C1=Qy*Go!;$9h`pj%E!4 zy)shKc5|#CUdPh~G4U_<^~_*oueS@!>%lJmHq0PMvX2iHk%x#TDfX^rQh)eI`q7&8 zF4#~7&-p4Z#|FnK6R?Tn@6afrim&m#7XQ14`rJE3u`d;RyhQb@OZ!(Ky_)i6T7G>g zkUxZw*nvly1HIciM*Caj*L|-`jpdPt$$Q;yi?Ae5n<+71mrC}^?y!_%P=4m1pT`jZ z?As&4sK1+|>~*hQ#P%lHk*%s#sg_+9LAgIde4WDfV}tZ$+x+K8rrsH^k8lVhVTpHD z8@;!P*u7e8q$7l%|IM4mW(vqkU&GVM$%) zAmN?Who7K6I35I!y}b9(A1KyA``%DiH|gy?*{bwT%g#4%$-L_BiS4NW3wZr+v%xO+ zhzCZK#=Lp7P4VmxC3%-+$Q&0*of*YLa(Jrc-b3<*_MJ6{hgFTE{m3tp3nZA*pfx!+#oMFZ4!Wq~YvfK{!xyxk>N$ z_Uu&dTMY(7HQ`;hgR70`XK7*c~cYjfdGS z>J+Ire-{mn0by!z>?Bi1gKtCm1%TMeSY0)A0$hF*N6~A;D!ia_u&soY_mS;of*$r= zq0xmsaqY$}TVi)R{r9bJ0omahADd}`(B)|Vb$xZM?mZ3eulfV6g|kQ3HLQ7!ROZu% zC(?jcr{u~rJy_GQP$0eFj^701(Mby|=DB~O%q=#*>fB3x4!r=rr@LI&lyAU*=nOm9i|TKOASVyCs9vq$qjeoC|~hS zoYn=7^wDX2T}xgdufA+4+)`rPc=jBl379UsRseCjsx^DpeA2mDE4?_lQq2j8z!@p; z?nzsca(c`A_(WoIqs3vuJ0RAT1~tINr1}p1@{UsGlmCeCE+NVgdN9_oxrV0PM`y+` z?{QPmeaew*M@+O&>&NiV{O{^#oy(Sb`PHj>u|gUJI`%>Hva2ANOy29;;w5zC_z_IB ze#c^II)l4g7&80on(v5I_PVNmHpq@HefOes2m!9cKqS*1xyllq|(zfNHh<09xGcf4W@<~uJI3gFY{+RS-+4`RJCVnXDO5;;u(R*?Z z!E_6C_Zrsoq2Qf>LiLRvC-N=!k3zCV1W^`k$jMZ&L?)(?TEFh5n}-n8t#tqChQm@J zowm;w^g*=v09{e5YcC*1#~(BURSvX^2hGJNuaX0ISW3x~#RDlHvk>`fdQEyfP|AJ;pZNh7h`D%-bMDWNJz>_1A)?+$_~%TFi@m|A1ezIY@~qv?jLpcR zX&&CcFD$;=2CIV`2Ww8Xiue`o9Foosoei>HaU&8Rirdmps;>fVsIP9`>l40cn3F1p z`12p7HQo9jRKwhq=`{beZki&=Ka9m(R*=oryt~DI>wTO!_3)|P0NK?W(|n0;JGce9 zypND$&(ag;cEoYEdXa zU>yh{y&A8;`kgQ-QG6VvwjNcuLzJtYJ(9K1hcm#eM{5tPqo z|71C74>?(_k0gDnfmNw^YyN6GW0idIzoxw3yAAr~HSrbJjpPfFP6Uy56YKFX>l?gT zn?=Z2z!JQlX%^9BNNYcl0N-rJ^7=Tczit|jz0EP>siG6RCa~Yf9qUngL}RdU^&LyMfLukWe+?=|blEGq+6Y|#ym zt3wwuFO908Z>o2M&f|^`s(5^0a_IdQjEbL^ZF`-|QV*u=5~aT$Gz!e7e5ebxGIGQs ztrwMpp%pj2TW~+I1gtBq1r|NiikYO%j`m7qa__q9zX?%dLl25geEc?cw6lHFg?p~< ziHl<+30XN+Vd8Th&w`rLkJ3z+(}aD)3GIN{-W;VyDWq;mM3GWyoGn=mR2(bMFfP(C zgf##=S{%lZsXswMo?K=fzF6`BV44K{q}kqLGTGlW32Zzll23Oiv`p*hWHk@7T2Ifp&GUfXS$ z(8r%qKPc!U=}XOEC^MTZ#DgRi$){keC(Wt8y9T|hN&}!X*TW#D0h|Zv^ zp-8n_00;Jfj_3@%SCl#C>`|bo6@R8?!ay5rw@X^9K5BST7H3Ltkl;|@r_fIc`CBKy z@N}(Zm=;CZ=@OQ_uydu`?G&zrk9LH1rOc;+86nGLOj$^6vjo*IO2buNk#=K25;p6T zvdJKq%#C9zRV8Bb)~6NbdU$78F(jy8`t6x)hn-Y+=(M`iQKTL}1Nw^P=G^}#k-Y1X z;2MF~$s7DaBAO67xtyqjtRu+05HAx;RmxAs-s)q>0?g0mu2-a?j>UKR?S$}(80A_>aM=J~^)(kCCH;)&|KaGzc z%{2HFUslhC%Y_Rqka08Nu--k3Iy|Nd=K(>ZDM(f7c%uYs$CT$76<*}~99Lt!YSEfW z*g29?k0i3|271uv+Q9xXYU$x0S8w==?T;74;)p2ox)+LDO`Hy*s-KZ_M(Ed*K#iV% zLFjYim6b2(+c=i=pX%qWn{>h}p7~=1DE%if2zHo#O42t{8qTkUxdzdYmCGpEljqlc zMUfLnkrlN^nW$xj{a_y#2T~nvmZ8osC8|j(I9R&C81jD?X0I#}3^u9RJRs_IPWg-A z!`bCv=KJ54V+i5+K!rYWJ_CKEP}~odTJ2s-Lq0G3YF3PTw9|S^Jwq$cuSy~>09QDc znuNHrV6{@X@<-Ay#YQ3tv_u;DH4Jw5BFbV|u+P^5dM>uoppqKV|&P1lJ1%P+-s71^Dyd7$8mU^AWD!EXll40kRv| zA5q}ATV4asujw~Xd@BLSe|znxKGrUDZ?iK1rjcK#UhP=Bp zi4PP|(5GAU67mjvyjo5fd%-GW@*)oJT7LP9V^|<@^DkWy_`D;~eZ!+p@^|%>^6RP74kPGTO)q0{sv#(sZYWW|5=wrFgyU{?`seAq4)z-Q17Pyir6nGL|Da+3jesf_p(nKSk0DoAJQAX7B@(X(%{!6jeHZ`BZ={ zPwgs}l>Zv71%eB47U{=+Ns8?qN9??!DIpNA1k;UWgJK%SCiik@>fKu>Qg@$>6!;GkVoAhcFj3olsmID;$|NcnY^B^y!hogs0)UI4rLm%`7OAkN#>NW9Ewt~it z${@%?R89pAj-mNH>|IB3y#N`#T7gygDRWJdELrUJz2eqN7NtWx5{G_6!n${tQBO_l)& zsxZ<(5t1tXQls*z>u>Z zxW>3fA7W4(IMmEj-4sy+V?btOF=$!DRVeN9DMez72|SjvhbR=J3F{Zu)7bPWTT3Xc zF$lEZ1WARSeh;DPS9A}WJttKkXnHeO{(qhkCVe3W7PBk2PsZo=vBZRr)jNmDw*|F^ z8H@Ng$>5_`?bu@ zNO&jo8&+-7F=l7p;wEYy!0)d_djM{UG@zZJNnx6x|24v3r#E}Hg!h5!8=21%h#d85 zS2>?=3kj;7kLZ2(*J=KMc7OD-# zi~Uxq(fPJBz$<93#rAKFz6Rvk-%YnaNk=OSN$ce36uW)=-1%f&aHo|~y<(N3YRo9t zI3zNdmZI^{bdKcjit#miTobDJcV$I^X(lS(*nd0V|F=+i4fxmERc;p*5kK-D)8;A? f=ydb=^htl~8*yGno*a~W%oA0`*9sMK=FtBEnojlH literal 0 HcmV?d00001 diff --git a/package.json b/package.json index a8462a6d5dc3..b9ad10f47042 100755 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "antwar-helpers": "^0.19.0", "antwar-interactive": "^0.19.0", "async": "^2.5.0", - "autoprefixer": "^7.1.3", + "autoprefixer": "^7.2.3", "babel-core": "^6.26.0", "babel-eslint": "^7.2.3", "babel-loader": "^7.1.2", @@ -55,12 +55,12 @@ "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-preset-env": "^1.6.0", "babel-preset-react": "^6.24.1", - "copy-webpack-plugin": "^4.0.1", + "copy-webpack-plugin": "^4.3.0", "css-loader": "^0.28.5", "duplexer": "^0.1.1", "eslint": "4.5.0", "eslint-loader": "^1.9.0", - "eslint-plugin-markdown": "^1.0.0-beta.6", + "eslint-plugin-markdown": "^1.0.0-beta.7", "extract-text-webpack-plugin": "^3.0.0", "file-loader": "^0.11.2", "fontgen-loader": "^0.2.1", @@ -69,22 +69,22 @@ "github": "^10.0.0", "html-webpack-plugin": "^2.30.1", "http-server": "^0.10.0", - "hyperlink": "^3.0.0", + "hyperlink": "^3.0.1", "loader-utils": "^1.1.0", "lodash": "^4.17.4", "markdown-loader": "^2.0.1", "markdownlint": "^0.6.0", "markdownlint-cli": "^0.3.1", - "marked": "^0.3.6", + "marked": "^0.3.7", "mkdirp": "^0.5.1", "modularscale-sass": "^3.0.3", - "moment": "^2.18.1", + "moment": "^2.20.1", "ncp": "^2.0.0", "node-sass": "^4.5.3", "npm-run-all": "^4.1.1", "postcss-loader": "^2.0.6", "prism-languages": "^0.3.3", - "prismjs": "^1.6.0", + "prismjs": "^1.9.0", "raw-loader": "^0.5.1", "request": "^2.81.0", "sass-loader": "^6.0.6", @@ -94,14 +94,14 @@ "tap-parser": "^6.0.1", "through2": "^2.0.3", "url-loader": "^0.5.9", - "webpack": "^3.5.5", - "webpack-dev-server": "^2.7.1", + "webpack": "^3.10.0", + "webpack-dev-server": "^2.9.7", "webpack-merge": "^4.1.0", "yaml-frontmatter-loader": "^0.1.0" }, "dependencies": { - "ajv": "^5.2.2", - "preact": "^8.2.5", + "ajv": "^5.5.2", + "preact": "^8.2.7", "preact-compat": "3.17.0", "prop-types": "^15.5.10", "react": "^15.6.1", @@ -109,6 +109,7 @@ "react-router": "^4.2.0", "react-router-dom": "^4.2.2", "tool-list": "^0.11.0", + "webpack.vote": "^0.1.2", "whatwg-fetch": "^2.0.3" } } diff --git a/src/assets/homepage-modules.svg b/src/assets/homepage-modules.svg deleted file mode 100755 index a39441644b53..000000000000 --- a/src/assets/homepage-modules.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/components/Navigation/Links.json b/src/components/Navigation/Links.json index c46d5a0080c5..d7ec12ee950b 100644 --- a/src/components/Navigation/Links.json +++ b/src/components/Navigation/Links.json @@ -15,6 +15,10 @@ "title": "参与贡献", "url": "contribute" }, + { + "title": "投票", + "url": "vote" + }, { "title": "博客", "url": "//medium.com/webpack" diff --git a/src/components/NotificationBar/NotificationBar.jsx b/src/components/NotificationBar/NotificationBar.jsx index 41deb5c66aed..50a2faee4e9d 100755 --- a/src/components/NotificationBar/NotificationBar.jsx +++ b/src/components/NotificationBar/NotificationBar.jsx @@ -2,7 +2,7 @@ import React from 'react'; import Container from '../Container/Container'; import testLocalStorage from '../../utilities/test-local-storage'; -const version = '1'; +const version = '2'; const localStorageIsEnabled = testLocalStorage() !== false; export default class NotificationBar extends React.Component { @@ -13,17 +13,16 @@ export default class NotificationBar extends React.Component {

- 赞助 webpack,同时获取官方衣服!访问 webpack 官方商店!  查看所有收益请转到 webpack 的 Open Collective 页面! -

-

- 在 Unixstickers! 上购买全新的 webpack 贴纸 - {localStorageIsEnabled ? -

); diff --git a/src/components/NotificationBar/NotificationBar.scss b/src/components/NotificationBar/NotificationBar.scss index 4a5e0f308be5..4e8a3f0af00f 100755 --- a/src/components/NotificationBar/NotificationBar.scss +++ b/src/components/NotificationBar/NotificationBar.scss @@ -5,10 +5,6 @@ color: getColor(white); background: getColor(emperor); - p:not(:last-child) { - padding-bottom: 1em; - } - p { font-size: 14px; } @@ -36,15 +32,15 @@ } .notification-bar__close { - color: getColor(white); - font-size: 16px; - padding: 0; - background: none; - border: none; position: absolute; + font-size: 16px; top: 10px; right: 1em; + padding: 0; + border: none; cursor: pointer; + color: getColor(white); + background: none; transition: color 250ms; &:hover { diff --git a/src/components/Site/Site.jsx b/src/components/Site/Site.jsx index 7f09856e186b..fa98e96caa1b 100755 --- a/src/components/Site/Site.jsx +++ b/src/components/Site/Site.jsx @@ -45,9 +45,17 @@ const Site = ({ title: section.path.title, url: section.url, pages: section.pages.map(page => ({ + file: page.file, title: page.file.title, url: page.url - })) + })).sort(({ file: { attributes: a }}, { file: { attributes: b }}) => { + let group1 = a.group.toLowerCase(); + let group2 = b.group.toLowerCase(); + + if (group1 < group2) return -1; + if (group1 > group2) return 1; + return a.sort - b.sort; + }) })) } /> diff --git a/src/components/SplashViz/SplashViz.jsx b/src/components/SplashViz/SplashViz.jsx index 3cae30b3eba3..1c8f9f3e5ff3 100755 --- a/src/components/SplashViz/SplashViz.jsx +++ b/src/components/SplashViz/SplashViz.jsx @@ -2,7 +2,7 @@ import React from 'react'; import Cube from '../Cube/Cube'; import TextRotator from '../TextRotater/TextRotater'; -import Modules from '../../assets/homepage-modules.svg'; +import homeSVG from './SplashVizSVG'; export default class SplashViz extends React.Component { @@ -18,9 +18,7 @@ export default class SplashViz extends React.Component { styles -
- dependency bundling graphic -
+
); diff --git a/src/components/SplashViz/SplashViz.scss b/src/components/SplashViz/SplashViz.scss index 09b105f33a7f..2bd9894fa8b2 100755 --- a/src/components/SplashViz/SplashViz.scss +++ b/src/components/SplashViz/SplashViz.scss @@ -27,16 +27,17 @@ position: absolute; left: 0; right: 0; - top: 0; + top: 50%; // vertical center bottom: 0; width: 75vw; min-width: 550px; max-width: map-get($screens, large); - margin: auto; + margin: 0 auto; + transform: translateY(-50%); // vertical center display: none; @include break { - display: block; + display: table; // Get height of its child svg } img { diff --git a/src/components/SplashViz/SplashVizSVG.js b/src/components/SplashViz/SplashVizSVG.js new file mode 100644 index 000000000000..95e6ba1ad7ea --- /dev/null +++ b/src/components/SplashViz/SplashVizSVG.js @@ -0,0 +1,200 @@ +// TODO: Try raw-loader or other approach when build process is refactored +module.exports = { + body: ` + + + + STATIC ASSETS + + + + + + + + .png + + + + + + + + + .css + + + + + + + + + .jpg + + + + + + + + + .js + + + + + + + + + + MODULES WITH DEPENDENCIES + + + + + + + + .jpg + + + + + + + + + .png + + + + + + + + + + + + + + + + .sass + + + + + + + + + .sass + + + + + + + + + + + + + + + + + + + + + + + + + + + .js + + + + + + + + + + + + + + + + .sass + + + + + + + + + + + + + + + + .cjs + + + + + + + + + + + + + + + + + + + + + + + + + + + + .hbs + + + + + + + + + + + + + + .js + + + + ` +}; diff --git a/src/components/StarterKits/StarterKits.jsx b/src/components/StarterKits/StarterKits.jsx index ac73d7efeb71..7d0a856cd5fa 100755 --- a/src/components/StarterKits/StarterKits.jsx +++ b/src/components/StarterKits/StarterKits.jsx @@ -17,15 +17,15 @@ const StarterKits = props => (

下面表格包含一个起步配套工具的辅助列表, 可以作为基于 webpack 的项目的起点。 - 要向列表添加新的配套工具请访问 - 仓库 + 要向列表添加新的配套工具请访问{' '} + 仓库{' '} 以及提交一个 PR 来修改这个文件 generator/starterProjectUrls.js.

- 模板应该是用于验证概念, + 模板应该是用于验证概念, 以帮助你学习各种框架的 webpack 不同技术。 确保你了解他们在做什么,并避免复制和粘贴制造重复代码。 另外还请注意,这些都不是由 webpack 官方支持的。 diff --git a/src/components/Vote/App.jsx b/src/components/Vote/App.jsx deleted file mode 100755 index cfba8704f200..000000000000 --- a/src/components/Vote/App.jsx +++ /dev/null @@ -1,411 +0,0 @@ -import React from 'react'; -import 'whatwg-fetch'; -import * as api from "./api"; -import VoteButton from './Button/Button'; -import Influence from './Influence'; -import GithubMark from '../../assets/github-logo.svg'; - -function updateByProperty(array, property, propertyValue, update) { - return array.map(item => { - if(item[property] === propertyValue) { - return update(item); - } else { - return item; - } - }); -} - -export default class VoteApp extends React.Component { - constructor(props) { - super(props); - this.state = { - selfInfo: undefined, - listInfo: undefined, - isFetchingSelf: false, - isVoting: 0 - }; - } - - isBrowserSupported() { - return typeof localStorage === 'object'; - } - - componentDidMount() { - if(!this.isBrowserSupported()) - return; - - let { selfInfo, listInfo } = this.state; - - if(api.isLoginActive()) { - this.setState({ - isLoginActive: true - }); - api.continueLogin().then(token => { - window.localStorage.voteAppToken = token; - }); - } else { - if(!selfInfo) { - this.updateSelf(); - } - if(!listInfo) { - this.updateList(); - } - } - } - - componentWillReceiveProps(props) { - if(!this.isBrowserSupported()) - return; - - this.updateList(props); - } - - updateSelf() { - let { voteAppToken } = localStorage; - if(voteAppToken) { - this.setState({ - isFetchingSelf: true - }); - api.getSelf(voteAppToken).catch(e => { - this.setState({ - selfInfo: null, - isFetchingSelf: false - }); - }).then(result => { - this.setState({ - selfInfo: result, - isFetchingSelf: false - }); - }); - } - } - - updateList(props = this.props) { - let { name } = props; - let { voteAppToken } = localStorage; - this.setState({ - isFetchingList: true - }); - api.getList(voteAppToken, name).catch(e => { - this.setState({ - listInfo: null, - isFetchingList: false - }); - }).then(result => { - this.setState({ - listInfo: result, - isFetchingList: false - }); - }); - } - - localVote(itemId, voteName, diffValue, currencyName, score) { - let { selfInfo, listInfo } = this.state; - this.setState({ - isVoting: this.state.isVoting + 1, - listInfo: listInfo && { - ...listInfo, - items: updateByProperty(listInfo.items, "id", itemId, item => ({ - ...item, - votes: updateByProperty(item.votes, "name", voteName, vote => ({ - ...vote, - votes: vote.votes + diffValue - })), - userVotes: updateByProperty(item.userVotes, "name", voteName, vote => ({ - ...vote, - votes: vote.votes + diffValue - })), - score: item.score + score * diffValue - })) - }, - selfInfo: selfInfo && { - ...selfInfo, - currencies: updateByProperty(selfInfo.currencies, "name", currencyName, currency => ({ - ...currency, - used: currency.used + diffValue, - remaining: currency.remaining - diffValue - })) - } - }); - } - - vote(itemId, voteName, diffValue, currencyName, score) { - if(!diffValue) return; - this.localVote(itemId, voteName, diffValue, currencyName, score); - let { voteAppToken } = localStorage; - api.vote(voteAppToken, itemId, voteName, diffValue).catch(e => { - console.error(e); - // revert local vote - this.localVote(itemId, voteName, -diffValue, currencyName, score); - this.setState({ - isVoting: this.state.isVoting - 1 - }); - }).then(() => { - this.setState({ - isVoting: this.state.isVoting - 1 - }); - }); - } - - render() { - let { name } = this.props; - - if(!this.isBrowserSupported()) - return
Your browser is not supported.
; - - let { selfInfo, listInfo, isVoting, isFetchingList, isFetchingSelf, isCreating, isLoginActive, editItem, editItemTitle, editItemDescription } = this.state; - - let { voteAppToken } = localStorage; - - if(isLoginActive) { - return
Logging in...
; - } - - const inProgress = isFetchingList || isFetchingSelf || isCreating || isVoting; - - let maxVoteInfo = listInfo && listInfo.possibleVotes.map(() => 0); - - if(listInfo) listInfo.items.forEach(item => { - if(item.userVotes) { - maxVoteInfo.forEach((max, idx) => { - let votes = item.userVotes[idx].votes; - if(votes > max) - maxVoteInfo[idx] = votes; - }); - } - }); - return ( -
-
- Vote -
-
-
-
-
- - -
-
- DISCLAIMER: Since this feature is its Alpha stages, the formula for calculating influence may change. -
-
-
- {this.renderSelf(inProgress)} -
-
-
- { listInfo &&
-

{listInfo.displayName}

-
{listInfo.description}
-
    - { listInfo.items.map(item =>
  • -
    -
    -
    {item.score}
    - {listInfo.possibleVotes.map((voteSettings, idx) => { - let vote = item.votes[idx]; - let userVote = item.userVotes && item.userVotes[idx]; - let currencyInfo = selfInfo && voteSettings.currency && this.findByName(selfInfo.currencies, voteSettings.currency); - let maximum = voteSettings.maximum || 1000; // infinity - let minimum = voteSettings.minimum || 0; - let value = (userVote && userVote.votes) ? userVote.votes: 0; - if(currencyInfo && currencyInfo.remaining + value < maximum) maximum = currencyInfo.remaining + value; - return
    - { - this.vote(item.id, voteSettings.name, diffValue, voteSettings.currency, voteSettings.score); - }} - /> -
    ; - })} -
    - { editItem !== item.id &&
    - {item.title} - {item.description} - { listInfo.isAdmin &&
    - - - - - -
    } -
    } - { editItem === item.id &&
    -
    - this.setState({ editItemTitle: e.target.value })} /> -
    -
    -