├── .babelrc
├── .env.example
├── .eslintignore
├── .eslintrc
├── .gitignore
├── LICENSE
├── README.md
├── app.json
├── bucket.json
├── components
├── views
│ ├── about-us.js
│ ├── blog.js
│ ├── contact.js
│ ├── faq.js
│ ├── home.js
│ ├── page.js
│ ├── partials
│ │ ├── footer.js
│ │ └── header.js
│ └── search.js
└── widgets
│ └── Meta
│ └── index.js
├── config
└── index.js
├── package-lock.json
├── package.json
├── pages
├── _document.js
├── about-us.js
├── blog.js
├── contact.js
├── faqs.js
├── generic.js
├── index.js
└── search.js
├── routes.js
├── screenshots
└── medical-professional.png
├── server.js
├── static
├── css
│ ├── custom.css
│ └── nprogress.css
└── js
│ ├── jquery.min.js
│ └── nprogress.js
└── utils
├── helperFuncs.js
└── request.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "development": {
4 | "presets": ["next/babel"],
5 | "plugins": [
6 | ["module-resolver", { "root": ["./"] }],
7 | ["inline-dotenv"]
8 | ]
9 | },
10 | "production": {
11 | "presets": ["next/babel"],
12 | "plugins": [
13 | ["module-resolver", { "root": ["./"] }],
14 | ["inline-dotenv"]
15 | ]
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | COSMIC_BUCKET=
2 | COSMIC_READ_KEY=
3 | COSMIC_WRITE_KEY=
4 | PORT=
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /.next
2 | /public/*
3 | /__tests__
4 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "plugins": [
4 | "react"
5 | ],
6 | "parserOptions": {
7 | "ecmaVersion": 6,
8 | "sourceType": "module",
9 | "ecmaFeatures": {
10 | "jsx": true
11 | }
12 | },
13 | "env": {
14 | "browser": true,
15 | "amd": true,
16 | "es6": true,
17 | "node": true,
18 | "mocha": true
19 | },
20 | "extends": [
21 | "airbnb",
22 | "eslint:recommended",
23 | "plugin:import/errors",
24 | "plugin:import/warnings"
25 | ],
26 | "rules": {
27 | "quotes": [ 1, "single" ],
28 | "no-undef": 1,
29 | "no-extra-semi": 1,
30 | "no-console": 1,
31 | "no-unused-vars": 1,
32 | "no-trailing-spaces": [1, { "skipBlankLines": true }],
33 | "no-unreachable": 1,
34 | "react/jsx-uses-react": 1,
35 | "react/jsx-uses-vars": 1,
36 | "react/jsx-filename-extension": 0,
37 | "react/prop-types": 0,
38 | "import/no-unresolved": [0, {"commonjs": true, "amd": true}],
39 | "import/named": 1,
40 | "import/namespace": 1,
41 | "import/default": 1,
42 | "import/export": 1,
43 | "import/no-extraneous-dependencies": 0,
44 | "import/extensions": 0
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /npm-debug.log
3 | /.next
4 | /coverage
5 | .env
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Cosmic JS
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Next.js Website Boilerplate
2 | 
3 | A website template that satisfies some common website requirements including dynamic pages, blog articles, author management, SEO ability, contact form and website search. Contributions welcome!
4 |
5 | ## Demo
6 | [Click here to view the demo](https://cosmicjs.com/apps/nextjs-website-boilerplate)
7 |
8 | > [Read how this app was built](https://cosmicjs.com/articles/nextjs-website-boilerplate-jeoea8au)
9 |
10 | ## Features
11 | 1. Fully responsive down to mobile w/ [Bootstrap](http://getbootstrap.com) frontend
12 | 2. SEO ready
13 | 3. A contact form that sends an email to your email(s) of choice and to [Cosmic](https://cosmicjs.com) for easy reference
14 | 4. Full-site search functionality
15 | 5. All content is easily managed in [Cosmic](https://cosmicjs.com) including pages, blog and contact info.
16 |
17 | Sign up for [Cosmic](https://cosmicjs.com) to install the demo content and deploy this website.
18 |
19 | ## Getting Started
20 |
21 | ```bash
22 | git clone https://github.com/cosmicjs/nextjs-website-boilerplate
23 | cd nextjs-website-boilerplate
24 | npm install
25 |
26 | # Run in development and serve at localhost:3000
27 | npm run dev
28 |
29 | # build for production
30 | npm run build
31 |
32 | # Run in production and serve at localhost:3000
33 | COSMIC_BUCKET=your-bucket-slug npm start
34 | ```
35 | Import the `bucket.json` file into your Cosmic Bucket. To do this go to Your Bucket > Settings > Import / Export Data.
36 |
37 | ## Contact form setup
38 | Install and deploy the SendGrid Email Function.
39 |
40 |
41 |
42 | The contact form on the contact page uses the [SendGrid Email Function](https://github.com/cosmicjs/send-email-function) to send emails. To deploy your email function go to Your Bucket > Settings > Functions. Install and deploy the SendGrid Function. You will need an account with [SendGrid](https://sendgrid.com/) to add your SendGrid API key.
43 |
44 | ### Add the SendGrid Function Endpoint
45 |
46 | #### in development
47 | Go to `config/index.js` and edit `SENDGRID_FUNCTION_ENDPOINT` to manually add the URL for testing.
48 |
49 | #### in production
50 | If you are using the Web Hosting option that's included with every Bucket:
51 | 1. Go to Your Bucket > Settings > Web Hosting
52 | 2. Deploy your Website
53 | 3. Click 'Set Environment Variables' tab and add the SendGrid Function endpoint:
54 |
55 | Key | Value
56 | --- | ---
57 | | SENDGRID_FUNCTION_ENDPOINT | https://your-lambda-endpoint.amazonaws.com/dev/send-email
58 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Next.js Website Boilerplate",
3 | "description": "A website boilerplate built using Next.js and Cosmic JS",
4 | "repository": "https://github.com/cosmicjs/nextjs-website-boilerplate",
5 | "logo": "https://cosmicjs.com/images/logo.svg",
6 | "keywords": ["react", "next.js", "website"]
7 | }
8 |
--------------------------------------------------------------------------------
/bucket.json:
--------------------------------------------------------------------------------
1 | {"bucket":{"_id":"5a9d3846031ee26c33735b6e","slug":"eb179f60-2070-11e8-89e4-db7642b320e6","title":"medical-professional","object_types":[{"title":"Globals","slug":"globals","singular":"Global","metafields":[],"options":{"slug_field":1,"content_editor":0,"add_metafields":0,"metafields_title":0,"metafields_key":0},"localization":false,"locales":""},{"title":"Pages","slug":"pages","singular":"Page","metafields":[{"edit":1,"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":null}],"options":{"slug_field":1,"content_editor":1,"add_metafields":0,"metafields_title":0,"metafields_key":0},"localization":false,"locales":""},{"title":"Blogs","slug":"blogs","singular":"Blog","metafields":[{"value":"","key":"hero","title":"Hero","type":"file","children":false},{"edit":1,"value":"","key":"teaser","title":"Teaser","type":"textarea","children":null},{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false},{"object_type":"authors","value":"","key":"author","title":"Author","type":"object","children":false}],"options":{"slug_field":1,"content_editor":1,"add_metafields":0,"metafields_title":0,"metafields_key":0},"localization":false,"locales":""},{"title":"Form Submissions","slug":"form-submissions","singular":"Form Submission","metafields":[],"options":{"slug_field":1,"content_editor":1,"add_metafields":0,"metafields_title":0,"metafields_key":0},"localization":false,"locales":""},{"title":"Authors","slug":"authors","singular":"Author","metafields":[{"edit":1,"value":"","key":"image","title":"Image","type":"file","children":null}],"options":{"slug_field":1,"content_editor":1,"add_metafields":1,"metafields_title":1,"metafields_key":1}}],"links":[],"objects":[{"_id":"5a9d384785e79769d995433a","old_id":"5794f5af1d63ddee30001300","bucket":"5a9d3846031ee26c33735b6e","slug":"chad-henly","title":"Chad Henly","content":"","metafields":[{"value":"2c9b41c0-52a6-11e6-a069-734be6eb1ef6-doc.png","key":"image","title":"Image","type":"file","children":false}],"type_slug":"authors","created":"2018-03-05T12:29:59.574Z","created_at":"2018-03-05T12:29:59.574Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":0,"status":"published"},{"_id":"5a9d384785e79769d9954339","old_id":"5794f5af1d63ddee30001302","bucket":"5a9d3846031ee26c33735b6e","slug":"contact-form","title":"Contact Form","content":"","metafields":[{"edit":1,"value":"tony@cosmicjs.com","key":"to","title":"To","type":"text","children":null},{"edit":1,"value":"A new form submission on your website","key":"subject","title":"Subject","type":"text","children":null}],"type_slug":"globals","created":"2018-03-05T12:29:59.573Z","created_at":"2018-03-05T12:29:59.573Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0},"order":0,"status":null},{"_id":"5a9d384785e79769d995433b","old_id":"579525e11d63ddee300017cf","bucket":"5a9d3846031ee26c33735b6e","slug":"a-very-important-topic-your-health","title":"A Very Important Topic: Your Health","content":"
Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus. Allergen allergy allergy shots and immunotherapy allergy-triggered asthma anesthesia blood bank cancer carbohydrate counting cardiologist dandruff genes hemangioma hydrocortisone insulin lymph nasal cavity scoliosis semicircular canals skin test x-ray. Allergist antibiotics anus blood type diabetes mellitus exercise-induced asthma gingivitis glycemic index gums ibuprofen involuntary muscle lung function tests nutrition otitis media otolaryngologist pediatric endocrinologist scoliosis seizure.
Alignment astigmatism astringents blood bank blood type bronchial tubes cancer cerumen dermatologist emotions enuresis fracture heredity humidifier keratin lacrimal glands optician optometrist peak flow meter pneumonia rx scar sphenopalatineganglioneuralgia stethoscope urticaria vertebrae virus whitehead. Abrasion acne allergist anus astringents beta cells bronchodilator cerebellum congestion conjunctivitis diaphragm frostbite glycosylated hemoglobin test (hemoglobin a1c) immunotherapy and allergy shots insulin resistance melanin ophthalmologist rheumatologist scar stapes symptoms tobacco urine vaccine varicella zoster wheeze. Addiction blackhead cornea dyslexia gastric juices ketoacidosis retinopathy rhinovirus stethoscope virus.
Airway obstruction alcoholism alignment amputate anus bone marrow braces bronchodilator caries ear canal enuresis farsighted frenulum frostbite hydrogen peroxide hyperopia involuntary muscle iv ketones larynx microscope nutrition perspiration pinna social worker ultrasound urinalysis violence virus. Alignment anesthesia body type bone marrow chromosomes corticosteroids dehydration dna exercise-induced asthma external otitis fats frostbite gastroenteritis genes gluteus maximus hormone hyperglycemia influenza malocclusion petroleum jelly prosthesis sclera taste buds triggers. Abrasion conjunctivitis dust mites dyslexia genes genetics growth hormone laparoscopy nearsighted optician saliva skin test social worker strep screen triggers.
Cancer cardiologist chromosomes cone ct scan or cat scan dust mites glycogen hormone icu immunizations lymph node mucus pediatric endocrinologist polyphagia saliva stress sulfites tinnitus triggers. Biopsy bronchial tubes bronchoconstriction certified diabetes educators (cdes) dandruff diarrhea enamel er fluoride gingivitis icu lymph node occupational therapy oncologist optometrist rheumatologist tobacco triggers ultrasound urticaria vaccine vertebrae. Allergen allergy shots and immunotherapy body type bronchoconstriction bruise dermatologist diagnosis eczema exercise-induced asthma gastric juices genetics gluteus maximus hydrogen peroxide immunizations insulin lymph node nebulizer sphenopalatineganglioneuralgia spirometer stress suture umbilical cord.
Carbohydrate counting ct scan or cat scan diagnosis er genes humidifier ketoacidosis night guard pupil retractions sulfites virus. Allergen antihistamines braces cerebellum chronic congestion decongestants eustachian tube floss genetics hematoma hydrogen peroxide hyperopia lacrimal glands optometrist sebaceous glands skin test social worker sphenopalatineganglioneuralgia suture urinalysis urticaria violence. Antibiotics arteries and veins eeg (electroencephalogram) gastroenteritis hyperopia ibuprofen insulin injections ketones laxatives nephropathy nervous system rhinovirus stapes taste buds. Bruxism cardiologist cornea heredity insulin resistance involuntary muscle occupational therapist optician pulmonologist skin test.
","metafields":[{"value":"71f30d70-52d3-11e6-a069-734be6eb1ef6-shutterstock_208763188.png","key":"hero","title":"Hero","type":"file","children":false},{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false},{"object_type":"authors","value":"5a9d384785e79769d995433a","key":"author","title":"Author","type":"object","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"teaser","title":"Teaser","type":"textarea","children":false}],"type_slug":"blogs","created":"2018-03-05T12:29:59.575Z","created_at":"2018-03-05T12:29:59.575Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":0,"status":"published"},{"_id":"5a9d384785e79769d995433c","old_id":"5794f5af1d63ddee300012ff","bucket":"5a9d3846031ee26c33735b6e","slug":"new-york-medical-services","title":"New York Medical Services","content":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus. Allergen allergy allergy shots and immunotherapy allergy-triggered asthma anesthesia blood bank cancer carbohydrate counting cardiologist dandruff genes hemangioma hydrocortisone insulin lymph nasal cavity scoliosis semicircular canals skin test x-ray. Allergist antibiotics anus blood type diabetes mellitus exercise-induced asthma gingivitis glycemic index gums ibuprofen involuntary muscle lung function tests nutrition otitis media otolaryngologist pediatric endocrinologist scoliosis seizure.
Alignment astigmatism astringents blood bank blood type bronchial tubes cancer cerumen dermatologist emotions enuresis fracture heredity humidifier keratin lacrimal glands optician optometrist peak flow meter pneumonia rx scar sphenopalatineganglioneuralgia stethoscope urticaria vertebrae virus whitehead. Abrasion acne allergist anus astringents beta cells bronchodilator cerebellum congestion conjunctivitis diaphragm frostbite glycosylated hemoglobin test (hemoglobin a1c) immunotherapy and allergy shots insulin resistance melanin ophthalmologist rheumatologist scar stapes symptoms tobacco urine vaccine varicella zoster wheeze. Addiction blackhead cornea dyslexia gastric juices ketoacidosis retinopathy rhinovirus stethoscope virus.
Airway obstruction alcoholism alignment amputate anus bone marrow braces bronchodilator caries ear canal enuresis farsighted frenulum frostbite hydrogen peroxide hyperopia involuntary muscle iv ketones larynx microscope nutrition perspiration pinna social worker ultrasound urinalysis violence virus. Alignment anesthesia body type bone marrow chromosomes corticosteroids dehydration dna exercise-induced asthma external otitis fats frostbite gastroenteritis genes gluteus maximus hormone hyperglycemia influenza malocclusion petroleum jelly prosthesis sclera taste buds triggers. Abrasion conjunctivitis dust mites dyslexia genes genetics growth hormone laparoscopy nearsighted optician saliva skin test social worker strep screen triggers.
Cancer cardiologist chromosomes cone ct scan or cat scan dust mites glycogen hormone icu immunizations lymph node mucus pediatric endocrinologist polyphagia saliva stress sulfites tinnitus triggers. Biopsy bronchial tubes bronchoconstriction certified diabetes educators (cdes) dandruff diarrhea enamel er fluoride gingivitis icu lymph node occupational therapy oncologist optometrist rheumatologist tobacco triggers ultrasound urticaria vaccine vertebrae. Allergen allergy shots and immunotherapy body type bronchoconstriction bruise dermatologist diagnosis eczema exercise-induced asthma gastric juices genetics gluteus maximus hydrogen peroxide immunizations insulin lymph node nebulizer sphenopalatineganglioneuralgia spirometer stress suture umbilical cord.
Carbohydrate counting ct scan or cat scan diagnosis er genes humidifier ketoacidosis night guard pupil retractions sulfites virus. Allergen antihistamines braces cerebellum chronic congestion decongestants eustachian tube floss genetics hematoma hydrogen peroxide hyperopia lacrimal glands optometrist sebaceous glands skin test social worker sphenopalatineganglioneuralgia suture urinalysis urticaria violence. Antibiotics arteries and veins eeg (electroencephalogram) gastroenteritis hyperopia ibuprofen insulin injections ketones laxatives nephropathy nervous system rhinovirus stapes taste buds. Bruxism cardiologist cornea heredity insulin resistance involuntary muscle occupational therapist optician pulmonologist skin test.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.577Z","created_at":"2018-03-05T12:29:59.577Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":0,"status":"published"},{"_id":"5a9d384785e79769d995433d","old_id":"5794f5af1d63ddee30001303","bucket":"5a9d3846031ee26c33735b6e","slug":"los-angeles-medical-services","title":"Los Angeles Medical Services","content":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus. Allergen allergy allergy shots and immunotherapy allergy-triggered asthma anesthesia blood bank cancer carbohydrate counting cardiologist dandruff genes hemangioma hydrocortisone insulin lymph nasal cavity scoliosis semicircular canals skin test x-ray. Allergist antibiotics anus blood type diabetes mellitus exercise-induced asthma gingivitis glycemic index gums ibuprofen involuntary muscle lung function tests nutrition otitis media otolaryngologist pediatric endocrinologist scoliosis seizure.
Alignment astigmatism astringents blood bank blood type bronchial tubes cancer cerumen dermatologist emotions enuresis fracture heredity humidifier keratin lacrimal glands optician optometrist peak flow meter pneumonia rx scar sphenopalatineganglioneuralgia stethoscope urticaria vertebrae virus whitehead. Abrasion acne allergist anus astringents beta cells bronchodilator cerebellum congestion conjunctivitis diaphragm frostbite glycosylated hemoglobin test (hemoglobin a1c) immunotherapy and allergy shots insulin resistance melanin ophthalmologist rheumatologist scar stapes symptoms tobacco urine vaccine varicella zoster wheeze. Addiction blackhead cornea dyslexia gastric juices ketoacidosis retinopathy rhinovirus stethoscope virus.
Airway obstruction alcoholism alignment amputate anus bone marrow braces bronchodilator caries ear canal enuresis farsighted frenulum frostbite hydrogen peroxide hyperopia involuntary muscle iv ketones larynx microscope nutrition perspiration pinna social worker ultrasound urinalysis violence virus. Alignment anesthesia body type bone marrow chromosomes corticosteroids dehydration dna exercise-induced asthma external otitis fats frostbite gastroenteritis genes gluteus maximus hormone hyperglycemia influenza malocclusion petroleum jelly prosthesis sclera taste buds triggers. Abrasion conjunctivitis dust mites dyslexia genes genetics growth hormone laparoscopy nearsighted optician saliva skin test social worker strep screen triggers.
Cancer cardiologist chromosomes cone ct scan or cat scan dust mites glycogen hormone icu immunizations lymph node mucus pediatric endocrinologist polyphagia saliva stress sulfites tinnitus triggers. Biopsy bronchial tubes bronchoconstriction certified diabetes educators (cdes) dandruff diarrhea enamel er fluoride gingivitis icu lymph node occupational therapy oncologist optometrist rheumatologist tobacco triggers ultrasound urticaria vaccine vertebrae. Allergen allergy shots and immunotherapy body type bronchoconstriction bruise dermatologist diagnosis eczema exercise-induced asthma gastric juices genetics gluteus maximus hydrogen peroxide immunizations insulin lymph node nebulizer sphenopalatineganglioneuralgia spirometer stress suture umbilical cord.
Carbohydrate counting ct scan or cat scan diagnosis er genes humidifier ketoacidosis night guard pupil retractions sulfites virus. Allergen antihistamines braces cerebellum chronic congestion decongestants eustachian tube floss genetics hematoma hydrogen peroxide hyperopia lacrimal glands optometrist sebaceous glands skin test social worker sphenopalatineganglioneuralgia suture urinalysis urticaria violence. Antibiotics arteries and veins eeg (electroencephalogram) gastroenteritis hyperopia ibuprofen insulin injections ketones laxatives nephropathy nervous system rhinovirus stapes taste buds. Bruxism cardiologist cornea heredity insulin resistance involuntary muscle occupational therapist optician pulmonologist skin test.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.578Z","created_at":"2018-03-05T12:29:59.578Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":1,"status":"published"},{"_id":"5a9d384785e79769d995433e","old_id":"5794f5af1d63ddee30001306","bucket":"5a9d3846031ee26c33735b6e","slug":"chicago-medical-services","title":"Chicago Medical Services","content":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus. Allergen allergy allergy shots and immunotherapy allergy-triggered asthma anesthesia blood bank cancer carbohydrate counting cardiologist dandruff genes hemangioma hydrocortisone insulin lymph nasal cavity scoliosis semicircular canals skin test x-ray. Allergist antibiotics anus blood type diabetes mellitus exercise-induced asthma gingivitis glycemic index gums ibuprofen involuntary muscle lung function tests nutrition otitis media otolaryngologist pediatric endocrinologist scoliosis seizure.
Alignment astigmatism astringents blood bank blood type bronchial tubes cancer cerumen dermatologist emotions enuresis fracture heredity humidifier keratin lacrimal glands optician optometrist peak flow meter pneumonia rx scar sphenopalatineganglioneuralgia stethoscope urticaria vertebrae virus whitehead. Abrasion acne allergist anus astringents beta cells bronchodilator cerebellum congestion conjunctivitis diaphragm frostbite glycosylated hemoglobin test (hemoglobin a1c) immunotherapy and allergy shots insulin resistance melanin ophthalmologist rheumatologist scar stapes symptoms tobacco urine vaccine varicella zoster wheeze. Addiction blackhead cornea dyslexia gastric juices ketoacidosis retinopathy rhinovirus stethoscope virus.
Airway obstruction alcoholism alignment amputate anus bone marrow braces bronchodilator caries ear canal enuresis farsighted frenulum frostbite hydrogen peroxide hyperopia involuntary muscle iv ketones larynx microscope nutrition perspiration pinna social worker ultrasound urinalysis violence virus. Alignment anesthesia body type bone marrow chromosomes corticosteroids dehydration dna exercise-induced asthma external otitis fats frostbite gastroenteritis genes gluteus maximus hormone hyperglycemia influenza malocclusion petroleum jelly prosthesis sclera taste buds triggers. Abrasion conjunctivitis dust mites dyslexia genes genetics growth hormone laparoscopy nearsighted optician saliva skin test social worker strep screen triggers.
Cancer cardiologist chromosomes cone ct scan or cat scan dust mites glycogen hormone icu immunizations lymph node mucus pediatric endocrinologist polyphagia saliva stress sulfites tinnitus triggers. Biopsy bronchial tubes bronchoconstriction certified diabetes educators (cdes) dandruff diarrhea enamel er fluoride gingivitis icu lymph node occupational therapy oncologist optometrist rheumatologist tobacco triggers ultrasound urticaria vaccine vertebrae. Allergen allergy shots and immunotherapy body type bronchoconstriction bruise dermatologist diagnosis eczema exercise-induced asthma gastric juices genetics gluteus maximus hydrogen peroxide immunizations insulin lymph node nebulizer sphenopalatineganglioneuralgia spirometer stress suture umbilical cord.
Carbohydrate counting ct scan or cat scan diagnosis er genes humidifier ketoacidosis night guard pupil retractions sulfites virus. Allergen antihistamines braces cerebellum chronic congestion decongestants eustachian tube floss genetics hematoma hydrogen peroxide hyperopia lacrimal glands optometrist sebaceous glands skin test social worker sphenopalatineganglioneuralgia suture urinalysis urticaria violence. Antibiotics arteries and veins eeg (electroencephalogram) gastroenteritis hyperopia ibuprofen insulin injections ketones laxatives nephropathy nervous system rhinovirus stapes taste buds. Bruxism cardiologist cornea heredity insulin resistance involuntary muscle occupational therapist optician pulmonologist skin test.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.579Z","created_at":"2018-03-05T12:29:59.579Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":2,"status":"published"},{"_id":"5a9d384785e79769d995433f","old_id":"5794f5af1d63ddee30001308","bucket":"5a9d3846031ee26c33735b6e","slug":"header","title":"Header","content":"","metafields":[{"value":"991f6b90-51c1-11e6-9e30-fb7e1b19bdc0-Screen Shot 2016-07-24 at 12.10.24 PM.png","key":"logo","title":"Logo","type":"file","children":false},{"value":"Medicenter | Your one-stop shop for all medical needs","key":"site_title","title":"Site Title","type":"text","children":false},{"value":"0713f190-51ca-11e6-9e30-fb7e1b19bdc0-Screen Shot 2016-07-24 at 1.11.05 PM.png","key":"favicon","title":"Favicon","type":"file","children":false}],"type_slug":"globals","created":"2018-03-05T12:29:59.580Z","created_at":"2018-03-05T12:29:59.580Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0,"add_metafields":0,"metafields_title":0,"metafields_key":0},"order":3,"status":"published"},{"_id":"5a9d384785e79769d9954340","old_id":"5794f5af1d63ddee30001309","bucket":"5a9d3846031ee26c33735b6e","slug":"contact","title":"Contact Us","content":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false},{"value":"Success! A rep from our office will be in touch soon!","key":"contact_form_success_message","title":"Contact Form Success Message","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.581Z","created_at":"2018-03-05T12:29:59.581Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":3,"status":"published"},{"_id":"5a9d384785e79769d9954341","old_id":"579528151d63ddee3000183b","bucket":"5a9d3846031ee26c33735b6e","slug":"nav","title":"Nav","content":"","metafields":[{"value":"/","key":"home","title":"Home","type":"text","children":false},{"value":"/about-us","key":"about_us","title":"About Us","type":"text","children":false},{"value":"","key":"services","title":"Services","type":"text","children":[{"value":"/deciding-on-care","key":"deciding_on_care","title":"Deciding on Care","type":"text","children":false},{"value":"/specialty-centers-and-programs","key":"specialty_centers_and_programs","title":"Specialty Centers and Programs","type":"text","children":false}]},{"value":"","key":"areas_served","title":"Areas Served","type":"text","children":[{"value":"new-york-medical-services","key":"new_york","title":"New York","type":"text","children":false},{"value":"los-angeles-medical-services","key":"los_angeles","title":"Los Angeles","type":"text","children":false},{"value":"chicago-medical-services","key":"chicago","title":"Chicago","type":"text","children":false}]},{"value":"/blog","key":"blog","title":"Blog","type":"text","children":false},{"value":"/faqs","key":"faqs","title":"FAQs","type":"text","children":false},{"value":"/contact","key":"contact_us","title":"Contact Us","type":"text","children":false},{"value":"/search","key":"search","title":"Search","type":"text","children":false}],"type_slug":"globals","created":"2018-03-05T12:29:59.582Z","created_at":"2018-03-05T12:29:59.582Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0},"order":4,"status":"published"},{"_id":"5a9d384785e79769d9954342","old_id":"5794f5af1d63ddee3000130b","bucket":"5a9d3846031ee26c33735b6e","slug":"faqs","title":"FAQs","content":"","metafields":[{"value":"","key":"faqs","title":"FAQs","type":"text","children":[{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"how_long_does_a_procedure_take","title":"How long does a procedure take?","type":"textarea","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"what_insurance_providers_do_you_accept","title":"What insurance providers do you accept?","type":"textarea","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"how_do_i_know_if_i_need_treatment","title":"How do I know if I need treatment?","type":"textarea","children":false}]},{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.583Z","created_at":"2018-03-05T12:29:59.583Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0,"add_metafields":0,"metafields_title":0,"metafields_key":0},"order":4,"status":"published"},{"_id":"5a9d384785e79769d9954343","old_id":"5794f5af1d63ddee3000130d","bucket":"5a9d3846031ee26c33735b6e","slug":"blog","title":"Blog","content":"","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.584Z","created_at":"2018-03-05T12:29:59.584Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":5,"status":null},{"_id":"5a9d384785e79769d9954344","old_id":"5794f5af1d63ddee3000130c","bucket":"5a9d3846031ee26c33735b6e","slug":"social","title":"Social","content":"","metafields":[{"value":"https://www.facebook.com","key":"facebook","title":"Facebook","type":"text","children":false},{"value":"https://twitter.com","key":"twitter","title":"Twitter","type":"text","children":false},{"value":"https://plus.google.com","key":"google_plus","title":"Google Plus","type":"text","children":false}],"type_slug":"globals","created":"2018-03-05T12:29:59.585Z","created_at":"2018-03-05T12:29:59.585Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0},"order":5,"status":"published"},{"_id":"5a9d384785e79769d9954345","old_id":"5794f5af1d63ddee3000130f","bucket":"5a9d3846031ee26c33735b6e","slug":"search","title":"Search","content":"","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.586Z","created_at":"2018-03-05T12:29:59.586Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":6,"status":null},{"_id":"5a9d384785e79769d9954346","old_id":"5794f5af1d63ddee3000130e","bucket":"5a9d3846031ee26c33735b6e","slug":"contact-info","title":"Contact Info","content":"","metafields":[{"value":"555-555-5555","key":"phone","title":"Phone","type":"text","children":false},{"value":"medical-pro@untitled.tld","key":"email","title":"Email","type":"text","children":false},{"value":"12345 Medical Rd Everywhere, USA
","key":"address","title":"Address","type":"html-textarea","children":false}],"type_slug":"globals","created":"2018-03-05T12:29:59.587Z","created_at":"2018-03-05T12:29:59.587Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0},"order":6,"status":"published"},{"_id":"5a9d384785e79769d9954347","old_id":"5794f5af1d63ddee30001310","bucket":"5a9d3846031ee26c33735b6e","slug":"footer","title":"Footer","content":"","metafields":[{"value":"Medicenter","key":"company_title","title":"Company Title","type":"text","children":false}],"type_slug":"globals","created":"2018-03-05T12:29:59.588Z","created_at":"2018-03-05T12:29:59.588Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":0},"order":7,"status":"published"},{"_id":"5a9d384785e79769d9954348","old_id":"5794f5af1d63ddee30001311","bucket":"5a9d3846031ee26c33735b6e","slug":"home","title":"Home","content":"","metafields":[{"value":"Medicenter Cares for You","key":"headline","title":"Headline","type":"text","children":false},{"value":"We offer services for any patient that needs to get well","key":"subheadline","title":"Subheadline","type":"text","children":false},{"value":"","key":"carousel","title":"Carousel","type":"text","children":[{"value":"77b3c3c0-52ca-11e6-a069-734be6eb1ef6-shutterstock_218199787.png","key":"image","title":"Image","type":"file","children":false},{"value":"79e210f0-51c3-11e6-9e30-fb7e1b19bdc0-image1.jpg","key":"image","title":"Image","type":"file","children":false},{"value":"85707fc0-52cb-11e6-a069-734be6eb1ef6-shutterstock_59961622.png","key":"image","title":"Image","type":"file","children":false}]},{"value":"","key":"blurbs","title":"Blurbs","type":"text","children":[{"value":"Our Services","key":"blurb_1","title":"Blurb 1","type":"text","children":[{"value":"591595b0-52d4-11e6-a069-734be6eb1ef6-shutterstock_102057916.png","key":"image","title":"Image","type":"file","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"blurb_content","title":"Blurb Content","type":"textarea","children":false}]},{"value":"Patient Care","key":"blurb_1","title":"Blurb 1","type":"text","children":[{"value":"3dd962e0-52d4-11e6-a069-734be6eb1ef6-shutterstock_136759886.png","key":"image","title":"Image","type":"file","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"blurb_content","title":"Blurb Content","type":"textarea","children":false}]},{"value":"Patient Reviews","key":"blurb_1","title":"Blurb 1","type":"text","children":[{"value":"49f70e80-52cd-11e6-a069-734be6eb1ef6-shutterstock_270747038.png","key":"image","title":"Image","type":"file","children":false},{"value":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus.","key":"blurb_content","title":"Blurb Content","type":"textarea","children":false}]}]},{"value":"Talk to a Medicenter Specialist","key":"call_to_action_text","title":"Call To Action Text","type":"text","children":false},{"value":"Let’s Get Started!","key":"call_to_action_subtext","title":"Call To Action Subtext","type":"text","children":false},{"value":"Contact Us","key":"call_to_action_button_text","title":"Call To Action Button Text","type":"text","children":false},{"value":"/contact","key":"call_to_action_button_link","title":"Call To Action Button Link","type":"text","children":false},{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.589Z","created_at":"2018-03-05T12:29:59.589Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":8,"status":"published"},{"_id":"5a9d384785e79769d9954349","old_id":"5794f5af1d63ddee30001312","bucket":"5a9d3846031ee26c33735b6e","slug":"specialty-centers-and-programs","title":"Specialty Centers and Programs","content":"Abdominals acne addiction allergist biopsy blackhead body type bowels canine teeth constipation cornea emotions exercise-induced asthma gastric juices grieving icu immunizations larynx melanin neuropathy operation ophthalmologist semicircular canals sphenopalatineganglioneuralgia stethoscope stress tinnitus violence. Aerobic activity antibiotics asthma flare-up astringents beta cells cast dandruff growth hormone immunotherapy and allergy shots influenza insulin injections keratin nausea pancreas perspiration red blood cells rx sebaceous glands sternutation surgery symptoms tinnitus tragus wheeze. Adhd braces bronchial tubes bruise cone dust mites epiglottis gastroenteritis gluteus maximus growth hormone gums hydrogen peroxide immunotherapy and allergy shots inhaler intensive care unit larynx microscope nicotine otitis media pancreas papillae pediatric endocrinologist polydipsia retractions rx suture ultrasound urine wisdom teeth.
Allergy shots and immunotherapy astringents blood glucose meter cerebral cortex chemotherapy diabetes mellitus eeg (electroencephalogram) genes hematoma immune system night guard oncologist otitis media rem rx. Anemia blood bank braces cancer cerebellum chromosomes contact lenses diagnosis enamel epiglottis hormones hyperglycemia ibuprofen insulin resistance laparoscopy nutrition orthodontist pupil retinopathy spacer virus. Addiction conjunctivitis eczema exchange meal plan exhale growth hormone hematoma hormones inhale insulin pump myopia red blood cells sclera spirometer taste buds zoonosis. Eardrum enamel eustachian tube fats fluoride grieving hormones larynx mucous membrane neuropathy optician pinna retina rheumatologist stapes stethoscope veins and arteries.
Allergy antihistamines bacteria bolus braces cerebral cortex diarrhea dislocation enamel epidermis exercise-induced asthma fluoride heredity perspiration polyphagia retina saliva tragus urticaria. Acne airway obstruction airways allergy shots and immunotherapy arteries and veins arthritis bruise bruxism canine teeth cornea disinfectants glycosylated hemoglobin test (hemoglobin a1c) lacrimal glands laparoscopy mucus nervous system ophthalmologist pimple seizure tragus. Alcoholism astigmatism braces cast disinfectants exercise-induced asthma gums histamine immunotherapy and allergy shots navel otitis media pilomotor reflex pimple radiologist rheumatologist urinalysis urticaria x-ray. Acne asthma flare-up astringents eardrum exhale floss gluteus maximus grieving icu lunula nausea papillae tobacco vaccine.
Addiction airway obstruction animal dander asthma flare-up blood glucose level braces constipation dna ketones malocclusion pediatric endocrinologist pulse rescue medications tobacco whitehead x-ray. Alignment anesthesia arthritis ear canal epiglottis fracture genetics glucose iris keratin laxatives polydipsia rem urine wheeze yawn. Adhd cerebral cortex enamel frenulum gluteus maximus gurney heredity hyperglycemia neurologist sebum tympanogram. Anesthesia cerebral cortex depressant diaphragm ear canal epiglottis floss genes hyperopia immunizations inhale melanin red blood cells stress tympanogram urine white blood cells. Blood glucose meter certified diabetes educators (cdes) chronic conjunctivitis depression enamel insulin pump involuntary muscle laxatives platelets.
Acne addiction antibiotics bolus cancer cardiologist certified diabetes educators (cdes) conjunctivitis decongestants dietitian dna emotions exchange meal plan gluteus maximus islet cells larynx lunula prosthesis red blood cells rescue medications retractions rheumatologist sebaceous glands semicircular canals sphenopalatineganglioneuralgia suture tobacco. Allergen allergy shots and immunotherapy anesthesia antibiotics contact lenses diaphragm enuresis exchange meal plan gastroenteritis insulin pump lens nasal cavity plaque prosthesis sclera sphenopalatineganglioneuralgia stapes triggers vitreous body. Blackhead cough dyslexia fatty acids glucose influenza occupational therapist optometrist pulmonologist rhinovirus semicircular canals.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.590Z","created_at":"2018-03-05T12:29:59.590Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":9,"status":"published"},{"_id":"5a9d384785e79769d995434a","old_id":"5794f5af1d63ddee30001313","bucket":"5a9d3846031ee26c33735b6e","slug":"deciding-on-care","title":"Deciding on Care","content":"Abdominals acne addiction allergist biopsy blackhead body type bowels canine teeth constipation cornea emotions exercise-induced asthma gastric juices grieving icu immunizations larynx melanin neuropathy operation ophthalmologist semicircular canals sphenopalatineganglioneuralgia stethoscope stress tinnitus violence. Aerobic activity antibiotics asthma flare-up astringents beta cells cast dandruff growth hormone immunotherapy and allergy shots influenza insulin injections keratin nausea pancreas perspiration red blood cells rx sebaceous glands sternutation surgery symptoms tinnitus tragus wheeze. Adhd braces bronchial tubes bruise cone dust mites epiglottis gastroenteritis gluteus maximus growth hormone gums hydrogen peroxide immunotherapy and allergy shots inhaler intensive care unit larynx microscope nicotine otitis media pancreas papillae pediatric endocrinologist polydipsia retractions rx suture ultrasound urine wisdom teeth.
Allergy shots and immunotherapy astringents blood glucose meter cerebral cortex chemotherapy diabetes mellitus eeg (electroencephalogram) genes hematoma immune system night guard oncologist otitis media rem rx. Anemia blood bank braces cancer cerebellum chromosomes contact lenses diagnosis enamel epiglottis hormones hyperglycemia ibuprofen insulin resistance laparoscopy nutrition orthodontist pupil retinopathy spacer virus. Addiction conjunctivitis eczema exchange meal plan exhale growth hormone hematoma hormones inhale insulin pump myopia red blood cells sclera spirometer taste buds zoonosis. Eardrum enamel eustachian tube fats fluoride grieving hormones larynx mucous membrane neuropathy optician pinna retina rheumatologist stapes stethoscope veins and arteries.
Allergy antihistamines bacteria bolus braces cerebral cortex diarrhea dislocation enamel epidermis exercise-induced asthma fluoride heredity perspiration polyphagia retina saliva tragus urticaria. Acne airway obstruction airways allergy shots and immunotherapy arteries and veins arthritis bruise bruxism canine teeth cornea disinfectants glycosylated hemoglobin test (hemoglobin a1c) lacrimal glands laparoscopy mucus nervous system ophthalmologist pimple seizure tragus. Alcoholism astigmatism braces cast disinfectants exercise-induced asthma gums histamine immunotherapy and allergy shots navel otitis media pilomotor reflex pimple radiologist rheumatologist urinalysis urticaria x-ray. Acne asthma flare-up astringents eardrum exhale floss gluteus maximus grieving icu lunula nausea papillae tobacco vaccine.
Addiction airway obstruction animal dander asthma flare-up blood glucose level braces constipation dna ketones malocclusion pediatric endocrinologist pulse rescue medications tobacco whitehead x-ray. Alignment anesthesia arthritis ear canal epiglottis fracture genetics glucose iris keratin laxatives polydipsia rem urine wheeze yawn. Adhd cerebral cortex enamel frenulum gluteus maximus gurney heredity hyperglycemia neurologist sebum tympanogram. Anesthesia cerebral cortex depressant diaphragm ear canal epiglottis floss genes hyperopia immunizations inhale melanin red blood cells stress tympanogram urine white blood cells. Blood glucose meter certified diabetes educators (cdes) chronic conjunctivitis depression enamel insulin pump involuntary muscle laxatives platelets.
Acne addiction antibiotics bolus cancer cardiologist certified diabetes educators (cdes) conjunctivitis decongestants dietitian dna emotions exchange meal plan gluteus maximus islet cells larynx lunula prosthesis red blood cells rescue medications retractions rheumatologist sebaceous glands semicircular canals sphenopalatineganglioneuralgia suture tobacco. Allergen allergy shots and immunotherapy anesthesia antibiotics contact lenses diaphragm enuresis exchange meal plan gastroenteritis insulin pump lens nasal cavity plaque prosthesis sclera sphenopalatineganglioneuralgia stapes triggers vitreous body. Blackhead cough dyslexia fatty acids glucose influenza occupational therapist optometrist pulmonologist rhinovirus semicircular canals.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.591Z","created_at":"2018-03-05T12:29:59.591Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":10,"status":"published"},{"_id":"5a9d384785e79769d995434b","old_id":"5794f5af1d63ddee30001314","bucket":"5a9d3846031ee26c33735b6e","slug":"about-us","title":"About us","content":"Aerobic activity alcoholism animal dander arthritis body type certified diabetes educators (cdes) diagnosis ear canal external otitis genes glucagon growth hormone hormone ibuprofen joints keratin ketones myopia nebulizer optometrist retina rheumatologist sternutation varicella zoster violence virus. Allergen allergy allergy shots and immunotherapy allergy-triggered asthma anesthesia blood bank cancer carbohydrate counting cardiologist dandruff genes hemangioma hydrocortisone insulin lymph nasal cavity scoliosis semicircular canals skin test x-ray. Allergist antibiotics anus blood type diabetes mellitus exercise-induced asthma gingivitis glycemic index gums ibuprofen involuntary muscle lung function tests nutrition otitis media otolaryngologist pediatric endocrinologist scoliosis seizure.
Alignment astigmatism astringents blood bank blood type bronchial tubes cancer cerumen dermatologist emotions enuresis fracture heredity humidifier keratin lacrimal glands optician optometrist peak flow meter pneumonia rx scar sphenopalatineganglioneuralgia stethoscope urticaria vertebrae virus whitehead. Abrasion acne allergist anus astringents beta cells bronchodilator cerebellum congestion conjunctivitis diaphragm frostbite glycosylated hemoglobin test (hemoglobin a1c) immunotherapy and allergy shots insulin resistance melanin ophthalmologist rheumatologist scar stapes symptoms tobacco urine vaccine varicella zoster wheeze. Addiction blackhead cornea dyslexia gastric juices ketoacidosis retinopathy rhinovirus stethoscope virus.
","metafields":[{"value":"This is the SEO description. Keep it short.","key":"seo_description","title":"SEO Description","type":"textarea","children":false}],"type_slug":"pages","created":"2018-03-05T12:29:59.592Z","created_at":"2018-03-05T12:29:59.592Z","user_id":"5982e43580aaa862200007ac","options":{"slug_field":1,"content_editor":1},"order":11,"status":"published"}],"media":[{"_id":"5a9d384785e79769d995434c","name":"991f6b90-51c1-11e6-9e30-fb7e1b19bdc0-Screen Shot 2016-07-24 at 12.10.24 PM.png","original_name":"Screen Shot 2016-07-24 at 12.10.24 PM.png","size":14453,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-24T17:11:02.091Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d995434d","name":"79e210f0-51c3-11e6-9e30-fb7e1b19bdc0-image1.jpg","original_name":"image1.jpg","size":582298,"type":"image/jpeg","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-24T17:24:28.732Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d995434e","name":"0713f190-51ca-11e6-9e30-fb7e1b19bdc0-Screen Shot 2016-07-24 at 1.11.05 PM.png","original_name":"Screen Shot 2016-07-24 at 1.11.05 PM.png","size":9067,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-24T18:11:22.539Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d995434f","name":"2c9b41c0-52a6-11e6-a069-734be6eb1ef6-doc.png","original_name":"doc.png","size":97142,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-25T20:27:14.838Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d9954350","name":"77b3c3c0-52ca-11e6-a069-734be6eb1ef6-shutterstock_218199787.png","original_name":"shutterstock_218199787.png","size":646705,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-26T00:47:02.672Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d9954351","name":"85707fc0-52cb-11e6-a069-734be6eb1ef6-shutterstock_59961622.png","original_name":"shutterstock_59961622.png","size":1671542,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-26T00:54:35.216Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d9954352","name":"71f30d70-52d3-11e6-a069-734be6eb1ef6-shutterstock_208763188.png","original_name":"shutterstock_208763188.png","size":1882015,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-26T01:51:18.517Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d9954353","name":"3dd962e0-52d4-11e6-a069-734be6eb1ef6-shutterstock_136759886.png","original_name":"shutterstock_136759886.png","size":1553225,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-26T01:57:00.579Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"},{"_id":"5a9d384785e79769d9954354","name":"591595b0-52d4-11e6-a069-734be6eb1ef6-shutterstock_102057916.png","original_name":"shutterstock_102057916.png","size":3303055,"type":"image/png","bucket":"5a9d3846031ee26c33735b6e","created":"2016-07-26T01:57:46.354Z","folder":null,"location":"https://s3-us-west-2.amazonaws.com/cosmicjs"}],"media_folders":[],"extensions":[],"thumbnail":null}}
--------------------------------------------------------------------------------
/components/views/about-us.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | class AboutUs extends React.Component {
3 | render() {
4 | const { aboutUs } = this.props;
5 | return (
6 |
7 |
8 |
{aboutUs.title}
9 |
10 |
11 |
12 | );
13 | }
14 | }
15 |
16 | export default AboutUs;
17 |
--------------------------------------------------------------------------------
/components/views/blog.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {Link} from 'routes';
3 | class Chicago extends React.Component {
4 | render() {
5 | const { blogs, blog } = this.props;
6 | return (
7 |
8 |
9 | {
10 | !!blog &&
11 |
12 |
13 |
{blog.title}
14 |
15 |
{blog.metadata.author.title} Wed, Sep 28 2016
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 | }
31 | {
32 | !blog && !!blogs && blogs.map((blog_item, index) =>
33 |
34 |
35 |
{blog_item.title}
36 |
37 |
{blog_item.metadata.author.title} Wed, Sep 28 2016
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
{blog_item.metadata.teaser}
50 |
51 |
Read more...
52 |
53 |
54 |
55 | )
56 | }
57 |
58 |
59 | );
60 | }
61 | }
62 |
63 | export default Chicago;
64 |
--------------------------------------------------------------------------------
/components/views/contact.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | class Faq extends React.Component {
3 | render() {
4 | const { contact, form, formValidation, submitForm, handleChange, formStatus } = this.props;
5 | return (
6 |
7 |
8 |
9 |
{contact.title}
10 |
11 |
12 |
13 |
14 | Name
15 |
16 |
17 |
18 | Email
19 |
20 |
21 |
22 | Phone (Optional)
23 |
24 |
25 |
26 | Message
27 |
28 |
29 | {
30 | formStatus.status == 'success' &&
31 |
32 | { formStatus.message }
33 |
34 | }
35 | {
36 | formStatus.status == 'error' &&
37 |
38 | { formStatus.message }
39 |
40 | }
41 |
submitForm()}>Submit
42 |
43 |
44 |
45 | );
46 | }
47 | }
48 |
49 | export default Faq;
50 |
--------------------------------------------------------------------------------
/components/views/faq.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | class Faq extends React.Component {
3 | render() {
4 | const { faq } = this.props;
5 | return (
6 |
7 |
{faq.title}
8 | {
9 | !!faq.faqs && faq.faqs.map((f, index) =>
10 |
11 |
{f.title}
12 |
{f.value}
13 |
14 | )
15 | }
16 |
17 | );
18 | }
19 | }
20 |
21 | export default Faq;
22 |
--------------------------------------------------------------------------------
/components/views/home.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Link from 'next/link'
3 | class Home extends React.Component {
4 | render() {
5 | const { home } = this.props;
6 | return (
7 |
8 |
33 |
34 |
35 |
36 |
{home.headline.value}
37 |
{home.subheadline.value}
38 |
39 |
40 |
41 |
42 | {
43 | !!home.blurbs && home.blurbs.map((blurb, index) =>
44 |
45 |
{blurb.value}
46 |
47 |
48 |
49 | {blurb.children[1].value}
50 |
51 |
52 | )
53 | }
54 |
55 |
56 |
64 |
65 |
66 | );
67 | }
68 | }
69 |
70 | export default Home;
71 |
--------------------------------------------------------------------------------
/components/views/page.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | class Page extends React.Component {
3 | render() {
4 | const { page } = this.props;
5 | return (
6 |
7 |
8 |
{page.title}
9 |
10 |
11 |
12 | );
13 | }
14 | }
15 |
16 | export default Page;
--------------------------------------------------------------------------------
/components/views/partials/footer.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * Header
4 | *
5 | */
6 |
7 | import React from 'react';
8 | import Link from 'next/link'
9 |
10 |
11 | class Header extends React.Component { // eslint-disable-line react/prefer-stateless-function
12 |
13 | render() {
14 | const { footer, contactInfo, social } = this.props;
15 | return (
16 |
17 |
60 |
61 | );
62 | }
63 | }
64 |
65 | export default Header;
66 |
--------------------------------------------------------------------------------
/components/views/partials/header.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * Header
4 | *
5 | */
6 |
7 | import React from 'react';
8 | import Link from 'next/link'
9 |
10 |
11 | class Header extends React.Component { // eslint-disable-line react/prefer-stateless-function
12 |
13 | render() {
14 | const { header, nav } = this.props;
15 | return (
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | {
34 | !!nav.metafields && nav.metafields.map((navElement,index) => (
35 |
36 | {
37 | !navElement.children &&
38 | {navElement.title}
39 | }
40 |
41 | {!!navElement.children && {navElement.title} }
42 | {!!navElement.children &&
43 | {
44 | navElement.children.map((child, index) =>
45 |
46 | {child.title}
47 |
48 | )
49 | }
50 | }
51 |
52 |
53 | ))
54 |
55 | }
56 |
57 |
58 |
59 |
60 |
61 | );
62 | }
63 | }
64 |
65 | export default Header;
66 |
--------------------------------------------------------------------------------
/components/views/search.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Link from 'next/link';
3 | class Search extends React.Component {
4 | render() {
5 | const { searchResult, searchField, handleChange } = this.props;
6 | return (
7 |
8 |
9 |
10 |
Search
11 |
12 |
13 |
14 |
15 | {
16 | !!searchResult && searchResult.map((s, index) =>
17 |
18 |
19 | {s.title}
20 |
21 |
22 | {s.teaser}
23 |
24 |
27 |
28 | )
29 | }
30 |
31 |
32 | );
33 | }
34 | }
35 |
36 | export default Search;
37 |
--------------------------------------------------------------------------------
/components/widgets/Meta/index.js:
--------------------------------------------------------------------------------
1 | import NProgress from 'nprogress';
2 | import Router from 'next/router';
3 |
4 | Router.onRouteChangeStart = () => NProgress.start()
5 | Router.onRouteChangeComplete = () => NProgress.done()
6 | Router.onRouteChangeError = () => NProgress.done()
7 |
8 | export default (props) => (
9 |
10 | {props.children}
11 |
12 | )
13 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | bucket: {
3 | slug: process.env.COSMIC_BUCKET || 'nextjs-medical-website',
4 | read_key: process.env.COSMIC_READ_KEY,
5 | write_key: process.env.COSMIC_WRITE_KEY
6 | },
7 | env: {
8 | SENDGRID_FUNCTION_ENDPOINT: process.env.SENDGRID_FUNCTION_ENDPOINT || 'https://xmzcgubnyi.execute-api.us-east-1.amazonaws.com/dev/send-email'
9 | }
10 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "medical-professional-next",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "dev": "babel-node server.js --presets es2015 stage-2",
8 | "build": "next build",
9 | "start": "babel-node server.js --presets es2015 stage-2",
10 | "start-production": "npm run build && cross-env NODE_ENV=production npm run start",
11 | "lint": "eslint --ext .js,.js .",
12 | "test": "echo \"Error: no test specified\" && exit 1",
13 | "heroku-postbuild": "npm run build"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "git+https://github.com/cosmicjs/nextjs-website-boilerplate.git"
18 | },
19 | "author": "BitBytes",
20 | "license": "ISC",
21 | "bugs": {
22 | "url": "https://github.com/cosmicjs/nextjs-website-boilerplate/issues"
23 | },
24 | "homepage": "https://github.com/cosmicjs/nextjs-website-boilerplate#readme",
25 | "dependencies": {
26 | "axios": "^0.18.0",
27 | "babel-cli": "^6.26.0",
28 | "babel-core": "^6.26.0",
29 | "babel-eslint": "^8.1.2",
30 | "babel-plugin-inline-dotenv": "^1.1.2",
31 | "babel-plugin-module-resolver": "^3.0.0",
32 | "babel-plugin-transform-define": "^1.3.0",
33 | "babel-preset-es2015": "^6.24.1",
34 | "babel-preset-stage-2": "^6.24.1",
35 | "babel-register": "^6.26.0",
36 | "bluebird": "^3.5.1",
37 | "compression": "^1.7.1",
38 | "cosmicjs": "^3.1.2",
39 | "cross-env": "^5.1.3",
40 | "es6-promise": "^4.2.2",
41 | "eslint": "^4.14.0",
42 | "eslint-config-airbnb": "^16.1.0",
43 | "eslint-loader": "^1.9.0",
44 | "eslint-plugin-import": "^2.8.0",
45 | "eslint-plugin-jsx-a11y": "^6.0.3",
46 | "eslint-plugin-react": "^7.5.1",
47 | "express": "^4.16.2",
48 | "lodash": "^4.17.4",
49 | "mailgun.js": "^2.0.1",
50 | "next": "^5.0.0",
51 | "next-routes": "^1.3.0",
52 | "nodemon": "^1.14.3",
53 | "nprogress": "^0.2.0",
54 | "prop-types": "^15.6.0",
55 | "react": "^16.2.0",
56 | "react-addons-test-utils": "^15.6.2",
57 | "react-dom": "^16.2.0"
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/pages/_document.js:
--------------------------------------------------------------------------------
1 | import Document, { Head, Main, NextScript } from 'next/document';
2 |
3 | export default class MyDocument extends Document {
4 |
5 | render () {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 | {/* CSS Files */}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | )
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/pages/about-us.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from 'next/router';
3 |
4 | import { mapGlobals } from 'utils/helperFuncs';
5 | import Head from 'next/head';
6 | import Meta from 'components/widgets/Meta';
7 | import AboutUs from 'components/views/about-us'
8 | import Header from 'components/views/partials/header'
9 | import Footer from 'components/views/partials/footer'
10 | import Request from 'utils/request';
11 |
12 | class AboutUsPage extends React.Component {
13 |
14 | static async getInitialProps({ req, query }) {
15 | const Response = await Request.getGlobals();
16 | const aboutResponse = await Request.getObject('about-us');
17 | const aboutUs = aboutResponse.object;
18 | const globals = mapGlobals(Response.objects);
19 | return { globals, aboutUs };
20 | }
21 |
22 | constructor(props){
23 | super(props);
24 | this.state = {
25 | header: props.globals.header,
26 | contact_form: props.globals.contact_form,
27 | nav: props.globals.nav,
28 | social: props.globals.social,
29 | contactInfo: props.globals.contact_info.metadata,
30 | footer: props.globals.footer,
31 | aboutUs: props.aboutUs
32 | }
33 | }
34 |
35 | render() {
36 | return (
37 |
38 |
39 | Medical Professional ~ Cosmic JS Next Js App
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | }
50 | }
51 |
52 | export default AboutUsPage;
53 |
--------------------------------------------------------------------------------
/pages/blog.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from 'next/router';
3 |
4 | import { mapGlobals } from 'utils/helperFuncs';
5 | import Head from 'next/head';
6 | import Meta from 'components/widgets/Meta';
7 | import Blog from 'components/views/blog'
8 | import Header from 'components/views/partials/header'
9 | import Footer from 'components/views/partials/footer'
10 | import Request from 'utils/request';
11 |
12 | class BlogPage extends React.Component {
13 |
14 | static async getInitialProps({ req, query }) {
15 | const Response = await Request.getGlobals();
16 | const blogResponse = await Request.getBlogs();
17 | const blogPageResponse = await Request.getObject('blog');
18 | const blogPage = blogPageResponse.object;
19 | let blog = '';
20 | if(!!query.slug)
21 | {
22 | const blogRes = await Request.getObject(query.slug);
23 | blog = blogRes.object;
24 | }
25 | const blogs = blogResponse.objects;
26 | const globals = mapGlobals(Response.objects);
27 | return { globals, blogs, blog, blogPage };
28 | }
29 |
30 | constructor(props){
31 | super(props);
32 | }
33 |
34 | render() {
35 | return (
36 |
37 |
38 | Medical Professional ~ Cosmic JS Next Js App
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | );
48 | }
49 | }
50 |
51 | export default BlogPage;
52 |
--------------------------------------------------------------------------------
/pages/contact.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import { mapGlobals } from 'utils/helperFuncs';
4 | import Head from 'next/head';
5 | import Meta from 'components/widgets/Meta';
6 | import Contact from 'components/views/contact'
7 | import Header from 'components/views/partials/header'
8 | import Footer from 'components/views/partials/footer'
9 | import Request from 'utils/request';
10 |
11 | class ContactPage extends React.Component {
12 |
13 | static async getInitialProps({ req, query }) {
14 | const Response = await Request.getGlobals();
15 | const contactResponse = await Request.getObject('contact');
16 | const contact = contactResponse.object;
17 | const globals = mapGlobals(Response.objects);
18 | return { globals, contact };
19 | }
20 |
21 | constructor(props){
22 | super(props);
23 | this.state = {
24 | header: props.globals.header,
25 | contact_form: props.globals.contact_form,
26 | nav: props.globals.nav,
27 | social: props.globals.social,
28 | contactInfo: props.globals.contact_info.metadata,
29 | footer: props.globals.footer,
30 | contact: props.contact,
31 | form: {
32 | name: '',
33 | email: '',
34 | phone: '',
35 | message: ''
36 | },
37 | form_validation: {
38 | name: false,
39 | email: false,
40 | message: false
41 | },
42 | form_status:{
43 | status: '',
44 | message: ''
45 | }
46 | }
47 | }
48 |
49 | handleChange = (event) =>
50 | {
51 | let name = event.target.name;
52 | let value = event.target.value;
53 | let form = this.state.form;
54 | form[name] = value;
55 | this.setState({form});
56 | }
57 |
58 | validateForm = () => {
59 | var check = true;
60 | var form_validation = this.state.form_validation
61 | form_validation.name = !this.state.form.name ? true : false;
62 | form_validation.email = !this.state.form.email ? true : false;
63 | form_validation.message = !this.state.form.message ? true : false;
64 | if(!this.state.form.name || !this.state.form.email || !this.state.form.message)
65 | {
66 | check = false;
67 | }
68 | this.setState({form_validation});
69 | return check;
70 | }
71 | submitForm = async () => {
72 | var form_status = this.state.form_status;
73 | form_status.status = '';
74 | form_status.message = '';
75 | this.setState({ form_status });
76 | if (this.validateForm()) {
77 | var response = await Request.contactForm(this.state.form, this.state.contact_form);
78 | if (response.status) {
79 | form_status.status = 'success';
80 | form_status.message = response.message
81 | var form = this.state.form;
82 | var form_validation = this.state.form_validation;
83 | form.name = '';
84 | form.email = '';
85 | form.phone = '';
86 | form.message = '';
87 | form_validation.name = false;
88 | form_validation.email = false;
89 | form_validation.message = false;
90 | this.setState({ form, form_validation });
91 | }
92 | else {
93 | form_status.status = 'error';
94 | form_status.message = response.message
95 | }
96 | this.setState({ form_status });
97 | }
98 | }
99 |
100 | render() {
101 | return (
102 |
103 |
104 | Medical Professional ~ Cosmic JS Next Js App
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | );
114 | }
115 | }
116 |
117 | export default ContactPage;
--------------------------------------------------------------------------------
/pages/faqs.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from 'next/router';
3 |
4 | import { mapGlobals, mapFaqs } from 'utils/helperFuncs';
5 | import Head from 'next/head';
6 | import Meta from 'components/widgets/Meta';
7 | import Faq from 'components/views/faq'
8 | import Header from 'components/views/partials/header'
9 | import Footer from 'components/views/partials/footer'
10 | import Request from 'utils/request';
11 |
12 | class FaqPage extends React.Component {
13 |
14 | static async getInitialProps({ req, query }) {
15 | const Response = await Request.getGlobals();
16 | const faqResponse = await Request.getObject('faqs');
17 | const faq = mapFaqs(faqResponse.object);
18 | const globals = mapGlobals(Response.objects);
19 | return { globals, faq };
20 | }
21 |
22 | constructor(props){
23 | super(props);
24 | this.state = {
25 | header: props.globals.header,
26 | contact_form: props.globals.contact_form,
27 | nav: props.globals.nav,
28 | social: props.globals.social,
29 | contactInfo: props.globals.contact_info.metadata,
30 | footer: props.globals.footer,
31 | faq: props.faq
32 | }
33 | }
34 |
35 | render() {
36 | return (
37 |
38 |
39 | Medical Professional ~ Cosmic JS Next Js App
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | }
50 | }
51 |
52 | export default FaqPage;
53 |
--------------------------------------------------------------------------------
/pages/generic.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from 'next/router';
3 |
4 | import { mapGlobals } from 'utils/helperFuncs';
5 | import Head from 'next/head';
6 | import Meta from 'components/widgets/Meta';
7 | import Page from 'components/views/page'
8 | import Header from 'components/views/partials/header'
9 | import Footer from 'components/views/partials/footer'
10 | import Request from 'utils/request';
11 |
12 | class DynamicPage extends React.Component {
13 |
14 | static async getInitialProps({ req, query }) {
15 | const Response = await Request.getGlobals();
16 | const pageResponse = await Request.getObject(query.pagename);
17 | const page = pageResponse.object;
18 | const globals = mapGlobals(Response.objects);
19 | return { globals, page };
20 | }
21 |
22 | constructor(props){
23 | super(props);
24 | this.state = {
25 | header: props.globals.header,
26 | contact_form: props.globals.contact_form,
27 | nav: props.globals.nav,
28 | social: props.globals.social,
29 | contactInfo: props.globals.contact_info.metadata,
30 | footer: props.globals.footer,
31 | page: props.page
32 | }
33 | }
34 |
35 | render() {
36 | return (
37 |
38 |
39 | Medical Professional ~ Cosmic JS Next Js App
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | }
50 | }
51 |
52 | export default DynamicPage;
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from 'next/router';
3 |
4 | import { mapGlobals, mapHome } from 'utils/helperFuncs';
5 | import Head from 'next/head';
6 | import Meta from 'components/widgets/Meta';
7 | import Home from 'components/views/home'
8 | import Header from 'components/views/partials/header'
9 | import Footer from 'components/views/partials/footer'
10 | import Request from 'utils/request';
11 |
12 | class HomePage extends React.Component {
13 |
14 | static async getInitialProps({ req, query }) {
15 | const Response = await Request.getGlobals();
16 | const homeResponse = await Request.getObject('home');
17 | const home = mapHome(homeResponse.object);
18 | const globals = mapGlobals(Response.objects);
19 | return { globals, home };
20 | }
21 |
22 | constructor(props){
23 | super(props);
24 | this.state = {
25 | header: props.globals.header,
26 | contact_form: props.globals.contact_form,
27 | nav: props.globals.nav,
28 | social: props.globals.social,
29 | contactInfo: props.globals.contact_info.metadata,
30 | footer: props.globals.footer,
31 | home: props.home
32 | }
33 | }
34 |
35 | render() {
36 | return (
37 |
38 |
39 | Medical Professional ~ Cosmic JS Next Js App
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | }
50 | }
51 |
52 | export default HomePage;
53 |
--------------------------------------------------------------------------------
/pages/search.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import { mapGlobals } from 'utils/helperFuncs';
4 | import Head from 'next/head';
5 | import Meta from 'components/widgets/Meta';
6 | import Search from 'components/views/search'
7 | import Header from 'components/views/partials/header'
8 | import Footer from 'components/views/partials/footer'
9 | import Request from 'utils/request';
10 |
11 | class SearchPage extends React.Component {
12 | static async getInitialProps({ req, query }) {
13 | const Response = await Request.getGlobals();
14 | const bucketResponse = await Request.getObjects();
15 | const searchResponse = await Request.getObject('search');
16 | const bucket = bucketResponse.objects;
17 | const search = searchResponse.object;
18 | const globals = mapGlobals(Response.objects);
19 | return { globals, bucket, search };
20 | }
21 |
22 | constructor(props){
23 | super(props);
24 | this.state = {
25 | header: props.globals.header,
26 | contact_form: props.globals.contact_form,
27 | nav: props.globals.nav,
28 | social: props.globals.social,
29 | contactInfo: props.globals.contact_info.metadata,
30 | footer: props.globals.footer,
31 | bucket: props.bucket,
32 | searchResult: '',
33 | searchField: '',
34 | search: props.search
35 | }
36 | }
37 |
38 | handleChange = (event) => {
39 | let value = event.target.value;
40 | let searchField = this.state.searchField;
41 | searchField = value;
42 | this.setState({searchField});
43 | let objects = this.state.bucket;
44 | let searchResult = this.state.searchResult;
45 | let search_results = [];
46 | let query = value;
47 | if(!!query)
48 | {
49 | objects.forEach(object => {
50 | if(object.title.toLowerCase().indexOf(query) !== -1 || object.content.toLowerCase().indexOf(query) !== -1){
51 | object.teaser = object.content.replace(/(<([^>]+)>)/ig,"").substring(0, 300)
52 | if (object.type_slug === 'blogs')
53 | object.permalink = '/blog/' + object.slug
54 | else
55 | object.permalink = '/' + object.slug
56 | search_results.push(object)
57 | }
58 | if (!_.find(search_results, { _id: object._id })) {
59 | object.metafields.forEach(metafield => {
60 | if(metafield.value.toLowerCase().indexOf(query) !== -1 && !_.find(search_results, { _id: object._id })) {
61 | object.teaser = object.content.replace(/(<([^>]+)>)/ig,"").substring(0, 300)
62 | if (object.type_slug === 'blogs')
63 | object.permalink = '/blog/' + object.slug
64 | else
65 | object.permalink = '/' + object.slug
66 | search_results.push(object)
67 | }
68 | })
69 | }
70 | });
71 | }
72 | searchResult = search_results;
73 | this.setState({searchResult});
74 | }
75 |
76 | render() {
77 | return (
78 |
79 |
80 | Medical Professional ~ Cosmic JS Next Js App
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | );
90 | }
91 | }
92 |
93 | export default SearchPage;
94 |
--------------------------------------------------------------------------------
/routes.js:
--------------------------------------------------------------------------------
1 | const nextRoutes = require('next-routes')
2 | const routes = module.exports = nextRoutes()
3 |
4 | routes.add('blog', '/blog/:slug?')
5 | routes.add('generic', '/:pagename')
--------------------------------------------------------------------------------
/screenshots/medical-professional.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cosmicjs/nextjs-website-boilerplate/dcdbb7393f13926792ec288e4165583fbe3dcb4a/screenshots/medical-professional.png
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 | import next from 'next';
3 | import compression from 'compression';
4 | import routes from 'routes';
5 | const port = parseInt(process.env.PORT, 10) || 3000
6 | const dev = process.env.NODE_ENV !== 'production'
7 | import bodyParser from 'body-parser';
8 | const app = next({ dev })
9 | const handle = routes.getRequestHandler(app)
10 |
11 | app.prepare()
12 | .then(() => {
13 | const server = express();
14 | server.use(compression());
15 | server.use(bodyParser.urlencoded({ extended: false }));
16 | server.use(bodyParser.json());
17 | server.get('*', (req, res) => handle(req, res))
18 | // server
19 | server.use(handle).listen(port, (err) => {
20 | if (err) throw err
21 | console.log(`> Ready on http://localhost:${port}`)
22 | })
23 | })
24 |
--------------------------------------------------------------------------------
/static/css/custom.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: Roboto,sans-serif;
3 | font-size: 15px;
4 | line-height: 2;
5 | color: #666;
6 | }
--------------------------------------------------------------------------------
/static/css/nprogress.css:
--------------------------------------------------------------------------------
1 | #nprogress{pointer-events:none;}#nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px;}#nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1.0;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translate(0px,-4px);}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px;}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner 400ms linear infinite;animation:nprogress-spinner 400ms linear infinite;}.nprogress-custom-parent{overflow:hidden;position:relative;}.nprogress-custom-parent #nprogress .spinner,.nprogress-custom-parent #nprogress .bar{position:absolute;}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);}100%{-webkit-transform:rotate(360deg);}}@keyframes nprogress-spinner{0%{transform:rotate(0deg);}100%{transform:rotate(360deg);}}
--------------------------------------------------------------------------------
/static/js/jquery.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
2 | !function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML=" ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML=" ";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML=" ","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML=" ",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
3 | a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/