Last active
June 2, 2018 18:17
-
-
Save samussiah/4f6fe788ac92501246a2ce5640cd5a5e to your computer and use it in GitHub Desktop.
clinical-timelines-treatment-of-ms
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
USUBJID | DOMAIN | STDY | ENDY | SEQ | TOOLTIP | TRT | ITT | PP | SEX | AGE | response | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
SUB142671 | Adverse Events | -3 | 1 | Red blood cells urine (Urinalysis NEC) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Adverse Events | 0 | 4 | 2 | Urinary tract infection (Urinary tract infections) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 0 | 3 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Adverse Events | 12 | 12 | 4 | Migraine (Migraine headaches) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 12 | 111 | 5 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 14 | 14 | 6 | Migraine (Migraine headaches) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 14 | 19 | 7 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 14 | 19 | 8 | Vertigo (Inner ear signs and symptoms) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 15 | 15 | 9 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 17 | 32 | 10 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 28 | 29 | 11 | Gastrooesophageal reflux disease (Gastrointestinal atonic and hypomotility disorders NEC) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 32 | 47 | 12 | Urinary tract infection (Urinary tract infections) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 62 | 62 | 13 | Vaginal discharge (Vulvovaginal signs and symptoms) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 69 | 14 | Irritability (Behaviour and socialisation disturbances) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Adverse Events | 165 | 15 | Gastrooesophageal reflux disease (Gastrointestinal atonic and hypomotility disorders NEC) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Adverse Events | 199 | 210 | 16 | Diarrhoea (Diarrhoea (excl infective)) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Adverse Events | 199 | 17 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 11 | 11 | 4 | Phase 6000: Clinical visit | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 19 | 19 | 5 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 32 | 32 | 6 | Phase 3001: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 47 | 47 | 7 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 84 | 84 | 8 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 172 | 172 | 9 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Clinical Assessments | 211 | 211 | 10 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Concomitant Medications | -251 | 1 | Citalopram hydrobromide (PSYCHOANALEPTICS [20 MG P.O.]) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Concomitant Medications | -39 | 2 | Eugynon (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB P.O.]) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Concomitant Medications | 1 | 3 | 3 | Bactrim (ANTIBACTERIALS FOR SYSTEMIC USE [1 TAB PO]) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Concomitant Medications | 12 | 4 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Concomitant Medications | 28 | 29 | 5 | Ranitidine hydrochloride (DRUGS FOR ACID RELATED DISORDERS [75 MG PO]) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Concomitant Medications | 36 | 40 | 6 | Levofloxacin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG P.O.]) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Concomitant Medications | 62 | 62 | 7 | Miconazole nitrate (GYNECOLOGICAL ANTIINFECTIVES AND ANTISEPTICS [1 SUPP. VAG]) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Concomitant Medications | 165 | 8 | Antacids (DRUGS FOR ACID RELATED DISORDERS [UNK UNK PO]) | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Concomitant Medications | 198 | 200 | 9 | Bupropion hydrochloride (PSYCHOANALEPTICS [150 MG PO]) | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142671 | Full Response | 84 | 84 | 1 | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | No Response | 172 | 172 | 2 | Albuterol | Yes | No | F | 24 | Full Response | ||
SUB142671 | Screening | -3 | -3 | 1 | Screening Visit | Albuterol | Yes | No | F | 24 | Full Response | |
SUB142672 | Adverse Events | 5 | 8 | 1 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Adverse Events | 75 | 2 | Abdominal distension (Flatulence, bloating and distension) | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | Adverse Events | 271 | 547 | 3 | Anxiety (Anxiety symptoms) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Adverse Events | 271 | 547 | 4 | Insomnia (Disturbances in initiating and maintaining sleep) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 30 | 30 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 170 | 170 | 6 | Phase 3006: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 289 | 289 | 7 | Phase 3009: Clinical visit (AE) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 365 | 365 | 8 | Phase 3012: Clinical visit (AE) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 451 | 451 | 9 | Phase 3015: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 554 | 554 | 10 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 638 | 638 | 11 | Phase 3021: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | Clinical Assessments | 721 | 721 | 12 | Phase 3024: Clinical visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142672 | No Response | 84 | 84 | 1 | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | No Response | 170 | 170 | 2 | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | No Response | 365 | 365 | 3 | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | No Response | 554 | 554 | 4 | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | No Response | 721 | 721 | 5 | Albuterol | Yes | Yes | F | 45 | No Response | ||
SUB142672 | Screening | -5 | -5 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 45 | No Response | |
SUB142673 | Adverse Events | 0 | 0 | 1 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Adverse Events | 1 | 1 | 2 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Adverse Events | 1 | 1 | 3 | Headache (Headaches NEC) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Adverse Events | 1 | 4 | 4 | Fatigue (Asthenic conditions) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Adverse Events | 4 | 4 | 5 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Clinical Assessments | 5 | 5 | 3 | Phase 6000: Telephone assessment (AE) | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Clinical Assessments | 15 | 15 | 4 | Phase 6000: Clinical visit | Placebo | No | No | F | 37 | No Response | |
SUB142673 | Screening | -9 | -9 | 1 | Screening Visit | Placebo | No | No | F | 37 | No Response | |
SUB142674 | Adverse Events | 0 | 5 | 1 | Nervousness (Anxiety symptoms) | Albuterol | No | No | M | 45 | No Response | |
SUB142674 | Adverse Events | 0 | 5 | 2 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | No | No | M | 45 | No Response | |
SUB142674 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | No | No | M | 45 | No Response | |
SUB142674 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | No | No | M | 45 | No Response | |
SUB142674 | Clinical Assessments | 11 | 11 | 3 | Phase 6000: Telephone assessment | Albuterol | No | No | M | 45 | No Response | |
SUB142674 | Concomitant Medications | -16 | 1 | Tocopherol (VITAMINS [400 IU PO]) | Albuterol | No | No | M | 45 | No Response | ||
SUB142674 | Screening | -1 | -1 | 1 | Screening Visit | Albuterol | No | No | M | 45 | No Response | |
SUB142675 | Adverse Events | 121 | 1 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Adverse Events | 270 | 2 | Mood altered (Affect alterations NEC) | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Adverse Events | 354 | 3 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Adverse Events | 454 | 457 | 4 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 9 | 9 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 182 | 182 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 273 | 273 | 7 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 385 | 385 | 8 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 470 | 470 | 9 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Clinical Assessments | 546 | 546 | 10 | Phase 3018: Clinical visit (CM) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Concomitant Medications | 270 | 539 | 1 | Paroxetine hydrochloride (PSYCHOANALEPTICS [20 MG P.O.]) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Concomitant Medications | 378 | 2 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Concomitant Medications | 454 | 457 | 3 | Cough Syrup (COUGH AND COLD PREPARATIONS [1 TSP PO]) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Concomitant Medications | 454 | 457 | 4 | Medinite (ANALGESICS [1 TAB PO]) | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142675 | Concomitant Medications | 540 | 5 | Paroxetine hydrochloride (PSYCHOANALEPTICS [20 MG P.O.]) | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | No Response | 182 | 182 | 2 | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | No Response | 385 | 385 | 3 | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | No Response | 546 | 546 | 4 | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Partial Response | 84 | 84 | 1 | Placebo | Yes | Yes | M | 30 | Partial Response | ||
SUB142675 | Screening | -4 | -4 | 1 | Screening Visit | Placebo | Yes | Yes | M | 30 | Partial Response | |
SUB142676 | Adverse Events | 1 | 3 | 1 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 12 | 12 | 2 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 13 | 13 | 3 | Injection site burning (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 13 | 13 | 4 | Injection site urticaria (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 16 | 17 | 5 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 22 | 24 | 6 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 28 | 7 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 29 | 8 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 40 | 40 | 9 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 50 | 50 | 10 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 51 | 51 | 11 | Injection site reaction (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 56 | 56 | 12 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 70 | 13 | Rash (Rashes, eruptions and exanthems NEC) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 80 | 82 | 14 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 121 | 121 | 15 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Adverse Events | 440 | 16 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 517 | 17 | Anxiety (Anxiety symptoms) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 517 | 18 | Balance disorder (Cerebellar coordination and balance disturbances) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Adverse Events | 517 | 19 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 33 | 33 | 4 | Phase 3001: Clinical visit (AE) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 181 | 181 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 271 | 271 | 7 | Phase 3009: Clinical visit | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 370 | 370 | 8 | Phase 3012: Clinical visit | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 453 | 453 | 9 | Phase 3015: Clinical visit (AE) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 546 | 546 | 10 | Phase 3018: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 630 | 630 | 11 | Phase 3021: Clinical visit | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Clinical Assessments | 720 | 720 | 12 | Phase 3024: Clinical visit (CM) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Concomitant Medications | -32 | 1 | Evra (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 PATCH TOP]) | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Concomitant Medications | 456 | 692 | 2 | Amantadine (ANTI-PARKINSON DRUGS [100 MG P.O.]) | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142676 | Full Response | 84 | 84 | 1 | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Full Response | 370 | 370 | 3 | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | No Response | 181 | 181 | 2 | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | No Response | 546 | 546 | 4 | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Partial Response | 720 | 720 | 5 | Placebo | Yes | Yes | F | 41 | Full Response | ||
SUB142676 | Screening | -6 | -6 | 1 | Screening Visit | Placebo | Yes | Yes | F | 41 | Full Response | |
SUB142677 | Adverse Events | -1 | 29 | 1 | Nervousness (Anxiety symptoms) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 0 | 2 | Injection site pruritus (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Adverse Events | 28 | 3 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Adverse Events | 49 | 55 | 4 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 49 | 55 | 5 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 140 | 140 | 6 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 254 | 254 | 7 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 258 | 8 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Adverse Events | 258 | 9 | Rotator cuff syndrome (Joint related disorders NEC) | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Adverse Events | 419 | 448 | 10 | Back pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Adverse Events | 444 | 448 | 11 | Chest discomfort (General signs and symptoms NEC) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 5 | 5 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Telephone assessment | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 91 | 91 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 180 | 180 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 264 | 264 | 7 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 355 | 355 | 8 | Phase 3012: Clinical visit (CM) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 442 | 442 | 9 | Phase 3015: Clinical visit (AE) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 447 | 447 | 10 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Clinical Assessments | 453 | 453 | 11 | Phase 6000: Clinical visit (CM) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Concomitant Medications | 49 | 49 | 1 | Lidocaine (ANESTHETICS [UNK UNK SC]) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Concomitant Medications | 258 | 258 | 2 | Hydrocortisone (CORTICOSTEROIDS FOR SYSTEMIC USE [UNKNOWN UNKNOWN OTHER PARENTERAL]) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Concomitant Medications | 258 | 279 | 3 | Indometacin (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [75 MG PO]) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Concomitant Medications | 447 | 448 | 4 | Acetylsalicylic acid (ANTITHROMBOTIC AGENTS [325 MG PO]) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | Concomitant Medications | 447 | 448 | 5 | Metoprolol (BETA BLOCKING AGENTS [UNKNOWN MG PO]) | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142677 | No Response | 180 | 180 | 2 | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Partial Response | 91 | 91 | 1 | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Partial Response | 355 | 355 | 3 | Placebo | Yes | Yes | M | 45 | Partial Response | ||
SUB142677 | Screening | -9 | -9 | 1 | Screening Visit | Placebo | Yes | Yes | M | 45 | Partial Response | |
SUB142678 | Adverse Events | 0 | 1 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 91 | 2 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 259 | 3 | Sensory disturbance (Sensory abnormalities NEC) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 457 | 4 | Dysphagia (Gastrointestinal signs and symptoms NEC) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 457 | 5 | Hypoaesthesia oral (Oral soft tissue signs and symptoms) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 457 | 6 | Spondylitis (Spondyloarthropathies) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Adverse Events | 638 | 638 | 7 | Conjunctival cyst (Ocular neoplasms benign) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Adverse Events | 705 | 709 | 8 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Adverse Events | 705 | 709 | 9 | Muscle spasms (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 2 | 2 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 6 | 6 | 3 | Phase 2007: Telephone assessment (CM) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 91 | 91 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 174 | 174 | 6 | Phase 3006: Clinical visit (CM) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 280 | 280 | 7 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 356 | 356 | 8 | Phase 3012: Clinical visit | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 455 | 455 | 9 | Phase 3015: Clinical visit | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 488 | 488 | 10 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 552 | 552 | 11 | Phase 3018: Clinical visit (CM) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 644 | 644 | 12 | Phase 3021: Clinical visit (AE) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Clinical Assessments | 735 | 735 | 13 | Phase 3024: Clinical visit (AE) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Concomitant Medications | -1160 | 76 | 1 | Timolol (OPHTHALMOLOGICALS [1 GTTS TOP]) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Concomitant Medications | 3 | 2 | Modafinil (PSYCHOANALEPTICS [100 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Concomitant Medications | 56 | 3 | Methylphenidate hydrochloride (PSYCHOANALEPTICS [5 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Concomitant Medications | 77 | 160 | 4 | Dorzolamide hydrochloride (OPHTHALMOLOGICALS [1 GTTS TOP]) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Concomitant Medications | 77 | 5 | Dorzolamide hydrochloride (OPHTHALMOLOGICALS [1 GTTS TOP]) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Concomitant Medications | 92 | 195 | 6 | Bupropion hydrochloride (PSYCHOANALEPTICS [75 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142678 | Concomitant Medications | 196 | 7 | Bupropion hydrochloride (PSYCHOANALEPTICS [150 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Concomitant Medications | 489 | 8 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Concomitant Medications | 9 | Clonazepam (ANTIEPILEPTICS [0.5 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | |||
SUB142678 | Concomitant Medications | 10 | Multivitamins (VITAMINS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | |||
SUB142678 | Concomitant Medications | 11 | Sertraline hydrochloride (PSYCHOANALEPTICS [100 MG P.O.]) | Placebo | Yes | Yes | F | 47 | Partial Response | |||
SUB142678 | No Response | 174 | 174 | 2 | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | No Response | 356 | 356 | 3 | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | No Response | 552 | 552 | 4 | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Partial Response | 91 | 91 | 1 | Placebo | Yes | Yes | F | 47 | Partial Response | ||
SUB142678 | Screening | -9 | -9 | 1 | Screening Visit | Placebo | Yes | Yes | F | 47 | Partial Response | |
SUB142679 | Adverse Events | 0 | 0 | 1 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 0 | 3 | 2 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 0 | 3 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 7 | 11 | 4 | Abnormal sensation in eye (Ocular sensation disorders) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 24 | 24 | 5 | Eye pain (Ocular disorders NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 27 | 30 | 6 | Pharyngolaryngeal pain (Upper respiratory tract signs and symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 35 | 38 | 7 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 37 | 8 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 49 | 9 | Monoparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 50 | 50 | 10 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 85 | 11 | Micturition urgency (Bladder and urethral symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 94 | 96 | 12 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 99 | 13 | Bronchitis (Lower respiratory tract and lung infections) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 141 | 141 | 14 | Flushing (Peripheral vascular disorders NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 143 | 169 | 15 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 171 | 171 | 16 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 177 | 177 | 17 | Abnormal sensation in eye (Ocular sensation disorders) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 181 | 181 | 18 | Eye pain (Ocular disorders NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 181 | 181 | 19 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 182 | 182 | 20 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 182 | 186 | 21 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 186 | 186 | 22 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 189 | 194 | 23 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 189 | 208 | 24 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 217 | 224 | 25 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 246 | 249 | 26 | Dysaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 263 | 263 | 27 | Wheezing (Bronchospasm and obstruction) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 264 | 266 | 28 | Muscle tightness (Muscle related signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 273 | 283 | 29 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 275 | 275 | 30 | Visual field defect (Neurologic visual problems NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 285 | 286 | 31 | Muscle tightness (Muscle related signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 287 | 287 | 32 | Abnormal sensation in eye (Ocular sensation disorders) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 287 | 290 | 33 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 300 | 34 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 302 | 315 | 35 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 309 | 310 | 36 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 316 | 323 | 37 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 329 | 332 | 38 | Abnormal sensation in eye (Ocular sensation disorders) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 332 | 332 | 39 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 339 | 343 | 40 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 339 | 354 | 41 | Sinus congestion (Paranasal sinus disorders (excl infections and neoplasms)) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 346 | 349 | 42 | Pharyngolaryngeal pain (Upper respiratory tract signs and symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 353 | 353 | 43 | Vomiting (Nausea and vomiting symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 353 | 355 | 44 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 370 | 375 | 45 | Abnormal sensation in eye (Ocular sensation disorders) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 377 | 46 | Dermal cyst (Skin neoplasms benign) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 379 | 389 | 47 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 390 | 390 | 48 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 393 | 393 | 49 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 393 | 393 | 50 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 395 | 401 | 51 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 405 | 410 | 52 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 405 | 410 | 53 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 416 | 417 | 54 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 428 | 55 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 428 | 56 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 429 | 429 | 57 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 443 | 445 | 58 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 448 | 59 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 459 | 60 | Micturition urgency (Bladder and urethral symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 470 | 61 | Renal cyst (Renal neoplasms) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 476 | 476 | 62 | Abdominal distension (Flatulence, bloating and distension) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 476 | 63 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 487 | 487 | 64 | Nasal congestion (Nasal congestion and inflammations) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 487 | 494 | 65 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 499 | 66 | Eye pain (Ocular disorders NEC) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 501 | 501 | 67 | Dyspepsia (Dyspeptic signs and symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 503 | 68 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 524 | 532 | 69 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 562 | 70 | Eye pain (Ocular disorders NEC) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 579 | 588 | 71 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 580 | 616 | 72 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 584 | 73 | Vision blurred (Partial vision loss) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 595 | 74 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Adverse Events | 631 | 637 | 75 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 640 | 642 | 76 | Headache (Headaches NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 652 | 666 | 77 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 658 | 658 | 78 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 670 | 672 | 79 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 678 | 678 | 80 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 678 | 711 | 81 | Balance disorder (Cerebellar coordination and balance disturbances) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 678 | 711 | 82 | Sensation of heaviness (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 693 | 711 | 83 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 705 | 705 | 84 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 717 | 718 | 85 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Adverse Events | 719 | 719 | 86 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 9 | 9 | 4 | Phase 6000: Clinical visit | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 31 | 31 | 5 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 87 | 87 | 6 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 147 | 147 | 7 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 169 | 169 | 8 | Phase 3006: Clinical visit | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 262 | 262 | 9 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 364 | 364 | 10 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 448 | 448 | 11 | Phase 3015: Clinical visit (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 549 | 549 | 12 | Phase 3018: Clinical visit (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 632 | 632 | 13 | Phase 3021: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 700 | 700 | 14 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Clinical Assessments | 731 | 731 | 15 | Phase 3024: Clinical visit (AE) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | -1108 | 617 | 1 | Rabeprazole sodium (DRUGS FOR ACID RELATED DISORDERS [20 MG P.O.]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | -13 | 2 | Multivitamins (VITAMINS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Concomitant Medications | 27 | 30 | 3 | Benzocaine (THROAT PREPARATIONS [UNK UNK PO]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 57 | 57 | 4 | Fleet (DRUGS FOR CONSTIPATION [K CC 10]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 146 | 146 | 5 | Salbutamol (DRUGS FOR OBSTRUCTIVE AIRWAY DISEASES [2 PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 185 | 185 | 6 | Salbutamol (DRUGS FOR OBSTRUCTIVE AIRWAY DISEASES [2 PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 193 | 194 | 7 | Salbutamol (DRUGS FOR OBSTRUCTIVE AIRWAY DISEASES [2 PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 201 | 201 | 8 | Salbutamol (DRUGS FOR OBSTRUCTIVE AIRWAY DISEASES [2 PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 263 | 263 | 9 | Salbutamol (DRUGS FOR OBSTRUCTIVE AIRWAY DISEASES [UNK PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 350 | 354 | 10 | Mometasone furoate (NASAL PREPARATIONS [UNK PUFFS IH]) | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142679 | Concomitant Medications | 618 | 11 | Esomeprazole magnesium (DRUGS FOR ACID RELATED DISORDERS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Full Response | 87 | 87 | 1 | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Full Response | 169 | 169 | 2 | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Full Response | 364 | 364 | 3 | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | No Response | 549 | 549 | 4 | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | No Response | 731 | 731 | 5 | Placebo | Yes | Yes | M | 38 | Full Response | ||
SUB142679 | Screening | -10 | -10 | 1 | Screening Visit | Placebo | Yes | Yes | M | 38 | Full Response | |
SUB142680 | Adverse Events | -13 | 0 | 1 | Urinary tract infection (Urinary tract infections) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Adverse Events | 0 | 2 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Adverse Events | 38 | 3 | Urinary tract infection (Urinary tract infections) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Adverse Events | 119 | 120 | 4 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Adverse Events | 181 | 5 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Adverse Events | 269 | 6 | Insomnia (Disturbances in initiating and maintaining sleep) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Adverse Events | 517 | 548 | 7 | Bronchitis (Lower respiratory tract and lung infections) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 5 | 5 | 2 | Phase 2005: Telephone assessment (CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 9 | 9 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 40 | 40 | 4 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 99 | 99 | 5 | Phase 3003: Clinical visit (CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 180 | 180 | 6 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 268 | 268 | 7 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 369 | 369 | 8 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Clinical Assessments | 537 | 537 | 9 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | -61 | 5 | 1 | Tolterodine l-tartrate (UROLOGICALS [8 MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | -12 | -10 | 2 | Bactrim (ANTIBACTERIALS FOR SYSTEMIC USE [1 TAB P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 38 | 42 | 3 | Ciprofloxacin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 120 | 120 | 4 | Paracetamol (ANALGESICS [3 TABS P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 181 | 202 | 5 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 203 | 210 | 6 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 211 | 274 | 7 | Modafinil (PSYCHOANALEPTICS [200 MG PO]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 223 | 8 | Tolterodine l-tartrate (UROLOGICALS [2 MG PO]) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Concomitant Medications | 269 | 9 | Dozol (ANALGESICS [1 TAB PO]) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Concomitant Medications | 275 | 412 | 10 | Modafinil (PSYCHOANALEPTICS [100 MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 413 | 11 | Modafinil (PSYCHOANALEPTICS [100 MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Concomitant Medications | 445 | 476 | 12 | Escitalopram oxalate (PSYCHOANALEPTICS [10 MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142680 | Concomitant Medications | 477 | 13 | Escitalopram oxalate (PSYCHOANALEPTICS [20 MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Concomitant Medications | 517 | 14 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG P.O.]) | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | No Response | 99 | 99 | 1 | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | No Response | 180 | 180 | 2 | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | No Response | 369 | 369 | 3 | Placebo | Yes | Yes | F | 36 | No Response | ||
SUB142680 | Screening | -13 | -13 | 1 | Screening Visit | Placebo | Yes | Yes | F | 36 | No Response | |
SUB142681 | Adverse Events | 5 | 20 | 1 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 22 | 2 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 23 | 3 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 30 | 30 | 4 | Dysmenorrhoea (Menstruation and uterine bleeding NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 31 | 33 | 5 | Gastroenteritis viral (Viral infections NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 81 | 103 | 6 | Musculoskeletal chest pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 91 | 102 | 7 | Wheezing (Bronchospasm and obstruction) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 153 | 8 | Muscle rigidity (Muscle tone abnormalities) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 254 | 256 | 9 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 261 | 262 | 10 | Musculoskeletal chest pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 261 | 262 | 11 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 291 | 12 | Eye pain (Ocular disorders NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 291 | 13 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 374 | 14 | Nocturia (Urinary tract signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 395 | 400 | 15 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 415 | 416 | 16 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 461 | 17 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Adverse Events | 504 | 506 | 18 | Musculoskeletal chest pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 512 | 519 | 19 | Rash (Rashes, eruptions and exanthems NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 651 | 655 | 20 | Eye pain (Ocular disorders NEC) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 655 | 655 | 21 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Adverse Events | 681 | 684 | 22 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 34 | 34 | 4 | Phase 3001: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 87 | 87 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 178 | 178 | 6 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 276 | 276 | 7 | Phase 3009: Clinical visit (AE) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 367 | 367 | 8 | Phase 3012: Clinical visit (AE) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 460 | 460 | 9 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 558 | 558 | 10 | Phase 3018: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 649 | 649 | 11 | Phase 3021: Clinical visit (CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Clinical Assessments | 733 | 733 | 12 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 30 | 30 | 1 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 31 | 33 | 2 | Paracetamol (ANALGESICS [500 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 91 | 91 | 3 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [24 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 92 | 92 | 4 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [20 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 93 | 93 | 5 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [16 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 94 | 94 | 6 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [12 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 95 | 95 | 7 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [8 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 96 | 96 | 8 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [4 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 96 | 97 | 9 | Prednisone (CORTICOSTEROIDS FOR SYSTEMIC USE [40 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 98 | 99 | 10 | Prednisone (CORTICOSTEROIDS FOR SYSTEMIC USE [30 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 100 | 101 | 11 | Prednisone (CORTICOSTEROIDS FOR SYSTEMIC USE [20 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 102 | 103 | 12 | Prednisone (CORTICOSTEROIDS FOR SYSTEMIC USE [10 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 368 | 371 | 13 | Oxybutynin hydrochloride (UROLOGICALS [5 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 512 | 519 | 14 | Diphenhydramine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 512 | 519 | 15 | Hydrocortisone (CORTICOSTEROIDS, DERMATOLOGICAL PREPARATIONS [UNK % TOP]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 559 | 740 | 16 | Oxybutynin hydrochloride (UROLOGICALS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | Concomitant Medications | 681 | 684 | 17 | Co-tylenol (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142681 | No Response | 178 | 178 | 2 | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | No Response | 558 | 558 | 3 | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | No Response | 733 | 733 | 4 | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Partial Response | 87 | 87 | 1 | Albuterol | Yes | Yes | F | 43 | Partial Response | ||
SUB142681 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 43 | Partial Response | |
SUB142682 | Adverse Events | 6 | 187 | 1 | Nervousness (Anxiety symptoms) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Adverse Events | 21 | 2 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Adverse Events | 126 | 3 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Adverse Events | 417 | 418 | 4 | Suicidal ideation (Suicidal and self-injurious behaviour) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Adverse Events | 418 | 440 | 5 | Anxiety (Anxiety symptoms) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Adverse Events | 491 | 505 | 6 | Back pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Adverse Events | 574 | 577 | 7 | Feeling abnormal (General signs and symptoms NEC) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Adverse Events | 594 | 8 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Adverse Events | 650 | 9 | Anaemia (Anaemias NEC) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Adverse Events | 672 | 10 | Injection site atrophy (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Adverse Events | 733 | 733 | 11 | Postoperative dizziness (Neurological and psychiatric procedural complications) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 6 | 6 | 2 | Phase 6000: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 8 | 8 | 3 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 21 | 21 | 4 | Phase 6000: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 35 | 35 | 5 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 98 | 98 | 6 | Phase 3003: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 187 | 187 | 7 | Phase 3006: Clinical visit (AE) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 278 | 278 | 8 | Phase 3009: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 376 | 376 | 9 | Phase 3012: Clinical visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 467 | 467 | 10 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 557 | 557 | 11 | Phase 3018: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 644 | 644 | 12 | Phase 3021: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 733 | 733 | 13 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Clinical Assessments | 14 | Phase 2007: Other | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | Concomitant Medications | -168 | 351 | 1 | Escitalopram oxalate (PSYCHOANALEPTICS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 419 | 443 | 2 | Escitalopram oxalate (PSYCHOANALEPTICS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 444 | 573 | 3 | Escitalopram oxalate (PSYCHOANALEPTICS [15 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 491 | 505 | 4 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [800 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 574 | 577 | 5 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [75 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 578 | 584 | 6 | Escitalopram oxalate (PSYCHOANALEPTICS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 585 | 591 | 7 | Escitalopram oxalate (PSYCHOANALEPTICS [15 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 592 | 649 | 8 | Escitalopram oxalate (PSYCHOANALEPTICS [20 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142682 | Concomitant Medications | 650 | 9 | Citalopram hydrobromide (PSYCHOANALEPTICS [40 MG P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Concomitant Medications | 650 | 10 | Ferrous sulfate (ANTIANEMIC PREPARATIONS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Concomitant Medications | 11 | Antioxidant formula (VITAMINS [1 TAB PO]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | Concomitant Medications | 12 | Ascorbic acid (VITAMINS [1 TAB PO]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | Concomitant Medications | 13 | Multivitamins (VITAMINS [1 TAB PO]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | Concomitant Medications | 14 | Thioctic acid (OTHER ALIMENTARY TRACT AND METABOLISM PRODUCTS [1 TAB PO]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | Concomitant Medications | 15 | Ubidecarenone (CARDIAC THERAPY [1 TAB PO]) | Albuterol | Yes | Yes | F | 38 | Partial Response | |||
SUB142682 | No Response | 187 | 187 | 2 | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | No Response | 376 | 376 | 3 | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | No Response | 733 | 733 | 5 | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Partial Response | 98 | 98 | 1 | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Partial Response | 557 | 557 | 4 | Albuterol | Yes | Yes | F | 38 | Partial Response | ||
SUB142682 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 38 | Partial Response | |
SUB142683 | Adverse Events | 98 | 98 | 1 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Adverse Events | 379 | 2 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | Adverse Events | 593 | 3 | Muscle twitching (Muscle related signs and symptoms NEC) | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 5 | 5 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 29 | 29 | 4 | Phase 3001: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 98 | 98 | 5 | Phase 3003: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 183 | 183 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 290 | 290 | 7 | Phase 3009: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 365 | 365 | 8 | Phase 3012: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 463 | 463 | 9 | Phase 3015: Clinical visit (AE) | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 548 | 548 | 10 | Phase 3018: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 639 | 639 | 11 | Phase 3021: Clinical visit (AE) | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | Clinical Assessments | 729 | 729 | 12 | Phase 3024: Clinical visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142683 | No Response | 365 | 365 | 3 | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | No Response | 548 | 548 | 4 | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | No Response | 729 | 729 | 5 | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | Partial Response | 98 | 98 | 1 | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | Partial Response | 183 | 183 | 2 | Placebo | Yes | Yes | M | 39 | Partial Response | ||
SUB142683 | Screening | -7 | -7 | 1 | Screening Visit | Placebo | Yes | Yes | M | 39 | Partial Response | |
SUB142684 | Adverse Events | 0 | 1 | Depression (Depressive disorders) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Adverse Events | 3 | 9 | 2 | Headache (Headaches NEC) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Adverse Events | 70 | 3 | Fatigue (Asthenic conditions) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Adverse Events | 70 | 4 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Adverse Events | 78 | 78 | 5 | Diarrhoea (Diarrhoea (excl infective)) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Adverse Events | 79 | 112 | 6 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Adverse Events | 79 | 7 | Headache (Headaches NEC) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Adverse Events | 95 | 126 | 8 | Flushing (Peripheral vascular disorders NEC) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Adverse Events | 142 | 9 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Adverse Events | 156 | 217 | 10 | Myalgia (Muscle pains) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Other (AE & CM) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Other | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (CM) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 98 | 98 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Clinical Assessments | 162 | 162 | 6 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Concomitant Medications | 2 | 9 | 1 | Bupropion (PSYCHOANALEPTICS [150 MG PO]) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Concomitant Medications | 29 | 43 | 2 | Citalopram (PSYCHOANALEPTICS [20 MG PO]) | Placebo | Yes | No | M | 23 | Full Response | |
SUB142684 | Concomitant Medications | 99 | 3 | Amantadine (ANTI-PARKINSON DRUGS [100 MG PO]) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Concomitant Medications | 99 | 4 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Full Response | 162 | 162 | 2 | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Partial Response | 98 | 98 | 1 | Placebo | Yes | No | M | 23 | Full Response | ||
SUB142684 | Screening | -5 | -5 | 1 | Screening Visit | Placebo | Yes | No | M | 23 | Full Response | |
SUB142685 | Adverse Events | 0 | 5 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Adverse Events | 0 | 30 | 2 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Adverse Events | 5 | 9 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Adverse Events | 7 | 9 | 4 | Feeling hot (Body temperature perception) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Adverse Events | 8 | 5 | Anxiety (Anxiety symptoms) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 24 | 6 | Myalgia (Muscle pains) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 46 | 7 | Anxiety (Anxiety symptoms) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 69 | 8 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 340 | 9 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 370 | 10 | Ataxia (Cerebellar coordination and balance disturbances) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Adverse Events | 370 | 11 | Temperature intolerance (General signs and symptoms NEC) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 2 | 2 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 5 | 5 | 3 | Phase 6000: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 7 | 7 | 4 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 30 | 30 | 5 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 91 | 91 | 6 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 190 | 190 | 7 | Phase 3006: Clinical visit (CM) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 279 | 279 | 8 | Phase 3009: Clinical visit (CM) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Clinical Assessments | 370 | 370 | 9 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | -141 | 1 | Normensal (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 PATCH TOP]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | -29 | 148 | 2 | Zolpidem tartrate (PSYCHOLEPTICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | 52 | 339 | 3 | Fluoxetine hydrochloride (PSYCHOANALEPTICS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | 52 | 4 | Lorazepam (PSYCHOLEPTICS [0.5 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 92 | 178 | 5 | Amantadine (ANTI-PARKINSON DRUGS [100 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | 136 | 189 | 6 | Tizanidine (MUSCLE RELAXANTS [4 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | 149 | 7 | Eszopiclone (PSYCHOLEPTICS [3 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 191 | 8 | Cyclobenzaprine hydrochloride (MUSCLE RELAXANTS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 191 | 9 | Nabumetone (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [500 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 209 | 339 | 10 | Amantadine (ANTI-PARKINSON DRUGS [100 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142685 | Concomitant Medications | 209 | 11 | Amantadine (ANTI-PARKINSON DRUGS [100 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 340 | 12 | Fluoxetine hydrochloride (PSYCHOANALEPTICS [20 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 340 | 13 | Modafinil (PSYCHOANALEPTICS [200 MG P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Concomitant Medications | 14 | Fexofenadine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 32 | Full Response | |||
SUB142685 | Full Response | 91 | 91 | 1 | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | No Response | 190 | 190 | 2 | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Partial Response | 370 | 370 | 3 | Albuterol | Yes | Yes | F | 32 | Full Response | ||
SUB142685 | Screening | -5 | -5 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 32 | Full Response | |
SUB142686 | Adverse Events | 0 | 7 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 1 | 2 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Adverse Events | 7 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Adverse Events | 27 | 35 | 4 | Epistaxis (Nasal disorders NEC) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 28 | 5 | Depressed mood (Mood alterations with depressive symptoms) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Adverse Events | 47 | 47 | 6 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 85 | 85 | 7 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 267 | 313 | 8 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 363 | 552 | 9 | Nuclear magnetic resonance imaging abnormal (Imaging procedures NEC) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Adverse Events | 552 | 10 | Nuclear magnetic resonance imaging abnormal (Imaging procedures NEC) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 34 | 34 | 4 | Phase 3001: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 90 | 90 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 188 | 188 | 6 | Phase 3006: Clinical visit | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 272 | 272 | 7 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 363 | 363 | 8 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 454 | 454 | 9 | Phase 3015: Clinical visit (CM) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Clinical Assessments | 552 | 552 | 10 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Concomitant Medications | -27 | 14 | 1 | Oxybutynin hydrochloride (UROLOGICALS [10 MG PO]) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | Concomitant Medications | 267 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Concomitant Medications | 267 | 3 | Medinite (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Concomitant Medications | 363 | 365 | 4 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1 GM IV]) | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142686 | No Response | 90 | 90 | 1 | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | No Response | 188 | 188 | 2 | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | No Response | 552 | 552 | 4 | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Partial Response | 363 | 363 | 3 | Albuterol | Yes | Yes | F | 23 | Partial Response | ||
SUB142686 | Screening | -6 | -6 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 23 | Partial Response | |
SUB142687 | Adverse Events | 0 | 1 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 22 | 25 | 2 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 24 | 3 | Onychomycosis (Fungal infections NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 39 | 4 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 43 | 43 | 5 | Hot flush (Peripheral vascular disorders NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 53 | 6 | Dry mouth (Oral dryness and saliva altered) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 65 | 65 | 7 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 66 | 66 | 8 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 141 | 141 | 9 | Flushing (Peripheral vascular disorders NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 141 | 141 | 10 | Hyperhidrosis (Apocrine and eccrine gland disorders) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 141 | 141 | 11 | Tremor (Tremor (excl congenital)) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 141 | 141 | 12 | Vertigo (Inner ear signs and symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 183 | 13 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 187 | 190 | 14 | Nausea (Nausea and vomiting symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 187 | 190 | 15 | Vertigo (Inner ear signs and symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 187 | 16 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 232 | 233 | 17 | Vertigo (Inner ear signs and symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 256 | 256 | 18 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 280 | 280 | 19 | Erythema (Erythemas) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 280 | 280 | 20 | Tremor (Tremor (excl congenital)) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 280 | 280 | 21 | Vomiting (Nausea and vomiting symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 306 | 310 | 22 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 361 | 362 | 23 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 423 | 423 | 24 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 468 | 469 | 25 | Vomiting (Nausea and vomiting symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 468 | 471 | 26 | Vertigo (Inner ear signs and symptoms) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 469 | 27 | Hypoacusis (Hearing losses) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Adverse Events | 535 | 535 | 28 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Adverse Events | 628 | 635 | 29 | Gastroenteritis (Abdominal and gastrointestinal infections) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 30 | 30 | 4 | Phase 3001: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 183 | 183 | 6 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 189 | 189 | 7 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 266 | 266 | 8 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 364 | 364 | 9 | Phase 3012: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 447 | 447 | 10 | Phase 3015: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 469 | 469 | 11 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 539 | 539 | 12 | Phase 3018: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 637 | 637 | 13 | Phase 3021: Clinical visit (AE) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Clinical Assessments | 728 | 728 | 14 | Phase 3024: Clinical visit (CM) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 99 | 148 | 1 | Mefloquine hydrochloride (ANTIPROTOZOALS [250 MG PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 112 | 112 | 2 | Yellow fever vaccine (VACCINES [0.5 ML SC]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 112 | 118 | 3 | Typhoid vaccine (VACCINES [1 CAP PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 189 | 469 | 4 | Prochlorperazine edisylate (ANTIEMETICS AND ANTINAUSEANTS [5 MG PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 197 | 5 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Concomitant Medications | 469 | 471 | 6 | Meclozine (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 695 | 695 | 7 | Influenza vaccine (VACCINES [1 INJ. S.C.]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 695 | 695 | 8 | Pneumococcal vaccine (VACCINES [1 INJ. S.C.]) | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142687 | Concomitant Medications | 9 | Fluoxetine (PSYCHOANALEPTICS [40 MG PO]) | Placebo | Yes | Yes | F | 46 | Partial Response | |||
SUB142687 | No Response | 84 | 84 | 1 | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | No Response | 364 | 364 | 3 | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | No Response | 539 | 539 | 4 | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | No Response | 728 | 728 | 5 | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Partial Response | 183 | 183 | 2 | Placebo | Yes | Yes | F | 46 | Partial Response | ||
SUB142687 | Screening | -7 | -7 | 1 | Screening Visit | Placebo | Yes | Yes | F | 46 | Partial Response | |
SUB142688 | Adverse Events | 0 | 1 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Adverse Events | 0 | 2 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Adverse Events | 442 | 445 | 3 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Adverse Events | 698 | 705 | 4 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 12 | 12 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 35 | 35 | 4 | Phase 3001: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 83 | 83 | 5 | Phase 3003: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 172 | 172 | 6 | Phase 3006: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 270 | 270 | 7 | Phase 3009: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 357 | 357 | 8 | Phase 3012: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 449 | 449 | 9 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 553 | 553 | 10 | Phase 3018: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 636 | 636 | 11 | Phase 3021: Clinical visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Clinical Assessments | 733 | 733 | 12 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Concomitant Medications | -1833 | 1 | Ascorbic acid (VITAMINS [UNK MG PO]) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Concomitant Medications | -1833 | 2 | Calcium (MINERAL SUPPLEMENTS [500 MG PO]) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Concomitant Medications | -1833 | 3 | Selenium (MINERAL SUPPLEMENTS [UNK UNK PO]) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Concomitant Medications | -1833 | 4 | Vitamin b complex (VITAMINS [UNK MG PO]) | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Concomitant Medications | 442 | 445 | 5 | Loratadine (ANTIHISTAMINES FOR SYSTEMIC USE [1 TAB P.O.]) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Concomitant Medications | 442 | 445 | 6 | Paracetamol (ANALGESICS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | Concomitant Medications | 698 | 705 | 7 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142688 | No Response | 83 | 83 | 1 | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | No Response | 553 | 553 | 4 | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | No Response | 733 | 733 | 5 | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Partial Response | 172 | 172 | 2 | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Partial Response | 357 | 357 | 3 | Placebo | Yes | Yes | F | 35 | Partial Response | ||
SUB142688 | Screening | -8 | -8 | 1 | Screening Visit | Placebo | Yes | Yes | F | 35 | Partial Response | |
SUB142689 | Adverse Events | 8 | 10 | 1 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 8 | 10 | 2 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 12 | 12 | 3 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 16 | 16 | 4 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 16 | 16 | 5 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 21 | 21 | 6 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 26 | 27 | 7 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 39 | 39 | 8 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 54 | 54 | 9 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 59 | 63 | 10 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 65 | 65 | 11 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 66 | 69 | 12 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 75 | 83 | 13 | Back injury (Site specific injuries NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 83 | 86 | 14 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 96 | 98 | 15 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 102 | 102 | 16 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 109 | 109 | 17 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 112 | 133 | 18 | Myalgia (Muscle pains) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 124 | 125 | 19 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 126 | 128 | 20 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 127 | 129 | 21 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 142 | 142 | 22 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 143 | 143 | 23 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 146 | 146 | 24 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 153 | 153 | 25 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 158 | 158 | 26 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 169 | 169 | 27 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 181 | 181 | 28 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 191 | 191 | 29 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 193 | 193 | 30 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 197 | 197 | 31 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 203 | 203 | 32 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 208 | 208 | 33 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 212 | 212 | 34 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 223 | 223 | 35 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 227 | 227 | 36 | Post procedural pain (Non-site specific procedural complications) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 233 | 233 | 37 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 261 | 261 | 38 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 271 | 279 | 39 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 306 | 309 | 40 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 311 | 312 | 41 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 314 | 315 | 42 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 322 | 323 | 43 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 326 | 327 | 44 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 331 | 362 | 45 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 356 | 357 | 46 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 369 | 370 | 47 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 369 | 370 | 48 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 376 | 377 | 49 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 385 | 386 | 50 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 393 | 394 | 51 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 417 | 418 | 52 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 434 | 435 | 53 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 435 | 436 | 54 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 442 | 443 | 55 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 457 | 458 | 56 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 457 | 458 | 57 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 459 | 460 | 58 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 461 | 462 | 59 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 461 | 462 | 60 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 475 | 476 | 61 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 494 | 495 | 62 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 497 | 498 | 63 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 511 | 512 | 64 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 518 | 519 | 65 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 520 | 521 | 66 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 544 | 545 | 67 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 547 | 548 | 68 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 556 | 557 | 69 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 557 | 558 | 70 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 561 | 562 | 71 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 581 | 582 | 72 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 603 | 604 | 73 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 616 | 617 | 74 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 626 | 627 | 75 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 641 | 642 | 76 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 658 | 659 | 77 | Injection site hypersensitivity (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 658 | 659 | 78 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 669 | 670 | 79 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 674 | 675 | 80 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 690 | 691 | 81 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 707 | 708 | 82 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 708 | 714 | 83 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 708 | 714 | 84 | Back pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Adverse Events | 718 | 719 | 85 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 91 | 91 | 5 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 189 | 189 | 6 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 266 | 266 | 7 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 370 | 370 | 8 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 455 | 455 | 9 | Phase 3015: Clinical visit (AE) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 553 | 553 | 10 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 644 | 644 | 11 | Phase 3021: Clinical visit (AE) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Clinical Assessments | 721 | 721 | 12 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | -4025 | 1 | Calcium carbonate (MINERAL SUPPLEMENTS [3 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | Concomitant Medications | -1834 | 2 | Vitamins (VITAMINS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | Concomitant Medications | 8 | 10 | 3 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [400 MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 13 | 13 | 4 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [400 MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 59 | 61 | 5 | Cold-eeze (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 60 | 60 | 6 | Diphenhydramine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 60 | 62 | 7 | Medinite (ANALGESICS [UNK UNK P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 75 | 75 | 8 | Hydromorphone hydrochloride (ANALGESICS [UNK MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 75 | 75 | 9 | Ketorolac tromethamine (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [UNK MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 75 | 75 | 10 | Morphine (ANALGESICS [UNK MG IV]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 75 | 76 | 11 | Tylox (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 76 | 83 | 12 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 83 | 84 | 13 | Medinite (ANALGESICS [UNK UNK P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 83 | 85 | 14 | Cold-eeze (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 89 | 89 | 15 | Cold-eeze (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 126 | 127 | 16 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 227 | 227 | 17 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 271 | 279 | 18 | Medinite (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 272 | 277 | 19 | Robitussin (COUGH AND COLD PREPARATIONS [1 TSP. P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 331 | 362 | 20 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | Concomitant Medications | 708 | 714 | 21 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG P.O.]) | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142689 | No Response | 370 | 370 | 3 | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | No Response | 553 | 553 | 4 | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | No Response | 721 | 721 | 5 | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | Partial Response | 91 | 91 | 1 | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | Partial Response | 189 | 189 | 2 | Albuterol | Yes | Yes | F | 42 | Partial Response | ||
SUB142689 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 42 | Partial Response | |
SUB142690 | Adverse Events | 27 | 34 | 1 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 81 | 81 | 2 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 105 | 106 | 3 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 113 | 114 | 4 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 120 | 121 | 5 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 122 | 123 | 6 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 127 | 137 | 7 | Ear infection (Ear infections) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 127 | 8 | Ear disorder (Ear disorders NEC) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Adverse Events | 170 | 9 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Adverse Events | 170 | 10 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Adverse Events | 170 | 11 | Monoparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Adverse Events | 208 | 12 | Myalgia (Muscle pains) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Adverse Events | 315 | 321 | 13 | Ear infection (Ear infections) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Adverse Events | 684 | 691 | 14 | Rash (Rashes, eruptions and exanthems NEC) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 31 | 31 | 4 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 83 | 83 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 106 | 106 | 6 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 169 | 169 | 7 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 267 | 267 | 8 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 351 | 351 | 9 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 454 | 454 | 10 | Phase 3015: Clinical visit | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 533 | 533 | 11 | Phase 3018: Clinical visit | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 630 | 630 | 12 | Phase 3021: Clinical visit | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Clinical Assessments | 714 | 714 | 13 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Concomitant Medications | 27 | 31 | 1 | Nasal decongestants for systemic use (NASAL PREPARATIONS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Concomitant Medications | 127 | 129 | 2 | Oxymetazoline hydrochloride (NASAL PREPARATIONS [2 DROPS NASAL]) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Concomitant Medications | 127 | 136 | 3 | Hydrocortisone-neomycin-polymyxin b (CORTICOSTEROIDS, DERMATOLOGICAL PREPARATIONS [2 DROPS TOP]) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Concomitant Medications | 127 | 4 | Ergocalciferol (VITAMINS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Concomitant Medications | 127 | 5 | Fish oil (LIPID MODIFYING AGENTS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Concomitant Medications | 170 | 6 | Paracetamol (ANALGESICS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Concomitant Medications | 315 | 321 | 7 | Neomycin polymixin (ANTIBIOTICS AND CHEMOTHERAPEUTICS FOR DERMATOLOGICAL USE [4 GTTS TOP]) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Concomitant Medications | 684 | 691 | 8 | Mupirocin (ANTIBIOTICS AND CHEMOTHERAPEUTICS FOR DERMATOLOGICAL USE [2% K TOP]) | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142690 | Full Response | 83 | 83 | 1 | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Full Response | 169 | 169 | 2 | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | No Response | 351 | 351 | 3 | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | No Response | 533 | 533 | 4 | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Partial Response | 714 | 714 | 5 | Placebo | Yes | Yes | M | 36 | Full Response | ||
SUB142690 | Screening | -6 | -6 | 1 | Screening Visit | Placebo | Yes | Yes | M | 36 | Full Response | |
SUB142691 | Adverse Events | 0 | 2 | 1 | Injection site urticaria (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 1 | 2 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 5 | 3 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 26 | 57 | 4 | Menstruation irregular (Menstruation and uterine bleeding NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 43 | 163 | 5 | Vision blurred (Partial vision loss) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 43 | 6 | Postnasal drip (Upper respiratory tract signs and symptoms) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 53 | 163 | 7 | Myalgia (Muscle pains) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 63 | 8 | Constipation (Gastrointestinal atonic and hypomotility disorders NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 85 | 87 | 9 | Injection site urticaria (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 103 | 106 | 10 | Hypoaesthesia oral (Oral soft tissue signs and symptoms) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 111 | 111 | 11 | Injection site urticaria (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 119 | 161 | 12 | Sinusitis (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 138 | 148 | 13 | Cough (Coughing and associated symptoms) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 148 | 14 | Medical device complication (Device related complications) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 148 | 15 | Pharyngolaryngeal pain (Upper respiratory tract signs and symptoms) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 245 | 16 | Pain (Pain and discomfort NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 324 | 17 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 418 | 439 | 18 | Sciatica (Lumbar spinal cord and nerve root disorders) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 446 | 513 | 19 | Musculoskeletal chest pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 502 | 20 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 513 | 635 | 21 | Haemoptysis (Coughing and associated symptoms) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 529 | 22 | Myalgia (Muscle pains) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Adverse Events | 608 | 614 | 23 | Post procedural pain (Non-site specific procedural complications) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 610 | 616 | 24 | Nasal congestion (Nasal congestion and inflammations) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Adverse Events | 635 | 25 | Post procedural complication (Non-site specific procedural complications) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 1 | 1 | 2 | Phase 6000: Telephone assessment (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 2 | 2 | 3 | Phase 2005: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 5 | 5 | 4 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 28 | 28 | 5 | Phase 3001: Clinical visit (AE) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 84 | 84 | 6 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 175 | 175 | 7 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 266 | 266 | 8 | Phase 3009: Clinical visit (AE) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 355 | 355 | 9 | Phase 3012: Clinical visit (AE) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 455 | 455 | 10 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 537 | 537 | 11 | Phase 3018: Clinical visit (AE) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 631 | 631 | 12 | Phase 3021: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Clinical Assessments | 726 | 726 | 13 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | -157 | 63 | 1 | Alprazolam (PSYCHOLEPTICS [0.25 MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | -127 | 63 | 2 | Calcium (MINERAL SUPPLEMENTS [1500 MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 0 | 1 | 3 | Diphenhydramine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 63 | 365 | 4 | Fluticasone propionate (NASAL PREPARATIONS [1-2 SPRAY K IN]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 63 | 5 | Trazodone (PSYCHOANALEPTICS [50 MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Concomitant Medications | 124 | 134 | 6 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 138 | 148 | 7 | Augmentin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 365 | 423 | 8 | Mometasone furoate (NASAL PREPARATIONS [1-2 SPRAY K IN]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 454 | 543 | 9 | Naproxen sodium (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 609 | 614 | 10 | Tylox (ANALGESICS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 609 | 616 | 11 | Oxymetazoline hydrochloride (NASAL PREPARATIONS [UNK UNK IN]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 609 | 616 | 12 | Pseudoephedrine hydrochloride (NASAL PREPARATIONS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142691 | Concomitant Medications | 635 | 13 | Fluticasone propionate (NASAL PREPARATIONS [1 SPRAY IN]) | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Concomitant Medications | 14 | Multivitamins (VITAMINS [1 TAB PO]) | Placebo | Yes | Yes | F | 45 | Partial Response | |||
SUB142691 | No Response | 537 | 537 | 4 | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | No Response | 726 | 726 | 5 | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Partial Response | 84 | 84 | 1 | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Partial Response | 175 | 175 | 2 | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Partial Response | 355 | 355 | 3 | Placebo | Yes | Yes | F | 45 | Partial Response | ||
SUB142691 | Screening | -7 | -7 | 1 | Screening Visit | Placebo | Yes | Yes | F | 45 | Partial Response | |
SUB142692 | Adverse Events | 8 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Adverse Events | 108 | 126 | 2 | Pneumonia (Lower respiratory tract and lung infections) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Adverse Events | 371 | 3 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Adverse Events | 461 | 653 | 4 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 32 | 32 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 90 | 90 | 5 | Phase 3003: Clinical visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 186 | 186 | 6 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 280 | 280 | 7 | Phase 3009: Clinical visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 371 | 371 | 8 | Phase 3012: Clinical visit (AE) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 468 | 468 | 9 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 545 | 545 | 10 | Phase 3018: Clinical visit (CM) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 643 | 643 | 11 | Phase 3021: Clinical visit (CM) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Clinical Assessments | 714 | 714 | 12 | Phase 3024: Clinical visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 108 | 116 | 1 | Medinite (ANALGESICS [K K PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 110 | 112 | 2 | Theraflu (ANALGESICS [K K PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 111 | 125 | 3 | Acetylsalicylic acid (ANALGESICS [K TAB PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 115 | 132 | 4 | Cough Syrup (COUGH AND COLD PREPARATIONS [K K PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 117 | 126 | 5 | Levofloxacin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 372 | 6 | Modafinil (PSYCHOANALEPTICS [100 MG P.O.]) | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Concomitant Medications | 461 | 7 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Concomitant Medications | 504 | 504 | 8 | Influenza vaccine (VACCINES [1 INJ. S.C.]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Concomitant Medications | 565 | 565 | 9 | Pneumococcal vaccine (VACCINES [1 INJ. S.C.]) | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142692 | Full Response | 90 | 90 | 1 | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | No Response | 371 | 371 | 3 | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | No Response | 545 | 545 | 4 | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | No Response | 714 | 714 | 5 | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Partial Response | 186 | 186 | 2 | Albuterol | Yes | Yes | M | 42 | Full Response | ||
SUB142692 | Screening | -8 | -8 | 1 | Screening Visit | Albuterol | Yes | Yes | M | 42 | Full Response | |
SUB142693 | Adverse Events | 0 | 28 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Adverse Events | 247 | 408 | 2 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 2 | 2 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (CM) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 93 | 93 | 5 | Phase 3003: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 177 | 177 | 6 | Phase 3006: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 275 | 275 | 7 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 366 | 366 | 8 | Phase 3012: Clinical visit (CM) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 462 | 462 | 9 | Phase 3015: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 554 | 554 | 10 | Phase 3018: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 637 | 637 | 11 | Phase 3021: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Clinical Assessments | 723 | 723 | 12 | Phase 3024: Clinical visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Concomitant Medications | -53 | 207 | 1 | Fluoxetine (PSYCHOANALEPTICS [20 MG PO]) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Concomitant Medications | -32 | 12 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [600 MG PO]) | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142693 | Concomitant Medications | 285 | 3 | Fluoxetine (PSYCHOANALEPTICS [20 MG PO]) | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | Concomitant Medications | 300 | 4 | Acetylsalicylic acid (ANTITHROMBOTIC AGENTS [325 MG PO]) | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | No Response | 177 | 177 | 2 | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | No Response | 723 | 723 | 5 | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | Partial Response | 93 | 93 | 1 | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | Partial Response | 366 | 366 | 3 | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | Partial Response | 554 | 554 | 4 | Albuterol | Yes | Yes | M | 44 | Partial Response | ||
SUB142693 | Screening | -4 | -4 | 1 | Screening Visit | Albuterol | Yes | Yes | M | 44 | Partial Response | |
SUB142694 | Adverse Events | 4 | 7 | 1 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 10 | 10 | 2 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 13 | 3 | Insomnia (Disturbances in initiating and maintaining sleep) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 24 | 25 | 4 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 24 | 25 | 5 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 24 | 25 | 6 | Injection site urticaria (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 40 | 40 | 7 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 153 | 153 | 8 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 159 | 159 | 9 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 159 | 10 | Erythema (Erythemas) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 166 | 166 | 11 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 172 | 172 | 12 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 363 | 13 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 440 | 14 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 440 | 15 | Contusion (Non-site specific injuries NEC) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 440 | 16 | Contusion (Non-site specific injuries NEC) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Adverse Events | 520 | 520 | 17 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 520 | 520 | 18 | Pain (Pain and discomfort NEC) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 520 | 520 | 19 | Tremor (Tremor (excl congenital)) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 538 | 542 | 20 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 565 | 565 | 21 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 577 | 577 | 22 | Injection site swelling (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Adverse Events | 646 | 647 | 23 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Clinical visit | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Clinical visit (AE) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 95 | 95 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 179 | 179 | 6 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 272 | 272 | 7 | Phase 3009: Clinical visit (CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 356 | 356 | 8 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 448 | 448 | 9 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 543 | 543 | 10 | Phase 3018: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 641 | 641 | 11 | Phase 3021: Clinical visit (AE) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Clinical Assessments | 725 | 725 | 12 | Phase 3024: Clinical visit (AE) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Concomitant Medications | 24 | 88 | 1 | Diphenhydramine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Concomitant Medications | 96 | 2 | Multivitamins (VITAMINS [1 TAB PO]) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Concomitant Medications | 96 | 3 | Psyllium hydrophilic mucilloid (DRUGS FOR CONSTIPATION [K K PO]) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Concomitant Medications | 210 | 301 | 4 | Lorazepam (PSYCHOLEPTICS [1 TAB P.O.]) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Concomitant Medications | 301 | 5 | Sertraline hydrochloride (PSYCHOANALEPTICS [50 MG P.O.]) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Concomitant Medications | 440 | 6 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Concomitant Medications | 538 | 542 | 7 | Azithromycin (ANTIBACTERIALS FOR SYSTEMIC USE [1 TAB P.O.]) | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142694 | Full Response | 95 | 95 | 1 | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | No Response | 179 | 179 | 2 | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | No Response | 356 | 356 | 3 | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | No Response | 543 | 543 | 4 | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | No Response | 725 | 725 | 5 | Placebo | Yes | Yes | F | 44 | Full Response | ||
SUB142694 | Screening | -8 | -8 | 1 | Screening Visit | Placebo | Yes | Yes | F | 44 | Full Response | |
SUB142695 | Adverse Events | -2 | 1 | Pharyngolaryngeal pain (Upper respiratory tract signs and symptoms) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 1 | 364 | 2 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Adverse Events | 5 | 3 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 19 | 4 | Pruritus (Pruritus NEC) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 25 | 5 | Haematochezia (Non-site specific gastrointestinal haemorrhages) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 41 | 67 | 6 | Multiple sclerosis (Multiple sclerosis acute and progressive) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Adverse Events | 75 | 114 | 7 | Multiple sclerosis (Multiple sclerosis acute and progressive) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Adverse Events | 84 | 8 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 176 | 9 | Multiple sclerosis (Multiple sclerosis acute and progressive) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 184 | 10 | Nuclear magnetic resonance imaging abnormal (Imaging procedures NEC) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Adverse Events | 269 | 269 | 11 | Altered visual depth perception (Refractive and accommodative disorders) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Adverse Events | 350 | 350 | 12 | Dermal cyst (Skin neoplasms benign) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Adverse Events | 360 | 364 | 13 | Toothache (Dental pain and sensation disorders) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: No assessment (missed visit) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 45 | 45 | 5 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 91 | 91 | 6 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 106 | 106 | 7 | Phase 6000: Clinical visit (CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 184 | 184 | 8 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 286 | 286 | 9 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Clinical Assessments | 364 | 364 | 10 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | -371 | 342 | 1 | Mirtazapine (PSYCHOANALEPTICS [10 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | -37 | 0 | 2 | Tetracycline (ANTIBACTERIALS FOR SYSTEMIC USE [250 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | -1 | 4 | 3 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 29 | 32 | 4 | Modafinil (PSYCHOANALEPTICS [200 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 39 | 98 | 5 | Hydroxyzine (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 98 | 98 | 6 | Lorazepam (PSYCHOLEPTICS [1 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 106 | 108 | 7 | Dexamethasone (CORTICOSTEROIDS FOR SYSTEMIC USE [20 MG IV]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 189 | 191 | 8 | Dexamethasone (CORTICOSTEROIDS FOR SYSTEMIC USE [20 MG IV]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 224 | 224 | 9 | Dexamethasone (CORTICOSTEROIDS FOR SYSTEMIC USE [20 MG IV]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 253 | 253 | 10 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1000 MG IV]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 286 | 286 | 11 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1000 MG IV]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | Concomitant Medications | 343 | 12 | Topiramate (ANALGESICS [15 MG PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Concomitant Medications | 350 | 355 | 13 | Antibiotics (ANTIBACTERIALS FOR SYSTEMIC USE [UNK UNK PO]) | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142695 | No Response | 364 | 364 | 3 | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Partial Response | 91 | 91 | 1 | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Partial Response | 184 | 184 | 2 | Placebo | Yes | Yes | F | 18 | Partial Response | ||
SUB142695 | Screening | -5 | -5 | 1 | Screening Visit | Placebo | Yes | Yes | F | 18 | Partial Response | |
SUB142696 | Adverse Events | 0 | 1 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 0 | 2 | Injection site oedema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 1 | 35 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 5 | 9 | 4 | Hemiparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 6 | 35 | 5 | Nervousness (Anxiety symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 19 | 123 | 6 | Musculoskeletal stiffness (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 24 | 31 | 7 | Neuropathic pain (Sensory abnormalities NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 60 | 63 | 8 | Pollakiuria (Bladder and urethral symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 77 | 77 | 9 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 84 | 123 | 10 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 87 | 95 | 11 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 105 | 123 | 12 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 130 | 133 | 13 | Malaise (Asthenic conditions) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 192 | 14 | Temperature intolerance (General signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 196 | 197 | 15 | Disorientation (Confusion and disorientation) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 197 | 16 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 207 | 17 | Pruritus (Pruritus NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 213 | 215 | 18 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 233 | 234 | 19 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 276 | 276 | 20 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 296 | 296 | 21 | Dysarthria (Speech and language abnormalities) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 328 | 22 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 340 | 340 | 23 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 349 | 363 | 24 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 366 | 25 | Dehydration (Total fluid volume decreased) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 443 | 452 | 26 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 456 | 27 | Muscle spasticity (Neuromuscular disorders NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 456 | 28 | Neuropathic pain (Sensory abnormalities NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 463 | 29 | Hemiparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 470 | 472 | 30 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 495 | 31 | Pollakiuria (Bladder and urethral symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 518 | 523 | 32 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 519 | 519 | 33 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 540 | 549 | 34 | Dyspnoea (Breathing abnormalities) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 540 | 549 | 35 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 547 | 547 | 36 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 548 | 37 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Adverse Events | 556 | 557 | 38 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 557 | 557 | 39 | Dyspepsia (Dyspeptic signs and symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 560 | 565 | 40 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 567 | 572 | 41 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 640 | 640 | 42 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 645 | 646 | 43 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 647 | 673 | 44 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 654 | 654 | 45 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 659 | 665 | 46 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 666 | 666 | 47 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 667 | 677 | 48 | Lymphadenopathy (Lymphatic system disorders NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 695 | 707 | 49 | Lymphadenopathy (Lymphatic system disorders NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 695 | 707 | 50 | Sinus congestion (Paranasal sinus disorders (excl infections and neoplasms)) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Adverse Events | 696 | 703 | 51 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 9 | 9 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 105 | 105 | 6 | Phase 6000: Clinical visit (AE) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 170 | 170 | 7 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 254 | 254 | 8 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 371 | 371 | 9 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 456 | 456 | 10 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 539 | 539 | 11 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 639 | 639 | 12 | Phase 3021: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Clinical Assessments | 735 | 735 | 13 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | -1923 | 1 | Eugynon (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Concomitant Medications | -70 | 130 | 2 | Gabapentin (ANALGESICS [300 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 19 | 3 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Concomitant Medications | 108 | 4 | Calcium (MINERAL SUPPLEMENTS [1475 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Concomitant Medications | 131 | 135 | 5 | Gabapentin (ANALGESICS [300 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 207 | 6 | Diphenhydramine (ANTIHISTAMINES FOR SYSTEMIC USE [25 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Concomitant Medications | 349 | 360 | 7 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 443 | 452 | 8 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 540 | 641 | 9 | Modafinil (PSYCHOANALEPTICS [200 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 554 | 641 | 10 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 667 | 677 | 11 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [250 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 695 | 707 | 12 | Doxycycline (ANTIBACTERIALS FOR SYSTEMIC USE [100 MG PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142696 | Concomitant Medications | 13 | Multivitamins (VITAMINS [1 TAB PO]) | Albuterol | Yes | Yes | F | 41 | Full Response | |||
SUB142696 | Full Response | 84 | 84 | 1 | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Full Response | 371 | 371 | 3 | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Full Response | 539 | 539 | 4 | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | No Response | 170 | 170 | 2 | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Partial Response | 735 | 735 | 5 | Albuterol | Yes | Yes | F | 41 | Full Response | ||
SUB142696 | Screening | -5 | -5 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 41 | Full Response | |
SUB142697 | Adverse Events | 1 | 28 | 1 | Headache (Headaches NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 1 | 33 | 2 | Heart rate increased (Heart rate and pulse investigations) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 1 | 33 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 1 | 4 | Injection site pain (Injection and infusion site reactions) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Adverse Events | 12 | 62 | 5 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 26 | 57 | 6 | Pollakiuria (Bladder and urethral symptoms) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 29 | 7 | Milia (Apocrine and eccrine gland disorders) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Adverse Events | 32 | 32 | 8 | Headache (Headaches NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 40 | 40 | 9 | Chest discomfort (General signs and symptoms NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 40 | 40 | 10 | Hypoaesthesia oral (Oral soft tissue signs and symptoms) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 42 | 11 | Constipation (Gastrointestinal atonic and hypomotility disorders NEC) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Adverse Events | 46 | 46 | 12 | Headache (Headaches NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 49 | 49 | 13 | Headache (Headaches NEC) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 53 | 57 | 14 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 57 | 72 | 15 | Pollakiuria (Bladder and urethral symptoms) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Adverse Events | 58 | 16 | Abdominal distension (Flatulence, bloating and distension) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Adverse Events | 61 | 61 | 17 | Abdominal pain lower (Gastrointestinal and abdominal pains (excl oral and throat)) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Clinical Assessments | 5 | 5 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Clinical Assessments | 33 | 33 | 4 | Phase 3001: Clinical visit (AE & CM) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Clinical Assessments | 62 | 62 | 5 | Phase 6000: Clinical visit (AE & CM) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Concomitant Medications | -55 | 1 | Gabapentin (ANALGESICS [100 MG PO]) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Concomitant Medications | 8 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [400 MG PO]) | Albuterol | No | No | F | 49 | No Response | ||
SUB142697 | Concomitant Medications | 29 | 29 | 3 | Hydrocortisone (CORTICOSTEROIDS FOR SYSTEMIC USE [UNK UNK SC]) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Concomitant Medications | 30 | 34 | 4 | Cefalexin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Albuterol | No | No | F | 49 | No Response | |
SUB142697 | Screening | -6 | -6 | 1 | Screening Visit | Albuterol | No | No | F | 49 | No Response | |
SUB142698 | Adverse Events | 3 | 4 | 1 | Gastrointestinal infection (Abdominal and gastrointestinal infections) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 4 | 8 | 2 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 5 | 7 | 3 | Insomnia (Disturbances in initiating and maintaining sleep) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 7 | 28 | 4 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 15 | 5 | Injection site oedema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 20 | 6 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 40 | 40 | 7 | Loss of consciousness (Disturbances in consciousness NEC) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 60 | 171 | 8 | Eosinophilia (Leukocytoses NEC) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 60 | 9 | Convulsion (Seizures and seizure disorders NEC) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 62 | 73 | 10 | Gait abnormal (Gait disturbances) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 70 | 71 | 11 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 102 | 12 | Injection site burning (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 120 | 13 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 226 | 14 | Seasonal allergy (Atopic disorders) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Adverse Events | 332 | 454 | 15 | Insomnia (Disturbances in initiating and maintaining sleep) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 350 | 350 | 16 | Diarrhoea (Diarrhoea (excl infective)) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 350 | 350 | 17 | Vomiting (Nausea and vomiting symptoms) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 402 | 404 | 18 | Myalgia (Muscle pains) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 405 | 405 | 19 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 561 | 561 | 20 | Flushing (Peripheral vascular disorders NEC) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 642 | 642 | 21 | Muscle cramp (Muscle related signs and symptoms NEC) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 698 | 701 | 22 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Adverse Events | 698 | 729 | 23 | Cough (Coughing and associated symptoms) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 60 | 60 | 5 | Phase 6000: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 74 | 74 | 6 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 171 | 171 | 7 | Phase 3006: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 266 | 266 | 8 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 360 | 360 | 9 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 455 | 455 | 10 | Phase 3015: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 558 | 558 | 11 | Phase 3018: Clinical visit | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 644 | 644 | 12 | Phase 3021: Clinical visit (AE) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Clinical Assessments | 740 | 740 | 13 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Concomitant Medications | 226 | 1 | Fexofenadine (ANTIHISTAMINES FOR SYSTEMIC USE [0.5 TAB PO]) | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Concomitant Medications | 325 | 325 | 2 | Influenza vaccine (VACCINES [1 UNK SC]) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Concomitant Medications | 662 | 662 | 3 | Influenza vaccine (VACCINES [1 UNK SC]) | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142698 | Concomitant Medications | 4 | Eugynon (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB PO]) | Albuterol | Yes | Yes | F | 47 | Full Response | |||
SUB142698 | Full Response | 74 | 74 | 1 | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | No Response | 558 | 558 | 4 | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | No Response | 740 | 740 | 5 | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Partial Response | 171 | 171 | 2 | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Partial Response | 360 | 360 | 3 | Albuterol | Yes | Yes | F | 47 | Full Response | ||
SUB142698 | Screening | -9 | -9 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 47 | Full Response | |
SUB142699 | Adverse Events | 0 | 30 | 1 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 0 | 30 | 2 | Injection site warmth (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 0 | 30 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 30 | 30 | 4 | Injection site bruising (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 36 | 36 | 5 | Injection site mass (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 70 | 71 | 6 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 71 | 72 | 7 | Injection site mass (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 71 | 72 | 8 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 87 | 89 | 9 | Injection site mass (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 98 | 100 | 10 | Injection site mass (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Adverse Events | 698 | 727 | 11 | Joint sprain (Limb injuries NEC (incl traumatic amputation)) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 6 | 6 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 30 | 30 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 187 | 187 | 6 | Phase 3006: Clinical visit (AE) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 282 | 282 | 7 | Phase 3009: Clinical visit (CM) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 370 | 370 | 8 | Phase 3012: Clinical visit | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 461 | 461 | 9 | Phase 3015: Clinical visit | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 554 | 554 | 10 | Phase 3018: Clinical visit (CM) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 622 | 622 | 11 | Phase 3021: Clinical visit | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Clinical Assessments | 728 | 728 | 12 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Concomitant Medications | -4941 | 462 | 1 | Levothyroxine sodium (THYROID THERAPY [0.137 MCG P.O]) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Concomitant Medications | -132 | 2 | Macrogol (DRUGS FOR CONSTIPATION [17 GMS P.O.]) | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Concomitant Medications | -11 | -7 | 3 | Cefalexin (ANTIBACTERIALS FOR SYSTEMIC USE [250 MG PO]) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | Concomitant Medications | 237 | 4 | Linum usitatissimum seed oil (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [1000 MG P.O.]) | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Concomitant Medications | 237 | 5 | Tegaserod maleate (DRUGS FOR CONSTIPATION [6 MG P.O.]) | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Concomitant Medications | 463 | 6 | Levothyroxine sodium (THYROID THERAPY [0.150 MCG P.O.]) | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Concomitant Medications | 698 | 727 | 7 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142699 | No Response | 370 | 370 | 3 | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | No Response | 554 | 554 | 4 | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | No Response | 728 | 728 | 5 | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Partial Response | 84 | 84 | 1 | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Partial Response | 187 | 187 | 2 | Albuterol | Yes | Yes | F | 44 | Partial Response | ||
SUB142699 | Screening | -8 | -8 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 44 | Partial Response | |
SUB142700 | Adverse Events | 1 | 2 | 1 | Injection site oedema (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 1 | 2 | 2 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 3 | 3 | Nasal dryness (Nasal disorders NEC) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Adverse Events | 88 | 4 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Adverse Events | 254 | 258 | 5 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 259 | 6 | Blood iron decreased (Mineral and electrolyte analyses) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Adverse Events | 509 | 509 | 7 | Epistaxis (Nasal disorders NEC) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 509 | 523 | 8 | Contusion (Non-site specific injuries NEC) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 509 | 567 | 9 | Facial pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 517 | 10 | Coordination abnormal (Cerebellar coordination and balance disturbances) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Adverse Events | 595 | 597 | 11 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Adverse Events | 628 | 12 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE & CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 175 | 175 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 259 | 259 | 7 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 374 | 374 | 8 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 459 | 459 | 9 | Phase 3015: Clinical visit | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 548 | 548 | 10 | Phase 3018: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 648 | 648 | 11 | Phase 3021: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Clinical Assessments | 735 | 735 | 12 | Phase 3024: Clinical visit (CM) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | -376 | 185 | 1 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [150 MG P.O.]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 1 | 1 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 186 | 541 | 3 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [112 MG P.O.]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 246 | 4 | Ferrous sulfate (ANTIANEMIC PREPARATIONS [1 TAB PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Concomitant Medications | 341 | 5 | Bupropion hydrochloride (PSYCHOANALEPTICS [150 MG PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Concomitant Medications | 509 | 519 | 6 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [125 MG PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 509 | 519 | 7 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [600 MG PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 520 | 8 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Concomitant Medications | 542 | 590 | 9 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [75 MG P.O.]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 597 | 714 | 10 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [75 MG P.O.]) | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142700 | Concomitant Medications | 715 | 11 | Venlafaxine hydrochloride (PSYCHOANALEPTICS [37.5 MG P.O.]) | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | No Response | 374 | 374 | 3 | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | No Response | 735 | 735 | 5 | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Partial Response | 84 | 84 | 1 | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Partial Response | 175 | 175 | 2 | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Partial Response | 548 | 548 | 4 | Placebo | Yes | Yes | F | 43 | Partial Response | ||
SUB142700 | Screening | -4 | -4 | 1 | Screening Visit | Placebo | Yes | Yes | F | 43 | Partial Response | |
SUB142701 | Adverse Events | 0 | 0 | 1 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | No | No | F | 40 | No Response | |
SUB142701 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | No | No | F | 40 | No Response | |
SUB142701 | Screening | -6 | -6 | 1 | Screening Visit | Placebo | No | No | F | 40 | No Response | |
SUB142702 | Adverse Events | 0 | 1 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Adverse Events | 1 | 2 | Injection site oedema (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Adverse Events | 7 | 7 | 3 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 7 | 7 | 4 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 8 | 9 | 5 | Nausea (Nausea and vomiting symptoms) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 27 | 27 | 6 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 35 | 35 | 7 | Injection site bruising (Injection and infusion site reactions) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 68 | 72 | 8 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 69 | 75 | 9 | Influenza (Influenza viral infections) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 94 | 10 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Adverse Events | 169 | 11 | Insomnia (Disturbances in initiating and maintaining sleep) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Adverse Events | 289 | 364 | 12 | Pollakiuria (Bladder and urethral symptoms) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 427 | 434 | 13 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 447 | 450 | 14 | Cerumen impaction (External ear disorders NEC) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 447 | 450 | 15 | Ear pain (Ear disorders NEC) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 500 | 611 | 16 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Adverse Events | 730 | 730 | 17 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment (AE & CM) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment (AE) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 29 | 29 | 4 | Phase 3001: Clinical visit (AE) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 92 | 92 | 5 | Phase 3003: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 156 | 156 | 6 | Phase 3006: Clinical visit (AE) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 279 | 279 | 7 | Phase 3009: Clinical visit (CM) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 364 | 364 | 8 | Phase 3012: Clinical visit (AE) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 458 | 458 | 9 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 505 | 505 | 10 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 548 | 548 | 11 | Phase 3018: Clinical visit | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 632 | 632 | 12 | Phase 3021: Clinical visit | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Clinical Assessments | 730 | 730 | 13 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Concomitant Medications | 2 | 1 | Multivitamins (VITAMINS [1 TABLETS PO]) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Concomitant Medications | 69 | 75 | 2 | Medinite (ANALGESICS [UNKNOWN ML OR CC PO]) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Concomitant Medications | 69 | 75 | 3 | Vicks formula 44m (ANALGESICS [UNKNOWN ML OR CC PO]) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Concomitant Medications | 157 | 647 | 4 | Modafinil (PSYCHOANALEPTICS [200 MG PO]) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Concomitant Medications | 169 | 5 | Excedrin p.m. (ANALGESICS [1 TAB PO]) | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Concomitant Medications | 447 | 450 | 6 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142702 | Full Response | 156 | 156 | 2 | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Full Response | 364 | 364 | 3 | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | No Response | 548 | 548 | 4 | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | No Response | 730 | 730 | 5 | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Partial Response | 92 | 92 | 1 | Placebo | Yes | Yes | M | 23 | Full Response | ||
SUB142702 | Screening | -4 | -4 | 1 | Screening Visit | Placebo | Yes | Yes | M | 23 | Full Response | |
SUB142703 | Adverse Events | 0 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | No | No | F | 44 | No Response | ||
SUB142703 | Adverse Events | 7 | 2 | Constipation (Gastrointestinal atonic and hypomotility disorders NEC) | Albuterol | No | No | F | 44 | No Response | ||
SUB142703 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | No | No | F | 44 | No Response | |
SUB142703 | Clinical Assessments | 7 | 7 | 2 | Phase 2007: Telephone assessment (AE) | Albuterol | No | No | F | 44 | No Response | |
SUB142703 | Clinical Assessments | 3 | Phase 2005: Other | Albuterol | No | No | F | 44 | No Response | |||
SUB142703 | Concomitant Medications | 15 | 1 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | No | No | F | 44 | No Response | ||
SUB142703 | Screening | -46 | -46 | 1 | Screening Visit | Albuterol | No | No | F | 44 | No Response | |
SUB142704 | Adverse Events | 1 | 1 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | Adverse Events | 5 | 9 | 2 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 70 | 3 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | Adverse Events | 86 | 258 | 4 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 93 | 258 | 5 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 178 | 210 | 6 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 244 | 245 | 7 | Nausea (Nausea and vomiting symptoms) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 246 | 249 | 8 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Adverse Events | 258 | 9 | Thyroid function test abnormal (Thyroid analyses) | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 27 | 27 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 84 | 84 | 5 | Phase 3003: Clinical visit (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 175 | 175 | 6 | Phase 3006: Clinical visit (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 211 | 211 | 7 | Phase 6000: Clinical visit (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Clinical Assessments | 258 | 258 | 8 | Phase 6000: Clinical visit (AE) | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142704 | Concomitant Medications | -1346 | 1 | Conlunett (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB PO]) | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | Full Response | 175 | 175 | 2 | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | No Response | 84 | 84 | 1 | Albuterol | Yes | No | F | 25 | Full Response | ||
SUB142704 | Screening | -6 | -6 | 1 | Screening Visit | Albuterol | Yes | No | F | 25 | Full Response | |
SUB142705 | Adverse Events | 207 | 227 | 1 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 212 | 227 | 2 | Anxiety (Anxiety symptoms) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 212 | 3 | Fatigue (Asthenic conditions) | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Adverse Events | 257 | 287 | 4 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 328 | 328 | 5 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 406 | 435 | 6 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 521 | 559 | 7 | Vaginitis (Female reproductive tract infections) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 632 | 637 | 8 | Conjunctivitis (Conjunctival infections, irritations and inflammations) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Adverse Events | 704 | 9 | Micturition urgency (Bladder and urethral symptoms) | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Adverse Events | 704 | 10 | Pollakiuria (Bladder and urethral symptoms) | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 90 | 90 | 5 | Phase 3003: Clinical visit | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 180 | 180 | 6 | Phase 3006: Clinical visit | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 223 | 223 | 7 | Phase 6000: Clinical visit (AE) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 271 | 271 | 8 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 355 | 355 | 9 | Phase 3012: Clinical visit (AE) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 459 | 459 | 10 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 552 | 552 | 11 | Phase 3018: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 634 | 634 | 12 | Phase 3021: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Clinical Assessments | 734 | 734 | 13 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Concomitant Medications | -2 | 1 | Oxybutynin hydrochloride (UROLOGICALS [10 MG PO]) | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Concomitant Medications | 224 | 230 | 2 | Lorazepam (PSYCHOLEPTICS [5 MG P.O.]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Concomitant Medications | 406 | 435 | 3 | Excedrin (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Concomitant Medications | 545 | 559 | 4 | Glucocorticoids (CORTICOSTEROIDS FOR SYSTEMIC USE [1 K VAG]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Concomitant Medications | 634 | 637 | 5 | Gentamicin (OPHTHALMOLOGICALS [1 GTTS TOP]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142705 | Concomitant Medications | 6 | Calcium (MINERAL SUPPLEMENTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |||
SUB142705 | Concomitant Medications | 7 | Multivitamins (VITAMINS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 41 | Partial Response | |||
SUB142705 | No Response | 180 | 180 | 2 | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | No Response | 355 | 355 | 3 | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | No Response | 552 | 552 | 4 | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | No Response | 734 | 734 | 5 | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Partial Response | 90 | 90 | 1 | Albuterol | Yes | Yes | F | 41 | Partial Response | ||
SUB142705 | Screening | -3 | -3 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 41 | Partial Response | |
SUB142706 | Adverse Events | 1 | 1 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 2 | 11 | 2 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 3 | 3 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 27 | 34 | 4 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 53 | 58 | 5 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 96 | 97 | 6 | Injection site urticaria (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 181 | 7 | Musculoskeletal stiffness (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 196 | 197 | 8 | Injection site urticaria (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 209 | 210 | 9 | Injection site urticaria (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 248 | 249 | 10 | Injection site urticaria (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 293 | 294 | 11 | Injection site bruising (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 366 | 367 | 12 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 368 | 374 | 13 | Urinary tract infection (Urinary tract infections) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 387 | 14 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 389 | 390 | 15 | Injection site urticaria (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 450 | 451 | 16 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 454 | 455 | 17 | Injection site bruising (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 454 | 455 | 18 | Injection site haemorrhage (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 492 | 493 | 19 | Eye pain (Ocular disorders NEC) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 515 | 20 | Blood thyroid stimulating hormone increased (Pituitary analyses anterior) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 529 | 530 | 21 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 530 | 531 | 22 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 564 | 574 | 23 | Urinary tract infection (Urinary tract infections) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 648 | 24 | Oedema peripheral (Oedema NEC) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Adverse Events | 709 | 715 | 25 | Vaginal discharge (Vulvovaginal signs and symptoms) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Adverse Events | 714 | 26 | Balance disorder (Cerebellar coordination and balance disturbances) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 35 | 35 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 83 | 83 | 5 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 182 | 182 | 6 | Phase 3006: Clinical visit (AE) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 266 | 266 | 7 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 364 | 364 | 8 | Phase 3012: Clinical visit | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 448 | 448 | 9 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 532 | 532 | 10 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 630 | 630 | 11 | Phase 3021: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Clinical Assessments | 714 | 714 | 12 | Phase 3024: Clinical visit (AE) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Concomitant Medications | -156 | 1 | Modafinil (PSYCHOANALEPTICS [100 MG P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 47 | 47 | 2 | Influenza vaccine (VACCINES [1 INJ. S.C.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Concomitant Medications | 53 | 58 | 3 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Concomitant Medications | 183 | 4 | Baclofen (MUSCLE RELAXANTS [10 MG P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 362 | 5 | Calcium (MINERAL SUPPLEMENTS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 362 | 6 | Multivitamins (VITAMINS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 368 | 374 | 7 | Sulfamethoxazole (ANTIBACTERIALS FOR SYSTEMIC USE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | Concomitant Medications | 387 | 8 | Paracetamol (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 536 | 9 | Levothyroxine (THYROID THERAPY [25 MCG P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Concomitant Medications | 564 | 574 | 10 | Bactrim (ANTIBACTERIALS FOR SYSTEMIC USE [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142706 | No Response | 182 | 182 | 2 | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | No Response | 364 | 364 | 3 | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | No Response | 532 | 532 | 4 | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | No Response | 714 | 714 | 5 | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Partial Response | 83 | 83 | 1 | Albuterol | Yes | Yes | F | 50 | Partial Response | ||
SUB142706 | Screening | -2 | -2 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 50 | Partial Response | |
SUB142707 | Adverse Events | 37 | 172 | 1 | Arthralgia (Joint related signs and symptoms) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Adverse Events | 122 | 136 | 2 | Post procedural pain (Non-site specific procedural complications) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Adverse Events | 288 | 295 | 3 | Paraesthesia (Paraesthesias and dysaesthesias) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Adverse Events | 335 | 371 | 4 | Depression (Depressive disorders) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Adverse Events | 362 | 5 | Back pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Adverse Events | 434 | 438 | 6 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Adverse Events | 679 | 710 | 7 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Clinical visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 27 | 27 | 4 | Phase 3001: Clinical visit (CM) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 91 | 91 | 5 | Phase 3003: Clinical visit (AE) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 169 | 169 | 6 | Phase 3006: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 267 | 267 | 7 | Phase 3009: Clinical visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 295 | 295 | 8 | Phase 6000: Clinical visit (AE) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 371 | 371 | 9 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 462 | 462 | 10 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 553 | 553 | 11 | Phase 3018: Clinical visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 645 | 645 | 12 | Phase 3021: Clinical visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Clinical Assessments | 734 | 734 | 13 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | -13 | 678 | 1 | Modafinil (PSYCHOANALEPTICS [200 MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | 8 | 2 | Digestives enzymes (DIGESTIVES, INCL. ENZYMES [1 TAB PO]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 8 | 3 | Ergocalciferol (VITAMINS [1 TAB PO]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 8 | 4 | Multivitamins (VITAMINS [1 TAB PO]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 8 | 5 | Tocopherol (VITAMINS [1 TAB PO]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 122 | 136 | 6 | Oxycodone hydrochloride (ANALGESICS [1 TAB PO]) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | 362 | 364 | 7 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [KK MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | 365 | 8 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [800 MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 403 | 9 | Acetylsalicylic acid (ANTITHROMBOTIC AGENTS [81 MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 434 | 438 | 10 | Medinite (ANALGESICS [1 TAB P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | 679 | 709 | 11 | Amantadine (ANTI-PARKINSON DRUGS [100 MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142707 | Concomitant Medications | 710 | 12 | Modafinil (PSYCHOANALEPTICS [400 MG P.O.]) | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Concomitant Medications | 13 | Mometasone furoate (NASAL PREPARATIONS [2 PUFFS INTRANASAL]) | Placebo | Yes | Yes | M | 44 | Partial Response | |||
SUB142707 | No Response | 91 | 91 | 1 | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | No Response | 169 | 169 | 2 | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | No Response | 553 | 553 | 4 | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | No Response | 734 | 734 | 5 | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Partial Response | 371 | 371 | 3 | Placebo | Yes | Yes | M | 44 | Partial Response | ||
SUB142707 | Screening | -8 | -8 | 1 | Screening Visit | Placebo | Yes | Yes | M | 44 | Partial Response | |
SUB142708 | Adverse Events | -6 | 4 | 1 | Constipation (Gastrointestinal atonic and hypomotility disorders NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 0 | 11 | 2 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 8 | 15 | 3 | Headache (Headaches NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 18 | 31 | 4 | Headache (Headaches NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 19 | 25 | 5 | Injection site bruising (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 32 | 6 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 40 | 7 | Injection site rash (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 49 | 61 | 8 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 51 | 53 | 9 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 57 | 10 | Urinary retention (Bladder and urethral symptoms) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 64 | 11 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 74 | 12 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 82 | 83 | 13 | Injection site bruising (Injection and infusion site reactions) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 89 | 14 | Nausea (Nausea and vomiting symptoms) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 159 | 179 | 15 | Excoriation (Non-site specific injuries NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 159 | 179 | 16 | Neck pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 183 | 193 | 17 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 187 | 259 | 18 | Multiple sclerosis (Multiple sclerosis acute and progressive) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 187 | 19 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Adverse Events | 190 | 231 | 20 | Monoparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 193 | 199 | 21 | Nausea (Nausea and vomiting symptoms) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 193 | 199 | 22 | Vomiting (Nausea and vomiting symptoms) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 193 | 228 | 23 | Facial neuralgia (Trigeminal disorders) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 193 | 259 | 24 | Headache (Headaches NEC) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 226 | 239 | 25 | Pregnancy (Normal pregnancy, labour and delivery) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Adverse Events | 239 | 239 | 26 | Abortion spontaneous (Abortions spontaneous) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 11 | 11 | 3 | Phase 2007: Telephone assessment (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 39 | 39 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 57 | 57 | 5 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 90 | 90 | 6 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 187 | 187 | 7 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 201 | 201 | 8 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Clinical Assessments | 259 | 259 | 9 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | -6 | 4 | 1 | Amantadine (ANTI-PARKINSON DRUGS [100 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | -3 | 2 | 2 | Doxycycline (ANTIBACTERIALS FOR SYSTEMIC USE [100 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 8 | 3 | Excedrin (ANALGESICS [1 TAB PO]) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Concomitant Medications | 8 | 4 | Paracetamol (ANALGESICS [500 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Concomitant Medications | 49 | 61 | 5 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [600 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 58 | 61 | 6 | Cyclobenzaprine hydrochloride (MUSCLE RELAXANTS [1 TAB PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 99 | 200 | 7 | Tegaserod maleate (DRUGS FOR CONSTIPATION [UNK MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 159 | 179 | 8 | Diazepam (PSYCHOLEPTICS [UNK MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 159 | 179 | 9 | Diclofenac (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [50 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 183 | 193 | 10 | Vicks formula 44m (ANALGESICS [30 CC PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 196 | 200 | 11 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1 GM IV]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 196 | 207 | 12 | Prochlorperazine edisylate (ANTIEMETICS AND ANTINAUSEANTS [25 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 196 | 228 | 13 | Carbamazepine (ANTIEPILEPTICS [100 MG PO]) | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142708 | Concomitant Medications | 200 | 14 | Crataegus laevigata (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [5 GTTS PO]) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Concomitant Medications | 200 | 15 | Sambucus nigra (UNSPECIFIED HERBAL AND TRADITIONAL MEDICINE [5 GTTS PO]) | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Partial Response | 90 | 90 | 1 | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Partial Response | 187 | 187 | 2 | Albuterol | Yes | No | F | 33 | Partial Response | ||
SUB142708 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | No | F | 33 | Partial Response | |
SUB142709 | Adverse Events | 0 | 82 | 1 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Adverse Events | 0 | 82 | 2 | Injection site oedema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Adverse Events | 0 | 82 | 3 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Adverse Events | 18 | 4 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Adverse Events | 29 | 5 | Hypoaesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Adverse Events | 52 | 6 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Adverse Events | 82 | 82 | 7 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Adverse Events | 275 | 8 | Sensory disturbance (Sensory abnormalities NEC) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Adverse Events | 429 | 9 | Arthralgia (Joint related signs and symptoms) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 34 | 34 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 82 | 82 | 5 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 181 | 181 | 6 | Phase 3006: Clinical visit (CM) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 262 | 262 | 7 | Phase 3009: Clinical visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 356 | 356 | 8 | Phase 3012: Clinical visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 459 | 459 | 9 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 545 | 545 | 10 | Phase 3018: Clinical visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Clinical Assessments | 668 | 668 | 11 | Phase 6000: Clinical visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Concomitant Medications | -104 | 1 | Normensal (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TABLETS PO]) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Concomitant Medications | 52 | 85 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [400 MG PO]) | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142709 | Concomitant Medications | 429 | 3 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Concomitant Medications | 4 | Fexofenadine hydrochloride (ANTIHISTAMINES FOR SYSTEMIC USE [1 TAB PO]) | Albuterol | Yes | Yes | F | 27 | Partial Response | |||
SUB142709 | No Response | 356 | 356 | 3 | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Partial Response | 82 | 82 | 1 | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Partial Response | 181 | 181 | 2 | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Partial Response | 545 | 545 | 4 | Albuterol | Yes | Yes | F | 27 | Partial Response | ||
SUB142709 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 27 | Partial Response | |
SUB142710 | Adverse Events | 0 | 1 | Injection site erythema (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Adverse Events | 1 | 7 | 2 | Injection site pain (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 1 | 35 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 7 | 35 | 4 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 35 | 5 | Injection site pruritus (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Adverse Events | 434 | 436 | 6 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 539 | 7 | Palpitations (Cardiac signs and symptoms NEC) | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Adverse Events | 652 | 659 | 8 | Pharyngitis (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 672 | 686 | 9 | Bronchitis (Lower respiratory tract and lung infections) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Adverse Events | 685 | 686 | 10 | Vaginal mycosis (Fungal infections NEC) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 4 | 4 | 2 | Phase 2005: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment (AE) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 35 | 35 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 77 | 77 | 5 | Phase 3003: Clinical visit (CM) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 182 | 182 | 6 | Phase 3006: Clinical visit (CM) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 277 | 277 | 7 | Phase 3009: Clinical visit (CM) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 357 | 357 | 8 | Phase 3012: Clinical visit | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 441 | 441 | 9 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 532 | 532 | 10 | Phase 3018: Clinical visit (AE) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 630 | 630 | 11 | Phase 3021: Clinical visit | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Clinical Assessments | 707 | 707 | 12 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | -151 | 73 | 1 | Eugynon (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 43 | 43 | 2 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1 GM IV]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 78 | 197 | 3 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1 GM IV]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 434 | 436 | 4 | Co-tylenol (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 652 | 658 | 5 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [UNK MG P.O.]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 672 | 685 | 6 | Augmentin (ANTIBACTERIALS FOR SYSTEMIC USE [875 MG P.O.]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | Concomitant Medications | 685 | 686 | 7 | Fluconazole (GYNECOLOGICAL ANTIINFECTIVES AND ANTISEPTICS [150 MG P.O.]) | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142710 | No Response | 182 | 182 | 2 | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | No Response | 532 | 532 | 4 | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Partial Response | 77 | 77 | 1 | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Partial Response | 357 | 357 | 3 | Albuterol | Yes | Yes | F | 33 | Partial Response | ||
SUB142710 | Screening | -7 | -7 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 8 | 9 | 1 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 118 | 137 | 2 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 162 | 170 | 3 | Vision blurred (Partial vision loss) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 259 | 261 | 4 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 261 | 265 | 5 | Viral infection (Viral infections NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 271 | 280 | 6 | Pharyngitis streptococcal (Streptococcal infections) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 363 | 371 | 7 | Pharyngitis streptococcal (Streptococcal infections) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 381 | 381 | 8 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 387 | 387 | 9 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 394 | 397 | 10 | Temperature intolerance (General signs and symptoms NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 407 | 407 | 11 | Temperature intolerance (General signs and symptoms NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 412 | 412 | 12 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 425 | 425 | 13 | Temperature intolerance (General signs and symptoms NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 446 | 446 | 14 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 457 | 457 | 15 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 459 | 459 | 16 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 476 | 476 | 17 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 478 | 478 | 18 | Injection site induration (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 486 | 493 | 19 | Fatigue (Asthenic conditions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 488 | 488 | 20 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 507 | 509 | 21 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 523 | 523 | 22 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 535 | 535 | 23 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 574 | 574 | 24 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 579 | 579 | 25 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 582 | 583 | 26 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 590 | 590 | 27 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 604 | 604 | 28 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 616 | 616 | 29 | Injection site swelling (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 617 | 617 | 30 | Drug hypersensitivity (Allergies to foods, food additives, drugs and other chemicals) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 617 | 617 | 31 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 621 | 621 | 32 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 628 | 628 | 33 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 631 | 631 | 34 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 639 | 639 | 35 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 640 | 640 | 36 | Abdominal pain upper (Gastrointestinal and abdominal pains (excl oral and throat)) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 659 | 666 | 37 | Sinusitis (Upper respiratory tract infections - pathogen class unspecified) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 680 | 680 | 38 | Migraine (Migraine headaches) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 694 | 694 | 39 | Headache (Headaches NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 698 | 700 | 40 | Injection site oedema (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 708 | 708 | 41 | Dizziness (Neurological signs and symptoms NEC) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Adverse Events | 721 | 721 | 42 | Injection site haemorrhage (Injection and infusion site reactions) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 5 | 5 | 2 | Phase 2005: Telephone assessment | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 9 | 9 | 3 | Phase 2007: Telephone assessment (AE) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 33 | 33 | 4 | Phase 3001: Clinical visit | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 90 | 90 | 5 | Phase 3003: Clinical visit (CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 166 | 166 | 6 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 181 | 181 | 7 | Phase 3006: Clinical visit (CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 265 | 265 | 8 | Phase 3009: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 363 | 363 | 9 | Phase 3012: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 460 | 460 | 10 | Phase 3015: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 552 | 552 | 11 | Phase 3018: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 643 | 643 | 12 | Phase 3021: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Clinical Assessments | 729 | 729 | 13 | Phase 3024: Clinical visit (AE & CM) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | -2120 | 1 | Marvelon (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TABLET PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Concomitant Medications | 76 | 2 | Loratadine (ANTIHISTAMINES FOR SYSTEMIC USE [10 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Concomitant Medications | 118 | 131 | 3 | Co-advil (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TABLET PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 166 | 168 | 4 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1000 MG IV]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 259 | 261 | 5 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TABLET PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 261 | 264 | 6 | Co-advil (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TABLET PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 271 | 280 | 7 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 364 | 372 | 8 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 381 | 381 | 9 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 387 | 387 | 10 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 412 | 412 | 11 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 459 | 459 | 12 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 488 | 488 | 13 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 507 | 509 | 14 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [UNK MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 523 | 523 | 15 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [UNK MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 535 | 535 | 16 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 574 | 17 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [500 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Concomitant Medications | 582 | 18 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Concomitant Medications | 660 | 662 | 19 | Tussin dm (COUGH AND COLD PREPARATIONS [UNK UNK PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 660 | 664 | 20 | Co-advil (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [UNK UNK PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 663 | 674 | 21 | Amoxicillin (ANTIBACTERIALS FOR SYSTEMIC USE [500 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 680 | 680 | 22 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [UNK UNK PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | Concomitant Medications | 694 | 694 | 23 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [200 MG PO]) | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142711 | No Response | 363 | 363 | 3 | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | No Response | 552 | 552 | 4 | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Partial Response | 90 | 90 | 1 | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Partial Response | 181 | 181 | 2 | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Partial Response | 729 | 729 | 5 | Placebo | Yes | Yes | F | 33 | Partial Response | ||
SUB142711 | Screening | -13 | -13 | 1 | Screening Visit | Placebo | Yes | Yes | F | 33 | Partial Response | |
SUB142712 | Adverse Events | 0 | 0 | 1 | Injection site erythema (Injection and infusion site reactions) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Adverse Events | 3 | 7 | 2 | Injection site pain (Injection and infusion site reactions) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Adverse Events | 15 | 53 | 3 | Back pain (Musculoskeletal and connective tissue signs and symptoms NEC) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Adverse Events | 146 | 164 | 4 | Eye pain (Ocular disorders NEC) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Adverse Events | 159 | 164 | 5 | Vision blurred (Partial vision loss) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment (AE) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 29 | 29 | 4 | Phase 3001: Clinical visit (AE & CM) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 92 | 92 | 5 | Phase 3003: Clinical visit (CM) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 160 | 160 | 6 | Phase 6000: Clinical visit (AE & CM) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Clinical Assessments | 183 | 183 | 7 | Phase 3006: Clinical visit (CM) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Concomitant Medications | -100 | 1 | Cilest (SEX HORMONES AND MODULATORS OF THE GENITAL SYSTEM [1 TAB P.O.]) | Placebo | Yes | No | F | 25 | Partial Response | ||
SUB142712 | Concomitant Medications | 15 | 53 | 2 | Cyclobenzaprine hydrochloride (MUSCLE RELAXANTS [1 TAB P.O.]) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | Concomitant Medications | 160 | 162 | 3 | Methylprednisolone (CORTICOSTEROIDS FOR SYSTEMIC USE [1 GM I.V.]) | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142712 | No Response | 183 | 183 | 2 | Placebo | Yes | No | F | 25 | Partial Response | ||
SUB142712 | Partial Response | 92 | 92 | 1 | Placebo | Yes | No | F | 25 | Partial Response | ||
SUB142712 | Screening | -6 | -6 | 1 | Screening Visit | Placebo | Yes | No | F | 25 | Partial Response | |
SUB142713 | Adverse Events | 337 | 1 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Adverse Events | 434 | 631 | 2 | Stress fracture (Fractures and dislocations NEC) | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit (AE) | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 8 | 8 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 31 | 31 | 4 | Phase 3001: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 87 | 87 | 5 | Phase 3003: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 185 | 185 | 6 | Phase 3006: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 283 | 283 | 7 | Phase 3009: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 367 | 367 | 8 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 455 | 455 | 9 | Phase 3015: Clinical visit (AE) | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 547 | 547 | 10 | Phase 3018: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 631 | 631 | 11 | Phase 3021: Clinical visit (CM) | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Clinical Assessments | 724 | 724 | 12 | Phase 3024: Clinical visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142713 | Concomitant Medications | -34 | 1 | Fish oil (LIPID MODIFYING AGENTS [1 TAB P.O.]) | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Concomitant Medications | 337 | 2 | Ibuprofen (ANTIINFLAMMATORY AND ANTIRHEUMATIC PRODUCTS [1 TAB P.O.]) | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Concomitant Medications | 600 | 3 | Acetylsalicylic acid (ANTITHROMBOTIC AGENTS [81 MG P.O.]) | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | No Response | 87 | 87 | 1 | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | No Response | 185 | 185 | 2 | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Partial Response | 367 | 367 | 3 | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Partial Response | 724 | 724 | 4 | Albuterol | Yes | Yes | M | 43 | Partial Response | ||
SUB142713 | Screening | -14 | -14 | 1 | Screening Visit | Albuterol | Yes | Yes | M | 43 | Partial Response | |
SUB142714 | Adverse Events | 0 | 1 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 1 | 3 | 2 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 1 | 15 | 3 | Tremor (Tremor (excl congenital)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 17 | 4 | Injection site induration (Injection and infusion site reactions) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 32 | 5 | Muscle spasms (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 47 | 49 | 6 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 123 | 142 | 7 | Chest discomfort (General signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 123 | 8 | Paraesthesia (Paraesthesias and dysaesthesias) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 169 | 170 | 9 | Motion sickness (Inner ear signs and symptoms) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 207 | 208 | 10 | Nausea (Nausea and vomiting symptoms) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 212 | 215 | 11 | Neuropathic pain (Sensory abnormalities NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 224 | 227 | 12 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 230 | 231 | 13 | Monoparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 230 | 231 | 14 | Monoparesis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 234 | 234 | 15 | Vision blurred (Partial vision loss) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 269 | 273 | 16 | Flatulence (Flatulence, bloating and distension) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 270 | 271 | 17 | Diarrhoea (Diarrhoea (excl infective)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 323 | 325 | 18 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 329 | 329 | 19 | Disorientation (Confusion and disorientation) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 331 | 335 | 20 | Insomnia (Disturbances in initiating and maintaining sleep) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 360 | 21 | Amnesia (Memory loss (excl dementia)) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 366 | 381 | 22 | Vertigo (Inner ear signs and symptoms) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 434 | 437 | 23 | Upper respiratory tract infection (Upper respiratory tract infections - pathogen class unspecified) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 439 | 443 | 24 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 442 | 443 | 25 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 468 | 469 | 26 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 482 | 483 | 27 | Insomnia (Disturbances in initiating and maintaining sleep) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 523 | 527 | 28 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 534 | 535 | 29 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 534 | 535 | 30 | Paresis (Paralysis and paresis (excl congenital and cranial nerve)) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 534 | 535 | 31 | Vertigo (Inner ear signs and symptoms) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 550 | 551 | 32 | Dizziness (Neurological signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 563 | 563 | 33 | Chest discomfort (General signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 682 | 34 | Pain in extremity (Musculoskeletal and connective tissue signs and symptoms NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Adverse Events | 718 | 719 | 35 | Headache (Headaches NEC) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Adverse Events | 718 | 719 | 36 | Nasal congestion (Nasal congestion and inflammations) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 0 | 0 | 1 | Phase 1500: Clinical visit | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 3 | 3 | 2 | Phase 2005: Telephone assessment (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 7 | 7 | 3 | Phase 2007: Telephone assessment | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 28 | 28 | 4 | Phase 3001: Clinical visit (AE) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 87 | 87 | 5 | Phase 3003: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 138 | 138 | 6 | Phase 6000: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 171 | 171 | 7 | Phase 3006: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 262 | 262 | 8 | Phase 3009: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 353 | 353 | 9 | Phase 3012: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 444 | 444 | 10 | Phase 3015: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 535 | 535 | 11 | Phase 3018: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 640 | 640 | 12 | Phase 3021: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Clinical Assessments | 719 | 719 | 13 | Phase 3024: Clinical visit (AE & CM) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | -110 | 299 | 1 | Lekovit ca (MINERAL SUPPLEMENTS [1 TAB PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | -110 | 299 | 2 | Multivitamins (VITAMINS [1 TAB PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | -17 | 3 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Concomitant Medications | 1 | 4 | Paracetamol (ANALGESICS [500 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Concomitant Medications | 71 | 262 | 5 | Modafinil (PSYCHOANALEPTICS [200 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 126 | 130 | 6 | Nicotine (OTHER NERVOUS SYSTEM DRUGS [21 MG TOP]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 131 | 7 | Nicotine polacrilex (OTHER NERVOUS SYSTEM DRUGS [2 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Concomitant Medications | 138 | 171 | 8 | Gabapentin (ANALGESICS [100 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 172 | 219 | 9 | Gabapentin (ANALGESICS [300 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 220 | 261 | 10 | Gabapentin (ANALGESICS [400 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 262 | 264 | 11 | Gabapentin (ANALGESICS [500 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 265 | 12 | Gabapentin (ANALGESICS [600 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Concomitant Medications | 332 | 332 | 13 | Influenza vaccine (VACCINES [1 INJ. S.C.]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 335 | 335 | 14 | Dozol (ANALGESICS [2 TABS PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 440 | 440 | 15 | Paracetamol (ANALGESICS [3 TABS PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 482 | 482 | 16 | Dozol (ANALGESICS [3 TABS P.O.]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | Concomitant Medications | 536 | 17 | Modafinil (PSYCHOANALEPTICS [100 MG PO]) | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Concomitant Medications | 718 | 719 | 18 | Cotylenol (ANALGESICS [1 TAB P.O.]) | Albuterol | Yes | Yes | F | 36 | Partial Response | |
SUB142714 | No Response | 171 | 171 | 2 | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | No Response | 353 | 353 | 3 | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Partial Response | 87 | 87 | 1 | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Partial Response | 535 | 535 | 4 | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Partial Response | 719 | 719 | 5 | Albuterol | Yes | Yes | F | 36 | Partial Response | ||
SUB142714 | Screening | -4 | -4 | 1 | Screening Visit | Albuterol | Yes | Yes | F | 36 | Partial Response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (global, factory) { | |
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('d3'), require('webcharts')) : | |
typeof define === 'function' && define.amd ? define(['d3', 'webcharts'], factory) : | |
(global.clinicalTimelines = factory(global.d3,global.webCharts)); | |
}(this, (function (d3$1,webcharts) { 'use strict'; | |
Number.isInteger = Number.isInteger || function (value) { | |
return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; | |
}; | |
/*------------------------------------------------------------------------------------------------\ | |
Add assign method to Object if nonexistent. | |
\------------------------------------------------------------------------------------------------*/ | |
if (typeof Object.assign != 'function') { | |
(function () { | |
Object.assign = function (target) { | |
'use strict'; | |
if (target === undefined || target === null) { | |
throw new TypeError('Cannot convert undefined or null to object'); | |
} | |
var output = Object(target); | |
for (var index = 1; index < arguments.length; index++) { | |
var source = arguments[index]; | |
if (source !== undefined && source !== null) { | |
for (var nextKey in source) { | |
if (source.hasOwnProperty(nextKey)) { | |
output[nextKey] = source[nextKey]; | |
} | |
} | |
} | |
} | |
return output; | |
}; | |
})(); | |
} | |
if (!Array.prototype.find) { | |
Object.defineProperty(Array.prototype, 'find', { | |
value: function value(predicate) { | |
// 1. Let O be ? ToObject(this value). | |
if (this == null) { | |
throw new TypeError('"this" is null or not defined'); | |
} | |
var o = Object(this); | |
// 2. Let len be ? ToLength(? Get(O, "length")). | |
var len = o.length >>> 0; | |
// 3. If IsCallable(predicate) is false, throw a TypeError exception. | |
if (typeof predicate !== 'function') { | |
throw new TypeError('predicate must be a function'); | |
} | |
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined. | |
var thisArg = arguments[1]; | |
// 5. Let k be 0. | |
var k = 0; | |
// 6. Repeat, while k < len | |
while (k < len) { | |
// a. Let Pk be ! ToString(k). | |
// b. Let kValue be ? Get(O, Pk). | |
// c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)). | |
// d. If testResult is true, return kValue. | |
var kValue = o[k]; | |
if (predicate.call(thisArg, kValue, k, o)) { | |
return kValue; | |
} | |
// e. Increase k by 1. | |
k++; | |
} | |
// 7. Return undefined. | |
return undefined; | |
} | |
}); | |
} | |
if (!Array.prototype.findIndex) { | |
Object.defineProperty(Array.prototype, 'findIndex', { | |
value: function value(predicate) { | |
// 1. Let O be ? ToObject(this value). | |
if (this == null) { | |
throw new TypeError('"this" is null or not defined'); | |
} | |
var o = Object(this); | |
// 2. Let len be ? ToLength(? Get(O, "length")). | |
var len = o.length >>> 0; | |
// 3. If IsCallable(predicate) is false, throw a TypeError exception. | |
if (typeof predicate !== 'function') { | |
throw new TypeError('predicate must be a function'); | |
} | |
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined. | |
var thisArg = arguments[1]; | |
// 5. Let k be 0. | |
var k = 0; | |
// 6. Repeat, while k < len | |
while (k < len) { | |
// a. Let Pk be ! ToString(k). | |
// b. Let kValue be ? Get(O, Pk). | |
// c. Let testResult be ToBoolean(? Call(predicate, T, � kValue, k, O �)). | |
// d. If testResult is true, return k. | |
var kValue = o[k]; | |
if (predicate.call(thisArg, kValue, k, o)) { | |
return k; | |
} | |
// e. Increase k by 1. | |
k++; | |
} | |
// 7. Return -1. | |
return -1; | |
} | |
}); | |
} | |
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { | |
return typeof obj; | |
} : function (obj) { | |
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | |
}; | |
var asyncGenerator = function () { | |
function AwaitValue(value) { | |
this.value = value; | |
} | |
function AsyncGenerator(gen) { | |
var front, back; | |
function send(key, arg) { | |
return new Promise(function (resolve, reject) { | |
var request = { | |
key: key, | |
arg: arg, | |
resolve: resolve, | |
reject: reject, | |
next: null | |
}; | |
if (back) { | |
back = back.next = request; | |
} else { | |
front = back = request; | |
resume(key, arg); | |
} | |
}); | |
} | |
function resume(key, arg) { | |
try { | |
var result = gen[key](arg); | |
var value = result.value; | |
if (value instanceof AwaitValue) { | |
Promise.resolve(value.value).then(function (arg) { | |
resume("next", arg); | |
}, function (arg) { | |
resume("throw", arg); | |
}); | |
} else { | |
settle(result.done ? "return" : "normal", result.value); | |
} | |
} catch (err) { | |
settle("throw", err); | |
} | |
} | |
function settle(type, value) { | |
switch (type) { | |
case "return": | |
front.resolve({ | |
value: value, | |
done: true | |
}); | |
break; | |
case "throw": | |
front.reject(value); | |
break; | |
default: | |
front.resolve({ | |
value: value, | |
done: false | |
}); | |
break; | |
} | |
front = front.next; | |
if (front) { | |
resume(front.key, front.arg); | |
} else { | |
back = null; | |
} | |
} | |
this._invoke = send; | |
if (typeof gen.return !== "function") { | |
this.return = undefined; | |
} | |
} | |
if (typeof Symbol === "function" && Symbol.asyncIterator) { | |
AsyncGenerator.prototype[Symbol.asyncIterator] = function () { | |
return this; | |
}; | |
} | |
AsyncGenerator.prototype.next = function (arg) { | |
return this._invoke("next", arg); | |
}; | |
AsyncGenerator.prototype.throw = function (arg) { | |
return this._invoke("throw", arg); | |
}; | |
AsyncGenerator.prototype.return = function (arg) { | |
return this._invoke("return", arg); | |
}; | |
return { | |
wrap: function (fn) { | |
return function () { | |
return new AsyncGenerator(fn.apply(this, arguments)); | |
}; | |
}, | |
await: function (value) { | |
return new AwaitValue(value); | |
} | |
}; | |
}(); | |
/*------------------------------------------------------------------------------------------------\ | |
Clone a variable (http://stackoverflow.com/a/728694). | |
\------------------------------------------------------------------------------------------------*/ | |
function clone(obj) { | |
var copy; | |
//Handle the 3 simple types, and null or undefined | |
if (null == obj || 'object' != (typeof obj === "undefined" ? "undefined" : _typeof(obj))) return obj; | |
//Handle Date | |
if (obj instanceof Date) { | |
copy = new Date(); | |
copy.setTime(obj.getTime()); | |
return copy; | |
} | |
//Handle Array | |
if (obj instanceof Array) { | |
copy = []; | |
for (var i = 0, len = obj.length; i < len; i++) { | |
copy[i] = clone(obj[i]); | |
} | |
return copy; | |
} | |
//Handle Object | |
if (obj instanceof Object) { | |
copy = {}; | |
for (var attr in obj) { | |
if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); | |
} | |
return copy; | |
} | |
throw new Error("Unable to copy obj! Its type isn't supported."); | |
} | |
var rendererSpecificSettings = { | |
//ID settings | |
id_col: 'USUBJID', | |
id_unit: 'participant', | |
id_characteristics: null, | |
//Event settings | |
event_col: 'DOMAIN', | |
event_types: null, | |
event_highlighted: null, | |
event_highlight_color: 'black', | |
event_symbols: null, | |
//Filter settings | |
filters: null, | |
//Grouping settings | |
groupings: null, | |
grouping_initial: null, | |
grouping_direction: 'horizontal', | |
//Timing settings | |
time_scale: 'Date', | |
//Date settings | |
stdt_col: 'STDT', | |
endt_col: 'ENDT', | |
date_range: null, | |
date_ranges: null, | |
date_format: '%Y-%m-%d', | |
date_display_format: '%b %y', // sync in syncSettings() | |
//Day settings | |
stdy_col: 'STDY', | |
endy_col: 'ENDY', | |
day_range: null, | |
day_ranges: null, | |
//Miscellaneous settings | |
seq_col: 'SEQ', | |
ongo_col: 'ONGO', | |
ongo_val: 'Y', | |
tooltip_col: 'TOOLTIP', | |
offset_col: null, | |
reference_lines: null, | |
mark_thickness: 6, | |
transpose_data: false, | |
//Listing settings | |
details: null, | |
details_config: null | |
}; | |
var webchartsSettings = { | |
x: { | |
type: null, // set in syncSettings() | |
column: 'wc_value', | |
label: null, // set in syncSettings() | |
format: null // set in syncSettings() | |
}, | |
y: { | |
type: 'ordinal', | |
column: null, // set in syncSettings() | |
label: null, // set in syncSettings() | |
sort: 'By Earliest Event', | |
behavior: 'flex', | |
grouping: null // set in syncSettings() | |
}, | |
marks: [{ | |
type: 'line', | |
per: null, // set in syncSettings() | |
tooltip: null, // set in syncSettings() | |
attributes: { | |
'stroke-width': null // set in syncSettings() | |
} | |
}, { | |
type: 'circle', | |
per: null, // set in syncSettings() | |
tooltip: null, // set in syncSettings() | |
radius: null, // set in syncSettings() | |
attributes: { | |
'stroke-width': null // set in syncSettings() | |
} | |
}], | |
colors: ['#1b9e77', '#d95f02', '#7570b3', '#a6cee3', '#1f78b4', '#b2df8a', '#66c2a5', '#fc8d62', '#8da0cb'], | |
color_dom: null, // set in syncSettings() | |
legend: { | |
location: 'top', | |
label: 'Event Type', | |
order: null, // set in syncSettings() | |
mark: 'circle' | |
}, | |
range_band: 35, | |
margin: { | |
top: 60, | |
right: 40 | |
}, // for second x-axis | |
resizable: false // can't be resizable so the multiples aren't overlapped by their titles | |
}; | |
var settings = Object.assign({}, rendererSpecificSettings, webchartsSettings); | |
function arrayOfVariablesCheck(defaultVariables, userDefinedVariables) { | |
var validSetting = userDefinedVariables instanceof Array && userDefinedVariables.length ? d3$1.merge([defaultVariables, userDefinedVariables.filter(function (item) { | |
return !(item instanceof Object && item.hasOwnProperty('value_col') === false) && defaultVariables.map(function (d) { | |
return d.value_col; | |
}).indexOf(item.value_col || item) === -1; | |
})]).map(function (item) { | |
var itemObject = item instanceof Object ? Object.assign({}, item) : { value_col: item }; | |
itemObject.label = itemObject.label || itemObject.value_col; | |
return itemObject; | |
}) : defaultVariables; | |
return validSetting; | |
} | |
function syncRendererSpecificSettings(settings) { | |
/**-------------------------------------------------------------------------------------------\ | |
ID settings | |
\-------------------------------------------------------------------------------------------**/ | |
//id_unit | |
settings.id_unit = settings.id_unit.replace(/^\s+|\s+$/g, ''); // remove leading and trailing white space | |
settings.id_unitPropCased = settings.id_unit.substring(0, 1).toUpperCase() + settings.id_unit.substring(1).toLowerCase(); | |
settings.id_unitPlural = /y$/.test(settings.id_unit) ? settings.id_unit.substring(0, settings.id_unit.length - 1) + 'ies' : settings.id_unit + 's'; | |
//id_characteristics | |
var defaultID_characteristics = [{ value_col: settings.id_col, label: settings.id_unitPropCased }]; | |
settings.id_characteristics = arrayOfVariablesCheck(defaultID_characteristics, settings.id_characteristics); | |
/**-------------------------------------------------------------------------------------------\ | |
Event settings | |
\-------------------------------------------------------------------------------------------**/ | |
//event_types | |
if (!(settings.event_types instanceof Array && settings.event_types.length)) delete settings.event_types; | |
//event_symbols | |
if (settings.event_symbols instanceof Array) settings.event_symbols = settings.event_symbols.filter(function (event_symbol) { | |
return ['square', 'diamond', 'triangle'].indexOf(event_symbol.symbol) > -1; | |
}); | |
if (!(settings.event_symbols instanceof Array && settings.event_symbols.length)) delete settings.event_symbols; | |
/**-------------------------------------------------------------------------------------------\ | |
Filter settings | |
\-------------------------------------------------------------------------------------------**/ | |
//filters | |
var defaultFilters = [{ value_col: settings.id_col, label: settings.id_unitPropCased }, { value_col: settings.event_col, label: 'Event Type' }]; | |
if (settings.ongo_col) defaultFilters.splice(2, 0, { value_col: settings.ongo_col, label: 'Ongoing?' }); | |
settings.filters = arrayOfVariablesCheck(defaultFilters, settings.filters); | |
/**-------------------------------------------------------------------------------------------\ | |
Grouping settings | |
\-------------------------------------------------------------------------------------------**/ | |
//groupings | |
var defaultGroupings = []; | |
settings.groupings = arrayOfVariablesCheck(defaultGroupings, settings.groupings); | |
//grouping direction | |
if (['horizontal', 'vertical'].indexOf(settings.grouping_direction) === -1) settings.grouping_direction = 'horizontal'; | |
/**-------------------------------------------------------------------------------------------\ | |
Timing settings | |
\-------------------------------------------------------------------------------------------**/ | |
//date_display_format | |
settings.date_display_format = settings.date_display_format || settings.date_format; | |
//date_ranges - array of 2-element date ranges or of objects with a label property and a time_range property | |
// { | |
// domain: [ | |
// <lower bound>, | |
// <upper bound> | |
// ], | |
// label: '<date range description>' | |
// } | |
if (Array.isArray(settings.date_range) && settings.date_ranges === null) settings.date_ranges = [{ | |
domain: settings.date_range, | |
label: 'Initial Date Range' | |
}];else if (Array.isArray(settings.date_range) && Array.isArray(settings.date_ranges)) settings.date_ranges.unshift(settings.date_range); | |
if (Array.isArray(settings.date_ranges)) settings.date_ranges = settings.date_ranges.filter(function (date_range) { | |
var domain = date_range.domain || date_range; | |
return domain instanceof Array && domain.length === 2 && domain[0].toString() !== domain[1].toString() && domain.every(function (d) { | |
return d instanceof Date || d3$1.time.format(settings.date_format).parse(d); | |
}); | |
}).map(function (date_range) { | |
var domain = (date_range.domain || date_range).map(function (date) { | |
return date instanceof Date ? date : d3$1.time.format(settings.date_format).parse(date); | |
}); | |
var label = date_range.label || domain.map(function (date) { | |
return date instanceof Date ? d3$1.time.format(settings.date_display_format)(date) : date; | |
}).join(' - '); | |
return { | |
domain: domain, | |
label: label | |
}; | |
});else settings.date_ranges = []; | |
//day_ranges - array of 2-element day ranges or of objects with a label property and a time_range property | |
// { | |
// domain: [ | |
// <lower bound>, | |
// <upper bound> | |
// ], | |
// label: '<day range description>' | |
// } | |
if (Array.isArray(settings.day_range) && settings.day_ranges === null) settings.day_ranges = [{ | |
domain: settings.day_range, | |
label: 'Initial Day Range' | |
}];else if (Array.isArray(settings.day_range) && Array.isArray(settings.day_ranges)) settings.day_ranges.unshift(settings.day_range); | |
if (settings.day_range && settings.day_ranges === null) settings.day_ranges = [{ | |
domain: settings.day_range, | |
label: 'Initial Day Range' | |
}]; | |
if (Array.isArray(settings.day_ranges)) settings.day_ranges = settings.day_ranges.filter(function (day_range) { | |
var domain = day_range.domain || day_range; | |
return domain instanceof Array && domain.length === 2 && domain[0].toString() !== domain[1].toString() && domain.every(function (d) { | |
return Number.isInteger(+d); | |
}); | |
}).map(function (day_range) { | |
var domain = day_range.domain || day_range; | |
var label = day_range.label || domain.join(' - '); | |
return { | |
domain: domain, | |
label: label | |
}; | |
});else settings.day_ranges = []; | |
/**-------------------------------------------------------------------------------------------\ | |
Miscellaneous settings | |
\-------------------------------------------------------------------------------------------**/ | |
//reference_lines | |
if (settings.reference_lines) { | |
if (!(settings.reference_lines instanceof Array)) settings.reference_lines = [settings.reference_lines]; | |
settings.reference_lines = settings.reference_lines.map(function (reference_line) { | |
var referenceLineObject = {}; | |
//either an object or not | |
referenceLineObject.timepoint = reference_line instanceof Object ? reference_line.timepoint : reference_line; | |
//either an integer or not | |
referenceLineObject.time_scale = Number.isInteger(+referenceLineObject.timepoint) ? 'Day' : 'Date'; | |
//label predefined or not | |
referenceLineObject.label = reference_line.label ? reference_line.label : referenceLineObject.time_scale.substring(0, 1).toUpperCase() + referenceLineObject.time_scale.substring(1) + ': ' + referenceLineObject.timepoint; | |
return referenceLineObject; | |
}).filter(function (reference_line) { | |
return reference_line.time_scale === 'Day' && Number.isInteger(reference_line.timepoint) || reference_line.time_scale === 'Date' && d3$1.time.format(settings.date_format).parse(reference_line.timepoint) instanceof Date; | |
}); | |
if (!settings.reference_lines.length) delete settings.reference_lines; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Listing settings | |
\-------------------------------------------------------------------------------------------**/ | |
//details | |
var defaultDetails = [{ value_col: settings.event_col, label: 'Event Type' }, { value_col: 'stdtdy', label: 'Start Date (Day)' }, { value_col: 'endtdy', label: 'Stop Date (Day)' }, { value_col: settings.seq_col, label: 'Sequence Number' }]; | |
//add ongo_col if specified | |
if (settings.ongo_col) defaultDetails.push({ value_col: settings.ongo_col, label: 'Ongoing?' }); | |
//add tooltip_col if specified | |
if (settings.tooltip_col) defaultDetails.push({ value_col: settings.tooltip_col, label: 'Details' }); | |
settings.details = arrayOfVariablesCheck(defaultDetails, settings.details); | |
//add filters | |
settings.filters.filter(function (filter) { | |
return filter.value_col !== settings.id_col; | |
}) // remove id_col | |
.filter(function (filter) { | |
return settings.id_characteristics.map(function (id_characteristic) { | |
return id_characteristic.value_col; | |
}).indexOf(filter.value_col) < 0; | |
}) // remove id_characteristics | |
.forEach(function (filter) { | |
if (settings.details.map(function (detail) { | |
return detail.value_col; | |
}).indexOf(filter.value_col) === -1) settings.details.push(filter); | |
}); | |
} | |
function syncWebchartsSettings(settings) { | |
//Y-axis | |
settings.y.column = settings.id_col; | |
if (settings.grouping_initial) { | |
settings.y.grouping = settings.grouping_initial; | |
settings.y.groupingLabel = settings.groupings[settings.groupings.map(function (grouping) { | |
return grouping.value_col; | |
}).indexOf(settings.grouping_initial)].label; | |
} | |
//Lines | |
var lines = settings.marks[0]; | |
lines.per = [settings.id_col, settings.event_col, settings.seq_col]; | |
lines.attributes['stroke-width'] = settings.mark_thickness * 1.25; | |
//Circles | |
var circles = settings.marks[1]; | |
circles.per = [settings.id_col, settings.event_col, settings.seq_col, 'wc_value']; | |
circles.radius = settings.mark_thickness * 3 / 4; | |
circles.attributes['stroke-width'] = settings.mark_thickness * 1 / 2; | |
//Color stratification | |
settings.color_by = settings.event_col; | |
//Add space at bottom of timeline to create space for the last ID's offset marks. | |
settings.margin.bottom = settings.margin.top + settings.range_band; | |
} | |
function syncTimeScaleSettings(settings) { | |
settings.time_scale = ['date', 'day'].indexOf(settings.time_scale.toLowerCase()) > -1 ? settings.time_scale.substring(0, 1).toUpperCase() + settings.time_scale.substring(1).toLowerCase() : 'Date'; | |
//Define settings variables to handle both date and day time scales. | |
if (settings.time_scale === 'Date') { | |
settings.st_col = settings.stdt_col; | |
settings.en_col = settings.endt_col; | |
settings.x.type = 'time'; | |
settings.x.format = settings.date_display_format; | |
settings.time_unit = 'DT'; | |
settings.x_parseFormat = d3$1.time.format(settings.date_format); | |
settings.x_displayFormat = d3$1.time.format(settings.date_display_format); | |
settings.time_function = function (dt) { | |
var parsed = void 0; | |
try { | |
parsed = settings.x_parseFormat.parse(dt) || new Date(dt); | |
} catch (error) { | |
parsed = new Date(dt); | |
} | |
return parsed; | |
}; | |
} else if (settings.time_scale === 'Day') { | |
settings.st_col = settings.stdy_col; | |
settings.en_col = settings.endy_col; | |
settings.x.type = 'linear'; | |
settings.x.format = '1f'; | |
settings.time_unit = 'DY'; | |
settings.x_parseFormat = d3$1.format(settings.x.format); | |
settings.x_displayFormat = settings.x_parseFormat; | |
settings.time_function = function (dy) { | |
return +settings.x_displayFormat(+dy); | |
}; | |
} | |
//Time intervals (lines) | |
settings.marks[0].tooltip = 'Event: [' + settings.event_col + ']' + ('\nStart ' + settings.time_scale.toLowerCase() + ': [' + settings.st_col + ']') + ('\nStop ' + settings.time_scale.toLowerCase() + ': [' + settings.en_col + ']'); | |
settings.marks[0].values = { wc_category: [settings.st_col, settings.en_col] }; | |
//Timepoints (circles) | |
settings.marks[1].tooltip = 'Event: [' + settings.event_col + ']' + ('\n' + settings.time_scale + ': [' + settings.st_col + ']'); | |
settings.marks[1].values = { wc_category: settings.time_unit }; | |
} | |
function syncIDtimelineSettings(settings) { | |
settings.x.label = ''; | |
settings.y.column = settings.seq_col; | |
settings.y.sort = 'alphabetical-descending'; | |
settings.marks[0].per = [settings.event_col, settings.seq_col]; | |
settings.marks[1].per = [settings.event_col, settings.seq_col, 'wc_value']; | |
settings.gridlines = 'y'; | |
settings.range_band = settings.mark_thickness * 2; | |
settings.margin = { left: 25 }; | |
} | |
function syncListingSettings(settings) { | |
settings.details_config = settings.details_config || { | |
cols: settings.details.map(function (detail) { | |
return detail.value_col; | |
}), | |
headers: settings.details.map(function (detail) { | |
return detail.label; | |
}) | |
}; | |
//Define listing columns and headers if not already defined. | |
if (!settings.details_config.hasOwnProperty('cols')) { | |
settings.details_config.cols = settings.details.map(function (detail) { | |
return detail.value_col; | |
}); | |
settings.details_config.headers = settings.details.map(function (detail) { | |
return detail.label; | |
}); | |
} | |
} | |
function syncSettings(settings) { | |
var syncedSettings = clone(settings); | |
//Clinical timelines | |
syncTimeScaleSettings(syncedSettings); | |
syncRendererSpecificSettings(syncedSettings); | |
syncWebchartsSettings(syncedSettings); | |
//ID timeline | |
syncedSettings.IDtimelineSettings = clone(syncedSettings); | |
syncIDtimelineSettings(syncedSettings.IDtimelineSettings); | |
//Listing | |
syncListingSettings(syncedSettings); | |
return syncedSettings; | |
} | |
var controls = [{ | |
type: 'dropdown', | |
option: 'event_highlighted', | |
label: '', | |
description: 'Event highlighting', | |
values: null // set in onInit() callback | |
}, { | |
type: 'dropdown', | |
option: 'time_scale', | |
label: '', | |
description: 'X-axis scale', | |
values: ['Date', 'Day'], | |
require: true | |
}, { | |
type: 'dropdown', | |
option: 'date_time_range', | |
label: '', | |
description: 'Time range', | |
values: null, // set in onInit() callback | |
require: true | |
}, { | |
type: 'dropdown', | |
option: 'day_time_range', | |
label: '', | |
description: 'Time range', | |
values: null, // set in onInit() callback | |
require: true | |
}, { | |
type: 'dropdown', | |
option: 'y.sort', | |
label: '', | |
description: 'Y-axis sort', | |
values: ['By Earliest Event', 'Alphanumerically'], | |
require: true | |
}, { | |
type: 'dropdown', | |
option: 'y.groupingLabel', | |
label: '', | |
description: 'Y-axis grouping', | |
values: null // set in onInit() callback | |
}]; | |
function syncControls(controls, settings) { | |
settings.filters.sort(function (a, b) { | |
return a.value_col === settings.event_col ? 1 : 0; | |
}).forEach(function (filter) { | |
filter.type = 'subsetter'; | |
filter.description = filter.label; | |
filter.label = ''; | |
//Update ID filter. | |
if (filter.value_col === settings.id_col) filter.description = settings.id_unitPropCased + ' view'; | |
//Update event type filter. | |
if (filter.value_col === settings.event_col) { | |
filter.multiple = true; | |
filter.start = settings.event_types; | |
} | |
}); | |
//Remove groupings control if no groupings are specified. | |
if (settings.groupings.length === 0) controls.splice(controls.findIndex(function (control) { | |
return control.option === 'y.grouping'; | |
}), 1); | |
var syncedControls = d3$1.merge([[settings.filters[0]], // ID dropdown first | |
clone(controls), // Non-filters second | |
settings.filters.slice(1) // Filters last | |
]); | |
return syncedControls; | |
} | |
var defaults$1 = { | |
settings: settings, | |
syncSettings: syncSettings, | |
controls: controls, | |
syncControls: syncControls | |
}; | |
function defineSettings() { | |
this.settings.merged = Object.assign({}, clone(defaults$1.settings), clone(this.settings.user)); | |
this.settings.synced = defaults$1.syncSettings(clone(this.settings.merged)); | |
Object.assign(this.settings, clone(this.settings.synced)); | |
this.settings.IDtimeline = clone(this.settings.IDtimelineSettings); | |
this.settings.listing = clone(this.settings.details_config); | |
this.settings.controls = defaults$1.syncControls(clone(defaults$1.controls), clone(this.settings)); | |
} | |
function defineStyles() { | |
//Define styles. | |
var line = this.settings.synced.marks.find(function (mark) { | |
return mark.type === 'line'; | |
}); | |
var circle = this.settings.synced.marks.find(function (mark) { | |
return mark.type === 'circle'; | |
}); | |
var styles = [ | |
/***--------------------------------------------------------------------------------------\ | |
Global styles | |
\--------------------------------------------------------------------------------------***/ | |
//general | |
'html {' + ' overflow: -moz-scrollbars-vertical;' + ' overflow-y: scroll;' + '}', '#clinical-timelines {' + ' display: inline-block;' + ' width: 100%;' + '}', | |
//hidden | |
'#clinical-timelines .ct-hidden {' + ' display: none !important;' + '}', | |
//buttons | |
'#clinical-timelines .ct-button {' + ' display: inline-block;' + ' padding: 3px 5px !important;' + ' border: 2px solid black !important;' + ' border-radius: 4px !important;' + ' color: #333;' + ' background: #ccc;' + ' cursor: pointer !important;' + '}', '#clinical-timelines .ct-button:hover {' + ' color: #ccc;' + ' background: #333 !important;' + '}', | |
/***--------------------------------------------------------------------------------------\ | |
Left and right columns | |
\--------------------------------------------------------------------------------------***/ | |
'#clinical-timelines .ct-column {' + ' display: inline-block;' + '}', '#clinical-timelines #ct-left-column {' + ' width: 24%;' + ' float: left;' + '}', '#clinical-timelines #ct-right-column {' + ' width: 75%;' + ' float: right;' + '}', '#clinical-timelines .ct-column > * {' + ' width: 100%;' + ' vertical-align: top;' + ' display: inline-block;' + ' margin-bottom: 10px;' + ' border: 1px solid #eee;' + '}', '#clinical-timelines .ct-column > * > * {' + ' margin: 10px;' + '}', | |
/***--------------------------------------------------------------------------------------\ | |
Left column elements | |
\--------------------------------------------------------------------------------------***/ | |
'#clinical-timelines #ct-left-column > * {' + '}', | |
//Details | |
'#clinical-timelines #ct-left-column .ct-details {' + ' font-size: 90%;' + ' text-align: right;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-button {' + ' float: left;' + ' font-size: 110%;' + ' font-weight: bold;' + ' margin-bottom: 10px;' + ' margin-right: 10px;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-button a {' + ' color: blue;' + ' text-decoration: none;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-button:hover a {' + ' color: #ccc;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-stats,' + '#clinical-timelines #ct-left-column .ct-details .ct-characteristic span {' + ' font-weight: bold;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-stats.ct-sample {' + ' color: green;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-stats.ct-sample-inside-time-range {' + ' color: blue;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-stats.ct-sample-outside-time-range {' + ' color: red;' + '}', '#clinical-timelines #ct-left-column .ct-details .ct-info-icon {' + ' font-weight: bold;' + ' color: blue;' + ' cursor: help;' + '}', | |
//Controls | |
'#clinical-timelines #ct-left-column .wc-controls {' + ' margin-bottom: 0;' + ' clear: left;' + '}', '#clinical-timelines #ct-left-column .wc-controls .control-group {' + ' margin: 0 0 5px 0;' + ' display: block;' + ' float: right;' + ' clear: both;' + ' width: 100%;' + '}', '#clinical-timelines #ct-left-column .wc-controls .ct-horizontal-rule {' + ' width: 100%;' + ' display: inline-block;' + ' margin-bottom: 5px;' + ' font-size: 150%;' + ' border-bottom: 1px solid black;' + '}', '#clinical-timelines #ct-left-column .wc-controls .control-group.ct-ID {' + ' display: inline-block;' + '}', '#clinical-timelines #ct-left-column .wc-controls .control-group > * {' + ' display: inline-block;' + ' vertical-align: top;' + ' float: right;' + '}', '#clinical-timelines #ct-left-column .wc-controls .control-group .span-description {' + ' font-size: 90%;' + '}', '#clinical-timelines #ct-left-column .wc-controls .control-group .changer {' + ' margin-left: 5px;' + ' width: 50%;' + ' clear: right;' + ' box-sizing: border-box;' + '}', | |
//Reference Tables | |
'#clinical-timelines #ct-left-column .ct-reference-line-table-header {' + ' text-align: center;' + ' border-bottom: 1px solid black;' + ' padding-bottom: 5px;' + '}', '#clinical-timelines #ct-left-column .ct-reference-line-table-body table {' + ' width: 100%;' + ' display: table;' + '}', '#clinical-timelines #ct-left-column .ct-reference-line-table-body th,' + '#clinical-timelines #ct-left-column .ct-reference-line-table-body td {' + ' text-align: left;' + '}', '#clinical-timelines #ct-left-column .ct-higher-level {' + ' border-bottom: 1px dotted lightgray;' + ' font-weight: bold;' + ' font-size: 14px;' + '}', '#clinical-timelines #ct-left-column .ct-lower-level {' + ' font-size: 12px;' + '}', '#clinical-timelines #ct-left-column .ct-lower-level.ct-indent {' + ' padding-left: 5%;' + '}', | |
/***--------------------------------------------------------------------------------------\ | |
Right column elements | |
\--------------------------------------------------------------------------------------***/ | |
'#clinical-timelines #ct-right-column > * {' + '}', '#clinical-timelines #ct-right-column #ct-timelines {' + ' min-height: 80px;' + '}', | |
//Legend | |
'#clinical-timelines #ct-right-column #ct-timelines .legend {' + ' display: flex !important;' + ' justify-content: center;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .legend-title {' + ' border-radius: 4px;' + ' padding: 5px 7px 3px 4px;' + ' border: 2px solid white;' + ' margin-right: .25em !important;' + ' margin-left: 10em;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .legend-item {' + ' cursor: pointer;' + ' float: left;' + ' border-radius: 4px;' + ' padding: 4px 7px 3px 4px;' + ' border: 2px solid white;' + ' margin-right: .25em !important;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .legend-item:not(.ct-highlighted) {' + ' border: none !important;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .legend-item:not(.ct-selected) {' + ' background: white;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .legend-color-block circle {' + ' cx: .55em !important;' + ' cy: .55em !important;' + ' r: .4em !important;' + ' stroke: black;' + ' stroke-width: 1;' + '}', | |
//Second legend | |
'#clinical-timelines #ct-legend {' + ' list-style-type: none;' + ' position: absolute;' + ' top: 0;' + '}', '#clinical-timelines .ct-legend-item {' + ' cursor: default;' + ' margin-right: 10px;' + '}', | |
//Y-axis | |
'#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .y.axis .tick {' + ' cursor: pointer;' + ' fill: blue;' + ' text-decoration: none;' + ' font-weight: bolder;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .y.axis .tick:hover {' + ' text-decoration: underline;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .y.axis .tick rect.ct-stripe {' + ' stroke: #aaa;' + ' stroke-width: 1;' + ' fill: none;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .y.axis .tick:nth-child(even) rect.ct-stripe {' + ' fill: #eee;' + '}', | |
//Grouping | |
'#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .ct-grouping .ct-boundary {' + ' stroke: black;' + ' stroke-width: 2;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .ct-grouping .ct-annotation {' + ' font-size: 150%;' + ' font-weight: normal;' + ' text-anchor: start;' + '}', '#clinical-timelines #ct-right-column #ct-timelines .wc-chart .wc-svg .ct-grouping.ct-vertical .ct-annotation {' + ' writing-mode: tb-rl;' + '}', | |
//Lines | |
'#clinical-timelines path.wc-data-mark {' + (' stroke-width: ' + line.attributes['stroke-width'] + ';') + ' stroke-opacity: 1;' + '}', '#clinical-timelines path.wc-data-mark.ct-highlighted {' + (' stroke-width: ' + line.attributes['stroke-width'] * 1.5 + ';') + '}', '#clinical-timelines line.ct-highlight-overlay {' + (' stroke-width: ' + line.attributes['stroke-width'] / 2 + ';') + ' stroke-linecap: round;' + '}', | |
//Circles | |
'#clinical-timelines circle.wc-data-mark:not(.ct-highlighted) {' + ' stroke-width: 1;' + ' stroke: black;' + ' fill-opacity: 1;' + '}', '#clinical-timelines circle.wc-data-mark.ct-highlighted {' + ' stroke-opacity: 1;' + ' fill-opacity: 1;' + (' stroke-width: ' + circle.attributes['stroke-width'] + ';') + '}', | |
//Symbols | |
'#clinical-timelines .ct-custom-mark:not(.ct-highlighted) {' + ' stroke-width: 1;' + ' stroke: black;' + ' fill-opacity: 1;' + '}', '#clinical-timelines .ct-custom-mark.ct-highlighted {' + ' stroke-opacity: 1;' + ' fill-opacity: 1;' + (' stroke-width: ' + circle.attributes['stroke-width'] + ';') + '}', | |
//Arrows | |
'#clinical-timelines polygon.ct-ongoing-event {' + '}', '#clinical-timelines polygon.ct-ongoing-event.ct-highlighted {' + (' stroke-width: ' + line.attributes['stroke-width'] / 3 + ';') + '}', | |
//Reference lines | |
'#clinical-timelines #ct-right-column .wc-chart .wc-svg .ct-visible-reference-line {' + ' stroke: black;' + ' stroke-width: 1;' + ' stroke-dasharray: 2,2;' + '}', '#clinical-timelines #ct-right-column .wc-chart .wc-svg .ct-visible-reference-line.ct-hover {' + ' stroke-dasharray: none;' + '}', '#clinical-timelines #ct-right-column .wc-chart .wc-svg .ct-hover-line {' + ' cursor: pointer;' + ' stroke: black;' + ' stroke-width: 20;' + ' stroke-opacity: 0;' + '}', '#clinical-timelines #ct-right-column .wc-chart .wc-svg .ct-reference-line-text {' + ' font-weight: bold;' + ' font-size: 24px;' + '}', | |
//ID timeline | |
'#clinical-timelines #ct-right-column #ct-ID-timeline .wc-chart .wc-svg title {' + ' white-space: pre;' + '}', '#clinical-timelines #ct-right-column #ct-ID-timeline .wc-small-multiples .wc-chart {' + ' width: 100%;' + ' padding: 0;' + ' border-top: 1px solid black;' + '}', '#clinical-timelines #ct-right-column #ct-ID-timeline .wc-small-multiples .wc-chart > * {' + ' display: inline-block;' + '}', '#clinical-timelines #ct-right-column #ct-ID-timeline .wc-small-multiples .wc-chart .wc-svg {' + ' float: left;' + ' width: 75%;' + '}', '#clinical-timelines #ct-right-column #ct-ID-timeline .wc-small-multiples .wc-chart .wc-chart-title {' + ' float: right;' + ' text-align: left;' + ' font-size: 150%;' + ' font-weight: normal;' + ' width: 24%;' + '}', '#clinical-timelines #ct-right-column #ct-ID-timeline .wc-small-multiples .wc-chart .wc-svg .ct-time-range {' + ' opacity: .1;' + '}', | |
//Listing | |
'#clinical-timelines #ct-right-column #ct-listing .wc-chart.wc-table table {' + ' display: table;' + ' width: 100%;' + '}']; | |
//Attach styles to DOM. | |
var style = this.document.createElement('style'); | |
style.type = 'text/css'; | |
style.innerHTML = styles.join('\n'); | |
this.document.getElementsByTagName('head')[0].appendChild(style); | |
} | |
function exportData() { | |
var _this = this; | |
//Filter data on events overlapping current time range. | |
var data = this.timelines.wideDataInsideTimeRange.filter(function (d) { | |
var st = _this.timelines.config.time_function(d[_this.timelines.config.st_col]), | |
en = _this.timelines.config.time_function(d[_this.timelines.config.en_col]), | |
stInsideTimeRange = _this.timelines.config.x.domain[0] <= st && st <= _this.timelines.config.x.domain[1], | |
// start is within the time range | |
enInsideTimeRange = _this.timelines.config.x.domain[0] <= en && en <= _this.timelines.config.x.domain[1], | |
// end is within the time range | |
surroundingTimeRange = _this.timelines.config.x.domain[0] > st && en > _this.timelines.config.x.domain[1]; // start is prior to time range and end is after time range | |
return stInsideTimeRange || enInsideTimeRange || surroundingTimeRange; | |
}), | |
columns = void 0, | |
headers = void 0; | |
//If specified, transpose data to one record per ID per sequence number. | |
if (this.settings.transpose_data) { | |
var nested = d3$1.nest().key(function (d) { | |
return d[_this.settings.id_col] + '|' + d[_this.settings.seq_col]; | |
}) | |
//.rollup(d => console.log(d)) | |
.entries(data), | |
transposed = []; | |
nested.forEach(function (d) { | |
var datum = {}, | |
keys = d.key.split('|'); | |
datum[_this.settings.id_col] = keys[0]; | |
datum[_this.settings.seq_col] = keys[1]; | |
d.values.forEach(function (di) { | |
//ID characteristics | |
_this.settings.id_characteristics.forEach(function (id_characteristic) { | |
datum[id_characteristic.label] = di[id_characteristic.value_col]; | |
}); | |
//Event characteristics | |
datum[di[_this.settings.event_col] + ' Start'] = di.stdtdy; | |
datum[di[_this.settings.event_col] + ' End'] = di.endtdy; | |
}); | |
transposed.push(datum); | |
}); | |
data = transposed; | |
columns = this.settings.id_characteristics.map(function (id_characteristic) { | |
return id_characteristic.label; | |
}).concat([this.settings.seq_col]).concat(this.timelines.currentEventTypes.concat(this.timelines.currentEventTypes).sort().map(function (eventType, i) { | |
return eventType + (i % 2 ? ' End' : ' Start'); | |
})); | |
headers = columns; | |
} else { | |
//Otherwise export one record per ID per event. | |
var variables = this.settings.id_characteristics.concat(this.settings.details.filter(function (detail) { | |
return _this.settings.id_characteristics.map(function (id_characteristic) { | |
return id_characteristic.value_col; | |
}).indexOf(detail.value_col) < 0; | |
})); | |
columns = variables.map(function (variable) { | |
return variable.value_col; | |
}); | |
headers = variables.map(function (variable) { | |
return variable.label; | |
}); | |
} | |
//Add headers and rows to CSV array. | |
var CSVarray = []; | |
data.forEach(function (d, i) { | |
//Add headers to CSV array. | |
if (i === 0) CSVarray.push(headers.map(function (header) { | |
return '"' + header.replace(/"/g, '""') + '"'; | |
})); | |
//add rows to CSV array | |
var row = columns.map(function (col) { | |
var value = d[col] || ''; | |
if (typeof value === 'string') value = value.replace(/"/g, '""'); | |
return '"' + value + '"'; | |
}); | |
CSVarray.push(row); | |
}); | |
//transform CSV array into CSV string | |
var CSV = new Blob([CSVarray.join('\n')], { type: 'text/csv;charset=utf-8;' }), | |
fileName = 'ClinicalTimelinesData_' + d3$1.time.format('%Y-%m-%dT%H-%M-%S')(new Date()) + '.csv', | |
link = this.containers.exportButton; | |
if (navigator.msSaveBlob) { | |
// IE 10+ | |
link.style({ | |
cursor: 'pointer', | |
'text-decoration': 'underline', | |
color: 'blue' | |
}); | |
navigator.msSaveBlob(CSV, fileName); | |
} else { | |
// Browsers that support HTML5 download attribute | |
if (link.node().download !== undefined) { | |
var url = URL.createObjectURL(CSV); | |
link.node().setAttribute('href', url); | |
link.node().setAttribute('download', fileName); | |
} | |
} | |
} | |
function hideTimeRangeControl() { | |
var _this = this; | |
this.controls.wrap.selectAll('.control-group').filter(function (d) { | |
return d.option && d.option.indexOf('_time_range') > -1; | |
}).classed('ct-hidden', function (d) { | |
return _this.config.time_scale === 'Date' && d.option === 'day_time_range' || _this.config.time_scale === 'Day' && d.option === 'date_time_range'; | |
}); | |
} | |
function enableDisableControls() { | |
var _this = this; | |
//Enable/Disable controls other than ID and Event Type filters. | |
this.controls.wrap.selectAll('.control-group').filter(function (control) { | |
return control.value_col !== _this.config.id_col && control.option !== 'event_highlighted' && control.option !== 'time_scale' && control.value_col !== _this.config.event_col; | |
}).classed('ct-hidden', !!this.selected_id); | |
if (!this.selected_id) hideTimeRangeControl.call(this); | |
} | |
function updateIDfilter() { | |
var _this = this; | |
var IDfilter = this.controls.wrap.selectAll('.control-group').filter(function (control) { | |
return control.value_col === _this.config.id_col; | |
}); | |
//Update selected option. | |
IDfilter.selectAll('option').property('selected', function (option) { | |
return option === _this.selected_id; | |
}); | |
//Update ID object in filters array. | |
this.filters.filter(function (filter) { | |
return filter.col === _this.config.id_col; | |
})[0].val = this.selected_id || 'All'; | |
//Bring focus to the ID dropdown. | |
IDfilter.style({ | |
'font-weight': 'bold' | |
}).transition().delay(1000).style({ | |
'font-weight': 'normal' | |
}).select('select').node().focus(); | |
} | |
function goBackToTimelines() { | |
delete this.timelines.selected_id; | |
enableDisableControls.call(this.timelines); | |
updateIDfilter.call(this.timelines); | |
//Hide ID timelines. | |
this.containers.IDdetails.classed('ct-hidden', true); | |
this.containers.IDtimeline.classed('ct-hidden', true); | |
this.containers.listing.classed('ct-hidden', true); | |
//Display population timelines. | |
this.containers.populationDetails.classed('ct-hidden', false); | |
this.timelines.wrap.select('svg.wc-svg').classed('ct-hidden', false); | |
//Redraw clinical timelines. | |
this.timelines.draw(); | |
} | |
function defineLayout() { | |
var _this = this; | |
this.containers.main = d3$1.select(this.element).append('div').attr('id', 'clinical-timelines'); | |
/**-------------------------------------------------------------------------------------------\ | |
Left column | |
\-------------------------------------------------------------------------------------------**/ | |
this.containers.leftColumn = this.containers.main.append('div').classed('ct-column', true).attr('id', 'ct-left-column'); | |
/***--------------------------------------------------------------------------------------\ | |
Details | |
\--------------------------------------------------------------------------------------***/ | |
this.containers.details = this.containers.leftColumn.append('div').attr('id', 'ct-details'); | |
/****---------------------------------------------------------------------------------\ | |
Population details | |
\---------------------------------------------------------------------------------****/ | |
this.containers.populationDetails = this.containers.details.append('div').classed('ct-details', true).attr('id', 'ct-population-details'); | |
//Add button to export timelines data. | |
this.containers.exportButton = this.containers.populationDetails.append('div').classed('ct-button', true).attr('id', 'ct-export-button').append('a').html('⇓ Data').on('click', function () { | |
exportData.call(_this); | |
}); | |
//Add container for population details given current filters. | |
this.containers.popCurrentFilters = this.containers.populationDetails.append('div').classed('ct-characteristic', true).attr('id', 'ct-current-filters'); | |
//Add container for population details inside time range. | |
this.containers.popInsideTimeRange = this.containers.populationDetails.append('div').classed('ct-characteristic', true).attr('id', 'ct-inside-time-range'); | |
//Add container for population details inside time range. | |
this.containers.popOutsideTimeRange = this.containers.populationDetails.append('div').classed('ct-characteristic', true).attr('id', 'ct-outside-time-range'); | |
/****---------------------------------------------------------------------------------\ | |
ID details | |
\---------------------------------------------------------------------------------****/ | |
this.containers.IDdetails = this.containers.details.append('div').classed('ct-details ct-hidden', true).attr('id', 'ct-ID-details'); | |
//Add button to return from ID timeline to timelines. | |
this.containers.backButton = this.containers.IDdetails.append('div').classed('ct-button', true).attr('id', 'ct-back-button').append('a').html('⇐ Back').on('click', function () { | |
goBackToTimelines.call(_this); | |
}); | |
/***--------------------------------------------------------------------------------------\ | |
Controls | |
\--------------------------------------------------------------------------------------***/ | |
this.containers.controls = this.containers.leftColumn.append('div').attr('id', 'ct-controls'); | |
/**-------------------------------------------------------------------------------------------\ | |
Right column | |
\-------------------------------------------------------------------------------------------**/ | |
this.containers.rightColumn = this.containers.main.append('div').classed('ct-column', true).attr('id', 'ct-right-column'); | |
/***--------------------------------------------------------------------------------------\ | |
Timelines | |
\--------------------------------------------------------------------------------------***/ | |
this.containers.timelines = this.containers.rightColumn.append('div').attr('id', 'ct-timelines'); | |
/***--------------------------------------------------------------------------------------\ | |
ID timeline | |
\--------------------------------------------------------------------------------------***/ | |
this.containers.IDtimeline = this.containers.rightColumn.append('div').classed('ct-hidden', true).attr('id', 'ct-ID-timeline'); | |
/***--------------------------------------------------------------------------------------\ | |
Listing | |
\--------------------------------------------------------------------------------------***/ | |
this.containers.listing = this.containers.rightColumn.append('div').classed('ct-hidden', true).attr('id', 'ct-listing'); | |
} | |
function recurse() { | |
this.timelines.IDtimeline = this.IDtimeline; | |
this.timelines.listing = this.listing; | |
this.timelines.settings = this.settings; | |
this.IDtimeline.timelines = this.timelines; | |
this.IDtimeline.listing = this.listing; | |
this.IDtimeline.settings = this.settings; | |
this.listing.timelines = this.timelines; | |
this.listing.IDtimeline = this.IDtimeline; | |
this.listing.settings = this.settings; | |
} | |
function controls$1() { | |
this.controls = webcharts.createControls(this.containers.controls.node(), { | |
location: 'top', | |
inputs: this.settings.controls | |
}); | |
} | |
function getPopulationDetails() { | |
var _this = this; | |
this.populationDetails = { | |
population: d3$1.set(this.raw_data.map(function (d) { | |
return d[_this.config.id_col]; | |
})).values() | |
}; | |
this.populationDetails.N = this.populationDetails.population.length; | |
this.IDdetails = {}; | |
} | |
//Remove records with missing key variables. | |
function removeInvalidData() { | |
var _this = this; | |
this.initial_data = this.raw_data.filter(function (d) { | |
return !/^\s*$/.test(d[_this.config.id_col]) && !/^\s*$/.test(d[_this.config.event_col]); | |
}); | |
//Warn user of removed records. | |
if (this.initial_data.length < this.raw_data.length) console.warn(this.raw_data.length - this.initial_data.length + ' records have been removed due to missing identifiers or event types.'); | |
//Check which time scales are present in the data. | |
this.anyDates = this.initial_data.some(function (d) { | |
return d.hasOwnProperty(_this.config.stdt_col) && d[_this.config.stdt_col] !== ''; | |
}); | |
this.anyDays = this.initial_data.some(function (d) { | |
return d.hasOwnProperty(_this.config.stdy_col) && d[_this.config.stdy_col] !== ''; | |
}); | |
} | |
//Attach initial, valid data to controls, bypassing controls.init(). | |
function attachDataToControls() { | |
this.controls.data = this.initial_data; | |
this.controls.ready = true; | |
} | |
function standardizeTimeVariables() { | |
var _this = this; | |
this.initial_data.forEach(function (d, i) { | |
var has_stdt = d.hasOwnProperty(_this.config.stdt_col), | |
has_endt = d.hasOwnProperty(_this.config.endt_col), | |
has_stdy = d.hasOwnProperty(_this.config.stdy_col), | |
has_endy = d.hasOwnProperty(_this.config.endy_col); | |
//Set to an empty string invalid date and day values. | |
if (has_stdt) { | |
if (!d3$1.time.format(_this.config.date_format).parse(d[_this.config.stdt_col])) d[_this.config.stdt_col] = ''; | |
} | |
if (has_endt) { | |
if (!d3$1.time.format(_this.config.date_format).parse(d[_this.config.endt_col])) d[_this.config.endt_col] = d[_this.config.stdt_col]; | |
} | |
if (has_stdy) { | |
if (!/^ *-?\d+ *$/.test(d[_this.config.stdy_col])) d[_this.config.stdy_col] = ''; | |
} | |
if (has_endy) { | |
if (!/^ *-?\d+ *$/.test(d[_this.config.endy_col])) d[_this.config.endy_col] = d[_this.config.stdy_col]; | |
} | |
//Concatenate date and day values for listing. | |
d.stdtdy = has_stdt && has_stdy && d[_this.config.stdy_col] !== '' ? d[_this.config.stdt_col] + ' (' + d[_this.config.stdy_col] + ')' : d[_this.config.stdt_col] || d[_this.config.stdy_col]; | |
d.endtdy = has_endt && has_endy && d[_this.config.endy_col] !== '' ? d[_this.config.endt_col] + ' (' + d[_this.config.endy_col] + ')' : d[_this.config.endt_col] || d[_this.config.endy_col]; | |
}); | |
} | |
function handleEventTypes() { | |
var _this = this; | |
this.allEventTypes = d3$1.set(this.initial_data.map(function (d) { | |
return d[_this.config.event_col]; | |
})).values().sort(); | |
this.currentEventTypes = this.config.event_types || this.allEventTypes.slice(); | |
this.controls.config.inputs.find(function (input) { | |
return input.description === 'Event Type'; | |
}).start = this.currentEventTypes; | |
this.config.color_dom = this.currentEventTypes.concat(this.allEventTypes.filter(function (eventType) { | |
return _this.currentEventTypes.indexOf(eventType) === -1; | |
}).sort()); | |
this.config.legend.order = this.config.color_dom.slice(); | |
} | |
function defineFullTimeRanges() { | |
var _this = this; | |
/**-------------------------------------------------------------------------------------------\ | |
Dates | |
\-------------------------------------------------------------------------------------------**/ | |
if (this.anyDates) { | |
//full domain | |
this.full_date_range = [d3$1.min(this.initial_data, function (d) { | |
return d3$1.time.format(_this.config.date_format).parse(d[_this.config.stdt_col]); | |
}), d3$1.max(this.initial_data, function (d) { | |
return d3$1.time.format(_this.config.date_format).parse(d[_this.config.endt_col]); | |
})]; | |
//full domain as a string | |
this.full_date_time_range = this.full_date_range.map(function (d) { | |
return d3$1.time.format(_this.config.date_format)(d); | |
}).join(' - '); | |
//add full domain to date ranges | |
this.config.date_ranges.push({ | |
domain: this.full_date_range, | |
label: 'Full' | |
}); | |
//add custom domain to date ranges | |
this.config.date_ranges.push({ | |
domain: this.full_date_range.slice(), | |
label: 'User Input' | |
}); | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Days | |
\-------------------------------------------------------------------------------------------**/ | |
if (this.anyDays) { | |
//full domain | |
this.full_day_range = [d3$1.min(this.initial_data, function (d) { | |
return +d[_this.config.stdy_col]; | |
}), d3$1.max(this.initial_data, function (d) { | |
return +d[_this.config.endy_col]; | |
})]; | |
//full domain as a string | |
this.full_day_time_range = this.full_day_range.join(' - '); | |
//add full domain to day ranges | |
this.config.day_ranges.push({ | |
domain: this.full_day_range, | |
label: 'Full' | |
}); | |
//add custom domain to day ranges | |
this.config.day_ranges.push({ | |
domain: this.full_day_range.slice(), | |
label: 'User Input' | |
}); | |
} | |
} | |
function defineInitialTimeRanges() { | |
if (this.anyDates) this.date_range = this.config.date_ranges[0].domain.slice(); | |
if (this.anyDays) this.day_range = this.config.day_ranges[0].domain.slice(); | |
} | |
function syncTimeRanges() { | |
if (this.config.time_scale === 'Date') this.time_range = this.date_range.slice();else this.time_range = this.day_range.slice(); | |
} | |
function handleTimeRanges() { | |
//Calculate extent of each time scale. | |
defineFullTimeRanges.call(this); | |
//Set initial range of each time scale. | |
defineInitialTimeRanges.call(this); | |
//Sync time range variables given initial time scale. | |
syncTimeRanges.call(this); | |
} | |
function checkTimeScales() { | |
var _this = this; | |
this.controls.config.inputs = this.controls.config.inputs.filter(function (input) { | |
if (input.description !== 'X-axis scale') return true;else { | |
if (!_this.anyDates && !_this.anyDays) { | |
var errorText = 'The data either contain neither ' + _this.config.stdt_col + ' nor ' + _this.config.stdy_col + ' or both ' + _this.config.stdt_col + ' and ' + _this.config.stdy_col + ' contain no valid values. Please update the settings object to match the variables in the data or clean the data.'; | |
_this.wrap.append('div').style('color', 'red').html(errorText); | |
throw new Error(errorText); | |
} else if (!_this.anyDates && _this.config.time_scale === 'Date') { | |
console.warn('The data either do not contain a variable named ' + _this.config.stdt_col + ' or ' + _this.config.stdt_col + ' contains no valid values. Please update the settings object to match the variable in the data or clean the data.'); | |
_this.config.time_scale = 'Day'; | |
syncTimeScaleSettings(_this.config); | |
_this.IDtimeline.config.time_scale = 'Day'; | |
syncTimeScaleSettings(_this.IDtimeline.config); | |
} else if (!_this.anyDays && _this.config.time_scale === 'Day') { | |
console.warn('The data either do not contain a variable named ' + _this.config.stdy_col + ' or ' + _this.config.stdy_col + ' contains no valid values. Please update the settings object to match the variable in the data or clean the data.'); | |
_this.config.time_scale = 'Date'; | |
syncTimeScaleSettings(_this.config); | |
_this.IDtimeline.config.time_scale = 'Date'; | |
syncTimeScaleSettings(_this.IDtimeline.config); | |
} | |
return _this.anyDates && _this.anyDays; | |
} | |
}); | |
} | |
function updateTimeRangeControls() { | |
if (this.anyDates) { | |
//Update date time range dropdown. | |
this.controls.config.inputs.find(function (input) { | |
return input.option === 'date_time_range'; | |
}).values = this.config.date_ranges.map(function (date_time_range) { | |
return date_time_range.label; | |
}); | |
this.config.date_time_range = this.config.date_ranges[0].label; | |
} | |
if (this.anyDays) { | |
//Update day time range dropdown. | |
this.controls.config.inputs.find(function (input) { | |
return input.option === 'day_time_range'; | |
}).values = this.config.day_ranges.map(function (day_time_range) { | |
return day_time_range.label; | |
}); | |
this.config.day_time_range = this.config.day_ranges[0].label; | |
} | |
} | |
function checkOtherControls() { | |
var _this = this; | |
this.controls.config.inputs.filter(function (input) { | |
return input.type !== 'subsetter'; | |
}).forEach(function (input) { | |
//Set values of Event Type highlighting control to event types present in the data. | |
if (input.description === 'Event highlighting') input.values = _this.config.color_dom.slice();else if (input.description === 'Y-axis grouping') input.values = _this.config.groupings.map(function (grouping) { | |
return grouping.label; | |
}); | |
return true; | |
}); | |
checkTimeScales.call(this); | |
updateTimeRangeControls.call(this); | |
} | |
function checkFilters() { | |
var _this = this; | |
this.controls.config.inputs = this.controls.config.inputs.filter(function (input) { | |
if (input.type !== 'subsetter') return true;else if (!_this.initial_data[0].hasOwnProperty(input.value_col)) { | |
console.warn(input.value_col + ' filter removed because the variable does not exist.'); | |
return false; | |
} else { | |
var levels = d3$1.set(_this.initial_data.map(function (d) { | |
return d[input.value_col]; | |
})).values(); | |
if (levels.length < 2) { | |
console.warn(input.value_col + ' filter removed because the variable has only one level.'); | |
} | |
return levels.length > 1; | |
} | |
}); | |
} | |
function checkControls() { | |
checkOtherControls.call(this); | |
checkFilters.call(this); | |
} | |
//If a tooltip variable is specified and exists, attach it to each mark's existing tooltip specification. | |
function updateTooltipSettings() { | |
var _this = this; | |
if (this.raw_data[0].hasOwnProperty(this.config.tooltip_col)) { | |
this.config.marks.forEach(function (mark) { | |
mark.tooltip = mark.tooltip + "\n[" + _this.config.tooltip_col + "]"; | |
}); | |
this.clinicalTimelines.settings.IDtimeline.marks.forEach(function (mark) { | |
mark.tooltip = mark.tooltip + "\n[" + _this.config.tooltip_col + "]"; | |
}); | |
} | |
} | |
//Remove invalid time data. | |
function cleanData() { | |
var _this = this; | |
this.wide_data = this.initial_data.filter(function (d) { | |
return d[_this.config.st_col] !== ''; | |
}); | |
//Warn user of removed records. | |
if (this.wide_data.length < this.initial_data.length) { | |
if (this.config.time_scale === 'Date') console.warn(this.initial_data.length - this.wide_data.length + ' records have been removed due to missing or invalid date variable values that do not match settings.date_format (' + this.config.date_format + ')');else if (this.config.time_scale === 'Day') console.warn(this.initial_data.length - this.wide_data.length + ' records have been removed due to missing or invalid day variable values.'); | |
} | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Expand a data array to one item per original item per specified column. | |
\------------------------------------------------------------------------------------------------*/ | |
function lengthenRaw(data, columns) { | |
var my_data = []; | |
data.forEach(function (d) { | |
columns.forEach(function (column) { | |
var obj = Object.assign({}, d); | |
obj.wc_category = column; | |
obj.wc_value = d[column]; | |
my_data.push(obj); | |
}); | |
}); | |
return my_data; | |
} | |
function defineData() { | |
var _this = this; | |
//Capture timepoints. | |
var timepoints = this.wide_data.filter(function (d) { | |
return d[_this.config.st_col] === d[_this.config.en_col]; | |
}).map(function (d) { | |
d.wc_category = _this.config.time_unit; | |
d.wc_value = d[_this.config.st_col]; | |
return d; | |
}); | |
//Capture time intervals, creating two records for each event.. | |
var timeIntervals = lengthenRaw(this.wide_data.filter(function (d) { | |
return d[_this.config.st_col] !== d[_this.config.en_col]; | |
}), [this.config.st_col, this.config.en_col]); | |
//Merge timepoints and time intervals. | |
this.long_data = d3$1.merge([timepoints, timeIntervals]); | |
this.raw_data = this.long_data; | |
} | |
function onInit() { | |
getPopulationDetails.call(this); | |
removeInvalidData.call(this); | |
attachDataToControls.call(this); | |
standardizeTimeVariables.call(this); | |
handleEventTypes.call(this); | |
handleTimeRanges.call(this); | |
checkControls.call(this); | |
updateTooltipSettings.call(this); | |
cleanData.call(this); | |
defineData.call(this); | |
} | |
function IDdetails() { | |
//Add ID characteristics. | |
this.clinicalTimelines.containers.IDdetails.selectAll('div.characteristic').data(this.config.id_characteristics).enter().append('div').classed('ct-characteristic', true).html(function (d) { | |
return d.label + ': <span id = \'' + d.value_col + '\'></span>'; | |
}); | |
} | |
function controlGroupLayout() { | |
var context = this; | |
this.controls.wrap.selectAll('.control-group').each(function (d) { | |
var controlGroup = d3$1.select(this), | |
label = controlGroup.selectAll('.wc-control-label, .control-label'), | |
description = controlGroup.select('.span-description'), | |
container = controlGroup.append('div').classed('ct-label-description', true); | |
controlGroup.attr('class', controlGroup.attr('class') + ' ' + d.type); | |
container.node().appendChild(label.node()); | |
container.node().appendChild(description.node()); | |
//Add horizontal rule to group controls and filters. | |
if (d.value_col === context.config.id_col) context.controls.wrap.insert('div', ':first-child').classed('ct-controls ct-horizontal-rule', true).text('Controls');else if (context.config.groupings.length && d.option === 'y.groupingLabel' || !context.config.groupings.length && d.option === 'y.sort') { | |
var filterRule = context.controls.wrap.append('div').classed('ct-filters ct-horizontal-rule', true).text('Filters'); | |
context.controls.wrap.node().insertBefore(filterRule.node(), this.nextSibling); | |
} | |
}); | |
} | |
function drawIDtimeline() { | |
var _this = this; | |
//Hide population details. | |
this.clinicalTimelines.containers.populationDetails.classed('ct-hidden', true); | |
//Display ID information. | |
this.clinicalTimelines.containers.IDdetails.classed('ct-hidden', false); | |
//Hide reference line table. | |
if (this.config.reference_lines) this.config.reference_lines.forEach(function (reference_line) { | |
reference_line.tableContainer.remove(); | |
}); | |
//Hide clinical timelines. | |
this.wrap.select('svg.wc-svg').classed('ct-hidden', true); | |
//Define ID data. | |
var longIDdata = this.long_data.filter(function (di) { | |
return di[_this.config.id_col] === _this.selected_id; | |
}); | |
var wideIDdata = this.wide_data.filter(function (di) { | |
return di[_this.config.id_col] === _this.selected_id; | |
}); | |
//Draw ID characteristics. | |
if (this.config.id_characteristics) { | |
var id_characteristics = this.initial_data.filter(function (d) { | |
return d[_this.config.id_col] === _this.selected_id; | |
})[0]; | |
this.clinicalTimelines.containers.IDdetails.selectAll('.ct-characteristic').each(function (d) { | |
d3$1.select(this).select('span').text(id_characteristics[d.value_col]); | |
}); | |
} | |
//Draw ID timeline. | |
this.clinicalTimelines.containers.IDtimeline.classed('ct-hidden', false); | |
this.clinicalTimelines.containers.IDtimeline.select('div').selectAll('*').remove(); | |
webcharts.multiply(this.IDtimeline, longIDdata.filter(function (d) { | |
return _this.currentEventTypes !== 'All' ? _this.currentEventTypes.indexOf(d[_this.config.event_col]) > -1 : true; | |
}), this.config.event_col, this.config.color_dom, this.clinicalTimelines.test); | |
//Draw ID detail listing. | |
this.clinicalTimelines.containers.listing.classed('ct-hidden', false); | |
this.clinicalTimelines.containers.listing.select('div').selectAll('*').remove(); | |
this.listing.init(wideIDdata.filter(function (d) { | |
return _this.currentEventTypes !== 'All' ? _this.currentEventTypes.indexOf(d[_this.config.event_col]) > -1 : true; | |
}), this.clinicalTimelines.test); | |
} | |
function eventHighlighting(select$$1, d) { | |
//Update event highlighting settings. | |
this.config.event_highlighted = d3$1.select(select$$1).select('option:checked').text(); | |
this.IDtimeline.config.event_highlighted = this.config.event_highlighted; | |
//Redraw. | |
if (this.selected_id) drawIDtimeline.call(this);else this.draw(); | |
} | |
function timeScale(dropdown, d) { | |
//Update clinical timelines time scale settings | |
this.config.time_scale = d3$1.select(dropdown).select('option:checked').text(); | |
syncTimeScaleSettings(this.config); | |
//Hide other time range dropdown. | |
if (!this.selected_id) hideTimeRangeControl.call(this); | |
//Update time range settings. | |
this.time_range = this[this.config.time_scale.toLowerCase() + '_range']; | |
//Update ID timeline time scale settings | |
this.IDtimeline.config.time_scale = this.config.time_scale; | |
syncTimeScaleSettings(this.IDtimeline.config); | |
//Remove records without time data. | |
cleanData.call(this); | |
//Redefine data. | |
defineData.call(this); | |
//Redraw. | |
if (this.selected_id) drawIDtimeline.call(this);else this.draw(); | |
} | |
function timeRange(dropdown, d) { | |
var label = d3$1.select(dropdown).selectAll('option').filter(function () { | |
return this.selected; | |
}).text(); | |
var time_range = this.config[this.config.time_scale.toLowerCase() + '_ranges'].find(function (di) { | |
return di.label === label; | |
}); | |
this[this.config.time_scale.toLowerCase() + '_range'] = time_range.domain.slice(); | |
this.time_range = time_range.domain.slice(); | |
//Remove records without time data. | |
cleanData.call(this); | |
//Redefine data. | |
defineData.call(this); | |
//Redraw. | |
if (this.selected_id) drawIDtimeline.call(this);else this.draw(); | |
} | |
function yAxisGrouping(select$$1, d) { | |
var selected = d3$1.select(select$$1).select('option:checked'); | |
//Update grouping settings. | |
if (selected.text() !== 'None') { | |
this.config.y.grouping = this.config.groupings.find(function (grouping) { | |
return grouping.label === selected.text(); | |
}).value_col; | |
this.config.y.groupingLabel = selected.text(); | |
} else { | |
delete this.config.y.grouping; | |
this.config.y.groupingLabel = 'Event Types'; | |
} | |
//Redraw. | |
this.draw(); | |
} | |
function augmentOtherControls() { | |
var context = this; | |
var controls = this.controls.wrap.selectAll('.control-group').filter(function (d) { | |
return d.type !== 'subsetter'; | |
}).classed('ct-control', true).attr('id', function (d) { | |
return 'control-' + d.option.replace('.', '-'); | |
}); | |
//Redefine event highlighting event listener. | |
controls.filter(function (d) { | |
return d.option === 'event_highlighted'; | |
}).select('select').on('change', function (d) { | |
eventHighlighting.call(context, this, d); | |
}); | |
//Redefine time scale event listener. | |
controls.filter(function (d) { | |
return d.option === 'time_scale'; | |
}).select('select').on('change', function (d) { | |
timeScale.call(context, this, d); | |
}); | |
//Redefine time range event listener. | |
controls.filter(function (d) { | |
return d.option.indexOf('time_range') > -1; | |
}).selectAll('select').each(function (d) { | |
//add event listener | |
d3$1.select(this).on('change', function (d) { | |
timeRange.call(context, this, d); | |
}); | |
}); | |
//Redefine y-axis grouping event listener. | |
controls.filter(function (d) { | |
return d.option === 'y.groupingLabel'; | |
}).select('select').on('change', function (d) { | |
yAxisGrouping.call(context, this, d); | |
}); | |
} | |
function onChange(input, d) { | |
var _this = this; | |
var time_range = this.config.time_scale.toLowerCase() + '_range'; | |
var increment = this.config.time_scale === 'Date' ? 24 * 60 * 60 * 1000 : 1; | |
//User input. | |
var inputValue = this.config.time_scale === 'Date' ? d3$1.time.format('%Y-%m-%d').parse(input.value) : +input.value; | |
//handle invalid inputs | |
if (d.index === 0 && inputValue >= this[time_range][1]) inputValue = this.config.time_scale === 'Date' ? new Date(this[time_range][1].getTime() - increment) : this[time_range][1] - increment;else if (d.index === 1 && inputValue <= this[time_range][0]) inputValue = this.config.time_scale === 'Date' ? new Date(this[time_range][0].getTime() + increment) : inputValue = this[time_range][0] + increment; | |
//Update time range. | |
this[time_range][d.index] = inputValue; | |
this.time_range = this[time_range]; | |
//Update custom time range setting. | |
var customTimeRange = this.config[time_range + 's'].find(function (d) { | |
return d.label === 'User Input'; | |
}); | |
customTimeRange.domain = this.time_range.slice(); | |
//Update time range control. | |
this.controls.wrap.selectAll('.control-group').filter(function (d) { | |
return d.option === _this.config.time_scale.toLowerCase() + '_time_range'; | |
}).selectAll('option').property('selected', function () { | |
return this.value === 'User Input'; | |
}).filter(function () { | |
return this.value === 'User Input'; | |
}).datum(customTimeRange.time_range); | |
this.draw(); | |
} | |
function timeRangeControl(datum) { | |
var context = this, | |
timeRangeContainer = this.controls.wrap.insert('div', '#control-y-sort').datum(datum).classed('control-group ct-time-range ct-control', true).attr('id', function (d) { | |
return 'control-' + d.option.replace(/\./g, '-'); | |
}), | |
timeRangeInput = timeRangeContainer.append('input').classed('changer', true), | |
timeRangeLabelDescription = timeRangeContainer.append('div').classed('ct-label-description', true); | |
//Add control label and span description nodes. | |
timeRangeLabelDescription.append('span').classed('wc-control-label', true); | |
timeRangeLabelDescription.append('span').classed('span-description', true).text(function (d) { | |
return d.description; | |
}); | |
//Add event listener to input node. | |
timeRangeInput.on('change', function (d) { | |
onChange.call(context, this, d); | |
}); | |
} | |
function addTimeRangeControls() { | |
//Start | |
timeRangeControl.call(this, { | |
index: 0, | |
option: 'x.domain.0', | |
label: '', | |
description: 'Start' | |
}); | |
//End | |
timeRangeControl.call(this, { | |
index: 1, | |
option: 'x.domain.1', | |
label: '', | |
description: 'End' | |
}); | |
} | |
function IDchange(select$$1) { | |
var _this = this; | |
this.selected_id = d3$1.select(select$$1).select('option:checked').text(); | |
this.filters.filter(function (filter) { | |
return filter.col === _this.config.id_col; | |
})[0].val = this.selected_id; | |
//Redraw. | |
if (this.selected_id !== 'All') { | |
drawIDtimeline.call(this); | |
} else { | |
delete this.selected_id; | |
//Display population details. | |
this.clinicalTimelines.containers.populationDetails.classed('ct-hidden', false); | |
//Hide ID information. | |
this.clinicalTimelines.containers.IDdetails.classed('ct-hidden', true); | |
//Hide clinical timelines. | |
this.wrap.select('svg.wc-svg').classed('ct-hidden', false); | |
this.draw(); | |
//Hide ID timeline. | |
this.clinicalTimelines.containers.IDtimeline.select('div').selectAll('*').remove(); | |
this.clinicalTimelines.containers.IDtimeline.classed('ct-hidden', true); | |
//Draw ID detail listing. | |
this.clinicalTimelines.containers.listing.select('div').selectAll('*').remove(); | |
this.clinicalTimelines.containers.listing.classed('ct-hidden', true); | |
} | |
//Update controls given the current view. | |
enableDisableControls.call(this); | |
} | |
function eventTypeChange(select$$1) { | |
var _this = this; | |
this.currentEventTypes = d3$1.select(select$$1).selectAll('select option:checked').pop().map(function (d) { | |
return d.textContent; | |
}); | |
this.filters.filter(function (filter) { | |
return filter.col === _this.config.event_col; | |
})[0].val = this.currentEventTypes; | |
this.wrap.selectAll('.legend-item').classed('ct-selected', function (d) { | |
return _this.currentEventTypes.indexOf(d.label) > -1; | |
}); | |
if (this.selected_id) drawIDtimeline.call(this);else this.draw(); | |
} | |
function augmentFilters() { | |
var _this = this; | |
var context = this; | |
var controls = this.controls.wrap.selectAll('.control-group').filter(function (d) { | |
return d.type === 'subsetter'; | |
}).classed('ct-filter', true).attr('id', function (d) { | |
return 'filter-' + d.value_col; | |
}).classed('ct-ID', function (d) { | |
return d.value_col === _this.config.id_col; | |
}), | |
IDfilter = controls.filter(function (filter) { | |
return filter.value_col === _this.config.id_col; | |
}), | |
eventTypeFilter = controls.filter(function (filter) { | |
return filter.value_col === _this.config.event_col; | |
}); | |
IDfilter.select('select').on('change', function (d) { | |
IDchange.call(context, this); | |
}); | |
eventTypeFilter.selectAll('select.changer option').property('selected', function (di) { | |
return context.currentEventTypes instanceof Array ? context.currentEventTypes.indexOf(di) > -1 : true; | |
}); | |
eventTypeFilter.select('select').on('change', function (d) { | |
eventTypeChange.call(context, this); | |
}); | |
} | |
function topXaxis() { | |
this.svg.append('g').classed('x-top axis linear', true).append('text').classed('axis-title top', true); | |
} | |
function onLayout() { | |
//Lay out details container. | |
IDdetails.call(this); | |
//Move control labels and descriptions inside a div to display them vertically, label on top of description. | |
controlGroupLayout.call(this); | |
//Add additional functionality to other control event listeners. | |
augmentOtherControls.call(this); | |
//Hide other time range dropdown. | |
hideTimeRangeControl.call(this); | |
//Add time range functionality. | |
addTimeRangeControls.call(this); | |
//Add additional functionality to filter event listeners. | |
augmentFilters.call(this); | |
//Add top x-axis. | |
topXaxis.call(this); | |
} | |
function updateTimeRangeControls$1() { | |
var _this = this; | |
var timeRangeControls = this.controls.wrap.selectAll('.ct-time-range input'); | |
//Internet Explorer does not support input date type. | |
timeRangeControls.property('type', !this.clinicalTimelines.document.documentMode ? this.config.time_scale === 'Date' ? 'date' : 'number' : 'text'); | |
timeRangeControls.property('value', function (d) { | |
return _this.config.time_scale === 'Date' ? d3$1.time.format(_this.config.date_format)(_this.time_range[d.index]) : +_this.time_range[d.index]; | |
}); | |
} | |
function defineFilteredData() { | |
var _this = this; | |
//Redefine filtered data as it defaults to the final mark drawn, which might be filtered in | |
//addition to the current filter selections. | |
this.filtered_long_data = this.long_data.filter(function (d) { | |
var filtered = false; | |
_this.filters.forEach(function (di) { | |
if (filtered === false && di.val !== 'All') { | |
filtered = di.val instanceof Array ? di.val.indexOf(d[di.col]) === -1 : di.val !== d[di.col]; | |
} | |
}); | |
return !filtered; | |
}); | |
this.raw_data = this.filtered_long_data; | |
//Define subset of original raw data. | |
this.filtered_wide_data = this.wide_data.filter(function (d) { | |
var filtered = false; | |
_this.filters.forEach(function (di) { | |
if (filtered === false && di.val !== 'All') { | |
filtered = di.val instanceof Array ? di.val.indexOf(d[di.col]) === -1 : di.val !== d[di.col]; | |
} | |
}); | |
return !filtered; | |
}); | |
} | |
function updatePopulationDetails() { | |
this.clinicalTimelines.containers.popCurrentFilters.html('<span class = \'ct-stats ct-sample\'>' + this.populationDetails.n + '</span> of <span class = \'ct-stats\'>' + this.populationDetails.N + '</span> ' + (this.populationDetails.N > 1 ? this.config.id_unitPlural : this.config.id_unit) + ' (<span class = \'ct-stats\'>' + d3$1.format('%')(this.populationDetails.rate) + '</span>) <span class = \'ct-info-icon\' title = \'These ' + this.config.id_unitPlural + ' have data that meet the current filter criteria.\'>ⓘ</span>'); | |
this.clinicalTimelines.containers.popInsideTimeRange.html(this.populationDetails.nInsideTimeRange < this.populationDetails.n ? '<span class = \'ct-stats ct-sample-inside-time-range\'>' + this.populationDetails.nInsideTimeRange + '</span> of <span class = \'ct-stats ct-sample\'>' + this.populationDetails.n + '</span> displayed (<span class = \'ct-stats\'>' + d3$1.format('%')(this.populationDetails.rateInsideTimeRange) + '</span>) <span class = \'ct-info-icon\' title = \'These ' + this.config.id_unitPlural + ' have events that occur in the current time range.\'>ⓘ</span>' : ''); | |
this.clinicalTimelines.containers.popOutsideTimeRange.html(this.populationDetails.nOutsideTimeRange ? '<span class = \'ct-stats ct-sample-outside-time-range\'>' + this.populationDetails.nOutsideTimeRange + '</span> of <span class = \'ct-stats ct-sample\'>' + this.populationDetails.n + '</span> hidden (<span class = \'ct-stats\'>' + d3$1.format('%')(this.populationDetails.rateOutsideTimeRange) + '</span>) <span class = \'ct-info-icon\' title = \'These ' + this.config.id_unitPlural + ' do not have events that occur in the current time range.\'>ⓘ</span>' : ''); | |
} | |
function definePopulationDetails() { | |
var _this = this; | |
//Define sample given current filters. | |
this.populationDetails.sample = d3$1.set(this.filtered_wide_data.map(function (d) { | |
return d[_this.config.id_col]; | |
})).values().map(function (ID) { | |
var IDobject = { | |
ID: ID, | |
data: _this.filtered_wide_data.filter(function (d) { | |
return ID === d[_this.config.id_col]; | |
}) | |
}; | |
IDobject.dataInsideTimeRange = IDobject.data.filter(function (d) { | |
var st = _this.config.time_function(d[_this.config.st_col]), | |
en = _this.config.time_function(d[_this.config.en_col]), | |
stInsideTimeRange = _this.config.x.domain[0] <= st && st <= _this.config.x.domain[1], | |
// start is within the time range | |
enInsideTimeRange = _this.config.x.domain[0] <= en && en <= _this.config.x.domain[1], | |
// end is within the time range | |
surroundingTimeRange = _this.config.x.domain[0] > st && en > _this.config.x.domain[1]; // start is prior to time range and end is after time range | |
return stInsideTimeRange || enInsideTimeRange || surroundingTimeRange; | |
}); | |
return IDobject; | |
}); | |
this.populationDetails.n = this.populationDetails.sample.length; | |
this.populationDetails.rate = this.populationDetails.n / this.populationDetails.N; | |
//Define sample given current filters of IDs with an event inside the current time range. | |
this.populationDetails.sampleInsideTimeRange = this.populationDetails.sample.filter(function (d) { | |
return d.dataInsideTimeRange.length; | |
}).map(function (d) { | |
return d.ID; | |
}); | |
this.populationDetails.nInsideTimeRange = this.populationDetails.sampleInsideTimeRange.length; | |
this.populationDetails.rateInsideTimeRange = this.populationDetails.nInsideTimeRange / this.populationDetails.n; | |
//Define sample given current filters of IDs without an event inside the current time range. | |
this.populationDetails.sampleOutsideTimeRange = this.populationDetails.sample.filter(function (d) { | |
return !d.dataInsideTimeRange.length; | |
}).map(function (d) { | |
return d.ID; | |
}); | |
this.populationDetails.nOutsideTimeRange = this.populationDetails.sampleOutsideTimeRange.length; | |
this.populationDetails.rateOutsideTimeRange = this.populationDetails.nOutsideTimeRange / this.populationDetails.n; | |
//Update population details. | |
updatePopulationDetails.call(this); | |
} | |
function defineDataInsideTimeRange() { | |
var _this = this; | |
this.longDataInsideTimeRange = this.filtered_long_data.filter(function (d) { | |
return _this.populationDetails.sampleInsideTimeRange.indexOf(d[_this.config.id_col]) > -1; | |
}); | |
this.raw_data = this.longDataInsideTimeRange; | |
this.wideDataInsideTimeRange = this.filtered_wide_data.filter(function (d) { | |
return _this.populationDetails.sampleInsideTimeRange.indexOf(d[_this.config.id_col]) > -1; | |
}); | |
} | |
function defineGroupingData() { | |
var _this = this; | |
if (this.config.y.grouping) { | |
//Capture each grouping and corresponding array of IDs. | |
this.groupings = d3$1.set(this.longDataInsideTimeRange.map(function (d) { | |
return d[_this.config.y.grouping]; | |
})).values().sort().map(function (d, i) { | |
var groupingObject = { | |
key: d, | |
IDs: [] | |
}; | |
if (_this.config.grouping_direction === 'horizontal') { | |
//Define datum for each grouping that looks like actual data. | |
for (var variable in _this.raw_data[0]) { | |
if ([_this.config.id_col, _this.config.event_col, _this.config.seq_col, _this.config.y.grouping].indexOf(variable) === -1) groupingObject[variable] = '';else if (variable === _this.config.id_col) groupingObject[_this.config.id_col] = d;else if (variable === _this.config.event_col) groupingObject[_this.config.event_col] = 'Grouping';else if (variable === _this.config.seq_col) groupingObject[_this.config.seq_col] = '1';else if (variable === _this.config.y.grouping) groupingObject[_this.config.y.grouping] = d; | |
} | |
//Define both a start and end datum. | |
var groupingStart = clone(groupingObject), | |
groupingEnd = clone(groupingObject); | |
if (_this.config.time_scale === 'Date') { | |
groupingStart.wc_value = _this.full_date_range[0]; | |
groupingEnd.wc_value = _this.full_date_range[0]; | |
} else { | |
groupingStart.wc_value = _this.full_day_range[0]; | |
groupingEnd.wc_value = _this.full_day_range[0]; | |
} | |
//Push two start and two end data to raw_data to create space to annotate grouping. | |
var groupingStart1 = clone(groupingStart), | |
groupingStart2 = clone(groupingStart), | |
groupingEnd1 = clone(groupingEnd), | |
groupingEnd2 = clone(groupingEnd); | |
//Placeholder row in which to print grouping. | |
groupingStart1[_this.config.id_col] = '-g' + i + '-'; | |
_this.raw_data.push(groupingStart1); | |
_this.longDataInsideTimeRange.push(groupingStart1); | |
groupingEnd1[_this.config.id_col] = '-g' + i + '-'; | |
_this.raw_data.push(groupingEnd1); | |
_this.longDataInsideTimeRange.push(groupingEnd1); | |
} | |
return groupingObject; | |
}); | |
} else delete this.groupings; | |
} | |
function sortYdomain() { | |
var _this = this; | |
/**-------------------------------------------------------------------------------------------\ | |
Sort y-domain by the earliest event of each ID. | |
\-------------------------------------------------------------------------------------------**/ | |
if (this.config.y.sort === 'By Earliest Event') { | |
if (this.config.y.grouping) { | |
//Sort IDs by grouping then earliest event if y-axis is grouped. | |
var nestedData = d3$1.nest().key(function (d) { | |
return d[_this.config.y.grouping] + '|' + d[_this.config.id_col]; | |
}).rollup(function (d) { | |
return d3$1.min(d, function (di) { | |
return _this.config.time_function(di.wc_value); | |
}); | |
}).entries(this.longDataInsideTimeRange).sort(function (a, b) { | |
var aGrouping = a.key.split('|')[0]; | |
var bGrouping = b.key.split('|')[0]; | |
var earliestEventSort = a.values > b.values ? -2 : a.values < b.values ? 2 : a.key > b.key ? -1 : 1; | |
return aGrouping > bGrouping ? -1 : aGrouping < bGrouping ? 1 : earliestEventSort; | |
}); // nest data by grouping and ID. | |
//Capture list of IDs by grouping. | |
nestedData.forEach(function (d) { | |
var split = d.key.split('|'); | |
_this.groupings.filter(function (grouping) { | |
return grouping.key === split[0]; | |
}).pop().IDs.push(split[1]); | |
}); | |
//Set y-domain. | |
this.config.y.domain = nestedData.map(function (d) { | |
return d.key.split('|')[1]; | |
}); | |
} else { | |
//Otherwise sort IDs by earliest event. | |
this.config.y.domain = d3$1.nest().key(function (d) { | |
return d[_this.config.id_col]; | |
}).rollup(function (d) { | |
return d3$1.min(d, function (di) { | |
return _this.config.time_function(di[_this.config.st_col]); | |
}); | |
}).entries(this.longDataInsideTimeRange).sort(function (a, b) { | |
var earliestEventSort = a.values > b.values ? -2 : a.values < b.values ? 2 : a.key > b.key ? -1 : 1; | |
return earliestEventSort; | |
}).map(function (d) { | |
return d.key; | |
}); | |
} | |
} else { | |
/**-------------------------------------------------------------------------------------------\ | |
Sort y-domain alphanumerically. | |
\-------------------------------------------------------------------------------------------**/ | |
if (this.config.y.grouping) { | |
//Sort IDs by grouping then alphanumerically if y-axis is grouped. | |
this.config.y.domain = d3$1.set(this.longDataInsideTimeRange.map(function (d) { | |
return d[_this.config.id_col]; | |
})).values().sort(function (a, b) { | |
var aGrouping = _this.raw_data.filter(function (d) { | |
return d[_this.config.id_col] === a; | |
})[0][_this.config.y.grouping], | |
bGrouping = _this.raw_data.filter(function (d) { | |
return d[_this.config.id_col] === b; | |
})[0][_this.config.y.grouping], | |
alphanumericSort = a > b ? -1 : 1; | |
return aGrouping > bGrouping ? -1 : aGrouping < bGrouping ? 1 : alphanumericSort; | |
}); | |
this.config.y.domain.forEach(function (d) { | |
_this.groupings.filter(function (grouping) { | |
return grouping.key === _this.raw_data.filter(function (di) { | |
return di[_this.config.id_col] === d; | |
})[0][_this.config.y.grouping]; | |
}).pop().IDs.push(d); | |
}); | |
} else { | |
//Otherwise sort IDs alphanumerically. | |
this.config.y.domain = this.populationDetails.sampleInsideTimeRange.sort(function (a, b) { | |
var alphanumericSort = a > b ? -1 : 1; | |
return alphanumericSort; | |
}); | |
} | |
} | |
} | |
function onPreprocess() { | |
//Set x-domain. | |
this.config.x.domain = this.time_range; | |
//Set x-domain. | |
updateTimeRangeControls$1.call(this); | |
//Define filtered data irrespective of individual mark filtering. | |
defineFilteredData.call(this); | |
//Define population details data. | |
definePopulationDetails.call(this); | |
//Define data inside time range. | |
defineDataInsideTimeRange.call(this); | |
//Insert dummy grouping data into data array to draw empty rows in which to annotate groupings. | |
defineGroupingData.call(this); | |
//Sort y-axis based on `Sort IDs` control selection. | |
sortYdomain.call(this); | |
} | |
function onDatatransform() {} | |
function onDraw() {} | |
function legendFilter() { | |
var _this = this; | |
//Filter data by clicking on legend. | |
var context = this, | |
eventTypeFilter = this.filters.filter(function (filter) { | |
return filter.col === _this.config.event_col; | |
})[0], | |
// event type filter object | |
eventTypeControl = this.controls.wrap.selectAll('.control-group').filter(function (d) { | |
return d.description === 'Event Type'; | |
}), | |
// event type control | |
eventTypes = eventTypeControl.selectAll('.changer option').sort(function (a, b) { | |
return _this.config.color_dom.indexOf(a) - _this.config.color_dom.indexOf(b); | |
}), | |
// event type options | |
legendItems = this.wrap.selectAll('.legend-item').classed('ct-button', true).classed('ct-selected', function (d) { | |
return eventTypeFilter.val instanceof Array ? eventTypeFilter.val.indexOf(d.label) > -1 : true; | |
}).classed('ct-hidden', function (d) { | |
return d.label === 'None'; | |
}); // Remove None legend item; not sure why it's showing up. | |
//Add event listener to legend items. | |
legendItems.on('click', function (d) { | |
var legendItem = d3$1.select(this), | |
// clicked legend item | |
selected = !legendItem.classed('ct-selected'); // selected boolean | |
legendItem.classed('ct-selected', selected); // toggle selected class | |
var selectedLegendItems = legendItems.filter(function () { | |
return d3$1.select(this).classed('ct-selected'); | |
}).data().map(function (d) { | |
return d.label; | |
}); // selected event types | |
eventTypes.property('selected', false).filter(function (d) { | |
return selectedLegendItems.indexOf(d) > -1; | |
}).property('selected', true); // sync selected options in event type filter with selected legend items | |
eventTypeFilter.val = selectedLegendItems; // update filter object | |
context.currentEventTypes = selectedLegendItems; | |
if (context.selected_id) drawIDtimeline.call(context);else context.draw(); | |
}); | |
} | |
function timepoint(legendMark) { | |
var x = 1; | |
var y = 10; | |
var width = 8; | |
var height = 8; | |
var margin = 2; | |
legendMark.append('rect').classed('ct-legend-mark', true).attr({ | |
x: x + width * 0 + margin * 0, | |
y: y - height / 2, | |
width: width, | |
height: height, | |
fill: 'black' | |
}); | |
//.append('animateTransform') | |
//.attr({ | |
// attributeName: 'transform', | |
// type: 'rotate', | |
// from: `0 ${x + width/2} ${y}`, | |
// to: `360 ${x + width/2} ${y}`, | |
// dur: '4s', | |
// repeatCount: 'indefinite' | |
//}); | |
legendMark.append('circle').classed('ct-legend-mark', true).attr({ | |
cx: x + width * 1 + width / 2 + +margin * 1, | |
cy: y, | |
r: width / 2, | |
fill: 'black' | |
}); | |
legendMark.append('polygon').classed('ct-legend-mark', true).attr({ | |
points: [[x + width * 2 + margin * 2, y - height / 2], [x + width * 2 + margin * 2 + width, y], [x + width * 2 + margin * 2, y + height / 2]].map(function (point) { | |
return point.join(','); | |
}).join(','), | |
fill: 'black' | |
}); | |
//.append('animateTransform') | |
//.attr({ | |
// attributeName: 'transform', | |
// type: 'rotate', | |
// from: `0 ${x + width*2 + 2 + width/2} ${y}`, | |
// to: `360 ${x + width*2 + 2 + width/2} ${y}`, | |
// dur: '4s', | |
// repeatCount: 'indefinite' | |
//}); | |
} | |
function timeInterval(legendMark) { | |
var y = 10; | |
legendMark.append('line').classed('ct-legend-mark', true).attr({ | |
x1: 4, | |
x2: 26, | |
y1: y, | |
y2: y | |
}).style({ | |
'stroke-width': 8, | |
stroke: 'black', | |
'stroke-linecap': 'round' | |
}); | |
legendMark.append('circle').classed('ct-legend-mark ct-start-stop-circle', true).attr({ | |
cx: 5, | |
cy: y, | |
r: 2.5, | |
fill: 'white', | |
stroke: 'lightgray' | |
}); | |
legendMark.append('circle').classed('ct-legend-mark ct-start-stop-circle', true).attr({ | |
cx: 25, | |
cy: y, | |
r: 2.5, | |
fill: 'white', | |
stroke: 'lightgray' | |
}); | |
} | |
function ongoingEvent(legendMark) { | |
var y = 10; | |
legendMark.append('line').classed('ct-legend-mark', true).attr({ | |
x1: 4, | |
x2: 20, | |
y1: y, | |
y2: y | |
}).style({ | |
'stroke-width': 8, | |
stroke: 'black', | |
'stroke-linecap': 'round' | |
}); | |
legendMark.append('circle').classed('ct-legend-mark ct-start-stop-circle', true).attr({ | |
cx: 5, | |
cy: y, | |
r: 2.5, | |
fill: 'white', | |
stroke: 'lightgray' | |
}); | |
legendMark.append('polygon').classed('ct-legend-mark ct-ongoing-event', true).attr({ | |
points: [[18, y - 6], [30, y], [18, y + 6]].map(function (point) { | |
return point.join(','); | |
}).join(' '), | |
fill: 'black', | |
stroke: 'black' | |
}); | |
} | |
function addSecondLegend() { | |
var context = this; | |
var secondLegend = this.wrap.insert('ul', '.wc-svg').attr('id', 'ct-legend'); | |
secondLegend.selectAll('li').data([{ label: 'timepoint', function: timepoint }, { label: 'time interval', function: timeInterval }, { label: 'ongoing event', function: ongoingEvent }]).enter().append('li').classed('ct-legend-item', true).each(function (d) { | |
var legendItem = d3$1.select(this); | |
var legendMark = legendItem.append('svg').classed('ct-legend-color-block', true).attr({ | |
width: 36, | |
height: 16 | |
}); | |
d.function.call(context, legendMark); | |
var legendLabel = legendItem.append('span').classed('ct-legend-label', true).text(d.label); | |
}); | |
} | |
function drawTopXaxis() { | |
var topXaxis = d3$1.svg.axis().scale(this.x).orient('top').ticks(this.xAxis.ticks()[0]).tickFormat(this.config.x_displayFormat).innerTickSize(this.xAxis.innerTickSize()).outerTickSize(this.xAxis.outerTickSize()), | |
topXaxisSelection = this.svg.select('g.x-top.axis').attr('class', 'x-top axis linear'); | |
topXaxisSelection.call(topXaxis); | |
topXaxisSelection.select('text.axis-title.top').attr({ | |
transform: 'translate(' + this.plot_width / 2 + ',' + -this.margin.top / 2 + ')', | |
'text-anchor': 'middle' | |
}).text(this.config.x.label); | |
} | |
function addTooltip() { | |
var context = this; | |
this.svg.select('title.ct-tooltip').remove(); | |
this.tooltip = this.svg.append('title').classed('ct-tooltip', true); | |
this.svg.on('mousemove', function () { | |
context.tooltip.text('' + context.config.x_displayFormat(context.x.invert(d3$1.mouse(this)[0]))); | |
}); | |
} | |
function tickClick() { | |
var _this = this; | |
this.svg.selectAll('.y.axis .tick').each(function (d) { | |
if (/^-g\d+-/.test(d)) d3$1.select(this).remove(); | |
}).on('click', function (d) { | |
_this.selected_id = d; | |
drawIDtimeline.call(_this); | |
enableDisableControls.call(_this); | |
updateIDfilter.call(_this); | |
}).append('title').text(function (d) { | |
return 'View a profile of ' + _this.config.id_unit + ' ' + d + '.'; | |
}); | |
} | |
function horizontally() { | |
var _this = this; | |
this.groupings.sort(function (a, b) { | |
return a.key < b.key ? -1 : 1; | |
}).forEach(function (d, i) { | |
if (d.IDs.length) { | |
var nIDs = d.IDs.length, | |
firstID = d.IDs[nIDs - 1], | |
y1 = _this.y(firstID), | |
y2 = _this.y(d.IDs[0]), | |
g = _this.svg.append('g').classed('ct-grouping ct-horizontal', true).attr('id', d.key.replace(/ /g, '-')), | |
annotation = g.append('text').classed('ct-annotation', true).attr({ | |
x: 0, | |
y: y1, | |
dy: _this.y.rangeBand() * 1.25 | |
}).text(_this.config.y.groupingLabel + ': ' + d.key), | |
textArea = annotation.node().getBBox(), | |
background = g.insert('rect', ':first-child').attr({ | |
x: textArea.x, | |
y: textArea.y, | |
width: textArea.width, | |
height: textArea.height, | |
fill: 'white' | |
}), | |
rule = g.append('line').classed('ct-boundary ct-horizontal', true).attr({ | |
x1: 0, | |
y1: y1 + _this.y.rangeBand() / 4, | |
x2: _this.plot_width, | |
y2: y1 + _this.y.rangeBand() / 4 | |
}); | |
} | |
}); | |
} | |
function vertically() { | |
var _this = this; | |
this.groupings.forEach(function (d) { | |
if (d.IDs.length) { | |
var nIDs = d.IDs.length, | |
firstID = d.IDs[nIDs - 1], | |
y1 = _this.y(firstID), | |
y2 = _this.y(d.IDs[0]), | |
g = _this.svg.append('g').classed('ct-grouping ct-vertical', true).attr('id', d.key.replace(/ /g, '-')), | |
topBoundary = g.append('line').classed('ct-boundary ct-horizontal', true).attr({ | |
x1: _this.plot_width, | |
x2: _this.plot_width + _this.margin.right / 8, | |
y1: y1 + 3 * _this.y.rangeBand() / 4, | |
y2: y1 + 3 * _this.y.rangeBand() / 4 | |
}), | |
span = g.append('line').classed('ct-boundary ct-vertical', true).attr({ | |
x1: _this.plot_width + _this.margin.right / 8, | |
x2: _this.plot_width + _this.margin.right / 8, | |
y1: y1 + 3 * _this.y.rangeBand() / 4, | |
y2: y2 + _this.y.rangeBand() | |
}), | |
bottomBoundary = g.append('line').classed('ct-boundary ct-horizontal', true).attr({ | |
x1: _this.plot_width, | |
x2: _this.plot_width + _this.margin.right / 8, | |
y1: y2 + _this.y.rangeBand(), | |
y2: y2 + _this.y.rangeBand() | |
}), | |
annotation = g.append('text').classed('ct-annotation', true).attr({ | |
x: _this.plot_width, | |
dx: 4 * _this.margin.right / 8, | |
y: y1, | |
dy: _this.y.rangeBand() | |
}).text(_this.config.groupings.filter(function (grouping) { | |
return grouping.value_col === _this.config.y.grouping; | |
})[0].label + ': ' + d.key); | |
} | |
}); | |
} | |
function annotateGrouping() { | |
//Clear grouping elements. | |
this.svg.selectAll('.ct-grouping').remove(); | |
if (this.config.y.grouping) { | |
if (this.config.grouping_direction === 'horizontal') horizontally.call(this);else if (this.config.grouping_direction === 'vertical') vertically.call(this); | |
} | |
} | |
function addStriping() { | |
var context = this; | |
this.svg.selectAll('.ct-stripe').remove(); | |
var yAxisGridLines = this.svg.selectAll('.y.axis .tick').each(function (d, i) { | |
//Offset tick label. | |
d3$1.select(this).select('text').attr('dx', 4).attr('dy', context.y.rangeBand() / 4); | |
//Insert a rectangle with which to visually group each ID's events. | |
d3$1.select(this).insert('rect', ':first-child').classed('ct-stripe', true).attr({ | |
id: d, | |
x: -context.margin.left + 1, | |
y: -context.config.marks[0].attributes['stroke-width'], | |
width: context.plot_width + context.margin.left, | |
height: context.y.rangeBand() + context.config.marks[0].attributes['stroke-width'] | |
}); | |
}); | |
} | |
function offsetCircles(mark, markData) { | |
var _this = this; | |
var context = this; | |
this.svg.selectAll('g.point').attr('transform', null); | |
if (this.raw_data.length && this.raw_data[0].hasOwnProperty(this.config.offset_col)) { | |
this.svg.selectAll('g.point').each(function (d) { | |
d3$1.select(this).attr('transform', 'translate(0,' + d.offset * context.config.mark_thickness * 2 + ')'); | |
}); | |
} else { | |
//Nest data by timepoint and filter on any nested object with more than one datum. | |
var overlapping = d3$1.nest().key(function (d) { | |
return d.total + '|' + d.values.raw[0][_this.config.id_col]; | |
}).rollup(function (d) { | |
return { | |
n: d.length, | |
keys: d.map(function (di) { | |
return di.key; | |
}) | |
}; | |
}).entries(markData).filter(function (d) { | |
return d.values.n > 1; | |
}); | |
//For each timepoint with more than one event... | |
overlapping.forEach(function (d) { | |
var x = d.key.split('|')[0]; // timepoint | |
var y = d.key.split('|')[1]; // ID | |
//For each overlapping point... | |
d.values.keys.forEach(function (di, i) { | |
//Capture point via its class name and offset vertically. | |
var className = di + ' point'; | |
var g = d3$1.select(_this.clinicalTimelines.document.getElementsByClassName(className)[0]); | |
var point = g.select('circle'); | |
g.attr('transform', 'translate(0,' + i * _this.config.mark_thickness * 2 + ')'); | |
}); | |
}); | |
} | |
} | |
function offsetLines(mark, markData) { | |
var _this = this; | |
var context = this; | |
this.svg.selectAll('g.line').attr('transform', null); | |
if (this.config.offset_col && this.raw_data.length && this.raw_data[0].hasOwnProperty(this.config.offset_col)) { | |
this.svg.selectAll('g.line').each(function (d) { | |
d3$1.select(this).attr('transform', 'translate(0,' + d.offset * context.config.mark_thickness * 2 + ')'); | |
}); | |
} else { | |
//Nest data by time interval and filter on any nested object with more than one datum. | |
var IDdata = d3$1.nest().key(function (d) { | |
return d.values[0].values.raw[0][_this.config.id_col]; | |
}).key(function (d) { | |
return d.key; | |
}).rollup(function (d) { | |
//Expose start and end point of line. | |
return _this.config.time_scale === 'Date' ? { | |
x1: new Date(d[0].values[0].key), | |
x2: new Date(d[0].values[1].key) | |
} : { | |
x1: +d[0].values[0].key, | |
x2: +d[0].values[1].key | |
}; | |
}).entries(markData.filter(function (d) { | |
return d.values.length > 1; | |
})); | |
//For each ID... | |
IDdata.forEach(function (IDdatum) { | |
var lineData = IDdatum.values; | |
//Attach line x-coordinates to line object. | |
lineData.forEach(function (lineDatum) { | |
lineDatum.x1 = lineDatum.values.x1; | |
lineDatum.x2 = lineDatum.values.x2; | |
delete lineDatum.values; | |
}); | |
//Capture all line x-coordinates in an array. | |
var lineCoordinates = lineData.map(function (di) { | |
return [di.x1, di.x2]; | |
}), | |
overlappingLines = lineData.filter(function (lineDatum) { | |
var overlap = lineCoordinates.filter(function (lineCoordinate) { | |
return lineCoordinate[0] <= lineDatum.x1 && lineCoordinate[1] >= lineDatum.x1 || lineDatum.x1 <= lineCoordinate[0] && lineDatum.x2 >= lineCoordinate[0] || lineCoordinate[0] <= lineDatum.x2 && lineCoordinate[1] >= lineDatum.x2 || lineDatum.x1 <= lineCoordinate[1] && lineDatum.x2 >= lineCoordinate[1]; | |
}); | |
return overlap.length > 1; | |
}).sort(function (a, b) { | |
var x1diff = a.x1 - b.x1, | |
x2diff = b.x2 - a.x2; | |
return x1diff !== 0 ? x1diff : x2diff !== 0 ? x2diff : a.key < b.key ? -1 : 1; | |
}); | |
if (overlappingLines.length) { | |
var currentlyOverlappingLines = []; | |
//For each overlapping line... | |
overlappingLines.forEach(function (currentLine, i) { | |
if (i === 0) { | |
currentLine.offset = 0; | |
currentlyOverlappingLines.push(currentLine); | |
} else { | |
currentlyOverlappingLines.forEach(function (d) { | |
var currLapsPrevX1 = currentLine.x1 <= d.x1 && currentLine.x2 >= d.x1, | |
currLapsPrevX2 = currentLine.x1 <= d.x2 && currentLine.x2 >= d.x2, | |
currLapsPrev = currentLine.x1 <= d.x1 && currentLine.x2 >= d.x2, | |
prevLapsCurrX1 = d.x1 <= currentLine.x1 && d.x2 >= currentLine.x1, | |
prevLapsCurrX2 = d.x1 <= currentLine.x2 && d.x2 >= currentLine.x2, | |
prevLapsCurr = d.x1 <= currentLine.x1 && d.x2 >= currentLine.x2; | |
d.overlapping = currLapsPrevX1 || currLapsPrevX2 || currLapsPrev || prevLapsCurrX1 || prevLapsCurrX2 || prevLapsCurr; | |
}); | |
var nOverlapping = currentlyOverlappingLines.filter(function (d) { | |
return d.overlapping; | |
}).length; | |
//if no lines are currently overlapping reset currently overlapping lines | |
if (nOverlapping === 0) { | |
currentLine.offset = 0; | |
currentlyOverlappingLines = [currentLine]; | |
} else if (nOverlapping === currentlyOverlappingLines.length) { | |
//else if all lines are currently overlapping increase offset and add current line to currently overlapping lines | |
currentLine.offset = d3$1.max(currentlyOverlappingLines, function (d) { | |
return d.offset; | |
}) + 1; | |
currentlyOverlappingLines.push(currentLine); | |
} else { | |
//otherwise replace non-overlapping line with the smallest offset with current line | |
currentlyOverlappingLines.forEach(function (d, i) { | |
d.index = i; | |
}); | |
var minOffset = d3$1.min(currentlyOverlappingLines.filter(function (d) { | |
return !d.overlapping; | |
}), function (d) { | |
return d.offset; | |
}), | |
minIndex = currentlyOverlappingLines.filter(function (d) { | |
return d.offset === minOffset; | |
})[0].index; | |
currentLine.offset = minOffset; | |
currentlyOverlappingLines.splice(minIndex, 1, currentLine); | |
} | |
} | |
//Offset lines vertically. | |
var className = currentLine.key + ' line'; | |
var g = d3$1.select(_this.clinicalTimelines.document.getElementsByClassName(className)[0]); | |
g.attr('transform', currentLine.offset > 0 ? 'translate(0,' + currentLine.offset * _this.config.mark_thickness * 2 + ')' : 'translate(0,0)'); | |
}); | |
} | |
}); | |
} | |
} | |
function offsetOverlappingMarks() { | |
var _this = this; | |
this.config.marks.forEach(function (mark, i) { | |
var markData = _this.marks[i].data; | |
//Identify marks which represent ongoing events. | |
if (_this.config.ongo_col && _this.raw_data.length && _this.raw_data[0].hasOwnProperty(_this.config.ongo_col)) markData.forEach(function (d) { | |
d.ongoing = mark.type === 'line' ? d.values[0].values.raw[0][_this.config.ongo_col] : d.values.raw[0][_this.config.ongo_col]; | |
}); | |
//Attach offset value to each mark datum. | |
if (_this.config.offset_col && _this.raw_data.length && _this.raw_data[0].hasOwnProperty(_this.config.offset_col)) markData.forEach(function (d) { | |
d.offset = mark.type === 'line' ? d.values[0].values.raw[0][_this.config.offset_col] : d.values.raw[0][_this.config.offset_col]; | |
}); | |
if (mark.type === 'line') offsetLines.call(_this, mark, markData);else if (mark.type === 'circle') offsetCircles.call(_this, mark, markData); | |
}); | |
} | |
function highlightMarks() { | |
var _this = this; | |
var context = this; | |
//Clear line overlays. | |
this.svg.selectAll('.ct-highlight-overlay').remove(); | |
//Highlight legend. | |
this.wrap.selectAll('.legend-item').classed('ct-highlighted', function (d) { | |
return d.label === _this.config.event_highlighted; | |
}); | |
//Select marks. | |
var highlightedMarks = this.svg.selectAll('.wc-data-mark, .ct-ongoing-event, .ct-custom-mark').classed('ct-highlighted', function (d) { | |
return d.key.indexOf(_this.config.event_highlighted) > -1; | |
}).filter(function (d) { | |
return d.key.indexOf(_this.config.event_highlighted) > -1; | |
}); | |
//Highlight time intervals. | |
var timeIntervals = highlightedMarks.filter(function () { | |
return this.tagName === 'path' && this.getAttribute('class').indexOf('highlighted') > -1; | |
}); | |
timeIntervals.each(function (d, i) { | |
var g = d3$1.select(this.parentNode); | |
var x1 = context.x(context.config.time_function(d.values[0].key)); | |
var x2 = context.x(context.config.time_function(d.values[1].key)) + (d.ongoing === 'Y' ? context.config.marks.find(function (mark) { | |
return mark.type === 'line'; | |
}).attributes['stroke-width'] / 2 : 0); | |
var y = context.y(d.values[0].values.raw[0][context.config.y.column === context.config.id_col ? context.config.id_col : context.config.seq_col]) + context.y.rangeBand() / 2; | |
var color = context.config.event_highlight_color; | |
var line = g.append('line').classed('ct-highlight-overlay', true).attr({ | |
x1: x1, | |
x2: x2, | |
y1: y, | |
y2: y, | |
stroke: color | |
}); | |
}); | |
//Highlight timepoints. | |
var timepoints = highlightedMarks.filter(function () { | |
return ['circle', 'polygon'].indexOf(this.tagName) > -1 && this.getAttribute('class').indexOf('ct-highlighted') > -1 && this.getAttribute('class').indexOf('ct-hidden') < 0 && this.getAttribute('class').indexOf('ct-ongoing-event') < 0; | |
}); | |
timepoints.attr({ | |
stroke: function stroke(d) { | |
return _this.colorScale(d.values.raw[0][_this.config.event_col]); | |
}, | |
fill: function fill(d) { | |
return _this.config.event_highlight_color; | |
} | |
}); | |
} | |
function drawOngoingMarks() { | |
var _this = this; | |
this.svg.selectAll('.ct-ongoing-event').remove(); | |
if (this.raw_data.length && this.raw_data[0].hasOwnProperty(this.config.ongo_col)) { | |
var context = this; | |
var lineSettings = this.config.marks.find(function (mark) { | |
return mark.type === 'line'; | |
}); | |
this.svg.selectAll('.line-supergroup .line').filter(function (d) { | |
return d.ongoing === _this.config.ongo_val; | |
}).each(function (d) { | |
var g = d3$1.select(this); | |
var endpoint = d.values[1]; | |
var x = context.x(context.config.time_function(endpoint.key)); | |
var y = context.y(endpoint.values.y) + context.y.rangeBand() / 2; | |
var highlight = d.key.indexOf(context.config.event_highlighted) > -1; | |
var length = x + (highlight ? lineSettings.attributes['stroke-width'] * 1.5 : lineSettings.attributes['stroke-width'] * 1.5); | |
var heightOffset = highlight ? lineSettings.attributes['stroke-width'] * 2 / 3 : lineSettings.attributes['stroke-width'] * 2 / 3; | |
var arrow = [[length, y], [x, y - heightOffset], [x, y + heightOffset]]; | |
g.insert('polygon', 'line').datum(d).classed('ct-ongoing-event', true).classed('ct-highlighted', highlight).attr({ | |
points: arrow.map(function (coordinate) { | |
return coordinate.join(','); | |
}).join(' '), | |
fill: highlight ? context.config.event_highlight_color : context.colorScale(endpoint.values.raw[0][context.config.event_col]), | |
stroke: context.colorScale(endpoint.values.raw[0][context.config.event_col]) | |
}); | |
}); | |
} | |
} | |
function addStartStopCircles() { | |
var context = this; | |
this.svg.selectAll('.ct-start-stop-circle').remove(); | |
this.svg.selectAll('g.line').each(function (d) { | |
var g = d3$1.select(this); | |
d.values.filter(function (di, i) { | |
return !(i === 1 && di.values.raw[0][context.config.ongo_col] === context.config.ongo_val); | |
}).forEach(function (di) { | |
g.append('circle').classed('ct-start-stop-circle', true).attr({ | |
cx: context.x(di.values.x), | |
cy: context.y(di.values.y) + context.y.rangeBand() / 2, | |
r: context.config.mark_thickness * 2 / 5, | |
fill: 'white', | |
stroke: 'lightgray' | |
}); | |
}); | |
}); | |
} | |
function drawPolygon(marks, event_symbol) { | |
marks.each(function (d) { | |
var g = d3.select(this); | |
//clear out g | |
g.select('circle').classed('ct-hidden', true); | |
g.select('polygon.ct-custom-mark').remove(); | |
//define vertices | |
var vertices = void 0; | |
if (event_symbol.symbol === 'square') vertices = [[d.symbolCoordinates.x1, d.symbolCoordinates.y1], [d.symbolCoordinates.x1, d.symbolCoordinates.y3], [d.symbolCoordinates.x3, d.symbolCoordinates.y3], [d.symbolCoordinates.x3, d.symbolCoordinates.y1]];else if (event_symbol.symbol === 'diamond') vertices = [[d.symbolCoordinates.x1, d.symbolCoordinates.y2], [d.symbolCoordinates.x2, d.symbolCoordinates.y3], [d.symbolCoordinates.x3, d.symbolCoordinates.y2], [d.symbolCoordinates.x2, d.symbolCoordinates.y1]];else if (event_symbol.symbol === 'triangle') { | |
if (event_symbol.direction === 'right') vertices = [[d.symbolCoordinates.x1, d.symbolCoordinates.y1], [d.symbolCoordinates.x3, d.symbolCoordinates.y2], [d.symbolCoordinates.x1, d.symbolCoordinates.y3]];else if (event_symbol.direction === 'down') vertices = [[d.symbolCoordinates.x1, d.symbolCoordinates.y1], [d.symbolCoordinates.x3, d.symbolCoordinates.y1], [d.symbolCoordinates.x2, d.symbolCoordinates.y3]];else if (event_symbol.direction === 'left') vertices = [[d.symbolCoordinates.x3, d.symbolCoordinates.y1], [d.symbolCoordinates.x1, d.symbolCoordinates.y2], [d.symbolCoordinates.x3, d.symbolCoordinates.y3]];else vertices = [[d.symbolCoordinates.x2, d.symbolCoordinates.y1], [d.symbolCoordinates.x3, d.symbolCoordinates.y3], [d.symbolCoordinates.x1, d.symbolCoordinates.y3]]; | |
} | |
//draw polygon | |
var polygon = g.append('polygon').datum(d).classed('ct-custom-mark', true).attr({ | |
points: vertices.map(function (vertex) { | |
return vertex.join(','); | |
}).join(' '), | |
fill: d.color | |
}); | |
}); | |
} | |
function addSymbols() { | |
var _this = this; | |
this.svg.selectAll('.ct-custom-mark').remove(); | |
if (this.config.event_symbols && this.config.event_symbols.length) { | |
this.config.event_symbols.forEach(function (event_symbol) { | |
var marks = _this.svg.selectAll('g.point').filter(function (d) { | |
var event$$1 = d.values.raw[0][_this.config.event_col]; | |
return (event_symbol.event === event$$1 || event_symbol.events.indexOf(event$$1) > -1) && _this.x_dom[0] <= d.total && d.total <= _this.x_dom[1]; | |
}).each(function (d) { | |
var x = _this.x(d.values.x); | |
var y = _this.y(d.values.y) + _this.y.rangeBand() / 2; | |
var sizeFactor = 1; | |
d.symbolCoordinates = { | |
x1: x - _this.config.mark_thickness * sizeFactor, | |
x2: x, | |
x3: x + _this.config.mark_thickness * sizeFactor, | |
y1: y - _this.config.mark_thickness * sizeFactor, | |
y2: y, | |
y3: y + _this.config.mark_thickness * sizeFactor | |
}; | |
d.color = _this.colorScale(d.values.raw[0][_this.config.event_col]); | |
}); | |
drawPolygon.call(_this, marks, event_symbol); | |
}); | |
} | |
} | |
function addSymbolsToLegend() { | |
var _this = this; | |
var context = this; | |
if (this.config.event_symbols && this.config.event_symbols.length) { | |
this.config.event_symbols.forEach(function (event_symbol) { | |
var marks = _this.wrap.selectAll('.legend .legend-color-block').filter(function (d) { | |
var event$$1 = d.label; | |
return event_symbol.event === event$$1 || event_symbol.events.indexOf(event$$1) > -1; | |
}).each(function (d) { | |
var dimensions = this.getBBox(); | |
var x = dimensions.x + dimensions.width / 2; | |
var y = dimensions.y + dimensions.height / 2; | |
d.symbolCoordinates = { | |
x1: x - dimensions.width / 2, | |
x2: x, | |
x3: x + dimensions.width / 2, | |
y1: y - dimensions.height / 2, | |
y2: y, | |
y3: y + dimensions.height / 2 | |
}; | |
d.color = context.colorScale(d.label); | |
}); | |
drawPolygon.call(_this, marks, event_symbol); | |
}); | |
} | |
} | |
function offsetBottomXaxis() { | |
if (!this.clinicalTimelines.test) { | |
var //capture x-axis and its translation coordinates | |
bottomXaxis = this.svg.select('.x.axis'), | |
bottomXaxisTransform = bottomXaxis.attr('transform').replace(/^translate\((.*)\)$/, '$1'), | |
bottomXaxisTransformCoordinates = bottomXaxisTransform.indexOf(',') > -1 ? bottomXaxisTransform.split(',') : bottomXaxisTransform.split(' '), | |
//capture x-axis title and its translation coordinates | |
bottomXaxisTitle = bottomXaxis.select('.axis-title'), | |
bottomXaxisTitleTransform = bottomXaxisTitle.attr('transform').replace(/^translate\((.*)\)$/, '$1'), | |
bottomXaxisTitleTransformCoordinates = bottomXaxisTitleTransform.indexOf(',') > -1 ? bottomXaxisTitleTransform.split(',') : bottomXaxisTitleTransform.split(' '); | |
//offset x-axis | |
bottomXaxis.attr('transform', 'translate(' + +bottomXaxisTransformCoordinates[0] + ',' + (+bottomXaxisTransformCoordinates[1] + this.y.rangeBand()) + ')'); | |
//offset x-axis title | |
bottomXaxisTitle.attr('transform', 'translate(' + +bottomXaxisTitleTransformCoordinates[0] + ',' + (+bottomXaxisTitleTransformCoordinates[1] - 7 * this.margin.bottom / 16) + ')'); | |
} | |
} | |
function addVisibleLine(reference_line) { | |
reference_line.visibleLine = reference_line.g.append('line').datum(reference_line.lineDatum).classed('ct-visible-reference-line', true).attr({ | |
x1: function x1(d) { | |
return d.x1; | |
}, | |
x2: function x2(d) { | |
return d.x2; | |
}, | |
y1: function y1(d) { | |
return d.y1; | |
}, | |
y2: function y2(d) { | |
return d.y2; | |
} | |
}); | |
} | |
function addHoverLine(reference_line) { | |
reference_line.hoverLine = reference_line.g.append('line').datum(reference_line.lineDatum).classed('ct-hover-line', true).attr({ | |
x1: function x1(d) { | |
return d.x1; | |
}, | |
x2: function x2(d) { | |
return d.x2; | |
}, | |
y1: function y1(d) { | |
return d.y1; | |
}, | |
y2: function y2(d) { | |
return d.y2; | |
} | |
}); | |
} | |
function updateText(reference_line) { | |
reference_line.textDirection = reference_line.lineDatum.x1 <= this.plot_width / 2 ? 'right' : 'left'; | |
reference_line.text.attr({ | |
x: reference_line.lineDatum.x1, | |
dx: reference_line.textDirection === 'right' ? 20 : -25, | |
'text-anchor': reference_line.textDirection === 'right' ? 'beginning' : 'end' | |
}).text(reference_line.label); | |
} | |
function addText(reference_line) { | |
reference_line.text = reference_line.g.append('text').classed('ct-reference-line-text', true); | |
updateText.call(this, reference_line); | |
} | |
function addHover(reference_line) { | |
var context = this; | |
//Hide reference labels initially. | |
reference_line.text.classed('ct-hidden', true); | |
//Add event listeners to hover reference line. | |
reference_line.hoverLine.on('mouseover', function () { | |
reference_line.visibleLine.classed('ct-hover', true); | |
reference_line.text.classed('ct-hidden', false).attr('y', d3$1.mouse(this)[1]); | |
context.svg.node().appendChild(reference_line.text.node()); | |
}).on('mouseout', function () { | |
reference_line.visibleLine.classed('ct-hover', false); | |
reference_line.text.classed('ct-hidden', true); | |
}); | |
} | |
function updateTable(reference_line) { | |
var _this = this; | |
//Update reference table header. | |
reference_line.tableHeader.text(reference_line.label); | |
//Filter data on events that overlap reference line. | |
reference_line.wide_data = this.filtered_wide_data.filter(function (d) { | |
return _this.config.time_function(d[_this.config.st_col]) <= _this.config.time_function(reference_line.timepoint) && _this.config.time_function(d[_this.config.en_col]) >= _this.config.time_function(reference_line.timepoint); | |
}); | |
//Nest data by grouping and event type. | |
reference_line.nested_data = d3$1.nest().key(function (d) { | |
return d[_this.config.y.grouping] || 'All ' + _this.config.id_unitPlural; | |
}).key(function (d) { | |
return d[_this.config.event_col]; | |
}).rollup(function (d) { | |
return d.length; | |
}).entries(reference_line.wide_data); | |
reference_line.flattened_data = []; | |
reference_line.nested_data.forEach(function (d) { | |
reference_line.flattened_data.push({ | |
class: 'ct-higher-level', | |
key: d.key, | |
n: d3$1.sum(d.values, function (di) { | |
return di.values; | |
}) | |
}); | |
d.values.forEach(function (di) { | |
reference_line.flattened_data.push({ | |
class: 'ct-lower-level', | |
key: di.key, | |
n: di.values | |
}); | |
}); | |
}); | |
//Update table. | |
reference_line.table.selectAll('tr').remove(); | |
reference_line.table.selectAll('tr').data(reference_line.flattened_data).enter().append('tr').each(function (d) { | |
var row = d3$1.select(this); | |
row.append('td').text(d.key).attr('class', function (d) { | |
return d.class + (d.class === 'ct-lower-level' ? ' ct-indent' : ''); | |
}); | |
row.append('td').text(d.n).attr('class', function (d) { | |
return d.class; | |
}); | |
}); | |
} | |
function addDrag(reference_line) { | |
var context = this, | |
drag = d3$1.behavior.drag().origin(function (d) { | |
return d; | |
}).on('dragstart', function () { | |
d3$1.select(this).classed('ct-active', true); | |
}).on('drag', function () { | |
var dx = d3$1.event.dx; | |
//Calculate x-coordinate of drag line. | |
var x = parseInt(reference_line.hoverLine.attr('x1')) + dx; | |
if (x < 0) x = 0; | |
if (x > context.plot_width) x = context.plot_width; | |
//Invert x-coordinate with x-scale. | |
var xInverted = context.x.invert(x); | |
//Update reference line datum. | |
reference_line.timepoint = context.config.x_parseFormat(xInverted); | |
reference_line.label = context.config.x_displayFormat(xInverted); | |
reference_line.lineDatum.x1 = x; | |
reference_line.lineDatum.x2 = x; | |
reference_line.visibleLine.attr({ x1: x, x2: x }); | |
reference_line.hoverLine.attr({ x1: x, x2: x }); | |
//Update reference line text label and table. | |
updateText.call(context, reference_line); | |
updateTable.call(context, reference_line); | |
}).on('dragend', function () { | |
d3$1.select(this).classed('ct-active', false); | |
}); | |
reference_line.hoverLine.call(drag); | |
} | |
function drawReferenceLine(reference_line, i) { | |
reference_line.g = this.referenceLinesGroup.append('g').classed('ct-reference-line', true).attr('id', 'ct-reference-line-' + i); | |
reference_line.timepointN = this.config.time_function(reference_line.timepoint); | |
reference_line.lineDatum = { | |
x1: this.x(reference_line.timepointN), | |
x2: this.x(reference_line.timepointN), | |
y1: 0, | |
y2: this.plot_height + (this.config.y.column === this.config.id_col ? this.y.rangeBand() : 0) | |
}; | |
//Visible reference line, drawn between the overlay and the marks | |
addVisibleLine.call(this, reference_line); | |
//Invisible reference line, without a dasharray and much thicker to make hovering easier | |
addHoverLine.call(this, reference_line); | |
//Reference line text label | |
addText.call(this, reference_line); | |
//Display reference line label on hover. | |
addHover.call(this, reference_line); | |
//Make line draggable. | |
if (!this.parent) addDrag.call(this, reference_line); | |
} | |
function drawReferenceTable(reference_line, i) { | |
//Add reference line table container. | |
if (reference_line.tableContainer) reference_line.tableContainer.remove(); | |
reference_line.tableContainer = this.clinicalTimelines.containers.leftColumn.append('div').classed('ct-reference-line-table-container', true).attr('id', 'ct-reference-line-table-container-' + i); | |
//Add reference line table header. | |
reference_line.tableHeader = reference_line.tableContainer.append('h3').classed('ct-reference-line-header', true); | |
//Add reference line table. | |
reference_line.table = reference_line.tableContainer.append('div').classed('ct-reference-line-table-body', true).append('table').append('tbody'); | |
//Add table data. | |
updateTable.call(this, reference_line); | |
} | |
function drawReferenceLines() { | |
var _this = this; | |
if (this.config.reference_lines) { | |
//Remove previously reference lines and tables. | |
this.svg.select('.ct-reference-lines').remove(); | |
this.clinicalTimelines.containers.leftColumn.selectAll('.ct-reference-line-label-container').remove(); | |
//Add group for reference lines. | |
this.svg.select('.ct-reference-lines').remove(); | |
if (!this.parent) this.clinicalTimelines.containers.leftColumn.selectAll('.ct-reference-line-table-container').remove(); | |
this.referenceLinesGroup = this.svg.insert('g', '#clinical-timelines .wc-chart .wc-svg .line-supergroup').classed('ct-reference-lines', true); | |
//Append reference line for each item in config.reference_lines. | |
this.config.reference_lines.filter(function (reference_line) { | |
return reference_line.time_scale === _this.config.time_scale; | |
}).filter(function (reference_line) { | |
return _this.x_dom[0] <= _this.config.time_function(reference_line.timepoint) && _this.x_dom[1] >= _this.config.time_function(reference_line.timepoint); | |
}).forEach(function (reference_line, i) { | |
//Draw reference line. | |
drawReferenceLine.call(_this, reference_line, i); | |
//Draw reference line frequency table. | |
if (!_this.parent) drawReferenceTable.call(_this, reference_line, i); | |
}); | |
} | |
} | |
function IEsucks() { | |
var inIE = !!this.clinicalTimelines.document.documentMode; | |
if (inIE) this.svg.selectAll('.line,.point').each(function (d) { | |
var mark = d3$1.select(this); | |
var tooltip = mark.select('title'); | |
var text = tooltip.text().split('\n'); | |
tooltip.text(text.join('--|--')); | |
}); | |
} | |
function setClipPath() { | |
var _this = this; | |
this.marks.forEach(function (mark) { | |
mark.groups.selectAll('circle,line,path,polygon,rect,text').attr('clip-path', 'url(#' + _this.id + ')'); | |
}); | |
} | |
function onResize() { | |
//Add filter functionality to legend. | |
legendFilter.call(this); | |
//Add second legend to differentiate timepoints, time intervals, and ongoing events. | |
addSecondLegend.call(this); | |
//Draw second x-axis at top of chart. | |
drawTopXaxis.call(this); | |
//Add tick lines that display the tick label on hover. | |
addTooltip.call(this); | |
//Draw second chart when y-axis tick label is clicked. | |
tickClick.call(this); | |
//Annotate grouping. | |
annotateGrouping.call(this); | |
//Distinguish each timeline with striping. | |
addStriping.call(this); | |
//Offset overlapping marks. | |
offsetOverlappingMarks.call(this); | |
//Draw ongoing marks. | |
drawOngoingMarks.call(this); | |
//Add symbols. | |
addSymbols.call(this); | |
//Highlight marks. | |
highlightMarks.call(this); | |
//Draw circles at beginning and end of each line. | |
addStartStopCircles.call(this); | |
//Add symbols to legend. | |
addSymbolsToLegend.call(this); | |
//Offset bottom x-axis to prevent overlap with final ID. | |
offsetBottomXaxis.call(this); | |
//Draw reference lines. | |
drawReferenceLines.call(this); | |
//Replace newline characters with html line break entities to cater to Internet Explorer. | |
IEsucks.call(this); | |
//Set clip-path of all svg elements to the ID of the current chart. | |
setClipPath.call(this); | |
} | |
function onDestroy() {} | |
var callbacks = { | |
onInit: onInit, | |
onLayout: onLayout, | |
onPreprocess: onPreprocess, | |
onDatatransform: onDatatransform, | |
onDraw: onDraw, | |
onResize: onResize, | |
onDestroy: onDestroy | |
}; | |
function timelines() { | |
//Create timelines. | |
this.timelines = webcharts.createChart(this.containers.timelines.node(), this.settings.synced, this.controls); | |
for (var callback in callbacks) { | |
this.timelines.on(callback.substring(2).toLowerCase(), callbacks[callback]); | |
}this.timelines.clinicalTimelines = this; | |
} | |
function onInit$1() { | |
this.clinicalTimelines = this.parent.clinicalTimelines; | |
this.config.color_dom = this.parent.timelines.config.color_dom; | |
this.config.legend.order = this.parent.timelines.config.legend.order; | |
this.config.x.domain = null; | |
this.config.y.sort = 'alphabetical-ascending'; | |
} | |
function onLayout$1() {} | |
function onPreprocess$1() {} | |
function onDatatransform$1() {} | |
function onDraw$1() { | |
//Re-scale x-axis by misleading webcharts as to what the actual container width is. | |
var wrapWidth = +this.wrap.style('width').replace(/[^\d.]/g, ''), | |
newWidth = wrapWidth * 0.75; | |
this.raw_width = newWidth; | |
} | |
function drawTimeRange() { | |
var _this = this; | |
this.svg.select('.time-range').remove(); | |
var x_dom = this.x_dom.map(function (x) { | |
return x instanceof Date ? x.getTime() : x; | |
}); | |
var timeRange = this.parent.timelines.config.time_scale === 'Date' ? this.parent.timelines.date_range.map(function (dt) { | |
return dt.getTime(); | |
}) : this.parent.timelines.day_range; | |
var timeRangeText = this.config.time_scale === 'Date' ? this.parent.timelines.date_range.map(function (dt) { | |
return d3$1.time.format(_this.parent.timelines.config.date_display_format)(dt); | |
}) : this.parent.timelines.day_range.map(function (dy) { | |
return dy.toString(); | |
}); | |
if ((x_dom[0] !== timeRange[0] || x_dom[1] !== timeRange[1]) && (timeRange[0] >= x_dom[0] && timeRange[0] <= x_dom[1] || // left side of time range overlaps x-domain | |
timeRange[1] >= x_dom[0] && timeRange[1] <= x_dom[1] || // right side of time range overlaps x-domain | |
timeRange[0] <= x_dom[0] && timeRange[1] >= x_dom[1]) // time range fully encompassed x-domain | |
) { | |
var timeRangeGroup = this.svg.insert('g', '#clinical-timelines .wc-chart .wc-svg .line-supergroup').classed('ct-time-range', true), | |
x = this.x(Math.max(timeRange[0], x_dom[0])), | |
width = Math.min(this.x(timeRange[1]) - x, this.plot_width - x), | |
timeRangeRect = timeRangeGroup.append('rect').classed('ct-time-range-rect', true).attr({ | |
x: x, | |
y: 0, | |
width: width, | |
height: this.plot_height | |
}), | |
timeRangeTooltip = timeRangeGroup.append('title').text(this.config.time_scale + ' range: ' + timeRangeText.join(' - ')); | |
} | |
} | |
function onResize$1() { | |
var _this = this; | |
//Hide legend. | |
this.parent.wrap.select('.legend').classed('ct-hidden', true); | |
//Draw ongoing marks. | |
this.config.marks.forEach(function (mark, i) { | |
var markData = _this.marks[i].data; | |
//Identify marks which represent ongoing events. | |
if (mark.type === 'line') { | |
markData.forEach(function (d) { | |
d.ongoing = d.values[0].values.raw[0][_this.config.ongo_col]; | |
}); | |
} | |
}); | |
drawOngoingMarks.call(this); | |
//Annotate time range. | |
drawTimeRange.call(this); | |
//Draw reference lines. | |
drawReferenceLines.call(this); | |
//Add circles to beginning and end of lines. | |
addStartStopCircles.call(this); | |
//Add symbols. | |
addSymbols.call(this); | |
//Highlight events. | |
highlightMarks.call(this); | |
//Replace newline characters with html line break entities to cater to Internet Explorer. | |
IEsucks.call(this); | |
} | |
function onDestroy$1() {} | |
var callbacks$1 = { | |
onInit: onInit$1, | |
onLayout: onLayout$1, | |
onPreprocess: onPreprocess$1, | |
onDatatransform: onDatatransform$1, | |
onDraw: onDraw$1, | |
onResize: onResize$1, | |
onDestroy: onDestroy$1 | |
}; | |
function IDtimeline() { | |
this.IDtimeline = webcharts.createChart(this.containers.IDtimeline.node(), this.settings.IDtimeline); | |
for (var callback in callbacks$1) { | |
this.IDtimeline.on(callback.substring(2).toLowerCase(), callbacks$1[callback]); | |
}this.IDtimeline.clinicalTimelines = this; | |
} | |
function onInit$2() {} | |
function onLayout$2() {} | |
function onDraw$2() {} | |
function onDestroy$2() {} | |
var callbacks$2 = { | |
onInit: onInit$2, | |
onLayout: onLayout$2, | |
onDraw: onDraw$2, | |
onDestroy: onDestroy$2 | |
}; | |
function listing() { | |
this.listing = webcharts.createTable(this.containers.listing.node(), this.settings.listing); | |
for (var callback in callbacks$2) { | |
this.listing.on(callback.substring(2).toLowerCase(), callbacks$2[callback]); | |
}this.listing.clinicalTimelines = this; | |
} | |
function init(data) { | |
this.data = { | |
raw: data, | |
variables: Object.keys(data[0]) | |
}; | |
this.timelines.init(data, this.test); | |
} | |
//polyfills and utility functions | |
function clinicalTimelines() { | |
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'body'; | |
var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
var dom = arguments[2]; | |
var clinicalTimelines = { | |
element: element, | |
settings: { | |
user: settings | |
}, | |
containers: {}, | |
init: init, | |
test: !!dom, | |
document: dom ? dom.window.document : document | |
}; | |
//Merge and sync settings. | |
defineSettings.call(clinicalTimelines); | |
//Define .css styles to avoid requiring a separate .css file. | |
defineStyles.call(clinicalTimelines); | |
//Define layout of HTML. | |
defineLayout.call(clinicalTimelines); | |
//Create controls. | |
controls$1.call(clinicalTimelines); | |
//Create timelines. | |
timelines.call(clinicalTimelines); | |
//Create ID timeline. | |
IDtimeline.call(clinicalTimelines); | |
//Create listing. | |
listing.call(clinicalTimelines); | |
//Recurse clinical timelines, ID timeline, and listing. | |
recurse.call(clinicalTimelines); | |
return clinicalTimelines; | |
} | |
return clinicalTimelines; | |
}))); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* { | |
padding: 0; | |
margin: 0; | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
} | |
#title { | |
width: 96%; | |
margin: 2%; | |
border-bottom: 1px solid lightgray; | |
font-weight: lighter; | |
font-size: 250%; | |
} | |
#subtitle { | |
width: 96%; | |
margin: 2%; | |
font-weight: lighter; | |
font-size: 200%; | |
} | |
#container { | |
width: 96%; | |
margin: 2%; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Clinical Timelines: Treatment of MS</title> | |
<div id = 'title'>Clinical Timelines</div> | |
<div id = 'subtitle'>Treatment of MS</div> | |
<meta http-equiv = 'Content-Type' content = 'text/html; charset = utf-8'> | |
<script type = 'text/javascript' src = 'https://d3js.org/d3.v3.min.js'></script> | |
<script type = 'text/javascript' src = './Webcharts/build/webcharts.js'></script> | |
<script type = 'text/javascript' src = './clinical-timelines/build/clinicalTimelines.js'></script> | |
<link type = 'text/css' rel = 'stylesheet' href = './Webcharts/css/webcharts.css'> | |
<link type = 'text/css' rel = 'stylesheet' href = './index.css'> | |
</head> | |
<body> | |
<div id = 'container'></div> | |
</body> | |
<script type = 'text/javascript' src = './index.js'></script> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let settings = { | |
time_scale: 'Day', | |
day_range: [-50, 750], | |
event_types: [ | |
'Screening', | |
'Clinical Assessments', | |
'Full Response', | |
'Partial Response', | |
'No Response', | |
], | |
event_symbols: [ | |
{events: ['Screening'], symbol: 'triangle', direction: 'right'}, | |
{events: ['Full Response'], symbol: 'triangle', direction: 'up'}, | |
{events: ['Partial Response'], symbol: 'diamond'}, | |
{events: ['No Response'], symbol: 'triangle', direction: 'down'}, | |
], | |
id_characteristics: [ | |
{value_col: 'TRT', label: 'Treatment Group'}, | |
{value_col: 'response', label: 'Response'}, | |
{value_col: 'PP', label: 'Per-protocol'}, | |
{value_col: 'SEX', label: 'Sex'}, | |
{value_col: 'AGE', label: 'Age'}, | |
], | |
groupings: [ | |
{value_col: 'TRT', label: 'Treatment Group'}, | |
{value_col: 'response', label: 'Response'}, | |
{value_col: 'ITT', label: 'Intent-to-treat'}, | |
{value_col: 'PP', label: 'Per-protocol'}, | |
{value_col: 'SEX', label: 'Sex'}, | |
], | |
grouping_initial: 'TRT', | |
//grouping_direction: 'vertical', | |
filters: [ | |
{value_col: 'TRT', label: 'Treatment Group'}, | |
{value_col: 'response', label: 'Response'}, | |
{value_col: 'PP', label: 'Per-protocol', start: 'Yes'}, | |
{value_col: 'SEX', label: 'Sex'}, | |
], | |
reference_lines: [ | |
{ | |
label: 'Baseline', | |
timepoint: 0, | |
} | |
], | |
mark_thickness: 8, | |
range_band: 40, | |
colors: [ | |
'#7570b3', | |
'#1f78b4', | |
'#35978f', | |
'#f6e8c3', | |
'#8c510a', | |
'#d95f02', | |
'#1b9e77', | |
], | |
}; | |
d3.csv( | |
'./ADTIMELINES.csv', | |
d => { | |
return d; | |
}, | |
data => { | |
clinicalTimelines('#container', settings).init(data); | |
} | |
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@import url(//fonts.googleapis.com/css?family=Open+Sans:400,300); | |
/*------------------------------------------------------------------------------------------------\ | |
Small Multiple Layout | |
\------------------------------------------------------------------------------------------------*/ | |
div.wc-layout.wc-small-multiples::after { | |
content: ""; | |
clear: both; | |
display: block; | |
} | |
.wc-layout.wc-small-multiples > .wc-chart { | |
float: left; | |
padding: 0 2em 2em 0; | |
} | |
.wc-layout.wc-small-multiples > .wc-chart > .wc-chart-title { | |
display: block; | |
font-weight: bold; | |
text-align: center; | |
} | |
.wc-small-multiples .wc-chart > .legend { | |
display: none; | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Charts | |
\------------------------------------------------------------------------------------------------*/ | |
.wc-chart { | |
position: relative; | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
} | |
.wc-chart rect, | |
.wc-chart line { | |
shape-rendering: crispEdges; | |
} | |
/*next few are rules for d3 brushing stuff*/ | |
.wc-chart.brushable .overlay { | |
cursor: crosshair; | |
} | |
.wc-chart rect.background { | |
display: none; | |
} | |
.wc-chart rect.extent { | |
fill: #ccc; | |
fill-opacity: 0.4; | |
shape-rendering: crispEdges; | |
} | |
.wc-chart .axis path.domain { | |
fill: none; | |
stroke: #ccc; | |
shape-rendering: crispEdges; | |
} | |
.wc-chart .axis .tick line { | |
stroke: #eee; | |
shape-rendering: crispEdges; | |
} | |
.wc-chart .axis .tick text { | |
font-size: .9em; | |
} | |
.wc-chart .axis .axis-title { | |
fill: #555; | |
} | |
*[class*="wc-"] .legend { | |
font-size: .9em; | |
padding: 0; | |
margin: 0; | |
} | |
*[class*="wc-"] .legend .legend-title { | |
font-weight: bold; | |
margin-right: 1em; | |
} | |
*[class*="wc-"] .legend .legend-item { | |
display: inline-block; | |
margin-right: 1em; | |
} | |
*[class*="wc-"] .legend .legend-item .legend-color-block { | |
position: relative; | |
top: .2em; | |
right: .25em; | |
display: inline-block; | |
} | |
*[class*="wc-"] .legend .legend-item .legend-mark-text { | |
font-weight: bold; | |
margin-right: .5em; | |
} | |
.wc-chart .ordinal.axis .tick line, | |
.wc-chart .ordinal.axis path { | |
display: none; | |
} | |
.wc-chart.gridlines .ordinal.axis .tick line { | |
display: block; | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Controls | |
\------------------------------------------------------------------------------------------------*/ | |
.wc-controls { | |
display: block; | |
font-family: 'Open Sans', Helvetica, Arial, sans-serif; | |
font-size: .9em; | |
margin-bottom: 10px; | |
} | |
.wc-controls:empty { | |
display: none; | |
} | |
.intro > .wc-controls { | |
display: block; | |
} | |
.wc-controls .control-group { | |
display: inline-table; | |
max-width: 100%; | |
margin: 0px 1em 1em 0; | |
} | |
.wc-controls.bottom .control-group { | |
display: inline-table; | |
} | |
.wc-controls .control-group .wc-control-label { | |
/*font-weight: bold;*/ | |
display: block; | |
} | |
.wc-controls .control-group.inline .wc-control-label { | |
display: inline; | |
margin-right: .5em; | |
} | |
.wc-controls .control-group.inline .changer { | |
display: inline; | |
margin-top: 0; | |
} | |
.wc-controls .control-group .wc-control-label + .changer { | |
margin-top: 2px; | |
} | |
.wc-controls .control-group .wc-control-label.inline { | |
display: inline; | |
margin-right: .5em; | |
} | |
.wc-controls .control-group .wc-control-label .label-required { | |
color: #de2d26; | |
padding: 0 .25em; | |
border: 1px solid; | |
margin-left: .5em; | |
} | |
.wc-controls .span-description { | |
display: block; | |
font-size: .75em; | |
color: #777; | |
margin-bottom: 3px; | |
} | |
.wc-controls .span-description:empty { | |
display: none; | |
} | |
.wc-controls .span-description.standout { | |
font-style: italic; | |
color: #d9534f; | |
} | |
.wc-controls .control-group label.radio, | |
.wc-controls .control-group label.filter-values { | |
display: inline-block; | |
cursor: pointer; | |
font-weight: normal; | |
font-size: .9em; | |
padding: 0; | |
margin: 5px 10px 0 0; | |
} | |
.wc-controls .inline { | |
display: inline; | |
} | |
.wc-controls .control-group input[type='text'], | |
.wc-controls select { | |
display: block; | |
width: auto; | |
max-width: 100%; | |
padding: 0 2px; | |
height: auto; | |
border-radius: 0; | |
} | |
.wc-controls .control-group input[type='number'] { | |
width: 70px; | |
text-align: right; | |
max-width: 100%; | |
} | |
.wc-controls .control-group input[type='checkbox'], | |
.wc-controls .control-group input[type='radio'] { | |
cursor: pointer; | |
position: relative; | |
top: .1em; | |
float: none; | |
margin: 0; | |
} | |
.wc-controls .control-group input[type='radio'] { | |
vertical-align: bottom; | |
margin-left: .25em; | |
} | |
.wc-controls .control-group input.inline { | |
margin: 0 2px 2px 0; | |
} | |
.wc-controls .control-group .changer + .changer { | |
margin-top: 2px; | |
} | |
.wc-controls .subsetter-ui { | |
position: relative; | |
display: inline-block; | |
max-width: 100%; | |
padding: 3px; | |
border: 1px dashed #888; | |
margin: 5px 5px 0 0; | |
} | |
.wc-controls .subsetter-ui .remove-btn { | |
cursor: pointer; | |
position: absolute; | |
top: 2px; | |
right: 2px; | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Tables | |
\------------------------------------------------------------------------------------------------*/ | |
.wc-table { | |
display: block; | |
} | |
.wc-table .hidden { | |
display: none !important; | |
} | |
.wc-table .invisible { | |
visibility: hidden !important; | |
} | |
.wc-table > * { | |
display: block; | |
} | |
.wc-table .table-top { | |
} | |
.wc-table .table-bottom { | |
} | |
.wc-table .interactivity { | |
display: inline-block; | |
vertical-align: middle; | |
margin: 10px 0; | |
padding: 0; | |
} | |
.wc-table .interactivity .wc-button { | |
display: inline-block; | |
border: 2px solid gray; | |
border-radius: 4px; | |
padding: 2px 8px; | |
margin: 0 2px; | |
cursor: pointer; | |
background: white; | |
color: black; | |
} | |
.wc-table .interactivity .wc-button:hover { | |
background: black; | |
color: white; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Searchable container | |
\-------------------------------------------------------------------------------------------**/ | |
.wc-table .searchable-container { | |
float: right; | |
overflow: hidden; | |
} | |
.wc-table .searchable-container .nNrecords { | |
} | |
.wc-table .searchable-container input { | |
margin: 0 10px 0 0; | |
padding: 4px; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Sortable container | |
\-------------------------------------------------------------------------------------------**/ | |
.wc-table .sortable-container { | |
margin-right: 10px; | |
} | |
.wc-table .sortable-container .instruction { | |
margin-top: 4px; | |
} | |
.wc-table .sortable-container .sort-box { | |
cursor: default; | |
padding: 2px 4px; | |
} | |
.wc-table .sortable-container .sort-direction { | |
font-weight: bold; | |
margin: 3px; | |
} | |
.wc-table .sortable-container .sort-box .remove-sort { | |
font-weight: bold; | |
float: right; | |
border: 1px solid gray; | |
margin-top: 3px; | |
padding: 2px 3px; | |
font-size: 8px; | |
background: white; | |
color: red; | |
} | |
.wc-table .sortable-container .sort-box .remove-sort:hover { | |
cursor: pointer; | |
background: red; | |
color: white; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Table | |
\-------------------------------------------------------------------------------------------**/ | |
.wc-table table { | |
font-size: .9em; | |
border-collapse: collapse; | |
} | |
/***--------------------------------------------------------------------------------------\ | |
Table header | |
\--------------------------------------------------------------------------------------***/ | |
.wc-table table thead { | |
} | |
.wc-table table thead tr { | |
} | |
.wc-table table thead tr th { | |
cursor: pointer; | |
padding: 2px 5px; | |
border-bottom: 2px solid black; | |
text-align: left; | |
} | |
.wc-table table thead tr th:first-child { | |
} | |
.wc-table table thead tr th:last-child { | |
} | |
/***--------------------------------------------------------------------------------------\ | |
Table body | |
\--------------------------------------------------------------------------------------***/ | |
.wc-table table tbody { | |
} | |
.wc-table table tbody tr { | |
} | |
.wc-table table tbody tr:nth-child(even) { | |
background: #eee; | |
} | |
.wc-table table tbody tr:hover { | |
background: #ccc; | |
} | |
.wc-table table tbody tr td { | |
padding: 2px 5px; | |
} | |
.wc-table table tbody tr td:first-child { | |
} | |
.wc-table table tbody tr td:last-child { | |
} | |
.wc-table table tbody tr:last-child { | |
border-bottom:1px solid black | |
} | |
.wc-table table tbody tr.no-data td { | |
color: red; | |
font-weight: bold; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Pagination container | |
\-------------------------------------------------------------------------------------------**/ | |
.wc-table .pagination-container { | |
float: right; | |
} | |
.wc-table .pagination-container a { | |
text-decoration: none; | |
} | |
.wc-table .pagination-container a:not(.active) { | |
border: none; | |
} | |
/**-------------------------------------------------------------------------------------------\ | |
Exportable container | |
\-------------------------------------------------------------------------------------------**/ | |
.wc-table .exportable-container { | |
float: left; | |
} | |
.wc-table .exportable-container a { | |
text-decoration: none; | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Miscellaneous | |
\------------------------------------------------------------------------------------------------*/ | |
.loader { | |
position:relative; | |
width:20px; | |
height:25px} | |
.blockG { | |
position:absolute; | |
background-color:#eee; | |
width:3px; | |
height:8px; | |
-moz-border-radius:4px 4px 0 0; | |
-moz-transform:scale(0.4); | |
-moz-animation-name:fadeG; | |
-moz-animation-duration:0.48s; | |
-moz-animation-iteration-count:infinite; | |
-moz-animation-direction:linear; | |
-webkit-border-radius:4px 4px 0 0; | |
-webkit-transform:scale(0.4); | |
-webkit-animation-name:fadeG; | |
-webkit-animation-duration:0.48s; | |
-webkit-animation-iteration-count:infinite; | |
-webkit-animation-direction:linear; | |
-ms-border-radius:4px 4px 0 0; | |
-ms-transform:scale(0.4); | |
-ms-animation-name:fadeG; | |
-ms-animation-duration:0.48s; | |
-ms-animation-iteration-count:infinite; | |
-ms-animation-direction:linear; | |
-o-border-radius:4px 4px 0 0; | |
-o-transform:scale(0.4); | |
-o-animation-name:fadeG; | |
-o-animation-duration:0.48s; | |
-o-animation-iteration-count:infinite; | |
-o-animation-direction:linear; | |
border-radius:4px 4px 0 0; | |
transform:scale(0.4); | |
animation-name:fadeG; | |
animation-duration:0.48s; | |
animation-iteration-count:infinite; | |
animation-direction:linear; | |
} | |
.rotate1 { | |
left:0; | |
top:9px; | |
-moz-animation-delay:0.18s; | |
-moz-transform:rotate(-90deg); | |
-webkit-animation-delay:0.18s; | |
-webkit-transform:rotate(-90deg); | |
-ms-animation-delay:0.18s; | |
-ms-transform:rotate(-90deg); | |
-o-animation-delay:0.18s; | |
-o-transform:rotate(-90deg); | |
animation-delay:0.18s; | |
transform:rotate(-90deg); | |
} | |
.rotate2 { | |
left:3px; | |
top:3px; | |
-moz-animation-delay:0.24s; | |
-moz-transform:rotate(-45deg); | |
-webkit-animation-delay:0.24s; | |
-webkit-transform:rotate(-45deg); | |
-ms-animation-delay:0.24s; | |
-ms-transform:rotate(-45deg); | |
-o-animation-delay:0.24s; | |
-o-transform:rotate(-45deg); | |
animation-delay:0.24s; | |
transform:rotate(-45deg); | |
} | |
.rotate3 { | |
left:8px; | |
top:1px; | |
-moz-animation-delay:0.3s; | |
-moz-transform:rotate(0deg); | |
-webkit-animation-delay:0.3s; | |
-webkit-transform:rotate(0deg); | |
-ms-animation-delay:0.3s; | |
-ms-transform:rotate(0deg); | |
-o-animation-delay:0.3s; | |
-o-transform:rotate(0deg); | |
animation-delay:0.3s; | |
transform:rotate(0deg); | |
} | |
.rotate4 { | |
right:3px; | |
top:3px; | |
-moz-animation-delay:0.36s; | |
-moz-transform:rotate(45deg); | |
-webkit-animation-delay:0.36s; | |
-webkit-transform:rotate(45deg); | |
-ms-animation-delay:0.36s; | |
-ms-transform:rotate(45deg); | |
-o-animation-delay:0.36s; | |
-o-transform:rotate(45deg); | |
animation-delay:0.36s; | |
transform:rotate(45deg); | |
} | |
.rotate5 { | |
right:0; | |
top:9px; | |
-moz-animation-delay:0.42000000000000004s; | |
-moz-transform:rotate(90deg); | |
-webkit-animation-delay:0.42000000000000004s; | |
-webkit-transform:rotate(90deg); | |
-ms-animation-delay:0.42000000000000004s; | |
-ms-transform:rotate(90deg); | |
-o-animation-delay:0.42000000000000004s; | |
-o-transform:rotate(90deg); | |
animation-delay:0.42000000000000004s; | |
transform:rotate(90deg); | |
} | |
.rotate6 { | |
right:3px; | |
bottom:2px; | |
-moz-animation-delay:0.48s; | |
-moz-transform:rotate(135deg); | |
-webkit-animation-delay:0.48s; | |
-webkit-transform:rotate(135deg); | |
-ms-animation-delay:0.48s; | |
-ms-transform:rotate(135deg); | |
-o-animation-delay:0.48s; | |
-o-transform:rotate(135deg); | |
animation-delay:0.48s; | |
transform:rotate(135deg); | |
} | |
.rotate7 { | |
bottom:0; | |
left:8px; | |
-moz-animation-delay:0.5399999999999999s; | |
-moz-transform:rotate(180deg); | |
-webkit-animation-delay:0.5399999999999999s; | |
-webkit-transform:rotate(180deg); | |
-ms-animation-delay:0.5399999999999999s; | |
-ms-transform:rotate(180deg); | |
-o-animation-delay:0.5399999999999999s; | |
-o-transform:rotate(180deg); | |
animation-delay:0.5399999999999999s; | |
transform:rotate(180deg); | |
} | |
.rotate8 { | |
left:3px; | |
bottom:2px; | |
-moz-animation-delay:0.6s; | |
-moz-transform:rotate(-135deg); | |
-webkit-animation-delay:0.6s; | |
-webkit-transform:rotate(-135deg); | |
-ms-animation-delay:0.6s; | |
-ms-transform:rotate(-135deg); | |
-o-animation-delay:0.6s; | |
-o-transform:rotate(-135deg); | |
animation-delay:0.6s; | |
transform:rotate(-135deg); | |
} | |
@-moz-keyframes fadeG { | |
0% { | |
background-color:#000000} | |
100% { | |
background-color:#eee} | |
} | |
@-webkit-keyframes fadeG { | |
0% { | |
background-color:#000000} | |
100% { | |
background-color:#eee} | |
} | |
@-ms-keyframes fadeG { | |
0% { | |
background-color:#000000} | |
100% { | |
background-color:#eee} | |
} | |
@-o-keyframes fadeG { | |
0% { | |
background-color:#000000} | |
100% { | |
background-color:#eee} | |
} | |
@keyframes fadeG { | |
0% { | |
background-color:#000000} | |
100% { | |
background-color:#eee} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(global, factory) { | |
typeof exports === 'object' && typeof module !== 'undefined' | |
? (module.exports = factory(require('d3'))) | |
: typeof define === 'function' && define.amd | |
? define(['d3'], factory) | |
: (global.webCharts = factory(global.d3)); | |
})(this, function(d3) { | |
'use strict'; | |
var version = '1.11.0'; | |
function init(data) { | |
var _this = this; | |
var test = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | |
if (d3.select(this.div).select('.loader').empty()) { | |
d3 | |
.select(this.div) | |
.insert('div', ':first-child') | |
.attr('class', 'loader') | |
.selectAll('.blockG') | |
.data(d3.range(8)) | |
.enter() | |
.append('div') | |
.attr('class', function(d) { | |
return 'blockG rotate' + (d + 1); | |
}); | |
} | |
this.wrap.attr('class', 'wc-chart'); | |
this.setDefaults(); | |
this.raw_data = data; | |
this.initial_data = data; | |
var startup = function startup(data) { | |
//connect this chart and its controls, if any | |
if (_this.controls) { | |
_this.controls.targets.push(_this); | |
if (!_this.controls.ready) { | |
_this.controls.init(_this.raw_data); | |
} else { | |
_this.controls.layout(); | |
} | |
} | |
//make sure container is visible (has height and width) before trying to initialize | |
var visible = d3.select(_this.div).property('offsetWidth') > 0 || test; | |
if (!visible) { | |
console.warn( | |
'The chart cannot be initialized inside an element with 0 width. The chart will be initialized as soon as the container element is given a width > 0.' | |
); | |
var onVisible = setInterval(function(i) { | |
var visible_now = d3.select(_this.div).property('offsetWidth') > 0; | |
if (visible_now) { | |
_this.layout(); | |
_this.draw(); | |
clearInterval(onVisible); | |
} | |
}, 500); | |
} else { | |
_this.layout(); | |
_this.draw(); | |
} | |
}; | |
this.events.onInit.call(this); | |
if (this.raw_data.length) { | |
this.checkRequired(this.raw_data); | |
} | |
startup(data); | |
return this; | |
} | |
function checkRequired(data) { | |
var _this = this; | |
var colnames = Object.keys(data[0]); | |
var requiredVars = []; | |
var requiredCols = []; | |
if (this.config.x && this.config.x.column) { | |
requiredVars.push('this.config.x.column'); | |
requiredCols.push(this.config.x.column); | |
} | |
if (this.config.y && this.config.y.column) { | |
requiredVars.push('this.config.y.column'); | |
requiredCols.push(this.config.y.column); | |
} | |
if (this.config.color_by) { | |
requiredVars.push('this.config.color_by'); | |
requiredCols.push(this.config.color_by); | |
} | |
if (this.config.marks) | |
this.config.marks.forEach(function(e, i) { | |
if (e.per && e.per.length) { | |
e.per.forEach(function(p, j) { | |
requiredVars.push('this.config.marks[' + i + '].per[' + j + ']'); | |
requiredCols.push(p); | |
}); | |
} | |
if (e.split) { | |
requiredVars.push('this.config.marks[' + i + '].split'); | |
requiredCols.push(e.split); | |
} | |
if (e.values) { | |
for (var value in e.values) { | |
requiredVars.push('this.config.marks[' + i + "].values['" + value + "']"); | |
requiredCols.push(value); | |
} | |
} | |
}); | |
var missingDataField = false; | |
requiredCols.forEach(function(e, i) { | |
if (colnames.indexOf(e) < 0) { | |
missingDataField = true; | |
d3.select(_this.div).select('.loader').remove(); | |
_this.wrap | |
.append('div') | |
.style('color', 'red') | |
.html( | |
'The value "' + | |
e + | |
'" for the <code>' + | |
requiredVars[i] + | |
'</code> setting does not match any column in the provided dataset.' | |
); | |
throw new Error( | |
'Error in settings object: The value "' + | |
e + | |
'" for the ' + | |
requiredVars[i] + | |
' setting does not match any column in the provided dataset.' | |
); | |
} | |
}); | |
return { | |
missingDataField: missingDataField, | |
dataFieldArguments: requiredVars, | |
requiredDataFields: requiredCols | |
}; | |
} | |
function layout() { | |
this.svg = this.wrap | |
.append('svg') | |
.datum(function() { | |
return null; | |
}) // prevent data inheritance | |
.attr({ | |
class: 'wc-svg', | |
xmlns: 'http://www.w3.org/2000/svg', | |
version: '1.1', | |
xlink: 'http://www.w3.org/1999/xlink' | |
}) | |
.append('g') | |
.style('display', 'inline-block'); | |
var defs = this.svg.append('defs'); | |
defs | |
.append('pattern') | |
.attr({ | |
id: 'diagonal-stripes', | |
x: 0, | |
y: 0, | |
width: 3, | |
height: 8, | |
patternUnits: 'userSpaceOnUse', | |
patternTransform: 'rotate(30)' | |
}) | |
.append('rect') | |
.attr({ x: '0', y: '0', width: '2', height: '8', style: 'stroke:none; fill:black' }); | |
defs.append('clipPath').attr('id', this.id).append('rect').attr('class', 'plotting-area'); | |
//y axis | |
this.svg | |
.append('g') | |
.attr('class', 'y axis') | |
.append('text') | |
.attr('class', 'axis-title') | |
.attr('transform', 'rotate(-90)') | |
.attr('dy', '.75em') | |
.attr('text-anchor', 'middle'); | |
//x axis | |
this.svg | |
.append('g') | |
.attr('class', 'x axis') | |
.append('text') | |
.attr('class', 'axis-title') | |
.attr('dy', '-.35em') | |
.attr('text-anchor', 'middle'); | |
//overlay | |
this.svg | |
.append('rect') | |
.attr('class', 'overlay') | |
.attr('opacity', 0) | |
.attr('fill', 'none') | |
.style('pointer-events', 'all'); | |
//add legend | |
if (!this.parent) | |
this.wrap | |
.append('ul') | |
.datum(function() { | |
return null; | |
}) // prevent data inheritance | |
.attr('class', 'legend') | |
.style('vertical-align', 'top') | |
.append('span') | |
.attr('class', 'legend-title'); | |
d3.select(this.div).select('.loader').remove(); | |
this.events.onLayout.call(this); | |
} | |
function draw(raw_data, processed_data) { | |
var _this = this; | |
var chart = this; | |
var config = this.config; | |
//if pre-processing callback, run it now | |
this.events.onPreprocess.call(this); | |
///////////////////////// | |
// Data prep pipeline // | |
///////////////////////// | |
// if user passed raw_data to chart.draw(), use that, otherwise use chart.raw_data | |
var raw = raw_data ? raw_data : this.raw_data ? this.raw_data : []; | |
// warn the user about the perils of "processed_data" | |
if (processed_data) { | |
console.warn( | |
"Drawing the chart using user-defined 'processed_data', this is an experimental, untested feature." | |
); | |
} | |
//Call consolidateData - this applies filters from controls and prepares data for each set of marks. | |
this.consolidateData(raw); | |
///////////////////////////// | |
// Prepare scales and axes // | |
///////////////////////////// | |
var div_width = parseInt(this.wrap.style('width')); | |
this.setColorScale(); | |
var max_width = config.max_width ? config.max_width : div_width; | |
this.raw_width = config.x.type === 'ordinal' && +config.x.range_band | |
? (+config.x.range_band + config.x.range_band * config.padding) * this.x_dom.length | |
: config.resizable ? max_width : config.width ? config.width : div_width; | |
this.raw_height = config.y.type === 'ordinal' && +config.y.range_band | |
? (+config.y.range_band + config.y.range_band * config.padding) * this.y_dom.length | |
: config.resizable | |
? max_width * (1 / config.aspect) | |
: config.height ? config.height : div_width * (1 / config.aspect); | |
var pseudo_width = this.svg.select('.overlay').attr('width') | |
? this.svg.select('.overlay').attr('width') | |
: this.raw_width; | |
var pseudo_height = this.svg.select('.overlay').attr('height') | |
? this.svg.select('.overlay').attr('height') | |
: this.raw_height; | |
this.svg.select('.x.axis').select('.axis-title').text(function(d) { | |
return typeof config.x.label === 'string' | |
? config.x.label | |
: typeof config.x.label === 'function' ? config.x.label.call(_this) : null; | |
}); | |
this.svg.select('.y.axis').select('.axis-title').text(function(d) { | |
return typeof config.y.label === 'string' | |
? config.y.label | |
: typeof config.y.label === 'function' ? config.y.label.call(_this) : null; | |
}); | |
this.xScaleAxis(pseudo_width); | |
this.yScaleAxis(pseudo_height); | |
if (config.resizable && typeof window !== 'undefined') { | |
d3.select(window).on('resize.' + this.element + this.id, function() { | |
chart.resize(); | |
}); | |
} else if (typeof window !== 'undefined') { | |
d3.select(window).on('resize.' + this.element + this.id, null); | |
} | |
this.events.onDraw.call(this); | |
////////////////////////////////////////////////////////////////////// | |
// Call resize - updates marks on the chart (amongst other things) // | |
///////////////////////////////////////////////////////////////////// | |
this.resize(); | |
} | |
function naturalSorter(a, b) { | |
//adapted from http://www.davekoelle.com/files/alphanum.js | |
function chunkify(t) { | |
var tz = []; | |
var x = 0, | |
y = -1, | |
n = 0, | |
i = void 0, | |
j = void 0; | |
while ((i = (j = t.charAt(x++)).charCodeAt(0))) { | |
var m = i == 46 || (i >= 48 && i <= 57); | |
if (m !== n) { | |
tz[++y] = ''; | |
n = m; | |
} | |
tz[y] += j; | |
} | |
return tz; | |
} | |
var aa = chunkify(a.toLowerCase()); | |
var bb = chunkify(b.toLowerCase()); | |
for (var x = 0; aa[x] && bb[x]; x++) { | |
if (aa[x] !== bb[x]) { | |
var c = Number(aa[x]), | |
d = Number(bb[x]); | |
if (c == aa[x] && d == bb[x]) { | |
return c - d; | |
} else { | |
return aa[x] > bb[x] ? 1 : -1; | |
} | |
} | |
} | |
return aa.length - bb.length; | |
} | |
function setDomain(axis) { | |
var _this = this; | |
var otherAxis = axis === 'x' ? 'y' : 'x'; | |
if (this.config[axis].type === 'ordinal') { | |
//ordinal domains | |
if (this.config[axis].domain) { | |
//user-defined domain | |
this[axis + '_dom'] = this.config[axis].domain; | |
} else if (this.config[axis].order) { | |
//data-driven domain with user-defined domain order | |
this[axis + '_dom'] = d3 | |
.set( | |
d3.merge( | |
this.marks.map(function(mark) { | |
return mark[axis + '_dom']; | |
}) | |
) | |
) | |
.values() | |
.sort(function(a, b) { | |
return d3.ascending( | |
_this.config[axis].order.indexOf(a), | |
_this.config[axis].order.indexOf(b) | |
); | |
}); | |
} else if ( | |
this.config[axis].sort && | |
this.config[axis].sort === 'alphabetical-ascending' | |
) { | |
//data-driven domain with user-defined domain sort algorithm that sorts the axis | |
//alphanumerically, first to last | |
this[axis + '_dom'] = d3 | |
.set( | |
d3.merge( | |
this.marks.map(function(mark) { | |
return mark[axis + '_dom']; | |
}) | |
) | |
) | |
.values() | |
.sort(naturalSorter) | |
.reverse(); | |
} else if ( | |
['time', 'linear'].indexOf(this.config[otherAxis].type) > -1 && | |
this.config[axis].sort === 'earliest' | |
) { | |
//data-driven domain plotted against a time or linear axis that sorts the axis values | |
//by earliest event/datum; generally used with timeline charts | |
this[axis + '_dom'] = d3 | |
.nest() | |
.key(function(d) { | |
return d[_this.config[axis].column]; | |
}) | |
.rollup(function(d) { | |
return d | |
.map(function(m) { | |
return m[_this.config[otherAxis].column]; | |
}) | |
.filter(function(f) { | |
return f instanceof Date; | |
}); | |
}) | |
.entries(this.raw_data) | |
.sort(function(a, b) { | |
return min(b.values) - min(a.values); | |
}) | |
.map(function(m) { | |
return m.key; | |
}); | |
} else if ( | |
!this.config[axis].sort || | |
this.config[axis].sort === 'alphabetical-descending' | |
) { | |
//data-driven domain with default/user-defined domain sort algorithm that sorts the | |
//axis alphanumerically, last to first | |
this[axis + '_dom'] = d3 | |
.set( | |
d3.merge( | |
this.marks.map(function(mark) { | |
return mark[axis + '_dom']; | |
}) | |
) | |
) | |
.values() | |
.sort(naturalSorter); | |
} else { | |
//data-driven domain with an invalid user-defined sort algorithm that captures a unique | |
//set of values as they appear in the data | |
this[axis + '_dom'] = d3 | |
.set( | |
d3.merge( | |
this.marks.map(function(mark) { | |
return mark[axis + '_dom']; | |
}) | |
) | |
) | |
.values(); | |
} | |
} else if ( | |
this.config.marks | |
.map(function(m) { | |
return m['summarize' + otherAxis.toUpperCase()] === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
) { | |
//rate domains run from 0 to 1 | |
this[axis + '_dom'] = [0, 1]; | |
} else { | |
//continuous domains run from the minimum to the maximum raw value | |
//TODO: they should really run from the minimum to the maximum summarized value, e.g. a | |
//TODO: means over time chart should plot over the range of the means, not the range of the | |
//TODO: raw data | |
this[axis + '_dom'] = d3.extent( | |
d3.merge( | |
this.marks.map(function(mark) { | |
return mark[axis + '_dom']; | |
}) | |
) | |
); | |
} | |
//Give the domain a range when the range of the variable is 0. | |
if ( | |
this.config[axis].type === 'linear' && | |
this[axis + '_dom'][0] === this[axis + '_dom'][1] | |
) | |
this[axis + '_dom'] = this[axis + '_dom'][0] !== 0 | |
? [ | |
this[axis + '_dom'][0] - this[axis + '_dom'][0] * 0.01, | |
this[axis + '_dom'][1] + this[axis + '_dom'][1] * 0.01 | |
] | |
: [-1, 1]; | |
return this[axis + '_dom']; | |
} | |
function consolidateData(raw) { | |
var _this = this; | |
this.setDefaults(); | |
//Apply filters from associated controls objects to raw data. | |
this.filtered_data = raw; | |
if (this.filters.length) { | |
this.filters.forEach(function(filter) { | |
_this.filtered_data = _this.filtered_data.filter(function(d) { | |
return filter.val === 'All' | |
? d | |
: filter.val instanceof Array | |
? filter.val.indexOf(d[filter.col]) > -1 | |
: d[filter.col] === filter.val; | |
}); | |
}); | |
} | |
//Summarize data for each mark. | |
this.config.marks.forEach(function(mark, i) { | |
if (mark.type !== 'bar') { | |
mark.arrange = null; | |
mark.split = null; | |
} | |
var mark_info = mark.per | |
? _this.transformData(raw, mark) | |
: { | |
data: [], | |
x_dom: [], | |
y_dom: [] | |
}; | |
_this.marks[i] = { | |
id: mark.id, | |
type: mark.type, | |
per: mark.per, | |
data: mark_info.data, | |
x_dom: mark_info.x_dom, | |
y_dom: mark_info.y_dom, | |
split: mark.split, | |
text: mark.text, | |
arrange: mark.arrange, | |
order: mark.order, | |
summarizeX: mark.summarizeX, | |
summarizeY: mark.summarizeY, | |
tooltip: mark.tooltip, | |
radius: mark.radius, | |
attributes: mark.attributes, | |
values: mark.values | |
}; | |
}); | |
//Set domains given extents of summarized mark data. | |
setDomain.call(this, 'x'); | |
setDomain.call(this, 'y'); | |
} | |
function setDefaults() { | |
this.config.x = this.config.x || {}; | |
this.config.y = this.config.y || {}; | |
this.config.x.label = this.config.x.label !== undefined | |
? this.config.x.label | |
: this.config.x.column; | |
this.config.y.label = this.config.y.label !== undefined | |
? this.config.y.label | |
: this.config.y.column; | |
this.config.x.sort = this.config.x.sort || 'alphabetical-ascending'; | |
this.config.y.sort = this.config.y.sort || 'alphabetical-descending'; | |
this.config.x.type = this.config.x.type || 'linear'; | |
this.config.y.type = this.config.y.type || 'linear'; | |
this.config.x.range_band = this.config.x.range_band || this.config.range_band; | |
this.config.y.range_band = this.config.y.range_band || this.config.range_band; | |
this.config.margin = this.config.margin || {}; | |
this.config.legend = this.config.legend || {}; | |
this.config.legend.label = this.config.legend.label !== undefined | |
? this.config.legend.label | |
: this.config.color_by; | |
this.config.legend.location = this.config.legend.location !== undefined | |
? this.config.legend.location | |
: 'bottom'; | |
this.config.marks = this.config.marks && this.config.marks.length | |
? this.config.marks | |
: [{}]; | |
this.config.marks.forEach(function(m, i) { | |
m.id = m.id ? m.id : 'mark' + (i + 1); | |
}); | |
this.config.date_format = this.config.date_format || '%x'; | |
this.config.padding = this.config.padding !== undefined ? this.config.padding : 0.3; | |
this.config.outer_pad = this.config.outer_pad !== undefined ? this.config.outer_pad : 0.1; | |
this.config.resizable = this.config.resizable !== undefined ? this.config.resizable : true; | |
this.config.aspect = this.config.aspect || 1.33; | |
this.config.colors = this.config.colors || [ | |
'rgb(102,194,165)', | |
'rgb(252,141,98)', | |
'rgb(141,160,203)', | |
'rgb(231,138,195)', | |
'rgb(166,216,84)', | |
'rgb(255,217,47)', | |
'rgb(229,196,148)', | |
'rgb(179,179,179)' | |
]; | |
this.config.scale_text = this.config.scale_text === undefined | |
? true | |
: this.config.scale_text; | |
this.config.transitions = this.config.transitions === undefined | |
? true | |
: this.config.transitions; | |
} | |
function cleanData(mark, raw) { | |
var _this = this; | |
var dateConvert = d3.time.format(this.config.date_format); | |
var clean = raw; | |
// only use data for the current mark | |
clean = mark.per && mark.per.length | |
? clean.filter(function(f) { | |
return f[mark.per[0]] !== undefined; | |
}) | |
: clean; | |
// Make sure data has x and y values | |
if (this.config.x.column) { | |
clean = clean.filter(function(f) { | |
return [undefined, null].indexOf(f[_this.config.x.column]) < 0; | |
}); | |
} | |
if (this.config.y.column) { | |
clean = clean.filter(function(f) { | |
return [undefined, null].indexOf(f[_this.config.y.column]) < 0; | |
}); | |
} | |
//check that x and y have the correct formats | |
if (this.config.x.type === 'time') { | |
clean = clean.filter(function(f) { | |
return f[_this.config.x.column] instanceof Date | |
? f[_this.config.x.column] | |
: dateConvert.parse(f[_this.config.x.column]); | |
}); | |
clean.forEach(function(e) { | |
return (e[_this.config.x.column] = e[_this.config.x.column] instanceof Date | |
? e[_this.config.x.column] | |
: dateConvert.parse(e[_this.config.x.column])); | |
}); | |
} | |
if (this.config.y.type === 'time') { | |
clean = clean.filter(function(f) { | |
return f[_this.config.y.column] instanceof Date | |
? f[_this.config.y.column] | |
: dateConvert.parse(f[_this.config.y.column]); | |
}); | |
clean.forEach(function(e) { | |
return (e[_this.config.y.column] = e[_this.config.y.column] instanceof Date | |
? e[_this.config.y.column] | |
: dateConvert.parse(e[_this.config.y.column])); | |
}); | |
} | |
if ( | |
(this.config.x.type === 'linear' || this.config.x.type === 'log') && | |
this.config.x.column | |
) { | |
clean = clean.filter(function(f) { | |
return mark.summarizeX !== 'count' && mark.summarizeX !== 'percent' | |
? !(isNaN(f[_this.config.x.column]) || /^\s*$/.test(f[_this.config.x.column])) // is or coerces to a number and is not a string that coerces to 0 | |
: f; | |
}); | |
} | |
if ( | |
(this.config.y.type === 'linear' || this.config.y.type === 'log') && | |
this.config.y.column | |
) { | |
clean = clean.filter(function(f) { | |
return mark.summarizeY !== 'count' && mark.summarizeY !== 'percent' | |
? !(isNaN(f[_this.config.y.column]) || /^\s*$/.test(f[_this.config.y.column])) // is or coerces to a number and is not a string that coerces to 0 | |
: f; | |
}); | |
} | |
return clean; | |
} | |
var stats = { | |
mean: d3.mean, | |
min: d3.min, | |
max: d3.max, | |
median: d3.median, | |
sum: d3.sum | |
}; | |
function summarize(vals) { | |
var operation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mean'; | |
var nvals = vals | |
.filter(function(f) { | |
return +f || +f === 0; | |
}) | |
.map(function(m) { | |
return +m; | |
}); | |
if (operation === 'cumulative') { | |
return null; | |
} | |
var mathed = operation === 'count' | |
? vals.length | |
: operation === 'percent' ? vals.length : stats[operation](nvals); | |
return mathed; | |
} | |
function makeNest(mark, entries, sublevel) { | |
var _this = this; | |
var dom_xs = []; | |
var dom_ys = []; | |
var this_nest = d3.nest(); | |
var totalOrder = void 0; | |
if ( | |
(this.config.x.type === 'linear' && this.config.x.bin) || | |
(this.config.y.type === 'linear' && this.config.y.bin) | |
) { | |
var xy = this.config.x.type === 'linear' && this.config.x.bin ? 'x' : 'y'; | |
var quant = d3.scale | |
.quantile() | |
.domain( | |
d3.extent( | |
entries.map(function(m) { | |
return +m[_this.config[xy].column]; | |
}) | |
) | |
) | |
.range(d3.range(+this.config[xy].bin)); | |
entries.forEach(function(e) { | |
return (e.wc_bin = quant(e[_this.config[xy].column])); | |
}); | |
this_nest.key(function(d) { | |
return quant.invertExtent(d.wc_bin); | |
}); | |
} else { | |
this_nest.key(function(d) { | |
return mark.per | |
.map(function(m) { | |
return d[m]; | |
}) | |
.join(' '); | |
}); | |
} | |
if (sublevel) { | |
this_nest.key(function(d) { | |
return d[sublevel]; | |
}); | |
this_nest.sortKeys(function(a, b) { | |
return _this.config.x.type === 'time' | |
? d3.ascending(new Date(a), new Date(b)) | |
: _this.config.x.order | |
? d3.ascending( | |
_this.config.x.order.indexOf(a), | |
_this.config.x.order.indexOf(b) | |
) | |
: sublevel === _this.config.color_by && _this.config.legend.order | |
? d3.ascending( | |
_this.config.legend.order.indexOf(a), | |
_this.config.legend.order.indexOf(b) | |
) | |
: _this.config.x.type === 'ordinal' || _this.config.y.type === 'ordinal' | |
? naturalSorter(a, b) | |
: d3.ascending(+a, +b); | |
}); | |
} | |
this_nest.rollup(function(r) { | |
var obj = { raw: r }; | |
var y_vals = r | |
.map(function(m) { | |
return m[_this.config.y.column]; | |
}) | |
.sort(d3.ascending); | |
var x_vals = r | |
.map(function(m) { | |
return m[_this.config.x.column]; | |
}) | |
.sort(d3.ascending); | |
obj.x = _this.config.x.type === 'ordinal' | |
? r[0][_this.config.x.column] | |
: summarize(x_vals, mark.summarizeX); | |
obj.y = _this.config.y.type === 'ordinal' | |
? r[0][_this.config.y.column] | |
: summarize(y_vals, mark.summarizeY); | |
obj.x_q25 = _this.config.error_bars && _this.config.y.type === 'ordinal' | |
? d3.quantile(x_vals, 0.25) | |
: obj.x; | |
obj.x_q75 = _this.config.error_bars && _this.config.y.type === 'ordinal' | |
? d3.quantile(x_vals, 0.75) | |
: obj.x; | |
obj.y_q25 = _this.config.error_bars ? d3.quantile(y_vals, 0.25) : obj.y; | |
obj.y_q75 = _this.config.error_bars ? d3.quantile(y_vals, 0.75) : obj.y; | |
dom_xs.push([obj.x_q25, obj.x_q75, obj.x]); | |
dom_ys.push([obj.y_q25, obj.y_q75, obj.y]); | |
if (mark.summarizeY === 'cumulative') { | |
var interm = entries.filter(function(f) { | |
return _this.config.x.type === 'time' | |
? new Date(f[_this.config.x.column]) <= | |
new Date(r[0][_this.config.x.column]) | |
: +f[_this.config.x.column] <= +r[0][_this.config.x.column]; | |
}); | |
if (mark.per.length) { | |
interm = interm.filter(function(f) { | |
return f[mark.per[0]] === r[0][mark.per[0]]; | |
}); | |
} | |
var cumul = _this.config.x.type === 'time' | |
? interm.length | |
: d3.sum( | |
interm.map(function(m) { | |
return +m[_this.config.y.column] || +m[_this.config.y.column] === 0 | |
? +m[_this.config.y.column] | |
: 1; | |
}) | |
); | |
dom_ys.push([cumul]); | |
obj.y = cumul; | |
} | |
if (mark.summarizeX === 'cumulative') { | |
var _interm = entries.filter(function(f) { | |
return _this.config.y.type === 'time' | |
? new Date(f[_this.config.y.column]) <= | |
new Date(r[0][_this.config.y.column]) | |
: +f[_this.config.y.column] <= +r[0][_this.config.y.column]; | |
}); | |
if (mark.per.length) { | |
_interm = _interm.filter(function(f) { | |
return f[mark.per[0]] === r[0][mark.per[0]]; | |
}); | |
} | |
dom_xs.push([_interm.length]); | |
obj.x = _interm.length; | |
} | |
return obj; | |
}); | |
var test = this_nest.entries(entries); | |
var dom_x = d3.extent(d3.merge(dom_xs)); | |
var dom_y = d3.extent(d3.merge(dom_ys)); | |
if (sublevel && mark.type === 'bar' && mark.split) { | |
//calculate percentages in bars | |
test.forEach(function(e) { | |
var axis = _this.config.x.type === 'ordinal' || | |
(_this.config.x.type === 'linear' && _this.config.x.bin) | |
? 'y' | |
: 'x'; | |
e.total = d3.sum( | |
e.values.map(function(m) { | |
return +m.values[axis]; | |
}) | |
); | |
var counter = 0; | |
e.values.forEach(function(v, i) { | |
if ( | |
_this.config.x.type === 'ordinal' || | |
(_this.config.x.type === 'linear' && _this.config.x.bin) | |
) { | |
v.values.y = mark.summarizeY === 'percent' | |
? v.values.y / e.total | |
: v.values.y || 0; | |
counter += +v.values.y; | |
v.values.start = e.values[i - 1] ? counter : v.values.y; | |
} else { | |
v.values.x = mark.summarizeX === 'percent' | |
? v.values.x / e.total | |
: v.values.x || 0; | |
v.values.start = counter; | |
counter += +v.values.x; | |
} | |
}); | |
}); | |
if (mark.arrange === 'stacked') { | |
if ( | |
this.config.x.type === 'ordinal' || | |
(this.config.x.type === 'linear' && this.config.x.bin) | |
) { | |
dom_y = d3.extent( | |
test.map(function(m) { | |
return m.total; | |
}) | |
); | |
} | |
if ( | |
this.config.y.type === 'ordinal' || | |
(this.config.y.type === 'linear' && this.config.y.bin) | |
) { | |
dom_x = d3.extent( | |
test.map(function(m) { | |
return m.total; | |
}) | |
); | |
} | |
} | |
} else { | |
var axis = this.config.x.type === 'ordinal' || | |
(this.config.x.type === 'linear' && this.config.x.bin) | |
? 'y' | |
: 'x'; | |
test.forEach(function(e) { | |
return (e.total = e.values[axis]); | |
}); | |
} | |
if ( | |
(this.config.x.sort === 'total-ascending' && this.config.x.type == 'ordinal') || | |
(this.config.y.sort === 'total-descending' && this.config.y.type == 'ordinal') | |
) { | |
totalOrder = test | |
.sort(function(a, b) { | |
return d3.ascending(a.total, b.total); | |
}) | |
.map(function(m) { | |
return m.key; | |
}); | |
} else if ( | |
(this.config.x.sort === 'total-descending' && this.config.x.type == 'ordinal') || | |
(this.config.y.sort === 'total-ascending' && this.config.y.type == 'ordinal') | |
) { | |
totalOrder = test | |
.sort(function(a, b) { | |
return d3.descending(+a.total, +b.total); | |
}) | |
.map(function(m) { | |
return m.key; | |
}); | |
} | |
return { nested: test, dom_x: dom_x, dom_y: dom_y, totalOrder: totalOrder }; | |
} | |
////////////////////////////////////////////////////////// | |
// transformData(raw, mark) provides specifications and data for | |
// each set of marks. As such, it is called once for each | |
// item specified in the config.marks array. | |
// | |
// parameters | |
// raw - the raw data for use in the mark. Filters from controls | |
// are typically already applied. | |
// mark - a single mark object from config.marks | |
//////////////////////////////////////////////////////// | |
function transformData(raw, mark) { | |
var _this = this; | |
//convenience mappings | |
var config = this.config; | |
var x_behavior = config.x.behavior || 'raw'; | |
var y_behavior = config.y.behavior || 'raw'; | |
var sublevel = mark.type === 'line' | |
? config.x.column | |
: mark.type === 'bar' && mark.split ? mark.split : null; | |
////////////////////////////////////////////////////////////////////////////////// | |
// DATA PREP | |
// prepare data based on the properties of the mark - drop missing records, etc | |
////////////////////////////////////////////////////////////////////////////////// | |
var cleaned = cleanData.call(this, mark, raw); | |
//prepare nested data required for bar charts | |
var raw_nest = void 0; | |
if (mark.type === 'bar') { | |
raw_nest = mark.arrange !== 'stacked' | |
? makeNest.call(this, mark, cleaned, sublevel) | |
: makeNest.call(this, mark, cleaned); | |
} else if (mark.summarizeX === 'count' || mark.summarizeY === 'count') { | |
raw_nest = makeNest.call(this, mark, cleaned); | |
} | |
// Get the domain for the mark based on the raw data | |
var raw_dom_x = mark.summarizeX === 'cumulative' | |
? [0, cleaned.length] | |
: config.x.type === 'ordinal' | |
? d3 | |
.set( | |
cleaned.map(function(m) { | |
return m[config.x.column]; | |
}) | |
) | |
.values() | |
.filter(function(f) { | |
return f; | |
}) | |
: mark.split && mark.arrange !== 'stacked' | |
? d3.extent( | |
d3.merge( | |
raw_nest.nested.map(function(m) { | |
return m.values.map(function(p) { | |
return p.values.raw.length; | |
}); | |
}) | |
) | |
) | |
: mark.summarizeX === 'count' | |
? d3.extent( | |
raw_nest.nested.map(function(m) { | |
return m.values.raw.length; | |
}) | |
) | |
: d3.extent( | |
cleaned | |
.map(function(m) { | |
return +m[config.x.column]; | |
}) | |
.filter(function(f) { | |
return +f || +f === 0; | |
}) | |
); | |
var raw_dom_y = mark.summarizeY === 'cumulative' | |
? [0, cleaned.length] | |
: config.y.type === 'ordinal' | |
? d3 | |
.set( | |
cleaned.map(function(m) { | |
return m[config.y.column]; | |
}) | |
) | |
.values() | |
.filter(function(f) { | |
return f; | |
}) | |
: mark.split && mark.arrange !== 'stacked' | |
? d3.extent( | |
d3.merge( | |
raw_nest.nested.map(function(m) { | |
return m.values.map(function(p) { | |
return p.values.raw.length; | |
}); | |
}) | |
) | |
) | |
: mark.summarizeY === 'count' | |
? d3.extent( | |
raw_nest.nested.map(function(m) { | |
return m.values.raw.length; | |
}) | |
) | |
: d3.extent( | |
cleaned | |
.map(function(m) { | |
return +m[config.y.column]; | |
}) | |
.filter(function(f) { | |
return +f || +f === 0; | |
}) | |
); | |
var filtered = cleaned; | |
var filt1_xs = []; | |
var filt1_ys = []; | |
if (this.filters.length) { | |
this.filters.forEach(function(e) { | |
filtered = filtered.filter(function(d) { | |
return e.val === 'All' | |
? d | |
: e.val instanceof Array | |
? e.val.indexOf(d[e.col]) > -1 | |
: d[e.col] === e.val; | |
}); | |
}); | |
//get domain for all non-All values of first filter | |
if (config.x.behavior === 'firstfilter' || config.y.behavior === 'firstfilter') { | |
this.filters[0].choices | |
.filter(function(f) { | |
return f !== 'All'; | |
}) | |
.forEach(function(e) { | |
var perfilter = cleaned.filter(function(f) { | |
return f[_this.filters[0].col] === e; | |
}); | |
var filt_nested = makeNest.call(_this, mark, perfilter, sublevel); | |
filt1_xs.push(filt_nested.dom_x); | |
filt1_ys.push(filt_nested.dom_y); | |
}); | |
} | |
} | |
//filter on mark-specific instructions | |
if (mark.values) { | |
var _loop = function _loop(a) { | |
filtered = filtered.filter(function(f) { | |
return mark.values[a].indexOf(f[a]) > -1; | |
}); | |
}; | |
for (var a in mark.values) { | |
_loop(a); | |
} | |
} | |
var filt1_dom_x = d3.extent(d3.merge(filt1_xs)); | |
var filt1_dom_y = d3.extent(d3.merge(filt1_ys)); | |
var current_nested = makeNest.call(this, mark, filtered, sublevel); | |
var flex_dom_x = current_nested.dom_x; | |
var flex_dom_y = current_nested.dom_y; | |
if (mark.type === 'bar') { | |
if (config.y.type === 'ordinal' && mark.summarizeX === 'count') { | |
config.x.domain = config.x.domain ? [0, config.x.domain[1]] : [0, null]; | |
} else if (config.x.type === 'ordinal' && mark.summarizeY === 'count') { | |
config.y.domain = config.y.domain ? [0, config.y.domain[1]] : [0, null]; | |
} | |
} | |
//several criteria must be met in order to use the 'firstfilter' domain | |
var nonall = Boolean( | |
this.filters.length && | |
this.filters[0].val !== 'All' && | |
this.filters.slice(1).filter(function(f) { | |
return f.val === 'All'; | |
}).length === | |
this.filters.length - 1 | |
); | |
var pre_x_dom = !this.filters.length | |
? flex_dom_x | |
: x_behavior === 'raw' | |
? raw_dom_x | |
: nonall && x_behavior === 'firstfilter' ? filt1_dom_x : flex_dom_x; | |
var pre_y_dom = !this.filters.length | |
? flex_dom_y | |
: y_behavior === 'raw' | |
? raw_dom_y | |
: nonall && y_behavior === 'firstfilter' ? filt1_dom_y : flex_dom_y; | |
var x_dom = config.x_dom | |
? config.x_dom | |
: config.x.type === 'ordinal' && config.x.behavior === 'flex' | |
? d3 | |
.set( | |
filtered.map(function(m) { | |
return m[config.x.column]; | |
}) | |
) | |
.values() | |
: config.x.type === 'ordinal' | |
? d3 | |
.set( | |
cleaned.map(function(m) { | |
return m[config.x.column]; | |
}) | |
) | |
.values() | |
: pre_x_dom; | |
var y_dom = config.y_dom | |
? config.y_dom | |
: config.y.type === 'ordinal' && config.y.behavior === 'flex' | |
? d3 | |
.set( | |
filtered.map(function(m) { | |
return m[config.y.column]; | |
}) | |
) | |
.values() | |
: config.y.type === 'ordinal' | |
? d3 | |
.set( | |
cleaned.map(function(m) { | |
return m[config.y.column]; | |
}) | |
) | |
.values() | |
: pre_y_dom; | |
//set lower limit of linear domain to 0 when other axis is ordinal and mark type is set to 'bar', provided no values are negative | |
if (mark.type === 'bar') { | |
if ( | |
config.x.behavior !== 'flex' && | |
config.x.type === 'linear' && | |
config.y.type === 'ordinal' && | |
raw_dom_x[0] >= 0 | |
) | |
x_dom[0] = 0; | |
if ( | |
config.y.behavior !== 'flex' && | |
config.x.type === 'ordinal' && | |
config.y.type === 'linear' && | |
raw_dom_y[0] >= 0 | |
) | |
y_dom[0] = 0; | |
} | |
//update domains with those specified in the config | |
if (config.x.domain && (config.x.domain[0] || config.x.domain[0] === 0)) { | |
x_dom[0] = config.x.domain[0]; | |
} | |
if (config.x.domain && (config.x.domain[1] || config.x.domain[1] === 0)) { | |
x_dom[1] = config.x.domain[1]; | |
} | |
if (config.y.domain && (config.y.domain[0] || config.y.domain[0] === 0)) { | |
y_dom[0] = config.y.domain[0]; | |
} | |
if (config.y.domain && (config.y.domain[1] || config.y.domain[1] === 0)) { | |
y_dom[1] = config.y.domain[1]; | |
} | |
if (config.x.type === 'ordinal' && !config.x.order) { | |
config.x.order = current_nested.totalOrder; | |
} | |
if (config.y.type === 'ordinal' && !config.y.order) { | |
config.y.order = current_nested.totalOrder; | |
} | |
this.current_data = current_nested.nested; | |
this.events.onDatatransform.call(this); | |
return { config: mark, data: current_nested.nested, x_dom: x_dom, y_dom: y_dom }; | |
} | |
function setColorScale() { | |
var config = this.config; | |
var data = config.legend.behavior === 'flex' ? this.filtered_data : this.raw_data; | |
var colordom = Array.isArray(config.color_dom) && config.color_dom.length | |
? config.color_dom.slice() | |
: d3 | |
.set( | |
data.map(function(m) { | |
return m[config.color_by]; | |
}) | |
) | |
.values() | |
.filter(function(f) { | |
return f && f !== 'undefined'; | |
}); | |
if (config.legend.order) | |
colordom.sort(function(a, b) { | |
return d3.ascending(config.legend.order.indexOf(a), config.legend.order.indexOf(b)); | |
}); | |
else colordom.sort(naturalSorter); | |
this.colorScale = d3.scale.ordinal().domain(colordom).range(config.colors); | |
} | |
function xScaleAxis(max_range, domain, type) { | |
if (max_range === undefined) { | |
max_range = this.plot_width; | |
} | |
if (domain === undefined) { | |
domain = this.x_dom; | |
} | |
if (type === undefined) { | |
type = this.config.x.type; | |
} | |
var config = this.config; | |
var x = void 0; | |
if (type === 'log') { | |
x = d3.scale.log(); | |
} else if (type === 'ordinal') { | |
x = d3.scale.ordinal(); | |
} else if (type === 'time') { | |
x = d3.time.scale(); | |
} else { | |
x = d3.scale.linear(); | |
} | |
x.domain(domain); | |
if (type === 'ordinal') { | |
x.rangeBands([0, +max_range], config.padding, config.outer_pad); | |
} else { | |
x.range([0, +max_range]).clamp(Boolean(config.x.clamp)); | |
} | |
var xFormat = config.x.format | |
? config.x.format | |
: config.marks | |
.map(function(m) { | |
return m.summarizeX === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? '0%' | |
: type === 'time' ? '%x' : '.0f'; | |
var tick_count = Math.max(2, Math.min(max_range / 80, 8)); | |
var xAxis = d3.svg | |
.axis() | |
.scale(x) | |
.orient(config.x.location) | |
.ticks(tick_count) | |
.tickFormat( | |
type === 'ordinal' | |
? null | |
: type === 'time' ? d3.time.format(xFormat) : d3.format(xFormat) | |
) | |
.tickValues(config.x.ticks ? config.x.ticks : null) | |
.innerTickSize(6) | |
.outerTickSize(3); | |
this.svg.select('g.x.axis').attr('class', 'x axis ' + type); | |
this.x = x; | |
this.xAxis = xAxis; | |
} | |
function yScaleAxis(max_range, domain, type) { | |
if (max_range === undefined) { | |
max_range = this.plot_height; | |
} | |
if (domain === undefined) { | |
domain = this.y_dom; | |
} | |
if (type === undefined) { | |
type = this.config.y.type; | |
} | |
var config = this.config; | |
var y = void 0; | |
if (type === 'log') { | |
y = d3.scale.log(); | |
} else if (type === 'ordinal') { | |
y = d3.scale.ordinal(); | |
} else if (type === 'time') { | |
y = d3.time.scale(); | |
} else { | |
y = d3.scale.linear(); | |
} | |
y.domain(domain); | |
if (type === 'ordinal') { | |
y.rangeBands([+max_range, 0], config.padding, config.outer_pad); | |
} else { | |
y.range([+max_range, 0]).clamp(Boolean(config.y_clamp)); | |
} | |
var yFormat = config.y.format | |
? config.y.format | |
: config.marks | |
.map(function(m) { | |
return m.summarizeY === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? '0%' | |
: '.0f'; | |
var tick_count = Math.max(2, Math.min(max_range / 80, 8)); | |
var yAxis = d3.svg | |
.axis() | |
.scale(y) | |
.orient('left') | |
.ticks(tick_count) | |
.tickFormat( | |
type === 'ordinal' | |
? null | |
: type === 'time' ? d3.time.format(yFormat) : d3.format(yFormat) | |
) | |
.tickValues(config.y.ticks ? config.y.ticks : null) | |
.innerTickSize(6) | |
.outerTickSize(3); | |
this.svg.select('g.y.axis').attr('class', 'y axis ' + type); | |
this.y = y; | |
this.yAxis = yAxis; | |
} | |
function resize() { | |
var config = this.config; | |
var aspect2 = 1 / config.aspect; | |
var div_width = parseInt(this.wrap.style('width')); | |
var max_width = config.max_width ? config.max_width : div_width; | |
var preWidth = !config.resizable | |
? config.width | |
: !max_width || div_width < max_width ? div_width : this.raw_width; | |
this.textSize(preWidth); | |
this.margin = this.setMargins(); | |
var svg_width = config.x.type === 'ordinal' && +config.x.range_band | |
? this.raw_width + this.margin.left + this.margin.right | |
: !config.resizable | |
? this.raw_width | |
: !config.max_width || div_width < config.max_width ? div_width : this.raw_width; | |
this.plot_width = svg_width - this.margin.left - this.margin.right; | |
var svg_height = config.y.type === 'ordinal' && +config.y.range_band | |
? this.raw_height + this.margin.top + this.margin.bottom | |
: !config.resizable && config.height | |
? config.height | |
: !config.resizable ? svg_width * aspect2 : this.plot_width * aspect2; | |
this.plot_height = svg_height - this.margin.top - this.margin.bottom; | |
d3 | |
.select(this.svg.node().parentNode) | |
.attr('width', svg_width) | |
.attr('height', svg_height) | |
.select('g') | |
.attr('transform', 'translate(' + this.margin.left + ',' + this.margin.top + ')'); | |
this.svg | |
.select('.overlay') | |
.attr('width', this.plot_width) | |
.attr('height', this.plot_height) | |
.classed('zoomable', config.zoomable); | |
this.svg | |
.select('.plotting-area') | |
.attr('width', this.plot_width) | |
.attr('height', this.plot_height + 1) | |
.attr('transform', 'translate(0, -1)'); | |
this.xScaleAxis(); | |
this.yScaleAxis(); | |
var g_x_axis = this.svg.select('.x.axis'); | |
var g_y_axis = this.svg.select('.y.axis'); | |
var x_axis_label = g_x_axis.select('.axis-title'); | |
var y_axis_label = g_y_axis.select('.axis-title'); | |
if (config.x_location !== 'top') { | |
g_x_axis.attr('transform', 'translate(0,' + this.plot_height + ')'); | |
} | |
var gXAxisTrans = config.transitions ? g_x_axis.transition() : g_x_axis; | |
gXAxisTrans.call(this.xAxis); | |
var gYAxisTrans = config.transitions ? g_y_axis.transition() : g_y_axis; | |
gYAxisTrans.call(this.yAxis); | |
x_axis_label.attr( | |
'transform', | |
'translate(' + this.plot_width / 2 + ',' + (this.margin.bottom - 2) + ')' | |
); | |
y_axis_label.attr('x', -1 * this.plot_height / 2).attr('y', -1 * this.margin.left); | |
this.svg | |
.selectAll('.axis .domain') | |
.attr({ | |
fill: 'none', | |
stroke: '#ccc', | |
'stroke-width': 1, | |
'shape-rendering': 'crispEdges' | |
}); | |
this.svg | |
.selectAll('.axis .tick line') | |
.attr({ stroke: '#eee', 'stroke-width': 1, 'shape-rendering': 'crispEdges' }); | |
this.drawGridlines(); | |
//update legend - margins need to be set first | |
this.makeLegend(); | |
//update the chart's specific marks | |
this.updateDataMarks(); | |
//call .on("resize") function, if any | |
this.events.onResize.call(this); | |
} | |
function textSize(width) { | |
var font_size = '14px'; | |
var point_size = 4; | |
var stroke_width = 2; | |
if (!this.config.scale_text) { | |
font_size = this.config.font_size; | |
point_size = this.config.point_size || 4; | |
stroke_width = this.config.stroke_width || 2; | |
} else if (width >= 600) { | |
font_size = '14px'; | |
point_size = 4; | |
stroke_width = 2; | |
} else if (width > 450 && width < 600) { | |
font_size = '12px'; | |
point_size = 3; | |
stroke_width = 2; | |
} else if (width > 300 && width < 450) { | |
font_size = '10px'; | |
point_size = 2; | |
stroke_width = 2; | |
} else if (width <= 300) { | |
font_size = '10px'; | |
point_size = 2; | |
stroke_width = 1; | |
} | |
this.wrap.style('font-size', font_size); | |
this.config.flex_point_size = point_size; | |
this.config.flex_stroke_width = stroke_width; | |
} | |
function setMargins() { | |
var _this = this; | |
var y_ticks = this.yAxis.tickFormat() | |
? this.y.domain().map(function(m) { | |
return _this.yAxis.tickFormat()(m); | |
}) | |
: this.y.domain(); | |
var max_y_text_length = d3.max( | |
y_ticks.map(function(m) { | |
return String(m).length; | |
}) | |
); | |
if (this.config.y_format && this.config.y_format.indexOf('%') > -1) { | |
max_y_text_length += 1; | |
} | |
max_y_text_length = Math.max(2, max_y_text_length); | |
var x_label_on = this.config.x.label ? 1.5 : 0; | |
var y_label_on = this.config.y.label ? 1.5 : 0.25; | |
var font_size = parseInt(this.wrap.style('font-size')); | |
var x_second = this.config.x2_interval ? 1 : 0; | |
var y_margin = max_y_text_length * font_size * 0.5 + font_size * y_label_on * 1.5 || 8; | |
var x_margin = | |
font_size + font_size / 1.5 + font_size * x_label_on + font_size * x_second || 8; | |
y_margin += 6; | |
x_margin += 3; | |
return { | |
top: this.config.margin && this.config.margin.top ? this.config.margin.top : 8, | |
right: this.config.margin && this.config.margin.right ? this.config.margin.right : 16, | |
bottom: this.config.margin && this.config.margin.bottom | |
? this.config.margin.bottom | |
: x_margin, | |
left: this.config.margin && this.config.margin.left ? this.config.margin.left : y_margin | |
}; | |
} | |
function drawGridLines() { | |
this.wrap.classed('gridlines', this.config.gridlines); | |
if (this.config.gridlines) { | |
this.svg.select('.y.axis').selectAll('.tick line').attr('x1', 0); | |
this.svg.select('.x.axis').selectAll('.tick line').attr('y1', 0); | |
if (this.config.gridlines === 'y' || this.config.gridlines === 'xy') | |
this.svg.select('.y.axis').selectAll('.tick line').attr('x1', this.plot_width); | |
if (this.config.gridlines === 'x' || this.config.gridlines === 'xy') | |
this.svg.select('.x.axis').selectAll('.tick line').attr('y1', -this.plot_height); | |
} else { | |
this.svg.select('.y.axis').selectAll('.tick line').attr('x1', 0); | |
this.svg.select('.x.axis').selectAll('.tick line').attr('y1', 0); | |
} | |
} | |
function makeLegend() { | |
var scale$$1 = arguments.length > 0 && arguments[0] !== undefined | |
? arguments[0] | |
: this.colorScale; | |
var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; | |
var custom_data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | |
var config = this.config; | |
config.legend.mark = config.legend.mark | |
? config.legend.mark | |
: config.marks.length && config.marks[0].type === 'bar' | |
? 'square' | |
: config.marks.length ? config.marks[0].type : 'square'; | |
var legend_label = label | |
? label | |
: typeof config.legend.label === 'string' ? config.legend.label : ''; | |
var legendOriginal = this.legend || this.wrap.select('.legend'); | |
var legend = legendOriginal; | |
if (!this.parent) { | |
//singular chart | |
if (this.config.legend.location === 'top' || this.config.legend.location === 'left') { | |
this.wrap.node().insertBefore(legendOriginal.node(), this.svg.node().parentNode); | |
} else { | |
this.wrap.node().appendChild(legendOriginal.node()); | |
} | |
} else { | |
//multiples - keep legend outside of individual charts' wraps | |
if (this.config.legend.location === 'top' || this.config.legend.location === 'left') { | |
this.parent.wrap | |
.node() | |
.insertBefore( | |
legendOriginal.node(), | |
this.parent.wrap.select('.wc-chart').node() | |
); | |
} else { | |
this.parent.wrap.node().appendChild(legendOriginal.node()); | |
} | |
} | |
legend.style('padding', 0); | |
var legend_data = | |
custom_data || | |
scale$$1 | |
.domain() | |
.slice(0) | |
.filter(function(f) { | |
return f !== undefined && f !== null; | |
}) | |
.map(function(m) { | |
return { label: m, mark: config.legend.mark }; | |
}); | |
legend | |
.select('.legend-title') | |
.text(legend_label) | |
.style('display', legend_label ? 'inline' : 'none') | |
.style('margin-right', '1em'); | |
var leg_parts = legend.selectAll('.legend-item').data(legend_data, function(d) { | |
return d.label + d.mark; | |
}); | |
leg_parts.exit().remove(); | |
var legendPartDisplay = this.config.legend.location === 'bottom' || | |
this.config.legend.location === 'top' | |
? 'inline-block' | |
: 'block'; | |
var new_parts = leg_parts | |
.enter() | |
.append('li') | |
.attr('class', 'legend-item') | |
.style({ 'list-style-type': 'none', 'margin-right': '1em' }); | |
new_parts.append('span').attr('class', 'legend-mark-text').style('color', function(d) { | |
return scale$$1(d.label); | |
}); | |
new_parts | |
.append('svg') | |
.attr('class', 'legend-color-block') | |
.attr('width', '1.1em') | |
.attr('height', '1.1em') | |
.style({ | |
position: 'relative', | |
top: '0.2em' | |
}); | |
leg_parts.style('display', legendPartDisplay); | |
if (config.legend.order) { | |
leg_parts.sort(function(a, b) { | |
return d3.ascending( | |
config.legend.order.indexOf(a.label), | |
config.legend.order.indexOf(b.label) | |
); | |
}); | |
} | |
leg_parts.selectAll('.legend-color-block').select('.legend-mark').remove(); | |
leg_parts.selectAll('.legend-color-block').each(function(e) { | |
var svg$$1 = d3.select(this); | |
if (e.mark === 'circle') { | |
svg$$1 | |
.append('circle') | |
.attr({ cx: '.5em', cy: '.5em', r: '.45em', class: 'legend-mark' }); | |
} else if (e.mark === 'line') { | |
svg$$1.append('line').attr({ | |
x1: 0, | |
y1: '.5em', | |
x2: '1em', | |
y2: '.5em', | |
'stroke-width': 2, | |
'shape-rendering': 'crispEdges', | |
class: 'legend-mark' | |
}); | |
} else if (e.mark === 'square') { | |
svg$$1.append('rect').attr({ | |
height: '1em', | |
width: '1em', | |
class: 'legend-mark', | |
'shape-rendering': 'crispEdges' | |
}); | |
} | |
}); | |
leg_parts | |
.selectAll('.legend-color-block') | |
.select('.legend-mark') | |
.attr('fill', function(d) { | |
return d.color || scale$$1(d.label); | |
}) | |
.attr('stroke', function(d) { | |
return d.color || scale$$1(d.label); | |
}) | |
.each(function(e) { | |
d3.select(this).attr(e.attributes); | |
}); | |
new_parts | |
.append('span') | |
.attr('class', 'legend-label') | |
.style('margin-left', '0.25em') | |
.text(function(d) { | |
return d.label; | |
}); | |
if (scale$$1.domain().length > 0) { | |
var legendDisplay = this.config.legend.location === 'bottom' || | |
this.config.legend.location === 'top' | |
? 'block' | |
: 'inline-block'; | |
legend.style('display', legendDisplay); | |
} else { | |
legend.style('display', 'none'); | |
} | |
this.legend = legend; | |
} | |
function updateDataMarks() { | |
this.drawBars( | |
this.marks.filter(function(f) { | |
return f.type === 'bar'; | |
}) | |
); | |
this.drawLines( | |
this.marks.filter(function(f) { | |
return f.type === 'line'; | |
}) | |
); | |
this.drawPoints( | |
this.marks.filter(function(f) { | |
return f.type === 'circle'; | |
}) | |
); | |
this.drawText( | |
this.marks.filter(function(f) { | |
return f.type === 'text'; | |
}) | |
); | |
this.marks.supergroups = this.svg.selectAll('g.supergroup'); | |
} | |
function drawArea(area_drawer, area_data, datum_accessor) { | |
var class_match = arguments.length > 3 && arguments[3] !== undefined | |
? arguments[3] | |
: 'chart-area'; | |
var _this = this; | |
var bind_accessor = arguments[4]; | |
var attr_accessor = arguments.length > 5 && arguments[5] !== undefined | |
? arguments[5] | |
: function(d) { | |
return d; | |
}; | |
var area_grps = this.svg.selectAll('.' + class_match).data(area_data, bind_accessor); | |
area_grps.exit().remove(); | |
area_grps | |
.enter() | |
.append('g') | |
.attr('class', function(d) { | |
return class_match + ' ' + d.key; | |
}) | |
.append('path'); | |
var areaPaths = area_grps | |
.select('path') | |
.datum(datum_accessor) | |
.attr('fill', function(d) { | |
var d_attr = attr_accessor(d); | |
return d_attr ? _this.colorScale(d_attr[_this.config.color_by]) : null; | |
}) | |
.attr( | |
'fill-opacity', | |
this.config.fill_opacity || this.config.fill_opacity === 0 | |
? this.config.fill_opacity | |
: 0.3 | |
); | |
//don't transition if config says not to | |
var areaPathTransitions = this.config.transitions ? areaPaths.transition() : areaPaths; | |
areaPathTransitions.attr('d', area_drawer); | |
return area_grps; | |
} | |
function drawBars(marks) { | |
var _this = this; | |
var rawData = this.raw_data; | |
var config = this.config; | |
var bar_supergroups = this.svg.selectAll('.bar-supergroup').data(marks, function(d, i) { | |
return i + '-' + d.per.join('-'); | |
}); | |
bar_supergroups.enter().append('g').attr('class', function(d) { | |
return 'supergroup bar-supergroup ' + d.id; | |
}); | |
bar_supergroups.exit().remove(); | |
var bar_groups = bar_supergroups.selectAll('.bar-group').data( | |
function(d) { | |
return d.data; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var old_bar_groups = bar_groups.exit(); | |
var nu_bar_groups = void 0; | |
var bars = void 0; | |
var oldBarsTrans = config.transitions | |
? old_bar_groups.selectAll('.bar').transition() | |
: old_bar_groups.selectAll('.bar'); | |
var oldBarGroupsTrans = config.transitions ? old_bar_groups.transition() : old_bar_groups; | |
if (config.x.type === 'ordinal') { | |
oldBarsTrans.attr('y', this.y(0)).attr('height', 0); | |
oldBarGroupsTrans.remove(); | |
nu_bar_groups = bar_groups.enter().append('g').attr('class', function(d) { | |
return 'bar-group ' + d.key; | |
}); | |
nu_bar_groups.append('title'); | |
bars = bar_groups.selectAll('rect').data( | |
function(d) { | |
return d.values instanceof Array | |
? d.values.sort(function(a, b) { | |
return ( | |
_this.colorScale.domain().indexOf(b.key) - | |
_this.colorScale.domain().indexOf(a.key) | |
); | |
}) | |
: [d]; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var exitBars = config.transitions ? bars.exit().transition() : bars.exit(); | |
exitBars.attr('y', this.y(0)).attr('height', 0).remove(); | |
bars | |
.enter() | |
.append('rect') | |
.attr('class', function(d) { | |
return 'wc-data-mark bar ' + d.key; | |
}) | |
.style('clip-path', 'url(#' + this.id + ')') | |
.attr('y', this.y(0)) | |
.attr('height', 0) | |
.append('title'); | |
bars | |
.attr('shape-rendering', 'crispEdges') | |
.attr('stroke', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}) | |
.attr('fill', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}); | |
bars.each(function(d) { | |
var mark = d3.select(this.parentNode.parentNode).datum(); | |
d.tooltip = mark.tooltip; | |
d.arrange = mark.split && mark.arrange | |
? mark.arrange | |
: mark.split ? 'grouped' : null; | |
d.subcats = config.legend.order | |
? config.legend.order.slice().reverse() | |
: mark.values && mark.values[mark.split] | |
? mark.values[mark.split] | |
: d3 | |
.set( | |
rawData.map(function(m) { | |
return m[mark.split]; | |
}) | |
) | |
.values(); | |
d3.select(this).attr(mark.attributes); | |
}); | |
var xformat = config.marks | |
.map(function(m) { | |
return m.summarizeX === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.x.format); | |
var yformat = config.marks | |
.map(function(m) { | |
return m.summarizeY === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.y.format); | |
bars.select('title').text(function(d) { | |
var tt = d.tooltip || ''; | |
return tt | |
.replace(/\$x/g, xformat(d.values.x)) | |
.replace(/\$y/g, yformat(d.values.y)) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
var barsTrans = config.transitions ? bars.transition() : bars; | |
barsTrans | |
.attr('x', function(d) { | |
var position = void 0; | |
if (!d.arrange || d.arrange === 'stacked') { | |
return _this.x(d.values.x); | |
} else if (d.arrange === 'nested') { | |
var _position = d.subcats.indexOf(d.key); | |
var offset = _position | |
? _this.x.rangeBand() / (d.subcats.length * 0.75) / _position | |
: _this.x.rangeBand(); | |
return _this.x(d.values.x) + (_this.x.rangeBand() - offset) / 2; | |
} else { | |
position = d.subcats.indexOf(d.key); | |
return ( | |
_this.x(d.values.x) + _this.x.rangeBand() / d.subcats.length * position | |
); | |
} | |
}) | |
.attr('y', function(d) { | |
if (d.arrange !== 'stacked') { | |
return _this.y(d.values.y); | |
} else { | |
return _this.y(d.values.start); | |
} | |
}) | |
.attr('width', function(d) { | |
if (!d.arrange || d.arrange === 'stacked') { | |
return _this.x.rangeBand(); | |
} else if (d.arrange === 'nested') { | |
var position = d.subcats.indexOf(d.key); | |
return position | |
? _this.x.rangeBand() / (d.subcats.length * 0.75) / position | |
: _this.x.rangeBand(); | |
} else { | |
return _this.x.rangeBand() / d.subcats.length; | |
} | |
}) | |
.attr('height', function(d) { | |
return _this.y(0) - _this.y(d.values.y); | |
}); | |
} else if (config.y.type === 'ordinal') { | |
oldBarsTrans.attr('x', this.x(0)).attr('width', 0); | |
oldBarGroupsTrans.remove(); | |
nu_bar_groups = bar_groups.enter().append('g').attr('class', function(d) { | |
return 'bar-group ' + d.key; | |
}); | |
nu_bar_groups.append('title'); | |
bars = bar_groups.selectAll('rect').data( | |
function(d) { | |
return d.values instanceof Array | |
? d.values.sort(function(a, b) { | |
return ( | |
_this.colorScale.domain().indexOf(b.key) - | |
_this.colorScale.domain().indexOf(a.key) | |
); | |
}) | |
: [d]; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var _exitBars = config.transitions ? bars.exit().transition() : bars.exit(); | |
_exitBars.attr('x', this.x(0)).attr('width', 0).remove(); | |
bars | |
.enter() | |
.append('rect') | |
.attr('class', function(d) { | |
return 'wc-data-mark bar ' + d.key; | |
}) | |
.style('clip-path', 'url(#' + this.id + ')') | |
.attr('x', this.x(0)) | |
.attr('width', 0) | |
.append('title'); | |
bars | |
.attr('shape-rendering', 'crispEdges') | |
.attr('stroke', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}) | |
.attr('fill', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}); | |
bars.each(function(d) { | |
var mark = d3.select(this.parentNode.parentNode).datum(); | |
d.arrange = mark.split && mark.arrange | |
? mark.arrange | |
: mark.split ? 'grouped' : null; | |
d.subcats = config.legend.order | |
? config.legend.order.slice().reverse() | |
: mark.values && mark.values[mark.split] | |
? mark.values[mark.split] | |
: d3 | |
.set( | |
rawData.map(function(m) { | |
return m[mark.split]; | |
}) | |
) | |
.values(); | |
d.tooltip = mark.tooltip; | |
d3.select(this).attr(mark.attributes); | |
}); | |
var _xformat = config.marks | |
.map(function(m) { | |
return m.summarizeX === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.x.format); | |
var _yformat = config.marks | |
.map(function(m) { | |
return m.summarizeY === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.y.format); | |
bars.select('title').text(function(d) { | |
var tt = d.tooltip || ''; | |
return tt | |
.replace(/\$x/g, _xformat(d.values.x)) | |
.replace(/\$y/g, _yformat(d.values.y)) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
var _barsTrans = config.transitions ? bars.transition() : bars; | |
_barsTrans | |
.attr('x', function(d) { | |
if (d.arrange === 'stacked' || !d.arrange) { | |
return d.values.start !== undefined ? _this.x(d.values.start) : _this.x(0); | |
} else { | |
return _this.x(0); | |
} | |
}) | |
.attr('y', function(d) { | |
if (d.arrange === 'nested') { | |
var position = d.subcats.indexOf(d.key); | |
var offset = position | |
? _this.y.rangeBand() / (d.subcats.length * 0.75) / position | |
: _this.y.rangeBand(); | |
return _this.y(d.values.y) + (_this.y.rangeBand() - offset) / 2; | |
} else if (d.arrange === 'grouped') { | |
var _position2 = d.subcats.indexOf(d.key); | |
return ( | |
_this.y(d.values.y) + | |
_this.y.rangeBand() / d.subcats.length * _position2 | |
); | |
} else { | |
return _this.y(d.values.y); | |
} | |
}) | |
.attr('width', function(d) { | |
return _this.x(d.values.x) - _this.x(0); | |
}) | |
.attr('height', function(d) { | |
if (config.y.type === 'quantile') { | |
return 20; | |
} else if (d.arrange === 'nested') { | |
var position = d.subcats.indexOf(d.key); | |
return position | |
? _this.y.rangeBand() / (d.subcats.length * 0.75) / position | |
: _this.y.rangeBand(); | |
} else if (d.arrange === 'grouped') { | |
return _this.y.rangeBand() / d.subcats.length; | |
} else { | |
return _this.y.rangeBand(); | |
} | |
}); | |
} else if (['linear', 'log'].indexOf(config.x.type) > -1 && config.x.bin) { | |
oldBarsTrans.attr('y', this.y(0)).attr('height', 0); | |
oldBarGroupsTrans.remove(); | |
nu_bar_groups = bar_groups.enter().append('g').attr('class', function(d) { | |
return 'bar-group ' + d.key; | |
}); | |
nu_bar_groups.append('title'); | |
bars = bar_groups.selectAll('rect').data( | |
function(d) { | |
return d.values instanceof Array ? d.values : [d]; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var _exitBars2 = config.transitions ? bars.exit().transition() : bars.exit(); | |
_exitBars2.attr('y', this.y(0)).attr('height', 0).remove(); | |
bars | |
.enter() | |
.append('rect') | |
.attr('class', function(d) { | |
return 'wc-data-mark bar ' + d.key; | |
}) | |
.style('clip-path', 'url(#' + this.id + ')') | |
.attr('y', this.y(0)) | |
.attr('height', 0) | |
.append('title'); | |
bars | |
.attr('shape-rendering', 'crispEdges') | |
.attr('stroke', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}) | |
.attr('fill', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}); | |
bars.each(function(d) { | |
var mark = d3.select(this.parentNode.parentNode).datum(); | |
d.arrange = mark.split ? mark.arrange : null; | |
d.subcats = config.legend.order | |
? config.legend.order.slice().reverse() | |
: mark.values && mark.values[mark.split] | |
? mark.values[mark.split] | |
: d3 | |
.set( | |
rawData.map(function(m) { | |
return m[mark.split]; | |
}) | |
) | |
.values(); | |
d3.select(this).attr(mark.attributes); | |
var parent = d3.select(this.parentNode).datum(); | |
var rangeSet = parent.key.split(',').map(function(m) { | |
return +m; | |
}); | |
d.rangeLow = d3.min(rangeSet); | |
d.rangeHigh = d3.max(rangeSet); | |
d.tooltip = mark.tooltip; | |
}); | |
var _xformat2 = config.marks | |
.map(function(m) { | |
return m.summarizeX === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.x.format); | |
var _yformat2 = config.marks | |
.map(function(m) { | |
return m.summarizeY === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.y.format); | |
bars.select('title').text(function(d) { | |
var tt = d.tooltip || ''; | |
return tt | |
.replace(/\$x/g, _xformat2(d.values.x)) | |
.replace(/\$y/g, _yformat2(d.values.y)) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
var _barsTrans2 = config.transitions ? bars.transition() : bars; | |
_barsTrans2 | |
.attr('x', function(d) { | |
return _this.x(d.rangeLow); | |
}) | |
.attr('y', function(d) { | |
if (d.arrange !== 'stacked') { | |
return _this.y(d.values.y); | |
} else { | |
return _this.y(d.values.start); | |
} | |
}) | |
.attr('width', function(d) { | |
return _this.x(d.rangeHigh) - _this.x(d.rangeLow); | |
}) | |
.attr('height', function(d) { | |
return _this.y(0) - _this.y(d.values.y); | |
}); | |
} else if ( | |
['linear', 'log'].indexOf(config.y.type) > -1 && | |
config.y.type === 'linear' && | |
config.y.bin | |
) { | |
oldBarsTrans.attr('x', this.x(0)).attr('width', 0); | |
oldBarGroupsTrans.remove(); | |
nu_bar_groups = bar_groups.enter().append('g').attr('class', function(d) { | |
return 'bar-group ' + d.key; | |
}); | |
nu_bar_groups.append('title'); | |
bars = bar_groups.selectAll('rect').data( | |
function(d) { | |
return d.values instanceof Array ? d.values : [d]; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var _exitBars3 = config.transitions ? bars.exit().transition() : bars.exit(); | |
_exitBars3.attr('x', this.x(0)).attr('width', 0).remove(); | |
bars | |
.enter() | |
.append('rect') | |
.attr('class', function(d) { | |
return 'wc-data-mark bar ' + d.key; | |
}) | |
.style('clip-path', 'url(#' + this.id + ')') | |
.attr('x', this.x(0)) | |
.attr('width', 0) | |
.append('title'); | |
bars | |
.attr('shape-rendering', 'crispEdges') | |
.attr('stroke', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}) | |
.attr('fill', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}); | |
bars.each(function(d) { | |
var mark = d3.select(this.parentNode.parentNode).datum(); | |
d.arrange = mark.split ? mark.arrange : null; | |
d.subcats = config.legend.order | |
? config.legend.order.slice().reverse() | |
: mark.values && mark.values[mark.split] | |
? mark.values[mark.split] | |
: d3 | |
.set( | |
rawData.map(function(m) { | |
return m[mark.split]; | |
}) | |
) | |
.values(); | |
var parent = d3.select(this.parentNode).datum(); | |
var rangeSet = parent.key.split(',').map(function(m) { | |
return +m; | |
}); | |
d.rangeLow = d3.min(rangeSet); | |
d.rangeHigh = d3.max(rangeSet); | |
d.tooltip = mark.tooltip; | |
}); | |
var _xformat3 = config.marks | |
.map(function(m) { | |
return m.summarizeX === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.x.format); | |
var _yformat3 = config.marks | |
.map(function(m) { | |
return m.summarizeY === 'percent'; | |
}) | |
.indexOf(true) > -1 | |
? d3.format('0%') | |
: d3.format(config.y.format); | |
bars.select('title').text(function(d) { | |
var tt = d.tooltip || ''; | |
return tt | |
.replace(/\$x/g, _xformat3(d.values.x)) | |
.replace(/\$y/g, _yformat3(d.values.y)) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
var _barsTrans3 = config.transitions ? bars.transition() : bars; | |
_barsTrans3 | |
.attr('x', function(d) { | |
if (d.arrange === 'stacked') { | |
return _this.x(d.values.start); | |
} else { | |
return _this.x(0); | |
} | |
}) | |
.attr('y', function(d) { | |
return _this.y(d.rangeHigh); | |
}) | |
.attr('width', function(d) { | |
return _this.x(d.values.x); | |
}) | |
.attr('height', function(d) { | |
return _this.y(d.rangeLow) - _this.y(d.rangeHigh); | |
}); | |
} else { | |
oldBarsTrans.attr('y', this.y(0)).attr('height', 0); | |
oldBarGroupsTrans.remove(); | |
bar_supergroups.remove(); | |
} | |
//Link to the d3.selection from the data | |
bar_supergroups.each(function(d) { | |
d.supergroup = d3.select(this); | |
d.groups = d.supergroup.selectAll('.bar-group'); | |
}); | |
} | |
function drawLines(marks) { | |
var _this = this; | |
var config = this.config; | |
var line = d3.svg | |
.line() | |
.interpolate(config.interpolate) | |
.x(function(d) { | |
return config.x.type === 'linear' || config.x.type == 'log' | |
? _this.x(+d.values.x) | |
: config.x.type === 'time' | |
? _this.x(new Date(d.values.x)) | |
: _this.x(d.values.x) + _this.x.rangeBand() / 2; | |
}) | |
.y(function(d) { | |
return config.y.type === 'linear' || config.y.type == 'log' | |
? _this.y(+d.values.y) | |
: config.y.type === 'time' | |
? _this.y(new Date(d.values.y)) | |
: _this.y(d.values.y) + _this.y.rangeBand() / 2; | |
}); | |
var line_supergroups = this.svg.selectAll('.line-supergroup').data(marks, function(d, i) { | |
return i + '-' + d.per.join('-'); | |
}); | |
line_supergroups.enter().append('g').attr('class', function(d) { | |
return 'supergroup line-supergroup ' + d.id; | |
}); | |
line_supergroups.exit().remove(); | |
var line_grps = line_supergroups.selectAll('.line').data( | |
function(d) { | |
return d.data; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
line_grps.exit().remove(); | |
var nu_line_grps = line_grps.enter().append('g').attr('class', function(d) { | |
return d.key + ' line'; | |
}); | |
nu_line_grps.append('path'); | |
nu_line_grps.append('title'); | |
var linePaths = line_grps | |
.select('path') | |
.attr('class', 'wc-data-mark') | |
.datum(function(d) { | |
return d.values; | |
}) | |
.attr('stroke', function(d) { | |
return _this.colorScale(d[0].values.raw[0][config.color_by]); | |
}) | |
.attr( | |
'stroke-width', | |
config.stroke_width ? config.stroke_width : config.flex_stroke_width | |
) | |
.attr('stroke-linecap', 'round') | |
.attr('fill', 'none'); | |
var linePathsTrans = config.transitions ? linePaths.transition() : linePaths; | |
linePathsTrans.attr('d', line); | |
line_grps.each(function(d) { | |
var mark = d3.select(this.parentNode).datum(); | |
d.tooltip = mark.tooltip; | |
d3.select(this).select('path').attr(mark.attributes); | |
}); | |
line_grps.select('title').text(function(d) { | |
var tt = d.tooltip || ''; | |
var xformat = config.x.summary === 'percent' | |
? d3.format('0%') | |
: d3.format(config.x.format); | |
var yformat = config.y.summary === 'percent' | |
? d3.format('0%') | |
: d3.format(config.y.format); | |
return tt | |
.replace(/\$x/g, xformat(d.values.x)) | |
.replace(/\$y/g, yformat(d.values.y)) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values[0].values.raw[0][orig]; | |
}); | |
}); | |
//Link to the d3.selection from the data | |
line_supergroups.each(function(d) { | |
d.supergroup = d3.select(this); | |
d.groups = d.supergroup.selectAll('g.line'); | |
d.paths = d.groups.select('path'); | |
}); | |
return line_grps; | |
} | |
function drawPoints(marks) { | |
var _this = this; | |
var config = this.config; | |
var point_supergroups = this.svg.selectAll('.point-supergroup').data(marks, function(d, i) { | |
return i + '-' + d.per.join('-'); | |
}); | |
point_supergroups.enter().append('g').attr('class', function(d) { | |
return 'supergroup point-supergroup ' + d.id; | |
}); | |
point_supergroups.exit().remove(); | |
var points = point_supergroups.selectAll('.point').data( | |
function(d) { | |
return d.data; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var oldPoints = points.exit(); | |
var oldPointsTrans = config.transitions | |
? oldPoints.selectAll('circle').transition() | |
: oldPoints.selectAll('circle'); | |
oldPointsTrans.attr('r', 0); | |
var oldPointGroupTrans = config.transitions ? oldPoints.transition() : oldPoints; | |
oldPointGroupTrans.remove(); | |
var nupoints = points.enter().append('g').attr('class', function(d) { | |
return d.key + ' point'; | |
}); | |
nupoints.append('circle').attr('class', 'wc-data-mark').attr('r', 0); | |
nupoints.append('title'); | |
//static attributes | |
points | |
.select('circle') | |
.attr( | |
'fill-opacity', | |
config.fill_opacity || config.fill_opacity === 0 ? config.fill_opacity : 0.6 | |
) | |
.attr('fill', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}) | |
.attr('stroke', function(d) { | |
return _this.colorScale(d.values.raw[0][config.color_by]); | |
}); | |
//attach mark info | |
points.each(function(d) { | |
var mark = d3.select(this.parentNode).datum(); | |
d.mark = mark; | |
d3.select(this).select('circle').attr(mark.attributes); | |
}); | |
//animated attributes | |
var pointsTrans = config.transitions | |
? points.select('circle').transition() | |
: points.select('circle'); | |
pointsTrans | |
.attr('r', function(d) { | |
return d.mark.radius || config.flex_point_size; | |
}) | |
.attr('cx', function(d) { | |
var x_pos = _this.x(d.values.x) || 0; | |
return config.x.type === 'ordinal' ? x_pos + _this.x.rangeBand() / 2 : x_pos; | |
}) | |
.attr('cy', function(d) { | |
var y_pos = _this.y(d.values.y) || 0; | |
return config.y.type === 'ordinal' ? y_pos + _this.y.rangeBand() / 2 : y_pos; | |
}); | |
points.select('title').text(function(d) { | |
var tt = d.mark.tooltip || ''; | |
var xformat = config.x.summary === 'percent' | |
? d3.format('0%') | |
: config.x.type === 'time' | |
? d3.time.format(config.x.format) | |
: d3.format(config.x.format); | |
var yformat = config.y.summary === 'percent' | |
? d3.format('0%') | |
: config.y.type === 'time' | |
? d3.time.format(config.y.format) | |
: d3.format(config.y.format); | |
return tt | |
.replace( | |
/\$x/g, | |
config.x.type === 'time' ? xformat(new Date(d.values.x)) : xformat(d.values.x) | |
) | |
.replace( | |
/\$y/g, | |
config.y.type === 'time' ? yformat(new Date(d.values.y)) : yformat(d.values.y) | |
) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
//Link to the d3.selection from the data | |
point_supergroups.each(function(d) { | |
d.supergroup = d3.select(this); | |
d.groups = d.supergroup.selectAll('g.point'); | |
d.circles = d.groups.select('circle'); | |
}); | |
return points; | |
} | |
function drawText(marks) { | |
var _this = this; | |
var config = this.config; | |
var textSupergroups = this.svg.selectAll('.text-supergroup').data(marks, function(d, i) { | |
return i + '-' + d.per.join('-'); | |
}); | |
textSupergroups.enter().append('g').attr('class', function(d) { | |
return 'supergroup text-supergroup ' + d.id; | |
}); | |
textSupergroups.exit().remove(); | |
var texts = textSupergroups.selectAll('.text').data( | |
function(d) { | |
return d.data; | |
}, | |
function(d) { | |
return d.key; | |
} | |
); | |
var oldTexts = texts.exit(); | |
// don't need to transition position of outgoing text | |
// const oldTextsTrans = config.transitions ? oldTexts.selectAll('text').transition() : oldTexts.selectAll('text'); | |
var oldTextGroupTrans = config.transitions ? oldTexts.transition() : oldTexts; | |
oldTextGroupTrans.remove(); | |
var nutexts = texts.enter().append('g').attr('class', function(d) { | |
return d.key + ' text'; | |
}); | |
nutexts.append('text').attr('class', 'wc-data-mark'); | |
// don't need to set initial location for incoming text | |
// attach mark info | |
function attachMarks(d) { | |
d.mark = d3.select(this.parentNode).datum(); | |
d3.select(this).select('text').attr(d.mark.attributes); | |
} | |
texts.each(attachMarks); | |
// parse text like tooltips | |
texts.select('text').text(function(d) { | |
var tt = d.mark.text || ''; | |
var xformat = config.x.summary === 'percent' | |
? d3.format('0%') | |
: config.x.type === 'time' | |
? d3.time.format(config.x.format) | |
: d3.format(config.x.format); | |
var yformat = config.y.summary === 'percent' | |
? d3.format('0%') | |
: config.y.type === 'time' | |
? d3.time.format(config.y.format) | |
: d3.format(config.y.format); | |
return tt | |
.replace( | |
/\$x/g, | |
config.x.type === 'time' ? xformat(new Date(d.values.x)) : xformat(d.values.x) | |
) | |
.replace( | |
/\$y/g, | |
config.y.type === 'time' ? yformat(new Date(d.values.y)) : yformat(d.values.y) | |
) | |
.replace(/\[(.+?)\]/g, function(str, orig) { | |
return d.values.raw[0][orig]; | |
}); | |
}); | |
// animated attributes | |
var textsTrans = config.transitions | |
? texts.select('text').transition() | |
: texts.select('text'); | |
textsTrans | |
.attr('x', function(d) { | |
var xPos = _this.x(d.values.x) || 0; | |
return config.x.type === 'ordinal' ? xPos + _this.x.rangeBand() / 2 : xPos; | |
}) | |
.attr('y', function(d) { | |
var yPos = _this.y(d.values.y) || 0; | |
return config.y.type === 'ordinal' ? yPos + _this.y.rangeBand() / 2 : yPos; | |
}); | |
//add a reference to the selection from it's data | |
textSupergroups.each(function(d) { | |
d.supergroup = d3.select(this); | |
d.groups = d.supergroup.selectAll('g.text'); | |
d.texts = d.groups.select('text'); | |
}); | |
return texts; | |
} | |
function destroy() { | |
var destroyControls = arguments.length > 0 && arguments[0] !== undefined | |
? arguments[0] | |
: true; | |
//run onDestroy callback | |
this.events.onDestroy.call(this); | |
//remove resize event listener | |
var context = this; | |
d3.select(window).on('resize.' + context.element + context.id, null); | |
//destroy controls | |
if (destroyControls && this.controls) { | |
this.controls.destroy(); | |
} | |
//unmount chart wrapper | |
this.wrap.remove(); | |
} | |
var chartProto = { | |
raw_data: [], | |
config: {} | |
}; | |
var chart = Object.create(chartProto, { | |
checkRequired: { value: checkRequired }, | |
consolidateData: { value: consolidateData }, | |
draw: { value: draw }, | |
destroy: { value: destroy }, | |
drawArea: { value: drawArea }, | |
drawBars: { value: drawBars }, | |
drawGridlines: { value: drawGridLines }, | |
drawLines: { value: drawLines }, | |
drawPoints: { value: drawPoints }, | |
drawText: { value: drawText }, | |
init: { value: init }, | |
layout: { value: layout }, | |
makeLegend: { value: makeLegend }, | |
resize: { value: resize }, | |
setColorScale: { value: setColorScale }, | |
setDefaults: { value: setDefaults }, | |
setMargins: { value: setMargins }, | |
textSize: { value: textSize }, | |
transformData: { value: transformData }, | |
updateDataMarks: { value: updateDataMarks }, | |
xScaleAxis: { value: xScaleAxis }, | |
yScaleAxis: { value: yScaleAxis } | |
}); | |
var chartCount = 0; | |
function createChart() { | |
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'body'; | |
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
var controls = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | |
var thisChart = Object.create(chart); | |
thisChart.div = element; | |
thisChart.config = Object.create(config); | |
thisChart.controls = controls; | |
thisChart.raw_data = []; | |
thisChart.filters = []; | |
thisChart.marks = []; | |
thisChart.wrap = d3.select(thisChart.div).append('div').datum(thisChart); | |
thisChart.events = { | |
onInit: function onInit() {}, | |
onLayout: function onLayout() {}, | |
onPreprocess: function onPreprocess() {}, | |
onDatatransform: function onDatatransform() {}, | |
onDraw: function onDraw() {}, | |
onResize: function onResize() {}, | |
onDestroy: function onDestroy() {} | |
}; | |
thisChart.on = function(event, callback) { | |
var possible_events = [ | |
'init', | |
'layout', | |
'preprocess', | |
'datatransform', | |
'draw', | |
'resize', | |
'destroy' | |
]; | |
if (possible_events.indexOf(event) < 0) { | |
return; | |
} | |
if (callback) { | |
thisChart.events['on' + event.charAt(0).toUpperCase() + event.slice(1)] = callback; | |
} | |
}; | |
//increment thisChart count to get unique thisChart id | |
chartCount++; | |
thisChart.id = chartCount; | |
return thisChart; | |
} | |
function changeOption(option, value, callback) { | |
var _this = this; | |
this.targets.forEach(function(e) { | |
if (option instanceof Array) { | |
option.forEach(function(o) { | |
return _this.stringAccessor(e.config, o, value); | |
}); | |
} else { | |
_this.stringAccessor(e.config, option, value); | |
} | |
//call callback function if provided | |
if (callback) { | |
callback(); | |
} | |
e.draw(); | |
}); | |
} | |
function checkRequired$1(dataset) { | |
if (!dataset[0] || !this.config.inputs) { | |
return; | |
} | |
var colnames = d3.keys(dataset[0]); | |
this.config.inputs.forEach(function(e, i) { | |
if (e.type === 'subsetter' && colnames.indexOf(e.value_col) === -1) { | |
throw new Error( | |
'Error in settings object: the value "' + | |
e.value_col + | |
'" does not match any column in the provided dataset.' | |
); | |
} | |
}); | |
} | |
function controlUpdate() { | |
var _this = this; | |
if (this.config.inputs && this.config.inputs.length && this.config.inputs[0]) { | |
this.config.inputs.forEach(function(e) { | |
return _this.makeControlItem(e); | |
}); | |
} | |
} | |
function destroy$1() { | |
//unmount controls wrapper | |
this.wrap.remove(); | |
} | |
function init$1(data) { | |
this.data = data; | |
if (!this.config.builder) { | |
this.checkRequired(this.data); | |
} | |
this.layout(); | |
} | |
function layout$1() { | |
this.wrap.selectAll('*').remove(); | |
this.ready = true; | |
this.controlUpdate(); | |
} | |
function makeControlItem(control) { | |
var control_wrap = this.wrap | |
.append('div') | |
.attr('class', 'control-group') | |
.classed('inline', control.inline) | |
.datum(control); | |
var ctrl_label = control_wrap | |
.append('span') | |
.attr('class', 'wc-control-label') | |
.text(control.label); | |
if (control.required) { | |
ctrl_label.append('span').attr('class', 'label label-required').text('Required'); | |
} | |
control_wrap.append('span').attr('class', 'span-description').text(control.description); | |
if (control.type === 'text') { | |
this.makeTextControl(control, control_wrap); | |
} else if (control.type === 'number') { | |
this.makeNumberControl(control, control_wrap); | |
} else if (control.type === 'list') { | |
this.makeListControl(control, control_wrap); | |
} else if (control.type === 'dropdown') { | |
this.makeDropdownControl(control, control_wrap); | |
} else if (control.type === 'btngroup') { | |
this.makeBtnGroupControl(control, control_wrap); | |
} else if (control.type === 'checkbox') { | |
this.makeCheckboxControl(control, control_wrap); | |
} else if (control.type === 'radio') { | |
this.makeRadioControl(control, control_wrap); | |
} else if (control.type === 'subsetter') { | |
this.makeSubsetterControl(control, control_wrap); | |
} else { | |
throw new Error( | |
'Each control must have a type! Choose from: "text", "number", "list", "dropdown", "btngroup", "checkbox", "radio", "subsetter"' | |
); | |
} | |
} | |
function makeBtnGroupControl(control, control_wrap) { | |
var _this = this; | |
var option_data = control.values ? control.values : d3.keys(this.data[0]); | |
var btn_wrap = control_wrap.append('div').attr('class', 'btn-group'); | |
var changers = btn_wrap | |
.selectAll('button') | |
.data(option_data) | |
.enter() | |
.append('button') | |
.attr('class', 'btn btn-default btn-sm') | |
.text(function(d) { | |
return d; | |
}) | |
.classed('btn-primary', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option) === d; | |
}); | |
changers.on('click', function(d) { | |
changers.each(function(e) { | |
d3.select(this).classed('btn-primary', e === d); | |
}); | |
_this.changeOption(control.option, d, control.callback); | |
}); | |
} | |
function makeCheckboxControl(control, control_wrap) { | |
var _this = this; | |
var changer = control_wrap | |
.append('input') | |
.attr('type', 'checkbox') | |
.attr('class', 'changer') | |
.datum(control) | |
.property('checked', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option); | |
}); | |
changer.on('change', function(d) { | |
var value = changer.property('checked'); | |
_this.changeOption(d.option, value, control.callback); | |
}); | |
} | |
function makeDropdownControl(control, control_wrap) { | |
var _this = this; | |
var mainOption = control.option || control.options[0]; | |
var changer = control_wrap | |
.append('select') | |
.attr('class', 'changer') | |
.attr('multiple', control.multiple ? true : null) | |
.datum(control); | |
var opt_values = control.values && control.values instanceof Array | |
? control.values | |
: control.values | |
? d3 | |
.set( | |
this.data.map(function(m) { | |
return m[_this.targets[0].config[control.values]]; | |
}) | |
) | |
.values() | |
: d3.keys(this.data[0]); | |
if (!control.require || control.none) { | |
opt_values.unshift('None'); | |
} | |
var options = changer | |
.selectAll('option') | |
.data(opt_values) | |
.enter() | |
.append('option') | |
.text(function(d) { | |
return d; | |
}) | |
.property('selected', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, mainOption) === d; | |
}); | |
changer.on('change', function(d) { | |
var value = changer.property('value') === 'None' ? null : changer.property('value'); | |
if (control.multiple) { | |
value = options | |
.filter(function(f) { | |
return d3.select(this).property('selected'); | |
})[0] | |
.map(function(m) { | |
return d3.select(m).property('value'); | |
}) | |
.filter(function(f) { | |
return f !== 'None'; | |
}); | |
} | |
if (control.options) { | |
_this.changeOption(control.options, value, control.callback); | |
} else { | |
_this.changeOption(control.option, value, control.callback); | |
} | |
}); | |
return changer; | |
} | |
function makeListControl(control, control_wrap) { | |
var _this = this; | |
var changer = control_wrap | |
.append('input') | |
.attr('type', 'text') | |
.attr('class', 'changer') | |
.datum(control) | |
.property('value', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option); | |
}); | |
changer.on('change', function(d) { | |
var value = changer.property('value') | |
? changer.property('value').split(',').map(function(m) { | |
return m.trim(); | |
}) | |
: null; | |
_this.changeOption(control.option, value, control.callback); | |
}); | |
} | |
function makeNumberControl(control, control_wrap) { | |
var _this = this; | |
var changer = control_wrap | |
.append('input') | |
.attr('type', 'number') | |
.attr('min', control.min !== undefined ? control.min : 0) | |
.attr('max', control.max) | |
.attr('step', control.step || 1) | |
.attr('class', 'changer') | |
.datum(control) | |
.property('value', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option); | |
}); | |
changer.on('change', function(d) { | |
var value = +changer.property('value'); | |
_this.changeOption(control.option, value, control.callback); | |
}); | |
} | |
function makeRadioControl(control, control_wrap) { | |
var _this = this; | |
var changers = control_wrap | |
.selectAll('label') | |
.data(control.values || d3.keys(this.data[0])) | |
.enter() | |
.append('label') | |
.attr('class', 'radio') | |
.text(function(d, i) { | |
return control.relabels ? control.relabels[i] : d; | |
}) | |
.append('input') | |
.attr('type', 'radio') | |
.attr('class', 'changer') | |
.attr('name', control.option.replace('.', '-') + '-' + this.targets[0].id) | |
.property('value', function(d) { | |
return d; | |
}) | |
.property('checked', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option) === d; | |
}); | |
changers.on('change', function(d) { | |
var value = null; | |
changers.each(function(c) { | |
if (d3.select(this).property('checked')) { | |
value = d3.select(this).property('value') === 'none' ? null : c; | |
} | |
}); | |
_this.changeOption(control.option, value, control.callback); | |
}); | |
} | |
function makeSubsetterControl(control, control_wrap) { | |
var targets = this.targets; | |
var changer = control_wrap | |
.append('select') | |
.attr('class', 'changer') | |
.attr('multiple', control.multiple ? true : null) | |
.datum(control); | |
var option_data = control.values | |
? control.values | |
: d3 | |
.set( | |
this.data | |
.map(function(m) { | |
return m[control.value_col]; | |
}) | |
.filter(function(f) { | |
return f; | |
}) | |
) | |
.values(); | |
option_data.sort(naturalSorter); | |
control.start = control.start ? control.start : control.loose ? option_data[0] : null; | |
if (!control.multiple && !control.start) { | |
option_data.unshift('All'); | |
} | |
control.loose = !control.loose && control.start ? true : control.loose; | |
var options = changer | |
.selectAll('option') | |
.data(option_data) | |
.enter() | |
.append('option') | |
.text(function(d) { | |
return d; | |
}) | |
.property('selected', function(d) { | |
return d === control.start; | |
}); | |
targets.forEach(function(e) { | |
var match = e.filters | |
.slice() | |
.map(function(m) { | |
return m.col === control.value_col; | |
}) | |
.indexOf(true); | |
if (match > -1) { | |
e.filters[match] = { | |
col: control.value_col, | |
val: control.start ? control.start : 'All', | |
choices: option_data, | |
loose: control.loose | |
}; | |
} else { | |
e.filters.push({ | |
col: control.value_col, | |
val: control.start ? control.start : 'All', | |
choices: option_data, | |
loose: control.loose | |
}); | |
} | |
}); | |
function setSubsetter(target, obj) { | |
var match = -1; | |
target.filters.forEach(function(e, i) { | |
if (e.col === obj.col) { | |
match = i; | |
} | |
}); | |
if (match > -1) { | |
target.filters[match] = obj; | |
} | |
} | |
changer.on('change', function(d) { | |
if (control.multiple) { | |
var values = options | |
.filter(function(f) { | |
return d3.select(this).property('selected'); | |
})[0] | |
.map(function(m) { | |
return d3.select(m).property('text'); | |
}); | |
var new_filter = { | |
col: control.value_col, | |
val: values, | |
choices: option_data, | |
loose: control.loose | |
}; | |
targets.forEach(function(e) { | |
setSubsetter(e, new_filter); | |
//call callback function if provided | |
if (control.callback) { | |
control.callback(); | |
} | |
e.draw(); | |
}); | |
} else { | |
var value = d3.select(this).select('option:checked').property('text'); | |
var _new_filter = { | |
col: control.value_col, | |
val: value, | |
choices: option_data, | |
loose: control.loose | |
}; | |
targets.forEach(function(e) { | |
setSubsetter(e, _new_filter); | |
//call callback function if provided | |
if (control.callback) { | |
control.callback(); | |
} | |
e.draw(); | |
}); | |
} | |
}); | |
} | |
function makeTextControl(control, control_wrap) { | |
var _this = this; | |
var changer = control_wrap | |
.append('input') | |
.attr('type', 'text') | |
.attr('class', 'changer') | |
.datum(control) | |
.property('value', function(d) { | |
return _this.stringAccessor(_this.targets[0].config, control.option); | |
}); | |
changer.on('change', function(d) { | |
var value = changer.property('value'); | |
_this.changeOption(control.option, value, control.callback); | |
}); | |
} | |
function stringAccessor(o, s, v) { | |
//adapted from http://jsfiddle.net/alnitak/hEsys/ | |
s = s.replace(/\[(\w+)\]/g, '.$1'); | |
s = s.replace(/^\./, ''); | |
var a = s.split('.'); | |
for (var i = 0, n = a.length; i < n; ++i) { | |
var k = a[i]; | |
if (k in o) { | |
if (i == n - 1 && v !== undefined) o[k] = v; | |
o = o[k]; | |
} else { | |
return; | |
} | |
} | |
return o; | |
} | |
var controls = { | |
changeOption: changeOption, | |
checkRequired: checkRequired$1, | |
controlUpdate: controlUpdate, | |
destroy: destroy$1, | |
init: init$1, | |
layout: layout$1, | |
makeControlItem: makeControlItem, | |
makeBtnGroupControl: makeBtnGroupControl, | |
makeCheckboxControl: makeCheckboxControl, | |
makeDropdownControl: makeDropdownControl, | |
makeListControl: makeListControl, | |
makeNumberControl: makeNumberControl, | |
makeRadioControl: makeRadioControl, | |
makeSubsetterControl: makeSubsetterControl, | |
makeTextControl: makeTextControl, | |
stringAccessor: stringAccessor | |
}; | |
function createControls() { | |
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'body'; | |
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
var thisControls = Object.create(controls); | |
thisControls.div = element; | |
thisControls.config = Object.create(config); | |
thisControls.config.inputs = thisControls.config.inputs || []; | |
thisControls.targets = []; | |
if (config.location === 'bottom') { | |
thisControls.wrap = d3.select(element).append('div').attr('class', 'wc-controls'); | |
} else { | |
thisControls.wrap = d3 | |
.select(element) | |
.insert('div', ':first-child') | |
.attr('class', 'wc-controls'); | |
} | |
thisControls.wrap.datum(thisControls); | |
return thisControls; | |
} | |
var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' | |
? function(obj) { | |
return typeof obj; | |
} | |
: function(obj) { | |
return obj && | |
typeof Symbol === 'function' && | |
obj.constructor === Symbol && | |
obj !== Symbol.prototype | |
? 'symbol' | |
: typeof obj; | |
}; | |
function clone(obj) { | |
var copy = void 0; | |
//boolean, number, string, null, undefined | |
if ('object' != (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) || null == obj) | |
return obj; | |
//date | |
if (obj instanceof Date) { | |
copy = new Date(); | |
copy.setTime(obj.getTime()); | |
return copy; | |
} | |
//array | |
if (obj instanceof Array) { | |
copy = []; | |
for (var i = 0, len = obj.length; i < len; i++) { | |
copy[i] = clone(obj[i]); | |
} | |
return copy; | |
} | |
//object | |
if (obj instanceof Object) { | |
copy = {}; | |
for (var attr in obj) { | |
if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); | |
} | |
return copy; | |
} | |
throw new Error('Unable to copy [obj]! Its type is not supported.'); | |
} | |
function applyFilters() { | |
var _this = this; | |
//If there are filters, return a filtered data array of the raw data. | |
//Otherwise return the raw data. | |
this.data.filtered = this.filters | |
? clone(this.data.raw).filter(function(d) { | |
var match = true; | |
_this.filters.forEach(function(filter) { | |
if (match === true && filter.val !== 'All') | |
match = filter.val instanceof Array | |
? filter.val.indexOf(d[filter.col]) > -1 | |
: filter.val === d[filter.col]; | |
}); | |
return match; | |
}) | |
: clone(this.data.raw); | |
} | |
function updateDataObject() { | |
this.data.raw = this.data.passed; | |
this.data.filtered = this.data.passed; | |
this.config.activePage = 0; | |
this.config.startIndex = this.config.activePage * this.config.nRowsPerPage; // first row shown | |
this.config.endIndex = this.config.startIndex + this.config.nRowsPerPage; // last row shown | |
} | |
function applySearchTerm(data) { | |
var _this = this; | |
if (this.searchable.searchTerm) { | |
//Determine which rows contain input text. | |
this.data.searched = this.data.filtered.filter(function(d) { | |
var match = false; | |
Object.keys(d) | |
.filter(function(key) { | |
return _this.config.cols.indexOf(key) > -1; | |
}) | |
.forEach(function(var_name) { | |
if (match === false) { | |
var cellText = '' + d[var_name]; | |
match = | |
cellText.toLowerCase().indexOf(_this.searchable.searchTerm) > -1; | |
} | |
}); | |
return match; | |
}); | |
this.data.processing = this.data.searched; | |
} else { | |
//Otherwise delete previously searched data and set data to filtered data. | |
delete this.data.searched; | |
this.data.processing = this.data.filtered; | |
} | |
} | |
/*------------------------------------------------------------------------------------------------\ | |
Check equality of two arrays (https://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript) | |
\------------------------------------------------------------------------------------------------*/ | |
// Warn if overriding existing method | |
if (Array.prototype.equals) | |
console.warn( | |
"Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code." | |
); | |
// attach the .equals method to Array's prototype to call it on any array | |
Array.prototype.equals = function(array) { | |
// if the other array is a falsy value, return | |
if (!array) return false; | |
// compare lengths - can save a lot of time | |
if (this.length != array.length) return false; | |
for (var i = 0, l = this.length; i < l; i++) { | |
// Check if we have nested arrays | |
if (this[i] instanceof Array && array[i] instanceof Array) { | |
// recurse into the nested arrays | |
if (!this[i].equals(array[i])) return false; | |
} else if (this[i] != array[i]) { | |
// Warning - two different object instances will never be equal: {x:20} != {x:20} | |
return false; | |
} | |
} | |
return true; | |
}; | |
// Hide method from for-in loops | |
Object.defineProperty(Array.prototype, 'equals', { enumerable: false }); | |
function checkFilters() { | |
if (this.filters) { | |
this.currentFilters = this.filters.map(function(filter) { | |
return filter.val; | |
}); | |
//Reset pagination if filters have changed. | |
if (!this.currentFilters.equals(this.previousFilters)) { | |
this.config.activePage = 0; | |
this.config.startIndex = this.config.activePage * this.config.nRowsPerPage; // first row shown | |
this.config.endIndex = this.config.startIndex + this.config.nRowsPerPage; // last row shown | |
} | |
this.previousFilters = this.currentFilters; | |
} | |
} | |
function updateTableHeaders() { | |
var _this = this; | |
this.thead_cells = this.thead | |
.select('tr') | |
.selectAll('th') | |
.data(this.config.headers, function(d) { | |
return d; | |
}); | |
this.thead_cells.exit().remove(); | |
this.thead_cells.enter().append('th'); | |
this.thead_cells | |
.sort(function(a, b) { | |
return _this.config.headers.indexOf(a) - _this.config.headers.indexOf(b); | |
}) | |
.attr('class', function(d) { | |
return _this.config.cols[_this.config.headers.indexOf(d)]; | |
}) // associate column header with column name | |
.text(function(d) { | |
return d; | |
}); | |
} | |
function drawTableBody() { | |
var _this = this; | |
var table = this; | |
//Define table body rows. | |
var rows = this.tbody.selectAll('tr').data(this.data.processing).enter().append('tr'); | |
//Define table body cells. | |
var cells = rows.selectAll('td').data(function(d) { | |
return _this.config.cols.map(function(key) { | |
return { col: key, text: d[key] }; | |
}); | |
}); | |
cells.exit().remove(); | |
cells.enter().append('td'); | |
cells | |
.sort(function(a, b) { | |
return _this.config.cols.indexOf(a.col) - _this.config.cols.indexOf(b.col); | |
}) | |
.attr('class', function(d) { | |
return d.col; | |
}) | |
.each(function(d) { | |
var cell = d3.select(this); | |
//Apply text in data as html or as plain text. | |
if (table.config.as_html) { | |
cell.html(d.text); | |
} else { | |
cell.text(d.text); | |
} | |
}); | |
} | |
function dynamicLayout() { | |
var widths = { | |
table: this.table.select('thead').node().offsetWidth, | |
top: | |
this.wrap.select('.table-top .searchable-container').node().offsetWidth + | |
this.wrap.select('.table-top .sortable-container').node().offsetWidth, | |
bottom: | |
this.wrap.select('.table-bottom .pagination-container').node().offsetWidth + | |
this.wrap.select('.table-bottom .exportable-container').node().offsetWidth | |
}; | |
if ( | |
widths.table < Math.max(widths.top, widths.bottom) && | |
this.config.layout === 'horizontal' | |
) { | |
this.config.layout = 'vertical'; | |
this.wrap | |
.style('display', 'inline-block') | |
.selectAll('.table-top,.table-bottom') | |
.style('display', 'inline-block') | |
.selectAll('.interactivity') | |
.style({ | |
display: 'block', | |
clear: 'both' | |
}); | |
} else if ( | |
widths.table >= Math.max(widths.top, widths.bottom) && | |
this.config.layout === 'vertical' | |
) { | |
this.config.layout = 'horizontal'; | |
this.wrap | |
.style('display', 'table') | |
.selectAll('.table-top,.table-bottom') | |
.style('display', 'block') | |
.selectAll('.interactivity') | |
.style({ | |
display: 'inline-block', | |
float: function float() { | |
return select(this).classed('searchable-container') || | |
select(this).classed('pagination-container') | |
? 'right' | |
: null; | |
}, | |
clear: null | |
}); | |
} | |
} | |
function draw$1(passed_data) { | |
var _this = this; | |
var table = this; | |
var config = this.config; | |
this.data.passed = passed_data; // make passed data available on preprocess | |
this.events.onPreprocess.call(this); | |
if (!passed_data) | |
//Apply filters if data is not passed to table.draw(). | |
applyFilters.call(this); | |
else | |
//Otherwise update data object. | |
updateDataObject.call(this); | |
//Compare current filter settings to previous filter settings, if any. | |
checkFilters.call(this); | |
//Filter data on search term if it exists and set data to searched data. | |
applySearchTerm.call(this); | |
this.searchable.wrap | |
.select('.nNrecords') | |
.text( | |
this.data.processing.length === this.data.raw.length | |
? this.data.raw.length + ' records displayed' | |
: this.data.processing.length + | |
'/' + | |
this.data.raw.length + | |
' records displayed' | |
); | |
//Update table headers. | |
updateTableHeaders.call(this); | |
//Clear table body rows. | |
this.tbody.selectAll('tr').remove(); | |
//Print a note that no data was selected for empty tables. | |
if (this.data.processing.length === 0) { | |
this.tbody | |
.append('tr') | |
.classed('no-data', true) | |
.append('td') | |
.attr('colspan', this.config.cols.length) | |
.text('No data selected.'); | |
//Bind table filtered/searched data to table container. | |
this.data.current = clone(this.data.processing); | |
this.table.datum(this.table.current); | |
//Add export. | |
if (this.config.exportable) | |
this.config.exports.forEach(function(fmt) { | |
_this.exportable.exports[fmt].call(_this, _this.data.processing); | |
}); | |
//Add pagination. | |
if (this.config.pagination) | |
this.pagination.addPagination.call(this, this.data.processing); | |
} else { | |
//Sort data. | |
if (this.config.sortable) { | |
this.thead.selectAll('th').on('click', function(header) { | |
table.sortable.onClick.call(table, this, header); | |
}); | |
if (this.sortable.order.length) | |
this.sortable.sortData.call(this, this.data.processing); | |
} | |
//Bind table filtered/searched data to table container. | |
this.data.current = clone(this.data.processing); | |
this.table.datum(this.data.current); | |
//Add export. | |
if (this.config.exportable) | |
this.config.exports.forEach(function(fmt) { | |
_this.exportable.exports[fmt].call(_this, _this.data.processing); | |
}); | |
//Add pagination. | |
if (this.config.pagination) { | |
this.pagination.addPagination.call(this, this.data.processing); | |
//Apply pagination. | |
this.data.processing = this.data.processing.filter(function(d, i) { | |
return _this.config.startIndex <= i && i < _this.config.endIndex; | |
}); | |
} | |
//Define table body rows. | |
drawTableBody.call(this); | |
} | |
//Alter table layout if table is narrower than table top or bottom. | |
dynamicLayout.call(this); | |
this.events.onDraw.call(this); | |
} | |
function layout$2() { | |
var context = this; | |
this.searchable.wrap = this.wrap | |
.select('.table-top') | |
.append('div') | |
.classed('interactivity searchable-container', true) | |
.classed('hidden', !this.config.searchable); | |
this.searchable.wrap.append('div').classed('search', true); | |
this.searchable.wrap | |
.select('.search') | |
.append('input') | |
.classed('search-box', true) | |
.attr('placeholder', 'Search') | |
.on('input', function() { | |
context.searchable.searchTerm = this.value.toLowerCase() || null; | |
context.config.activePage = 0; | |
context.config.startIndex = context.config.activePage * context.config.nRowsPerPage; // first row shown | |
context.config.endIndex = context.config.startIndex + context.config.nRowsPerPage; // last row shown | |
context.draw(); | |
}); | |
this.searchable.wrap.select('.search').append('span').classed('nNrecords', true); | |
} | |
function searchable() { | |
return { | |
layout: layout$2 | |
}; | |
} | |
function layout$3() { | |
var _this = this; | |
this.exportable.wrap = this.wrap | |
.select('.table-bottom') | |
.append('div') | |
.classed('interactivity exportable-container', true) | |
.classed('hidden', !this.config.exportable); | |
this.exportable.wrap.append('span').text('Export:'); | |
if (this.config.exports && this.config.exports.length) | |
this.config.exports.forEach(function(fmt) { | |
_this.exportable.wrap | |
.append('a') | |
.classed('wc-button export', true) | |
.attr({ | |
id: fmt | |
}) | |
.text(fmt.toUpperCase()); | |
}); | |
} | |
function csv(data) { | |
var _this = this; | |
var CSVarray = []; | |
//add headers to CSV array | |
var headers = this.config.headers.map(function(header) { | |
return '"' + header.replace(/"/g, '""') + '"'; | |
}); | |
CSVarray.push(headers); | |
//add rows to CSV array | |
data.forEach(function(d, i) { | |
var row = _this.config.cols.map(function(col) { | |
var value = d[col]; | |
if (typeof value === 'string') value = value.replace(/"/g, '""'); | |
return '"' + value + '"'; | |
}); | |
CSVarray.push(row); | |
}); | |
//transform CSV array into CSV string | |
var CSV = new Blob([CSVarray.join('\n')], { type: 'text/csv;charset=utf-8;' }), | |
fileName = | |
'webchartsTableExport_' + d3.time.format('%Y-%m-%dT%H-%M-%S')(new Date()) + '.csv', | |
link = this.wrap.select('.export#csv'); | |
if (navigator.msSaveBlob) { | |
// IE 10+ | |
link.style({ | |
cursor: 'pointer', | |
'text-decoration': 'underline', | |
color: 'blue' | |
}); | |
link.on('click', function() { | |
navigator.msSaveBlob(CSV, fileName); | |
}); | |
} else { | |
// Browsers that support HTML5 download attribute | |
if (link.node().download !== undefined) { | |
var url = URL.createObjectURL(CSV); | |
link.node().setAttribute('href', url); | |
link.node().setAttribute('download', fileName); | |
} | |
} | |
} | |
function xlsx(data) { | |
var _this = this; | |
var sheetName = 'Selected Data', | |
options = { | |
bookType: 'xlsx', | |
bookSST: true, | |
type: 'binary' | |
}, | |
arrayOfArrays = data.map(function(d) { | |
return Object.keys(d) | |
.filter(function(key) { | |
return _this.config.cols.indexOf(key) > -1; | |
}) | |
.map(function(key) { | |
return d[key]; | |
}); | |
}), | |
// convert data from array of objects to array of arrays. | |
workbook = { | |
SheetNames: [sheetName], | |
Sheets: {} | |
}, | |
cols = []; | |
//Convert headers and data from array of arrays to sheet. | |
workbook.Sheets[sheetName] = XLSX.utils.aoa_to_sheet( | |
[this.config.headers].concat(arrayOfArrays) | |
); | |
//Add filters to spreadsheet. | |
workbook.Sheets[sheetName]['!autofilter'] = { | |
ref: 'A1:' + String.fromCharCode(64 + this.config.cols.length) + (data.length + 1) | |
}; | |
//Define column widths in spreadsheet. | |
this.table.selectAll('thead tr th').each(function() { | |
cols.push({ wpx: this.offsetWidth }); | |
}); | |
workbook.Sheets[sheetName]['!cols'] = cols; | |
var xlsx = XLSX.write(workbook, options), | |
s2ab = function s2ab(s) { | |
var buffer = new ArrayBuffer(s.length), | |
view = new Uint8Array(buffer); | |
for (var i = 0; i !== s.length; ++i) { | |
view[i] = s.charCodeAt(i) & 0xff; | |
} | |
return buffer; | |
}; // convert spreadsheet to binary or something, i don't know | |
//transform CSV array into CSV string | |
var blob = new Blob([s2ab(xlsx)], { type: 'application/octet-stream;' }), | |
fileName = | |
'webchartsTableExport_' + d3.time.format('%Y-%m-%dT%H-%M-%S')(new Date()) + '.xlsx', | |
link = this.wrap.select('.export#xlsx'); | |
if (navigator.msSaveBlob) { | |
// IE 10+ | |
link.style({ | |
cursor: 'pointer', | |
'text-decoration': 'underline', | |
color: 'blue' | |
}); | |
link.on('click', function() { | |
navigator.msSaveBlob(blob, fileName); | |
}); | |
} else { | |
// Browsers that support HTML5 download attribute | |
if (link.node().download !== undefined) { | |
var url = URL.createObjectURL(blob); | |
link.node().setAttribute('href', url); | |
link.node().setAttribute('download', fileName); | |
} | |
} | |
} | |
var exports$1 = { | |
csv: csv, | |
xlsx: xlsx | |
}; | |
function exportable() { | |
return { | |
layout: layout$3, | |
exports: exports$1 | |
}; | |
} | |
function layout$4() { | |
this.sortable.wrap = this.wrap | |
.select('.table-top') | |
.append('div') | |
.classed('interactivity sortable-container', true) | |
.classed('hidden', !this.config.sortable); | |
this.sortable.wrap | |
.append('div') | |
.classed('instruction', true) | |
.text('Click column headers to sort.'); | |
} | |
function onClick(th, header) { | |
var context = this, | |
selection = d3.select(th), | |
col = this.config.cols[this.config.headers.indexOf(header)]; | |
//Check if column is already a part of current sort order. | |
var sortItem = this.sortable.order.filter(function(item) { | |
return item.col === col; | |
})[0]; | |
//If it isn't, add it to sort order. | |
if (!sortItem) { | |
sortItem = { | |
col: col, | |
direction: 'ascending', | |
wrap: this.sortable.wrap | |
.append('div') | |
.datum({ key: col }) | |
.classed('wc-button sort-box', true) | |
.text(header) | |
}; | |
sortItem.wrap.append('span').classed('sort-direction', true).html('↓'); | |
sortItem.wrap.append('span').classed('remove-sort', true).html('❌'); | |
this.sortable.order.push(sortItem); | |
} else { | |
//Otherwise reverse its sort direction. | |
sortItem.direction = sortItem.direction === 'ascending' ? 'descending' : 'ascending'; | |
sortItem.wrap | |
.select('span.sort-direction') | |
.html(sortItem.direction === 'ascending' ? '↓' : '↑'); | |
} | |
//Hide sort instructions. | |
this.sortable.wrap.select('.instruction').classed('hidden', true); | |
//Add sort container deletion functionality. | |
this.sortable.order.forEach(function(item, i) { | |
item.wrap.on('click', function(d) { | |
//Remove column's sort container. | |
d3.select(this).remove(); | |
//Remove column from sort. | |
context.sortable.order.splice( | |
context.sortable.order | |
.map(function(d) { | |
return d.col; | |
}) | |
.indexOf(d.key), | |
1 | |
); | |
//Display sorting instruction. | |
context.sortable.wrap | |
.select('.instruction') | |
.classed('hidden', context.sortable.order.length); | |
//Redraw chart. | |
context.draw(); | |
}); | |
}); | |
//Redraw chart. | |
this.draw(); | |
} | |
function sortData(data) { | |
var _this = this; | |
data = data.sort(function(a, b) { | |
var order = 0; | |
_this.sortable.order.forEach(function(item) { | |
var aCell = a[item.col], | |
bCell = b[item.col]; | |
if (order === 0) { | |
if ( | |
(item.direction === 'ascending' && aCell < bCell) || | |
(item.direction === 'descending' && aCell > bCell) | |
) | |
order = -1; | |
else if ( | |
(item.direction === 'ascending' && aCell > bCell) || | |
(item.direction === 'descending' && aCell < bCell) | |
) | |
order = 1; | |
} | |
}); | |
return order; | |
}); | |
} | |
function sortable() { | |
return { | |
layout: layout$4, | |
onClick: onClick, | |
sortData: sortData, | |
order: [] | |
}; | |
} | |
function layout$5() { | |
this.pagination.wrap = this.wrap | |
.select('.table-bottom') | |
.append('div') | |
.classed('interactivity pagination-container', true) | |
.classed('hidden', !this.config.pagination); | |
} | |
function updatePagination() { | |
var _this = this; | |
//Reset pagination. | |
this.pagination.links.classed('active', false); | |
//Set to active the selected page link. | |
var activePage = this.pagination.links | |
.filter(function(link) { | |
return +link.rel === +_this.config.activePage; | |
}) | |
.classed('active', true); | |
//Define and draw selected page. | |
this.config.startIndex = this.config.activePage * this.config.nRowsPerPage; | |
this.config.endIndex = this.config.startIndex + this.config.nRowsPerPage; | |
//Redraw table. | |
this.draw(); | |
} | |
function addLinks() { | |
var _this = this; | |
//Count rows. | |
this.pagination.wrap.selectAll('a,span').remove(); | |
var _loop = function _loop(i) { | |
_this.pagination.wrap | |
.append('a') | |
.datum({ rel: i }) | |
.attr({ | |
rel: i | |
}) | |
.text(i + 1) | |
.classed('wc-button page-link', true) | |
.classed('active', function(d) { | |
return d.rel == _this.config.activePage; | |
}) | |
.classed('hidden', function() { | |
return _this.config.activePage < _this.config.nPageLinksDisplayed | |
? i >= _this.config.nPageLinksDisplayed // first nPageLinksDisplayed pages | |
: _this.config.activePage >= | |
_this.config.nPages - _this.config.nPageLinksDisplayed | |
? i < _this.config.nPages - _this.config.nPageLinksDisplayed // last nPageLinksDisplayed pages | |
: i < | |
_this.config.activePage - | |
(Math.ceil(_this.config.nPageLinksDisplayed / 2) - 1) || | |
_this.config.activePage + _this.config.nPageLinksDisplayed / 2 < i; // nPageLinksDisplayed < activePage or activePage < (nPages - nPageLinksDisplayed) | |
}); | |
}; | |
for (var i = 0; i < this.config.nPages; i++) { | |
_loop(i); | |
} | |
this.pagination.links = this.pagination.wrap.selectAll('a.page-link'); | |
} | |
function addArrows() { | |
var prev = this.config.activePage - 1, | |
next = this.config.activePage + 1; | |
if (prev < 0) prev = 0; // nothing before the first page | |
if (next >= this.config.nPages) next = this.config.nPages - 1; // nothing after the last page | |
/**-------------------------------------------------------------------------------------------\ | |
Left side | |
\-------------------------------------------------------------------------------------------**/ | |
this.pagination.wrap | |
.insert('span', ':first-child') | |
.classed('dot-dot-dot', true) | |
.text('...') | |
.classed('hidden', this.config.activePage < this.config.nPageLinksDisplayed); | |
this.pagination.prev = this.pagination.wrap | |
.insert('a', ':first-child') | |
.classed('wc-button arrow-link wc-left', true) | |
.classed('hidden', this.config.activePage == 0) | |
.attr({ | |
rel: prev | |
}) | |
.text('<'); | |
this.pagination.doublePrev = this.pagination.wrap | |
.insert('a', ':first-child') | |
.classed('wc-button arrow-link wc-left double', true) | |
.classed('hidden', this.config.activePage == 0) | |
.attr({ | |
rel: 0 | |
}) | |
.text('<<'); | |
/**-------------------------------------------------------------------------------------------\ | |
Right side | |
\-------------------------------------------------------------------------------------------**/ | |
this.pagination.wrap | |
.append('span') | |
.classed('dot-dot-dot', true) | |
.text('...') | |
.classed( | |
'hidden', | |
this.config.activePage >= | |
Math.max( | |
this.config.nPageLinksDisplayed, | |
this.config.nPages - this.config.nPageLinksDisplayed | |
) || this.config.nPages <= this.config.nPageLinksDisplayed | |
); | |
this.pagination.next = this.pagination.wrap | |
.append('a') | |
.classed('wc-button arrow-link wc-right', true) | |
.classed( | |
'hidden', | |
this.config.activePage == this.config.nPages - 1 || this.config.nPages == 0 | |
) | |
.attr({ | |
rel: next | |
}) | |
.text('>'); | |
this.pagination.doubleNext = this.pagination.wrap | |
.append('a') | |
.classed('wc-button arrow-link wc-right double', true) | |
.classed( | |
'hidden', | |
this.config.activePage == this.config.nPages - 1 || this.config.nPages == 0 | |
) | |
.attr({ | |
rel: this.config.nPages - 1 | |
}) | |
.text('>>'); | |
this.pagination.arrows = this.pagination.wrap.selectAll('a.arrow-link'); | |
this.pagination.doubleArrows = this.pagination.wrap.selectAll('a.double-arrow-link'); | |
} | |
function addPagination(data) { | |
var context = this; | |
//Calculate number of pages needed and create a link for each page. | |
this.config.nRows = data.length; | |
this.config.nPages = Math.ceil(this.config.nRows / this.config.nRowsPerPage); | |
//hide the pagination if there is only one page | |
this.config.paginationHidden = this.config.nPages === 1; | |
this.pagination.wrap.classed('hidden', this.config.paginationHidden); | |
//Render page links. | |
addLinks.call(this); | |
//Render a different page on click. | |
this.pagination.links.on('click', function() { | |
context.config.activePage = +d3.select(this).attr('rel'); | |
updatePagination.call(context); | |
}); | |
//Render arrow links. | |
addArrows.call(this); | |
//Render a different page on click. | |
this.pagination.arrows.on('click', function() { | |
if (context.config.activePage !== +d3.select(this).attr('rel')) { | |
context.config.activePage = +d3.select(this).attr('rel'); | |
context.pagination.prev.attr( | |
'rel', | |
context.config.activePage > 0 ? context.config.activePage - 1 : 0 | |
); | |
context.pagination.next.attr( | |
'rel', | |
context.config.activePage < context.config.nPages | |
? context.config.activePage + 1 | |
: context.config.nPages - 1 | |
); | |
updatePagination.call(context); | |
} | |
}); | |
//Render a different page on click. | |
this.pagination.doubleArrows.on('click', function() { | |
context.config.activePage = +d3.select(this).attr('rel'); | |
updatePagination.call(context); | |
}); | |
return { | |
addLinks: addLinks, | |
addArrows: addArrows, | |
updatePagination: updatePagination | |
}; | |
} | |
function pagination() { | |
this.config.nRows = this.data.raw.length; // total number of rows, i.e. the length of the data file | |
this.config.nPages = Math.ceil(this.config.nRows / this.config.nRowsPerPage); // total number of pages given number of rows | |
this.config.activePage = 0; // current page, 0-indexed | |
this.config.startIndex = this.config.activePage * this.config.nRowsPerPage; // first row shown | |
this.config.endIndex = this.config.startIndex + this.config.nRowsPerPage; // last row shown | |
this.config.paginationHidden = this.config.nPages == 1; | |
return { | |
layout: layout$5, | |
addPagination: addPagination | |
}; | |
} | |
function init$2(data) { | |
var _this = this; | |
var test = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | |
if (d3.select(this.div).select('.loader').empty()) { | |
d3 | |
.select(this.div) | |
.insert('div', ':first-child') | |
.attr('class', 'loader') | |
.selectAll('.blockG') | |
.data(d3.range(8)) | |
.enter() | |
.append('div') | |
.attr('class', function(d) { | |
return 'blockG rotate' + (d + 1); | |
}); | |
} | |
//Define default settings. | |
this.setDefaults.call(this, data[0]); | |
//Assign classes to container element. | |
this.wrap.classed('wc-chart', true).classed('wc-table', this.config.applyCSS); | |
//Define data object. | |
this.data = { | |
raw: data | |
}; | |
//Attach searchable object to table object. | |
this.searchable = searchable.call(this); | |
//Attach sortable object to table object. | |
this.sortable = sortable.call(this); | |
//Attach pagination object to table object. | |
this.pagination = pagination.call(this); | |
//Attach pagination object to table object. | |
this.exportable = exportable.call(this); | |
var startup = function startup(data) { | |
//connect this table and its controls, if any | |
if (_this.controls) { | |
_this.controls.targets.push(_this); | |
if (!_this.controls.ready) { | |
_this.controls.init(_this.data.raw); | |
} else { | |
_this.controls.layout(); | |
} | |
} | |
//make sure container is visible (has height and width) before trying to initialize | |
var visible = d3.select(_this.div).property('offsetWidth') > 0 || test; | |
if (!visible) { | |
console.warn( | |
'The table cannot be initialized inside an element with 0 width. The table will be initialized as soon as the container element is given a width > 0.' | |
); | |
var onVisible = setInterval(function(i) { | |
var visible_now = d3.select(_this.div).property('offsetWidth') > 0; | |
if (visible_now) { | |
_this.layout(); | |
_this.wrap.datum(_this); | |
_this.draw(); | |
clearInterval(onVisible); | |
} | |
}, 500); | |
} else { | |
_this.layout(); | |
_this.wrap.datum(_this); | |
_this.draw(); | |
} | |
}; | |
this.events.onInit.call(this); | |
if (this.data.raw.length) { | |
this.checkRequired(this.data.raw); | |
} | |
startup(data); | |
return this; | |
} | |
function layout$6() { | |
//Clear loading indicator. | |
d3.select(this.div).select('.loader').remove(); | |
//Attach container before table. | |
this.wrap.append('div').classed('table-top', true); | |
//Attach search container. | |
this.searchable.layout.call(this); | |
//Attach sort container. | |
this.sortable.layout.call(this); | |
//Attach table to DOM. | |
this.table = this.wrap.append('table').classed('table', this.config.bootstrap); // apply class to incorporate bootstrap styling | |
this.thead = this.table.append('thead'); | |
this.thead.append('tr'); | |
this.tbody = this.table.append('tbody'); | |
//Attach container after table. | |
this.wrap.append('div').classed('table-bottom', true); | |
//Attach pagination container. | |
this.pagination.layout.call(this); | |
//Attach data export container. | |
this.exportable.layout.call(this); | |
//Call layout callback. | |
this.events.onLayout.call(this); | |
} | |
function destroy$2() { | |
var destroyControls = arguments.length > 0 && arguments[0] !== undefined | |
? arguments[0] | |
: false; | |
//run onDestroy callback | |
this.events.onDestroy.call(this); | |
//destroy controls | |
if (destroyControls && this.controls) { | |
this.controls.destroy(); | |
} | |
//unmount chart wrapper | |
this.wrap.remove(); | |
} | |
function setDefault(setting) { | |
var _default_ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; | |
this.config[setting] = this.config[setting] !== undefined | |
? this.config[setting] | |
: _default_; | |
} | |
function setDefaults$1(firstItem) { | |
//Set data-driven defaults. | |
if (this.config.cols instanceof Array && this.config.headers instanceof Array) { | |
if (this.config.cols.length === 0) delete this.config.cols; | |
if ( | |
this.config.headers.length === 0 || | |
this.config.headers.length !== this.config.cols.length | |
) | |
delete this.config.headers; | |
} | |
this.config.cols = this.config.cols || d3.keys(firstItem); | |
this.config.headers = this.config.headers || this.config.cols; | |
this.config.layout = 'horizontal'; // placeholder setting to align table components vertically or horizontally | |
//Set all other defaults. | |
setDefault.call(this, 'searchable'); | |
setDefault.call(this, 'exportable'); | |
setDefault.call(this, 'exports', ['csv']); | |
setDefault.call(this, 'sortable'); | |
setDefault.call(this, 'pagination'); | |
setDefault.call(this, 'nRowsPerPage', 10); | |
setDefault.call(this, 'nPageLinksDisplayed', 5); | |
setDefault.call(this, 'applyCSS'); | |
} | |
function transformData$1(processed_data) { | |
var _this = this; | |
//Transform data. | |
this.data.processed = this.transformData(this.wrap.datum); | |
if (!data) { | |
return; | |
} | |
this.config.cols = this.config.cols || d3.keys(data[0]); | |
this.config.headers = this.config.headers || this.config.cols; | |
if (this.config.keep) { | |
this.config.keep.forEach(function(e) { | |
if (_this.config.cols.indexOf(e) === -1) { | |
_this.config.cols.unshift(e); | |
} | |
}); | |
} | |
var filtered = data; | |
if (this.filters.length) { | |
this.filters.forEach(function(e) { | |
var is_array = e.val instanceof Array; | |
filtered = filtered.filter(function(d) { | |
if (is_array) { | |
return e.val.indexOf(d[e.col]) !== -1; | |
} else { | |
return e.val !== 'All' ? d[e.col] === e.val : d; | |
} | |
}); | |
}); | |
} | |
var slimmed = d3 | |
.nest() | |
.key(function(d) { | |
if (_this.config.row_per) { | |
return _this.config.row_per | |
.map(function(m) { | |
return d[m]; | |
}) | |
.join(' '); | |
} else { | |
return d; | |
} | |
}) | |
.rollup(function(r) { | |
if (_this.config.dataManipulate) { | |
r = _this.config.dataManipulate(r); | |
} | |
var nuarr = r.map(function(m) { | |
var arr = []; | |
for (var x in m) { | |
arr.push({ col: x, text: m[x] }); | |
} | |
arr.sort(function(a, b) { | |
return _this.config.cols.indexOf(a.col) - _this.config.cols.indexOf(b.col); | |
}); | |
return { cells: arr, raw: m }; | |
}); | |
return nuarr; | |
}) | |
.entries(filtered); | |
this.data.current = slimmed.length ? slimmed : [{ key: null, values: [] }]; // dummy nested data array | |
//Reset pagination. | |
this.pagination.wrap.selectAll('*').remove(); | |
this.events.onDatatransform.call(this); | |
/**-------------------------------------------------------------------------------------------\ | |
Code below associated with the former paradigm of a d3.nest() data array. | |
\-------------------------------------------------------------------------------------------**/ | |
if (config.row_per) { | |
var rev_order = config.row_per.slice(0).reverse(); | |
rev_order.forEach(function(e) { | |
tbodies.sort(function(a, b) { | |
return a.values[0].raw[e] - b.values[0].raw[e]; | |
}); | |
}); | |
} | |
//Delete text from columns with repeated values? | |
if (config.row_per) { | |
rows | |
.filter(function(f, i) { | |
return i > 0; | |
}) | |
.selectAll('td') | |
.filter(function(f) { | |
return config.row_per.indexOf(f.col) > -1; | |
}) | |
.text(''); | |
} | |
return this.data.current; | |
} | |
var table = Object.create(chart, { | |
draw: { value: draw$1 }, | |
init: { value: init$2 }, | |
layout: { value: layout$6 }, | |
setDefaults: { value: setDefaults$1 }, | |
transformData: { value: transformData$1 }, | |
destroy: { value: destroy$2 } | |
}); | |
function createTable() { | |
var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'body'; | |
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
var controls = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | |
var thisTable = Object.create(table); | |
thisTable.div = element; | |
thisTable.config = Object.create(config); | |
thisTable.controls = controls; | |
thisTable.filters = []; | |
thisTable.required_cols = []; | |
thisTable.wrap = d3.select(thisTable.div).append('div').datum(thisTable); | |
thisTable.events = { | |
onInit: function onInit() {}, | |
onLayout: function onLayout() {}, | |
onPreprocess: function onPreprocess() {}, | |
onDraw: function onDraw() {}, | |
onDestroy: function onDestroy() {} | |
}; | |
thisTable.on = function(event, callback) { | |
var possible_events = ['init', 'layout', 'preprocess', 'draw', 'destroy']; | |
if (possible_events.indexOf(event) < 0) { | |
return; | |
} | |
if (callback) { | |
thisTable.events['on' + event.charAt(0).toUpperCase() + event.slice(1)] = callback; | |
} | |
}; | |
return thisTable; | |
} | |
function multiply(chart, data, split_by, order) { | |
var test = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; | |
chart.wrap.classed('wc-layout wc-small-multiples', true).classed('wc-chart', false); | |
//Define container for legend that overrides multiples' legends. | |
chart.master_legend = chart.wrap.append('ul').attr('class', 'legend'); | |
chart.master_legend.append('span').classed('legend-title', true); | |
//Instantiate multiples array. | |
chart.multiples = []; | |
function goAhead(data) { | |
var split_vals = d3 | |
.set( | |
data.map(function(m) { | |
return m[split_by]; | |
}) | |
) | |
.values() | |
.filter(function(f) { | |
return f; | |
}); | |
if (order) { | |
split_vals = split_vals.sort(function(a, b) { | |
return d3.ascending(order.indexOf(a), order.indexOf(b)); | |
}); | |
} | |
split_vals.forEach(function(e) { | |
var mchart = createChart(chart.wrap.node(), chart.config, chart.controls); | |
chart.multiples.push(mchart); | |
mchart.parent = chart; | |
mchart.events = chart.events; | |
mchart.legend = chart.master_legend; | |
mchart.filters.unshift({ col: split_by, val: e, choices: split_vals }); | |
mchart.wrap.insert('span', 'svg').attr('class', 'wc-chart-title').text(e); | |
mchart.init(data, test); | |
}); | |
} | |
goAhead(data); | |
} | |
function getValType(data, variable) { | |
var var_vals = d3 | |
.set( | |
data.map(function(m) { | |
return m[variable]; | |
}) | |
) | |
.values(); | |
var vals_numbers = var_vals.filter(function(f) { | |
return +f || +f === 0; | |
}); | |
if (var_vals.length === vals_numbers.length && var_vals.length > 4) { | |
return 'continuous'; | |
} else { | |
return 'categorical'; | |
} | |
} | |
function lengthenRaw(data, columns) { | |
var my_data = []; | |
data.forEach(function(e) { | |
columns.forEach(function(g) { | |
var obj = Object.create(e); | |
obj.wc_category = g; | |
obj.wc_value = e[g]; | |
my_data.push(obj); | |
}); | |
}); | |
return my_data; | |
} | |
var dataOps = { | |
getValType: getValType, | |
lengthenRaw: lengthenRaw, | |
naturalSorter: naturalSorter, | |
summarize: summarize | |
}; | |
var index = { | |
version: version, | |
createChart: createChart, | |
createControls: createControls, | |
createTable: createTable, | |
multiply: multiply, | |
dataOps: dataOps | |
}; | |
return index; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment