Showing preview only (2,188K chars total). Download the full file or copy to clipboard to get everything.
Repository: VulcanJS/Vulcan
Branch: devel
Commit: 5b81976dc67a
Files: 900
Total size: 1.9 MB
Directory structure:
gitextract_4or8imox/
├── .babelrc
├── .circleci/
│ └── config.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── stale.yml
├── .gitignore
├── .jshintrc
├── .meteor/
│ ├── .finished-upgraders
│ ├── .gitignore
│ ├── .id
│ ├── cordova-plugins
│ ├── packages
│ ├── platforms
│ └── release
├── .meteorignore
├── .nvmrc
├── .prettierrc.js
├── .storybook/
│ ├── addons.js
│ ├── config.js
│ ├── decorators/
│ │ ├── BootstrapDecorator.js
│ │ └── MaterialUIDecorator.js
│ ├── helpers.js
│ ├── loaders/
│ │ └── starter-example-loader.js
│ ├── mocks/
│ │ ├── Meteor.js
│ │ ├── Mongo.js
│ │ ├── Vulcan.js
│ │ ├── meteor-apollo.js
│ │ ├── meteor-server-render.js
│ │ └── vulcan-email.js
│ ├── startup.js
│ └── webpack.config.js
├── .vscode/
│ └── launch.json
├── .vulcan/
│ ├── .gitignore
│ ├── prestart_vulcan.js
│ ├── prettier/
│ │ └── index.js
│ ├── shared/
│ │ ├── listChangedFiles.js
│ │ └── pathsByLanguageVersion.js
│ └── update_package.js
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── MIGRATING.md
├── README.md
├── RELEASE.md
├── jsconfig.json
├── license.md
├── package.json
├── packages/
│ ├── .gitignore
│ ├── _boilerplate-generator/
│ │ ├── .gitignore
│ │ ├── .npm/
│ │ │ └── package/
│ │ │ ├── .gitignore
│ │ │ ├── README
│ │ │ └── npm-shrinkwrap.json
│ │ ├── README.md
│ │ ├── generator.js
│ │ ├── package.js
│ │ ├── template-web.browser.js
│ │ ├── template-web.cordova.js
│ │ └── template.js
│ ├── _buffer/
│ │ ├── buffer.js
│ │ └── package.js
│ ├── meteor-mocha/
│ │ ├── browser-shim.js
│ │ ├── client.js
│ │ ├── package.js
│ │ ├── package.json
│ │ ├── prepForHTMLReporter.js
│ │ ├── runtimeArgs.js
│ │ ├── server.handleCoverage.js
│ │ └── server.js
│ ├── vulcan-accounts/
│ │ ├── README.md
│ │ ├── imports/
│ │ │ ├── accounts_ui.js
│ │ │ ├── api/
│ │ │ │ └── server/
│ │ │ │ └── servicesListPublication.js
│ │ │ ├── components.js
│ │ │ ├── emailTemplates.js
│ │ │ ├── helpers.js
│ │ │ ├── login_session.js
│ │ │ ├── oauth_config.js
│ │ │ ├── routes.js
│ │ │ ├── ui/
│ │ │ │ └── components/
│ │ │ │ ├── Button.jsx
│ │ │ │ ├── Buttons.jsx
│ │ │ │ ├── EnrollAccount.jsx
│ │ │ │ ├── Field.jsx
│ │ │ │ ├── Fields.jsx
│ │ │ │ ├── Form.jsx
│ │ │ │ ├── FormMessage.jsx
│ │ │ │ ├── FormMessages.jsx
│ │ │ │ ├── LoginForm.jsx
│ │ │ │ ├── LoginFormInner.jsx
│ │ │ │ ├── PasswordOrService.jsx
│ │ │ │ ├── ResetPassword.jsx
│ │ │ │ ├── SocialButtons.jsx
│ │ │ │ ├── StateSwitcher.jsx
│ │ │ │ ├── TrackerComponent.jsx
│ │ │ │ └── VerifyEmail.jsx
│ │ │ └── useMeteorLogout.js
│ │ ├── main_client.js
│ │ ├── main_server.js
│ │ └── package.js
│ ├── vulcan-admin/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── AdminHome.jsx
│ │ │ │ ├── AdminLayout.jsx
│ │ │ │ └── users/
│ │ │ │ └── columns/
│ │ │ │ ├── AdminUsersActions.jsx
│ │ │ │ ├── AdminUsersCreated.jsx
│ │ │ │ ├── AdminUsersEmail.jsx
│ │ │ │ └── AdminUsersName.jsx
│ │ │ ├── modules/
│ │ │ │ ├── columns.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ └── routes.js
│ │ │ ├── server/
│ │ │ │ └── main.js
│ │ │ └── stylesheets/
│ │ │ └── style.scss
│ │ └── package.js
│ ├── vulcan-backoffice/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── BackofficeIndex.jsx
│ │ │ │ ├── BackofficeLayout.jsx
│ │ │ │ ├── CollectionItem.jsx
│ │ │ │ └── CollectionList.jsx
│ │ │ ├── hocs/
│ │ │ │ ├── withDocumentId.js
│ │ │ │ └── withRouteParam.js
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── createCollectionComponents/
│ │ │ │ │ ├── createCollectionComponents.js
│ │ │ │ │ ├── createItemComponent.js
│ │ │ │ │ ├── createListComponent.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── index.js
│ │ │ │ ├── namingHelpers.js
│ │ │ │ ├── options.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── setupBackoffice.js
│ │ │ │ ├── setupCollectionMenuItems.js
│ │ │ │ ├── setupCollectionRoutes.js
│ │ │ │ └── startup.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ ├── package.js
│ │ ├── package.json
│ │ └── test/
│ │ ├── index.js
│ │ ├── namingHelpers.test.js
│ │ ├── options.js
│ │ └── routes.test.js
│ ├── vulcan-cloudinary/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── make_cloudinary.js
│ │ │ ├── modules/
│ │ │ │ ├── custom_fields.js
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── cloudinary.js
│ │ │ ├── main.js
│ │ │ └── make_cloudinary.js
│ │ └── package.js
│ ├── vulcan-core/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── components/
│ │ │ │ │ └── AppGenerator.jsx
│ │ │ │ ├── main.js
│ │ │ │ └── start.jsx
│ │ │ ├── modules/
│ │ │ │ ├── callbacks.js
│ │ │ │ ├── components/
│ │ │ │ │ ├── AccessControl.jsx
│ │ │ │ │ ├── App.jsx
│ │ │ │ │ ├── Avatar.jsx
│ │ │ │ │ ├── Card/
│ │ │ │ │ │ ├── Card.jsx
│ │ │ │ │ │ ├── CardItemArray.jsx
│ │ │ │ │ │ ├── CardItemDate.jsx
│ │ │ │ │ │ ├── CardItemDefault.jsx
│ │ │ │ │ │ ├── CardItemHTML.jsx
│ │ │ │ │ │ ├── CardItemImage.jsx
│ │ │ │ │ │ ├── CardItemNumber.jsx
│ │ │ │ │ │ ├── CardItemObject.jsx
│ │ │ │ │ │ ├── CardItemRelationHasMany.jsx
│ │ │ │ │ │ ├── CardItemRelationHasOne.jsx
│ │ │ │ │ │ ├── CardItemRelationItem.jsx
│ │ │ │ │ │ ├── CardItemString.jsx
│ │ │ │ │ │ ├── CardItemSwitcher.jsx
│ │ │ │ │ │ ├── CardItemURL.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── Datatable/
│ │ │ │ │ │ ├── Datatable.jsx
│ │ │ │ │ │ ├── DatatableCell.jsx
│ │ │ │ │ │ ├── DatatableContents.jsx
│ │ │ │ │ │ ├── DatatableFilter.jsx
│ │ │ │ │ │ ├── DatatableHeader.jsx
│ │ │ │ │ │ ├── DatatableRow.jsx
│ │ │ │ │ │ ├── DatatableSelect.jsx
│ │ │ │ │ │ ├── DatatableSorter.jsx
│ │ │ │ │ │ ├── DatatableSubmitSelected.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── DeleteButton.jsx
│ │ │ │ │ ├── Dummy.jsx
│ │ │ │ │ ├── DynamicLoading.jsx
│ │ │ │ │ ├── EditButton.jsx
│ │ │ │ │ ├── Error404.jsx
│ │ │ │ │ ├── Flash.jsx
│ │ │ │ │ ├── FlashMessages.jsx
│ │ │ │ │ ├── HeadTags.jsx
│ │ │ │ │ ├── HelloWorld.jsx
│ │ │ │ │ ├── Icon.jsx
│ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ ├── Loading.jsx
│ │ │ │ │ ├── LoadingButton.jsx
│ │ │ │ │ ├── MutationButton.jsx
│ │ │ │ │ ├── NewButton.jsx
│ │ │ │ │ ├── PaginatedList/
│ │ │ │ │ │ ├── PaginatedList.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── RouterHook.jsx
│ │ │ │ │ ├── ScrollToTop.jsx
│ │ │ │ │ ├── ShowIf.jsx
│ │ │ │ │ ├── VerticalMenuLayout/
│ │ │ │ │ │ ├── MenuLayout.jsx
│ │ │ │ │ │ └── VerticalMenuLayout.jsx
│ │ │ │ │ └── Welcome.jsx
│ │ │ │ ├── components.js
│ │ │ │ ├── containers/
│ │ │ │ │ ├── cacheUpdate.js
│ │ │ │ │ ├── create.js
│ │ │ │ │ ├── create2.js
│ │ │ │ │ ├── currentUser.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── delete2.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── localeData.js
│ │ │ │ │ ├── multi.js
│ │ │ │ │ ├── multi2.js
│ │ │ │ │ ├── registeredMutation.js
│ │ │ │ │ ├── single.js
│ │ │ │ │ ├── single2.js
│ │ │ │ │ ├── siteData.js
│ │ │ │ │ ├── update.js
│ │ │ │ │ ├── update2.js
│ │ │ │ │ ├── upsert.js
│ │ │ │ │ ├── upsert2.js
│ │ │ │ │ ├── variables.js
│ │ │ │ │ ├── withAccess.js
│ │ │ │ │ ├── withComponents.js
│ │ │ │ │ ├── withMessages-state-link.js
│ │ │ │ │ └── withMessages.js
│ │ │ │ ├── decorators/
│ │ │ │ │ ├── autocomplete.js
│ │ │ │ │ ├── checkboxgroup.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── likert.js
│ │ │ │ │ └── radiogroup.js
│ │ │ │ ├── index.js
│ │ │ │ └── menu.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── start.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── index.js
│ │ │ └── mutations2.test.js
│ │ ├── components.test.js
│ │ ├── containers/
│ │ │ ├── mutations.test.js
│ │ │ └── queries.test.js
│ │ ├── containers2/
│ │ │ ├── mutations.test.js
│ │ │ └── queries.test.js
│ │ ├── index.js
│ │ ├── menu.test.js
│ │ ├── server/
│ │ │ └── index.js
│ │ └── withComponents.test.js
│ ├── vulcan-debug/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── Callbacks.jsx
│ │ │ │ ├── Components.jsx
│ │ │ │ ├── Dashboard.jsx
│ │ │ │ ├── Database.jsx
│ │ │ │ ├── DebugLayout.jsx
│ │ │ │ ├── Emails.jsx
│ │ │ │ ├── ErrorCatcherContents.jsx
│ │ │ │ ├── Groups.jsx
│ │ │ │ ├── I18n.jsx
│ │ │ │ ├── Routes.jsx
│ │ │ │ └── Settings.jsx
│ │ │ ├── modules/
│ │ │ │ ├── callbacks/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── fragments.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── components.js
│ │ │ │ ├── emails/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── index.js
│ │ │ │ ├── permissions.js
│ │ │ │ ├── routes.js
│ │ │ │ └── settings/
│ │ │ │ ├── collection.js
│ │ │ │ └── schema.js
│ │ │ ├── server/
│ │ │ │ ├── callbacks/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── resolvers.js
│ │ │ │ ├── database/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── queries.js
│ │ │ │ ├── emails/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── resolvers.js
│ │ │ │ ├── main.js
│ │ │ │ └── settings/
│ │ │ │ ├── collection.js
│ │ │ │ ├── index.js
│ │ │ │ └── resolvers.js
│ │ │ └── stylesheets/
│ │ │ └── debug.scss
│ │ └── package.js
│ ├── vulcan-email/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── fragments.js
│ │ │ │ ├── index.js
│ │ │ │ └── namespace.js
│ │ │ └── server/
│ │ │ ├── email.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ ├── routes.js
│ │ │ └── templates/
│ │ │ ├── index.js
│ │ │ └── template_error.handlebars
│ │ └── package.js
│ ├── vulcan-embed/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ └── EmbedURL.jsx
│ │ │ ├── modules/
│ │ │ │ ├── embed.js
│ │ │ │ ├── i18n.js
│ │ │ │ └── index.js
│ │ │ ├── server/
│ │ │ │ ├── integrations/
│ │ │ │ │ ├── builtin.js
│ │ │ │ │ ├── embedapi.js
│ │ │ │ │ └── embedly.js
│ │ │ │ ├── main.js
│ │ │ │ ├── methods.js
│ │ │ │ └── mutations.js
│ │ │ └── stylesheets/
│ │ │ └── embedly.scss
│ │ └── package.js
│ ├── vulcan-errors/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── init.js
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── ErrorCatcher.jsx
│ │ │ │ └── ErrorsUserMonitor.jsx
│ │ │ ├── modules/
│ │ │ │ ├── errors.js
│ │ │ │ ├── extended-NOTUSED.js
│ │ │ │ ├── index.js
│ │ │ │ └── rethrown-NOTUSED.js
│ │ │ └── server/
│ │ │ ├── init.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-errors-sentry/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── sentry-client.js
│ │ │ ├── modules/
│ │ │ │ ├── index.js
│ │ │ │ ├── sentry.js
│ │ │ │ └── settings.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── sentry-server.js
│ │ └── package.js
│ ├── vulcan-events/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── events.js
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-ga/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── ga.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-intercom/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── intercom-client.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── intercom-server.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-internal/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── internal-client.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── collection.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── index.js
│ │ │ │ └── schema.js
│ │ │ └── server/
│ │ │ ├── internal-server.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-segment/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── segment-client.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── segment-server.js
│ │ └── package.js
│ ├── vulcan-forms/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── FieldErrors.jsx
│ │ │ │ ├── Form.jsx
│ │ │ │ ├── FormClear.jsx
│ │ │ │ ├── FormComponent.jsx
│ │ │ │ ├── FormComponentLoader.jsx
│ │ │ │ ├── FormElement.jsx
│ │ │ │ ├── FormError.jsx
│ │ │ │ ├── FormErrors.jsx
│ │ │ │ ├── FormGroup.jsx
│ │ │ │ ├── FormIntl.jsx
│ │ │ │ ├── FormLayout.jsx
│ │ │ │ ├── FormNestedArray.jsx
│ │ │ │ ├── FormNestedArrayLayout.jsx
│ │ │ │ ├── FormNestedDivider.jsx
│ │ │ │ ├── FormNestedItem.jsx
│ │ │ │ ├── FormNestedObject.jsx
│ │ │ │ ├── FormOptionLabel.jsx
│ │ │ │ ├── FormSubmit.jsx
│ │ │ │ ├── FormWrapper.jsx
│ │ │ │ ├── propTypes.js
│ │ │ │ └── withCollectionProps.js
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── formFragments.js
│ │ │ │ ├── index.js
│ │ │ │ ├── path_utils.js
│ │ │ │ ├── schema_utils.js
│ │ │ │ └── utils.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── Form.test.js
│ │ ├── FormComponent.test.js
│ │ ├── FormNestedArray.test.js
│ │ ├── FormNestedObject.test.js
│ │ ├── formFragments.test.js
│ │ ├── index.js
│ │ ├── package.test.js
│ │ └── schema_utils.test.js
│ ├── vulcan-forms-tags/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── components/
│ │ │ │ └── Tags.jsx
│ │ │ └── export.js
│ │ └── package.js
│ ├── vulcan-forms-upload/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── Upload.jsx
│ │ │ ├── Upload.scss
│ │ │ ├── i18n.js
│ │ │ └── modules.js
│ │ └── package.js
│ ├── vulcan-i18n/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── context.js
│ │ │ │ ├── index.js
│ │ │ │ ├── message.js
│ │ │ │ ├── provider.js
│ │ │ │ ├── shape.js
│ │ │ │ └── useIntl.js
│ │ │ └── server/
│ │ │ ├── graphql.js
│ │ │ └── main.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── index.js
│ │ └── provider.test.js
│ ├── vulcan-i18n-en-us/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── en_US.js
│ │ └── package.js
│ ├── vulcan-i18n-es-es/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── es_ES.js
│ │ └── package.js
│ ├── vulcan-i18n-fa-ir/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── fa_IR.js
│ │ └── package.js
│ ├── vulcan-i18n-fr-fr/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── fr_FR.js
│ │ └── package.js
│ ├── vulcan-lib/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── apollo-client/
│ │ │ │ │ ├── apolloClient.js
│ │ │ │ │ ├── cache.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── links/
│ │ │ │ │ ├── error.js
│ │ │ │ │ ├── http.js
│ │ │ │ │ ├── meteor.js
│ │ │ │ │ └── registerLinks.js
│ │ │ │ ├── auth.js
│ │ │ │ ├── connectors.js
│ │ │ │ ├── errors.js
│ │ │ │ ├── inject_data.js
│ │ │ │ ├── main.js
│ │ │ │ └── mock.js
│ │ │ ├── modules/
│ │ │ │ ├── admin.js
│ │ │ │ ├── apollo-common/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── links/
│ │ │ │ │ │ └── state.js
│ │ │ │ │ └── settings.js
│ │ │ │ ├── callbacks.js
│ │ │ │ ├── collections.js
│ │ │ │ ├── components.js
│ │ │ │ ├── compose.js
│ │ │ │ ├── config.js
│ │ │ │ ├── debug.js
│ │ │ │ ├── deep.js
│ │ │ │ ├── deep_extend.js
│ │ │ │ ├── dynamic_loader.js
│ │ │ │ ├── errors.js
│ │ │ │ ├── findbyids.js
│ │ │ │ ├── fragment_matcher.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── graphql/
│ │ │ │ │ ├── defaultFragment.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── graphql_templates/
│ │ │ │ │ ├── filtering.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── mutations.js
│ │ │ │ │ ├── other.js
│ │ │ │ │ ├── queries.js
│ │ │ │ │ └── types.js
│ │ │ │ ├── handleOptions.js
│ │ │ │ ├── headtags.js
│ │ │ │ ├── icons.js
│ │ │ │ ├── index.js
│ │ │ │ ├── intl.js
│ │ │ │ ├── intl_polyfill.js
│ │ │ │ ├── mongoParams.js
│ │ │ │ ├── mongo_redux.js
│ │ │ │ ├── random_id.js
│ │ │ │ ├── reactive-state.js
│ │ │ │ ├── routes.js
│ │ │ │ ├── routes.ts
│ │ │ │ ├── schema_utils.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── simpleSchema_utils.js
│ │ │ │ ├── startup.js
│ │ │ │ ├── ui_utils.js
│ │ │ │ ├── utils.js
│ │ │ │ └── validation.js
│ │ │ └── server/
│ │ │ ├── accounts_helpers.js
│ │ │ ├── apollo-server/
│ │ │ │ ├── apollo_server.js
│ │ │ │ ├── context.js
│ │ │ │ ├── engine.js
│ │ │ │ ├── graphiql.js
│ │ │ │ ├── index.js
│ │ │ │ ├── initGraphQL.js
│ │ │ │ ├── playground.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── startup.js
│ │ │ │ └── voyager.js
│ │ │ ├── apollo-ssr/
│ │ │ │ ├── apolloClient.js
│ │ │ │ ├── components/
│ │ │ │ │ ├── ApolloState.jsx
│ │ │ │ │ ├── AppGenerator.jsx
│ │ │ │ │ └── Head.jsx
│ │ │ │ ├── enableSSR.js
│ │ │ │ ├── index.js
│ │ │ │ ├── injectDefaultData.js
│ │ │ │ ├── inject_data.js
│ │ │ │ └── renderPage.js
│ │ │ ├── caching.js
│ │ │ ├── connectors/
│ │ │ │ └── mongo.js
│ │ │ ├── connectors.js
│ │ │ ├── debug.js
│ │ │ ├── default_mutations.js
│ │ │ ├── default_mutations2.js
│ │ │ ├── default_resolvers.js
│ │ │ ├── default_resolvers2.js
│ │ │ ├── errors.js
│ │ │ ├── graphql/
│ │ │ │ ├── collection.js
│ │ │ │ ├── graphql.js
│ │ │ │ ├── index.js
│ │ │ │ ├── relations.js
│ │ │ │ ├── resolvers.js
│ │ │ │ ├── schemaFields.js
│ │ │ │ └── typedefs.js
│ │ │ ├── intl.js
│ │ │ ├── intl_polyfill.js
│ │ │ ├── main.js
│ │ │ ├── meteor_patch.js
│ │ │ ├── mutators.js
│ │ │ ├── query.js
│ │ │ ├── site.js
│ │ │ ├── source_version.js
│ │ │ └── utils.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── apolloClient.test.js
│ │ │ └── index.js
│ │ ├── components.test.js
│ │ ├── documentValidation.test.js
│ │ ├── handleOptions.test.js
│ │ ├── index.js
│ │ ├── intl.test.js
│ │ ├── mongoParams.test.js
│ │ ├── reactive-state.test.js
│ │ ├── routes.test.js
│ │ ├── schema_utils.test.js
│ │ ├── server/
│ │ │ ├── apollo-server.test.js
│ │ │ ├── apollo-ssr.test.js
│ │ │ ├── fixtures/
│ │ │ │ └── minimalSchema.js
│ │ │ ├── fragments.test.js
│ │ │ ├── graphql.test.js
│ │ │ ├── index.js
│ │ │ ├── mutations.test.js
│ │ │ ├── mutators.test.js
│ │ │ └── resolvers.test.js
│ │ └── utils.test.js
│ ├── vulcan-newsletter/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ └── NewsletterSubscribe.jsx
│ │ │ ├── modules/
│ │ │ │ ├── collection.js
│ │ │ │ ├── custom_fields.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ └── schema.js
│ │ │ └── server/
│ │ │ ├── callbacks.js
│ │ │ ├── cron.js
│ │ │ ├── integrations/
│ │ │ │ ├── emailoctopus.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mailchimp.js
│ │ │ │ ├── sample.js
│ │ │ │ └── sendy.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ └── newsletters.js
│ │ ├── package.js
│ │ └── scss.json
│ ├── vulcan-payments/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── ChargesDashboard.jsx
│ │ │ │ └── Checkout.jsx
│ │ │ ├── containers/
│ │ │ │ └── withPaymentAction.js
│ │ │ ├── modules/
│ │ │ │ ├── charges/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── components.js
│ │ │ │ ├── custom_fields.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ ├── products.js
│ │ │ │ └── routes.js
│ │ │ ├── server/
│ │ │ │ ├── integrations/
│ │ │ │ │ └── stripe.js
│ │ │ │ ├── main.js
│ │ │ │ └── mutations.js
│ │ │ └── stylesheets/
│ │ │ └── style.scss
│ │ └── package.js
│ ├── vulcan-redux/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ ├── reduxInitialState.js
│ │ │ │ └── setupRedux.js
│ │ │ ├── modules/
│ │ │ │ ├── index.js
│ │ │ │ └── redux.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ ├── reduxInitialState.js
│ │ │ └── setupRedux.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── index.js
│ │ │ └── initialState.test.js
│ │ └── server/
│ │ ├── index.js
│ │ ├── initialState.test.js
│ │ └── initialStateWithValue.test.js
│ ├── vulcan-scss/
│ │ ├── .github/
│ │ │ └── workflows/
│ │ │ └── comment-issue.yml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── .versions
│ │ ├── ISSUE_TEMPLATE.md
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── package.js
│ │ ├── plugin/
│ │ │ └── compile-scss.js
│ │ ├── scss-config.json
│ │ ├── test/
│ │ │ ├── include-paths/
│ │ │ │ ├── include-paths.scss
│ │ │ │ └── modules/
│ │ │ │ └── module/
│ │ │ │ └── _module.scss
│ │ │ └── scss/
│ │ │ ├── _emptyimport.scss
│ │ │ ├── _not-included.scss
│ │ │ ├── _top.scss
│ │ │ ├── _top3.scss
│ │ │ ├── dir/
│ │ │ │ ├── _in-dir.scss
│ │ │ │ ├── _in-dir2.scss
│ │ │ │ ├── root.scss
│ │ │ │ └── subdir/
│ │ │ │ └── _in-subdir.scss
│ │ │ ├── empty.scss
│ │ │ └── top2.scss
│ │ └── tests.js
│ ├── vulcan-styled-components/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── setupStyledComponents.js
│ │ └── package.js
│ ├── vulcan-subscribe/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── callbacks.js
│ │ │ ├── components/
│ │ │ │ └── SubscribeTo.jsx
│ │ │ ├── custom_fields.js
│ │ │ ├── fragments.js
│ │ │ ├── helpers.js
│ │ │ ├── modules.js
│ │ │ ├── mutations.js
│ │ │ ├── permissions.js
│ │ │ └── views.js
│ │ └── package.js
│ ├── vulcan-test/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── initComponentTest.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── createDummyCollection.js
│ │ │ │ ├── graphqlSchema.js
│ │ │ │ ├── index.js
│ │ │ │ └── initComponentTest.js
│ │ │ └── server/
│ │ │ ├── initComponentTest.js
│ │ │ ├── initGraphQLTest.js
│ │ │ ├── initServerTest.js
│ │ │ ├── isoCreateCollection.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-ui-bootstrap/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── backoffice/
│ │ │ │ │ ├── BackofficeNavbar.jsx
│ │ │ │ │ ├── BackofficePageLayout.jsx
│ │ │ │ │ └── BackofficeVerticalMenuLayout.jsx
│ │ │ │ ├── forms/
│ │ │ │ │ ├── Autocomplete.jsx
│ │ │ │ │ ├── AutocompleteMultiple.jsx
│ │ │ │ │ ├── Checkbox.jsx
│ │ │ │ │ ├── Checkboxgroup.jsx
│ │ │ │ │ ├── Date.jsx
│ │ │ │ │ ├── Date2.jsx
│ │ │ │ │ ├── Datetime.jsx
│ │ │ │ │ ├── Default.jsx
│ │ │ │ │ ├── Email.jsx
│ │ │ │ │ ├── FormComponentInner.jsx
│ │ │ │ │ ├── FormControl.jsx
│ │ │ │ │ ├── FormDescription.jsx
│ │ │ │ │ ├── FormElement.jsx
│ │ │ │ │ ├── FormGroupDefault.jsx
│ │ │ │ │ ├── FormInputLoading.jsx
│ │ │ │ │ ├── FormItem.jsx
│ │ │ │ │ ├── FormLabel.jsx
│ │ │ │ │ ├── Likert.jsx
│ │ │ │ │ ├── Number.jsx
│ │ │ │ │ ├── Password.jsx
│ │ │ │ │ ├── Radiogroup.jsx
│ │ │ │ │ ├── Select.jsx
│ │ │ │ │ ├── SelectMultiple.jsx
│ │ │ │ │ ├── StaticText.jsx
│ │ │ │ │ ├── Textarea.jsx
│ │ │ │ │ ├── Time.jsx
│ │ │ │ │ └── Url.jsx
│ │ │ │ └── ui/
│ │ │ │ ├── Alert.jsx
│ │ │ │ ├── Button.jsx
│ │ │ │ ├── Dropdown.jsx
│ │ │ │ ├── Modal.jsx
│ │ │ │ ├── ModalTrigger.jsx
│ │ │ │ ├── Table.jsx
│ │ │ │ ├── TooltipTrigger.jsx
│ │ │ │ └── VerticalNavigation.jsx
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ └── index.js
│ │ │ ├── server/
│ │ │ │ └── main.js
│ │ │ └── stylesheets/
│ │ │ ├── datetime.scss
│ │ │ ├── likert.scss
│ │ │ ├── style.scss
│ │ │ ├── typeahead-bs4.scss
│ │ │ └── typeahead.scss
│ │ └── package.js
│ ├── vulcan-ui-material/
│ │ ├── accounts.css
│ │ ├── en_US.js
│ │ ├── forms.css
│ │ ├── fr_FR.js
│ │ ├── history.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── wrapWithMuiTheme.jsx
│ │ │ ├── components/
│ │ │ │ ├── accounts/
│ │ │ │ │ ├── AccountsButton.jsx
│ │ │ │ │ ├── AccountsButtons.jsx
│ │ │ │ │ ├── AccountsField.jsx
│ │ │ │ │ ├── AccountsFields.jsx
│ │ │ │ │ ├── AccountsForm.jsx
│ │ │ │ │ ├── AccountsPasswordOrService.jsx
│ │ │ │ │ └── AccountsSocialButtons.jsx
│ │ │ │ ├── backoffice/
│ │ │ │ │ ├── BackofficeNavbar.jsx
│ │ │ │ │ ├── BackofficePageLayout.jsx
│ │ │ │ │ └── BackofficeVerticalMenuLayout.jsx
│ │ │ │ ├── bonus/
│ │ │ │ │ ├── DatatableFromArray.jsx
│ │ │ │ │ ├── KeyEventHandler.jsx
│ │ │ │ │ ├── LoadMore.jsx
│ │ │ │ │ ├── ScrollTrigger.jsx
│ │ │ │ │ ├── SearchInput.jsx
│ │ │ │ │ ├── TooltipButton.jsx
│ │ │ │ │ ├── TooltipIconButton.jsx
│ │ │ │ │ └── TooltipIntl.jsx
│ │ │ │ ├── core/
│ │ │ │ │ ├── Avatar.jsx
│ │ │ │ │ ├── Card.jsx
│ │ │ │ │ ├── Datatable.jsx
│ │ │ │ │ ├── EditButton.jsx
│ │ │ │ │ ├── Flash.jsx
│ │ │ │ │ ├── Loading.jsx
│ │ │ │ │ └── NewButton.jsx
│ │ │ │ ├── forms/
│ │ │ │ │ ├── FormComponentInner.jsx
│ │ │ │ │ ├── FormErrors.jsx
│ │ │ │ │ ├── FormGroupDefault.jsx
│ │ │ │ │ ├── FormGroupLine.jsx
│ │ │ │ │ ├── FormGroupNone.jsx
│ │ │ │ │ ├── FormNestedArrayLayout.jsx
│ │ │ │ │ ├── FormNestedDivider.jsx
│ │ │ │ │ ├── FormSubmit.jsx
│ │ │ │ │ ├── base-controls/
│ │ │ │ │ │ ├── EndAdornment.jsx
│ │ │ │ │ │ ├── FormCheckbox.jsx
│ │ │ │ │ │ ├── FormCheckboxGroup.jsx
│ │ │ │ │ │ ├── FormControlLayout.jsx
│ │ │ │ │ │ ├── FormHelper.jsx
│ │ │ │ │ │ ├── FormInput.jsx
│ │ │ │ │ │ ├── FormPicker.jsx
│ │ │ │ │ │ ├── FormRadioGroup.jsx
│ │ │ │ │ │ ├── FormSelect.jsx
│ │ │ │ │ │ ├── FormSuggest.jsx
│ │ │ │ │ │ ├── FormSwitch.jsx
│ │ │ │ │ │ ├── FormText.jsx
│ │ │ │ │ │ ├── RequiredIndicator.jsx
│ │ │ │ │ │ ├── StartAdornment.jsx
│ │ │ │ │ │ └── mixins/
│ │ │ │ │ │ └── component.jsx
│ │ │ │ │ └── controls/
│ │ │ │ │ ├── Checkbox.jsx
│ │ │ │ │ ├── CheckboxGroup.jsx
│ │ │ │ │ ├── CountrySelect.jsx
│ │ │ │ │ ├── Date.jsx
│ │ │ │ │ ├── DateRdt.jsx
│ │ │ │ │ ├── DateTime.jsx
│ │ │ │ │ ├── DateTimeRdt.jsx
│ │ │ │ │ ├── Default.jsx
│ │ │ │ │ ├── Email.jsx
│ │ │ │ │ ├── Number.jsx
│ │ │ │ │ ├── Password.jsx
│ │ │ │ │ ├── PostalCode.jsx
│ │ │ │ │ ├── RadioGroup.jsx
│ │ │ │ │ ├── RegionSelect.jsx
│ │ │ │ │ ├── Select.jsx
│ │ │ │ │ ├── SelectMultiple.jsx
│ │ │ │ │ ├── StaticText.jsx
│ │ │ │ │ ├── Textarea.jsx
│ │ │ │ │ ├── Time.jsx
│ │ │ │ │ ├── TimeRdt.jsx
│ │ │ │ │ ├── Url.jsx
│ │ │ │ │ └── countries.js
│ │ │ │ ├── index.js
│ │ │ │ ├── theme/
│ │ │ │ │ ├── JssCleanup.jsx
│ │ │ │ │ ├── ThemeProvider.jsx
│ │ │ │ │ └── ThemeStyles.jsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── Alert.jsx
│ │ │ │ │ ├── Button.jsx
│ │ │ │ │ ├── Modal.jsx
│ │ │ │ │ ├── ModalTrigger.jsx
│ │ │ │ │ ├── Table.jsx
│ │ │ │ │ └── VerticalNavigation.jsx
│ │ │ │ └── upload/
│ │ │ │ ├── UploadImage.jsx
│ │ │ │ └── UploadInner.jsx
│ │ │ ├── example/
│ │ │ │ ├── Header.jsx
│ │ │ │ ├── Layout.jsx
│ │ │ │ └── SideNavigation.jsx
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── index.js
│ │ │ │ ├── routes.js
│ │ │ │ ├── sampleTheme.js
│ │ │ │ └── themes.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── wrapWithMuiTheme.jsx
│ │ ├── package.js
│ │ └── readme.md
│ ├── vulcan-users/
│ │ ├── README.md
│ │ ├── TESTS.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── avatar.js
│ │ │ │ ├── collection.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── helpers.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutations.js
│ │ │ │ ├── permissions.js
│ │ │ │ ├── schema.js
│ │ │ │ └── views.js
│ │ │ └── server/
│ │ │ ├── AuthPassword.js
│ │ │ ├── callbacks.js
│ │ │ ├── create_user.js
│ │ │ ├── graphql_context.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ ├── on_create_user.js
│ │ │ ├── queries.js
│ │ │ └── urls.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── index.js
│ │ ├── permissions.test.js
│ │ └── server/
│ │ ├── callback.test.js
│ │ ├── index.js
│ │ └── mutation.test.js
│ └── vulcan-voting/
│ ├── README.md
│ ├── lib/
│ │ ├── client/
│ │ │ ├── fragment_matcher.js
│ │ │ └── main.js
│ │ ├── containers/
│ │ │ └── withVote.js
│ │ ├── modules/
│ │ │ ├── custom_fields.js
│ │ │ ├── fragments.js
│ │ │ ├── helpers.js
│ │ │ ├── index.js
│ │ │ ├── make_voteable.js
│ │ │ ├── scoring.js
│ │ │ ├── vote.js
│ │ │ └── votes/
│ │ │ ├── collection.js
│ │ │ └── schema.js
│ │ └── server/
│ │ ├── callbacks.js
│ │ ├── cron.js
│ │ ├── graphql.js
│ │ ├── indexes.js
│ │ ├── main.js
│ │ └── scoring.js
│ └── package.js
├── sample_settings.json
└── stories/
├── MUI/
│ ├── forms/
│ │ └── formBaseControls.stories.js
│ └── ui-material.stories.js
├── card.stories.js
├── dataSample/
│ ├── dummyCollection.js
│ └── schema.js
├── datatable.stories.js
├── form/
│ ├── form.stories.js
│ ├── formControls.stories.js
│ └── upload.stories.js
├── helpers.js
├── modal.stories.js
├── ref.stories.js
└── vulcan.stories.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .babelrc
================================================
{
"plugins": [
],
"presets": [
[
"@babel/preset-env",
{
"shippedProposals": true,
"corejs":2,
"useBuiltIns": "usage"
}
],
"@babel/preset-react"
]
}
================================================
FILE: .circleci/config.yml
================================================
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
build:
docker:
- image: circleci/openjdk:8-jdk-browsers
environment:
# lang settings required for Meteor's Mongo
LANG: C.UTF-8
LANGUAGE: C.UTF-8
LC_ALL: C.UTF-8
LC_NUMERIC: en_US.UTF-8
METEOR_BIN_TMP_DIR: /home/circleci/build-temp/
METEOR_BIN_TMP_FILE: meteor-bin-temp
working_directory: ~/app
steps:
# chackout the code from github
- checkout
# if certain cached files (packages, etc) are presetn, don't redownload them, restore the cached version
- restore_cache:
key: build-temp-{{ checksum ".meteor/release" }}-{{ checksum ".circleci/config.yml" }}
- restore_cache:
key: meteor-release-{{ checksum ".meteor/release" }}-{{ checksum ".circleci/config.yml" }}
- restore_cache:
key: meteor-packages-{{ checksum ".meteor/versions" }}-{{ checksum ".circleci/config.yml" }}
- restore_cache:
key: npm-packages-{{ checksum "package.json" }}-{{ checksum ".circleci/config.yml" }}
- run:
name: install build essentials
command: sudo apt-get install -y build-essential
- run:
name: restore cached meteor bin
command: |
if [ -e ~/build-temp/meteor-bin ]
then
echo "Cached Meteor bin found, restoring it"
sudo cp ~/build-temp/meteor-bin /usr/local/bin/meteor
else
echo "No cached Meteor bin found."
fi
# if there is no cached meteor version, install it
- run:
name: install Meteor
command: |
# only install meteor if bin isn't found
command -v meteor >/dev/null 2>&1 || curl https://install.meteor.com | /bin/sh
- run:
name: check versions
command: |
echo "Meteor version:"
meteor --version
which meteor
echo "Meteor node version:"
meteor node -v
echo "Meteor npm version:"
meteor npm -v
echo "Java version:"
java -version
- run:
name: install yarn
command: meteor npm i -g yarn
- run:
name: install npm packages
command: meteor yarn
- run:
name: code linting
command: meteor yarn lint
# move meteor bin so it can be properly cached
- run:
name: copy meteor bin to build cache
command: |
mkdir -p ~/build-temp
cp /usr/local/bin/meteor ~/build-temp/meteor-bin
# cache meteor& npm packages
- save_cache:
key: build-temp-{{ checksum ".meteor/release" }}-{{ checksum ".circleci/config.yml" }}
paths:
- ~/build-temp
- save_cache:
key: meteor-release-{{ checksum ".meteor/release" }}-{{ checksum ".circleci/config.yml" }}
paths:
- ~/.meteor
- save_cache:
key: meteor-packages-{{ checksum ".meteor/versions" }}-{{ checksum ".circleci/config.yml" }}
paths:
- .meteor/
- save_cache:
key: npm-packages-{{ checksum "package.json" }}-{{ checksum ".circleci/config.yml" }}
paths:
- ./node_modules/
- ~/.npm/
================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true
[*.{js,html}]
charset = utf-8
end_of_line = lf
indent_brace_style = 1TBS
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 120
quote_type = auto
spaces_around_operators = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
================================================
FILE: .eslintignore
================================================
packages/_*
**/*.test.js
================================================
FILE: .eslintrc
================================================
{
"extends": [
"eslint:recommended",
"plugin:meteor/recommended",
"plugin:react/recommended"
],
"parser": "babel-eslint",
"parserOptions": {
"allowImportExportEverywhere": true,
"ecmaVersion": 6,
"sourceType": "module"
},
"rules": {
"babel/generator-star-spacing": 0,
"babel/new-cap": [
1,
{
"capIsNewExceptions": [
"Optional",
"OneOf",
"Maybe",
"MailChimpAPI",
"Juice",
"Run",
"AppComposer",
"Query"
]
}
],
"babel/array-bracket-spacing": 1,
"babel/object-curly-spacing": 0,
# "babel/object-curly-spacing": [1, "always", { "objectsInObjects": false, "arraysInObjects": false }],
"babel/object-shorthand": 0,
"babel/arrow-parens": 0,
"no-await-in-loop": 1,
"comma-dangle": 0,
"key-spacing": 0,
"meteor/audit-argument-checks": 0,
"no-case-declarations": 0,
"no-console": 1,
"no-extra-boolean-cast": 0,
"no-undef": 1,
"no-unused-vars": [
1,
{
"vars": "all",
"args": "none",
"varsIgnorePattern": "React|PropTypes|Component"
}
],
"no-useless-escape": 0,
"quotes": [
1,
"single",
"avoid-escape"
],
"react/display-name": 0,
"react/prop-types": 0,
"semi": [1, "always"]
},
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"meteor": true,
"node": true,
"mocha": true
},
"plugins": [
"babel",
"meteor",
"react",
"prettier",
"mocha"
],
"settings": {
"import/resolver": "meteor"
},
"root": true,
"globals": {
"param": true,
"returns": true
}
}
================================================
FILE: .github/CONTRIBUTING.md
================================================
Before starting on a new feature, please [check out the roadmap](https://trello.com/b/dwPR0LTz/vulcanjs-roadmap) and come check-in in the [Vulcan Slack channel](http://slack.telescopeapp.org/).
Also, all PRs should be made to the `devel` branch, not `master`.
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots (if applicable)**
If applicable, add screenshots to help explain your problem.
**Device (if applicable):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
================================================
FILE: .gitignore
================================================
.eslintcache
npm-debug.log
*.scssc
.sass-cache/*
.DS_Store
*-ck.js
providers_secret.js
*.sublime-project
*.sublime-workspace
codekit-config.json
config.rb
deploy.sh
.demeteorized
dump/
dump/*
settings.json
settings.json.not-used
production.settings.json
.idea
scratch
.deploy
.deploy/*
### Meteor template
.meteor/local
.meteor/meteorite
mup.json
packages_update.py
versions
get_file_list.sh
packages_update.py
publish_packages.sh
node_modules
bundle.tar.gz
jsdoc-conf.json
jsdoc.json
packages/nova-router/.npm
npm-debug.log
typings
storybook-static
docs/storybook-material
docs/storybook-bootstrap
schema.graphql
.logs
================================================
FILE: .jshintrc
================================================
//.jshintrc
{
// JSHint Meteor Configuration File
// Match the Meteor Style Guide
//
// By @raix with contributions from @aldeed and @awatson1978
// Source https://github.com/raix/Meteor-jshintrc
//
// See http://jshint.com/docs/ for more details
"maxerr" : 50, // {int} Maximum error before stopping
// Enforcing
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
"camelcase" : true, // true: Identifiers must be in camelCase
// "curly" : true, // true: Require {} for every new block or scope
"eqeqeq" : true, // true: Require triple equals (===) for comparison
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
"indent" : 2, // {int} Number of spaces to use for indentation
"latedef" : false, // true: Require variables/functions to be defined before being used
"newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
"noempty" : true, // true: Prohibit use of empty blocks
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
"plusplus" : false, // true: Prohibit use of `++` & `--`
"quotmark" : false, // Quotation mark consistency:
// false : do nothing (default)
// true : ensure whatever is used is consistent
// "single" : require single quotes
// "double" : require double quotes
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
"unused" : true, // true: Require all defined variables be used
"strict" : false, // true: Requires all functions run in ES5 Strict Mode
"trailing" : true, // true: Prohibit trailing whitespaces
"maxparams" : false, // {int} Max number of formal params allowed per function
"maxdepth" : false, // {int} Max depth of nested blocks (within functions)
"maxstatements" : false, // {int} Max number statements per function
"maxcomplexity" : false, // {int} Max cyclomatic complexity per function
"maxlen" : false, // {int} Max number of characters per line
// Relaxing
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"boss" : false, // true: Tolerate assignments where comparisons would be expected
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
"eqnull" : false, // true: Tolerate use of `== null`
"es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
"esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
// (ex: `for each`, multiple try/catch, function expression…)
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
"funcscope" : false, // true: Tolerate defining variables inside control statements"
"globalstrict" : true, // true: Allow global "use strict" (also enables 'strict')
"iterator" : false, // true: Tolerate using the `__iterator__` property
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
"laxcomma" : false, // true: Tolerate comma-first style coding
"loopfunc" : false, // true: Tolerate functions being defined in loops
"multistr" : false, // true: Tolerate multi-line strings
"proto" : false, // true: Tolerate using the `__proto__` property
"scripturl" : false, // true: Tolerate script-targeted URLs
"smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
"validthis" : false, // true: Tolerate using this in a non-constructor function
// Environments
"browser" : true, // Web Browser (window, document, etc)
"couch" : false, // CouchDB
"devel" : true, // Development/debugging (alert, confirm, etc)
"dojo" : false, // Dojo Toolkit
"jasmine" : true, // Jasmine testing framework
"jquery" : false, // jQuery
"mootools" : false, // MooTools
"node" : false, // Node.js
"nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
"prototypejs" : false, // Prototype and Scriptaculous
"rhino" : false, // Rhino
"worker" : false, // Web Workers
"wsh" : false, // Windows Scripting Host
"yui" : false, // Yahoo User Interface
//"meteor" : false, // Meteor.js
// Legacy
"nomen" : false, // true: Prohibit dangling `_` in variables
"onevar" : false, // true: Allow only one `var` statement per function
"passfail" : false, // true: Stop on first error
"white" : false, // true: Check against strict whitespace and indentation rules
// Custom globals, from http://docs.meteor.com, in the order they appear there
"globals" : {
"Meteor": false,
"DDP": false,
"Mongo": false, //Meteor.Collection renamed to Mongo.Collection
"Session": false,
"Accounts": false,
"Template": false,
"Blaze": false, //UI is being renamed Blaze
"UI": false,
"Match": false,
"check": false,
"Tracker": false, //Deps renamed to Tracker
"Deps": false,
"ReactiveVar": false,
"EJSON": false,
"HTTP": false,
"Email": false,
"Assets": false,
"Handlebars": false, // https://github.com/meteor/meteor/wiki/Handlebars
"Package": false,
// Meteor internals
"DDPServer": false,
"global": false,
"Log": false,
"MongoInternals": false,
"process": false,
"WebApp": false,
"WebAppInternals": false,
// globals useful when creating Meteor packages
"Npm": false,
"Tinytest": false,
// Meteor packages
"$": false,
"_": false,
"__": false,
"AccountsTemplates": false,
"AutoForm": false,
"Avatar": false,
"Cookie": false,
"FastRender": false,
"Gravatar": false,
"Herald": false,
"Kadira": false,
"moment": false,
"Random": false,
"RouteController": false,
"Router": false,
"SEO": false,
"SimpleSchema": false,
"SubsManager": false,
"SyncedCron": false,
"TAPi18n": false,
"FlowRouter": false,
// Telescope collections
"Categories": true,
"Comments": true,
"Feeds": true,
"Invites": true,
"Migrations": true,
"Posts": true,
"Releases": true,
"Searches": true,
"Users": true,
// Telescope objects
"buildAndSendEmail": true,
"buildEmailNotification": true,
"buildEmailTemplate": true,
"compareVersions": true,
"coreSubscriptions": true,
"daysPerPage": true,
"deleteDummyContent": true,
"Events": true,
"fetchFeeds": true,
"getCategoryUrl": true,
"getEmailTemplate": true,
"getPostCategories": true,
"getTemplate": true,
"getVotePower": true,
"i18n": true,
"InviteSchema": true,
"logEvent": true,
"marked": true,
"Messages": true,
"Pages": true,
"sendEmail": true,
"serveAPI": true,
"Settings": true,
"Telescope": true,
"templates": true,
"themeSettings": true
},
"esnext": true
}
================================================
FILE: .meteor/.finished-upgraders
================================================
# This file contains information which helps Meteor properly upgrade your
# app when you run 'meteor update'. You should check it into version control
# with your project.
notices-for-0.9.0
notices-for-0.9.1
0.9.4-platform-file
notices-for-facebook-graph-api-2
1.2.0-standard-minifiers-package
1.2.0-meteor-platform-split
1.2.0-cordova-changes
1.2.0-breaking-changes
1.3.0-split-minifiers-package
1.3.5-remove-old-dev-bundle-link
1.4.0-remove-old-dev-bundle-link
1.4.1-add-shell-server-package
1.4.3-split-account-service-packages
1.5-add-dynamic-import-package
1.7-split-underscore-from-meteor-base
1.8.3-split-jquery-from-blaze
================================================
FILE: .meteor/.gitignore
================================================
dev_bundle
local
meteorite
================================================
FILE: .meteor/.id
================================================
# This file contains a token that is unique to your project.
# Check it into your repository along with the rest of this directory.
# It can be used for purposes such as:
# - ensuring you don't accidentally deploy one app on top of another
# - providing package authors with aggregated statistics
1txv9r51kxht481ysl8bb
================================================
FILE: .meteor/cordova-plugins
================================================
================================================
FILE: .meteor/packages
================================================
# see http://docs.vulcanjs.org/packages
vulcan:core
############ Language Packages ############
vulcan:i18n-en-us
# vulcan:i18n-es-es
############ Accounts Packages ############
accounts-base@2.0.0
accounts-password@2.0.0
# accounts-twitter
# accounts-facebook
vulcan:debug
# To run the backoffice
vulcan:backoffice
vulcan:accounts
# Ui
vulcan:ui-bootstrap
# vulcan:ui-material
meteortesting:mocha
apollo
service-configuration@1.1.0
================================================
FILE: .meteor/platforms
================================================
server
browser
================================================
FILE: .meteor/release
================================================
METEOR@2.3.4
================================================
FILE: .meteorignore
================================================
stories
storybook-static
================================================
FILE: .nvmrc
================================================
v12.21.0
================================================
FILE: .prettierrc.js
================================================
'use strict';
const {esNextPaths} = require('./.vulcan/shared/pathsByLanguageVersion');
module.exports = {
bracketSpacing: true,
singleQuote: true,
jsxBracketSameLine: true,
trailingComma: 'es5',
printWidth: 140,
parser: 'babylon',
overrides: [
{
files: esNextPaths,
options: {
trailingComma: 'all',
},
},
],
};
================================================
FILE: .storybook/addons.js
================================================
// Init storybook addons here
import '@storybook/addon-knobs/register';
import '@storybook/addon-actions/register';
import '@storybook/addon-links/register';
import 'storybook-addon-intl/register';
================================================
FILE: .storybook/config.js
================================================
/**
* Global configuration of the stories
*/
import { addDecorator, configure } from '@storybook/react';
if (process.env.STORYBOOK_UI === 'material') {
// init UI using a Decorator
console.log('Running storybook with Material UI');
const MaterialUIDecorator = require('./decorators/MaterialUIDecorator').default;
addDecorator(MaterialUIDecorator);
} else {
console.log('Running storybook with Bootstrap');
const BootstrapDecorator = require('./decorators/BootstrapDecorator').default;
addDecorator(BootstrapDecorator);
}
import onStorybookStart from './startup';
onStorybookStart(() => console.log('Storybook started'));
// load the components in the app so that <Component.Whatever /> is defined
import { populateComponentsApp, initializeFragments } from 'meteor/vulcan:lib';
onStorybookStart(() => {
// we need registered fragments to be initialized because populateComponentsApp will run
// hocs, like withUpdate, that rely on fragments
initializeFragments();
// actually fills the Components object
populateComponentsApp();
});
/*
Standard Config
*/
// automatically import all files ending in *.stories.js
const req = require.context('../stories', true, /.stories.js$/);
function loadStories() {
req.keys().forEach(filename => req(filename));
}
/*
React Router Config
See https://github.com/gvaldambrini/storybook-router/tree/master/packages/react
*/
import StoryRouter from 'storybook-react-router';
addDecorator(StoryRouter());
/*
Vulcan core Components
*/
import 'meteor/vulcan:core';
/*
i18n
See https://github.com/truffls/storybook-addon-intl
*/
import 'meteor/vulcan:i18n-en-us/lib/en_US.js';
import { setIntlConfig, withIntl } from 'storybook-addon-intl';
import { addLocaleData } from 'react-intl';
import { Strings, Locales } from './helpers.js';
const getMessages = locale => Strings[locale];
/*
En
*/
import enLocaleData from 'react-intl/locale-data/en';
addLocaleData(enLocaleData);
//import 'EnUS';
// Set intl configuration
setIntlConfig({
locales: Locales.map(locale => locale.id),
defaultLocale: 'en',
getMessages,
});
// Register decorator
addDecorator(withIntl);
// Run storybook
configure(loadStories, module);
================================================
FILE: .storybook/decorators/BootstrapDecorator.js
================================================
/**
* Use this decorator to setup Bootstrap
*/
import React from 'react'
import 'meteor/vulcan:ui-bootstrap/lib/stylesheets/bootstrap.min.css';
import 'meteor/vulcan:ui-bootstrap/lib/stylesheets/style.scss';
import 'meteor/vulcan:ui-bootstrap/lib/stylesheets/datetime.scss';
// load UI components
import 'meteor/vulcan:ui-bootstrap/lib/modules/components.js';
export default storyFn => (<div>{storyFn()}</div>)
================================================
FILE: .storybook/decorators/MaterialUIDecorator.js
================================================
/*
Use this decorator to load Material UI
*/
import { Components } from 'meteor/vulcan:lib';
// load UI components
import React from 'react'
import 'meteor/vulcan:ui-material/lib/modules/components.js';
import { wrapWithMuiTheme } from 'meteor/vulcan:ui-material';
export default storyFn => (
<Components.ThemeProvider>
<div>{storyFn()}</div>
</Components.ThemeProvider>
)
================================================
FILE: .storybook/helpers.js
================================================
import merge from 'lodash/merge';
/*
Simplified versions of Vulcan APIs and helpers
*/
/*
Components
*/
export const Components = {}; // will be populated on startup
export const ComponentsMockProps = {};
export const getMockProps = (componentName, overrideProps) => {
return merge({}, ComponentsMockProps[componentName], overrideProps);
};
export function registerComponent(name, rawComponent, ...hocs) {
// support single-argument syntax
if (typeof arguments[0] === 'object') {
// note: cannot use `const` because name, components, hocs are already defined
// as arguments so destructuring cannot work
// eslint-disable-next-line no-redeclare
var { name, component, hocs = [] } = arguments[0];
rawComponent = component;
}
// store the component in the table
Components[name] = rawComponent
}
export const replaceComponent = registerComponent;
export const instantiateComponent = (component, props) => {
if (!component) {
return null;
} else if (typeof component === 'string') {
const Component = getComponent(component);
return <Component {...props} />;
} else if (
typeof component === 'function' &&
component.prototype &&
component.prototype.isReactComponent
) {
const Component = component;
return <Component {...props} />;
} else if (typeof component === 'function') {
return component(props);
} else {
return component;
}
};
export const coreComponents = [
'Alert',
'Button',
'Dropdown',
'Modal',
'ModalTrigger',
'Table',
'FormComponentCheckbox',
'FormComponentCheckboxGroup',
'FormComponentDate',
'FormComponentDate2',
'FormComponentDateTime',
'FormComponentDefault',
'FormComponentText',
'FormComponentEmail',
'FormComponentNumber',
'FormComponentRadioGroup',
'FormComponentSelect',
'FormComponentSelectMultiple',
'FormComponentStaticText',
'FormComponentTextarea',
'FormComponentTime',
'FormComponentUrl',
'FormControl',
'FormElement',
'FormItem',
];
/*
i18n
*/
export const Strings = {};
export const addStrings = (language, strings) => {
if (typeof Strings[language] === 'undefined') {
Strings[language] = {};
}
Strings[language] = {
...Strings[language],
...strings
};
};
export const Locales = [];
export const registerLocale = locale => {
Locales.push(locale);
};
/*
Users
*/
export const isAdmin = () => true;
export const getProfileUrl = (user, isAbsolute) => {
if (typeof user === 'undefined') {
return '';
}
isAbsolute = typeof isAbsolute === 'undefined' ? false : isAbsolute; // default to false
var prefix = isAbsolute ? Utils.getSiteUrl().slice(0, -1) : '';
if (user.slug) {
return `${prefix}/users/${user.slug}`;
} else {
return '';
}
};
export const getDisplayName = (user) => {
if (!user) {
return '';
} else {
return user.displayName ? user.displayName : Users.getUserName(user);
}
};
export const avatar = {
getUrl: user => 'https://api.adorable.io/avatars/285/abotaat@adorable.io.png',
getInitials: user => 'SG',
}
/*
Helpers
*/
export function capitalize(string) {
return string.replace(/\-/, ' ').split(' ').map(word => {
return word.charAt(0).toUpperCase() + word.slice(1);
}).join(' ');
}
/*
Other Exports
*/
export const getSetting = (name, defaultSetting) => defaultSetting;
export const track = () => {};
export const addCallback = () => {};
export const withCurrentUser = c => c;
export const withUpdate = c => c;
================================================
FILE: .storybook/loaders/starter-example-loader.js
================================================
/**
*
* Load the local Vulcan packages, inspired by vulcan-loader
*
*/
const { getOptions } = require('loader-utils');
module.exports = function loader(source) {
const options = getOptions(this)
const { packagesDir, environment = 'client' } = options
// prefixing your packages name makes it easier to write a loader
const prefix = `${packagesDir}/example-`
const defaultPath = `/lib/${environment}/main.js`
const result = source.replace(
// This regex will match:
// meteor/example-{packageName}{some-optional-import-path}
//
// Example:
// meteor/example-forum => match, packageName="forum"
// meteor/example-forum/foobar.js => match, packageName="forum", importPath="/foobar.js"
// meteor/another-package => do not match
//
// Explanation:
// .+?(?=something) matches every char until "something" is met, excluding something
// we use it to matche the package name, until we meet a ' or "
/meteor\/example-(.*?(?=\/|'|"))(.*?(?=\'|\"))/g, // match Meteor packages that are lfg packages, + the import path (without the quotes)
(match, packageName, importPath) => {
console.log("Found Starter example package", packageName)
if (importPath){
return `${prefix}${packageName}${importPath}`
}
return `${prefix}${packageName}${defaultPath}`
}
)
return result
}
================================================
FILE: .storybook/mocks/Meteor.js
================================================
// FIXME: we can't use ES6 imports in mocks, not sure why
module.exports = {
settings: {},
startup: () => { },
_localStorage: window ? window.localStorage : { setItem: () => {}, getItem: () => {} },
isClient: () => true,
isServer: () => false,
absoluteUrl: () => 'http://vulcanjs.org/'
}
================================================
FILE: .storybook/mocks/Mongo.js
================================================
module.exports = {
Collection: class Collection {}
}
================================================
FILE: .storybook/mocks/Vulcan.js
================================================
module.exports = {
}
================================================
FILE: .storybook/mocks/meteor-apollo.js
================================================
module.exports = {
MeteorAccountsLink: class MeteorAccountsLink {}
}
================================================
FILE: .storybook/mocks/meteor-server-render.js
================================================
module.exports = {
onPageLoad: () => { }
}
================================================
FILE: .storybook/mocks/vulcan-email.js
================================================
module.exports = {
addEmails: () => {}
}
================================================
FILE: .storybook/startup.js
================================================
/**
* Allow to run callbacks on Storybook startup, after stories are imported
* Based on Meteor.startup client side implementation
* @see https://github.com/meteor/meteor/blob/24865b28a0689de8b4949fb69ea1f95da647cd7a/packages/meteor/startup_client.js
*/
var callbackQueue = [];
var isLoadingCompleted = false;
var isReady = false;
// Keeps track of how many events to wait for in addition to loading completing,
// before we're considered ready.
var readyHoldsCount = 0;
var maybeReady = function () {
if (isReady || !isLoadingCompleted || readyHoldsCount > 0)
return;
isReady = true;
// Run startup callbacks
while (callbackQueue.length)
(callbackQueue.shift())();
};
var loadingCompleted = function () {
if (!isLoadingCompleted) {
isLoadingCompleted = true;
maybeReady();
}
}
if (document.readyState === 'complete' || document.readyState === 'loaded') {
// Loading has completed,
// but allow other scripts the opportunity to hold ready
window.setTimeout(loadingCompleted);
} else { // Attach event listeners to wait for loading to complete
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', loadingCompleted, false);
window.addEventListener('load', loadingCompleted, false);
} else { // Use IE event model for < IE9
document.attachEvent('onreadystatechange', function () {
if (document.readyState === "complete") {
loadingCompleted();
}
});
window.attachEvent('load', loadingCompleted);
}
}
/**
* @summary Run code when a client or a server starts.
* @locus Anywhere
* @param {Function} func A function to run on startup.
*/
const onStartup = function (callback) {
// Fix for < IE9, see http://javascript.nwbox.com/IEContentLoaded/
var doScroll = !document.addEventListener &&
document.documentElement.doScroll;
if (!doScroll || window !== top) {
if (isReady)
callback();
else
callbackQueue.push(callback);
} else {
try { doScroll('left'); }
catch (error) {
setTimeout(function () { onStartup(callback); }, 50);
return;
};
callback();
}
};
export default onStartup
================================================
FILE: .storybook/webpack.config.js
================================================
/*
Webpack setup
Adapt with your own loaders and config if necessary
*/
const path = require('path');
const webpack = require('webpack');
// Find Vulcan install, should not be modified
/**
* Smart function to find Vulcan packages
*
* You can either provide a path to Vulcan as VULCAN_DIR env
* or set the METEOR_PACKAGE_DIR variable
*/
const findPathToVulcanPackages = () => {
// look for VULCAN_DIR env variable
if (process.env.VULCAN_DIR) return `${process.env.VULCAN_DIR}/packages`;
// look for METEOR_PACKAGE_DIRS variable
const rawPackageDirs = process.env.METEOR_PACKAGE_DIRS;
if (rawPackageDirs) {
const dirs = rawPackageDirs.split(':');
// Vulcan dir should be '/some-folder/Vulcan/packages'
const vulcanPackagesDir = dirs.find(dir => !!dir.match(/\/Vulcan\//));
if (vulcanPackagesDir) {
return vulcanPackagesDir;
}
console.log(`
Please either set the VULCAN_DIR variable to your Vulcan folder or
set METEOR_PACKAGE_DIRS to your <Vulcan>/packages folder.
Fallback to default value: '../../Vulcan'.`);
}
// default value
return '../../Vulcan/packages';
};
// path to your Vulcan repo (see 2-repo install in docs)
const pathToVulcanPackages = path.resolve(__dirname, findPathToVulcanPackages());
module.exports = ({ config }) => {
// Define aliases. Allow to mock some packages.
config.resolve = {
...config.resolve,
// this way node_modules are always those of current project and not of Vulcan
alias: {
...config.resolve.alias,
// Vulcan Packages
'meteor/vulcan:email': path.resolve(__dirname, './mocks/vulcan-email'),
//'meteor/vulcan:i18n': 'react-intl',
// Other packages
'meteor/apollo': path.resolve(__dirname, './mocks/meteor-apollo'),
'meteor/server-render': path.resolve(__dirname, './mocks/meteor-server-render'),
},
};
// Mock global variables
config.plugins.push(
new webpack.ProvidePlugin({
// mock global variables
Meteor: path.resolve(__dirname, './mocks/Meteor'),
Vulcan: path.resolve(__dirname, './mocks/Vulcan'),
Mongo: path.resolve(__dirname, './mocks/Mongo'),
_: 'underscore',
})
);
// force the config to use local node_modules instead the modules from Vulcan install
// Should not be modified
config.resolve.modules.push(path.resolve(__dirname, '../node_modules'));
// handle meteor packages
// Add your custom loaders here if necessary
config.module.rules.push({
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loaders: [
// Remove meteor package (last step)
{
loader: 'scrap-meteor-loader',
options: {
// those package will be preserved, we provide a mock instead
preserve: ['meteor/apollo', 'meteor/vulcan:email', 'meteor/server-render'],
},
},
// Load Vulcan core packages
{
loader: 'vulcan-loader',
options: {
vulcanPackagesDir: pathToVulcanPackages,
environment: 'client',
// those package are mocked using an alias instead or just ignored
exclude: ['meteor/vulcan:email', 'meteor/vulcan:accounts'],
},
},
// Add your loaders here for your own local vulcan-packages
// Example for Vulcan Starter:
{
loader: path.resolve(__dirname, './loaders/starter-example-loader'),
options: {
packagesDir: path.resolve(__dirname, '../packages'),
environment: 'client',
},
},
],
});
// Parse JSX files outside of Storybook directory
// Should not be modified
config.module.rules.push({
test: /\.(js|jsx)$/,
loaders: [
{
loader: 'babel-loader',
query: {
presets: [
'@babel/react',
{
plugins: [
'@babel/plugin-proposal-class-properties',
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-proposal-nullish-coalescing-operator',
],
},
],
},
},
],
});
// Parse SCSS files
// Should not be modfied
config.module.rules.push({
test: /\.scss$/,
loaders: ['style-loader', 'css-loader', 'sass-loader'],
// include: path.resolve(__dirname, "../")
});
// Return the altered config
return config;
};
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
================================================
FILE: .vulcan/.gitignore
================================================
bkp
package.json
================================================
FILE: .vulcan/prestart_vulcan.js
================================================
#!/usr/bin/env node
//Functions
var fs = require('fs');
function existsSync(filePath){
try{
fs.statSync(filePath);
}catch(err){
if(err.code == 'ENOENT') return false;
}
return true;
}
function copySync(origin,target){
try{
fs.writeFileSync(target, fs.readFileSync(origin));
}catch(err){
if(err.code == 'ENOENT') return false;
}
return true;
}
//Add Definition Colors
const chalk = require('chalk');
//Vulcan letters
console.log(chalk.gray(' ___ ___ '));
console.log(chalk.gray(' '+String.fromCharCode(92))+chalk.redBright(String.fromCharCode(92))+chalk.dim.yellow(String.fromCharCode(92))+chalk.gray(String.fromCharCode(92)+' /')+chalk.dim.yellow('/')+chalk.yellowBright('/')+chalk.gray('/'));
console.log(chalk.gray(' '+String.fromCharCode(92))+chalk.redBright(String.fromCharCode(92))+chalk.dim.yellow(String.fromCharCode(92))+chalk.gray(String.fromCharCode(92))+chalk.gray('/')+chalk.dim.yellow('/')+chalk.yellowBright('/')+chalk.gray('/ Vulcan.js'));
console.log(chalk.gray(' '+String.fromCharCode(92))+chalk.redBright(String.fromCharCode(92))+chalk.dim.yellow(String.fromCharCode(92))+chalk.dim.yellow('/')+chalk.yellowBright('/')+chalk.gray('/ The full-stack React+GraphQL framework'));
console.log(chalk.gray(' ──── '));
var os = require('os');
var exec = require('child_process').execSync;
var options = {
encoding: 'utf8'
};
//Check Meteor and install if not installed
var checker = exec("meteor --version", options);
if (!checker.includes("Meteor ")) {
console.log("Vulcan requires Meteor but it's not installed. Trying to Install...");
//Check platform
if (os.platform()=='darwin') {
//Mac OS platform
console.log("🌋 "+chalk.bold.yellow("Good news you have a Mac and we will install it now! }"));
console.log(exec("curl https://install.meteor.com/ | bash", options));
} else if (os.platform()=='linux') {
//GNU/Linux platform
console.log("🌋 "+chalk.bold.yellow("Good news you are on GNU/Linux platform and we will install Meteor now!"));
console.log(exec("curl https://install.meteor.com/ | bash", options));
} else if (os.platform()=='win32') {
//Windows NT platform
console.log("> "+chalk.bold.yellow("Oh no! you are on a Windows platform and you will need to install Meteor Manually!"));
console.log("> "+chalk.dim.yellow("Meteor for Windows is available at: ")+chalk.redBright("https://install.meteor.com/windows"));
process.exit(-1)
}
} else {
//Check exist file settings and create if not exist
if (!existsSync("settings.json")) {
console.log("> "+chalk.bold.yellow("Creating your own settings.json file...\n"));
if (!copySync("sample_settings.json","settings.json")) {
console.log("> "+chalk.bold.red("Error Creating your own settings.json file...check files and permissions\n"));
process.exit(-1);
}
}
console.log("> "+chalk.bold.yellow("Happy hacking with Vulcan!"));
console.log("> "+chalk.dim.yellow("The docs are available at: ")+chalk.redBright("http://docs.vulcanjs.org"));
}
================================================
FILE: .vulcan/prettier/index.js
================================================
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
// Based on similar script in Jest
// https://github.com/facebook/jest/blob/a7acc5ae519613647ff2c253dd21933d6f94b47f/scripts/prettier.js
const chalk = require('chalk');
const glob = require('glob');
const prettier = require('prettier');
const fs = require('fs');
const listChangedFiles = require('../shared/listChangedFiles');
const prettierConfigPath = require.resolve('../../.prettierrc');
const mode = process.argv[2] || 'check';
const shouldWrite = mode === 'write' || mode === 'write-changed';
const onlyChanged = mode === 'check-changed' || mode === 'write-changed';
const changedFiles = onlyChanged ? listChangedFiles() : null;
let didWarn = false;
let didError = false;
const files = glob
.sync('**/*.js', {ignore: '**/node_modules/**'})
.filter(f => !onlyChanged || changedFiles.has(f));
if (!files.length) {
return;
}
files.forEach(file => {
const options = prettier.resolveConfig.sync(file, {
config: prettierConfigPath,
});
try {
const input = fs.readFileSync(file, 'utf8');
if (shouldWrite) {
const output = prettier.format(input, options);
if (output !== input) {
fs.writeFileSync(file, output, 'utf8');
}
} else {
if (!prettier.check(input, options)) {
if (!didWarn) {
console.log(
'\n' +
chalk.red(
` This project uses prettier to format all JavaScript code.\n`
) +
chalk.dim(` Please run `) +
chalk.reset('yarn prettier-all') +
chalk.dim(
` and add changes to files listed below to your commit:`
) +
`\n\n`
);
didWarn = true;
}
console.log(file);
}
}
} catch (error) {
didError = true;
console.log('\n\n' + error.message);
console.log(file);
}
});
if (didWarn || didError) {
process.exit(1);
}
================================================
FILE: .vulcan/shared/listChangedFiles.js
================================================
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
const execFileSync = require('child_process').execFileSync;
const exec = (command, args) => {
console.log('> ' + [command].concat(args).join(' '));
const options = {
cwd: process.cwd(),
env: process.env,
stdio: 'pipe',
encoding: 'utf-8',
};
return execFileSync(command, args, options);
};
const execGitCmd = args =>
exec('git', args)
.trim()
.toString()
.split('\n');
const listChangedFiles = () => {
const mergeBase = execGitCmd(['merge-base', 'HEAD', 'devel']);
return new Set([
...execGitCmd(['diff', '--name-only', '--diff-filter=ACMRTUB', mergeBase]),
...execGitCmd(['ls-files', '--others', '--exclude-standard']),
]);
};
module.exports = listChangedFiles;
================================================
FILE: .vulcan/shared/pathsByLanguageVersion.js
================================================
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
// Files that are transformed and can use ES6/Flow/JSX.
const esNextPaths = [
// Internal forwarding modules
'packages/*/*.js',
'packages/*/*.jsx',
];
module.exports = {
esNextPaths,
};
================================================
FILE: .vulcan/update_package.js
================================================
#!/usr/bin/env node
/*
### Usage
Place Vulcan's package.json in .vulcan/package.json and run meteor npm run update-package-json form your project's folder.
You'll have to manually manage breaking updates (example, from ^2.0.1 to ^3.0.2).
### Features
- makes a backup of the project's package.json
- only merges dependencies, devDependencies and peerDependencies
- if full merge is successful, shows a list of updated versions
- will store vulcanVersion in package.json for future updates
*/
var fs = require('fs');
var mergePackages = require('@userfrosting/merge-package-dependencies');
var jsdiff = require('diff');
require('colors');
function diffPartReducer(accumulator, part) {
// green for additions, red for deletions
// grey for common parts
var color = part.added ? 'green' : (part.removed ? 'red' : 'grey');
return {
text: (accumulator.text || '') + part.value[color],
count: (accumulator.count || 0) + (part.added || part.removed ? 1 : 0),
};
}
// copied from sort-object-keys package
function sortObjectByKeyNameList(object, sortWith) {
var keys;
var sortFn;
if (typeof sortWith === 'function') {
sortFn = sortWith;
} else {
keys = sortWith;
}
return (keys || []).concat(Object.keys(object).sort(sortFn)).reduce(function(total, key) {
total[key] = object[key];
return total;
}, Object.create({}));
}
var appDirPath = './';
var vulcanDirPath = './.vulcan/';
if (!fs.existsSync(vulcanDirPath + 'package.json')) {
console.log('Could not find \'' + vulcanDirPath + 'package.json\'');
} else if (!fs.existsSync(appDirPath + 'package.json')) {
console.log('Could not find \'' + appDirPath + 'package.json\'');
} else {
var appPackageFile = fs.readFileSync(appDirPath + '/package.json');
var appPackageJson = JSON.parse(appPackageFile);
var vulcanPackageFile = fs.readFileSync(vulcanDirPath + 'package.json');
var vulcanPackageJson = JSON.parse(vulcanPackageFile);
if (appPackageJson.vulcanVersion) {
console.log(appPackageJson.name + '@' + appPackageJson.version +
' \'package.json\' will be updated from Vulcan@' + appPackageJson.vulcanVersion +
' to Vulcan@' + vulcanPackageJson.version +
' dependencies.');
} else {
console.log(appPackageJson.name + '@' + appPackageJson.version +
' \'package.json\' will be updated with Vulcan@' + vulcanPackageJson.version +
' dependencies.');
}
var backupDirPath = vulcanDirPath + 'bkp/';
if (!fs.existsSync(backupDirPath)) {
fs.mkdirSync(backupDirPath);
}
var backupFilePath = backupDirPath + 'package-' + Date.now() + '.json';
console.log('Saving a backup of \'' + appDirPath + 'package.json\' in \'' + backupFilePath + '\'');
fs.writeFileSync(backupFilePath, appPackageFile);
var updatedAppPackageJson = mergePackages.npm(
// IMPORTANT: parse again because mergePackages.npm mutates json
JSON.parse(appPackageFile),
[vulcanDirPath]
);
updatedAppPackageJson.vulcanVersion = vulcanPackageJson.version;
[
'dependencies',
'devDependencies',
'peerDependencies'
].forEach(function(key) {
if (updatedAppPackageJson[key]) {
updatedAppPackageJson[key] = sortObjectByKeyNameList(updatedAppPackageJson[key]);
}
const diff = jsdiff.diffJson(
sortObjectByKeyNameList(appPackageJson[key] || {}),
updatedAppPackageJson[key] || {}
).reduce(diffPartReducer, {});
if (diff.count) {
console.log('Changes in "' + key + '":');
console.log(diff.text);
} else {
console.log('No changes in "' + key + '".');
}
});
fs.writeFileSync(appDirPath + 'package.json', JSON.stringify(updatedAppPackageJson, null, ' '));
}
================================================
FILE: CHANGELOG.md
================================================
### Changelog
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
#### [Unreleased](https://github.com/VulcanJS/Vulcan/compare/1.15.0...HEAD)
- Fixed issue #2664 + Fixed canUpdate on Card.jsx [`#2694`](https://github.com/VulcanJS/Vulcan/pull/2694)
- add to storybook plugin-proposal-optional-chaining to accept component.jsx [`#2662`](https://github.com/VulcanJS/Vulcan/pull/2662)
- Unify Server and Client ThemeProviders and pass apolloClient as prop [`#2691`](https://github.com/VulcanJS/Vulcan/pull/2691)
- Connector filter calbacks [`#2690`](https://github.com/VulcanJS/Vulcan/pull/2690)
- SmartForm minor bug fixes Jan 2020 [`#2687`](https://github.com/VulcanJS/Vulcan/pull/2687)
- Flash messages bug fixes [`#2692`](https://github.com/VulcanJS/Vulcan/pull/2692)
- add graphql.context callback [`#2689`](https://github.com/VulcanJS/Vulcan/pull/2689)
- Material UI minor changes 01-2021 [`#2685`](https://github.com/VulcanJS/Vulcan/pull/2685)
- Flash messages in reactive state [`#2683`](https://github.com/VulcanJS/Vulcan/pull/2683)
- Get string refactor and document [`#2681`](https://github.com/VulcanJS/Vulcan/pull/2681)
- Reactive State [`#2682`](https://github.com/VulcanJS/Vulcan/pull/2682)
- Material UI Number input [`#2684`](https://github.com/VulcanJS/Vulcan/pull/2684)
- Random [`#2675`](https://github.com/VulcanJS/Vulcan/pull/2675)
- getString Refactor And Document [`#2671`](https://github.com/VulcanJS/Vulcan/pull/2671)
- FormDescription to ui-bootstrap [`#2674`](https://github.com/VulcanJS/Vulcan/pull/2674)
- Query filters to mongo params [`#2672`](https://github.com/VulcanJS/Vulcan/pull/2672)
- Fix error message for app.operation_not_allowed [`#2673`](https://github.com/VulcanJS/Vulcan/pull/2673)
- Feature RTL support in locale [`#2670`](https://github.com/VulcanJS/Vulcan/pull/2670)
- React Node Support in getString() [`#2667`](https://github.com/VulcanJS/Vulcan/pull/2667)
- Form Component New Names Fix 2 [`#2666`](https://github.com/VulcanJS/Vulcan/pull/2666)
- Form Component New Names Fix [`#2665`](https://github.com/VulcanJS/Vulcan/pull/2665)
- Form Component New Names [`#2659`](https://github.com/VulcanJS/Vulcan/pull/2659)
- add init callback to smartform [`#2663`](https://github.com/VulcanJS/Vulcan/pull/2663)
- VerifyEmail Bug [`#2660`](https://github.com/VulcanJS/Vulcan/pull/2660)
- i18n Plural Support [`#2654`](https://github.com/VulcanJS/Vulcan/pull/2654)
- Material UI Minor Updates Nov 2020 [`#2655`](https://github.com/VulcanJS/Vulcan/pull/2655)
- only Write and log graphql schema when different from existing file [`#2653`](https://github.com/VulcanJS/Vulcan/pull/2653)
- update permissions for debug schemas [`#2652`](https://github.com/VulcanJS/Vulcan/pull/2652)
- Apollo Client 3 Import Fixes [`#2644`](https://github.com/VulcanJS/Vulcan/pull/2644)
- Material UI Minor Updates Oct 2020 [`#2649`](https://github.com/VulcanJS/Vulcan/pull/2649)
- Multi HoC/Hook Returned Props [`#2651`](https://github.com/VulcanJS/Vulcan/pull/2651)
- Move FormLabel to vulcan:ui-bootstrap [`#2645`](https://github.com/VulcanJS/Vulcan/pull/2645)
- Minor Formatting Oct 2020 [`#2646`](https://github.com/VulcanJS/Vulcan/pull/2646)
- Minor Form Bugs Oct 2020 [`#2647`](https://github.com/VulcanJS/Vulcan/pull/2647)
- Minor Data Layer Fixes Oct 2020 [`#2648`](https://github.com/VulcanJS/Vulcan/pull/2648)
- Add placeholder to the whitelist [`#2643`](https://github.com/VulcanJS/Vulcan/pull/2643)
- Bump lodash.merge from 4.6.1 to 4.6.2 [`#2629`](https://github.com/VulcanJS/Vulcan/pull/2629)
- Bump lodash.mergewith from 4.6.0 to 4.6.2 [`#2630`](https://github.com/VulcanJS/Vulcan/pull/2630)
- Use Symbol.for for vulcan-accounts const STATES [`#2637`](https://github.com/VulcanJS/Vulcan/pull/2637)
- Feature/http only cookie [`#2631`](https://github.com/VulcanJS/Vulcan/pull/2631)
- Upgrade to Meteor 1.10.2 [`#2604`](https://github.com/VulcanJS/Vulcan/pull/2604)
- Validate document permissions bug fix [`#2622`](https://github.com/VulcanJS/Vulcan/pull/2622)
- CurrentUserRefetch [`#2621`](https://github.com/VulcanJS/Vulcan/pull/2621)
- MaterialUiMinorChanges8 [`#2620`](https://github.com/VulcanJS/Vulcan/pull/2620)
- Bump lodash from 4.17.15 to 4.17.19 [`#2600`](https://github.com/VulcanJS/Vulcan/pull/2600)
- FormInputUrlMailSocialScrubbing [`#2606`](https://github.com/VulcanJS/Vulcan/pull/2606)
- MuiInputWithNoLabel [`#2612`](https://github.com/VulcanJS/Vulcan/pull/2612)
- MuiSuggestUpgrades [`#2611`](https://github.com/VulcanJS/Vulcan/pull/2611)
- TooltipButtonUpgrades [`#2610`](https://github.com/VulcanJS/Vulcan/pull/2610)
- MuiModalChanges [`#2609`](https://github.com/VulcanJS/Vulcan/pull/2609)
- SmartFormEnhancements [`#2607`](https://github.com/VulcanJS/Vulcan/pull/2607)
- MaterialUiMinorChanges7 [`#2605`](https://github.com/VulcanJS/Vulcan/pull/2605)
- Upgrade to MUI 4.11.0 [`#2603`](https://github.com/VulcanJS/Vulcan/pull/2603)
- MuiDatatableUpgrades [`#2619`](https://github.com/VulcanJS/Vulcan/pull/2619)
- MuiScrollTriggerUpgrades [`#2618`](https://github.com/VulcanJS/Vulcan/pull/2618)
- RegisterComponentJSDoc [`#2616`](https://github.com/VulcanJS/Vulcan/pull/2616)
- GraphQLComments [`#2615`](https://github.com/VulcanJS/Vulcan/pull/2615)
- SegmentClientFix [`#2614`](https://github.com/VulcanJS/Vulcan/pull/2614)
- GenericMutationWrappersResponse [`#2613`](https://github.com/VulcanJS/Vulcan/pull/2613)
- Bugfix/add correct selector to delete [`#2601`](https://github.com/VulcanJS/Vulcan/pull/2601)
- Feature/showother ui material [`#2592`](https://github.com/VulcanJS/Vulcan/pull/2592)
- Forms submit target verification [`#2568`](https://github.com/VulcanJS/Vulcan/pull/2568)
- add itemProperties openNested option for nested schema [`#2594`](https://github.com/VulcanJS/Vulcan/pull/2594)
- add new update check api to ui-material Card.jsx [`#2593`](https://github.com/VulcanJS/Vulcan/pull/2593)
- fix allowed values for radiogroup [`#2588`](https://github.com/VulcanJS/Vulcan/pull/2588)
- change cookie secure to false on localhost [`#2587`](https://github.com/VulcanJS/Vulcan/pull/2587)
- Jun2020BugFixes1 [`#2583`](https://github.com/VulcanJS/Vulcan/pull/2583)
- change Mui to expect handleChange in props [`#2577`](https://github.com/VulcanJS/Vulcan/pull/2577)
- bugfix - SmartForm cannot update nested input fields [`#2574`](https://github.com/VulcanJS/Vulcan/pull/2574)
- Handle options in FormComponents (fix #2578) [`#2578`](https://github.com/VulcanJS/Vulcan/issues/2578)
- use more robust operationName mock link [`6cd9ec5`](https://github.com/VulcanJS/Vulcan/commit/6cd9ec592df8e25ecb98b9227dcd52ff2ea41585)
- Small clean up; fix form delete [`03c41d6`](https://github.com/VulcanJS/Vulcan/commit/03c41d678b601a10363e7e416b2add5d52ca13aa)
- stop cors validation as early as possible to avoid conflicting checks [`fa42f6e`](https://github.com/VulcanJS/Vulcan/commit/fa42f6e0068bdaca8f5dfaed3d7e49f795581b80)
#### [1.15.0](https://github.com/VulcanJS/Vulcan/compare/1.14.1...1.15.0)
> 10 May 2020
- Bugfix/2550 readable fields with document [`#2564`](https://github.com/VulcanJS/Vulcan/pull/2564)
- feature/update react-helmet [`#2563`](https://github.com/VulcanJS/Vulcan/pull/2563)
- Add useSignout hook to the accounts package [`#2521`](https://github.com/VulcanJS/Vulcan/pull/2521)
- Enable OpenCRUD backwards compatibility [`#2559`](https://github.com/VulcanJS/Vulcan/pull/2559)
- Don't run `options` function until `loading` is false, and `data` is populated [`#2561`](https://github.com/VulcanJS/Vulcan/pull/2561)
- Account/auth features available outside DDP using GraphQL [`#2530`](https://github.com/VulcanJS/Vulcan/pull/2530)
- Use Meteor's version of npm over system default [`#2560`](https://github.com/VulcanJS/Vulcan/pull/2560)
- move muicheckboxgroup proptypes name and options to inputProperties a… [`#2554`](https://github.com/VulcanJS/Vulcan/pull/2554)
- add switch/checkbox alternative in material ui [`#2553`](https://github.com/VulcanJS/Vulcan/pull/2553)
- Bump acorn from 5.7.1 to 5.7.4 [`#2546`](https://github.com/VulcanJS/Vulcan/pull/2546)
- add Express + use bodyParserGraphQL [`#2532`](https://github.com/VulcanJS/Vulcan/pull/2532)
- Update to current valid strikethrough tags [`#2543`](https://github.com/VulcanJS/Vulcan/pull/2543)
- Use Meteor's version of npm over system default [`#2506`](https://github.com/VulcanJS/Vulcan/issues/2506)
- Log out GraphQL schema to schema.graphql on every app start (fix #2517) [`#2517`](https://github.com/VulcanJS/Vulcan/issues/2517)
- add stories for modals [`b6729de`](https://github.com/VulcanJS/Vulcan/commit/b6729dec65afe1de8c5ab489a03958ea6c0bf5f1)
- fix for same origin [`5bfb696`](https://github.com/VulcanJS/Vulcan/commit/5bfb696e18d44c2aa3f28f2a719e703ba5940d3e)
- fix install with Meteor 1.10 [`138fc7c`](https://github.com/VulcanJS/Vulcan/commit/138fc7c914f8a34cd327ee1dbc1bdcd8782d8597)
#### [1.14.1](https://github.com/VulcanJS/Vulcan/compare/1.14.0...1.14.1)
> 19 February 2020
- Enhancement/forms accessibility [`#2519`](https://github.com/VulcanJS/Vulcan/pull/2519)
- Add spanish translations [`#2518`](https://github.com/VulcanJS/Vulcan/pull/2518)
- Use multiQueryUpdater in update2 to properly sort/filter [`#2497`](https://github.com/VulcanJS/Vulcan/pull/2497)
- change tooltip aria-label [`#2515`](https://github.com/VulcanJS/Vulcan/pull/2515)
- fix call to sortBy in Datatable.jsx [`#2514`](https://github.com/VulcanJS/Vulcan/pull/2514)
- Bump handlebars from 4.0.11 to 4.3.0 [`#2491`](https://github.com/VulcanJS/Vulcan/pull/2491)
- Enhancement/mui radio [`#2503`](https://github.com/VulcanJS/Vulcan/pull/2503)
- fix material ui seletmultiple [`#2502`](https://github.com/VulcanJS/Vulcan/pull/2502)
- datatable fix for material ui [`#2493`](https://github.com/VulcanJS/Vulcan/pull/2493)
- Allow itemProperties to be passed on to FormComponent [`#2505`](https://github.com/VulcanJS/Vulcan/pull/2505)
- Prevent calling forEachDocumentField on fields without a schema [`#2504`](https://github.com/VulcanJS/Vulcan/pull/2504)
- Semantized classname [`#2499`](https://github.com/VulcanJS/Vulcan/pull/2499)
- fix field permission validation bug [`#2498`](https://github.com/VulcanJS/Vulcan/pull/2498)
- fix bugs in extendCollection (#16) [`#2496`](https://github.com/VulcanJS/Vulcan/pull/2496)
- fix bugs in extendCollection [`#16`](https://github.com/VulcanJS/Vulcan/pull/16)
- Remove ! when parsing typename [`#2468`](https://github.com/VulcanJS/Vulcan/pull/2468)
- Implement _is_null in mongoParams [`#2469`](https://github.com/VulcanJS/Vulcan/pull/2469)
- Jt/extend collection fix [`#2490`](https://github.com/VulcanJS/Vulcan/pull/2490)
- add connection remoteAdress in context [`#2488`](https://github.com/VulcanJS/Vulcan/pull/2488)
- Remove hardcoded head tag in template-web.browser [`#2485`](https://github.com/VulcanJS/Vulcan/pull/2485)
- Fix datatable-loading crash in the storybook [`#2482`](https://github.com/VulcanJS/Vulcan/pull/2482)
- Add GraphQLSchema.context to context in runGraphQL [`#2474`](https://github.com/VulcanJS/Vulcan/pull/2474)
- Pass full doc and document to validate to validateDocumentPermissions [`#2478`](https://github.com/VulcanJS/Vulcan/pull/2478)
- Add story to demonstrate ref forwarding in Vulcan Components [`#2473`](https://github.com/VulcanJS/Vulcan/pull/2473)
- Add a password component [`#2472`](https://github.com/VulcanJS/Vulcan/pull/2472)
- Add buildResult functionality to useCreate2 to directly access created document [`#2470`](https://github.com/VulcanJS/Vulcan/pull/2470)
- use apollo client in multiqueryupdater to broadcast to watched queries [`#2471`](https://github.com/VulcanJS/Vulcan/pull/2471)
- Rewrite client side date converter to handle nesting [`#2465`](https://github.com/VulcanJS/Vulcan/pull/2465)
- Field level permissions validation take nested objects into account (read, create, update) [`#2451`](https://github.com/VulcanJS/Vulcan/pull/2451)
- Feature/backoffice 1.14 [`#2467`](https://github.com/VulcanJS/Vulcan/pull/2467)
- Add Vulcan.generateGraphQLQueries to debug.js [`#2463`](https://github.com/VulcanJS/Vulcan/pull/2463)
- Omit username from schema validation after deleting it from options [`#2466`](https://github.com/VulcanJS/Vulcan/pull/2466)
- fix default_mutations check if user owns and belongs to authorised group [`#2460`](https://github.com/VulcanJS/Vulcan/pull/2460)
- Pass document to Users.isMemberOf in permissions.js in [`#2461`](https://github.com/VulcanJS/Vulcan/pull/2461)
- add back package-lock to avoid issues [`3dbd9d9`](https://github.com/VulcanJS/Vulcan/commit/3dbd9d9115af43fad79cf5de3e9742116bfd80b0)
- locked react version [`05fcc19`](https://github.com/VulcanJS/Vulcan/commit/05fcc19619362b80ba4d609d72a5ec373197cc97)
- remove explicit install of airbnb-js-shims after fix [`862028e`](https://github.com/VulcanJS/Vulcan/commit/862028e2dc0ca3f4d388a4eb7015000f1afe917c)
#### [1.14.0](https://github.com/VulcanJS/Vulcan/compare/1.13.5...1.14.0)
> 3 December 2019
- Add support for `itemProperties` in schemas [`#2456`](https://github.com/VulcanJS/Vulcan/pull/2456)
- check options.input.limit and loadMoreInc accepts input [`#2459`](https://github.com/VulcanJS/Vulcan/pull/2459)
- remove async to fix issue in mongoParams.js filterFunction [`#2458`](https://github.com/VulcanJS/Vulcan/pull/2458)
- Pass document to Users.isMemberOf in permissions.js [`#2454`](https://github.com/VulcanJS/Vulcan/pull/2454)
- Set non-null to false for data input type on update/upsert [`#2453`](https://github.com/VulcanJS/Vulcan/pull/2453)
- Feature/add redux startup [`#2442`](https://github.com/VulcanJS/Vulcan/pull/2442)
- add preventDefault to ui-material ModalTrigger [`#2450`](https://github.com/VulcanJS/Vulcan/pull/2450)
- add @material-ui packages [`#2447`](https://github.com/VulcanJS/Vulcan/pull/2447)
- testing getVariablesListFromCache, verifiying right variables are returned [`#2439`](https://github.com/VulcanJS/Vulcan/pull/2439)
- Check if results is non-emtpy, not just present [`#2437`](https://github.com/VulcanJS/Vulcan/pull/2437)
- split getVariablesListFromCache test in two [`#2435`](https://github.com/VulcanJS/Vulcan/pull/2435)
- prevent cacheUpdate from returning variables of a query similar name [`#2434`](https://github.com/VulcanJS/Vulcan/pull/2434)
- Bugfix/form component inner prop [`#2433`](https://github.com/VulcanJS/Vulcan/pull/2433)
- Update of outdated links in README.md [`#2411`](https://github.com/VulcanJS/Vulcan/pull/2411)
- Fixed links to changelog and migration documentation to [`#2413`](https://github.com/VulcanJS/Vulcan/pull/2413)
- Incorrect link to telescopeapp.org [`#2412`](https://github.com/VulcanJS/Vulcan/pull/2412)
- Condition '!operation' is always false at this point because it is redundant. [`#2426`](https://github.com/VulcanJS/Vulcan/pull/2426)
- Mailchimp [`#2425`](https://github.com/VulcanJS/Vulcan/pull/2425)
- Condition 'value === ''' is always false at this point [`#2427`](https://github.com/VulcanJS/Vulcan/pull/2427)
- Bugfix/close modal [`#2429`](https://github.com/VulcanJS/Vulcan/pull/2429)
- Add pluralize [`518ec70`](https://github.com/VulcanJS/Vulcan/commit/518ec70d88e24eb81a3a15c1b8a15e650d1b666c)
- Better handling of getting collection name/type name [`827daa4`](https://github.com/VulcanJS/Vulcan/commit/827daa4f8ea3f50ea817d712da06218a7ccc67fb)
- Make filtering async [`9b8bf5d`](https://github.com/VulcanJS/Vulcan/commit/9b8bf5d26d06d0c7f4da4e4c28550cb7e58e873c)
#### [1.13.5](https://github.com/VulcanJS/Vulcan/compare/1.13.3...1.13.5)
> 25 October 2019
- TooltipIconButton arialabel titletext bugfix [`#2414`](https://github.com/VulcanJS/Vulcan/pull/2414)
- Bugfix/get viewable fields [`#2418`](https://github.com/VulcanJS/Vulcan/pull/2418)
- Enhance/form stories [`#2410`](https://github.com/VulcanJS/Vulcan/pull/2410)
- Can deactivate SSR [`#2397`](https://github.com/VulcanJS/Vulcan/pull/2397)
- add story of card [`#2408`](https://github.com/VulcanJS/Vulcan/pull/2408)
- split Card.jsx in differents files [`#2402`](https://github.com/VulcanJS/Vulcan/pull/2402)
- populate.before callback [`#2405`](https://github.com/VulcanJS/Vulcan/pull/2405)
- Bugfix/datatable props [`#2401`](https://github.com/VulcanJS/Vulcan/pull/2401)
- Feature/stories marieqg & juliensl [`#2400`](https://github.com/VulcanJS/Vulcan/pull/2400)
- fix multiQuery update error with non null selector [`#2396`](https://github.com/VulcanJS/Vulcan/pull/2396)
- FormGroupHiddenProp [`#2386`](https://github.com/VulcanJS/Vulcan/pull/2386)
- MaterialUiMinorChanges6 [`#2385`](https://github.com/VulcanJS/Vulcan/pull/2385)
- single2, create2, update2, delete2, upsert2 with new input param [`11e6d50`](https://github.com/VulcanJS/Vulcan/commit/11e6d50367025765d70e4aa3a24db5964c9e0939)
- hocs mutations use input directly [`1988bea`](https://github.com/VulcanJS/Vulcan/commit/1988bea602b2a9f263a751017272222295f2a291)
- bump 1.13.5 [`d844caa`](https://github.com/VulcanJS/Vulcan/commit/d844caa557f333508c19675a8462cdf80dae51d2)
#### [1.13.3](https://github.com/VulcanJS/Vulcan/compare/1.13.2...1.13.3)
> 7 October 2019
- Bugfix/watched mutations [`#2382`](https://github.com/VulcanJS/Vulcan/pull/2382)
- Material-UI - README Installation - Set Version of react-jss [`#2384`](https://github.com/VulcanJS/Vulcan/pull/2384)
- Ensure props that can be applied to the SmartForm component are propagated when said props are specified on the Card component. [`#2378`](https://github.com/VulcanJS/Vulcan/pull/2378)
- Hooks for mutations and other utilities [`#2377`](https://github.com/VulcanJS/Vulcan/pull/2377)
- MaterialUiStartAdornment [`#2376`](https://github.com/VulcanJS/Vulcan/pull/2376)
- MaterialUiMinorChanges5 [`#2372`](https://github.com/VulcanJS/Vulcan/pull/2372)
- ErrorsGetUserPayload [`#2373`](https://github.com/VulcanJS/Vulcan/pull/2373)
- Reenable data injection during SSR [`#2369`](https://github.com/VulcanJS/Vulcan/pull/2369)
- Bugfix/intl polyfill devel [`#2371`](https://github.com/VulcanJS/Vulcan/pull/2371)
- Feature/backoffice: merged devel [`#2366`](https://github.com/VulcanJS/Vulcan/pull/2366)
- Bugfix/mui ssr [`#2352`](https://github.com/VulcanJS/Vulcan/pull/2352)
- Feature/apollo register link [`#2353`](https://github.com/VulcanJS/Vulcan/pull/2353)
- Re-enable RouterHook component so that pageview events are sent to analytics [`#2364`](https://github.com/VulcanJS/Vulcan/pull/2364)
- MaterialUiMinorChanges6 [`b499708`](https://github.com/VulcanJS/Vulcan/commit/b499708cb3963344aa12faf70ac1ff337034ef42)
- add alerts to material ui datatable [`dc225e6`](https://github.com/VulcanJS/Vulcan/commit/dc225e6b59eb2d9b1980d82ae6d9c77e3e3194de)
- Add hasMany; add relation guessing based on schema field type [`c9518bc`](https://github.com/VulcanJS/Vulcan/commit/c9518bcbde7376f6efc0feba07c2459e81ef0b5c)
#### [1.13.2](https://github.com/VulcanJS/Vulcan/compare/1.13.1...1.13.2)
> 27 August 2019
- add to utils a getSchemaFieldAllowedValues function [`#2336`](https://github.com/VulcanJS/Vulcan/pull/2336)
- Update ThemeStyles.jsx [`#2337`](https://github.com/VulcanJS/Vulcan/pull/2337)
- Bugfix/button props [`#2357`](https://github.com/VulcanJS/Vulcan/pull/2357)
- add from props [`#2358`](https://github.com/VulcanJS/Vulcan/pull/2358)
- Fix bug in Utils.getUnusedSlug() [`#2359`](https://github.com/VulcanJS/Vulcan/pull/2359)
- EJSONStackOverflow [`#2348`](https://github.com/VulcanJS/Vulcan/pull/2348)
- lock storybook version to prevent compatibility issues [`d964c2c`](https://github.com/VulcanJS/Vulcan/commit/d964c2ce1f1b17f8b42fbc4dc3b1c38431925bdc)
- remove autogenerated doc folder [`3e9335a`](https://github.com/VulcanJS/Vulcan/commit/3e9335aed9b91dc810894442fb46efcbb6adcd72)
- cleanup [`53b8b8f`](https://github.com/VulcanJS/Vulcan/commit/53b8b8f688bc50448d7c8951ca1060222511f8f3)
#### [1.13.1](https://github.com/VulcanJS/Vulcan/compare/1.13.0...1.13.1)
> 24 July 2019
- MuiSuggestShowAllOptions [`#2346`](https://github.com/VulcanJS/Vulcan/pull/2346)
- VersionNumberCorrections [`#2345`](https://github.com/VulcanJS/Vulcan/pull/2345)
- UiMaterialMinorFixes3 [`#2341`](https://github.com/VulcanJS/Vulcan/pull/2341)
- SimpleSchemaIntegerFieldType [`#2340`](https://github.com/VulcanJS/Vulcan/pull/2340)
- ApolloEngineSettings [`#2339`](https://github.com/VulcanJS/Vulcan/pull/2339)
- Migrate accounts components to React Router 4 [`#2327`](https://github.com/VulcanJS/Vulcan/pull/2327)
- Bugfix/changepwd ssr [`#2344`](https://github.com/VulcanJS/Vulcan/pull/2344)
- Add default group only if necessary [`#2331`](https://github.com/VulcanJS/Vulcan/pull/2331)
- Bugfix/material ui floating [`#2330`](https://github.com/VulcanJS/Vulcan/pull/2330)
- MinorBugInMuiSampleTheme [`#2328`](https://github.com/VulcanJS/Vulcan/pull/2328)
- FormGroupAdminsOnlyOption [`#2326`](https://github.com/VulcanJS/Vulcan/pull/2326)
- VulcanAdminMinorTweaks [`#2325`](https://github.com/VulcanJS/Vulcan/pull/2325)
- MaterialUiMinorBugs [`#2315`](https://github.com/VulcanJS/Vulcan/pull/2315)
- FormNestedArrayLayout [`#2314`](https://github.com/VulcanJS/Vulcan/pull/2314)
- Storybook+Avatar+Button [`#2317`](https://github.com/VulcanJS/Vulcan/pull/2317)
- user.create.async callback [`#2311`](https://github.com/VulcanJS/Vulcan/pull/2311)
- ResetStoreCallbackNotBeingRun [`#2313`](https://github.com/VulcanJS/Vulcan/pull/2313)
- MuiCheckboxGroup maxCount [`#2312`](https://github.com/VulcanJS/Vulcan/pull/2312)
- vulcan-ui-material bug fixes [`#2310`](https://github.com/VulcanJS/Vulcan/pull/2310)
- instantiateComponent with React element [`#2309`](https://github.com/VulcanJS/Vulcan/pull/2309)
- Email template vars [`#2294`](https://github.com/VulcanJS/Vulcan/pull/2294)
- Move getLabel from vulcan:intl to vulcan:lib [`#2307`](https://github.com/VulcanJS/Vulcan/pull/2307)
- MaterialUiFormGroupLayouts [`#2297`](https://github.com/VulcanJS/Vulcan/pull/2297)
- vulcan-lib: New function: componentExists(name) [`#2292`](https://github.com/VulcanJS/Vulcan/pull/2292)
- FormGroupOptionalParameters [`#2296`](https://github.com/VulcanJS/Vulcan/pull/2296)
- material-ui : i18n files were not imported [`#2298`](https://github.com/VulcanJS/Vulcan/pull/2298)
- inputProperties function parameters bug [`#2295`](https://github.com/VulcanJS/Vulcan/pull/2295)
- FormComponentInner calling an inexisting element (FormNested) [`#2306`](https://github.com/VulcanJS/Vulcan/pull/2306)
- FormNestedArray Footer modification via props fixing [`#2305`](https://github.com/VulcanJS/Vulcan/pull/2305)
- improve props cleanup [`#2304`](https://github.com/VulcanJS/Vulcan/pull/2304)
- Deprecated redux devtools function replaced [`#2302`](https://github.com/VulcanJS/Vulcan/pull/2302)
- merging [`#1`](https://github.com/VulcanJS/Vulcan/pull/1)
- Update FormNestedObject.jsx [`#2289`](https://github.com/VulcanJS/Vulcan/pull/2289)
- Fixed MuiCheckBoxGroup value computation [`#2300`](https://github.com/VulcanJS/Vulcan/pull/2300)
- Update FormNestedArrayLayout.jsx [`#2288`](https://github.com/VulcanJS/Vulcan/pull/2288)
- Feature/better form array [`#2291`](https://github.com/VulcanJS/Vulcan/pull/2291)
- [WIP] fix MUI inputProperties handling [`#2286`](https://github.com/VulcanJS/Vulcan/pull/2286)
- Add storybook, few fixes on FormError + Intl messages [`#2284`](https://github.com/VulcanJS/Vulcan/pull/2284)
- add consideration to default values on accounts extra fields [`#2282`](https://github.com/VulcanJS/Vulcan/pull/2282)
- Feature/backoffice [`#2276`](https://github.com/VulcanJS/Vulcan/pull/2276)
- ui-material: updated Datatable.jsx - header fix [`#2275`](https://github.com/VulcanJS/Vulcan/pull/2275)
- Fix a falsy-vs-undefined bug in getSetting [`#2274`](https://github.com/VulcanJS/Vulcan/pull/2274)
- make Datatable edit modal title customizable [`#2269`](https://github.com/VulcanJS/Vulcan/pull/2269)
- FormInnerComponent unify Bootstrap and Material UI API [`#2272`](https://github.com/VulcanJS/Vulcan/pull/2272)
- Additional tests [`#2262`](https://github.com/VulcanJS/Vulcan/pull/2262)
- Fix a crash when using addFields together with a recursive schema [`#2268`](https://github.com/VulcanJS/Vulcan/pull/2268)
- Fix typo that prevented FormNestedObjectLayout from having error class [`#2265`](https://github.com/VulcanJS/Vulcan/pull/2265)
- Fix punctuation of password-change message [`#2264`](https://github.com/VulcanJS/Vulcan/pull/2264)
- Update synced-cron across a maintainer change [`#2263`](https://github.com/VulcanJS/Vulcan/pull/2263)
- Persian locale added [`#2261`](https://github.com/VulcanJS/Vulcan/pull/2261)
- Update mutators.js [`#2259`](https://github.com/VulcanJS/Vulcan/pull/2259)
- Unit Testing Update [`2357d82`](https://github.com/VulcanJS/Vulcan/commit/2357d826181271182cad4ee2bfa836946bc07e83)
- add material ui lib in dev mode [`de8e39c`](https://github.com/VulcanJS/Vulcan/commit/de8e39cd9834c450c5ecae6713b330fefaeda95f)
- StorybookAndMaterialUi [`f4c43a8`](https://github.com/VulcanJS/Vulcan/commit/f4c43a81133b07409b0cb334685fdba463ae8f4c)
#### [1.13.0](https://github.com/VulcanJS/Vulcan/compare/1.12.17...1.13.0)
> 28 March 2019
- Fix denormalization when bio set to empty [`#2253`](https://github.com/VulcanJS/Vulcan/pull/2253)
- Re-enable CheckboxGroup component for Material UI [`#2249`](https://github.com/VulcanJS/Vulcan/pull/2249)
- Re-enable Switch component for Material UI [`#2248`](https://github.com/VulcanJS/Vulcan/pull/2248)
- Re-enable Select component for Material UI [`#2250`](https://github.com/VulcanJS/Vulcan/pull/2250)
- Fix labeling in select component. [`#2243`](https://github.com/VulcanJS/Vulcan/pull/2243)
- Add debug messages for missing strings and default locale on per-message level. [`#2238`](https://github.com/VulcanJS/Vulcan/pull/2238)
- Add locale on signup. [`#2240`](https://github.com/VulcanJS/Vulcan/pull/2240)
- fix values property for handlebars helper, use context as default [`#2236`](https://github.com/VulcanJS/Vulcan/pull/2236)
- Add wrapperless Emails. [`#2235`](https://github.com/VulcanJS/Vulcan/pull/2235)
- Add default locale to getString. [`#2234`](https://github.com/VulcanJS/Vulcan/pull/2234)
- Upgrade react-router [`#2232`](https://github.com/VulcanJS/Vulcan/pull/2232)
- Fix const assignment. [`#2222`](https://github.com/VulcanJS/Vulcan/pull/2222)
- Add classname for required fields. [`#2215`](https://github.com/VulcanJS/Vulcan/pull/2215)
- fix a spelling error [`#2209`](https://github.com/VulcanJS/Vulcan/pull/2209)
- material-ui [`a743022`](https://github.com/VulcanJS/Vulcan/commit/a7430225458a18a3061496de760b93ebcd2a2c4b)
- Component fixes [`4261470`](https://github.com/VulcanJS/Vulcan/commit/4261470fada2b0da620f689c65b169d4aa5beff1)
- create vulcan:ui-material, update to Apollo2 RR4 [`b7b8725`](https://github.com/VulcanJS/Vulcan/commit/b7b872591a9ca35fe8b7d0dd36ef773f9e8d0af3)
#### [1.12.17](https://github.com/VulcanJS/Vulcan/compare/1.12.16...1.12.17)
> 16 February 2019
- Form test [`#2186`](https://github.com/VulcanJS/Vulcan/pull/2186)
- Fix type casting in FormComponent's handleChange (fix #2197) [`#2197`](https://github.com/VulcanJS/Vulcan/issues/2197)
- Show warning when core components are missing (fix #2196) [`#2196`](https://github.com/VulcanJS/Vulcan/issues/2196)
- prettier commit [`083a7d6`](https://github.com/VulcanJS/Vulcan/commit/083a7d676bc6f271223f4b293e1eb85731c4bea4)
- prettier & lint code [`815a65d`](https://github.com/VulcanJS/Vulcan/commit/815a65d853ae9ef0e4c9f8848723db4163ca44d1)
- prettier commit [`0f29cc7`](https://github.com/VulcanJS/Vulcan/commit/0f29cc7cdd7921dac3fb55fd93d56f81039558e1)
#### [1.12.16](https://github.com/VulcanJS/Vulcan/compare/1.12.15...1.12.16)
> 4 February 2019
#### [1.12.15](https://github.com/VulcanJS/Vulcan/compare/1.12.14...1.12.15)
> 4 February 2019
- Default view sort doesn't take precedence over selected view [`#2192`](https://github.com/VulcanJS/Vulcan/pull/2192)
- Fix users onCreate [`921e7cd`](https://github.com/VulcanJS/Vulcan/commit/921e7cd851149096c1dadc5a88c358912ca51515)
- Remove Formsy dependency [`f56293b`](https://github.com/VulcanJS/Vulcan/commit/f56293b0f6360f41412ffb497c4a9a84f6709db4)
#### [1.12.14](https://github.com/VulcanJS/Vulcan/compare/1.12.13...1.12.14)
> 31 January 2019
- Add script to update package.json dependencies [`#2174`](https://github.com/VulcanJS/Vulcan/pull/2174)
- Go back to using FormNestedFoot in Nested Array Fields [`#2170`](https://github.com/VulcanJS/Vulcan/pull/2170)
- Debug & Admin layouts [`#2177`](https://github.com/VulcanJS/Vulcan/pull/2177)
- Apollo2 finalization (backward compatibility) [`#2157`](https://github.com/VulcanJS/Vulcan/pull/2157)
- Use qs package [`40be66b`](https://github.com/VulcanJS/Vulcan/commit/40be66b8cf82d43e92d76493af3440027cd4617f)
- linting, removing apollo package [`eeada2d`](https://github.com/VulcanJS/Vulcan/commit/eeada2d231160d14f057cad32f919eeb2215eb35)
- Fixed versions issues (react-bootstrap + apollo) [`02cfafa`](https://github.com/VulcanJS/Vulcan/commit/02cfafabc2ce4c93dd2ab9beddd5def952482dd1)
#### [1.12.13](https://github.com/VulcanJS/Vulcan/compare/1.12.12...1.12.13)
> 2 January 2019
- Fix semicolons and other linting issues [`111e00e`](https://github.com/VulcanJS/Vulcan/commit/111e00ecae68a08a4f5c3a0321982f49c4be8c99)
- Fix ESLint unused variables [`3e1571e`](https://github.com/VulcanJS/Vulcan/commit/3e1571e1e8fdd1cf4b843713341b14c01e9c2545)
- Comment out sendy integration for now [`7ddcc28`](https://github.com/VulcanJS/Vulcan/commit/7ddcc28b97beb2f445b79fb6e12daef083eb9745)
#### [1.12.12](https://github.com/VulcanJS/Vulcan/compare/1.12.11...1.12.12)
> 31 December 2018
- Add ES translations for error messages [`#2165`](https://github.com/VulcanJS/Vulcan/pull/2165)
- forgot to add variable [`#2163`](https://github.com/VulcanJS/Vulcan/pull/2163)
- fixed nested array field error [`#2162`](https://github.com/VulcanJS/Vulcan/pull/2162)
- fixed helmet for testing [`#2156`](https://github.com/VulcanJS/Vulcan/pull/2156)
- fixed whitespace to pass linting test [`#2154`](https://github.com/VulcanJS/Vulcan/pull/2154)
- Feature/smart form reset [`#2131`](https://github.com/VulcanJS/Vulcan/pull/2131)
- Add async hook to RouterHook and provide props as argument [`#2065`](https://github.com/VulcanJS/Vulcan/pull/2065)
- Cleanup Datatable / withComponents pattern [`#2126`](https://github.com/VulcanJS/Vulcan/pull/2126)
- Add Prettier and Husky [`#2130`](https://github.com/VulcanJS/Vulcan/pull/2130)
- Support form id attribute in SmartForm [`#2152`](https://github.com/VulcanJS/Vulcan/pull/2152)
- clean up NPM packages [`4f49350`](https://github.com/VulcanJS/Vulcan/commit/4f49350d709bdc2be63c3f6a6b6765fd2ce02756)
- Fix NPM vulnerabilities [`8d00e60`](https://github.com/VulcanJS/Vulcan/commit/8d00e6091d5bf89d234a6be7f845bde70f0f8ccf)
- add redux [`19df560`](https://github.com/VulcanJS/Vulcan/commit/19df560545c4bc607e6c99907a6bf0f732c2dc68)
#### [1.12.11](https://github.com/VulcanJS/Vulcan/compare/1.12.10...1.12.11)
> 15 December 2018
- add minCount and maxCount to SmartForm nested arrays [`#2141`](https://github.com/VulcanJS/Vulcan/pull/2141)
- Allow user to customize apollo json parser options [`#2147`](https://github.com/VulcanJS/Vulcan/pull/2147)
- added collection creation hook [`#2148`](https://github.com/VulcanJS/Vulcan/pull/2148)
- add refetch to props on withSingle [`#2137`](https://github.com/VulcanJS/Vulcan/pull/2137)
- add english field errors [`#2136`](https://github.com/VulcanJS/Vulcan/pull/2136)
- Apollo 2 SSR [`#2128`](https://github.com/VulcanJS/Vulcan/pull/2128)
- Add Prettier and Husky [`b0f4ecd`](https://github.com/VulcanJS/Vulcan/commit/b0f4ecdae71a0f49c1270414a355f6c7dffd77a6)
- add bootstrap-ui to allow form mounting [`fde4d90`](https://github.com/VulcanJS/Vulcan/commit/fde4d90924ab3fae3e1673f6ab8cf04fbe4958c4)
- split Datatable into purely visual components [`7162870`](https://github.com/VulcanJS/Vulcan/commit/71628705646f3539a9489bad52d69f91fd8d5965)
#### [1.12.10](https://github.com/VulcanJS/Vulcan/compare/1.12.8...1.12.10)
> 24 November 2018
- Respect user.isAdmin on creation [`#2122`](https://github.com/VulcanJS/Vulcan/pull/2122)
- rollback callbacks test [`#2123`](https://github.com/VulcanJS/Vulcan/pull/2123)
- Mutation button small fixes [`#2116`](https://github.com/VulcanJS/Vulcan/pull/2116)
- Fix datatable bug when sorting a column [`#2113`](https://github.com/VulcanJS/Vulcan/pull/2113)
- single resolve documentId undefined -> now returns null [`#2112`](https://github.com/VulcanJS/Vulcan/pull/2112)
- Cleanup forms, add `changeCallback` [`#2108`](https://github.com/VulcanJS/Vulcan/pull/2108)
- set default email and siteName for Accounts related emails [`#2110`](https://github.com/VulcanJS/Vulcan/pull/2110)
- Warn when no searchable field is set and terms.query is set [`#2106`](https://github.com/VulcanJS/Vulcan/pull/2106)
- Pass context to the defaultView too [`#2109`](https://github.com/VulcanJS/Vulcan/pull/2109)
- Support arrays with primitives [`#2057`](https://github.com/VulcanJS/Vulcan/pull/2057)
- vulcan-form-tags: refactor and fix [`#2099`](https://github.com/VulcanJS/Vulcan/pull/2099)
- Update fr_FR.js: add datatable.search entry [`#2104`](https://github.com/VulcanJS/Vulcan/pull/2104)
- datatable: add i18n for the search field [`#2103`](https://github.com/VulcanJS/Vulcan/pull/2103)
- Revert changes made to getUnusedSlug in #2075 [`#2102`](https://github.com/VulcanJS/Vulcan/pull/2102)
- Custom form components [`#2080`](https://github.com/VulcanJS/Vulcan/pull/2080)
- [WIP] Apollo2 server [`#2094`](https://github.com/VulcanJS/Vulcan/pull/2094)
- Fix OpenCollective part of readme [`#2097`](https://github.com/VulcanJS/Vulcan/pull/2097)
- only clear current values for new document's form [`#2060`](https://github.com/VulcanJS/Vulcan/pull/2060)
- Restore Edge support [`#2093`](https://github.com/VulcanJS/Vulcan/pull/2093)
- SmartForm: use prop `schema`, if given [`#2092`](https://github.com/VulcanJS/Vulcan/pull/2092)
- Add /i18n debug page [`#2091`](https://github.com/VulcanJS/Vulcan/pull/2091)
- Users' slug is updated on displayname change [`#2075`](https://github.com/VulcanJS/Vulcan/pull/2075)
- SubmitButtonLabels [`#2082`](https://github.com/VulcanJS/Vulcan/pull/2082)
- Don't merge schema in Vulcan, only do it with SimpleSchema [`#2086`](https://github.com/VulcanJS/Vulcan/pull/2086)
- Email subjects shouldn't be coupled with sitename [`#2088`](https://github.com/VulcanJS/Vulcan/pull/2088)
- Apollo2 withMessages [`#2089`](https://github.com/VulcanJS/Vulcan/pull/2089)
- [WIP] Apollo 2: apollo-state-link and RR4 [`#2083`](https://github.com/VulcanJS/Vulcan/pull/2083)
- Support email headers property and simplify logic [`#2087`](https://github.com/VulcanJS/Vulcan/pull/2087)
- SmartForm.getLabel() intl string fallback [`#2077`](https://github.com/VulcanJS/Vulcan/pull/2077)
- Remove bootstrap from vulcan-forms [`#2076`](https://github.com/VulcanJS/Vulcan/pull/2076)
- Field resolvers should check for access (fix #2124) [`#2124`](https://github.com/VulcanJS/Vulcan/issues/2124)
- Revert some of the changes in #2112 (fix #2118) [`#2118`](https://github.com/VulcanJS/Vulcan/issues/2118)
- Pass query results to email's data() function as second argument (fix #2048) [`#2048`](https://github.com/VulcanJS/Vulcan/issues/2048)
- copy-pasted meteor/apollo, updated to RR4 [`2bacae7`](https://github.com/VulcanJS/Vulcan/commit/2bacae7a0e012caa99ecfab80d40206a09fe568b)
- Comment out/disable legacy code for now [`6275108`](https://github.com/VulcanJS/Vulcan/commit/6275108d41dab331991a339d65a0d57f6394d1df)
- basic example with apollo-server, not yet working [`8d3120a`](https://github.com/VulcanJS/Vulcan/commit/8d3120abc77b7cb65c4e9b1cd23280b87e302663)
#### [1.12.8](https://github.com/VulcanJS/Vulcan/compare/1.12.0...1.12.8)
> 17 September 2018
- fix bug preflight from apollo [`#2070`](https://github.com/VulcanJS/Vulcan/pull/2070)
- Pass locale as key to IntlProvider to force a rerender on locale change [`#2072`](https://github.com/VulcanJS/Vulcan/pull/2072)
- cleanup: Fix naming after withList -> withMulti change [`#2071`](https://github.com/VulcanJS/Vulcan/pull/2071)
- Added support for cc, bcc, and replyTo fields for email API [`#2062`](https://github.com/VulcanJS/Vulcan/pull/2062)
- [BugFix] remove `document` from `canCreateField` [`#2069`](https://github.com/VulcanJS/Vulcan/pull/2069)
- Minor bug fixes [`#2068`](https://github.com/VulcanJS/Vulcan/pull/2068)
- Allow "guests" in withAccess [`#2063`](https://github.com/VulcanJS/Vulcan/pull/2063)
- Minor changes and bug fixes in withMulti, single resolver, schema generation [`#2059`](https://github.com/VulcanJS/Vulcan/pull/2059)
- vulcan-users - permissions - filter out array based fields [`#2056`](https://github.com/VulcanJS/Vulcan/pull/2056)
- Cleaned up the options management in hocs [`#2053`](https://github.com/VulcanJS/Vulcan/pull/2053)
- Allow to edit username, and override 3rd party name if it is set [`#2052`](https://github.com/VulcanJS/Vulcan/pull/2052)
- Allow user to return nothing in submitCallback [`#2051`](https://github.com/VulcanJS/Vulcan/pull/2051)
- Pass collection as property when running new API mutators' callbacks [`#2050`](https://github.com/VulcanJS/Vulcan/pull/2050)
- fixed issue that hardcoded email test queries to work only with single queries [`#2047`](https://github.com/VulcanJS/Vulcan/pull/2047)
- Add only document once on withMulti query reducer [`#2049`](https://github.com/VulcanJS/Vulcan/pull/2049)
- Pass request headers through context [`#2046`](https://github.com/VulcanJS/Vulcan/pull/2046)
- When changing email address on an account, mark the new address as unverified [`#2043`](https://github.com/VulcanJS/Vulcan/pull/2043)
- Refactor registerComponent to fix #2061 (see also #2031) [`#2061`](https://github.com/VulcanJS/Vulcan/issues/2061)
- Fields with "$" should never be included in generated fragments (fix #2044) [`#2044`](https://github.com/VulcanJS/Vulcan/issues/2044)
- Fix ESLint [`5fc0e30`](https://github.com/VulcanJS/Vulcan/commit/5fc0e30f40183ae084e3344ec18c49ba1a1e866b)
- cleaned up the options management in hocs [`17f9671`](https://github.com/VulcanJS/Vulcan/commit/17f96712ff44ce9c86ebda0e14407a1f2f0d90f4)
- ESLint fixes [`dfa4c77`](https://github.com/VulcanJS/Vulcan/commit/dfa4c77314b9eaf7cb048d7a47512e30aad5ed2f)
#### [1.12.0](https://github.com/VulcanJS/Vulcan/compare/v1.11.1...1.12.0)
> 29 August 2018
- Add support for email address verification. [`#2040`](https://github.com/VulcanJS/Vulcan/pull/2040)
- defer creation of apolloClient until it is first used [`#2041`](https://github.com/VulcanJS/Vulcan/pull/2041)
- Users totalCount and removed one console.log [`#2035`](https://github.com/VulcanJS/Vulcan/pull/2035)
- OpenCRUD fixes [`#2034`](https://github.com/VulcanJS/Vulcan/pull/2034)
- [opencrud] update Users mutations to match {selector, data} args [`#2033`](https://github.com/VulcanJS/Vulcan/pull/2033)
- [Forms] Add currentDocument to clearForm [`#2030`](https://github.com/VulcanJS/Vulcan/pull/2030)
- Warn when replacing a non-registered component and register it anyway [`#2029`](https://github.com/VulcanJS/Vulcan/pull/2029)
- Minor default resolvers and mutations improvements [`#2028`](https://github.com/VulcanJS/Vulcan/pull/2028)
- Dynamic fragment initalization [`#2025`](https://github.com/VulcanJS/Vulcan/pull/2025)
- Pass opencrud field properties to the form [`#2024`](https://github.com/VulcanJS/Vulcan/pull/2024)
- Bugfix/nested objects b34f0a25ce0c775a29a14241b14e9bc0e47976c8 [`#2022`](https://github.com/VulcanJS/Vulcan/pull/2022)
- collection.getParameters handles schema extension for searchable fields [`#2021`](https://github.com/VulcanJS/Vulcan/pull/2021)
- Open Collective Updates [`#2020`](https://github.com/VulcanJS/Vulcan/pull/2020)
- Dynamic loader improvements [`#2013`](https://github.com/VulcanJS/Vulcan/pull/2013)
- FormComponent value handling improvements [`#2011`](https://github.com/VulcanJS/Vulcan/pull/2011)
- New default for Apollo tracing [`#2009`](https://github.com/VulcanJS/Vulcan/pull/2009)
- Remove hardcoded limit to users List resolver [`#2008`](https://github.com/VulcanJS/Vulcan/pull/2008)
- Fix async callbacks called with no arguments [`#2007`](https://github.com/VulcanJS/Vulcan/pull/2007)
- Allow passing multiple args to HOCs [`#2005`](https://github.com/VulcanJS/Vulcan/pull/2005)
- [vulcan:ui-bootstrap] fix duplicate "noneOption" on rerendering the Select component [`#2003`](https://github.com/VulcanJS/Vulcan/pull/2003)
- Fix #2027 [`#2027`](https://github.com/VulcanJS/Vulcan/issues/2027)
- Fix #1998 part 2 [`#1998`](https://github.com/VulcanJS/Vulcan/issues/1998)
- Fix #1998 [`#1998`](https://github.com/VulcanJS/Vulcan/issues/1998)
- Wrap checkboxgroup (fix #2004) [`#2004`](https://github.com/VulcanJS/Vulcan/issues/2004)
- Add debug statements and fix #2001 [`#2001`](https://github.com/VulcanJS/Vulcan/issues/2001)
- setup tests [`4744561`](https://github.com/VulcanJS/Vulcan/commit/474456148eddf72a33afe6faae92f4f38984e13f)
- setup an example test with Tinytest and added Jest's expect to dependencies [`6deab6b`](https://github.com/VulcanJS/Vulcan/commit/6deab6bb8f660582b2ddf541e004c0c012997425)
- Splitted FormNested between objects an arrays [`b5e54ea`](https://github.com/VulcanJS/Vulcan/commit/b5e54ead1733e361a2640e6a921579833d44603f)
#### [v1.11.1](https://github.com/VulcanJS/Vulcan/compare/1.9.1...v1.11.1)
> 13 June 2018
- runQuery->runGraphQL [`#1995`](https://github.com/VulcanJS/Vulcan/pull/1995)
- Popup warning on page closing for SmartForm unsaved changes [`#1989`](https://github.com/VulcanJS/Vulcan/pull/1989)
- Await between hooks in runCallbacks [`#1984`](https://github.com/VulcanJS/Vulcan/pull/1984)
- update FR translation for SmartForm changes [`#1986`](https://github.com/VulcanJS/Vulcan/pull/1986)
- Restrict value altering to allow multiple datatypes in FormComponent [`#1982`](https://github.com/VulcanJS/Vulcan/pull/1982)
- check for redirect before trying to redirect [`#1978`](https://github.com/VulcanJS/Vulcan/pull/1978)
- Add MongoDB aggregation to Collections [`#1961`](https://github.com/VulcanJS/Vulcan/pull/1961)
- withList Loading prop adjustment [`#1975`](https://github.com/VulcanJS/Vulcan/pull/1975)
- Include document prop in mutationErrorCallback method [`#1969`](https://github.com/VulcanJS/Vulcan/pull/1969)
- Update Flash component and withMessages container [`#1973`](https://github.com/VulcanJS/Vulcan/pull/1973)
- Update FormSubmit.jsx [`#1972`](https://github.com/VulcanJS/Vulcan/pull/1972)
- ui-bootstrap: Add a separate Modal component and refactor ModalTrigger to use it. [`#1971`](https://github.com/VulcanJS/Vulcan/pull/1971)
- Fix field errors display [`#1964`](https://github.com/VulcanJS/Vulcan/pull/1964)
- More graphql error logging [`#1965`](https://github.com/VulcanJS/Vulcan/pull/1965)
- change from telescope-newsletter to vulcan-newsletter [`#1966`](https://github.com/VulcanJS/Vulcan/pull/1966)
- Fix Form props [`#1960`](https://github.com/VulcanJS/Vulcan/pull/1960)
- Give CheckboxGroup its own custom event handler (fix #1998) [`#1998`](https://github.com/VulcanJS/Vulcan/issues/1998)
- Update packages [`c70f32a`](https://github.com/VulcanJS/Vulcan/commit/c70f32a52a94fe5f6d1dcc7700066a1a1c3ccf21)
- Changes to SmartForm behaviour [`c3f33cb`](https://github.com/VulcanJS/Vulcan/commit/c3f33cb7e0d623c89526b980904d35beaea0b7ad)
- Refactored GraphQL schema generation code to use new GraphQL templates [`1d39212`](https://github.com/VulcanJS/Vulcan/commit/1d3921287c2a1cad0ca52546c94ac1bc2491ad52)
#### [1.9.1](https://github.com/VulcanJS/Vulcan/compare/1.8.1...1.9.1)
> 21 April 2018
- Fix nested forms after props renaming [`#1959`](https://github.com/VulcanJS/Vulcan/pull/1959)
- add error_incorrect_password to FR package [`#1954`](https://github.com/VulcanJS/Vulcan/pull/1954)
- fix: connection -> connexion [`#1950`](https://github.com/VulcanJS/Vulcan/pull/1950)
- Vulcan FR language package [`#1943`](https://github.com/VulcanJS/Vulcan/pull/1943)
- use this.getCollection() instead of props.collection [`#1941`](https://github.com/VulcanJS/Vulcan/pull/1941)
- Update mingo to 2.2.0 [`#1928`](https://github.com/VulcanJS/Vulcan/pull/1928)
- Remove sanitizeHtml import on client [`#1925`](https://github.com/VulcanJS/Vulcan/pull/1925)
- vulcan:debug : Components Dashboard now shows all hocs [`#1923`](https://github.com/VulcanJS/Vulcan/pull/1923)
- Update es_ES.js [`#1918`](https://github.com/VulcanJS/Vulcan/pull/1918)
- Fix TrackerComponent and add missing i18n string [`#1913`](https://github.com/VulcanJS/Vulcan/pull/1913)
- Fix TrackerComponent and include in repo to fix Accounts.LoginFormInner [`#1907`](https://github.com/VulcanJS/Vulcan/pull/1907)
- Various minor bug fixes [`#1904`](https://github.com/VulcanJS/Vulcan/pull/1904)
- Fix Charges Insert [`#1902`](https://github.com/VulcanJS/Vulcan/pull/1902)
- Missing es-ES translation [`#1892`](https://github.com/VulcanJS/Vulcan/pull/1892)
- Add stripe callbacks [`#1887`](https://github.com/VulcanJS/Vulcan/pull/1887)
- Fix async register callback for vulcan-payments [`#1886`](https://github.com/VulcanJS/Vulcan/pull/1886)
- Fix stripe plan startup [`#1885`](https://github.com/VulcanJS/Vulcan/pull/1885)
- Create Stripe Subscriptions on startup if requested [`#1879`](https://github.com/VulcanJS/Vulcan/pull/1879)
- Export stripe singleton [`#1880`](https://github.com/VulcanJS/Vulcan/pull/1880)
- Datatable - replace SPACE with - in the datatable-item-* className [`#1868`](https://github.com/VulcanJS/Vulcan/pull/1868)
- Remove console log from routes dashboard [`#1877`](https://github.com/VulcanJS/Vulcan/pull/1877)
- Fix the Edit and Reply cancel methods on Comments component in example-forum package [`#1876`](https://github.com/VulcanJS/Vulcan/pull/1876)
- #1865 Fix upsert [`#1869`](https://github.com/VulcanJS/Vulcan/pull/1869)
- Fix example-forum events callback [`#1874`](https://github.com/VulcanJS/Vulcan/pull/1874)
- Fix embed for posts callback [`#1872`](https://github.com/VulcanJS/Vulcan/pull/1872)
- Export Cloudinary singleton [`#1873`](https://github.com/VulcanJS/Vulcan/pull/1873)
- Fix sample_settings.json for Google Analytics [`#1864`](https://github.com/VulcanJS/Vulcan/pull/1864)
- packages update to meteor 1.6.1 [`#1861`](https://github.com/VulcanJS/Vulcan/pull/1861)
- Add upsert mutation [`#1858`](https://github.com/VulcanJS/Vulcan/pull/1858)
- Fix linter errors [`#1857`](https://github.com/VulcanJS/Vulcan/pull/1857)
- CircleCI Config [`#1848`](https://github.com/VulcanJS/Vulcan/pull/1848)
- Respect checkAccess for total resolver [`#1853`](https://github.com/VulcanJS/Vulcan/pull/1853)
- optionsAsStrings was not defined [`#1855`](https://github.com/VulcanJS/Vulcan/pull/1855)
- Added getCollection to withEdit & withRemove [`#1851`](https://github.com/VulcanJS/Vulcan/pull/1851)
- Fix seeding not being sequential & fix broken example packages [`#1849`](https://github.com/VulcanJS/Vulcan/pull/1849)
- Added getCollection to withNew [`#1850`](https://github.com/VulcanJS/Vulcan/pull/1850)
- Fix React prop warnings for SmartForm [`#1847`](https://github.com/VulcanJS/Vulcan/pull/1847)
- Consolidate getCollection code [`#1844`](https://github.com/VulcanJS/Vulcan/pull/1844)
- revert allVotes [`#1843`](https://github.com/VulcanJS/Vulcan/pull/1843)
- Fix circular dependency between Utils and settings [`#1841`](https://github.com/VulcanJS/Vulcan/pull/1841)
- Allow SmartForm to use collection or collectionName [`#1840`](https://github.com/VulcanJS/Vulcan/pull/1840)
- Revert "showEdit on Card" [`#1839`](https://github.com/VulcanJS/Vulcan/pull/1839)
- Revert 1828 fix allvotes [`#1838`](https://github.com/VulcanJS/Vulcan/pull/1838)
- fix allVotes resolveAs [`#1828`](https://github.com/VulcanJS/Vulcan/pull/1828)
- Add package Spanish Translation i18n-es-es [`#1824`](https://github.com/VulcanJS/Vulcan/pull/1824)
- showEdit on Card [`#1836`](https://github.com/VulcanJS/Vulcan/pull/1836)
- Fix circular dependencies between schemas and collections [`#1837`](https://github.com/VulcanJS/Vulcan/pull/1837)
- Fixed graphQL schema for example-forum [`#1830`](https://github.com/VulcanJS/Vulcan/pull/1830)
- Fixed voting bugs [`#1827`](https://github.com/VulcanJS/Vulcan/pull/1827)
- Update to 1.8.5 [`#1`](https://github.com/VulcanJS/Vulcan/pull/1)
- Added comments from the example-simple video tutorial for reference f… [`#1820`](https://github.com/VulcanJS/Vulcan/pull/1820)
- Fix Newsletter Banner SSR [`#1817`](https://github.com/VulcanJS/Vulcan/pull/1817)
- Set default waiting state to false to avoid SSR override [`#1816`](https://github.com/VulcanJS/Vulcan/pull/1816)
- Use getComponent for childRoutes [`#1813`](https://github.com/VulcanJS/Vulcan/pull/1813)
- Allow the ApolloEngine LogLevel to be set via the settings [`#1810`](https://github.com/VulcanJS/Vulcan/pull/1810)
- Form loading state fix [`#1811`](https://github.com/VulcanJS/Vulcan/pull/1811)
- fix admin delete user hide bug [`#1803`](https://github.com/VulcanJS/Vulcan/pull/1803)
- Add VSCode jsconfig [`#1801`](https://github.com/VulcanJS/Vulcan/pull/1801)
- Debug Groups & Colors [`#1802`](https://github.com/VulcanJS/Vulcan/pull/1802)
- Fix warnings from React 16 update [`#1800`](https://github.com/VulcanJS/Vulcan/pull/1800)
- Upgrade to React 16.2 [`#1799`](https://github.com/VulcanJS/Vulcan/pull/1799)
- fix duplicate email returns "unknown error' [`#1795`](https://github.com/VulcanJS/Vulcan/pull/1795)
- Remove optics-agent from package.json [`#1791`](https://github.com/VulcanJS/Vulcan/pull/1791)
- Cleanup 1.8.1 [`#1790`](https://github.com/VulcanJS/Vulcan/pull/1790)
- Fix #1933 [`#1933`](https://github.com/VulcanJS/Vulcan/issues/1933)
- Move isAdmin init code to callback, fix #1917 [`#1917`](https://github.com/VulcanJS/Vulcan/issues/1917)
- Don't try to reorder items on vote (fix https://github.com/VulcanJS/Vulcan-Starter/issues/34) [`#34`](https://github.com/VulcanJS/Vulcan-Starter/issues/34)
- add missing await (fix https://github.com/VulcanJS/Vulcan-Starter/issues/24); get rid of extra db call [`#24`](https://github.com/VulcanJS/Vulcan-Starter/issues/24)
- Pass down props (fix #1856) [`#1856`](https://github.com/VulcanJS/Vulcan/issues/1856)
- Remove all example code from core repo (it lives in Starter repo now instead) [`7d17b57`](https://github.com/VulcanJS/Vulcan/commit/7d17b57f0591a820fbf41bf4d36a67562181c104)
- Package upgrade [`7ec4f4d`](https://github.com/VulcanJS/Vulcan/commit/7ec4f4ddd00c6e2f475d8ec5d21d669f5c33038e)
- Super-hacky fix to the accounts setState issue [`6facf15`](https://github.com/VulcanJS/Vulcan/commit/6facf15e17fec0eff0804d35360579513e7f586f)
#### [1.8.1](https://github.com/VulcanJS/Vulcan/compare/v1.7.0...1.8.1)
> 27 December 2017
- Add pre-validate callback on new user creation [`#1778`](https://github.com/VulcanJS/Vulcan/pull/1778)
- Fix issue #1770 [`#1771`](https://github.com/VulcanJS/Vulcan/pull/1771)
- Changes to support vulcan-material-ui [`#1772`](https://github.com/VulcanJS/Vulcan/pull/1772)
- Improve speed of vote score updates (Mongo aggregator + bulkwrite) [`#1759`](https://github.com/VulcanJS/Vulcan/pull/1759)
- Correct prescript for its operation in windows, making it compatible on all three platforms: linux, MacOS and Windows. [`#1754`](https://github.com/VulcanJS/Vulcan/pull/1754)
- Order of operation fix in scoring.js [`#1751`](https://github.com/VulcanJS/Vulcan/pull/1751)
- Added index to Votes on startup [`#1752`](https://github.com/VulcanJS/Vulcan/pull/1752)
- Update package.json [`#1747`](https://github.com/VulcanJS/Vulcan/pull/1747)
- Update README.md [`#1746`](https://github.com/VulcanJS/Vulcan/pull/1746)
- Bump the react-bootstrap version to get rid of "isMounted is deprecated..." error when opening modals [`#1744`](https://github.com/VulcanJS/Vulcan/pull/1744)
- Abstract out bootstrap-specific components in vulcan:forms [`#1750`](https://github.com/VulcanJS/Vulcan/pull/1750)
- Dropped isomorphic-fetch in favor of cross-fetch [`#1738`](https://github.com/VulcanJS/Vulcan/pull/1738)
- Update allow/deny package [`#1734`](https://github.com/VulcanJS/Vulcan/pull/1734)
- fixed some minor bugs in the documentation for subscribeMutationsGenerator [`#1728`](https://github.com/VulcanJS/Vulcan/pull/1728)
- Remove "unique" identifier file. [`#1723`](https://github.com/VulcanJS/Vulcan/pull/1723)
- Fix example simple [`#1724`](https://github.com/VulcanJS/Vulcan/pull/1724)
- Added submit option to `updateCurrentValues` in Form.jsx context [`#1722`](https://github.com/VulcanJS/Vulcan/pull/1722)
- Display errors on password reset form [`#1716`](https://github.com/VulcanJS/Vulcan/pull/1716)
- RegisterFragment should respect comments in fragment literals [`#1713`](https://github.com/VulcanJS/Vulcan/pull/1713)
- Update CONTRIBUTING.md [`#1712`](https://github.com/VulcanJS/Vulcan/pull/1712)
- [fix] give default value to unset [`#1703`](https://github.com/VulcanJS/Vulcan/pull/1703)
- Update sample_settings.json with new mailchimp schema properties [`#1698`](https://github.com/VulcanJS/Vulcan/pull/1698)
- Update CONTRIBUTING.md [`#1696`](https://github.com/VulcanJS/Vulcan/pull/1696)
- Clean up forum packages [`65eda4b`](https://github.com/VulcanJS/Vulcan/commit/65eda4b0334c96ab760ac4d084d722f971a62a24)
- refactoring example-forum package [`0a48d0c`](https://github.com/VulcanJS/Vulcan/commit/0a48d0ccbf282c03577b0a56b1cfeda74dda2a99)
- Dropped isomorphic-fetch in favor of cross-fetch (React Native compatible). [`30aad4c`](https://github.com/VulcanJS/Vulcan/commit/30aad4c2f543ca7fc575e97acbc86451e7ef379c)
#### [v1.7.0](https://github.com/VulcanJS/Vulcan/compare/v1.6.0...v1.7.0)
> 2 August 2017
- add function to remove tags from head [`#1678`](https://github.com/VulcanJS/Vulcan/pull/1678)
- Fix for Users.getTwitterName() [`#1683`](https://github.com/VulcanJS/Vulcan/pull/1683)
- #1658 Fix broken validation error Messages in LoginForm [`#1680`](https://github.com/VulcanJS/Vulcan/pull/1680)
- Fix remove permission strings [`#1673`](https://github.com/VulcanJS/Vulcan/pull/1673)
- create new example-permissions package to showcase groups & permissions API [`66e527f`](https://github.com/VulcanJS/Vulcan/commit/66e527fab461fa484d9a5bbf6251c9e588207f76)
- Add Membership example [`919ffaf`](https://github.com/VulcanJS/Vulcan/commit/919ffafab3cb1b4eb04ace99c42a1f5cbc5eb500)
- Added example-interfaces package [`2c6526f`](https://github.com/VulcanJS/Vulcan/commit/2c6526f81f78db913f2182323e42cfa45ef3f061)
#### [v1.6.0](https://github.com/VulcanJS/Vulcan/compare/v1.5.0...v1.6.0)
> 14 July 2017
- Added failure form callbacks and success form callbacks to forms [`#1666`](https://github.com/VulcanJS/Vulcan/pull/1666)
- (update_version): package:dymanic-import from 0.1.0 -> 0.1.1 to fix [`#1654`](https://github.com/VulcanJS/Vulcan/pull/1654)
- use correct code for Mailchimp "already subscribed" state [`#1651`](https://github.com/VulcanJS/Vulcan/pull/1651)
- (update_version): package:dymanic-import from 0.1.0 -> 0.1.1 to fix https://github.com/meteor/meteor/issues/8751 [`#8751`](https://github.com/meteor/meteor/issues/8751)
- Use default resolvers and mutations for instagram example [`31d0490`](https://github.com/VulcanJS/Vulcan/commit/31d0490a3697b44dc0a3239faa76cc74ab868200)
- add new default resolvers and default mutations; improve the way field resolvers are defined [`7ff1ada`](https://github.com/VulcanJS/Vulcan/commit/7ff1ada7d9d59ff4258ab727b526d7ca33191592)
- use new resolveAs syntax [`3345914`](https://github.com/VulcanJS/Vulcan/commit/334591450dc4242be2ad8ec8545a5eafaf976c77)
#### [v1.5.0](https://github.com/VulcanJS/Vulcan/compare/v1.2.0...v1.5.0)
> 12 June 2017
- Fixed typo in proptypes [`#1646`](https://github.com/VulcanJS/Vulcan/pull/1646)
- Fixed typo in formatMessage call [`#1645`](https://github.com/VulcanJS/Vulcan/pull/1645)
- Added PropType package and changed from component to PureComponent [`#1640`](https://github.com/VulcanJS/Vulcan/pull/1640)
- let addMediaAfterSubmit return post at the end [`#1633`](https://github.com/VulcanJS/Vulcan/pull/1633)
- Utils.getNestedProperty signature typo fix for email schema property [`#1630`](https://github.com/VulcanJS/Vulcan/pull/1630)
- fix bug where All Categories didn't clear the category filter [`#1616`](https://github.com/VulcanJS/Vulcan/pull/1616)
- Should call the property of parentRouteName properly [`#1612`](https://github.com/VulcanJS/Vulcan/pull/1612)
- Semi-colon Updates [`#1601`](https://github.com/VulcanJS/Vulcan/pull/1601)
- Workaround for Issue #1580 [`#1600`](https://github.com/VulcanJS/Vulcan/pull/1600)
- Enable facebook sharing of posts by supporting facebook scraper reqs [`#1596`](https://github.com/VulcanJS/Vulcan/pull/1596)
- small fix for bash install meteor [`#1597`](https://github.com/VulcanJS/Vulcan/pull/1597)
- Unable to assign category to a post (fix #1592) [`#1593`](https://github.com/VulcanJS/Vulcan/pull/1593)
- a make sense modified std:accounts-ui for telescope [`#1589`](https://github.com/VulcanJS/Vulcan/pull/1589)
- use npm simpl-schema, meteor aldeed:collection2-core package [`#1587`](https://github.com/VulcanJS/Vulcan/pull/1587)
- Fixed out-of-the-box newsletter config settings that causes constant … [`#1582`](https://github.com/VulcanJS/Vulcan/pull/1582)
- fix safari issues, remove defineName, improve apolloClientReducer to get the initialState [`#1583`](https://github.com/VulcanJS/Vulcan/pull/1583)
- add missing dependency (fix #1598) [`#1598`](https://github.com/VulcanJS/Vulcan/issues/1598)
- Merge pull request #1593 from comus/ss-patch [`#1592`](https://github.com/VulcanJS/Vulcan/issues/1592)
- Unable to assign category to a post (fix #1592) [`#1592`](https://github.com/VulcanJS/Vulcan/issues/1592)
- Include bootstrap CSS in movies example packages for now [`308280d`](https://github.com/VulcanJS/Vulcan/commit/308280d74904a2172824c260d6ef953737116818)
- Added PropTypes from 'prop-types'; [`14f5ba8`](https://github.com/VulcanJS/Vulcan/commit/14f5ba897175174f3d4d9e3f8734b967f213f8d8)
- vulcan:payments [`ca226ac`](https://github.com/VulcanJS/Vulcan/commit/ca226acca370818ef75c34613242685524dd16d6)
#### [v1.2.0](https://github.com/VulcanJS/Vulcan/compare/1.1.0...v1.2.0)
> 8 March 2017
- Adding Check and/or preinstall Meteor [`#1578`](https://github.com/VulcanJS/Vulcan/pull/1578)
- Nova 1.2.0 🚀 [`81c74db`](https://github.com/VulcanJS/Vulcan/commit/81c74db42fa9a4f1cc1ff7e2fb077153df7fdb36)
- experiment batching, let's see if it has a performance impact [`113b68f`](https://github.com/VulcanJS/Vulcan/commit/113b68f5edf73728cd3c9be6fe0bfd5b047c8d52)
- don't do "half-batching/caching", prepare for nova 1.2 [`0c19136`](https://github.com/VulcanJS/Vulcan/commit/0c19136298ab6519ddedb268184cd75416305e7a)
#### [1.1.0](https://github.com/VulcanJS/Vulcan/compare/v1.0.0...1.1.0)
> 16 February 2017
- better core/lib improvement and update [`#1569`](https://github.com/VulcanJS/Vulcan/pull/1569)
- renderContext fix [`#1565`](https://github.com/VulcanJS/Vulcan/pull/1565)
- Routing independent from deprecated packages & folder restructuration of nova:lib&core & update std:accounts-ui to 1.2.18 [`#1561`](https://github.com/VulcanJS/Vulcan/pull/1561)
- Add username tooltip to user's avatar [`#1555`](https://github.com/VulcanJS/Vulcan/pull/1555)
- new routing [`9992f00`](https://github.com/VulcanJS/Vulcan/commit/9992f0063ee6e73809400cbbe7c0bac153345c1f)
- work on notifications [`b67989f`](https://github.com/VulcanJS/Vulcan/commit/b67989fbc23f2b3b1f6e3ddca262de84af24476d)
- Adapt withEdit/withNew to support new fragments API [`afebadb`](https://github.com/VulcanJS/Vulcan/commit/afebadba55bf8d736a8028e11dae0086cbccfa7e)
### [v1.0.0](https://github.com/VulcanJS/Vulcan/compare/v0.27.5...v1.0.0)
> 2 February 2017
- separate client side and server side routing [`#1543`](https://github.com/VulcanJS/Vulcan/pull/1543)
- devel - revert commits related to simpl-schema [`#1537`](https://github.com/VulcanJS/Vulcan/pull/1537)
- #1517 - Implement configurable excerpt lengths [`#1536`](https://github.com/VulcanJS/Vulcan/pull/1536)
- fixed deployment instructions typo [`#1534`](https://github.com/VulcanJS/Vulcan/pull/1534)
- addRoute function improve, not use array.concat because it will retur… [`#1532`](https://github.com/VulcanJS/Vulcan/pull/1532)
- using nova:forms shows issues when being imported [`#1530`](https://github.com/VulcanJS/Vulcan/pull/1530)
- Allow redux middleware extensions [`#1528`](https://github.com/VulcanJS/Vulcan/pull/1528)
- default avatar image's URL for ssr [`#1526`](https://github.com/VulcanJS/Vulcan/pull/1526)
- adds pt-PT localization to the list [`#1521`](https://github.com/VulcanJS/Vulcan/pull/1521)
- fix #1541: increasePostViewCount mutation + associated resolver; store posts viewed on the client session on postsViewed in the redux store; document PostsPage HOC & lifecycle hook [`#1541`](https://github.com/VulcanJS/Vulcan/issues/1541)
- Pass Apollo client object to parameters callback to fix #1546 [`#1546`](https://github.com/VulcanJS/Vulcan/issues/1546)
- fix #1529 [`#1529`](https://github.com/VulcanJS/Vulcan/issues/1529)
- Nova 1.0.0 stable on master [`4baa939`](https://github.com/VulcanJS/Vulcan/commit/4baa9399256532bd4616037f490bad34e47913e3)
- Remove “__” prefix to avoid conflicts with GraphQL introspection types and simplify code [`db17e91`](https://github.com/VulcanJS/Vulcan/commit/db17e917f823ee8c5faae76adc2871f152bb379c)
- clean-up [`1c058b6`](https://github.com/VulcanJS/Vulcan/commit/1c058b60c68bfbdfadf864448a2764072a1b043c)
#### [v0.27.5](https://github.com/VulcanJS/Vulcan/compare/v0.27.4...v0.27.5)
> 30 November 2016
- v0.27.5 - really the latest full Meteor version [`#1518`](https://github.com/VulcanJS/Vulcan/pull/1518)
- eslint & clean up code, also fixed some bugs [`#1515`](https://github.com/VulcanJS/Vulcan/pull/1515)
- Newsletter subcription fixes [`#1513`](https://github.com/VulcanJS/Vulcan/pull/1513)
- npm run lint support for jsx files [`#1511`](https://github.com/VulcanJS/Vulcan/pull/1511)
- fix wrong comment in deep function [`#1512`](https://github.com/VulcanJS/Vulcan/pull/1512)
- clean up i18n files [`cbcfc1b`](https://github.com/VulcanJS/Vulcan/commit/cbcfc1bcafa5d1ffd0db9e81f24efaa499300282)
- clean up packages names [`d0c72c9`](https://github.com/VulcanJS/Vulcan/commit/d0c72c98f1d09f7bdbc25e8a38456e6791975229)
- adapt the `Telescope.createCollection` api to all the collections, some clean up in old containers files [`1137fb9`](https://github.com/VulcanJS/Vulcan/commit/1137fb96aa99456b454e0de72edc0a8f826ce507)
#### [v0.27.4](https://github.com/VulcanJS/Vulcan/compare/v0.27.3...v0.27.4)
> 15 November 2016
- v0.27.4 - latest version before Apollo official release [`#1508`](https://github.com/VulcanJS/Vulcan/pull/1508)
- add eslint with basic plugins and configuration. fixes #1470 [`#1474`](https://github.com/VulcanJS/Vulcan/pull/1474)
- Fix react setState race condition [`#1507`](https://github.com/VulcanJS/Vulcan/pull/1507)
- Only show comment reply button for logged in users [`#1504`](https://github.com/VulcanJS/Vulcan/pull/1504)
- Add zh-CN i18n package [`#1503`](https://github.com/VulcanJS/Vulcan/pull/1503)
- Add i18n messages for no more posts, no results, and load more days [`#1499`](https://github.com/VulcanJS/Vulcan/pull/1499)
- No comments.deleteById simulation for now [`#1497`](https://github.com/VulcanJS/Vulcan/pull/1497)
- Add Reset Password Feature [`#1491`](https://github.com/VulcanJS/Vulcan/pull/1491)
- fix typo in style class name [`#1487`](https://github.com/VulcanJS/Vulcan/pull/1487)
- meteor update npm-mongo ; meteor update mongo [`#1482`](https://github.com/VulcanJS/Vulcan/pull/1482)
- Merge pull request #1474 from moimikey/patch-1 [`#1470`](https://github.com/VulcanJS/Vulcan/issues/1470)
- modify getUnusedSlug to handle edge case on Users collection, fix #1501 and related to #1213 [`#1501`](https://github.com/VulcanJS/Vulcan/issues/1501)
- clean up callbacks by moving logic to mutations and schema (autoValue) [`8689a4d`](https://github.com/VulcanJS/Vulcan/commit/8689a4de73647bc949c51e9d1c90837cb52d7e22)
- refactoring PostsListContainer and CommentsListContainer into HoCs [`0ed0f24`](https://github.com/VulcanJS/Vulcan/commit/0ed0f24303219505e4ddbbff65aeedb1235a9520)
- move namespace to prefix on user schema: user.telescope.xxx by user.nova_xxx [`460efe5`](https://github.com/VulcanJS/Vulcan/commit/460efe52f606c1a77b745eb2ff61738cd0b0ac58)
#### [v0.27.3](https://github.com/VulcanJS/Vulcan/compare/v0.25.7...v0.27.3)
> 19 October 2016
- v0.27.3 [`#1475`](https://github.com/VulcanJS/Vulcan/pull/1475)
- Updated _posts.scss [`#1469`](https://github.com/VulcanJS/Vulcan/pull/1469)
- Clean some old code & fix some errors [`#1461`](https://github.com/VulcanJS/Vulcan/pull/1461)
- Add shortcut to submit form, close #1471 [`#1472`](https://github.com/VulcanJS/Vulcan/pull/1472)
- Update subscriberIdsToNotify to send unique emails [`#1466`](https://github.com/VulcanJS/Vulcan/pull/1466)
- Tell folks how to deploy Nova with latest Meteor Up (kadirahq/meteor-up), closes #1455 [`#1456`](https://github.com/VulcanJS/Vulcan/pull/1456)
- v0.27.2 [`#1454`](https://github.com/VulcanJS/Vulcan/pull/1454)
- Patch v0.27.1 proposal [`#1446`](https://github.com/VulcanJS/Vulcan/pull/1446)
- Added Brazilian Portuguese package to README.md [`#1444`](https://github.com/VulcanJS/Vulcan/pull/1444)
- Update groups.js (clarity) [`#1445`](https://github.com/VulcanJS/Vulcan/pull/1445)
- Update callback.js to include Linkedin [`#1432`](https://github.com/VulcanJS/Vulcan/pull/1432)
- new nova i18n package (de_DE) [`#1430`](https://github.com/VulcanJS/Vulcan/pull/1430)
- little detail makes big difference for nob like me [`#1428`](https://github.com/VulcanJS/Vulcan/pull/1428)
- nova:subscribe all the things [`#1425`](https://github.com/VulcanJS/Vulcan/pull/1425)
- Syntax highlighting added (where missing) ✨ [`#1424`](https://github.com/VulcanJS/Vulcan/pull/1424)
- Changing subscription method names & better error handling [`#1422`](https://github.com/VulcanJS/Vulcan/pull/1422)
- Extendable Subscribe component & locale [`#1412`](https://github.com/VulcanJS/Vulcan/pull/1412)
- Corrected imports for debug convenience globals [`#1420`](https://github.com/VulcanJS/Vulcan/pull/1420)
- Proposal for a CanDo Higher-Order Component [`#1417`](https://github.com/VulcanJS/Vulcan/pull/1417)
- Refactored subscribe-to-posts [`#1410`](https://github.com/VulcanJS/Vulcan/pull/1410)
- NovaForm: custom control has access to document as a props [`#1403`](https://github.com/VulcanJS/Vulcan/pull/1403)
- Nova i18n ru_RU package. [`#1392`](https://github.com/VulcanJS/Vulcan/pull/1392)
- pl_PL locale [`#1394`](https://github.com/VulcanJS/Vulcan/pull/1394)
- fixed types comparison in Posts.isApproved helper [`#1393`](https://github.com/VulcanJS/Vulcan/pull/1393)
- set locale in settings [`#1391`](https://github.com/VulcanJS/Vulcan/pull/1391)
- Fix Facebook settings error in sample_settings.json and README.md [`#1381`](https://github.com/VulcanJS/Vulcan/pull/1381)
- README: Remove duplicate in #optional-packages [`#1389`](https://github.com/VulcanJS/Vulcan/pull/1389)
- require react 15.0.x specifically [`#1385`](https://github.com/VulcanJS/Vulcan/pull/1385)
- Collection typo error in README.md [`#1380`](https://github.com/VulcanJS/Vulcan/pull/1380)
- don't do modification on a var if undefined => fixes #1375 error [`#1379`](https://github.com/VulcanJS/Vulcan/pull/1379)
- Meta SSR with react-helmet [`#1376`](https://github.com/VulcanJS/Vulcan/pull/1376)
- Different fixes [`#1373`](https://github.com/VulcanJS/Vulcan/pull/1373)
- Decouple components actions from Meteor [`#1370`](https://github.com/VulcanJS/Vulcan/pull/1370)
- added order support for custom fields [`#1364`](https://github.com/VulcanJS/Vulcan/pull/1364)
- use original PostsItem component [`#1362`](https://github.com/VulcanJS/Vulcan/pull/1362)
- 🐙 Fix custom package [`#1356`](https://github.com/VulcanJS/Vulcan/pull/1356)
- Hook up siteImage in settings to the open graph meta tags. [`#1342`](https://github.com/VulcanJS/Vulcan/pull/1342)
- Fixes - Episode II [`#1349`](https://github.com/VulcanJS/Vulcan/pull/1349)
- Fixes [`#1348`](https://github.com/VulcanJS/Vulcan/pull/1348)
- fix import statements in demo [`#1337`](https://github.com/VulcanJS/Vulcan/pull/1337)
- Newsletter + Mailchimp subscription enhancement [`#1332`](https://github.com/VulcanJS/Vulcan/pull/1332)
- Update README.md [`#1334`](https://github.com/VulcanJS/Vulcan/pull/1334)
- Complete soft delete feature for comments (Revision 2) [`#1323`](https://github.com/VulcanJS/Vulcan/pull/1323)
- Load categories at startup in load_categories.js [`#1324`](https://github.com/VulcanJS/Vulcan/pull/1324)
- Update README.md [`#1312`](https://github.com/VulcanJS/Vulcan/pull/1312)
- Only admin see post stats [`#1318`](https://github.com/VulcanJS/Vulcan/pull/1318)
- Fix social login anchor link [`#1311`](https://github.com/VulcanJS/Vulcan/pull/1311)
- fix 404Error page [`#1304`](https://github.com/VulcanJS/Vulcan/pull/1304)
- Completed profile hook [`#1301`](https://github.com/VulcanJS/Vulcan/pull/1301)
- Add siteUrl in front of action link. The link is wrong [`#1242`](https://github.com/VulcanJS/Vulcan/pull/1242)
- Move head tags to layout [`#1298`](https://github.com/VulcanJS/Vulcan/pull/1298)
- Helper: handle thumbnails from embedly, an external website or hosted on the app [`#1295`](https://github.com/VulcanJS/Vulcan/pull/1295)
- Fix HeadTags <-> Flexbox + add 2 helpers for images [`#1292`](https://github.com/VulcanJS/Vulcan/pull/1292)
- HeadTags: dochead instead of react-helmet [`#1291`](https://github.com/VulcanJS/Vulcan/pull/1291)
- Nova package updates [`#1287`](https://github.com/VulcanJS/Vulcan/pull/1287)
- Bugfixes for std:accounts-ui [`#1286`](https://github.com/VulcanJS/Vulcan/pull/1286)
- fixing typo in newCommentSubscribed notification [`#1279`](https://github.com/VulcanJS/Vulcan/pull/1279)
- update documentation link to skip readme.io welcome page [`#1276`](https://github.com/VulcanJS/Vulcan/pull/1276)
- Added current version 'fourseven:scss@3.4.1' to nova:share. [`#1269`](https://github.com/VulcanJS/Vulcan/pull/1269)
- update to version of alt:react-accounts* that doesn't depend on react-runtime [`#1264`](https://github.com/VulcanJS/Vulcan/pull/1264)
- [Nova] Update share package [`#1260`](https://github.com/VulcanJS/Vulcan/pull/1260)
- update alt:react-accounts for full SSR [`#1258`](https://github.com/VulcanJS/Vulcan/pull/1258)
- fix #1255 - add comment incrementing to Posts when adding a comment [`#1256`](https://github.com/VulcanJS/Vulcan/pull/1256)
- Fix Username already exists issue [403] [`#1252`](https://github.com/VulcanJS/Vulcan/pull/1252)
- re-add Dockerfile, fix #1477 [`#1477`](https://github.com/VulcanJS/Vulcan/issues/1477)
- add eslint with basic plugins and configuration. fixes #1470 [`#1470`](https://github.com/VulcanJS/Vulcan/issues/1470)
- Merge pull request #1472 from aszx87410/devel [`#1471`](https://github.com/VulcanJS/Vulcan/issues/1471)
- Add shortcut to submit form, close #1471 [`#1471`](https://github.com/VulcanJS/Vulcan/issues/1471)
- ensure user slug unicity, fixes #1213 [`#1213`](https://github.com/VulcanJS/Vulcan/issues/1213)
- add slug to newPendingPost notification, closes #1254 [`#1254`](https://github.com/VulcanJS/Vulcan/issues/1254)
- Merge pull request #1456 from asmita005/master [`#1455`](https://github.com/VulcanJS/Vulcan/issues/1455)
- complete license, fix #1117 [`#1117`](https://github.com/VulcanJS/Vulcan/issues/1117)
- fix #247 [`#247`](https://github.com/VulcanJS/Vulcan/issues/247)
- fix #1449 [`#1449`](https://github.com/VulcanJS/Vulcan/issues/1449)
- fix #1447, remove unnecessary load-script dependency [`#1447`](https://github.com/VulcanJS/Vulcan/issues/1447)
- fix #1423 [`#1423`](https://github.com/VulcanJS/Vulcan/issues/1423)
- require react 15.0.x specifically (fixes #1384) [`#1384`](https://github.com/VulcanJS/Vulcan/issues/1384)
- Merge pull request #1379 from xavcz/bang-bang-image-settings [`#1375`](https://github.com/VulcanJS/Vulcan/issues/1375)
- don't do modification on a var if undefined => fixes #1375 error at startup on HeadTags [`#1375`](https://github.com/VulcanJS/Vulcan/issues/1375)
- fix #1327 [`#1327`](https://github.com/VulcanJS/Vulcan/issues/1327)
- Merge pull request #1256 from paulmolluzzo/fix-comment-incrementing [`#1255`](https://github.com/VulcanJS/Vulcan/issues/1255)
- fix #1255 - add comment incrementing to Posts when adding a comment [`#1255`](https://github.com/VulcanJS/Vulcan/issues/1255)
- cleaning up nova:subscribe [`99a70a3`](https://github.com/VulcanJS/Vulcan/commit/99a70a326233b3cbdf251aaebbeab24e7a8d2b9f)
- clean up [`5a08bb6`](https://github.com/VulcanJS/Vulcan/commit/5a08bb634fa107b77ef9932c9ea886c3c2015a75)
- change old reference to AutoForm (legacy): field schema "autoform" -> "form" [`7775838`](https://github.com/VulcanJS/Vulcan/commit/7775838980d4c182d204312c03508a3c9c587b7e)
#### [v0.25.7](https://github.com/VulcanJS/Vulcan/compare/v0.25.5...v0.25.7)
> 6 February 2016
- supply default email based on 3rd party login, if possible [`#1223`](https://github.com/VulcanJS/Vulcan/pull/1223)
- Set counter name to category id instead of category slug [`#1229`](https://github.com/VulcanJS/Vulcan/pull/1229)
- Fixed url not defined in postPages[post.url] line 53 [`#1174`](https://github.com/VulcanJS/Vulcan/pull/1174)
- Fixing issue #1170 [`#1187`](https://github.com/VulcanJS/Vulcan/pull/1187)
- refactor permission code; make spam/pending/etc. posts unaccessible (fix #1219) [`#1219`](https://github.com/VulcanJS/Vulcan/issues/1219)
- make comment's postId uneditable in schema (fix #1231) [`#1231`](https://github.com/VulcanJS/Vulcan/issues/1231)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`a247c5c`](https://github.com/VulcanJS/Vulcan/commit/a247c5cfc28c2a6efe7c331169bbb64666f7c467)
- fix i18n formatting [`6232923`](https://github.com/VulcanJS/Vulcan/commit/6232923904439eea2801baf47fd5f390b4bc1100)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`bdc5c00`](https://github.com/VulcanJS/Vulcan/commit/bdc5c0056e7b71ac2e4dc9bca32bf9e73914ad88)
#### [v0.25.5](https://github.com/VulcanJS/Vulcan/compare/v0.25.4...v0.25.5)
> 28 October 2015
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`18b3f44`](https://github.com/VulcanJS/Vulcan/commit/18b3f4405115d7f87454a32de257d0f5e930473c)
- fix i18n syntax; add i18n files to pretender package [`5620d36`](https://github.com/VulcanJS/Vulcan/commit/5620d3670a826f8317872c081d6d2f5c0b756bba)
- version 0.25.5 [`fef1818`](https://github.com/VulcanJS/Vulcan/commit/fef1818f4ad778eef07be8ee597523f014760c5c)
#### [v0.25.4](https://github.com/VulcanJS/Vulcan/compare/v0.25.2...v0.25.4)
> 22 October 2015
- reformatting i18n files for tap:i18n compatibility [`f34b797`](https://github.com/VulcanJS/Vulcan/commit/f34b797fed8c83a5c5f20e63bb8f564d03ff7c56)
- version bump (0.25.3) [`c389514`](https://github.com/VulcanJS/Vulcan/commit/c38951414961650c314656ce1062379dcf887fb2)
- added telescope:prerender package [`eb8f7dc`](https://github.com/VulcanJS/Vulcan/commit/eb8f7dc141d8670f392fe7eac91c48d59c4330a4)
#### [v0.25.2](https://github.com/VulcanJS/Vulcan/compare/v0.25.0...v0.25.2)
> 16 October 2015
- Fixing `(error.error === 603)` always results false [`#1167`](https://github.com/VulcanJS/Vulcan/pull/1167)
- i18n.t bg translation + adding missing ones [`#1164`](https://github.com/VulcanJS/Vulcan/pull/1164)
- Fixes #1161 - Template.layout `pageName` should be reactive as route changes [`#1163`](https://github.com/VulcanJS/Vulcan/pull/1163)
- Fix e-mail template overrides by adding the "custom" prefix server-side [`#1159`](https://github.com/VulcanJS/Vulcan/pull/1159)
- replaced getUserName with getDisplayName for comments [`#1155`](https://github.com/VulcanJS/Vulcan/pull/1155)
- Fix bug that $set and $unset categories same time. [`#1152`](https://github.com/VulcanJS/Vulcan/pull/1152)
- Merge pull request #1163 from shilman/fix-1161 [`#1161`](https://github.com/VulcanJS/Vulcan/issues/1161)
- Fixes #1161 - Template.layout `pageName` should be reactive as route changes [`#1161`](https://github.com/VulcanJS/Vulcan/issues/1161)
- Fix bug that $set and $unset categories same time. [`#1150`](https://github.com/VulcanJS/Vulcan/issues/1150)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`45ff625`](https://github.com/VulcanJS/Vulcan/commit/45ff62551068497996c0a42da975d23b9bf99fea)
- extracting menu component into its own package [`aed1f5a`](https://github.com/VulcanJS/Vulcan/commit/aed1f5a590757a1ce274630546deb2310c858237)
- move menu component to its own separate repo [`50633ff`](https://github.com/VulcanJS/Vulcan/commit/50633ff089fa5babf6339fe155fbb3f098b7f08e)
#### [v0.25.0](https://github.com/VulcanJS/Vulcan/compare/v0.24.0...v0.25.0)
> 24 September 2015
- Fix schema i18n by moving internationalize to collections [`#1115`](https://github.com/VulcanJS/Vulcan/pull/1115)
- Use abstraction of adminUsers consistently [`#1121`](https://github.com/VulcanJS/Vulcan/pull/1121)
- migrating to Flow Router (WIP) [`50c4874`](https://github.com/VulcanJS/Vulcan/commit/50c48745a30af6151902705c8c659e6488280342)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`9b8d25d`](https://github.com/VulcanJS/Vulcan/commit/9b8d25d64f055bcf24c20f4c83a2afc6af2caaaf)
- sign-in/sign-up routes; clean up [`4894d5f`](https://github.com/VulcanJS/Vulcan/commit/4894d5f4f28e04934bc006c8d4d53b26ed1208e2)
#### [v0.24.0](https://github.com/VulcanJS/Vulcan/compare/v0.22.1...v0.24.0)
> 15 August 2015
- Fix Removing URL on Edit [`#1015`](https://github.com/VulcanJS/Vulcan/pull/1015)
- Show Share button on desktop version [`#1091`](https://github.com/VulcanJS/Vulcan/pull/1091)
- Correctly get url for sitemap using slug [`#1098`](https://github.com/VulcanJS/Vulcan/pull/1098)
- Added a RSS route that returns posts filtered by category [`#1100`](https://github.com/VulcanJS/Vulcan/pull/1100)
- make sure the postView is a function [`#1102`](https://github.com/VulcanJS/Vulcan/pull/1102)
- match anything (fix #1103) [`#1103`](https://github.com/VulcanJS/Vulcan/issues/1103)
- getDate -> date (fix #1092) [`#1092`](https://github.com/VulcanJS/Vulcan/issues/1092)
- fix #1009 [`#1009`](https://github.com/VulcanJS/Vulcan/issues/1009)
- stop using Session for search; do not trigger route redirect if search field is empty (fix #1063) [`#1063`](https://github.com/VulcanJS/Vulcan/issues/1063)
- give priority to field label over i18n string, if it exists (fix #1070) [`#1070`](https://github.com/VulcanJS/Vulcan/issues/1070)
- fix i18n son parsing issue [`83e5af6`](https://github.com/VulcanJS/Vulcan/commit/83e5af6b233493429a2ad8e32d8dfe7fab8b2c3a)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`5fb9e8c`](https://github.com/VulcanJS/Vulcan/commit/5fb9e8c76f04f05b39e24cdf4925bdf36d3986c4)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`d78b6b6`](https://github.com/VulcanJS/Vulcan/commit/d78b6b6fd0871a2c5fcb984dacb5d6483a3df2c5)
#### [v0.22.1](https://github.com/VulcanJS/Vulcan/compare/v0.21.1...v0.22.1)
> 27 July 2015
- use absolute URL for Users.getProfileUrl [`#1077`](https://github.com/VulcanJS/Vulcan/pull/1077)
- Title Links on Avatars [`#1067`](https://github.com/VulcanJS/Vulcan/pull/1067)
- allow hero modules to be full width of viewport [`#1065`](https://github.com/VulcanJS/Vulcan/pull/1065)
- Fix decrease inviteCount [`#1054`](https://github.com/VulcanJS/Vulcan/pull/1054)
- Added .startOf('day'); to `today` variable [`#1027`](https://github.com/VulcanJS/Vulcan/pull/1027)
- fixed syntax for passing in error type [`#1043`](https://github.com/VulcanJS/Vulcan/pull/1043)
- Display trimmed down version of htmlBody and fix #1069 [`#1069`](https://github.com/VulcanJS/Vulcan/issues/1069)
- add setting for pointing RSS links to discussion page; add pageUrl to API (fix #1038) [`#1038`](https://github.com/VulcanJS/Vulcan/issues/1038)
- version bump (0.22.1) [`1353f0a`](https://github.com/VulcanJS/Vulcan/commit/1353f0a74dc268e69d50967b31350e5c34402108)
- removing module template to simplify template structure [`b02b568`](https://github.com/VulcanJS/Vulcan/commit/b02b5688b31de281178d2ae901900c9ee7df53b9)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`a8a8a61`](https://github.com/VulcanJS/Vulcan/commit/a8a8a61e09df050b22b04f8721d3c1f157b6690c)
#### [v0.21.1](https://github.com/VulcanJS/Vulcan/compare/v0.20.5...v0.21.1)
> 1 July 2015
- fix settings publication to hide private fields (take 2) [`#1024`](https://github.com/VulcanJS/Vulcan/pull/1024)
- Add Extra CSS [`#1019`](https://github.com/VulcanJS/Vulcan/pull/1019)
- Add option for each day of week for newsletter. Resolves #1034 [`#1034`](https://github.com/VulcanJS/Vulcan/issues/1034)
- Add Extra CSS settings field. Fixes #949 [`#949`](https://github.com/VulcanJS/Vulcan/issues/949)
- Return null if bootstrap-url is blank. Fixes #1012 [`#1012`](https://github.com/VulcanJS/Vulcan/issues/1012)
- Fix arrow key navigation for Single Day view. Fixes #986 [`#986`](https://github.com/VulcanJS/Vulcan/issues/986)
- Created and pushed by LingoHub. Project: 'Telescope-Test4' by User: 'hello@telescopeapp.org'. [`f80d9d8`](https://github.com/VulcanJS/Vulcan/commit/f80d9d85849e89b92b68df9dde81d04e941b811b)
- working on i18n [`1575aeb`](https://github.com/VulcanJS/Vulcan/commit/1575aeb43be981f40365e68e8b65c22e7e9da9bc)
- separating more languages [`a55f40c`](https://github.com/VulcanJS/Vulcan/commit/a55f40c36c41ae8b7cacd72ebee517ff73822948)
#### [v0.20.5](https://github.com/VulcanJS/Vulcan/compare/v0.15.1...v0.20.5)
> 9 June 2015
- Add ability to filter post views by category id [`#966`](https://github.com/VulcanJS/Vulcan/pull/966)
- Add Docker deployment support [`#962`](https://github.com/VulcanJS/Vulcan/pull/962)
- #959 - Fixed plural hardcoding issue by adding pointsUnitDisplayText … [`#960`](https://github.com/VulcanJS/Vulcan/pull/960)
- cosmetic remove some trailing commas from telescope-posts [`#961`](https://github.com/VulcanJS/Vulcan/pull/961)
- fix for nearly all of the getting started package issues [`#945`](https://github.com/VulcanJS/Vulcan/pull/945)
- Add topLevelCommentId field to comments. [`#943`](https://github.com/VulcanJS/Vulcan/pull/943)
- Improve jsHint consistency [`#934`](https://github.com/VulcanJS/Vulcan/pull/934)
- check post existence before access on postUsers publication [`#925`](https://github.com/VulcanJS/Vulcan/pull/925)
- Change color names in email package [`#908`](https://github.com/VulcanJS/Vulcan/pull/908)
- Fix #903 [`#905`](https://github.com/VulcanJS/Vulcan/pull/905)
- fix #1001 [`#1001`](https://github.com/VulcanJS/Vulcan/issues/1001)
- refactor views menu code to fix #1000 [`#1000`](https://github.com/VulcanJS/Vulcan/issues/1000)
- make subscribeUserOnCreation callback run asynchronously to fix #933 [`#933`](https://github.com/VulcanJS/Vulcan/issues/933)
- fix #974 [`#974`](https://github.com/VulcanJS/Vulcan/issues/974)
- fix #972 and fix uninvited users being allowed to post bug [`#972`](https://github.com/VulcanJS/Vulcan/issues/972)
- fix #952 [`#952`](https://github.com/VulcanJS/Vulcan/issues/952)
- fix #955 [`#955`](https://github.com/VulcanJS/Vulcan/issues/955)
- check post existence before access on postUsers publication [`#915`](https://github.com/VulcanJS/Vulcan/issues/915)
- Merge pull request #905 from saimeunt/devel [`#903`](https://github.com/VulcanJS/Vulcan/issues/903)
- Fix #903 [`#903`](https://github.com/VulcanJS/Vulcan/issues/903)
- Revert "Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'." [`a6a904e`](https://github.com/VulcanJS/Vulcan/commit/a6a904e8c58f2e66eb0b1dd0d7e30230d28981a5)
- Created and pushed by LingoHub. Project: 'Telescope' by User: 'hello@telescopeapp.org'. [`caa7ae4`](https://github.com/VulcanJS/Vulcan/commit/caa7ae421dcbd42d707459d20df721b35a2dd5dc)
- owner -> member; set allow/deny for posts, comments, users [`fc8af1c`](https://github.com/VulcanJS/Vulcan/commit/fc8af1c9dac8c9affd4b7940c2e0f8eaf190631d)
#### [v0.15.1](https://github.com/VulcanJS/Vulcan/compare/v0.15.1-rc...v0.15.1)
> 9 April 2015
- adding pages package [`2b05abf`](https://github.com/VulcanJS/Vulcan/commit/2b05abf527936e2201d85b1d262b65f2f9a8ba47)
- collapse user menu by default [`cb7b416`](https://github.com/VulcanJS/Vulcan/commit/cb7b4164ab4d83edf3227525a19b7525de3bc9e1)
- don't display pages menu if there are no pages [`b7d3898`](https://github.com/VulcanJS/Vulcan/commit/b7d38982ff0e4b0b42e843741f51de52ef6a7b48)
#### [v0.15.1-rc](https://github.com/VulcanJS/Vulcan/compare/0.14.3...v0.15.1-rc)
> 8 April 2015
- Swedish translation [`#880`](https://github.com/VulcanJS/Vulcan/pull/880)
- Additional accessibility fixes [`#896`](https://github.com/VulcanJS/Vulcan/pull/896)
- Fix a bug where the post submit autoform hook wasn't called [`#883`](https://github.com/VulcanJS/Vulcan/pull/883)
- deleted unnecessary dot [`#884`](https://github.com/VulcanJS/Vulcan/pull/884)
- post-by-feed: Normalize encoding to utf-8 [`#882`](https://github.com/VulcanJS/Vulcan/pull/882)
- Unify posts hooks [`#875`](https://github.com/VulcanJS/Vulcan/pull/875)
- Update fr.i18n.json [`#867`](https://github.com/VulcanJS/Vulcan/pull/867)
- Improve comments loading performance on long threads [`#860`](https://github.com/VulcanJS/Vulcan/pull/860)
- Use this.userId, not Meteor.user in publications [`#855`](https://github.com/VulcanJS/Vulcan/pull/855)
- Add userId param to changeEmail method [`#854`](https://github.com/VulcanJS/Vulcan/pull/854)
- Validate post's categories on server. [`#835`](https://github.com/VulcanJS/Vulcan/pull/835)
- Fix: numberOfItemsInPast24Hours always returns 0 [`#830`](https://github.com/VulcanJS/Vulcan/pull/830)
- fix bug where last character in search keyword couldn't be cleared [`#833`](https://github.com/VulcanJS/Vulcan/pull/833)
- Added missing translations in Brazilian Portuguese [`#837`](https://github.com/VulcanJS/Vulcan/pull/837)
- missing `var` keyword for `defaultProperties` [`#827`](https://github.com/VulcanJS/Vulcan/pull/827)
- Fix #887 (thanks @kai101) [`#887`](https://github.com/VulcanJS/Vulcan/issues/887)
- Fix #892 (feeds not getting imported) [`#892`](https://github.com/VulcanJS/Vulcan/issues/892)
- Set canonical URL without overriding other params [`#878`](https://github.com/VulcanJS/Vulcan/issues/878)
- post-by-feed: Normalize encoding to utf-8 [`#729`](https://github.com/VulcanJS/Vulcan/issues/729)
- fix #868 [`#868`](https://github.com/VulcanJS/Vulcan/issues/868)
- Fix #822 [`#822`](https://github.com/VulcanJS/Vulcan/issues/822)
- update fourseven:sass (fix #859) [`#859`](https://github.com/VulcanJS/Vulcan/issues/859)
- updating AutoForm (fix #834) [`#834`](https://github.com/VulcanJS/Vulcan/issues/834)
- Use this.userId, not Meteor.user in publications [`#853`](https://github.com/VulcanJS/Vulcan/issues/853)
- Add userId param to changeEmail method [`#852`](https://github.com/VulcanJS/Vulcan/issues/852)
- Fix #754 [`#754`](https://github.com/VulcanJS/Vulcan/issues/754)
- Settings package [`057580b`](https://github.com/VulcanJS/Vulcan/commit/057580b7937c2cef3ce632fe3550fafca9ae2cc4)
- Translated to Swedish. [`208c154`](https://github.com/VulcanJS/Vulcan/commit/208c1546285f2c6119c95b745348b7669bcd124c)
- Update SEO package for master, remove page titles [`c3c8aab`](https://github.com/VulcanJS/Vulcan/commit/c3c8aab94a61e60b712d9df5be5cb8168e978d72)
#### [0.14.3](https://github.com/VulcanJS/Vulcan/compare/v0.14.2...0.14.3)
> 16 March 2015
- Refactor postAfterEditMethodCallbacks execution on server [`#814`](https://github.com/VulcanJS/Vulcan/pull/814)
- Correct base score calculation in vote.js [`#811`](https://github.com/VulcanJS/Vulcan/pull/811)
- Mailchimp limits email subject to 150 characters [`#783`](https://github.com/VulcanJS/Vulcan/pull/783)
- Fix broken twitter avatars (for real this time) [`#810`](https://github.com/VulcanJS/Vulcan/pull/810)
- Fix broken twitter avatars [`#809`](https://github.com/VulcanJS/Vulcan/pull/809)
- Improved vote accessability for packages [`#797`](https://github.com/VulcanJS/Vulcan/pull/797)
- Better spanish [`#795`](https://github.com/VulcanJS/Vulcan/pull/795)
- Add greek translation, fix english translation [`#794`](https://github.com/VulcanJS/Vulcan/pull/794)
- extraCode helper in layout template was not defined [`#785`](https://github.com/VulcanJS/Vulcan/pull/785)
- Various accessibility fixes, mainly hiding unnecessary elements from scr... [`#766`](https://github.com/VulcanJS/Vulcan/pull/766)
- update to bengott:avatar version 0.7.5 [`#799`](https://github.com/VulcanJS/Vulcan/pull/799)
- fix #790 [`#790`](https://github.com/VulcanJS/Vulcan/issues/790)
- add new Greek i18n translation [`1c920e4`](https://github.com/VulcanJS/Vulcan/commit/1c920e4d3648f2eba76a2de17a073f7a523df1c6)
- refactoring sidebar menu to use main nav [`d3665b9`](https://github.com/VulcanJS/Vulcan/commit/d3665b98959032471bb6aa0251cbc3ec0deca732)
- side nav prototype [`63e2aca`](https://github.com/VulcanJS/Vulcan/commit/63e2acabf5e2d9392528c876760794c06d0e448e)
#### [v0.14.2](https://github.com/VulcanJS/Vulcan/compare/v0.14.1...v0.14.2)
> 23 February 2015
- More bulgarian translations [`#781`](https://github.com/VulcanJS/Vulcan/pull/781)
- added swedish [`1952221`](https://github.com/VulcanJS/Vulcan/commit/19522215f7784cd825ac08d514c786130c727469)
- rebuild user management page with reactive-table [`8fd9de3`](https://github.com/VulcanJS/Vulcan/commit/8fd9de3266264c3cbeffdca959afb1ec60350745)
- auth methods are now a setting [`c8e1d60`](https://github.com/VulcanJS/Vulcan/commit/c8e1d608113f5fb90e04a77cae8ae72410d83fd0)
#### [v0.14.1](https://github.com/VulcanJS/Vulcan/compare/v0.14.0...v0.14.1)
> 11 February 2015
- Fixed CSS [`#753`](https://github.com/VulcanJS/Vulcan/pull/753)
- Typo fix [`#752`](https://github.com/VulcanJS/Vulcan/pull/752)
- Small improvements [`#748`](https://github.com/VulcanJS/Vulcan/pull/748)
- polish translation - only lang files [`#747`](https://github.com/VulcanJS/Vulcan/pull/747)
- Brazilian portuguese translation [`#744`](https://github.com/VulcanJS/Vulcan/pull/744)
- Vietnamese translation [`#736`](https://github.com/VulcanJS/Vulcan/pull/736)
- Fix Google Analytics [`#741`](https://github.com/VulcanJS/Vulcan/pull/741)
- Update tr.i18n.json [`#738`](https://github.com/VulcanJS/Vulcan/pull/738)
- Es translation missing for es.i18.json [`#735`](https://github.com/VulcanJS/Vulcan/pull/735)
- Fixes #719. Allowing mobile nav to close if user clicks anywhere outside of it [`#724`](https://github.com/VulcanJS/Vulcan/pull/724)
- Changed Sign-up to Register [`#726`](https://github.com/VulcanJS/Vulcan/pull/726)
- tweak button color specificity so that social sign-in button color is not affected (fix #481) [`#481`](https://github.com/VulcanJS/Vulcan/issues/481)
- fix #480 [`#480`](https://github.com/VulcanJS/Vulcan/issues/480)
- fix #699 [`#699`](https://github.com/VulcanJS/Vulcan/issues/699)
- *really* fix #743 [`#743`](https://github.com/VulcanJS/Vulcan/issues/743)
- Revert "fix #743" [`#743`](https://github.com/VulcanJS/Vulcan/issues/743)
- fix #743 [`#743`](https://github.com/VulcanJS/Vulcan/issues/743)
- fix #742 [`#742`](https://github.com/VulcanJS/Vulcan/issues/742)
- fix #737 [`#737`](https://github.com/VulcanJS/Vulcan/issues/737)
- Merge pull request #724 from anthonymayer/mobile-nav-click-outside [`#719`](https://github.com/VulcanJS/Vulcan/issues/719)
- Update _posts.scss [`a774b5b`](https://github.com/VulcanJS/Vulcan/commit/a774b5b2e4fcfbf118ec37d405e7ba771b4df60c)
- Translated to Brazilian Portuguese Completed [`34e7d0e`](https://github.com/VulcanJS/Vulcan/commit/34e7d0e113e859800f3fee8ec5d351a52dbfff55)
- Update vn.i18n.json [`eef8520`](https://github.com/VulcanJS/Vulcan/commit/eef8520c58d92e7b9cd481d73b4b3d090a90bdf6)
#### [v0.14.0](https://github.com/VulcanJS/Vulcan/compare/v0.14.0-rc...v0.14.0)
> 27 January 2015
- change sign in for register [`#722`](https://github.com/VulcanJS/Vulcan/pull/722)
- Adding newsletter time setting [`#712`](https://github.com/VulcanJS/Vulcan/pull/712)
- Update _posts.scss [`#716`](https://github.com/VulcanJS/Vulcan/pull/716)
- Fixes #719. Allowing mobile nav to close if user clicks anywhere outside of it. [`#719`](https://github.com/VulcanJS/Vulcan/issues/719)
- fixing mobile version for grid layout [`1aefbea`](https://github.com/VulcanJS/Vulcan/commit/1aefbea3cdd7cefc71bf6bd83710cb75ba4c640c)
- fix bug preventing posting comments [`a0ebc73`](https://github.com/VulcanJS/Vulcan/commit/a0ebc73cf7f5c0176ca935343d1892aa726ed933)
- fixing email notification templates [`c38c1c6`](https://github.com/VulcanJS/Vulcan/commit/c38c1c64348ac7aeb181a0c6a4481e389dcfd625)
#### [v0.14.0-rc](https://github.com/VulcanJS/Vulcan/compare/v0.13.0...v0.14.0-rc)
> 21 January 2015
- Cleaning up vote click handling functions and adding tests. [`#708`](https://github.com/VulcanJS/Vulcan/pull/708)
- Making both Travis and CodeClimate integrations works [`#706`](https://github.com/VulcanJS/Vulcan/pull/706)
- adding subscribe-to-posts package [`cf01d01`](https://github.com/VulcanJS/Vulcan/commit/cf01d01dbd242ebf21350dfb6d9a5afd8bbd2b6c)
- organising posts css [`b3804e4`](https://github.com/VulcanJS/Vulcan/commit/b3804e43ca26f00d29ff0a11468ebc6a3361b3c6)
- working on grid layout; added callback for injecting CSS classes for post items [`35ae630`](https://github.com/VulcanJS/Vulcan/commit/35ae630ebdd89e8667b449318e48a42104ad78ae)
#### [v0.13.0](https://github.com/VulcanJS/Vulcan/compare/v0.12.1...v0.13.0)
> 18 January 2015
- enabled trim and lowercase option for username field [`#696`](https://github.com/VulcanJS/Vulcan/pull/696)
- https is better [`#694`](https://github.com/VulcanJS/Vulcan/pull/694)
- Update posts.js [`#686`](https://github.com/VulcanJS/Vulcan/pull/686)
- Getting rid of redundant permissions functions. [`#672`](https://github.com/VulcanJS/Vulcan/pull/672)
- add html to .editorconfig [`#651`](https://github.com/VulcanJS/Vulcan/pull/651)
- Update helpers.js [`#677`](https://github.com/VulcanJS/Vulcan/pull/677)
- Add Bulgarian translation [`#669`](https://github.com/VulcanJS/Vulcan/pull/669)
- remove unnecessary decodeUrl (fix #675) [`#675`](https://github.com/VulcanJS/Vulcan/issues/675)
- Getting rid of redundant permissions functions [`f9d9891`](https://github.com/VulcanJS/Vulcan/commit/f9d9891fba27cfbb404f440c47ac06dc55b2c741)
- fixing newsletter sync/async issue [`1fd47b2`](https://github.com/VulcanJS/Vulcan/commit/1fd47b23f023aad730a1e89bd2ebf7911472a15f)
- rename files in singleDay package [`47ace39`](https://github.com/VulcanJS/Vulcan/commit/47ace39e26b492e1da19bbe064382732d181e756)
#### [v0.12.1](https://github.com/VulcanJS/Vulcan/compare/v0.12.0-pre...v0.12.1)
> 5 January 2015
- clean up packages [`bc048d2`](https://github.com/VulcanJS/Vulcan/commit/bc048d24d6612737b1cd5ed1e9ea91dedb060764)
- history & updated getting started [`67671d4`](https://github.com/VulcanJS/Vulcan/commit/67671d4ebd7122479a314d06eefb82c72b739611)
- disabling tests for now [`b75355d`](https://github.com/VulcanJS/Vulcan/commit/b75355d89db85712188d92bd3f7ce28b10ec9b31)
#### [v0.12.0](https://github.com/VulcanJS/Vulcan/compare/v0.11.1...v0.12.0)
> 3 January 2015
- Adding nav client unit test [`#662`](https://github.com/VulcanJS/Vulcan/pull/662)
- make primary and secondary nav sortable (fix #642) [`#642`](https://github.com/VulcanJS/Vulcan/issues/642)
- export PostsDigestController (fix #643) [`#643`](https://github.com/VulcanJS/Vulcan/issues/643)
- working on getting started package [`6a8a6ee`](https://github.com/VulcanJS/Vulcan/commit/6a8a6ee8bb007eeef31f46ad8e131ad18588164c)
- make release notes into a package [`ecad51b`](https://github.com/VulcanJS/Vulcan/commit/ecad51bbbd764405649829e5346b3f8a12dfcd11)
- clean-up [`778c08d`](https://github.com/VulcanJS/Vulcan/commit/778c08d544dd22d7b31bd1be79a43a9df13baeac)
#### [v0.12.0-pre](https://github.com/VulcanJS/Vulcan/compare/v0.12.0...v0.12.0-pre)
> 5 January 2015
- Add Bulgarian translation [`5ef1693`](https://github.com/VulcanJS/Vulcan/commit/5ef1693e44651541e536605f0219e243b9d6f54a)
- renaming viewNav to viewsMenu and adminNav to adminMenu [`f5354bf`](https://github.com/VulcanJS/Vulcan/commit/f5354bf69da2f592c999544fa65a3225a166fb57)
- css tweaks [`e789511`](https://github.com/VulcanJS/Vulcan/commit/e789511d8baeb752c4a559547d64b482a1f88ae5)
#### [v0.11.1](https://github.com/VulcanJS/Vulcan/compare/v0.11.0...v0.11.1)
> 29 December 2014
- fixed migrations.js when telescope-tags are removed [`#656`](https://github.com/VulcanJS/Vulcan/pull/656)
- Couple of small Newsletter fixes [`#655`](https://github.com/VulcanJS/Vulcan/pull/655)
- Update zh-CN.i18n.json [`#652`](https://github.com/VulcanJS/Vulcan/pull/652)
- Update to bengott:avatar@0.7.3 [`#647`](https://github.com/VulcanJS/Vulcan/pull/647)
- Update to bengott:avatar@0.7.2 [`#645`](https://github.com/VulcanJS/Vulcan/pull/645)
- Update to bengott:avatar@0.7.1 [`#644`](https://github.com/VulcanJS/Vulcan/pull/644)
- update to bengott:avatar@0.7.0 [`#640`](https://github.com/VulcanJS/Vulcan/pull/640)
- refactor voting code to accept function calls from server [`24a0f9b`](https://github.com/VulcanJS/Vulcan/commit/24a0f9b8306c8cfaf5d76840872e7cc672b419ba)
- subscribe post [`f6583aa`](https://github.com/VulcanJS/Vulcan/commit/f6583aad5e21d8541b70da7cadf59d9aabf1c536)
- working on post-by-feed package [`0b751d0`](https://github.com/VulcanJS/Vulcan/commit/0b751d086c52a9d59ab21eee6028349f7c5cd1d4)
#### [v0.11.0](https://github.com/VulcanJS/Vulcan/compare/v0.10.0...v0.11.0)
> 17 December 2014
- Add editorconfig for consistency [`#636`](https://github.com/VulcanJS/Vulcan/pull/636)
- Minor tweaks [`#634`](https://github.com/VulcanJS/Vulcan/pull/634)
- Russian translation [`#629`](https://github.com/VulcanJS/Vulcan/pull/629)
- Fix various url problems by taking siteUrl into account when getting route urls. [`#611`](https://github.com/VulcanJS/Vulcan/pull/611)
- fixed #631 [`#631`](https://github.com/VulcanJS/Vulcan/issues/631)
- fixed #632 - Update to useraccounts:unstyled@1.4.0 [`#632`](https://github.com/VulcanJS/Vulcan/issues/632)
- Auto post via RSS urls. Fixes #453 [`#453`](https://github.com/VulcanJS/Vulcan/issues/453)
- fix #617 [`#617`](https://github.com/VulcanJS/Vulcan/issues/617)
- Add link for clearing thumbnail (fix #607) [`#607`](https://github.com/VulcanJS/Vulcan/issues/607)
- use console.log() instead of throwing error to prevent post submit interruption (fix #607) [`#607`](https://github.com/VulcanJS/Vulcan/issues/607)
- fix digest parameters bug (fix #609) [`#609`](https://github.com/VulcanJS/Vulcan/issues/609)
- Update SEO package for master, remove page titles [`e25034c`](https://github.com/VulcanJS/Vulcan/commit/e25034c4db0c2776be7dd931d47ca929d21d133c)
- Refactor for getDescription and package style [`d17c447`](https://github.com/VulcanJS/Vulcan/commit/d17c447561b8722e562bb119d68f197b5b514638)
- Added Russian translation [`4331407`](https://github.com/VulcanJS/Vulcan/commit/4331407e7563d23608cda37b74ff247fbb4b7167)
#### [v0.10.0](https://github.com/VulcanJS/Vulcan/compare/v0.9.11...v0.10.0)
> 9 December 2014
- Switching from manually generating urls to using IronRouter functions. [`#588`](https://github.com/VulcanJS/Vulcan/pull/588)
- Fixes #444 - Adding UserEditController to show invites correctly [`#581`](https://github.com/VulcanJS/Vulcan/pull/581)
- Fixes #562 - Adds site link to email header. [`#587`](https://github.com/VulcanJS/Vulcan/pull/587)
- Look for settings in Meteor.settings too (fix #561) [`#561`](https://github.com/VulcanJS/Vulcan/issues/561)
- finish epic editor clean up and fix #591 [`#591`](https://github.com/VulcanJS/Vulcan/issues/591)
- don't need updateCategoryInPosts method anymore (fix #590) [`#590`](https://github.com/VulcanJS/Vulcan/issues/590)
- do not make call to CDN when language is english (fix #589) [`#589`](https://github.com/VulcanJS/Vulcan/issues/589)
- Merge pull request #581 from anthonymayer/invites-cleanup [`#444`](https://github.com/VulcanJS/Vulcan/issues/444)
- Merge pull request #587 from anthonymayer/email-header-site-link [`#562`](https://github.com/VulcanJS/Vulcan/issues/562)
- removing Epic Editor files [`17431df`](https://github.com/VulcanJS/Vulcan/commit/17431dfb8717df3fcc42a309321f9ca08db3affc)
- renaming errors to messages [`b6c54c1`](https://github.com/VulcanJS/Vulcan/commit/b6c54c106da4f72ee25e06c500c7d8a555d9c7c4)
- extracting digest into its own package [`75bd8d9`](https://github.com/VulcanJS/Vulcan/commit/75bd8d99201961f8d4039c6356701247d4f5d9da)
#### [v0.9.11](https://github.com/VulcanJS/Vulcan/compare/v0.9.10...v0.9.11)
> 3 December 2014
- Fixes #572 - Expands search box when focused or not empty. [`#580`](https://github.com/VulcanJS/Vulcan/pull/580)
- Fixes #543 - duplicate search logs. [`#571`](https://github.com/VulcanJS/Vulcan/pull/571)
- Hide mobile nav dropdowns [`#573`](https://github.com/VulcanJS/Vulcan/pull/573)
- Add Bulgarian-bg translation [`#558`](https://github.com/VulcanJS/Vulcan/pull/558)
- ru.i18n.json [`#557`](https://github.com/VulcanJS/Vulcan/pull/557)
- Compiling scss as part of build rather than with compass. [`#547`](https://github.com/VulcanJS/Vulcan/pull/547)
- Fixes #555. [`#556`](https://github.com/VulcanJS/Vulcan/pull/556)
- Fix telescope-search route for iron:router 1.0 [`#549`](https://github.com/VulcanJS/Vulcan/pull/549)
- tr.i18n.json [`#553`](https://github.com/VulcanJS/Vulcan/pull/553)
- Correcting emailNewPost template [`#554`](https://github.com/VulcanJS/Vulcan/pull/554)
- Fix #584 [`#584`](https://github.com/VulcanJS/Vulcan/issues/584)
- Fixes #444 - Adding UserEditController to show invites correctly [`#444`](https://github.com/VulcanJS/Vulcan/issues/444)
- Merge pull request #580 from anthonymayer/expanding-search-box [`#572`](https://github.com/VulcanJS/Vulcan/issues/572)
- Fixes #572 - Expands search box when focused or not empty. [`#572`](https://github.com/VulcanJS/Vulcan/issues/572)
- Merge pull request #571 from anthonymayer/fix-duplicate-search-logs [`#543`](https://github.com/VulcanJS/Vulcan/issues/543)
- Fixes #562 - Adds site link to email header. [`#562`](https://github.com/VulcanJS/Vulcan/issues/562)
- Merge pull request #556 from anthonymayer/missing_i18n_keys [`#555`](https://github.com/VulcanJS/Vulcan/issues/555)
- Fixes #555. [`#555`](https://github.com/VulcanJS/Vulcan/issues/555)
- create datetimepicker custom field type package [`9617639`](https://github.com/VulcanJS/Vulcan/commit/96176398e30fbfad700045faa2fee01602a61b25)
- working on post edit form [`6183716`](https://github.com/VulcanJS/Vulcan/commit/618371636de294af45d4486b8ed3902e075134f7)
- working on post submit form [`672be96`](https://github.com/VulcanJS/Vulcan/commit/672be96c9be7bbbd336b106163e7c2c57a984b5f)
#### [v0.9.10](https://github.com/VulcanJS/Vulcan/compare/v0.9.9-for-real...v0.9.10)
> 25 November 2014
- Upgrade to bengott:avatar 0.6.0 [`#548`](https://github.com/VulcanJS/Vulcan/pull/548)
- Fixes #541 [`#542`](https://github.com/VulcanJS/Vulcan/pull/542)
- Search webkit appearance [`#540`](https://github.com/VulcanJS/Vulcan/pull/540)
- Adding back title setting [`#537`](https://github.com/VulcanJS/Vulcan/pull/537)
- Merge pull request #542 from anthonymayer/filter-by-links-not-working [`#541`](https://github.com/VulcanJS/Vulcan/issues/541)
- Fixes #541 [`#541`](https://github.com/VulcanJS/Vulcan/issues/541)
- Fixes #538 in source scss, rather than in generated css [`#538`](https://github.com/VulcanJS/Vulcan/issues/538)
- Fixes #538 [`#538`](https://github.com/VulcanJS/Vulcan/issues/538)
- Compiling scss as part of build rather than with compass. [`30ca412`](https://github.com/VulcanJS/Vulcan/commit/30ca412921c28e5817cc1eb554d0591bac38039b)
- updating package versions [`f3ddf53`](https://github.com/VulcanJS/Vulcan/commit/f3ddf53cf7f25c15f12931c3e6e067019a192140)
- internationalizing packages [`0a696ce`](https://github.com/VulcanJS/Vulcan/commit/0a696ce1e3d8ac7ba20803625b6cccaa9a67a2b6)
#### [v0.9.9](https://github.com/VulcanJS/Vulcan/compare/v0.9.8...v0.9.9)
> 18 November 2014
- Splitting out router.js in multiple files. [`23079ff`](https://github.com/VulcanJS/Vulcan/commit/23079ff9f238ecd1b6f79558c7aea57e8254e73b)
- updating to Meteor 1.0 [`0ceda58`](https://github.com/VulcanJS/Vulcan/commit/0ceda58124bb5e0d30ed7f368196a1780825aa89)
- Working on IR 1.0 update [`73cb59a`](https://github.com/VulcanJS/Vulcan/commit/73cb59a088cd18180483aa823bc6227d203513b8)
#### [v0.9.9-for-real](https://github.com/VulcanJS/Vulcan/compare/v0.9.9...v0.9.9-for-real)
> 19 November 2014
- Convert translation keys format to tap:i18n standard [`2605dcb`](https://github.com/VulcanJS/Vulcan/commit/2605dcb27c514365933fe69271eeb0e94b8729b5)
- Convert lang js files to i18n.json [`c9c8f3e`](https://github.com/VulcanJS/Vulcan/commit/c9c8f3ea8df532244f1c9886e1ab85ee438dc1f9)
- refactor server-side email template routes [`eb08247`](https://github.com/VulcanJS/Vulcan/commit/eb082473ed0f0138591e1968f56a1c1dc2eadf57)
#### [v0.9.8](https://github.com/VulcanJS/Vulcan/compare/v0.9.7...v0.9.8)
> 18 October 2014
- Update to bengott:avatar 0.2.1 [`#493`](https://github.com/VulcanJS/Vulcan/pull/493)
- Fix email_hash bug (Issue #393) [`#491`](https://github.com/VulcanJS/Vulcan/pull/491)
- Update to bengott:avatar 0.1.4 [`#488`](https://github.com/VulcanJS/Vulcan/pull/488)
- Update to use bengott:avatar 0.1.2 [`#487`](https://github.com/VulcanJS/Vulcan/pull/487)
- Add missing adminMongoQuery and notAdminMongoQuery [`#472`](https://github.com/VulcanJS/Vulcan/pull/472)
- Add a Gitter chat badge to README.md [`#466`](https://github.com/VulcanJS/Vulcan/pull/466)
- Kadira package update to latest release 2.11.2 [`#469`](https://github.com/VulcanJS/Vulcan/pull/469)
- Update it.js [`#468`](https://github.com/VulcanJS/Vulcan/pull/468)
- Update to use bengott:avatar package for user avatars [`#454`](https://github.com/VulcanJS/Vulcan/pull/454)
- Add querystring updates to search [`#462`](https://github.com/VulcanJS/Vulcan/pull/462)
- Fully abstract isAdmin [`#463`](https://github.com/VulcanJS/Vulcan/pull/463)
- German translation (de.js) [`#458`](https://github.com/VulcanJS/Vulcan/pull/458)
- Posts rss refactor [`#450`](https://github.com/VulcanJS/Vulcan/pull/450)
- Hide future posts [`#449`](https://github.com/VulcanJS/Vulcan/pull/449)
- update to accounts-templates-unstyled 0.9.7 [`#448`](https://github.com/VulcanJS/Vulcan/pull/448)
- herald integration [`9be1bd7`](https://github.com/VulcanJS/Vulcan/commit/9be1bd7169ce407920019c2f8b65f791b2866a84)
- working on quick form for post submit [`ccf0ea7`](https://github.com/VulcanJS/Vulcan/commit/ccf0ea7820cadec85747b5c41e45f68c7fc2d34c)
- Make it possible to hide fields from quickform; cleanup [`73d1098`](https://github.com/VulcanJS/Vulcan/commit/73d1098646b45b943fb0f4f97c241ef77e896399)
#### [v0.9.7](https://github.com/VulcanJS/Vulcan/compare/v0.9.6...v0.9.7)
> 29 September 2014
- Avatar Tweaks [`#438`](https://github.com/VulcanJS/Vulcan/pull/438)
- Fixed issue that user would always be redirected to "/" after sign up and enables validation. [`#433`](https://github.com/VulcanJS/Vulcan/pull/433)
- Turn Gravatars from random helpers into a component [`#436`](https://github.com/VulcanJS/Vulcan/pull/436)
- Exclude posts scheduled in the future from the RSS feed [`#431`](https://github.com/VulcanJS/Vulcan/pull/431)
- fix #441 [`#441`](https://github.com/VulcanJS/Vulcan/issues/441)
- splitting settings form into field sets [`51de4d7`](https://github.com/VulcanJS/Vulcan/commit/51de4d79db807455ac1cda70fed9110928830e93)
- updating meteor [`95a2157`](https://github.com/VulcanJS/Vulcan/commit/95a21577686296176c6e114d18a498bd572d5f37)
- Adding instructions to settings form [`f00ffd8`](https://github.com/VulcanJS/Vulcan/commit/f00ffd8498f5fe6cc4da48d0d4e877c14c7237b5)
#### [v0.9.6](https://github.com/VulcanJS/Vulcan/compare/v0.9.5...v0.9.6)
> 26 September 2014
- Retinize gravatar image size [`#429`](https://github.com/VulcanJS/Vulcan/pull/429)
- comment rss [`#423`](https://github.com/VulcanJS/Vulcan/pull/423)
- fix #401 profile url collisions [`#420`](https://github.com/VulcanJS/Vulcan/pull/420)
- Publication validation [`#377`](https://github.com/VulcanJS/Vulcan/pull/377)
- Fix #430 [`#430`](https://github.com/VulcanJS/Vulcan/issues/430)
- Merge pull request #420 from GoodEveningMiss/slugify-collisions [`#401`](https://github.com/VulcanJS/Vulcan/issues/401)
- fix #401 [`#401`](https://github.com/VulcanJS/Vulcan/issues/401)
- adding telescope-kadira package [`b54b7b6`](https://github.com/VulcanJS/Vulcan/commit/b54b7b60d88917adcc6df777bd153b07d6e29323)
- working on CSS [`e04a4e9`](https://github.com/VulcanJS/Vulcan/commit/e04a4e98e3a25e7da117a6a27c0609fe29c102cf)
- finishing css tweaks [`25f5fcd`](https://github.com/VulcanJS/Vulcan/commit/25f5fcd778af1d5026bc73970ee5e64460cd7060)
#### [v0.9.5](https://github.com/VulcanJS/Vulcan/compare/v0.9.4...v0.9.5)
> 20 September 2014
- Fixes #415: prevent invalid up/downvotes when concurrent requests [`#416`](https://github.com/VulcanJS/Vulcan/pull/416)
- Corrected path to /forgot-password [`#414`](https://github.com/VulcanJS/Vulcan/pull/414)
- Update README.nitrous.md [`#412`](https://github.com/VulcanJS/Vulcan/pull/412)
- Update README.nitrous.md [`#411`](https://github.com/VulcanJS/Vulcan/pull/411)
- swap order of subtract() args due to deprecation [`#410`](https://github.com/VulcanJS/Vulcan/pull/410)
- Fix issue #403 - Replaced deprecated "schema" property with "attachSchema" method. [`#407`](https://github.com/VulcanJS/Vulcan/pull/407)
- cache jQuery; cleanup [`#404`](https://github.com/VulcanJS/Vulcan/pull/404)
- Merge pull request #416 from spifd/fix-concurrent-updownvotes [`#415`](https://github.com/VulcanJS/Vulcan/issues/415)
- Making notifications into their own package [`2a91121`](https://github.com/VulcanJS/Vulcan/commit/2a911217e9fb4637d66276e7d5e881a83b96fd86)
- added italian locales [`64018cb`](https://github.com/VulcanJS/Vulcan/commit/64018cbf427b55897e94a1905f3ea6c89ad36dfb)
- cleanup while getting familiar with the codebase [`6fc6b9e`](https://github.com/VulcanJS/Vulcan/commit/6fc6b9eb785d408dbde42db54e8176a743899e50)
#### v0.9.4
> 16 September 2014
- use UI.dynamic for incoming posts template [`#402`](https://github.com/VulcanJS/Vulcan/pull/402)
- Allow images in body. [`#397`](https://github.com/VulcanJS/Vulcan/pull/397)
- Correcting the if statement for profile.site url [`#396`](https://github.com/VulcanJS/Vulcan/pull/396)
- Use epic editor autogrow feature [`#395`](https://github.com/VulcanJS/Vulcan/pull/395)
- update epiceditor to latest(0.2.2) and unminified version [`#394`](https://github.com/VulcanJS/Vulcan/pull/394)
- use // instead of http:// for images [`#392`](https://github.com/VulcanJS/Vulcan/pull/392)
- fix email hash of gravatar [`#391`](https://github.com/VulcanJS/Vulcan/pull/391)
- uncommented and line 18 [`#384`](https://github.com/VulcanJS/Vulcan/pull/384)
- Fix header logo position [`#380`](https://github.com/VulcanJS/Vulcan/pull/380)
- Adds comments to API [`#378`](https://github.com/VulcanJS/Vulcan/pull/378)
- Remove unused signin [`#376`](https://github.com/VulcanJS/Vulcan/pull/376)
- update bootstrap datepicker [`#369`](https://github.com/VulcanJS/Vulcan/pull/369)
- Changed the default sign-in route from /signin to /sign-in [`#367`](https://github.com/VulcanJS/Vulcan/pull/367)
- Small customization enhancements and fix [`#351`](https://github.com/VulcanJS/Vulcan/pull/351)
- Don't iterate all the users for finding who to send notifications to. [`#338`](https://github.com/VulcanJS/Vulcan/pull/338)
- Fix digest date issues [`#321`](https://github.com/VulcanJS/Vulcan/pull/321)
- fixed - not showing user profiles [`#308`](https://github.com/VulcanJS/Vulcan/pull/308)
- [fix] undefined title in posts [`#305`](https://github.com/VulcanJS/Vulcan/pull/305)
- Fixed locale en [`#285`](https://github.com/VulcanJS/Vulcan/pull/285)
- Translations variable change to object [`#286`](https://github.com/VulcanJS/Vulcan/pull/286)
- fix for downvoting comments [`#278`](https://github.com/VulcanJS/Vulcan/pull/278)
- fixed typo related to profile picture Fetching [`#275`](https://github.com/VulcanJS/Vulcan/pull/275)
- Facebook integration [`#273`](https://github.com/VulcanJS/Vulcan/pull/273)
- Added Hack on Nitrous.IO button [`#271`](https://github.com/VulcanJS/Vulcan/pull/271)
- specify required versions of iron router and meteor in smart.json [`#268`](https://github.com/VulcanJS/Vulcan/pull/268)
- "New Posts" string for en.js was in French [`#264`](https://github.com/VulcanJS/Vulcan/pull/264)
- better redirection,error msg after post is deleted [`#263`](https://github.com/VulcanJS/Vulcan/pull/263)
- fixed issue for broken redirection to template after commment deletion [`#262`](https://github.com/VulcanJS/Vulcan/pull/262)
- Fixes #255: now canView do not wait for 'settingsLoaded' which was removed in e622c112 [`#256`](https://github.com/VulcanJS/Vulcan/pull/256)
- Use the outgoing click tracking for rss [`#250`](https://github.com/VulcanJS/Vulcan/pull/250)
- updated meteor to latest version [`#245`](https://github.com/VulcanJS/Vulcan/pull/245)
- categories are sorted by name [`#244`](https://github.com/VulcanJS/Vulcan/pull/244)
- Fix new post checkbox [`#242`](https://github.com/VulcanJS/Vulcan/pull/242)
- Only show category list on post submit/edit if there are categories [`#240`](https://github.com/VulcanJS/Vulcan/pull/240)
- Best practice to pass object than to check for optional parameter value [`#235`](https://github.com/VulcanJS/Vulcan/pull/235)
- added fast-render support [`#228`](https://github.com/VulcanJS/Vulcan/pull/228)
- #220: now all pages are waitOn('categories') [`#227`](https://github.com/VulcanJS/Vulcan/pull/227)
- #218: post_submit: <input name=category>s are now checkboxes, not radio [`#223`](https://github.com/VulcanJS/Vulcan/pull/223)
- router.js: all router-level access checks now wait for required subscriptions to be ready instead of hacking around [`#224`](https://github.com/VulcanJS/Vulcan/pull/224)
- #217: fixed bug with 'You have to be an admin' message displayed to admins [`#222`](https://github.com/VulcanJS/Vulcan/pull/222)
- #213: symlinks was removed from /packages/ - they should be locally created by Meteorite [`#221`](https://github.com/VulcanJS/Vulcan/pull/221)
- #194: fixed bug with preserving category name in posts after renaming [`#219`](https://github.com/VulcanJS/Vulcan/pull/219)
- #184: fixed subscription to Notifications collection [`#216`](https://github.com/VulcanJS/Vulcan/pull/216)
- User profile edit form: now it's prevented from submit and windows is scrolled to display error/success message [`#215`](https://github.com/VulcanJS/Vulcan/pull/215)
- For for #209: createNotifications() is a server-side function now [`#214`](https://github.com/VulcanJS/Vulcan/pull/214)
- Update from depreciated style events [`#212`](https://github.com/VulcanJS/Vulcan/pull/212)
- Spanish revised [`#205`](https://github.com/VulcanJS/Vulcan/pull/205)
- missing comma on line 178 [`#199`](https://github.com/VulcanJS/Vulcan/pull/199)
- add i18n chinese support [`#195`](https://github.com/VulcanJS/Vulcan/pull/195)
- Add Spanish i18n [`#198`](https://github.com/VulcanJS/Vulcan/pull/198)
- Update Events declaration style [`#188`](https://github.com/VulcanJS/Vulcan/pull/188)
- Nice search transition [`#187`](https://github.com/VulcanJS/Vulcan/pull/187)
- Use higher quality gravatar image [`#168`](https://github.com/VulcanJS/Vulcan/pull/168)
- Fix subscription for spiderable [`#167`](https://github.com/VulcanJS/Vulcan/pull/167)
- Use cursor to iterate lists of users [`#166`](https://github.com/VulcanJS/Vulcan/pull/166)
- Fix downvoting, cancelling upvoting & cancelling downvoting [`#164`](https://github.com/VulcanJS/Vulcan/pull/164)
- Show nothing instead of null [`#163`](https://github.com/VulcanJS/Vulcan/pull/163)
- Have no title if there isn't a title set instead of undefined [`#162`](https://github.com/VulcanJS/Vulcan/pull/162)
- Don't trust client ids [`#161`](https://github.com/VulcanJS/Vulcan/pull/161)
- Fix ability to delete posts [`#160`](https://github.com/VulcanJS/Vulcan/pull/160)
- Prevent weird deploy problem on some versions of node [`#155`](https://github.com/VulcanJS/Vulcan/pull/155)
- Check that people setting post.userId are actually admins before we set it [`#153`](https://github.com/VulcanJS/Vulcan/pull/153)
- Move analyticsRequest() [`#148`](https://github.com/VulcanJS/Vulcan/pull/148)
- delete post comments too when a post is deleted [`#136`](https://github.com/VulcanJS/Vulcan/pull/136)
- Added Error for Trying to Post Empty Comments [`#135`](https://github.com/VulcanJS/Vulcan/pull/135)
- Set document title to post headline [`#125`](https://github.com/VulcanJS/Vulcan/pull/125)
- Update epic-light.css to set a minimum height for the 'Message' text ent... [`#133`](https://github.com/VulcanJS/Vulcan/pull/133)
- Make upvote cleanup prior downvote and vice-versa [`#127`](https://github.com/VulcanJS/Vulcan/pull/127)
- Duplicate Template.post_submit.rendered assignment in post_submit.js [`#119`](https://github.com/VulcanJS/Vulcan/pull/119)
- update google+ share button style [`#123`](https://github.com/VulcanJS/Vulcan/pull/123)
- Added a template helper to address '1 points' [`#115`](https://github.com/VulcanJS/Vulcan/pull/115)
- Fix for nothing happening when editing another user [`#109`](https://github.com/VulcanJS/Vulcan/pull/109)
- 1 comments -> 1 comment [`#104`](https://github.com/VulcanJS/Vulcan/pull/104)
- fix avatar in user_profile page for oauth-login [`#98`](https://github.com/VulcanJS/Vulcan/pull/98)
- Adjust Logout button size for consistency [`#96`](https://github.com/VulcanJS/Vulcan/pull/96)
- Updating deny.update() and deny.remove() to v0.5.8 [`#95`](https://github.com/VulcanJS/Vulcan/pull/95)
- Add ability to pass 'limit' query string parameter [`#90`](https://github.com/VulcanJS/Vulcan/pull/90)
- Finally extracted database-forms into its own package [`#77`](https://github.com/VulcanJS/Vulcan/pull/77)
- Loading class is not removed if no url is provided on the Post page [`#66`](https://github.com/VulcanJS/Vulcan/pull/66)
- Commenting was broken [`#62`](https://github.com/VulcanJS/Vulcan/pull/62)
- Use generic getAvatarUrl instead of Gravatar. [`#54`](https://github.com/VulcanJS/Vulcan/pull/54)
- Add post link to mobile nav [`#47`](https://github.com/VulcanJS/Vulcan/pull/47)
- Update README.md [`#46`](https://github.com/VulcanJS/Vulcan/pull/46)
- Towards generic forms [`#31`](https://github.com/VulcanJS/Vulcan/pull/31)
- Various [`#9`](https://github.com/VulcanJS/Vulcan/pull/9)
- User karma [`#7`](https://github.com/VulcanJS/Vulcan/pull/7)
- Use this.userId() in publish rather than an arg. [`#6`](https://github.com/VulcanJS/Vulcan/pull/6)
- Meteor includes json2.js [`#5`](https://github.com/VulcanJS/Vulcan/pull/5)
- User profile pages [`#4`](https://github.com/VulcanJS/Vulcan/pull/4)
- Added rendered hooks (fix #330) [`#330`](https://github.com/VulcanJS/Vulcan/issues/330)
- fix #347 [`#347`](https://github.com/VulcanJS/Vulcan/issues/347)
- fix #320 [`#320`](https://github.com/VulcanJS/Vulcan/issues/320)
- fix #333 [`#333`](https://github.com/VulcanJS/Vulcan/issues/333)
- fix #331 [`#331`](https://github.com/VulcanJS/Vulcan/issues/331)
- fix #329 [`#329`](https://github.com/VulcanJS/Vulcan/issues/329)
- fix #327 [`#327`](https://github.com/VulcanJS/Vulcan/issues/327)
- smart.lock: versions of iron-router and fast-render were updated, fixes #259 (compatibility with Meteor 0.7.1) [`#259`](https://github.com/VulcanJS/Vulcan/issues/259)
- Merge pull request #256 from yeputons/issue-255 [`#255`](https://github.com/VulcanJS/Vulcan/issues/255)
- Fixes #255: now canView do not wait for 'settingsLoaded' which was removed in e622c112 [`#255`](https://github.com/VulcanJS/Vulcan/issues/255)
- fix #179 [`#179`](https://github.com/VulcanJS/Vulcan/issues/179)
- publish mailchimp data for admins (fix #176) [`#176`](https://github.com/VulcanJS/Vulcan/issues/176)
- Fix #159 [`#159`](https://github.com/VulcanJS/Vulcan/issues/159)
- Fixed #93 [`#93`](https://github.com/VulcanJS/Vulcan/issues/93)
- Separating themes; adding accounts-entry [`4ad0201`](https://github.com/VulcanJS/Vulcan/commit/4ad020174c76c7b0699ee1fb0dfb06dc3204d669)
- update epiceditor to latest and unminified version [`6de9c35`](https://github.com/VulcanJS/Vulcan/commit/6de9c35cb41168b4a438a50669b9ec02386548e7)
- add embedly and newsletter packages [`733f367`](https://github.com/VulcanJS/Vulcan/commit/733f367f37e81cca54ebe7d3d9a54e6e8755cd9c)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at hello@vulcanjs.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: CONTRIBUTING.md
================================================
## Etiquette
- **All PRs should be made to the `devel` branch, not `master`.**
- Come check-in in the [Vulcan Slack channel](http://slack.telescopeapp.org/). 👋
- Completely new features should be shipped as external packages with their own repos (see [3rd party packages](https://docs.vulcanjs.org/plugins.html)). Don't hesitate to come by the [Slack channel](http://slack.telescopeapp.org/) to speak about it.
- ~~We don't have test at the moment, and Travis integration is broken. If you know how to fix it, you are welcome (see [#1253](https://github.com/TelescopeJS/Telescope/issues/1253)!~~ We are making progress on testing! Running `npm run test` will trigger client side and server side unit tests. Running `npm run test-client` or `npm run test-server` will run tests for a specific environnement. Using the `MOCHA_GREP` environment variable, you can run only tests matching some regular expression (eg `MOCHA_GREP="vulcan:core" npm run test-server`). Pull requests coming with automated tests will be greatly appreciated!
- Be nice 😉
## Branches
- `master` branch matches the latest version published on Atmosphere
- `devel` branch is the bleeding edge
- 1.X branch tracks a previous version of Vulcan (eg 1.13 may correspond to 1.13.2, 1.11 to 1.11.6, etc.). Those branches are only meant for publishing critical security fixes.
================================================
FILE: Dockerfile
================================================
FROM abernix/meteord:onbuild
================================================
FILE: MIGRATING.md
================================================
# Migrations
Doc to help updating downstream applications. Breaking changes and packages updates are listed here.
Please open an issue or a pull request if you feel this doc is incomplete.
## Updating Meteor
- Check that your version of `boilerplate-generator` is right. If not, overwrite it manually in `packages/_boilerplate/package.js`. This package is a hack to support SSR, so it's ok to manually change the version without actually updating
- Check that you don't have hard dependency on core packages, like `accounts-password@1.16.0`. They could conflict with Meteor core package version.
- Run `meteor update`. Note: when running the update on the Starter, remember to setup `METEOR_PACKAGES_DIRS=...` correctly, so it points to your local `devel` install of Vulcan.
## From 1.16 to 1.16.1
- `meteor update`
- `meteor npm i --save string-similarity @apollo/client`
- Migrate your code to Apollo client v3: https://www.apollographql.com/docs/react/migrating/apollo-client-3-migration/
- Migrate the names of base form controls in `vulcan:ui-material` if import them into your code. See `Vulcan/packages/vulcan-ui-material/history.md`.
## From 1.15 to 1.16
- `meteor npm i --save node-cache`
- Read Vulcan blog article related to 1.16
- Schemas without "_id" or "userId" won't have those fields in the default form fragment anymore (extremely edge case)
## From 1.14.1 to 1.15
- Update Meteor with `meteor update`
- /!\ Carefully update NPM packages versions based on the current package.json, otherwise install will fail
- `single2` hoc and hooks will return the whole `error` object, not just `error.graphQLErrors[0]`. This will help catching network errors too.
- Install `npm i --save body-parser-graphql`
- CORS are now disabled as a default in production. Use `apolloServer.corsWhitelist` to whitelist some domains, or `apolloServer.corsEnableAll` to allow all
connections.
## From 1.13.5 to 1.14
- See migration article from [Vulcan Blog](https://blog.vulcanjs.org/)
- `serverTimezoneOffset` object is no longer injected in the head during SSR. Use `import { InjectData} from 'meteor/vulcan:lib; ...; await InjectData.getData("utcOffset");` instead. The value is the reverse from `getTimezoneOffset`, see [Moment doc](https://momentjscom.readthedocs.io/en/latest/moment/03-manipulating/09-utc-offset/)
- `validateModifier` takes `data` as the second param (`validateModifier(modifier, data, document)` instead of `validateModifier(modifier, document)`)
### Material UI
- Update to v4 `meteor npm i --save-exact @material-ui/core@4.5.1`
- `import MuiThemeProvider from @material-ui/core/styles/MuiThemeProvider"` becomes `import { MuiThemeProvider } from "@material-ui/core/styles"`
- More broadly follow https://material-ui.com/guides/migration-v3/ to update Material UI to v4
- Follow the composition doc to handle `forwardRef` warnings: https://material-ui.com/guides/composition/#caveat-with-refs
## From 1.13.3 to 1.13.5
- `npm install apollo-utilities` (to run tests)
- Replace `Users.getViewableFields` by `Users.getReadableProjection`
## From 1.13.2 to 1.13.3
- Update React to a version over 16.8 (and under 17 which will bring breaking changes) to access hooks
- Update React Apollo and Apollo Client to access GraphQL hooks: `npm i --save-exact apollo-client@2.6.3; npm i --save react-apollo@3.0.0`
- `compose` is not exported by `react-apollo`, use `recompose` instead.
- More broadly see [`react-apollo` changelog](https://github.com/apollographql/react-apollo/blob/master/Changelog.md) for breaking changes
- `editMutation`, `newMutation` etc. are deprecated, use the new `updateFoo`, `createFoo` syntax. An error message is thrown where deprecated mutations are used to help debugging
- When using Vulcan data oriented hooks (`useMulti`, `useCreate`...), use the new `queryOptions` and `mutationOptions` option to pass options to the underlying `useQuery` and `useMutation` hooks.
Example call: `useMulti({collection: Foos, queryOptions: { errorPolicy: "all" } })`.
- No need to call `registerComponent` anymore to use Vulcan HOC. You can call them directly even if the underlying fragment is not yet registered.
- Watched Mutations has been removed because it didn't work anymore, in favour to better Apollo's `update` option for mutations.
================================================
FILE: README.md
================================================
<img src="https://d3vv6lp55qjaqc.cloudfront.net/items/2B3C1z2V2y421p2I0P42/vulcan-logo-noborder.png" width="200">
# The repository is now archived.
Time has passed and the main team members have moved on to other projects. We're archiving the repository to make it clear that it will not receive further updates or fixes. You can find the evolution of Vulcan in Sacha and Eric's project [Devographics](https://github.com/Devographics/Monorepo)
[](#backers)
[](#sponsors)
# Vulcan
Vulcan is a React+GraphQL framework for Meteor.
[You might want to discover Vulcan Next](https://github.com/VulcanJS/vulcan-next), a port of Vulcan toward Next.js.
### Install
- [Full video tutorial](https://www.youtube.com/watch?v=aCjR9UrNqVk)
Install the latest version of Node and NPM. We recommend the usage of [NVM](http://nvm.sh).
You can then install [Meteor](https://www.meteor.com/install), which is used as the Vulcan build tool.
Clone the [Vulcan Starter repo](https://github.com/VulcanJS/Vulcan-Starter) locally.
Rename your `sample_settings.json` file to `settings.json`, then:
```sh
meteor npm install
meteor npm start
```
And open `http://localhost:3000/` in your browser.
Find more info in the [documentation](http://docs.vulcanjs.org/#Install).
### Links
- [Vulcan Homepage](http://vulcanjs.org)
- [Documentation](http://docs.vulcanjs.org)
- [Old Telescope Homepage](http://www.telescopeapp.org)
### Other Versions
[See all releases](https://github.com/VulcanJS/Vulcan/releases).
To update an existing Vulcan app, [see migration doc](MIGRATING.md)) and [changelog](CHANGELOG.md).
You can find the older, non-Apollo version of Telescope Nova on the [nova-classic](https://github.com/VulcanJS/Vulcan/tree/nova-classic) branch.
You can find the even older, non-React version of Telescope on the [legacy](https://github.com/VulcanJS/Vulcan/tree/legacy) branch.
## Credits
### Contributors
This project exists thanks to all the people who contribute.
<a href="https://github.com/VulcanJS/Vulcan/graphs/contributors"><img src="https://opencollective.com/vulcan/contributors.svg?width=890&button=false" /></a>
### Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/vulcan#contribute)]
<a href="https://opencollective.com/vulcan#contributors" target="_blank"><img src="https://opencollective.com/vulcan/backers.svg?width=890"></a>
### Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/vulcan#contribute)]
<a href="https://opencollective.com/vulcan#contributors" target="_blank"><img src="https://opencollective.com/vulcan/sponsors.svg?width=890"></a>
================================================
FILE: RELEASE.md
================================================
# Release process
## Updating
We try to respect semantic versioning as much as possible. Going from 1.13.1 to 1.13.2 should cause almost no breaking changes, except for packages version update, small tweaks, etc. Going from 1.13 to 1.14 could cause multiple breaking changes. Going from 1.x to 2.x is a full rework.
Changes will be tracked in the changelog file.
### In Vulcan core repository
- If updating to a minor or major with non trivial breaking changes (1.13 to 1.14 for example), create a branch for the previous version based on master (1.13 in this example).
- Go to a `release/your-version` branch.
- Cleanup and reinstall everything
- Run unit tests, and apply relevant fixes
- Test that Storybook runs correctly
- Run tests, apply fixes if necessary
```sh
meteor reset && rm -Rf node_modules && meteor npm install
meteor npm run test
meteor npm run storybook
```
- Update packages versions in each package.
- Update package.json version.
- Update the CHANGELOG.md.
```sh
meteor npm run generate-changelog
```
- Merge release branch into `devel` (so that fixes from the release branch are shared) and then `master`.
- Go to `master` branch
- Create a tag for this version `git tag 1.x.x`.
- Push with `--tags` option: `git push && git push --tags`
- Deploy on Atmosphere
### In Vulcan-Starter
No need to maintain specific branches for versions, as the Starter is only meant to be used once for new projects initialization.
We only use `devel` and `master` branches.
- Go to `devel` branch.
- Update Vulcan packages versions in `.meteor/packages`.
- Check that the packages are working as expected, solve breaking changes.
- Check that `package.json` versions matches Vulcan's `package.json`.
- Cleanup and reinstall everything
- Run unit tests, and apply relevant fixes
- Test that Storybook runs correctly
```sh
meteor reset && rm -Rf node_modules && meteor npm install
METEOR_PACKAGE_DIRS="X/Vulcan/packages" meteor npm run test
METEOR_PACKAGE_DIRS="X/Vulcan/packages" meteor npm run storybook
```
- Test different example packages.
- Merge devel in to `master`.
- Update version `npm version patch` (for 1.16.1 > 1.16.2) or `npm version minor` for 1.16 > 1.17
- Push with `--tags`: `git push && git push --tags`.
### In the docs
- If updating to a minor or major with non trivial breaking changes (1.13 to 1.14 for example), create a branch for the previous version based on master (1.13 in this example).
- Do relevant updates on `devel` branch
- Merge into `master`
- Update the docs after packages are releved
================================================
FILE: jsconfig.json
================================================
{
"compilerOptions": {
"target": "ES6",
"baseUrl": ".",
"paths": {
"meteor/vulcan:styled-components": [
"packages/vulcan-styled-components/lib/server/main.js",
"packages/vulcan-styled-components/lib/client/main.js"
],
"meteor/vulcan:payments": [
"packages/vulcan-payments/lib/server/main.js",
"packages/vulcan-payments/lib/client/main.js"
],
"meteor/vulcan:events-intercom": [
"packages/vulcan-events-intercom/lib/client/main.js",
"packages/vulcan-events-intercom/lib/server/main.js"
],
"meteor/vulcan:embed": [
"packages/vulcan-embed/lib/client/main.js",
"packages/vulcan-embed/lib/server/main.js"
],
"meteor/boilerplate-generator": [
"packages/_boilerplate-generator/generator.js"
],
"meteor/vulcan:lib": [
"packages/vulcan-lib/lib/server/main.js",
"packages/vulcan-lib/lib/client/main.js"
],
"meteor/vulcan:forms": [
"packages/vulcan-forms/lib/client/main.js",
"packages/vulcan-forms/lib/server/main.js"
],
"meteor/vulcan:events": [
"packages/vulcan-events/lib/server/main.js",
"packages/vulcan-events/lib/client/main.js"
],
"meteor/vulcan:email": [
"packages/vulcan-email/lib/server.js",
"packages/vulcan-email/lib/client.js"
],
"meteor/meteortesting:mocha": [
"packages/meteor-mocha/client.js",
"packages/meteor-mocha/server.js"
],
"meteor/vulcan:admin": [
"packages/vulcan-admin/lib/server/main.js",
"packages/vulcan-admin/lib/client/main.js"
],
"meteor/vulcan:forms-tags": [
"packages/vulcan-forms-tags/lib/export.js"
],
"meteor/vulcan:ui-bootstrap": [
"packages/vulcan-ui-bootstrap/lib/server/main.js",
"packages/vulcan-ui-bootstrap/lib/client/main.js"
],
"meteor/vulcan:forms-upload": [
"packages/vulcan-forms-upload/lib/modules.js"
],
"meteor/vulcan:i18n": [
"packages/vulcan-i18n/lib/server/main.js",
"packages/vulcan-i18n/lib/client/main.js"
],
"meteor/vulcan:errors-sentry": [
"packages/vulcan-errors-sentry/lib/server/main.js",
"packages/vulcan-errors-sentry/lib/client/main.js"
],
"meteor/vulcan:errors": [
"packages/vulcan-errors/lib/server/main.js",
"packages/vulcan-errors/lib/client/main.js"
],
"meteor/vulcan:events-segment": [
"packages/vulcan-events-segment/lib/server/main.js",
"packages/vulcan-events-segment/lib/client/main.js"
],
"meteor/vulcan:ui-material": [
"packages/vulcan-ui-material/lib/client/main.js",
"packages/vulcan-ui-material/lib/server/main.js"
],
"meteor/vulcan:events-internal": [
"packages/vulcan-events-internal/lib/server/main.js",
"packages/vulcan-events-internal/lib/client/main.js"
],
"meteor/vulcan:events-ga": [
"packages/vulcan-events-ga/lib/server/main.js",
"packages/vulcan-events-ga/lib/client/main.js"
],
"meteor/vulcan:voting": [
"packages/vulcan-voting/lib/server/main.js",
"packages/vulcan-voting/lib/client/main.js"
],
"meteor/vulcan:newsletter": [
"packages/vulcan-newsletter/lib/server/main.js",
"packages/vulcan-newsletter/lib/client/main.js"
],
"meteor/vulcan:users": [
"packages/vulcan-users/lib/server/main.js",
"packages/vulcan-users/lib/client/main.js"
],
"meteor/vulcan:subscribe": [
"packages/vulcan-subscribe/lib/modules.js",
"packages/vulcan-subscribe/lib/modules.js"
],
"meteor/vulcan:core": [
"packages/vulcan-core/lib/server/main.js",
"packages/vulcan-core/lib/client/main.js"
],
"meteor/vulcan:test": [
"packages/vulcan-test/lib/server/main.js",
"packages/vulcan-test/lib/client/main.js"
],
"meteor/vulcan:redux": [
"packages/vulcan-redux/lib/server/main.js",
"packages/vulcan-redux/lib/client/main.js"
],
"meteor/vulcan:debug": [
"packages/vulcan-debug/lib/server/main.js",
"packages/vulcan-debug/lib/client/main.js"
],
"meteor/vulcan:cloudinary": [
"packages/vulcan-cloudinary/lib/client/main.js",
"packages/vulcan-cloudinary/lib/server/main.js"
],
"meteor/vulcan:accounts": [
"packages/vulcan-accounts/main_client.js",
"packages/vulcan-accounts/main_server.js"
]
}
},
"include": [
"packages/**/*"
],
"exclude": [
"packages/_buffer",
"packages/_boilerplate-generator"
],
"typeAcquisition": {
"enable": true
}
}
================================================
FILE: license.md
================================================
The MIT License (MIT)
Copyright (c) 2017 Telescope Nova
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: package.json
================================================
{
"name": "vulcan-meteor",
"version": "1.16.9",
"engines": {
"npm": "^3.0"
},
"scripts": {
"start": "meteor --settings settings.json",
"visualizer": "meteor --extra-packages bundle-visualizer --production --settings settings.json",
"lint": "eslint --cache --ext .jsx,js packages",
"lintfix": "eslint --cache --fix --ext .jsx,js packages",
"test-ci": "npm run test-server -- --once",
"test-unit": "meteor test-packages ./packages/* --port 60859 --driver-package meteortesting:mocha",
"open-test-client": "xdg-open http://localhost:60859",
"test-client": "TEST_SERVER=0 meteor test-packages ./packages/* --port 60859 --driver-package meteortesting:mocha",
"test-server": "TEST_CLIENT=0 meteor test-packages ./packages/* --port 60859 --driver-package meteortesting:mocha",
"test": "npm run test-unit",
"prettier": "node ./.vulcan/prettier/index.js write-changed",
"prettier-all": "node ./.vulcan/prettier/index.js write",
"update-package-json": "node ./.vulcan/update_package.js",
"storybook": "VULCAN_DIR=\"..\" start-storybook -p 6006",
"storybook-material": "STORYBOOK_UI=material VULCAN_DIR=\"..\" start-storybook -p 6006",
"build-storybook": "STORYBOOK_UI=material build-storybook -o docs/storybook-material && STORYBOOK_UI=bootstrap build-storybook -o docs/storybook-bootstrap",
"generate-changelog": "auto-changelog -u"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
},
"dependencies": {
"@apollo/client": "^3.2.5",
"@babel/runtime": "^7.13.9",
"analytics-node": "^2.1.1",
"apollo-cache": "^1.3.2",
"apollo-cache-inmemory": "1.3.12",
"apollo-client": "^2.6.4",
"apollo-errors": "^1.9.0",
"apollo-link": "^1.2.12",
"apollo-link-error": "^1.1.11",
"apollo-link-http": "^1.5.15",
"apollo-link-schema": "^1.2.3",
"apollo-link-state": "^0.4.2",
"apollo-server": "2.8.2",
"apollo-server-express": "2.8.2",
"apollo-utilities": "^1.3.2",
"bcrypt": "^5.0.0",
"body-parser": "^1.18.3",
"body-parser-graphql": "^1.1.0",
"chalk": "2.2.0",
"classnames": "^2.2.3",
"combined-stream2": "^1.1.2",
"compression": "^1.7.2",
"cookie-parser": "^1.4.3",
"cors": "^2.8.5",
"cross-fetch": "^0.0.8",
"crypto-js": "^3.1.9-1",
"crypto-random-string": "^3.3.0",
"dataloader": "^1.4.0",
"deepmerge": "^1.2.0",
"dot-object": "^1.7.0",
"enzyme-adapter-react-16": "^1.14.0",
"escape-string-regexp": "^1.0.5",
"express": "^4.17.1",
"flat": "^4.0.0",
"graphql": "14.4.2",
"graphql-anywhere": "4.1.13",
"graphql-date": "^1.0.3",
"graphql-tag": "^2.9.2",
"graphql-tools": "^4.0.4",
"graphql-type-json": "^0.1.4",
"graphql-voyager": "^1.0.0-rc.26",
"handlebars": "^4.4.3",
"he": "^1.1.1",
"history": "^3.0.0",
"html-to-text": "^2.1.0",
"immutability-helper": "^2.7.0",
"import": "0.0.6",
"intl": "^1.2.4",
"intl-locales-supported": "1.4.6",
"juice": "^5.1.0",
"lodash": "^4.17.19",
"mailchimp": "^1.1.6",
"marked": "^0.7.0",
"meteor-node-stubs": "^0.4.1",
"mingo": "^2.2.0",
"moment": "^2.13.0",
"node-cache": "^5.1.2",
"pluralize": "7.0.0",
"prop-types": "^15.7.2",
"qs": "^6.6.0",
"react": "16.12.0",
"react-addons-pure-render-mixin": "^15.4.1",
"react-bootstrap": "^1.0.0-beta.5",
"react-bootstrap-datetimepicker": "0.0.22",
"react-bootstrap-typeahead": "^4.2.0",
"react-cookie": "^4.0.3",
"react-datetime": "^2.11.1",
"react-dom": "16.12.0",
"react-dropzone": "11.0.1",
"react-helmet": "^6.0.0",
"react-intl": "^2.1.3",
"react-loadable": "^4.0.3",
"react-markdown": "^3.1.5",
"react-no-ssr": "^1.1.0",
"react-overlays": "^1.0.0-beta.17",
"react-places-autocomplete": "^5.0.0",
"react-redux": "^5.0.6",
"react-router": "^5.0.1",
"react-router-bootstrap": "0.25.0",
"react-router-dom": "^5.0.1",
"react-router-scroll": "^0.4.4",
"react-select": "^1.2.1",
"react-stripe-checkout": "^2.4.0",
"recompose": "^0.26.0",
"redux": "^3.6.0",
"rss": "^1.2.1",
"sanitize-html": "^1.16.3",
"simpl-schema": "^1.4.2",
"speakingurl": "^9.0.0",
"string-similarity": "^4.0.2",
"stripe": "^4.23.1",
"tracker-component": "^1.3.14",
"underscore": "^1.8.3",
"universal-cookie-express": "^2.1.5",
"url": "^0.11.0"
},
"private": true,
"devDependencies": {
"@apollo/react-testing": "3.1.4",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8",
"@babel/plugin-proposal-optional-chaining": "^7.13.8",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "^4.0.0-alpha.57",
"@material-ui/styles": "4.10.0",
"@storybook/addon-actions": "5.0.8",
"@storybook/addon-knobs": "5.0.8",
"@storybook/addon-links": "5.0.1",
"@storybook/addons": "5.0.1",
"@storybook/react": "5.0.8",
"@storybook/theming": "5.0.8",
"@userfrosting/merge-package-dependencies": "^1.2.0",
"apollo-server-testing": "^2.10.1",
"auto-changelog": "^1.16.1",
"autoprefixer": "^6.3.6",
"autosize-input": "^1.0.2",
"autosuggest-highlight": "^3.1.1",
"babel-eslint": "^10.0.1",
"babel-runtime": "^6.26.0",
"babylon": "^6.18.0",
"chromedriver": "^2.46.0",
"colors": "^1.3.2",
"css-loader": "^2.1.1",
"diff": "^3.5.0",
"dompurify": "^2.2.6",
"enzyme": "^3.3.0",
"eslint": "^5.16.0",
"eslint-config-airbnb": "^17.1.0",
"eslint-config-meteor": "0.1.1",
"eslint-import-resolver-meteor": "^0.4.0",
"eslint-plugin-babel": "^5.3.0",
"eslint-plugin-import": "^2.16.00",
"eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-meteor": "^5.1.0",
"eslint-plugin-mocha": "^5.3.0",
"eslint-plugin-prettier": "^3.0.1",
"eslint-plugin-react": "^7.12.4",
"expect": "^24.7.1",
"glob": "^7.1.3",
"husky": "^1.2.0",
"jsdom": "^11.11.0",
"jsdom-global": "^3.0.2",
"mdi-material-ui": "^6.16.0",
"moment-timezone": "^0.5.25",
"node-sass": "^4.14.0",
"operation-name-mock-link": "0.0.4",
"prettier": "^1.15.2",
"react-autosuggest": "^9.4.3",
"react-isolated-scroll": "^0.1.1",
"react-jss": "^8.6.1",
"react-keyboard-event-handler": "1.5.4",
"sass-loader": "^7.1.0",
"scrap-meteor-loader": "0.0.1",
"selenium-webdriver": "^3.6.0",
"sinon": "^6.3.5",
"storybook-addon-intl": "^2.4.1",
"storybook-react-router": "^1.0.5",
"supertest": "^4.0.2",
"vulcan-loader": "0.0.1",
"waait": "^1.0.5",
"webpack": "^4.31.0"
},
"postcss": {
"plugins": {
"autoprefixer": {
"browsers": [
"last 2 versions"
]
}
}
}
}
================================================
FILE: packages/.gitignore
================================================
/bootstrap3-datepicker
/npm-container
================================================
FILE: packages/_boilerplate-generator/.gitignore
================================================
.build*
===================================
gitextract_4or8imox/
├── .babelrc
├── .circleci/
│ └── config.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .github/
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ └── stale.yml
├── .gitignore
├── .jshintrc
├── .meteor/
│ ├── .finished-upgraders
│ ├── .gitignore
│ ├── .id
│ ├── cordova-plugins
│ ├── packages
│ ├── platforms
│ └── release
├── .meteorignore
├── .nvmrc
├── .prettierrc.js
├── .storybook/
│ ├── addons.js
│ ├── config.js
│ ├── decorators/
│ │ ├── BootstrapDecorator.js
│ │ └── MaterialUIDecorator.js
│ ├── helpers.js
│ ├── loaders/
│ │ └── starter-example-loader.js
│ ├── mocks/
│ │ ├── Meteor.js
│ │ ├── Mongo.js
│ │ ├── Vulcan.js
│ │ ├── meteor-apollo.js
│ │ ├── meteor-server-render.js
│ │ └── vulcan-email.js
│ ├── startup.js
│ └── webpack.config.js
├── .vscode/
│ └── launch.json
├── .vulcan/
│ ├── .gitignore
│ ├── prestart_vulcan.js
│ ├── prettier/
│ │ └── index.js
│ ├── shared/
│ │ ├── listChangedFiles.js
│ │ └── pathsByLanguageVersion.js
│ └── update_package.js
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── MIGRATING.md
├── README.md
├── RELEASE.md
├── jsconfig.json
├── license.md
├── package.json
├── packages/
│ ├── .gitignore
│ ├── _boilerplate-generator/
│ │ ├── .gitignore
│ │ ├── .npm/
│ │ │ └── package/
│ │ │ ├── .gitignore
│ │ │ ├── README
│ │ │ └── npm-shrinkwrap.json
│ │ ├── README.md
│ │ ├── generator.js
│ │ ├── package.js
│ │ ├── template-web.browser.js
│ │ ├── template-web.cordova.js
│ │ └── template.js
│ ├── _buffer/
│ │ ├── buffer.js
│ │ └── package.js
│ ├── meteor-mocha/
│ │ ├── browser-shim.js
│ │ ├── client.js
│ │ ├── package.js
│ │ ├── package.json
│ │ ├── prepForHTMLReporter.js
│ │ ├── runtimeArgs.js
│ │ ├── server.handleCoverage.js
│ │ └── server.js
│ ├── vulcan-accounts/
│ │ ├── README.md
│ │ ├── imports/
│ │ │ ├── accounts_ui.js
│ │ │ ├── api/
│ │ │ │ └── server/
│ │ │ │ └── servicesListPublication.js
│ │ │ ├── components.js
│ │ │ ├── emailTemplates.js
│ │ │ ├── helpers.js
│ │ │ ├── login_session.js
│ │ │ ├── oauth_config.js
│ │ │ ├── routes.js
│ │ │ ├── ui/
│ │ │ │ └── components/
│ │ │ │ ├── Button.jsx
│ │ │ │ ├── Buttons.jsx
│ │ │ │ ├── EnrollAccount.jsx
│ │ │ │ ├── Field.jsx
│ │ │ │ ├── Fields.jsx
│ │ │ │ ├── Form.jsx
│ │ │ │ ├── FormMessage.jsx
│ │ │ │ ├── FormMessages.jsx
│ │ │ │ ├── LoginForm.jsx
│ │ │ │ ├── LoginFormInner.jsx
│ │ │ │ ├── PasswordOrService.jsx
│ │ │ │ ├── ResetPassword.jsx
│ │ │ │ ├── SocialButtons.jsx
│ │ │ │ ├── StateSwitcher.jsx
│ │ │ │ ├── TrackerComponent.jsx
│ │ │ │ └── VerifyEmail.jsx
│ │ │ └── useMeteorLogout.js
│ │ ├── main_client.js
│ │ ├── main_server.js
│ │ └── package.js
│ ├── vulcan-admin/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── AdminHome.jsx
│ │ │ │ ├── AdminLayout.jsx
│ │ │ │ └── users/
│ │ │ │ └── columns/
│ │ │ │ ├── AdminUsersActions.jsx
│ │ │ │ ├── AdminUsersCreated.jsx
│ │ │ │ ├── AdminUsersEmail.jsx
│ │ │ │ └── AdminUsersName.jsx
│ │ │ ├── modules/
│ │ │ │ ├── columns.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ └── routes.js
│ │ │ ├── server/
│ │ │ │ └── main.js
│ │ │ └── stylesheets/
│ │ │ └── style.scss
│ │ └── package.js
│ ├── vulcan-backoffice/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── BackofficeIndex.jsx
│ │ │ │ ├── BackofficeLayout.jsx
│ │ │ │ ├── CollectionItem.jsx
│ │ │ │ └── CollectionList.jsx
│ │ │ ├── hocs/
│ │ │ │ ├── withDocumentId.js
│ │ │ │ └── withRouteParam.js
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── createCollectionComponents/
│ │ │ │ │ ├── createCollectionComponents.js
│ │ │ │ │ ├── createItemComponent.js
│ │ │ │ │ ├── createListComponent.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── index.js
│ │ │ │ ├── namingHelpers.js
│ │ │ │ ├── options.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── setupBackoffice.js
│ │ │ │ ├── setupCollectionMenuItems.js
│ │ │ │ ├── setupCollectionRoutes.js
│ │ │ │ └── startup.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ ├── package.js
│ │ ├── package.json
│ │ └── test/
│ │ ├── index.js
│ │ ├── namingHelpers.test.js
│ │ ├── options.js
│ │ └── routes.test.js
│ ├── vulcan-cloudinary/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── make_cloudinary.js
│ │ │ ├── modules/
│ │ │ │ ├── custom_fields.js
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── cloudinary.js
│ │ │ ├── main.js
│ │ │ └── make_cloudinary.js
│ │ └── package.js
│ ├── vulcan-core/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── components/
│ │ │ │ │ └── AppGenerator.jsx
│ │ │ │ ├── main.js
│ │ │ │ └── start.jsx
│ │ │ ├── modules/
│ │ │ │ ├── callbacks.js
│ │ │ │ ├── components/
│ │ │ │ │ ├── AccessControl.jsx
│ │ │ │ │ ├── App.jsx
│ │ │ │ │ ├── Avatar.jsx
│ │ │ │ │ ├── Card/
│ │ │ │ │ │ ├── Card.jsx
│ │ │ │ │ │ ├── CardItemArray.jsx
│ │ │ │ │ │ ├── CardItemDate.jsx
│ │ │ │ │ │ ├── CardItemDefault.jsx
│ │ │ │ │ │ ├── CardItemHTML.jsx
│ │ │ │ │ │ ├── CardItemImage.jsx
│ │ │ │ │ │ ├── CardItemNumber.jsx
│ │ │ │ │ │ ├── CardItemObject.jsx
│ │ │ │ │ │ ├── CardItemRelationHasMany.jsx
│ │ │ │ │ │ ├── CardItemRelationHasOne.jsx
│ │ │ │ │ │ ├── CardItemRelationItem.jsx
│ │ │ │ │ │ ├── CardItemString.jsx
│ │ │ │ │ │ ├── CardItemSwitcher.jsx
│ │ │ │ │ │ ├── CardItemURL.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── Datatable/
│ │ │ │ │ │ ├── Datatable.jsx
│ │ │ │ │ │ ├── DatatableCell.jsx
│ │ │ │ │ │ ├── DatatableContents.jsx
│ │ │ │ │ │ ├── DatatableFilter.jsx
│ │ │ │ │ │ ├── DatatableHeader.jsx
│ │ │ │ │ │ ├── DatatableRow.jsx
│ │ │ │ │ │ ├── DatatableSelect.jsx
│ │ │ │ │ │ ├── DatatableSorter.jsx
│ │ │ │ │ │ ├── DatatableSubmitSelected.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── DeleteButton.jsx
│ │ │ │ │ ├── Dummy.jsx
│ │ │ │ │ ├── DynamicLoading.jsx
│ │ │ │ │ ├── EditButton.jsx
│ │ │ │ │ ├── Error404.jsx
│ │ │ │ │ ├── Flash.jsx
│ │ │ │ │ ├── FlashMessages.jsx
│ │ │ │ │ ├── HeadTags.jsx
│ │ │ │ │ ├── HelloWorld.jsx
│ │ │ │ │ ├── Icon.jsx
│ │ │ │ │ ├── Layout.jsx
│ │ │ │ │ ├── Loading.jsx
│ │ │ │ │ ├── LoadingButton.jsx
│ │ │ │ │ ├── MutationButton.jsx
│ │ │ │ │ ├── NewButton.jsx
│ │ │ │ │ ├── PaginatedList/
│ │ │ │ │ │ ├── PaginatedList.jsx
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── RouterHook.jsx
│ │ │ │ │ ├── ScrollToTop.jsx
│ │ │ │ │ ├── ShowIf.jsx
│ │ │ │ │ ├── VerticalMenuLayout/
│ │ │ │ │ │ ├── MenuLayout.jsx
│ │ │ │ │ │ └── VerticalMenuLayout.jsx
│ │ │ │ │ └── Welcome.jsx
│ │ │ │ ├── components.js
│ │ │ │ ├── containers/
│ │ │ │ │ ├── cacheUpdate.js
│ │ │ │ │ ├── create.js
│ │ │ │ │ ├── create2.js
│ │ │ │ │ ├── currentUser.js
│ │ │ │ │ ├── delete.js
│ │ │ │ │ ├── delete2.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── localeData.js
│ │ │ │ │ ├── multi.js
│ │ │ │ │ ├── multi2.js
│ │ │ │ │ ├── registeredMutation.js
│ │ │ │ │ ├── single.js
│ │ │ │ │ ├── single2.js
│ │ │ │ │ ├── siteData.js
│ │ │ │ │ ├── update.js
│ │ │ │ │ ├── update2.js
│ │ │ │ │ ├── upsert.js
│ │ │ │ │ ├── upsert2.js
│ │ │ │ │ ├── variables.js
│ │ │ │ │ ├── withAccess.js
│ │ │ │ │ ├── withComponents.js
│ │ │ │ │ ├── withMessages-state-link.js
│ │ │ │ │ └── withMessages.js
│ │ │ │ ├── decorators/
│ │ │ │ │ ├── autocomplete.js
│ │ │ │ │ ├── checkboxgroup.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── likert.js
│ │ │ │ │ └── radiogroup.js
│ │ │ │ ├── index.js
│ │ │ │ └── menu.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── start.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── index.js
│ │ │ └── mutations2.test.js
│ │ ├── components.test.js
│ │ ├── containers/
│ │ │ ├── mutations.test.js
│ │ │ └── queries.test.js
│ │ ├── containers2/
│ │ │ ├── mutations.test.js
│ │ │ └── queries.test.js
│ │ ├── index.js
│ │ ├── menu.test.js
│ │ ├── server/
│ │ │ └── index.js
│ │ └── withComponents.test.js
│ ├── vulcan-debug/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── Callbacks.jsx
│ │ │ │ ├── Components.jsx
│ │ │ │ ├── Dashboard.jsx
│ │ │ │ ├── Database.jsx
│ │ │ │ ├── DebugLayout.jsx
│ │ │ │ ├── Emails.jsx
│ │ │ │ ├── ErrorCatcherContents.jsx
│ │ │ │ ├── Groups.jsx
│ │ │ │ ├── I18n.jsx
│ │ │ │ ├── Routes.jsx
│ │ │ │ └── Settings.jsx
│ │ │ ├── modules/
│ │ │ │ ├── callbacks/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── fragments.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── components.js
│ │ │ │ ├── emails/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── index.js
│ │ │ │ ├── permissions.js
│ │ │ │ ├── routes.js
│ │ │ │ └── settings/
│ │ │ │ ├── collection.js
│ │ │ │ └── schema.js
│ │ │ ├── server/
│ │ │ │ ├── callbacks/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── resolvers.js
│ │ │ │ ├── database/
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── queries.js
│ │ │ │ ├── emails/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── resolvers.js
│ │ │ │ ├── main.js
│ │ │ │ └── settings/
│ │ │ │ ├── collection.js
│ │ │ │ ├── index.js
│ │ │ │ └── resolvers.js
│ │ │ └── stylesheets/
│ │ │ └── debug.scss
│ │ └── package.js
│ ├── vulcan-email/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── fragments.js
│ │ │ │ ├── index.js
│ │ │ │ └── namespace.js
│ │ │ └── server/
│ │ │ ├── email.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ ├── routes.js
│ │ │ └── templates/
│ │ │ ├── index.js
│ │ │ └── template_error.handlebars
│ │ └── package.js
│ ├── vulcan-embed/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ └── EmbedURL.jsx
│ │ │ ├── modules/
│ │ │ │ ├── embed.js
│ │ │ │ ├── i18n.js
│ │ │ │ └── index.js
│ │ │ ├── server/
│ │ │ │ ├── integrations/
│ │ │ │ │ ├── builtin.js
│ │ │ │ │ ├── embedapi.js
│ │ │ │ │ └── embedly.js
│ │ │ │ ├── main.js
│ │ │ │ ├── methods.js
│ │ │ │ └── mutations.js
│ │ │ └── stylesheets/
│ │ │ └── embedly.scss
│ │ └── package.js
│ ├── vulcan-errors/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── init.js
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── ErrorCatcher.jsx
│ │ │ │ └── ErrorsUserMonitor.jsx
│ │ │ ├── modules/
│ │ │ │ ├── errors.js
│ │ │ │ ├── extended-NOTUSED.js
│ │ │ │ ├── index.js
│ │ │ │ └── rethrown-NOTUSED.js
│ │ │ └── server/
│ │ │ ├── init.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-errors-sentry/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── sentry-client.js
│ │ │ ├── modules/
│ │ │ │ ├── index.js
│ │ │ │ ├── sentry.js
│ │ │ │ └── settings.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── sentry-server.js
│ │ └── package.js
│ ├── vulcan-events/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── events.js
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-ga/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── ga.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-intercom/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── intercom-client.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── intercom-server.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-internal/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── internal-client.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── collection.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── index.js
│ │ │ │ └── schema.js
│ │ │ └── server/
│ │ │ ├── internal-server.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-events-segment/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── segment-client.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── segment-server.js
│ │ └── package.js
│ ├── vulcan-forms/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── FieldErrors.jsx
│ │ │ │ ├── Form.jsx
│ │ │ │ ├── FormClear.jsx
│ │ │ │ ├── FormComponent.jsx
│ │ │ │ ├── FormComponentLoader.jsx
│ │ │ │ ├── FormElement.jsx
│ │ │ │ ├── FormError.jsx
│ │ │ │ ├── FormErrors.jsx
│ │ │ │ ├── FormGroup.jsx
│ │ │ │ ├── FormIntl.jsx
│ │ │ │ ├── FormLayout.jsx
│ │ │ │ ├── FormNestedArray.jsx
│ │ │ │ ├── FormNestedArrayLayout.jsx
│ │ │ │ ├── FormNestedDivider.jsx
│ │ │ │ ├── FormNestedItem.jsx
│ │ │ │ ├── FormNestedObject.jsx
│ │ │ │ ├── FormOptionLabel.jsx
│ │ │ │ ├── FormSubmit.jsx
│ │ │ │ ├── FormWrapper.jsx
│ │ │ │ ├── propTypes.js
│ │ │ │ └── withCollectionProps.js
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── formFragments.js
│ │ │ │ ├── index.js
│ │ │ │ ├── path_utils.js
│ │ │ │ ├── schema_utils.js
│ │ │ │ └── utils.js
│ │ │ └── server/
│ │ │ └── main.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── Form.test.js
│ │ ├── FormComponent.test.js
│ │ ├── FormNestedArray.test.js
│ │ ├── FormNestedObject.test.js
│ │ ├── formFragments.test.js
│ │ ├── index.js
│ │ ├── package.test.js
│ │ └── schema_utils.test.js
│ ├── vulcan-forms-tags/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── components/
│ │ │ │ └── Tags.jsx
│ │ │ └── export.js
│ │ └── package.js
│ ├── vulcan-forms-upload/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── Upload.jsx
│ │ │ ├── Upload.scss
│ │ │ ├── i18n.js
│ │ │ └── modules.js
│ │ └── package.js
│ ├── vulcan-i18n/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── context.js
│ │ │ │ ├── index.js
│ │ │ │ ├── message.js
│ │ │ │ ├── provider.js
│ │ │ │ ├── shape.js
│ │ │ │ └── useIntl.js
│ │ │ └── server/
│ │ │ ├── graphql.js
│ │ │ └── main.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── index.js
│ │ └── provider.test.js
│ ├── vulcan-i18n-en-us/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── en_US.js
│ │ └── package.js
│ ├── vulcan-i18n-es-es/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── es_ES.js
│ │ └── package.js
│ ├── vulcan-i18n-fa-ir/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── fa_IR.js
│ │ └── package.js
│ ├── vulcan-i18n-fr-fr/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ └── fr_FR.js
│ │ └── package.js
│ ├── vulcan-lib/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── apollo-client/
│ │ │ │ │ ├── apolloClient.js
│ │ │ │ │ ├── cache.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── links/
│ │ │ │ │ ├── error.js
│ │ │ │ │ ├── http.js
│ │ │ │ │ ├── meteor.js
│ │ │ │ │ └── registerLinks.js
│ │ │ │ ├── auth.js
│ │ │ │ ├── connectors.js
│ │ │ │ ├── errors.js
│ │ │ │ ├── inject_data.js
│ │ │ │ ├── main.js
│ │ │ │ └── mock.js
│ │ │ ├── modules/
│ │ │ │ ├── admin.js
│ │ │ │ ├── apollo-common/
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── links/
│ │ │ │ │ │ └── state.js
│ │ │ │ │ └── settings.js
│ │ │ │ ├── callbacks.js
│ │ │ │ ├── collections.js
│ │ │ │ ├── components.js
│ │ │ │ ├── compose.js
│ │ │ │ ├── config.js
│ │ │ │ ├── debug.js
│ │ │ │ ├── deep.js
│ │ │ │ ├── deep_extend.js
│ │ │ │ ├── dynamic_loader.js
│ │ │ │ ├── errors.js
│ │ │ │ ├── findbyids.js
│ │ │ │ ├── fragment_matcher.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── graphql/
│ │ │ │ │ ├── defaultFragment.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── graphql_templates/
│ │ │ │ │ ├── filtering.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── mutations.js
│ │ │ │ │ ├── other.js
│ │ │ │ │ ├── queries.js
│ │ │ │ │ └── types.js
│ │ │ │ ├── handleOptions.js
│ │ │ │ ├── headtags.js
│ │ │ │ ├── icons.js
│ │ │ │ ├── index.js
│ │ │ │ ├── intl.js
│ │ │ │ ├── intl_polyfill.js
│ │ │ │ ├── mongoParams.js
│ │ │ │ ├── mongo_redux.js
│ │ │ │ ├── random_id.js
│ │ │ │ ├── reactive-state.js
│ │ │ │ ├── routes.js
│ │ │ │ ├── routes.ts
│ │ │ │ ├── schema_utils.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── simpleSchema_utils.js
│ │ │ │ ├── startup.js
│ │ │ │ ├── ui_utils.js
│ │ │ │ ├── utils.js
│ │ │ │ └── validation.js
│ │ │ └── server/
│ │ │ ├── accounts_helpers.js
│ │ │ ├── apollo-server/
│ │ │ │ ├── apollo_server.js
│ │ │ │ ├── context.js
│ │ │ │ ├── engine.js
│ │ │ │ ├── graphiql.js
│ │ │ │ ├── index.js
│ │ │ │ ├── initGraphQL.js
│ │ │ │ ├── playground.js
│ │ │ │ ├── settings.js
│ │ │ │ ├── startup.js
│ │ │ │ └── voyager.js
│ │ │ ├── apollo-ssr/
│ │ │ │ ├── apolloClient.js
│ │ │ │ ├── components/
│ │ │ │ │ ├── ApolloState.jsx
│ │ │ │ │ ├── AppGenerator.jsx
│ │ │ │ │ └── Head.jsx
│ │ │ │ ├── enableSSR.js
│ │ │ │ ├── index.js
│ │ │ │ ├── injectDefaultData.js
│ │ │ │ ├── inject_data.js
│ │ │ │ └── renderPage.js
│ │ │ ├── caching.js
│ │ │ ├── connectors/
│ │ │ │ └── mongo.js
│ │ │ ├── connectors.js
│ │ │ ├── debug.js
│ │ │ ├── default_mutations.js
│ │ │ ├── default_mutations2.js
│ │ │ ├── default_resolvers.js
│ │ │ ├── default_resolvers2.js
│ │ │ ├── errors.js
│ │ │ ├── graphql/
│ │ │ │ ├── collection.js
│ │ │ │ ├── graphql.js
│ │ │ │ ├── index.js
│ │ │ │ ├── relations.js
│ │ │ │ ├── resolvers.js
│ │ │ │ ├── schemaFields.js
│ │ │ │ └── typedefs.js
│ │ │ ├── intl.js
│ │ │ ├── intl_polyfill.js
│ │ │ ├── main.js
│ │ │ ├── meteor_patch.js
│ │ │ ├── mutators.js
│ │ │ ├── query.js
│ │ │ ├── site.js
│ │ │ ├── source_version.js
│ │ │ └── utils.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── apolloClient.test.js
│ │ │ └── index.js
│ │ ├── components.test.js
│ │ ├── documentValidation.test.js
│ │ ├── handleOptions.test.js
│ │ ├── index.js
│ │ ├── intl.test.js
│ │ ├── mongoParams.test.js
│ │ ├── reactive-state.test.js
│ │ ├── routes.test.js
│ │ ├── schema_utils.test.js
│ │ ├── server/
│ │ │ ├── apollo-server.test.js
│ │ │ ├── apollo-ssr.test.js
│ │ │ ├── fixtures/
│ │ │ │ └── minimalSchema.js
│ │ │ ├── fragments.test.js
│ │ │ ├── graphql.test.js
│ │ │ ├── index.js
│ │ │ ├── mutations.test.js
│ │ │ ├── mutators.test.js
│ │ │ └── resolvers.test.js
│ │ └── utils.test.js
│ ├── vulcan-newsletter/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ └── NewsletterSubscribe.jsx
│ │ │ ├── modules/
│ │ │ │ ├── collection.js
│ │ │ │ ├── custom_fields.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ └── schema.js
│ │ │ └── server/
│ │ │ ├── callbacks.js
│ │ │ ├── cron.js
│ │ │ ├── integrations/
│ │ │ │ ├── emailoctopus.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mailchimp.js
│ │ │ │ ├── sample.js
│ │ │ │ └── sendy.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ └── newsletters.js
│ │ ├── package.js
│ │ └── scss.json
│ ├── vulcan-payments/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── ChargesDashboard.jsx
│ │ │ │ └── Checkout.jsx
│ │ │ ├── containers/
│ │ │ │ └── withPaymentAction.js
│ │ │ ├── modules/
│ │ │ │ ├── charges/
│ │ │ │ │ ├── collection.js
│ │ │ │ │ └── schema.js
│ │ │ │ ├── components.js
│ │ │ │ ├── custom_fields.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── i18n.js
│ │ │ │ ├── index.js
│ │ │ │ ├── products.js
│ │ │ │ └── routes.js
│ │ │ ├── server/
│ │ │ │ ├── integrations/
│ │ │ │ │ └── stripe.js
│ │ │ │ ├── main.js
│ │ │ │ └── mutations.js
│ │ │ └── stylesheets/
│ │ │ └── style.scss
│ │ └── package.js
│ ├── vulcan-redux/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ ├── reduxInitialState.js
│ │ │ │ └── setupRedux.js
│ │ │ ├── modules/
│ │ │ │ ├── index.js
│ │ │ │ └── redux.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ ├── reduxInitialState.js
│ │ │ └── setupRedux.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── client/
│ │ │ ├── index.js
│ │ │ └── initialState.test.js
│ │ └── server/
│ │ ├── index.js
│ │ ├── initialState.test.js
│ │ └── initialStateWithValue.test.js
│ ├── vulcan-scss/
│ │ ├── .github/
│ │ │ └── workflows/
│ │ │ └── comment-issue.yml
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── .versions
│ │ ├── ISSUE_TEMPLATE.md
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── package.js
│ │ ├── plugin/
│ │ │ └── compile-scss.js
│ │ ├── scss-config.json
│ │ ├── test/
│ │ │ ├── include-paths/
│ │ │ │ ├── include-paths.scss
│ │ │ │ └── modules/
│ │ │ │ └── module/
│ │ │ │ └── _module.scss
│ │ │ └── scss/
│ │ │ ├── _emptyimport.scss
│ │ │ ├── _not-included.scss
│ │ │ ├── _top.scss
│ │ │ ├── _top3.scss
│ │ │ ├── dir/
│ │ │ │ ├── _in-dir.scss
│ │ │ │ ├── _in-dir2.scss
│ │ │ │ ├── root.scss
│ │ │ │ └── subdir/
│ │ │ │ └── _in-subdir.scss
│ │ │ ├── empty.scss
│ │ │ └── top2.scss
│ │ └── tests.js
│ ├── vulcan-styled-components/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ └── index.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── setupStyledComponents.js
│ │ └── package.js
│ ├── vulcan-subscribe/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── callbacks.js
│ │ │ ├── components/
│ │ │ │ └── SubscribeTo.jsx
│ │ │ ├── custom_fields.js
│ │ │ ├── fragments.js
│ │ │ ├── helpers.js
│ │ │ ├── modules.js
│ │ │ ├── mutations.js
│ │ │ ├── permissions.js
│ │ │ └── views.js
│ │ └── package.js
│ ├── vulcan-test/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── initComponentTest.js
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── createDummyCollection.js
│ │ │ │ ├── graphqlSchema.js
│ │ │ │ ├── index.js
│ │ │ │ └── initComponentTest.js
│ │ │ └── server/
│ │ │ ├── initComponentTest.js
│ │ │ ├── initGraphQLTest.js
│ │ │ ├── initServerTest.js
│ │ │ ├── isoCreateCollection.js
│ │ │ └── main.js
│ │ └── package.js
│ ├── vulcan-ui-bootstrap/
│ │ ├── README.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── components/
│ │ │ │ ├── backoffice/
│ │ │ │ │ ├── BackofficeNavbar.jsx
│ │ │ │ │ ├── BackofficePageLayout.jsx
│ │ │ │ │ └── BackofficeVerticalMenuLayout.jsx
│ │ │ │ ├── forms/
│ │ │ │ │ ├── Autocomplete.jsx
│ │ │ │ │ ├── AutocompleteMultiple.jsx
│ │ │ │ │ ├── Checkbox.jsx
│ │ │ │ │ ├── Checkboxgroup.jsx
│ │ │ │ │ ├── Date.jsx
│ │ │ │ │ ├── Date2.jsx
│ │ │ │ │ ├── Datetime.jsx
│ │ │ │ │ ├── Default.jsx
│ │ │ │ │ ├── Email.jsx
│ │ │ │ │ ├── FormComponentInner.jsx
│ │ │ │ │ ├── FormControl.jsx
│ │ │ │ │ ├── FormDescription.jsx
│ │ │ │ │ ├── FormElement.jsx
│ │ │ │ │ ├── FormGroupDefault.jsx
│ │ │ │ │ ├── FormInputLoading.jsx
│ │ │ │ │ ├── FormItem.jsx
│ │ │ │ │ ├── FormLabel.jsx
│ │ │ │ │ ├── Likert.jsx
│ │ │ │ │ ├── Number.jsx
│ │ │ │ │ ├── Password.jsx
│ │ │ │ │ ├── Radiogroup.jsx
│ │ │ │ │ ├── Select.jsx
│ │ │ │ │ ├── SelectMultiple.jsx
│ │ │ │ │ ├── StaticText.jsx
│ │ │ │ │ ├── Textarea.jsx
│ │ │ │ │ ├── Time.jsx
│ │ │ │ │ └── Url.jsx
│ │ │ │ └── ui/
│ │ │ │ ├── Alert.jsx
│ │ │ │ ├── Button.jsx
│ │ │ │ ├── Dropdown.jsx
│ │ │ │ ├── Modal.jsx
│ │ │ │ ├── ModalTrigger.jsx
│ │ │ │ ├── Table.jsx
│ │ │ │ ├── TooltipTrigger.jsx
│ │ │ │ └── VerticalNavigation.jsx
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ └── index.js
│ │ │ ├── server/
│ │ │ │ └── main.js
│ │ │ └── stylesheets/
│ │ │ ├── datetime.scss
│ │ │ ├── likert.scss
│ │ │ ├── style.scss
│ │ │ ├── typeahead-bs4.scss
│ │ │ └── typeahead.scss
│ │ └── package.js
│ ├── vulcan-ui-material/
│ │ ├── accounts.css
│ │ ├── en_US.js
│ │ ├── forms.css
│ │ ├── fr_FR.js
│ │ ├── history.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ ├── main.js
│ │ │ │ └── wrapWithMuiTheme.jsx
│ │ │ ├── components/
│ │ │ │ ├── accounts/
│ │ │ │ │ ├── AccountsButton.jsx
│ │ │ │ │ ├── AccountsButtons.jsx
│ │ │ │ │ ├── AccountsField.jsx
│ │ │ │ │ ├── AccountsFields.jsx
│ │ │ │ │ ├── AccountsForm.jsx
│ │ │ │ │ ├── AccountsPasswordOrService.jsx
│ │ │ │ │ └── AccountsSocialButtons.jsx
│ │ │ │ ├── backoffice/
│ │ │ │ │ ├── BackofficeNavbar.jsx
│ │ │ │ │ ├── BackofficePageLayout.jsx
│ │ │ │ │ └── BackofficeVerticalMenuLayout.jsx
│ │ │ │ ├── bonus/
│ │ │ │ │ ├── DatatableFromArray.jsx
│ │ │ │ │ ├── KeyEventHandler.jsx
│ │ │ │ │ ├── LoadMore.jsx
│ │ │ │ │ ├── ScrollTrigger.jsx
│ │ │ │ │ ├── SearchInput.jsx
│ │ │ │ │ ├── TooltipButton.jsx
│ │ │ │ │ ├── TooltipIconButton.jsx
│ │ │ │ │ └── TooltipIntl.jsx
│ │ │ │ ├── core/
│ │ │ │ │ ├── Avatar.jsx
│ │ │ │ │ ├── Card.jsx
│ │ │ │ │ ├── Datatable.jsx
│ │ │ │ │ ├── EditButton.jsx
│ │ │ │ │ ├── Flash.jsx
│ │ │ │ │ ├── Loading.jsx
│ │ │ │ │ └── NewButton.jsx
│ │ │ │ ├── forms/
│ │ │ │ │ ├── FormComponentInner.jsx
│ │ │ │ │ ├── FormErrors.jsx
│ │ │ │ │ ├── FormGroupDefault.jsx
│ │ │ │ │ ├── FormGroupLine.jsx
│ │ │ │ │ ├── FormGroupNone.jsx
│ │ │ │ │ ├── FormNestedArrayLayout.jsx
│ │ │ │ │ ├── FormNestedDivider.jsx
│ │ │ │ │ ├── FormSubmit.jsx
│ │ │ │ │ ├── base-controls/
│ │ │ │ │ │ ├── EndAdornment.jsx
│ │ │ │ │ │ ├── FormCheckbox.jsx
│ │ │ │ │ │ ├── FormCheckboxGroup.jsx
│ │ │ │ │ │ ├── FormControlLayout.jsx
│ │ │ │ │ │ ├── FormHelper.jsx
│ │ │ │ │ │ ├── FormInput.jsx
│ │ │ │ │ │ ├── FormPicker.jsx
│ │ │ │ │ │ ├── FormRadioGroup.jsx
│ │ │ │ │ │ ├── FormSelect.jsx
│ │ │ │ │ │ ├── FormSuggest.jsx
│ │ │ │ │ │ ├── FormSwitch.jsx
│ │ │ │ │ │ ├── FormText.jsx
│ │ │ │ │ │ ├── RequiredIndicator.jsx
│ │ │ │ │ │ ├── StartAdornment.jsx
│ │ │ │ │ │ └── mixins/
│ │ │ │ │ │ └── component.jsx
│ │ │ │ │ └── controls/
│ │ │ │ │ ├── Checkbox.jsx
│ │ │ │ │ ├── CheckboxGroup.jsx
│ │ │ │ │ ├── CountrySelect.jsx
│ │ │ │ │ ├── Date.jsx
│ │ │ │ │ ├── DateRdt.jsx
│ │ │ │ │ ├── DateTime.jsx
│ │ │ │ │ ├── DateTimeRdt.jsx
│ │ │ │ │ ├── Default.jsx
│ │ │ │ │ ├── Email.jsx
│ │ │ │ │ ├── Number.jsx
│ │ │ │ │ ├── Password.jsx
│ │ │ │ │ ├── PostalCode.jsx
│ │ │ │ │ ├── RadioGroup.jsx
│ │ │ │ │ ├── RegionSelect.jsx
│ │ │ │ │ ├── Select.jsx
│ │ │ │ │ ├── SelectMultiple.jsx
│ │ │ │ │ ├── StaticText.jsx
│ │ │ │ │ ├── Textarea.jsx
│ │ │ │ │ ├── Time.jsx
│ │ │ │ │ ├── TimeRdt.jsx
│ │ │ │ │ ├── Url.jsx
│ │ │ │ │ └── countries.js
│ │ │ │ ├── index.js
│ │ │ │ ├── theme/
│ │ │ │ │ ├── JssCleanup.jsx
│ │ │ │ │ ├── ThemeProvider.jsx
│ │ │ │ │ └── ThemeStyles.jsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── Alert.jsx
│ │ │ │ │ ├── Button.jsx
│ │ │ │ │ ├── Modal.jsx
│ │ │ │ │ ├── ModalTrigger.jsx
│ │ │ │ │ ├── Table.jsx
│ │ │ │ │ └── VerticalNavigation.jsx
│ │ │ │ └── upload/
│ │ │ │ ├── UploadImage.jsx
│ │ │ │ └── UploadInner.jsx
│ │ │ ├── example/
│ │ │ │ ├── Header.jsx
│ │ │ │ ├── Layout.jsx
│ │ │ │ └── SideNavigation.jsx
│ │ │ ├── modules/
│ │ │ │ ├── components.js
│ │ │ │ ├── index.js
│ │ │ │ ├── routes.js
│ │ │ │ ├── sampleTheme.js
│ │ │ │ └── themes.js
│ │ │ └── server/
│ │ │ ├── main.js
│ │ │ └── wrapWithMuiTheme.jsx
│ │ ├── package.js
│ │ └── readme.md
│ ├── vulcan-users/
│ │ ├── README.md
│ │ ├── TESTS.md
│ │ ├── lib/
│ │ │ ├── client/
│ │ │ │ └── main.js
│ │ │ ├── modules/
│ │ │ │ ├── avatar.js
│ │ │ │ ├── collection.js
│ │ │ │ ├── fragments.js
│ │ │ │ ├── helpers.js
│ │ │ │ ├── index.js
│ │ │ │ ├── mutations.js
│ │ │ │ ├── permissions.js
│ │ │ │ ├── schema.js
│ │ │ │ └── views.js
│ │ │ └── server/
│ │ │ ├── AuthPassword.js
│ │ │ ├── callbacks.js
│ │ │ ├── create_user.js
│ │ │ ├── graphql_context.js
│ │ │ ├── main.js
│ │ │ ├── mutations.js
│ │ │ ├── on_create_user.js
│ │ │ ├── queries.js
│ │ │ └── urls.js
│ │ ├── package.js
│ │ └── test/
│ │ ├── index.js
│ │ ├── permissions.test.js
│ │ └── server/
│ │ ├── callback.test.js
│ │ ├── index.js
│ │ └── mutation.test.js
│ └── vulcan-voting/
│ ├── README.md
│ ├── lib/
│ │ ├── client/
│ │ │ ├── fragment_matcher.js
│ │ │ └── main.js
│ │ ├── containers/
│ │ │ └── withVote.js
│ │ ├── modules/
│ │ │ ├── custom_fields.js
│ │ │ ├── fragments.js
│ │ │ ├── helpers.js
│ │ │ ├── index.js
│ │ │ ├── make_voteable.js
│ │ │ ├── scoring.js
│ │ │ ├── vote.js
│ │ │ └── votes/
│ │ │ ├── collection.js
│ │ │ └── schema.js
│ │ └── server/
│ │ ├── callbacks.js
│ │ ├── cron.js
│ │ ├── graphql.js
│ │ ├── indexes.js
│ │ ├── main.js
│ │ └── scoring.js
│ └── package.js
├── sample_settings.json
└── stories/
├── MUI/
│ ├── forms/
│ │ └── formBaseControls.stories.js
│ └── ui-material.stories.js
├── card.stories.js
├── dataSample/
│ ├── dummyCollection.js
│ └── schema.js
├── datatable.stories.js
├── form/
│ ├── form.stories.js
│ ├── formControls.stories.js
│ └── upload.stories.js
├── helpers.js
├── modal.stories.js
├── ref.stories.js
└── vulcan.stories.js
SYMBOL INDEX (494 symbols across 152 files)
FILE: .storybook/config.js
function loadStories (line 36) | function loadStories() {
FILE: .storybook/helpers.js
function registerComponent (line 22) | function registerComponent(name, rawComponent, ...hocs) {
function capitalize (line 146) | function capitalize(string) {
FILE: .vulcan/prestart_vulcan.js
function existsSync (line 5) | function existsSync(filePath){
function copySync (line 14) | function copySync(origin,target){
FILE: .vulcan/update_package.js
function diffPartReducer (line 25) | function diffPartReducer(accumulator, part) {
function sortObjectByKeyNameList (line 37) | function sortObjectByKeyNameList(object, sortWith) {
FILE: packages/_boilerplate-generator/generator.js
function appendToStream (line 12) | function appendToStream(chunk, stream) {
class Boilerplate (line 23) | class Boilerplate {
method constructor (line 24) | constructor(arch, manifest, options = {}) {
method toHTML (line 36) | toHTML(extraData) {
method toHTMLAsync (line 51) | toHTMLAsync(extraData) {
method toHTMLStream (line 68) | toHTMLStream(extraData) {
method _generateBoilerplateFromManifest (line 103) | _generateBoilerplateFromManifest(manifest, {
function getTemplate (line 157) | function getTemplate(arch) {
FILE: packages/_boilerplate-generator/template-web.cordova.js
function closeTemplate (line 78) | function closeTemplate() {
FILE: packages/_boilerplate-generator/template.js
function template (line 8) | function template(text) {
FILE: packages/meteor-mocha/browser-shim.js
function isFileReady (line 20) | function isFileReady(readyState) {
function shimMochaProcess (line 25) | function shimMochaProcess(M) {
function shimMochaInstance (line 33) | function shimMochaInstance(m) {
FILE: packages/meteor-mocha/client.js
function saveCoverage (line 12) | function saveCoverage(config, done) {
function runTests (line 36) | function runTests() {
FILE: packages/meteor-mocha/prepForHTMLReporter.js
function prepForHTMLReporter (line 1) | function prepForHTMLReporter() {
FILE: packages/meteor-mocha/runtimeArgs.js
function setArgs (line 1) | function setArgs() {
FILE: packages/meteor-mocha/server.js
function clientLogBuffer (line 30) | function clientLogBuffer(line) {
function printHeader (line 39) | function printHeader(type) {
function exitIfDone (line 57) | function exitIfDone(type, failures) {
function serverTests (line 93) | function serverTests(cb) {
function clientTests (line 125) | function clientTests() {
function start (line 175) | function start() {
FILE: packages/vulcan-accounts/imports/helpers.js
constant STATES (line 10) | const STATES = {
function getLoginServices (line 19) | function getLoginServices() {
function hasPasswordService (line 35) | function hasPasswordService() {
function loginResultCallback (line 40) | function loginResultCallback(service, err) {
function passwordSignupFields (line 62) | function passwordSignupFields() {
function validateEmail (line 66) | function validateEmail(email, showMessage, clearMessage) {
function validatePassword (line 81) | function validatePassword(password = '', showMessage, clearMessage){
function validateUsername (line 91) | function validateUsername(username, showMessage, clearMessage, formState) {
function redirect (line 101) | function redirect(redirect) {
function capitalize (line 120) | function capitalize(string) {
FILE: packages/vulcan-accounts/imports/login_session.js
constant VALID_KEYS (line 5) | const VALID_KEYS = [
constant KEY_PREFIX (line 34) | const KEY_PREFIX = 'Meteor.loginButtons.';
FILE: packages/vulcan-accounts/imports/ui/components/Button.jsx
class AccountsButton (line 5) | class AccountsButton extends PureComponent {
method render (line 6) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/Buttons.jsx
class Buttons (line 5) | class Buttons extends React.Component {
method render (line 6) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/EnrollAccount.jsx
class AccountsEnrollAccount (line 8) | class AccountsEnrollAccount extends PureComponent {
method componentDidMount (line 9) | componentDidMount() {
method render (line 14) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/Field.jsx
class AccountsField (line 12) | class AccountsField extends PureComponent {
method constructor (line 13) | constructor(props) {
method triggerUpdate (line 20) | triggerUpdate() {
method componentDidMount (line 28) | componentDidMount() {
method componentDidUpdate (line 32) | componentDidUpdate(prevProps) {
method render (line 44) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/Fields.jsx
class AccountsFields (line 4) | class AccountsFields extends React.Component {
method render (line 5) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/Form.jsx
class AccountsForm (line 6) | class AccountsForm extends PureComponent {
method componentDidMount (line 7) | componentDidMount() {
method render (line 16) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/FormMessage.jsx
class AccountsFormMessage (line 4) | class AccountsFormMessage extends React.Component {
method render (line 5) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/FormMessages.jsx
class AccountsFormMessages (line 4) | class AccountsFormMessages extends Component {
method render (line 5) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/LoginForm.jsx
class AccountsLoginForm (line 4) | class AccountsLoginForm extends React.Component {
method render (line 6) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/LoginFormInner.jsx
class AccountsLoginFormInner (line 24) | class AccountsLoginFormInner extends TrackerComponent {
method constructor (line 25) | constructor(props) {
method componentDidMount (line 91) | componentDidMount() {
method UNSAFE_componentWillReceiveProps (line 138) | UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
method componentDidUpdate (line 147) | componentDidUpdate(prevProps, prevState) {
method validateField (line 175) | validateField(field, value) {
method getUsernameOrEmailField (line 187) | getUsernameOrEmailField() {
method getUsernameField (line 199) | getUsernameField() {
method getEmailField (line 211) | getEmailField() {
method getPasswordField (line 224) | getPasswordField() {
method getSetPasswordField (line 237) | getSetPasswordField() {
method getNewPasswordField (line 248) | getNewPasswordField() {
method handleChange (line 260) | handleChange(field, evt) {
method fields (line 273) | fields() {
method buttons (line 345) | buttons() {
method showSignInLink (line 481) | showSignInLink() {
method showPasswordChangeForm (line 485) | showPasswordChangeForm() {
method showEnrollAccountForm (line 489) | showEnrollAccountForm() {
method showCreateAccountLink (line 493) | showCreateAccountLink() {
method showForgotPasswordLink (line 497) | showForgotPasswordLink() {
method setDefaultFieldValues (line 508) | setDefaultFieldValues(defaults) {
method getDefaultFieldValues (line 526) | getDefaultFieldValues() {
method clearDefaultFieldValues (line 538) | clearDefaultFieldValues() {
method switchToSignUp (line 544) | switchToSignUp(event) {
method switchToSignIn (line 554) | switchToSignIn(event) {
method switchToPasswordReset (line 564) | switchToPasswordReset(event) {
method switchToChangePassword (line 574) | switchToChangePassword(event) {
method switchToSignOut (line 584) | switchToSignOut(event) {
method cancelResetPassword (line 593) | cancelResetPassword(event) {
method signOut (line 604) | signOut() {
method signIn (line 617) | signIn() {
method oauthButtons (line 679) | oauthButtons() {
method oauthSignIn (line 699) | oauthSignIn(serviceName) {
method signUp (line 756) | signUp(options = {}) {
method passwordReset (line 859) | passwordReset() {
method passwordChange (line 887) | passwordChange() {
method showMessage (line 934) | showMessage(messageId, type, clearTimeout, field) {
method getMessageForField (line 953) | getMessageForField(field) {
method clearMessage (line 958) | clearMessage(message) {
method clearMessages (line 966) | clearMessages() {
method componentWillUnmount (line 973) | componentWillUnmount() {
method render (line 979) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/PasswordOrService.jsx
class AccountsPasswordOrService (line 7) | class AccountsPasswordOrService extends PureComponent {
method render (line 8) | render () {
FILE: packages/vulcan-accounts/imports/ui/components/ResetPassword.jsx
class AccountsResetPassword (line 8) | class AccountsResetPassword extends PureComponent {
method componentDidMount (line 9) | componentDidMount() {
method render (line 14) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/SocialButtons.jsx
class AccountsSocialButtons (line 6) | class AccountsSocialButtons extends React.Component {
method render (line 7) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/StateSwitcher.jsx
class AccountsStateSwitcher (line 9) | class AccountsStateSwitcher extends React.Component {
method constructor (line 11) | constructor(props) {
method render (line 76) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/TrackerComponent.jsx
class TrackerComponent (line 10) | class TrackerComponent extends React.Component {
method constructor (line 11) | constructor(props) {
method subscribe (line 17) | subscribe(name, ...options) {
method autorun (line 22) | autorun(fn) { return this.__comps.push(Tracker.autorun(c => {
method componentDidUpdate (line 26) | componentDidUpdate() { !this.__live && this.__comps.forEach(c => {
method subscriptionsReady (line 30) | subscriptionsReady() {
method componentWillUnmount (line 34) | componentWillUnmount() {
method render (line 39) | render() {
FILE: packages/vulcan-accounts/imports/ui/components/VerifyEmail.jsx
class AccountsVerifyEmail (line 8) | class AccountsVerifyEmail extends PureComponent {
method constructor (line 9) | constructor(props) {
method componentDidMount (line 17) | componentDidMount() {
method render (line 38) | render() {
FILE: packages/vulcan-admin/lib/components/AdminLayout.jsx
function AdminLayout (line 16) | function AdminLayout({children}) {
FILE: packages/vulcan-backoffice/lib/modules/createCollectionComponents/createItemComponent.js
method render (line 11) | render() {
FILE: packages/vulcan-backoffice/lib/modules/createCollectionComponents/createListComponent.js
method render (line 7) | render() {
FILE: packages/vulcan-cloudinary/lib/server/cloudinary.js
method uploadImage (line 20) | uploadImage(imageUrl) {
method getUrls (line 36) | getUrls(cloudinaryId) {
FILE: packages/vulcan-cloudinary/lib/server/make_cloudinary.js
function cacheImageOnNew (line 14) | function cacheImageOnNew (document) {
function cacheImageOnEdit (line 30) | function cacheImageOnEdit (modifier, oldDocument) {
FILE: packages/vulcan-core/lib/modules/components/App.jsx
class App (line 50) | class App extends PureComponent {
method constructor (line 51) | constructor(props) {
method getChildContext (line 144) | getChildContext() {
method componentDidUpdate (line 151) | componentDidUpdate(nextProps) {
method render (line 159) | render() {
FILE: packages/vulcan-core/lib/modules/components/Datatable/Datatable.jsx
class Datatable (line 37) | class Datatable extends PureComponent {
method constructor (line 38) | constructor(props) {
method render (line 209) | render() {
FILE: packages/vulcan-core/lib/modules/components/Dummy.jsx
function Dummy (line 4) | function Dummy({children}) {
FILE: packages/vulcan-core/lib/modules/components/HeadTags.jsx
class HeadTags (line 14) | class HeadTags extends PureComponent {
method render (line 15) | render() {
FILE: packages/vulcan-core/lib/modules/components/HelloWorld.jsx
function escapeHtml (line 29) | function escapeHtml(unsafe) {
FILE: packages/vulcan-core/lib/modules/components/MutationButton.jsx
class MutationButton (line 23) | class MutationButton extends PureComponent {
method constructor (line 24) | constructor(props) {
method render (line 29) | render() {
class MutationButtonInner (line 35) | class MutationButtonInner extends PureComponent {
method render (line 83) | render() {
FILE: packages/vulcan-core/lib/modules/components/RouterHook.jsx
class RouterHook (line 6) | class RouterHook extends PureComponent {
method constructor (line 7) | constructor(props) {
method componentDidUpdate (line 12) | componentDidUpdate(nextProps) {
method render (line 25) | render() {
FILE: packages/vulcan-core/lib/modules/components/ScrollToTop.jsx
class ScrollToTop (line 6) | class ScrollToTop extends Component {
method componentDidUpdate (line 7) | componentDidUpdate(prevProps) {
method render (line 13) | render() {
FILE: packages/vulcan-core/lib/modules/containers/multi.js
method loadMore (line 156) | loadMore(providedTerms) {
method loadMoreInc (line 171) | loadMoreInc(providedTerms) {
FILE: packages/vulcan-core/lib/modules/containers/multi2.js
method loadMore (line 143) | loadMore(providedInput) {
method loadMoreInc (line 155) | loadMoreInc(providedInput) {
FILE: packages/vulcan-core/lib/modules/containers/withAccess.js
function withAccess (line 19) | function withAccess(options) {
FILE: packages/vulcan-debug/lib/components/Dashboard.jsx
function Dashboard (line 5) | function Dashboard() {
FILE: packages/vulcan-debug/lib/components/I18n.jsx
function LocaleSwitcher (line 11) | function LocaleSwitcher(props, context) {
FILE: packages/vulcan-debug/lib/server/callbacks/resolvers.js
method resolver (line 7) | resolver(root, {terms = {}}, context, info) {
FILE: packages/vulcan-debug/lib/server/emails/resolvers.js
method resolver (line 5) | resolver() {
FILE: packages/vulcan-debug/lib/server/settings/resolvers.js
method resolver (line 7) | resolver(root, {terms = {}}, context, info) {
FILE: packages/vulcan-embed/lib/components/EmbedURL.jsx
class EmbedURL (line 7) | class EmbedURL extends Component {
method constructor (line 8) | constructor(props) {
method componentDidMount (line 18) | componentDidMount() {
method renderThumbnail (line 122) | renderThumbnail() {
method renderNoThumbnail (line 146) | renderNoThumbnail() {
method render (line 164) | render() {
FILE: packages/vulcan-embed/lib/server/integrations/builtin.js
method getData (line 20) | getData(url) {
FILE: packages/vulcan-embed/lib/server/integrations/embedapi.js
method getData (line 24) | getData(url) {
FILE: packages/vulcan-embed/lib/server/integrations/embedly.js
method getData (line 25) | getData(url) {
FILE: packages/vulcan-embed/lib/server/mutations.js
method getEmbedData (line 12) | getEmbedData(root, args, context) {
FILE: packages/vulcan-errors-sentry/lib/client/sentry-client.js
function initSentryForClient (line 15) | function initSentryForClient(props = {}) {
function logToSentry (line 29) | function logToSentry({ error, details, currentUser }) {
function setSentryUser (line 47) | function setSentryUser({ user }) {
FILE: packages/vulcan-errors-sentry/lib/server/sentry-server.js
function initSentryForServer (line 15) | function initSentryForServer() {
function logToSentry (line 30) | function logToSentry({ error, details, currentUser }) {
function setSentryUser (line 48) | function setSentryUser({ user }) {
FILE: packages/vulcan-errors/lib/client/init.js
function runInitFunctions (line 9) | function runInitFunctions(props) {
FILE: packages/vulcan-errors/lib/components/ErrorCatcher.jsx
class ErrorCatcher (line 20) | class ErrorCatcher extends Component {
method componentDidUpdate (line 37) | componentDidUpdate(prevProps) {
method render (line 50) | render() {
FILE: packages/vulcan-errors/lib/components/ErrorsUserMonitor.jsx
class ErrorsUserMonitor (line 7) | class ErrorsUserMonitor extends PureComponent {
method constructor (line 8) | constructor(props) {
method componentDidMount (line 12) | componentDidMount() {
method componentDidUpdate (line 16) | componentDidUpdate() {
method checkCurrentUser (line 20) | checkCurrentUser(prevProps, prevState, snapshot) {
method render (line 35) | render() {
FILE: packages/vulcan-errors/lib/modules/extended-NOTUSED.js
class ExtendedError (line 8) | class ExtendedError extends Error {
method constructor (line 9) | constructor(message, options = {}) {
method statusCode (line 30) | get statusCode() {
method statusCode (line 34) | set statusCode(val) {
method toJSON (line 39) | toJSON() {
method toResponse (line 45) | toResponse() {
FILE: packages/vulcan-errors/lib/modules/rethrown-NOTUSED.js
class RethrownError (line 19) | class RethrownError extends ExtendedError {
method constructor (line 27) | constructor(message, error, options = {}) {
FILE: packages/vulcan-events-ga/lib/client/ga.js
function googleAnaticsTrackPage (line 14) | function googleAnaticsTrackPage() {
function googleAnaticsTrackEvent (line 25) | function googleAnaticsTrackEvent(name, properties, currentUser) {
function googleAnalyticsInit (line 41) | function googleAnalyticsInit() {
FILE: packages/vulcan-events-intercom/lib/client/intercom-client.js
function intercomIdentify (line 14) | function intercomIdentify(currentUser) {
function intercomInit (line 53) | function intercomInit() {
FILE: packages/vulcan-events-intercom/lib/server/intercom-server.js
function intercomNewUser (line 31) | async function intercomNewUser({ user }) {
function intercomTrackServer (line 49) | function intercomTrackServer(eventName, eventProperties, currentUser = {...
FILE: packages/vulcan-events-internal/lib/client/internal-client.js
function trackInternal (line 5) | function trackInternal(eventName, eventProperties) {
FILE: packages/vulcan-events-internal/lib/server/internal-server.js
function trackInternalServer (line 5) | async function trackInternalServer(eventName, eventProperties, currentUs...
FILE: packages/vulcan-events-segment/lib/client/segment-client.js
function segmentTrackPage (line 18) | function segmentTrackPage(route) {
function segmentIdentify (line 36) | function segmentIdentify(currentUser) {
function segmentTrack (line 51) | function segmentTrack(eventName, eventProperties) {
function segmentInit (line 63) | function segmentInit() {
FILE: packages/vulcan-events-segment/lib/server/segment-server.js
function segmentIdentifyServer (line 18) | function segmentIdentifyServer(currentUser) {
function segmentTrackServer (line 49) | function segmentTrackServer(eventName, eventProperties, currentUser) {
FILE: packages/vulcan-forms-tags/lib/components/Tags.jsx
class Tags (line 7) | class Tags extends PureComponent {
method constructor (line 9) | constructor(props) {
method render (line 29) | render() {
FILE: packages/vulcan-forms-upload/lib/Upload.jsx
class Image (line 63) | class Image extends PureComponent {
method constructor (line 64) | constructor() {
method clearImage (line 69) | clearImage(e) {
method render (line 74) | render() {
class Upload (line 98) | class Upload extends PureComponent {
method constructor (line 99) | constructor(props, context) {
method render (line 279) | render() {
FILE: packages/vulcan-forms/lib/components/Form.jsx
constant RESET_PROPS (line 61) | const RESET_PROPS = [
class SmartForm (line 139) | class SmartForm extends Component {
method constructor (line 140) | constructor(props) {
method UNSAFE_componentWillReceiveProps (line 719) | UNSAFE_componentWillReceiveProps(nextProps) {
method render (line 1190) | render() {
FILE: packages/vulcan-forms/lib/components/FormComponent.jsx
class FormComponent (line 21) | class FormComponent extends Component {
method constructor (line 22) | constructor(props) {
method getDerivedStateFromProps (line 28) | static getDerivedStateFromProps(props) {
method shouldComponentUpdate (line 39) | shouldComponentUpdate(nextProps, nextState) {
method render (line 309) | render() {
FILE: packages/vulcan-forms/lib/components/FormElement.jsx
class FormElement (line 5) | class FormElement extends React.Component {
method render (line 6) | render(){
FILE: packages/vulcan-forms/lib/components/FormGroup.jsx
class FormGroup (line 7) | class FormGroup extends PureComponent {
method constructor (line 9) | constructor (props) {
method toggle (line 18) | toggle () {
method renderHeading (line 24) | renderHeading (FormComponents) {
method render (line 48) | render() {
FILE: packages/vulcan-forms/lib/components/FormIntl.jsx
class FormIntl (line 22) | class FormIntl extends PureComponent {
method render (line 34) | render() {
FILE: packages/vulcan-forms/lib/components/FormNestedArray.jsx
class FormNestedArray (line 25) | class FormNestedArray extends PureComponent {
method getCurrentValue (line 26) | getCurrentValue() {
method componentDidMount (line 66) | componentDidMount() {
method render (line 70) | render() {
FILE: packages/vulcan-forms/lib/components/FormNestedObject.jsx
class FormNestedObject (line 24) | class FormNestedObject extends PureComponent {
method render (line 25) | render() {
FILE: packages/vulcan-forms/lib/components/FormWrapper.jsx
class FormWrapper (line 51) | class FormWrapper extends PureComponent {
method constructor (line 52) | constructor(props) {
method getSchema (line 59) | getSchema() {
method getFormType (line 64) | getFormType() {
method getFragments (line 70) | getFragments() {
method getComponent (line 124) | getComponent() {
method render (line 191) | render() {
FILE: packages/vulcan-forms/lib/modules/utils.js
function recurse (line 23) | function recurse(cur, prop) {
FILE: packages/vulcan-i18n/lib/modules/provider.js
class IntlProvider (line 5) | class IntlProvider extends Component {
method getChildContext (line 15) | getChildContext() {
method render (line 31) | render() {
FILE: packages/vulcan-i18n/lib/modules/useIntl.js
function useIntl (line 4) | function useIntl() {
FILE: packages/vulcan-lib/lib/client/auth.js
function setToken (line 14) | function setToken(loginToken, expires) {
function initToken (line 29) | function initToken() {
FILE: packages/vulcan-lib/lib/client/inject_data.js
method _encode (line 11) | _encode(ejson) {
method _decode (line 17) | _decode(encodedEjson) {
method _checkReady (line 23) | _checkReady() {
method getDataSync (line 33) | getDataSync(key) {
method getData (line 39) | getData(key, callback) {
FILE: packages/vulcan-lib/lib/modules/collections.js
function registerCollectionCallback (line 377) | function registerCollectionCallback(typeName) {
function addIntlFields (line 405) | function addIntlFields(schema) {
FILE: packages/vulcan-lib/lib/modules/components.js
function registerComponent (line 58) | function registerComponent(name, rawComponent, ...hocs) {
function replaceComponent (line 171) | function replaceComponent(name, newComponent, ...newHocs) {
FILE: packages/vulcan-lib/lib/modules/routes.ts
type Route (line 3) | type Route = {
FILE: packages/vulcan-lib/lib/server/accounts_helpers.js
constant LOGIN_UNEXPIRING_TOKEN_DAYS (line 17) | const LOGIN_UNEXPIRING_TOKEN_DAYS = 365 * 100;
constant DEFAULT_LOGIN_EXPIRATION_DAYS (line 20) | const DEFAULT_LOGIN_EXPIRATION_DAYS = 90;
FILE: packages/vulcan-lib/lib/server/apollo-server/graphiql.js
constant GRAPHIQL_VERSION (line 34) | const GRAPHIQL_VERSION = '0.11.11';
constant SUBSCRIPTIONS_TRANSPORT_VERSION (line 35) | const SUBSCRIPTIONS_TRANSPORT_VERSION = '0.9.9';
function safeSerialize (line 39) | function safeSerialize(data) {
function renderGraphiQL (line 43) | function renderGraphiQL(data) {
function isOptionsFunction (line 228) | function isOptionsFunction(arg) {
function resolveGraphiQLOptions (line 232) | async function resolveGraphiQLOptions(options, ...args) {
function createGraphiQLParams (line 244) | function createGraphiQLParams(query) {
function createGraphiQLData (line 253) | function createGraphiQLData(params, options) {
function resolveGraphiQLString (line 267) | async function resolveGraphiQLString(query, options, ...args) {
FILE: packages/vulcan-lib/lib/server/apollo-ssr/inject_data.js
method _encode (line 11) | _encode(ejson) {
method _decode (line 21) | _decode(encodedEjson) {
method pushData (line 28) | pushData(res, key, value) {
method getData (line 55) | getData(res, key) {
FILE: packages/vulcan-lib/lib/server/connectors.js
function initializeConnectors (line 10) | function initializeConnectors () {
FILE: packages/vulcan-lib/lib/server/default_mutations.js
function getDefaultMutations (line 23) | function getDefaultMutations(options) {
FILE: packages/vulcan-lib/lib/server/default_mutations2.js
function getNewDefaultMutations (line 66) | function getNewDefaultMutations({ typeName, collectionName, options }) {
FILE: packages/vulcan-lib/lib/server/default_resolvers.js
function getDefaultResolvers (line 20) | function getDefaultResolvers(options) {
FILE: packages/vulcan-lib/lib/server/default_resolvers2.js
function getNewDefaultResolvers (line 18) | function getNewDefaultResolvers({ typeName, collectionName, options }) {
FILE: packages/vulcan-lib/lib/server/graphql/graphql.js
method init (line 76) | init() {
method addStitchedSchema (line 88) | addStitchedSchema(schema) {
method addCollection (line 94) | addCollection(collection) {
method getCollectionsSchemas (line 98) | getCollectionsSchemas() {
method addSchema (line 111) | addSchema(schema) {
method getAdditionalSchemas (line 115) | getAdditionalSchemas() {
method addQuery (line 122) | addQuery(query, description) {
method addMutation (line 128) | addMutation(mutation, description) {
method addResolvers (line 134) | addResolvers(resolvers) {
method removeResolver (line 137) | removeResolver(typeName, resolverName) {
method addToContext (line 143) | addToContext(object) {
method addDirectiveTransformer (line 148) | addDirectiveTransformer(directiveTransformer) {
method addTypeAndResolvers (line 152) | addTypeAndResolvers({ typeName, schema, description = '', interfaces = [...
method getType (line 200) | getType(typeName) {
method generateSchema (line 341) | generateSchema(collection) {
method getSchema (line 377) | getSchema() {
method getExecutableSchema (line 383) | getExecutableSchema() {
FILE: packages/vulcan-lib/lib/server/site.js
method siteData (line 16) | siteData(root, args, context) {
FILE: packages/vulcan-lib/test/server/apollo-ssr.test.js
method appendToHead (line 20) | appendToHead(content) {
method appendToBody (line 23) | appendToBody(content) {
FILE: packages/vulcan-newsletter/lib/components/NewsletterSubscribe.jsx
class NewsletterSubscribe (line 6) | class NewsletterSubscribe extends PureComponent {
method render (line 35) | render() {
FILE: packages/vulcan-newsletter/lib/server/callbacks.js
function subscribeUserOnProfileCompletion (line 7) | function subscribeUserOnProfileCompletion (user) {
FILE: packages/vulcan-newsletter/lib/server/integrations/emailoctopus.js
method subscribe (line 32) | async subscribe(email, confirm = false) {
method unsubscribe (line 62) | async unsubscribe(email) {
method send (line 67) | async send({ subject, text, html, isTest = false }) {
FILE: packages/vulcan-newsletter/lib/server/integrations/mailchimp.js
method subscribe (line 41) | async subscribe(email, confirm = false) {
method unsubscribe (line 68) | async unsubscribe(email) {
method send (line 82) | async send({ subject, text, html, isTest = false }) {
FILE: packages/vulcan-newsletter/lib/server/integrations/sample.js
method subscribe (line 64) | subscribe(email) {
method unsubscribe (line 68) | unsubscribe(email) {
method send (line 72) | send({ subject, text, html, isTest = false }) {
FILE: packages/vulcan-newsletter/lib/server/integrations/sendy.js
method subscribe (line 67) | subscribe(email) {
method unsubscribe (line 71) | unsubscribe(email) {
method send (line 75) | send({ subject, text, html, isTest = false }) {
FILE: packages/vulcan-payments/lib/components/Checkout.jsx
class Checkout (line 12) | class Checkout extends React.Component {
method constructor (line 14) | constructor() {
method onToken (line 29) | onToken(token) {
method render (line 81) | render() {
FILE: packages/vulcan-payments/lib/containers/withPaymentAction.js
function withPaymentAction (line 5) | function withPaymentAction(options) {
FILE: packages/vulcan-payments/lib/server/integrations/stripe.js
function addRawBody (line 583) | function addRawBody(req, res, next) {
FILE: packages/vulcan-payments/lib/server/mutations.js
method paymentActionMutation (line 7) | async paymentActionMutation(root, args, context) {
function CreateChargeableUnionType (line 15) | function CreateChargeableUnionType() {
method __resolveType (line 24) | __resolveType(obj, context, info){
FILE: packages/vulcan-scss/plugin/compile-scss.js
class SassCompiler (line 43) | class SassCompiler extends MultiFileCachingCompiler {
method constructor (line 44) | constructor() {
method getCacheKey (line 51) | getCacheKey(inputFile) {
method compileResultSize (line 55) | compileResultSize(compileResult) {
method isRoot (line 65) | isRoot(inputFile) {
method hasUnderscore (line 76) | hasUnderscore(file) {
method compileOneFileLater (line 80) | compileOneFileLater(inputFile, getResult) {
method compileOneFile (line 97) | async compileOneFile(inputFile, allFiles) {
method addCompileResult (line 310) | addCompileResult(inputFile, compileResult) {
function _getRealImportPathFromIncludes (line 319) | function _getRealImportPathFromIncludes(importPath, getRealImportPathFn) {
function _getConfig (line 341) | function _getConfig(configFileName) {
function decodeFilePath (line 357) | function decodeFilePath(filePath) {
function fileExists (line 371) | function fileExists(file) {
FILE: packages/vulcan-subscribe/lib/callbacks.js
function SubscribedCategoriesNotifications (line 16) | function SubscribedCategoriesNotifications (post) {
function SubscribedPostNotifications (line 47) | function SubscribedPostNotifications (comment) {
function SubscribedUsersNotifications (line 73) | function SubscribedUsersNotifications (post) {
FILE: packages/vulcan-subscribe/lib/components/SubscribeTo.jsx
class SubscribeToActionHandler (line 13) | class SubscribeToActionHandler extends PureComponent {
method constructor (line 15) | constructor(props, context) {
method onSubscribe (line 25) | async onSubscribe(e) {
method render (line 51) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/forms/Date.jsx
class DateComponent (line 6) | class DateComponent extends PureComponent {
method constructor (line 7) | constructor(props) {
method updateDate (line 12) | updateDate(date) {
method render (line 16) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/forms/Date2.jsx
class DateComponent2 (line 14) | class DateComponent2 extends PureComponent {
method render (line 88) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/forms/Datetime.jsx
class DateTime (line 6) | class DateTime extends PureComponent {
method constructor (line 7) | constructor(props) {
method updateDate (line 12) | updateDate(date) {
method render (line 16) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/forms/FormComponentInner.jsx
class FormComponentInner (line 7) | class FormComponentInner extends PureComponent {
method render (line 39) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/forms/Time.jsx
class Time (line 6) | class Time extends PureComponent {
method constructor (line 7) | constructor(props) {
method updateDate (line 12) | updateDate(mDate) {
method render (line 19) | render() {
FILE: packages/vulcan-ui-bootstrap/lib/components/ui/ModalTrigger.jsx
class ModalTrigger (line 5) | class ModalTrigger extends PureComponent {
method constructor (line 6) | constructor() {
method render (line 31) | render() {
FILE: packages/vulcan-ui-material/lib/client/wrapWithMuiTheme.jsx
function wrapWithMuiTheme (line 4) | function wrapWithMuiTheme(app, { apolloClient }) {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsButton.jsx
class AccountsButton (line 8) | class AccountsButton extends Component {
method render (line 9) | render() {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsButtons.jsx
class AccountsButtons (line 18) | class AccountsButtons extends Component {
method render (line 19) | render() {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsField.jsx
class AccountsField (line 15) | class AccountsField extends PureComponent {
method constructor (line 18) | constructor (props) {
method triggerUpdate (line 26) | triggerUpdate () {
method componentDidMount (line 35) | componentDidMount () {
method componentDidUpdate (line 40) | componentDidUpdate (prevProps) {
method render (line 52) | render () {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsFields.jsx
class AccountsFields (line 6) | class AccountsFields extends Component {
method render (line 7) | render () {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsForm.jsx
class AccountsForm (line 15) | class AccountsForm extends Component {
method componentDidMount (line 18) | componentDidMount () {
method render (line 28) | render () {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsPasswordOrService.jsx
function hasPasswordService (line 22) | function hasPasswordService() {
class AccountsPasswordOrService (line 27) | class AccountsPasswordOrService extends PureComponent {
method render (line 28) | render() {
FILE: packages/vulcan-ui-material/lib/components/accounts/AccountsSocialButtons.jsx
class AccountsSocialButtons (line 15) | class AccountsSocialButtons extends React.Component {
method render (line 16) | render() {
FILE: packages/vulcan-ui-material/lib/components/bonus/DatatableFromArray.jsx
class DatatableFromArray (line 6) | class DatatableFromArray extends PureComponent {
method constructor (line 9) | constructor (props) {
method render (line 27) | render () {
FILE: packages/vulcan-ui-material/lib/components/bonus/ScrollTrigger.jsx
class ScrollTrigger (line 5) | class ScrollTrigger extends Component {
method constructor (line 7) | constructor (props) {
method supportsPassive (line 24) | supportsPassive () {
method shouldComponentUpdate (line 40) | shouldComponentUpdate(nextProps, nextState) {
method componentDidMount (line 45) | componentDidMount () {
method componentWillUnmount (line 49) | componentWillUnmount () {
method componentDidUpdate (line 53) | componentDidUpdate (prevProps, prevState, snapshot) {
method addEventListeners (line 63) | addEventListeners () {
method removeEventListeners (line 79) | removeEventListeners () {
method onResize (line 91) | onResize () {
method onScroll (line 95) | onScroll () {
method checkStatus (line 99) | checkStatus () {
method render (line 112) | render () {
FILE: packages/vulcan-ui-material/lib/components/bonus/SearchInput.jsx
class SearchInput (line 77) | class SearchInput extends PureComponent {
method constructor (line 78) | constructor(props) {
method componentDidMount (line 90) | componentDidMount() {
method componentWillUnmount (line 103) | componentWillUnmount() {}
method render (line 146) | render() {
FILE: packages/vulcan-ui-material/lib/components/core/Datatable.jsx
class Datatable (line 91) | class Datatable extends PureComponent {
method constructor (line 92) | constructor(props) {
method updateQuery (line 116) | updateQuery(value) {
method render (line 127) | render() {
FILE: packages/vulcan-ui-material/lib/components/core/Loading.jsx
function Loading (line 5) | function Loading(props) {
FILE: packages/vulcan-ui-material/lib/components/forms/FormComponentInner.jsx
class FormComponentInner (line 54) | class FormComponentInner extends PureComponent {
method render (line 59) | render() {
FILE: packages/vulcan-ui-material/lib/components/forms/base-controls/FormInput.jsx
method componentDidUpdate (line 102) | componentDidUpdate(prevProps, prevState) {
FILE: packages/vulcan-ui-material/lib/components/forms/controls/DateRdt.jsx
class DateComponent (line 8) | class DateComponent extends PureComponent {
method constructor (line 10) | constructor(props) {
method updateDate (line 22) | updateDate(date) {
method render (line 26) | render() {
FILE: packages/vulcan-ui-material/lib/components/forms/controls/DateTimeRdt.jsx
class DateTimeRdt (line 9) | class DateTimeRdt extends PureComponent {
method constructor (line 11) | constructor(props) {
method componentDidMount (line 17) | componentDidMount() {
method updateDate (line 23) | updateDate(date) {
method render (line 27) | render() {
FILE: packages/vulcan-ui-material/lib/components/forms/controls/TimeRdt.jsx
class TimeRdt (line 8) | class TimeRdt extends PureComponent {
method constructor (line 10) | constructor(props) {
method updateDate (line 22) | updateDate(mDate) {
method render (line 29) | render() {
FILE: packages/vulcan-ui-material/lib/components/theme/JssCleanup.jsx
class JssCleanup (line 4) | class JssCleanup extends PureComponent {
method componentDidMount (line 8) | componentDidMount() {
method render (line 17) | render() {
FILE: packages/vulcan-ui-material/lib/components/theme/ThemeStyles.jsx
function getColorBlock (line 22) | function getColorBlock(theme, classes, colorName, colorValue, colorTitle) {
function getColorGroup (line 60) | function getColorGroup(options) {
FILE: packages/vulcan-ui-material/lib/components/ui/ModalTrigger.jsx
class ModalTrigger (line 24) | class ModalTrigger extends PureComponent {
method constructor (line 26) | constructor(props) {
method componentDidMount (line 32) | componentDidMount() {
method render (line 62) | render() {
FILE: packages/vulcan-ui-material/lib/components/upload/UploadImage.jsx
class UploadImage (line 49) | class UploadImage extends PureComponent {
method constructor (line 50) | constructor(props) {
method handleClear (line 55) | handleClear(event) {
method getImageUrl (line 61) | getImageUrl(imageOrImageArray) {
method render (line 69) | render() {
FILE: packages/vulcan-ui-material/lib/example/Layout.jsx
class Layout (line 74) | class Layout extends React.Component {
FILE: packages/vulcan-ui-material/lib/example/SideNavigation.jsx
class SideNavigation (line 27) | class SideNavigation extends React.Component {
method render (line 38) | render() {
FILE: packages/vulcan-ui-material/lib/server/wrapWithMuiTheme.jsx
function wrapWithMuiTheme (line 5) | function wrapWithMuiTheme(app, { context, apolloClient }) {
function wrapWithMuiStyleGenerator (line 19) | function wrapWithMuiStyleGenerator(app, { context, apolloClient }) {
function injectJss (line 36) | function injectJss(sink, { context }) {
FILE: packages/vulcan-users/lib/modules/permissions.js
class Group (line 19) | class Group {
method constructor (line 20) | constructor() {
method can (line 24) | can(actions) {
method cannot (line 29) | cannot(actions) {
method getViewableFields (line 272) | getViewableFields(collection, document) {
FILE: packages/vulcan-users/lib/server/callbacks.js
function hasCompletedProfile (line 9) | function hasCompletedProfile (user) {
function usersMakeAdmin (line 30) | function usersMakeAdmin (user) {
function usersEditGenerateHtmlBio (line 41) | function usersEditGenerateHtmlBio (modifier) {
function usersEditCheckEmail (line 49) | function usersEditCheckEmail (modifier, user) {
function usersCheckCompletion (line 77) | function usersCheckCompletion (newUser, oldUser) {
FILE: packages/vulcan-users/lib/server/mutations.js
method authenticateWithPassword (line 75) | async authenticateWithPassword(root, args, context) {
method logout (line 103) | async logout(root, args, context) {
method signup (line 111) | async signup(root, args, context) {
method setPassword (line 119) | async setPassword(root, args, context) {
method sendResetPasswordEmail (line 131) | async sendResetPasswordEmail(root, args, context) {
method resetPassword (line 142) | async resetPassword(root, args, context) {
method sendVerificationEmail (line 156) | async sendVerificationEmail(root, args, context) {
method verifyEmail (line 167) | async verifyEmail(root, args, context) {
FILE: packages/vulcan-users/lib/server/on_create_user.js
function onCreateUserCallback (line 7) | function onCreateUserCallback(options, user) {
FILE: packages/vulcan-users/lib/server/queries.js
method currentUser (line 7) | async currentUser(root, args, context) {
FILE: packages/vulcan-voting/lib/client/fragment_matcher.js
function AddVoteableFragmentMatcher (line 4) | function AddVoteableFragmentMatcher() {
FILE: packages/vulcan-voting/lib/server/graphql.js
function CreateVoteableUnionType (line 5) | function CreateVoteableUnionType() {
method __resolveType (line 14) | __resolveType(obj, context, info){
method vote (line 26) | async vote(root, {documentId, voteType, collectionName, voteId}, context) {
FILE: stories/form/upload.stories.js
class LegacyContextProvider (line 11) | class LegacyContextProvider extends React.Component {
method getChildContext (line 12) | getChildContext() {
method render (line 15) | render() {
FILE: stories/helpers.js
function capitalize (line 5) | function capitalize (string) {
function wrapInParent (line 11) | function wrapInParent (component, doWrap) {
Condensed preview — 900 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,149K chars).
[
{
"path": ".babelrc",
"chars": 208,
"preview": "{\n\t\"plugins\": [\n\t],\n \"presets\": [\n [\n \"@babel/preset-env\",\n {\n \"shippedProposals\": true,\n \"c"
},
{
"path": ".circleci/config.yml",
"chars": 3461,
"preview": "# Javascript Node CircleCI 2.0 configuration file\n#\n# Check https://circleci.com/docs/2.0/language-javascript/ for more "
},
{
"path": ".editorconfig",
"chars": 317,
"preview": "# editorconfig.org\n\nroot = true\n\n[*.{js,html}]\n\ncharset = utf-8\nend_of_line = lf\nindent_brace_style = 1TBS\nindent_size ="
},
{
"path": ".eslintignore",
"chars": 25,
"preview": "packages/_*\n**/*.test.js\n"
},
{
"path": ".eslintrc",
"chars": 1722,
"preview": "{\n \"extends\": [\n \"eslint:recommended\",\n \"plugin:meteor/recommended\",\n \"plugin:react/recommended\"\n ],\n \"parse"
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 261,
"preview": "Before starting on a new feature, please [check out the roadmap](https://trello.com/b/dwPR0LTz/vulcanjs-roadmap) and com"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 652,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the b"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 595,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your fea"
},
{
"path": ".github/stale.yml",
"chars": 681,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 60\n# Number of days of inactivity before a "
},
{
"path": ".gitignore",
"chars": 636,
"preview": ".eslintcache\nnpm-debug.log\n*.scssc\n.sass-cache/*\n.DS_Store\n*-ck.js\nproviders_secret.js\n*.sublime-project\n\n*.sublime-work"
},
{
"path": ".jshintrc",
"chars": 8339,
"preview": "//.jshintrc\n{\n // JSHint Meteor Configuration File\n // Match the Meteor Style Guide\n //\n // By @raix with contributi"
},
{
"path": ".meteor/.finished-upgraders",
"chars": 631,
"preview": "# This file contains information which helps Meteor properly upgrade your\n# app when you run 'meteor update'. You should"
},
{
"path": ".meteor/.gitignore",
"chars": 27,
"preview": "dev_bundle\nlocal\nmeteorite\n"
},
{
"path": ".meteor/.id",
"chars": 324,
"preview": "# This file contains a token that is unique to your project.\n# Check it into your repository along with the rest of this"
},
{
"path": ".meteor/cordova-plugins",
"chars": 0,
"preview": ""
},
{
"path": ".meteor/packages",
"chars": 440,
"preview": "# see http://docs.vulcanjs.org/packages\n\nvulcan:core\n\n############ Language Packages ############\n\nvulcan:i18n-en-us\n# v"
},
{
"path": ".meteor/platforms",
"chars": 15,
"preview": "server\nbrowser\n"
},
{
"path": ".meteor/release",
"chars": 13,
"preview": "METEOR@2.3.4\n"
},
{
"path": ".meteorignore",
"chars": 25,
"preview": "stories\nstorybook-static\n"
},
{
"path": ".nvmrc",
"chars": 9,
"preview": "v12.21.0\n"
},
{
"path": ".prettierrc.js",
"chars": 365,
"preview": "'use strict';\n\nconst {esNextPaths} = require('./.vulcan/shared/pathsByLanguageVersion');\n\nmodule.exports = {\n bracketSp"
},
{
"path": ".storybook/addons.js",
"chars": 198,
"preview": "// Init storybook addons here\nimport '@storybook/addon-knobs/register';\nimport '@storybook/addon-actions/register';\nimpo"
},
{
"path": ".storybook/config.js",
"chars": 2193,
"preview": "/**\n * Global configuration of the stories\n */\nimport { addDecorator, configure } from '@storybook/react';\n\nif (process."
},
{
"path": ".storybook/decorators/BootstrapDecorator.js",
"chars": 416,
"preview": "/**\n * Use this decorator to setup Bootstrap\n */\nimport React from 'react'\n\nimport 'meteor/vulcan:ui-bootstrap/lib/style"
},
{
"path": ".storybook/decorators/MaterialUIDecorator.js",
"chars": 386,
"preview": "/*\n\nUse this decorator to load Material UI\n\n*/\nimport { Components } from 'meteor/vulcan:lib';\n// load UI components\nimp"
},
{
"path": ".storybook/helpers.js",
"chars": 3493,
"preview": "import merge from 'lodash/merge';\n\n/*\n\nSimplified versions of Vulcan APIs and helpers\n\n*/\n\n/*\n\nComponents\n\n*/\nexport con"
},
{
"path": ".storybook/loaders/starter-example-loader.js",
"chars": 1473,
"preview": "/**\n * \n * Load the local Vulcan packages, inspired by vulcan-loader\n * \n */\nconst { getOptions } = require('loader-util"
},
{
"path": ".storybook/mocks/Meteor.js",
"chars": 311,
"preview": "// FIXME: we can't use ES6 imports in mocks, not sure why\nmodule.exports = {\n settings: {},\n startup: () => { },\n "
},
{
"path": ".storybook/mocks/Mongo.js",
"chars": 56,
"preview": "module.exports = {\n Collection: class Collection {}\n}"
},
{
"path": ".storybook/mocks/Vulcan.js",
"chars": 21,
"preview": "module.exports = {\n\n}"
},
{
"path": ".storybook/mocks/meteor-apollo.js",
"chars": 72,
"preview": "module.exports = {\n MeteorAccountsLink: class MeteorAccountsLink {}\n}"
},
{
"path": ".storybook/mocks/meteor-server-render.js",
"chars": 46,
"preview": "module.exports = {\n onPageLoad: () => { }\n}"
},
{
"path": ".storybook/mocks/vulcan-email.js",
"chars": 44,
"preview": "module.exports = {\n addEmails: () => {}\n}"
},
{
"path": ".storybook/startup.js",
"chars": 2155,
"preview": "/**\n * Allow to run callbacks on Storybook startup, after stories are imported\n * Based on Meteor.startup client side im"
},
{
"path": ".storybook/webpack.config.js",
"chars": 4411,
"preview": "/*\n\nWebpack setup\n\nAdapt with your own loaders and config if necessary\n\n*/\n\nconst path = require('path');\nconst webpack "
},
{
"path": ".vscode/launch.json",
"chars": 484,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n"
},
{
"path": ".vulcan/.gitignore",
"chars": 17,
"preview": "bkp\npackage.json\n"
},
{
"path": ".vulcan/prestart_vulcan.js",
"chars": 3045,
"preview": "#!/usr/bin/env node\n\n//Functions\nvar fs = require('fs');\nfunction existsSync(filePath){\n try{\n fs.statSync(filePath)"
},
{
"path": ".vulcan/prettier/index.js",
"chars": 2110,
"preview": "\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found "
},
{
"path": ".vulcan/shared/listChangedFiles.js",
"chars": 922,
"preview": "/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found i"
},
{
"path": ".vulcan/shared/pathsByLanguageVersion.js",
"chars": 398,
"preview": "/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found i"
},
{
"path": ".vulcan/update_package.js",
"chars": 3683,
"preview": "#!/usr/bin/env node\n\n/*\n\n### Usage\n\nPlace Vulcan's package.json in .vulcan/package.json and run meteor npm run update-pa"
},
{
"path": "CHANGELOG.md",
"chars": 121120,
"preview": "### Changelog\n\nAll notable changes to this project will be documented in this file. Dates are displayed in UTC.\n\nGenerat"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3350,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 1347,
"preview": "## Etiquette\n\n- **All PRs should be made to the `devel` branch, not `master`.**\n\n- Come check-in in the [Vulcan Slack ch"
},
{
"path": "Dockerfile",
"chars": 28,
"preview": "FROM abernix/meteord:onbuild"
},
{
"path": "MIGRATING.md",
"chars": 4292,
"preview": "# Migrations\n\nDoc to help updating downstream applications. Breaking changes and packages updates are listed here.\n\nPlea"
},
{
"path": "README.md",
"chars": 2887,
"preview": "<img src=\"https://d3vv6lp55qjaqc.cloudfront.net/items/2B3C1z2V2y421p2I0P42/vulcan-logo-noborder.png\" width=\"200\">\n\n# The"
},
{
"path": "RELEASE.md",
"chars": 2554,
"preview": "# Release process\n\n## Updating\n\nWe try to respect semantic versioning as much as possible. Going from 1.13.1 to 1.13.2 s"
},
{
"path": "jsconfig.json",
"chars": 4780,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES6\",\n \"baseUrl\": \".\",\n \"paths\": {\n \"meteor/vulcan:styled-components\""
},
{
"path": "license.md",
"chars": 1081,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 Telescope Nova\n\nPermission is hereby granted, free of charge, to any person ob"
},
{
"path": "package.json",
"chars": 6872,
"preview": "{\n \"name\": \"vulcan-meteor\",\n \"version\": \"1.16.9\",\n \"engines\": {\n \"npm\": \"^3.0\"\n },\n \"scripts\": {\n \"start\": \"m"
},
{
"path": "packages/.gitignore",
"chars": 37,
"preview": "/bootstrap3-datepicker\n/npm-container"
},
{
"path": "packages/_boilerplate-generator/.gitignore",
"chars": 8,
"preview": ".build*\n"
},
{
"path": "packages/_boilerplate-generator/.npm/package/.gitignore",
"chars": 13,
"preview": "node_modules\n"
},
{
"path": "packages/_boilerplate-generator/.npm/package/README",
"chars": 443,
"preview": "This directory and the files immediately inside it are automatically generated\nwhen you change this package's NPM depend"
},
{
"path": "packages/_boilerplate-generator/.npm/package/npm-shrinkwrap.json",
"chars": 1047,
"preview": "{\n \"lockfileVersion\": 1,\n \"dependencies\": {\n \"bluebird\": {\n \"version\": \"2.11.0\",\n \"resolved\": \"https://re"
},
{
"path": "packages/_boilerplate-generator/README.md",
"chars": 290,
"preview": "# boilerplate-generator\n[Source code of released version](https://github.com/meteor/meteor/tree/master/packages/boilerpl"
},
{
"path": "packages/_boilerplate-generator/generator.js",
"chars": 4820,
"preview": "import { readFile } from 'fs';\nimport { create as createStream } from \"combined-stream2\";\n\nimport WebBrowserTemplate fro"
},
{
"path": "packages/_boilerplate-generator/package.js",
"chars": 375,
"preview": "Package.describe({\n summary: \"Generates the boilerplate html from program's manifest\",\n version: '1.7.1',\n name: 'boi"
},
{
"path": "packages/_boilerplate-generator/template-web.browser.js",
"chars": 2019,
"preview": "import template from './template';\n\nexport const headTemplate = ({\n css,\n htmlAttributes,\n bundledJsCssUrlRewriteHook"
},
{
"path": "packages/_boilerplate-generator/template-web.cordova.js",
"chars": 2908,
"preview": "import template from './template';\n\n// Template function for rendering the boilerplate html for cordova\nexport const hea"
},
{
"path": "packages/_boilerplate-generator/template.js",
"chars": 583,
"preview": "import { _ } from 'meteor/underscore';\n\n// As identified in issue #9149, when an application overrides the default\n// _."
},
{
"path": "packages/_buffer/buffer.js",
"chars": 58,
"preview": "global.Buffer = global.Buffer || require(\"buffer\").Buffer;"
},
{
"path": "packages/_buffer/package.js",
"chars": 167,
"preview": "Package.describe({\n name: \"buffer\"\n});\n\nPackage.onUse( function(api) {\n \n api.use([\n 'ecmascript'\n ]);\n\n api.add"
},
{
"path": "packages/meteor-mocha/browser-shim.js",
"chars": 5042,
"preview": "/* eslint-disable */\n/**\n * Sourced from: https://github.com/nathanboktae/mocha-phantomjs-core\n */\n(function () {\n\n /"
},
{
"path": "packages/meteor-mocha/client.js",
"chars": 2717,
"preview": "/* eslint-disable no-console */\n/* global Package: false */\nimport { mocha } from 'meteor/meteortesting:mocha-core';\nimp"
},
{
"path": "packages/meteor-mocha/package.js",
"chars": 620,
"preview": "Package.describe({\n name: 'meteortesting:mocha',\n summary: 'Run Meteor package or app tests with Mocha',\n git: 'https"
},
{
"path": "packages/meteor-mocha/package.json",
"chars": 472,
"preview": "{\n \"name\": \"mocha\",\n \"version\": \"0.0.0-semantic-release\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://git"
},
{
"path": "packages/meteor-mocha/prepForHTMLReporter.js",
"chars": 465,
"preview": "export default function prepForHTMLReporter() {\n // Add the CSS from CDN\n const link = document.createElement('link');"
},
{
"path": "packages/meteor-mocha/runtimeArgs.js",
"chars": 2478,
"preview": "export default function setArgs() {\n const {\n MOCHA_GREP,\n MOCHA_INVERT,\n MOCHA_REPORTER,\n CLIENT_TEST_REPO"
},
{
"path": "packages/meteor-mocha/server.handleCoverage.js",
"chars": 2807,
"preview": "/* eslint-disable no-console */\nimport { HTTP } from 'meteor/http';\n\nexport default (coverageOptions) => {\n let promise"
},
{
"path": "packages/meteor-mocha/server.js",
"chars": 5991,
"preview": "/* global Package */\n/* eslint-disable no-console */\nimport { mochaInstance } from 'meteor/meteortesting:mocha-core';\nim"
},
{
"path": "packages/vulcan-accounts/README.md",
"chars": 83,
"preview": "Vulcan accounts package (forked from https://github.com/studiointeract/accounts-ui)"
},
{
"path": "packages/vulcan-accounts/imports/accounts_ui.js",
"chars": 7495,
"preview": "import { Accounts } from 'meteor/accounts-base';\nimport { redirect } from './helpers.js';\n\n/**\n * @summary Accounts UI\n "
},
{
"path": "packages/vulcan-accounts/imports/api/server/servicesListPublication.js",
"chars": 498,
"preview": "import { Meteor } from 'meteor/meteor';\nimport { getLoginServices } from '../../helpers.js';\n\nMeteor.publish('servicesLi"
},
{
"path": "packages/vulcan-accounts/imports/components.js",
"chars": 619,
"preview": "import './ui/components/Button.jsx';\nimport './ui/components/Buttons.jsx';\nimport './ui/components/Field.jsx';\nimport '."
},
{
"path": "packages/vulcan-accounts/imports/emailTemplates.js",
"chars": 445,
"preview": "import {Accounts} from 'meteor/accounts-base';\nimport {getSetting} from 'meteor/vulcan:core';\n\n// the emailTemplates are"
},
{
"path": "packages/vulcan-accounts/imports/helpers.js",
"chars": 3698,
"preview": "import { Accounts } from 'meteor/accounts-base';\n\nlet browserHistory;\ntry {\n browserHistory = require('react-router').b"
},
{
"path": "packages/vulcan-accounts/imports/login_session.js",
"chars": 3186,
"preview": "/* eslint-disable meteor/no-session */\nimport { Accounts } from 'meteor/accounts-base';\nimport { loginResultCallback, ge"
},
{
"path": "packages/vulcan-accounts/imports/oauth_config.js",
"chars": 345,
"preview": "import { ServiceConfiguration } from 'meteor/service-configuration';\nimport { getSetting } from 'meteor/vulcan:lib';\n\nco"
},
{
"path": "packages/vulcan-accounts/imports/routes.js",
"chars": 363,
"preview": "import { addRoute } from 'meteor/vulcan:core';\n\naddRoute({name: 'resetPassword', path: '/reset-password/:token', compone"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/Button.jsx",
"chars": 931,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { Components, registerComponent"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/Buttons.jsx",
"chars": 485,
"preview": "import React from 'react';\nimport './Button.jsx';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\n\ne"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/EnrollAccount.jsx",
"chars": 1204,
"preview": "import { Components, registerComponent, withCurrentUser } from 'meteor/vulcan:core';\nimport React, { PureComponent } fro"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/Field.jsx",
"chars": 2111,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { Components, registerComponent"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/Fields.jsx",
"chars": 470,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\n\nexport class AccountsFie"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/Form.jsx",
"chars": 1395,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\ni"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/FormMessage.jsx",
"chars": 542,
"preview": "import React from 'react';\nimport { registerComponent } from 'meteor/vulcan:core';\n\nexport class AccountsFormMessage ext"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/FormMessages.jsx",
"chars": 683,
"preview": "import React, { Component } from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\n\nexport cl"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/LoginForm.jsx",
"chars": 309,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\n\nexport class AccountsLog"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/LoginFormInner.jsx",
"chars": 32494,
"preview": "/* eslint-disable meteor/no-session */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Accounts "
},
{
"path": "packages/vulcan-accounts/imports/ui/components/PasswordOrService.jsx",
"chars": 1104,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { hasPasswordService } from '.."
},
{
"path": "packages/vulcan-accounts/imports/ui/components/ResetPassword.jsx",
"chars": 1205,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { Components, registerComponent"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/SocialButtons.jsx",
"chars": 554,
"preview": "import React from 'react';\nimport './Button.jsx';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\n\n\n"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/StateSwitcher.jsx",
"chars": 2239,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\nimport { Accounts } from "
},
{
"path": "packages/vulcan-accounts/imports/ui/components/TrackerComponent.jsx",
"chars": 1574,
"preview": "/*****************************************************************/\n/* See https://github.com/studiointeract/tracker-com"
},
{
"path": "packages/vulcan-accounts/imports/ui/components/VerifyEmail.jsx",
"chars": 1660,
"preview": "import { Components, registerComponent, withCurrentUser } from 'meteor/vulcan:core';\nimport React, { PureComponent } fro"
},
{
"path": "packages/vulcan-accounts/imports/useMeteorLogout.js",
"chars": 654,
"preview": "import { useApolloClient } from '@apollo/client';\n\n/**\n * Hook used to sign the user out.\n *\n * @param {function} callb"
},
{
"path": "packages/vulcan-accounts/main_client.js",
"chars": 413,
"preview": "import { Accounts } from 'meteor/accounts-base';\nimport './imports/accounts_ui.js';\nimport './imports/components.js';\nim"
},
{
"path": "packages/vulcan-accounts/main_server.js",
"chars": 565,
"preview": "import { Accounts } from 'meteor/accounts-base';\nimport './imports/accounts_ui.js';\nimport './imports/components.js';\nim"
},
{
"path": "packages/vulcan-accounts/package.js",
"chars": 608,
"preview": "Package.describe({\n name: 'vulcan:accounts',\n version: '1.16.9',\n summary: 'Accounts UI for React in Meteor 1.3+',\n "
},
{
"path": "packages/vulcan-admin/README.md",
"chars": 23,
"preview": "VulcanJS admin package."
},
{
"path": "packages/vulcan-admin/lib/client/main.js",
"chars": 36,
"preview": "export * from '../modules/index.js';"
},
{
"path": "packages/vulcan-admin/lib/components/AdminHome.jsx",
"chars": 870,
"preview": "import React from 'react';\nimport { Components, withCurrentUser, AdminColumns } from 'meteor/vulcan:core';\nimport Users "
},
{
"path": "packages/vulcan-admin/lib/components/AdminLayout.jsx",
"chars": 672,
"preview": "/**\n * @Author: Apollinaire Lecocq <apollinaire>\n * @Date: 08-01-19\n * @Last modified by: apollinaire\n * @Last modif"
},
{
"path": "packages/vulcan-admin/lib/components/users/columns/AdminUsersActions.jsx",
"chars": 604,
"preview": "import React from 'react';\nimport Users from 'meteor/vulcan:users';\nimport { Components, withRemove } from 'meteor/vulca"
},
{
"path": "packages/vulcan-admin/lib/components/users/columns/AdminUsersCreated.jsx",
"chars": 266,
"preview": "import React from 'react';\nimport { Components } from 'meteor/vulcan:core';\nimport moment from 'moment';\n\nconst AdminUse"
},
{
"path": "packages/vulcan-admin/lib/components/users/columns/AdminUsersEmail.jsx",
"chars": 271,
"preview": "import React from 'react';\nimport Users from 'meteor/vulcan:users';\nimport { Components } from 'meteor/vulcan:core';\n\nco"
},
{
"path": "packages/vulcan-admin/lib/components/users/columns/AdminUsersName.jsx",
"chars": 461,
"preview": "import React from 'react';\nimport Users from 'meteor/vulcan:users';\nimport { Components } from 'meteor/vulcan:core';\n\nco"
},
{
"path": "packages/vulcan-admin/lib/modules/columns.js",
"chars": 537,
"preview": "import { addAdminColumn } from 'meteor/vulcan:core';\n\nimport AdminUsersName from '../components/users/columns/AdminUsers"
},
{
"path": "packages/vulcan-admin/lib/modules/fragments.js",
"chars": 410,
"preview": "import { registerFragment } from 'meteor/vulcan:lib';\n\n// ------------------------------ Vote --------------------------"
},
{
"path": "packages/vulcan-admin/lib/modules/i18n.js",
"chars": 210,
"preview": "import { addStrings } from 'meteor/vulcan:core';\n\naddStrings('en', {\n 'users.name': 'Name',\n 'users.created': 'Created"
},
{
"path": "packages/vulcan-admin/lib/modules/index.js",
"chars": 103,
"preview": "import './fragments.js';\nimport './routes.js';\nimport './i18n.js';\nimport '../components/AdminLayout';\n"
},
{
"path": "packages/vulcan-admin/lib/modules/routes.js",
"chars": 388,
"preview": "import {addRoute, getDynamicComponent} from 'meteor/vulcan:core';\nimport React from 'react';\n\naddRoute({\n name: 'admin'"
},
{
"path": "packages/vulcan-admin/lib/server/main.js",
"chars": 36,
"preview": "export * from '../modules/index.js';"
},
{
"path": "packages/vulcan-admin/lib/stylesheets/style.scss",
"chars": 618,
"preview": ".datatable-users{\n .datatable-search{\n margin-bottom: 10px;\n padding: 2px 7px;\n }\n\n .datatable-item-name{\n ."
},
{
"path": "packages/vulcan-admin/package.js",
"chars": 476,
"preview": "Package.describe({\n name: 'vulcan:admin',\n summary: 'Vulcan components package',\n version: '1.16.9',\n git: 'https://"
},
{
"path": "packages/vulcan-backoffice/.gitignore",
"chars": 29,
"preview": "./node_modules\nnode_modules/\n"
},
{
"path": "packages/vulcan-backoffice/README.md",
"chars": 45,
"preview": "Vulcan back-office package, used internally. "
},
{
"path": "packages/vulcan-backoffice/lib/client/main.js",
"chars": 28,
"preview": "export * from '../modules';\n"
},
{
"path": "packages/vulcan-backoffice/lib/components/BackofficeIndex.jsx",
"chars": 509,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:core';\nimport NoSSR from 'react-"
},
{
"path": "packages/vulcan-backoffice/lib/components/BackofficeLayout.jsx",
"chars": 1746,
"preview": "import React, { useState } from 'react';\nimport { getAuthorizedMenuItems, menuItemProps, registerComponent, withCurrentU"
},
{
"path": "packages/vulcan-backoffice/lib/components/CollectionItem.jsx",
"chars": 800,
"preview": "/**\n * Generic page for a collection element\n *\n * Must be handled by the parent :\n * - the document, using withDocument"
},
{
"path": "packages/vulcan-backoffice/lib/components/CollectionList.jsx",
"chars": 726,
"preview": "/**\n * Generic page for a collection\n * Must be handled by the parent :\n * - providing the documents and callbacks\n */\n\n"
},
{
"path": "packages/vulcan-backoffice/lib/hocs/withDocumentId.js",
"chars": 476,
"preview": "/**\n * Get the documentId from parent props or from the route\n */\nimport React from 'react';\nexport const withDocumentId"
},
{
"path": "packages/vulcan-backoffice/lib/hocs/withRouteParam.js",
"chars": 634,
"preview": "/**\n * Pass a route param to its child\n *\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nexport con"
},
{
"path": "packages/vulcan-backoffice/lib/modules/components.js",
"chars": 241,
"preview": "// load generic components\nimport '../components/CollectionItem';\nimport '../components/CollectionList';\nimport '../comp"
},
{
"path": "packages/vulcan-backoffice/lib/modules/createCollectionComponents/createCollectionComponents.js",
"chars": 659,
"preview": "/**\n * Create List and Item components for the provided collection,\n * based on the generic Vulcan backoffice components"
},
{
"path": "packages/vulcan-backoffice/lib/modules/createCollectionComponents/createItemComponent.js",
"chars": 1334,
"preview": "import React, { PureComponent } from 'react';\nimport { registerComponent, Components, withSingle, withAccess } from 'met"
},
{
"path": "packages/vulcan-backoffice/lib/modules/createCollectionComponents/createListComponent.js",
"chars": 1029,
"preview": "import React, { PureComponent } from 'react';\nimport { registerComponent, Components, withAccess } from 'meteor/vulcan:c"
},
{
"path": "packages/vulcan-backoffice/lib/modules/createCollectionComponents/index.js",
"chars": 201,
"preview": "export { default as createListComponent } from './createListComponent';\nexport { default as createItemComponent } from '"
},
{
"path": "packages/vulcan-backoffice/lib/modules/index.js",
"chars": 414,
"preview": "import './settings';\nimport './startup';\nimport './components';\n\nexport { default as withDocumentId } from '../hocs/with"
},
{
"path": "packages/vulcan-backoffice/lib/modules/namingHelpers.js",
"chars": 1361,
"preview": "const capitalizeFirstLetter = string => string.charAt(0).toUpperCase() + string.slice(1);\n\nexport const getCollectionNam"
},
{
"path": "packages/vulcan-backoffice/lib/modules/options.js",
"chars": 1002,
"preview": "/**\n * Setup default options and provides helper to generate valid options based\n * on these defaults\n */\nimport _merge "
},
{
"path": "packages/vulcan-backoffice/lib/modules/settings.js",
"chars": 159,
"preview": "import { registerSetting } from 'meteor/vulcan:core';\nregisterSetting('backoffice.enable', Meteor.isDevelopment, 'Automa"
},
{
"path": "packages/vulcan-backoffice/lib/modules/setupBackoffice.js",
"chars": 1389,
"preview": "/** Setup a full fledged backoffice\n * - create components\n * - create routes\n * - register menu items\n */\nimport { addR"
},
{
"path": "packages/vulcan-backoffice/lib/modules/setupCollectionMenuItems.js",
"chars": 1201,
"preview": "/** Add an item to the menu to access the collection */\nimport { addMenuItem, getMenuItems, getAuthorizedMenuItems } fro"
},
{
"path": "packages/vulcan-backoffice/lib/modules/setupCollectionRoutes.js",
"chars": 1276,
"preview": "import { addRoute } from 'meteor/vulcan:core';\nimport {\n getBasePath,\n getBaseRouteName,\n getDetailsPath,\n getListCo"
},
{
"path": "packages/vulcan-backoffice/lib/modules/startup.js",
"chars": 681,
"preview": "/**\n * Generate the backoffice on startup\n */\nimport {getSetting, Collections} from 'meteor/vulcan:core';\nimport setupBa"
},
{
"path": "packages/vulcan-backoffice/lib/server/main.js",
"chars": 28,
"preview": "export * from '../modules';\n"
},
{
"path": "packages/vulcan-backoffice/package.js",
"chars": 526,
"preview": "Package.describe({\n name: 'vulcan:backoffice',\n summary: 'Vulcan automated backoffice generator',\n version: '1.16.9',"
},
{
"path": "packages/vulcan-backoffice/package.json",
"chars": 363,
"preview": "{\n \"name\": \"vulcan-backoffice\",\n \"version\": \"0.0.1\",\n \"description\": \"\",\n \"main\": \"package.js\",\n \"directories\": {\n "
},
{
"path": "packages/vulcan-backoffice/test/index.js",
"chars": 56,
"preview": "import './namingHelpers.test';\n\nimport './routes.test';\n"
},
{
"path": "packages/vulcan-backoffice/test/namingHelpers.test.js",
"chars": 1237,
"preview": "import expect from 'expect';\nimport {\n getCollectionName,\n getBasePath,\n getNewPath,\n getEditPath,\n getDetailsPath,"
},
{
"path": "packages/vulcan-backoffice/test/options.js",
"chars": 476,
"preview": "import expect from 'expect';\nimport {\n mergeDefaultBackofficeOptions,\n mergeDefaultCollectionOptions,\n} from '../lib/m"
},
{
"path": "packages/vulcan-backoffice/test/routes.test.js",
"chars": 553,
"preview": "import expect from 'expect';\nimport { generateRoutes } from '../lib/modules/setupCollectionRoutes';\n\nconst DummyCollecti"
},
{
"path": "packages/vulcan-cloudinary/README.md",
"chars": 611,
"preview": "Vulcan file upload package, used internally. \n\n### Custom Posts Fields\n\n- `cloudinaryId`\n- `cloudinaryUrls`\n\n### Public "
},
{
"path": "packages/vulcan-cloudinary/lib/client/main.js",
"chars": 75,
"preview": "export * from '../modules/index.js';\nexport * from './make_cloudinary.js';\n"
},
{
"path": "packages/vulcan-cloudinary/lib/client/make_cloudinary.js",
"chars": 150,
"preview": "import { addCustomFields } from '../modules/index.js';\n\nexport const makeCloudinary = ({collection, fieldName}) => {\n a"
},
{
"path": "packages/vulcan-cloudinary/lib/modules/custom_fields.js",
"chars": 1111,
"preview": "export const CloudinaryCollections = [];\n\nexport const addCustomFields = collection => {\n\n CloudinaryCollections.push(c"
},
{
"path": "packages/vulcan-cloudinary/lib/modules/index.js",
"chars": 35,
"preview": "export * from './custom_fields.js';"
},
{
"path": "packages/vulcan-cloudinary/lib/server/cloudinary.js",
"chars": 2789,
"preview": "import cloudinary from 'cloudinary';\nimport { Utils, getSetting, registerSetting } from 'meteor/vulcan:core';\n\nregisterS"
},
{
"path": "packages/vulcan-cloudinary/lib/server/main.js",
"chars": 108,
"preview": "export * from './cloudinary.js';\nexport * from '../modules/index.js';\nexport * from './make_cloudinary.js';\n"
},
{
"path": "packages/vulcan-cloudinary/lib/server/make_cloudinary.js",
"chars": 1332,
"preview": "import { CloudinaryUtils } from '../server/cloudinary.js';\nimport { getSetting, addCallback } from 'meteor/vulcan:core';"
},
{
"path": "packages/vulcan-cloudinary/package.js",
"chars": 336,
"preview": "Package.describe({\n name: 'vulcan:cloudinary',\n summary: 'Vulcan file upload package.',\n version: '1.16.9',\n git: 'h"
},
{
"path": "packages/vulcan-core/README.md",
"chars": 38,
"preview": "Vulcan core package, used internally. "
},
{
"path": "packages/vulcan-core/lib/client/components/AppGenerator.jsx",
"chars": 819,
"preview": "/**\n * The App + relevant wrappers\n */\nimport React from 'react';\nimport { ApolloProvider } from '@apollo/client';\nimpor"
},
{
"path": "packages/vulcan-core/lib/client/main.js",
"chars": 67,
"preview": "export * from '../modules/index.js';\n\nexport * from './start.jsx';\n"
},
{
"path": "packages/vulcan-core/lib/client/start.jsx",
"chars": 1698,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { onPageLoad } from 'meteor/server-render';\nimport A"
},
{
"path": "packages/vulcan-core/lib/modules/callbacks.js",
"chars": 294,
"preview": "import { registerCallback } from 'meteor/vulcan:lib';\n\nregisterCallback({\n name: 'populate.before',\n description: "
},
{
"path": "packages/vulcan-core/lib/modules/components/AccessControl.jsx",
"chars": 2727,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:lib';\nimport { useCurrentUser } "
},
{
"path": "packages/vulcan-core/lib/modules/components/App.jsx",
"chars": 8105,
"preview": "import { Components, registerComponent, Strings, runCallbacks, hasIntlFields, Routes, getLocale, getStrings } from 'mete"
},
{
"path": "packages/vulcan-core/lib/modules/components/Avatar.jsx",
"chars": 1467,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nim"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/Card.jsx",
"chars": 4371,
"preview": "import { registerComponent, Components, formatLabel } from 'meteor/vulcan:lib';\nimport { intlShape } from 'meteor/vulcan"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemArray.jsx",
"chars": 559,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// Array\nconst CardItemArray = ({ nes"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemDate.jsx",
"chars": 326,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport moment from 'moment';\n\n// Date\n"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemDefault.jsx",
"chars": 242,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// Default\nconst CardItemDefault = ({"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemHTML.jsx",
"chars": 281,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// HTML\nconst CardItemHTML = ({ value"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemImage.jsx",
"chars": 679,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n/*\n\nCard Item Components\n\n*/\n\n// Imag"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemNumber.jsx",
"chars": 266,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// Number\nconst CardItemNumber = ({ v"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemObject.jsx",
"chars": 1656,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport { Link } from 'react-router-dom"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemRelationHasMany.jsx",
"chars": 571,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// HasMany Relation\nconst CardItemRel"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemRelationHasOne.jsx",
"chars": 378,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// HasOne Relation\nconst CardItemRela"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemRelationItem.jsx",
"chars": 1689,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport { Link } from 'react-router-dom"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemString.jsx",
"chars": 417,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// String\nconst CardItemString = ({ s"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemSwitcher.jsx",
"chars": 3675,
"preview": "import { getCollectionByTypeName, registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\nconst getTyp"
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/CardItemURL.jsx",
"chars": 479,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\n// URL\nconst CardItemURL = ({ value, "
},
{
"path": "packages/vulcan-core/lib/modules/components/Card/index.js",
"chars": 426,
"preview": "import './CardItemArray';\nimport './CardItemDate';\nimport './CardItemDefault';\nimport './CardItemHTML';\nimport './CardIt"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/Datatable.jsx",
"chars": 13242,
"preview": "import { Utils, registerComponent, getCollection } from 'meteor/vulcan:lib';\nimport React, { PureComponent, memo } from "
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableCell.jsx",
"chars": 1495,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport PropTypes"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableContents.jsx",
"chars": 6369,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport PropTypes"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableFilter.jsx",
"chars": 9430,
"preview": "import { Components, registerComponent, Utils, expandQueryFragments } from 'meteor/vulcan:lib';\nimport React, { useState"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableHeader.jsx",
"chars": 3239,
"preview": "import { registerComponent, formatLabel } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport { intlSh"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableRow.jsx",
"chars": 3745,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport _isFuncti"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableSelect.jsx",
"chars": 889,
"preview": "import { registerComponent, Components } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport { intlSha"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableSorter.jsx",
"chars": 2529,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\nconst SortNone = () => (\n <svg width"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/DatatableSubmitSelected.jsx",
"chars": 597,
"preview": "import { registerComponent, Components } from 'meteor/vulcan:lib';\nimport React, { memo } from 'react';\nimport PropTypes"
},
{
"path": "packages/vulcan-core/lib/modules/components/Datatable/index.js",
"chars": 330,
"preview": "import './Datatable.jsx';\nimport './DatatableSorter.jsx';\nimport './DatatableFilter.jsx';\nimport './DatatableCell.jsx';\n"
},
{
"path": "packages/vulcan-core/lib/modules/components/DeleteButton.jsx",
"chars": 816,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport { useDelete2 } from"
},
{
"path": "packages/vulcan-core/lib/modules/components/Dummy.jsx",
"chars": 237,
"preview": "import React from 'react';\nimport {registerComponent} from 'meteor/vulcan:lib';\n\nfunction Dummy({children}) {\n return c"
},
{
"path": "packages/vulcan-core/lib/modules/components/DynamicLoading.jsx",
"chars": 472,
"preview": "import React from 'react';\nimport { Components, registerComponent } from 'meteor/vulcan:lib';\n\nconst DynamicLoading = ({"
},
{
"path": "packages/vulcan-core/lib/modules/components/EditButton.jsx",
"chars": 1629,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport { intlShape } from "
},
{
"path": "packages/vulcan-core/lib/modules/components/Error404.jsx",
"chars": 429,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\nconst Error404 = () => {\n"
},
{
"path": "packages/vulcan-core/lib/modules/components/Flash.jsx",
"chars": 802,
"preview": "import {Components, registerComponent} from 'meteor/vulcan:lib';\nimport React from 'react';\nimport PropTypes from 'prop-"
},
{
"path": "packages/vulcan-core/lib/modules/components/FlashMessages.jsx",
"chars": 944,
"preview": "import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Components, registerComponent } from 'meteor/vul"
},
{
"path": "packages/vulcan-core/lib/modules/components/HeadTags.jsx",
"chars": 3369,
"preview": "import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { Helmet } from 'react-helmet';"
},
{
"path": "packages/vulcan-core/lib/modules/components/HelloWorld.jsx",
"chars": 1703,
"preview": "import { registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nc"
},
{
"path": "packages/vulcan-core/lib/modules/components/Icon.jsx",
"chars": 520,
"preview": "import { registerComponent, Utils } from 'meteor/vulcan:lib';\nimport React from 'react';\n\nconst Icon = ({ name, iconClas"
},
{
"path": "packages/vulcan-core/lib/modules/components/Layout.jsx",
"chars": 277,
"preview": "import { Components, registerComponent } from 'meteor/vulcan:lib';\nimport React from 'react';\n\nconst Layout = ({children"
}
]
// ... and 700 more files (download for full content)
About this extraction
This page contains the full source code of the VulcanJS/Vulcan GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 900 files (1.9 MB), approximately 553.3k tokens, and a symbol index with 494 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.