├── .Rbuildignore ├── .covrignore ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── documentation.md │ ├── feature_request.md │ └── lock.yml ├── .gitignore ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING ├── CRAN-RELEASE ├── CRAN-SUBMISSION ├── DESCRIPTION ├── Dockerfile ├── LICENSE ├── NAMESPACE ├── NEWS.md ├── R ├── accounts.R ├── adwords.R ├── aggregate.R ├── analytics_admin.R ├── anti_sample.R ├── app_web_functions.R ├── auth.R ├── cache.R ├── client_id.R ├── cohorts.R ├── custom_data_source.R ├── custom_dims_mets.R ├── data.R ├── experiments.R ├── filter_management.R ├── filters.R ├── ga4_data_objects.R ├── ga4_data_objects_filters.R ├── ga_data.R ├── ga_data_filter.R ├── ga_data_order.R ├── ga_data_pivot.R ├── ga_v3_get.R ├── ga_v4_get.R ├── ga_v4_objects.R ├── gadget.R ├── goal_management.R ├── googleAnalyticsR.R ├── measurement_protocol.R ├── meta.R ├── model_shiny_templates.R ├── models.R ├── options.R ├── parse_functions.R ├── pivots.R ├── print-method.R ├── quotas_errors.R ├── remarketingAudiences.R ├── segments.R ├── setup_service.R ├── shiny-modules-new.R ├── shiny-modules-segments.R ├── shiny-modules.R ├── unsampled.R ├── user-activity.R ├── users.R ├── utilities.R ├── views.R └── webprops.R ├── README.md ├── cloud_build ├── build.R ├── build_models.yml ├── cloudbuild-pkgdown.yml ├── cloudbuild-tests.yml └── shiny_cloudrun │ ├── Dockerfile │ └── shiny-customised.config ├── cloudbuild.yml ├── codecov.yml ├── cran-comments.md ├── data-raw └── get_meta_data.R ├── data ├── meta.rda └── meta4.rda ├── docs ├── 404.html ├── CODE_OF_CONDUCT.html ├── LICENSE-text.html ├── apple-touch-icon-120x120.png ├── apple-touch-icon-152x152.png ├── apple-touch-icon-180x180.png ├── apple-touch-icon-60x60.png ├── apple-touch-icon-76x76.png ├── apple-touch-icon.png ├── articles │ ├── authDropdown.png │ ├── auth_token_markdown.png │ ├── big-query.html │ ├── big-query_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── dimDropdown.png │ ├── faq.html │ ├── faq_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── figure │ │ ├── unnamed-chunk-1-1.png │ │ ├── unnamed-chunk-16-1.png │ │ ├── unnamed-chunk-2-1.png │ │ └── unnamed-chunk-6-1.png │ ├── ga_model_shiny1.png │ ├── ga_model_shiny2.png │ ├── ga_model_shiny3.png │ ├── ga_model_shiny4.png │ ├── ga_model_shiny5.png │ ├── ga_model_shiny_basic.png │ ├── ga_model_shiny_gentellela.png │ ├── ganalytics.html │ ├── ganalytics_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── googleAnalyticsR.html │ ├── googleAnalyticsRsegmentCreator.gif │ ├── googleAnaytics_deepdep.png │ ├── index.html │ ├── management.html │ ├── management_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── measurement-protocol-v2.html │ ├── measurement-protocol-v2_files │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── meta_data_screenshot.png │ ├── metricDropdown.png │ ├── model-ga-effect.png │ ├── model-shiny-module.png │ ├── model-templates.html │ ├── model-templates_files │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── models.html │ ├── models_files │ │ ├── Dygraph.Plugins.Unzoom-1.0 │ │ │ └── unzoom.js │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── crosstalk-1.0.0 │ │ │ ├── css │ │ │ │ └── crosstalk.css │ │ │ └── js │ │ │ │ ├── crosstalk.js │ │ │ │ ├── crosstalk.js.map │ │ │ │ ├── crosstalk.min.js │ │ │ │ └── crosstalk.min.js.map │ │ ├── dygraphs-1.1.1 │ │ │ ├── dygraph-combined-dev.js │ │ │ ├── dygraph-combined.js │ │ │ ├── dygraph.css │ │ │ └── shapes.js │ │ ├── dygraphs-binding-1.1.1.4 │ │ │ ├── dygraphs.js │ │ │ ├── dygraphs.yaml │ │ │ └── lib │ │ │ │ ├── dygraphs │ │ │ │ ├── dygraph-combined-dev.js │ │ │ │ ├── dygraph-combined.js │ │ │ │ └── dygraph.css │ │ │ │ ├── fquarter │ │ │ │ └── moment-fquarter.min.js │ │ │ │ ├── jquery │ │ │ │ ├── AUTHORS.txt │ │ │ │ └── jquery.min.js │ │ │ │ └── timezone │ │ │ │ ├── moment-timezone-with-data.js │ │ │ │ └── moment.js │ │ ├── dygraphs-binding-1.1.1.6 │ │ │ └── dygraphs.js │ │ ├── figure-html │ │ │ ├── unnamed-chunk-1-1.png │ │ │ ├── unnamed-chunk-1-2.png │ │ │ ├── unnamed-chunk-2-1.png │ │ │ ├── unnamed-chunk-3-1.png │ │ │ ├── unnamed-chunk-4-1.png │ │ │ ├── unnamed-chunk-5-1.png │ │ │ ├── unnamed-chunk-6-1.png │ │ │ ├── unnamed-chunk-7-1.png │ │ │ └── unnamed-chunk-8-1.png │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ ├── header-attrs-2.7 │ │ │ └── header-attrs.js │ │ ├── htmlwidgets-1.2 │ │ │ └── htmlwidgets.js │ │ ├── htmlwidgets-1.3 │ │ │ └── htmlwidgets.js │ │ ├── htmlwidgets-1.5.1 │ │ │ └── htmlwidgets.js │ │ ├── jquery-1.11.1 │ │ │ ├── AUTHORS.txt │ │ │ └── jquery.min.js │ │ ├── jquery-1.11.3 │ │ │ ├── jquery-AUTHORS.txt │ │ │ ├── jquery.js │ │ │ ├── jquery.min.js │ │ │ └── jquery.min.map │ │ ├── moment-2.8.4 │ │ │ ├── moment-timezone-with-data.js │ │ │ └── moment.js │ │ ├── moment-fquarter-1.0.0 │ │ │ └── moment-fquarter.min.js │ │ ├── moment-timezone-0.2.5 │ │ │ ├── moment-timezone-with-data.js │ │ │ └── moment.js │ │ ├── plotly-binding-4.7.1 │ │ │ ├── lib │ │ │ │ ├── colourpicker │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── colourpicker.min.css │ │ │ │ │ └── colourpicker.min.js │ │ │ │ ├── plotlyjs │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── plotly-htmlwidgets.css │ │ │ │ │ └── plotly-latest.min.js │ │ │ │ ├── selectize │ │ │ │ │ ├── selectize.bootstrap3.css │ │ │ │ │ └── selectize.min.js │ │ │ │ └── typedarray │ │ │ │ │ ├── LICENSE │ │ │ │ │ └── typedarray.min.js │ │ │ ├── plotly.js │ │ │ └── plotly.yaml │ │ ├── plotly-binding-4.9.0 │ │ │ └── plotly.js │ │ ├── plotly-htmlwidgets-css-1.46.1 │ │ │ └── plotly-htmlwidgets.css │ │ ├── plotly-main-1.46.1 │ │ │ └── plotly-latest.min.js │ │ ├── plotlyjs-1.29.2 │ │ │ ├── LICENSE │ │ │ ├── plotly-htmlwidgets.css │ │ │ └── plotly-latest.min.js │ │ └── typedarray-0.1 │ │ │ ├── LICENSE │ │ │ └── typedarray.min.js │ ├── practical-tips.html │ ├── practical-tips_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── reporting-ga4.html │ ├── reporting-ga4_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── rmarkdown.html │ ├── rmarkdown_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── rstudio-oob.png │ ├── segmentBuilder.png │ ├── setup.html │ ├── setup_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── shiny.html │ ├── shiny_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── test_ga_account_list.png │ ├── user-activity.html │ ├── user-activity_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── v3.html │ ├── v3_files │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── v4.html │ └── v4_files │ │ ├── accessible-code-block-0.0.1 │ │ └── empty-anchor.js │ │ ├── header-attrs-2.11 │ │ └── header-attrs.js │ │ └── header-attrs-2.7 │ │ └── header-attrs.js ├── authors.html ├── bootstrap-toc.css ├── bootstrap-toc.js ├── dev │ ├── 404.html │ ├── CODE_OF_CONDUCT.html │ ├── LICENSE-text.html │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-180x180.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon.png │ ├── articles │ │ ├── authDropdown.png │ │ ├── auth_token_markdown.png │ │ ├── big-query.html │ │ ├── big-query_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── dimDropdown.png │ │ ├── faq.html │ │ ├── faq_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── figure │ │ │ ├── unnamed-chunk-1-1.png │ │ │ ├── unnamed-chunk-16-1.png │ │ │ ├── unnamed-chunk-2-1.png │ │ │ └── unnamed-chunk-6-1.png │ │ ├── ga_model_shiny1.png │ │ ├── ga_model_shiny2.png │ │ ├── ga_model_shiny3.png │ │ ├── ga_model_shiny4.png │ │ ├── ga_model_shiny5.png │ │ ├── ga_model_shiny_basic.png │ │ ├── ga_model_shiny_gentellela.png │ │ ├── ganalytics.html │ │ ├── ganalytics_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── googleAnalyticsRsegmentCreator.gif │ │ ├── index.html │ │ ├── management.html │ │ ├── management_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── measurement-protocol-v2.html │ │ ├── measurement-protocol-v2_files │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── meta_data_screenshot.png │ │ ├── metricDropdown.png │ │ ├── model-ga-effect.png │ │ ├── model-templates.html │ │ ├── model-templates_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── models.html │ │ ├── models_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── practical-tips.html │ │ ├── practical-tips_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── reporting-ga4.html │ │ ├── reporting-ga4_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── rmarkdown.html │ │ ├── rmarkdown_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── rstudio-oob.png │ │ ├── segmentBuilder.png │ │ ├── setup.html │ │ ├── setup_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── shiny.html │ │ ├── shiny_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── test_ga_account_list.png │ │ ├── user-activity.html │ │ ├── user-activity_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── v3.html │ │ ├── v3_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ │ └── header-attrs.js │ │ ├── v4.html │ │ └── v4_files │ │ │ ├── accessible-code-block-0.0.1 │ │ │ └── empty-anchor.js │ │ │ ├── header-attrs-2.10 │ │ │ └── header-attrs.js │ │ │ ├── header-attrs-2.11 │ │ │ └── header-attrs.js │ │ │ └── header-attrs-2.7 │ │ │ └── header-attrs.js │ ├── authors.html │ ├── bootstrap-toc.css │ ├── bootstrap-toc.js │ ├── docsearch.css │ ├── docsearch.js │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── index.html │ ├── link.svg │ ├── logo.png │ ├── news │ │ └── index.html │ ├── oob │ │ └── index.html │ ├── pkgdown.css │ ├── pkgdown.js │ ├── pkgdown.yml │ ├── reference │ │ ├── BatchRunReportsRequest.html │ │ ├── BetweenFilter.html │ │ ├── Dimension.html │ │ ├── DimensionExpression.html │ │ ├── DimensionOrderBy.html │ │ ├── Entity.html │ │ ├── FilterExpression.html │ │ ├── FilterExpressionList.html │ │ ├── Filter_aw.html │ │ ├── InListFilter.html │ │ ├── Metric.html │ │ ├── NumericFilter.html │ │ ├── OrderBy.html │ │ ├── PivotObject.html │ │ ├── PivotOrderBy.html │ │ ├── Rplot001.png │ │ ├── RunReportRequest.html │ │ ├── StringFilter.html │ │ ├── accountPicker.html │ │ ├── authDropdown.html │ │ ├── authDropdownUI.html │ │ ├── cohort.html │ │ ├── cohortGroup.html │ │ ├── cohort_dimension_check.html │ │ ├── cohort_metric_check.html │ │ ├── date_ga4.html │ │ ├── dim_fil_ga4-class.html │ │ ├── dim_filter.html │ │ ├── dim_ga4-class.html │ │ ├── dimension_ga4.html │ │ ├── dynamicSegment.html │ │ ├── dynamicSegment_ga4-class.html │ │ ├── fetch_google_analytics_4.html │ │ ├── fetch_google_analytics_4_slow.html │ │ ├── figures │ │ │ ├── lifecycle-archived.svg │ │ │ ├── lifecycle-defunct.svg │ │ │ ├── lifecycle-deprecated.svg │ │ │ ├── lifecycle-experimental.svg │ │ │ ├── lifecycle-maturing.svg │ │ │ ├── lifecycle-questioning.svg │ │ │ ├── lifecycle-stable.svg │ │ │ ├── lifecycle-superseded.svg │ │ │ └── logo.png │ │ ├── filter_clause_ga4.html │ │ ├── filter_clauses_ga4-class.html │ │ ├── ga_account_list.html │ │ ├── ga_accounts.html │ │ ├── ga_adwords.html │ │ ├── ga_adwords_add_linkid.html │ │ ├── ga_adwords_delete_linkid.html │ │ ├── ga_adwords_list.html │ │ ├── ga_aggregate.html │ │ ├── ga_allowed_metric_dim.html │ │ ├── ga_auth.html │ │ ├── ga_auth_setup.html │ │ ├── ga_cache_call.html │ │ ├── ga_clientid_activity.html │ │ ├── ga_clientid_activity_unnest.html │ │ ├── ga_clientid_deletion.html │ │ ├── ga_clientid_hash.html │ │ ├── ga_custom_datasource.html │ │ ├── ga_custom_upload.html │ │ ├── ga_custom_upload_delete.html │ │ ├── ga_custom_upload_file.html │ │ ├── ga_custom_upload_list.html │ │ ├── ga_custom_vars.html │ │ ├── ga_custom_vars_create.html │ │ ├── ga_custom_vars_list.html │ │ ├── ga_custom_vars_patch.html │ │ ├── ga_data.html │ │ ├── ga_data_aggregations.html │ │ ├── ga_data_filter.html │ │ ├── ga_data_order.html │ │ ├── ga_experiment.html │ │ ├── ga_experiment_list.html │ │ ├── ga_filter.html │ │ ├── ga_filter_add.html │ │ ├── ga_filter_apply_to_view.html │ │ ├── ga_filter_delete.html │ │ ├── ga_filter_list.html │ │ ├── ga_filter_update.html │ │ ├── ga_filter_update_filter_link.html │ │ ├── ga_filter_view.html │ │ ├── ga_filter_view_list.html │ │ ├── ga_goal.html │ │ ├── ga_goal_add.html │ │ ├── ga_goal_list.html │ │ ├── ga_goal_update.html │ │ ├── ga_meta.html │ │ ├── ga_model.html │ │ ├── ga_model_edit.html │ │ ├── ga_model_example.html │ │ ├── ga_model_load.html │ │ ├── ga_model_make.html │ │ ├── ga_model_refresh.html │ │ ├── ga_model_save.html │ │ ├── ga_model_shiny.html │ │ ├── ga_model_shiny_load.html │ │ ├── ga_model_shiny_template.html │ │ ├── ga_model_write.html │ │ ├── ga_mp_cid.html │ │ ├── ga_mp_event.html │ │ ├── ga_mp_event_item.html │ │ ├── ga_mp_send.html │ │ ├── ga_remarketing_build.html │ │ ├── ga_remarketing_create.html │ │ ├── ga_remarketing_estimate.html │ │ ├── ga_remarketing_get.html │ │ ├── ga_remarketing_list.html │ │ ├── ga_segment_list.html │ │ ├── ga_trackme_event.html │ │ ├── ga_unsampled.html │ │ ├── ga_unsampled_download.html │ │ ├── ga_unsampled_list.html │ │ ├── ga_users_add.html │ │ ├── ga_users_delete.html │ │ ├── ga_users_delete_linkid.html │ │ ├── ga_users_list.html │ │ ├── ga_users_update.html │ │ ├── ga_view.html │ │ ├── ga_view_list.html │ │ ├── ga_webproperty.html │ │ ├── ga_webproperty_list.html │ │ ├── googleAnalyticsR.html │ │ ├── google_analytics.html │ │ ├── google_analytics_3.html │ │ ├── google_analytics_4_parse.html │ │ ├── google_analytics_bq.html │ │ ├── google_analytics_bq_asynch.html │ │ ├── index.html │ │ ├── makeOrFilters.html │ │ ├── makePivotData.html │ │ ├── makePivotNames.html │ │ ├── make_cohort_group.html │ │ ├── make_ga_4_req.html │ │ ├── met_fil_ga4-class.html │ │ ├── met_filter.html │ │ ├── met_ga4-class.html │ │ ├── meta.html │ │ ├── meta4.html │ │ ├── metricDimensionSelect.html │ │ ├── metric_ga4.html │ │ ├── multi_select.html │ │ ├── multi_selectUI.html │ │ ├── orFiltersForSegment.html │ │ ├── orFiltersForSegment_ga4-class.html │ │ ├── order_type.html │ │ ├── order_type_ga4-class.html │ │ ├── parse_ga_account_summary.html │ │ ├── pivot_ga4.html │ │ ├── pivot_ga4_parse.html │ │ ├── segmentBuilder.html │ │ ├── segmentBuilderUI.html │ │ ├── segmentChain.html │ │ ├── segmentChainUI.html │ │ ├── segmentDef_ga4-class.html │ │ ├── segmentDefinition.html │ │ ├── segmentDimensionFilter.html │ │ ├── segmentElementUI.html │ │ ├── segmentFilter.html │ │ ├── segmentFilterClause.html │ │ ├── segmentFilterClause_ga4-class.html │ │ ├── segmentFilter_ga4-class.html │ │ ├── segmentMetricFilter.html │ │ ├── segmentObj_ga4.html │ │ ├── segmentSequenceStep.html │ │ ├── segmentSequenceStep_ga4-class.html │ │ ├── segment_define.html │ │ ├── segment_element.html │ │ ├── segment_ga4-class.html │ │ ├── segment_ga4.html │ │ ├── segment_vector_sequence.html │ │ ├── segment_vector_simple.html │ │ ├── sequenceSegment.html │ │ ├── sequenceSegment_ga4-class.html │ │ ├── simpleSegment.html │ │ └── simpleSegment_ga4-class.html │ └── sitemap.xml ├── docsearch.css ├── docsearch.js ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── index.html ├── issue_template.html ├── link.svg ├── logo.png ├── news │ └── index.html ├── pkgdown.css ├── pkgdown.js ├── pkgdown.yml ├── reference │ ├── BatchRunReportsRequest.html │ ├── BetweenFilter.html │ ├── Dimension.html │ ├── DimensionExpression.html │ ├── DimensionOrderBy.html │ ├── Entity.html │ ├── FilterExpression.html │ ├── FilterExpressionList.html │ ├── Filter_aw.html │ ├── InListFilter.html │ ├── Metric.html │ ├── NumericFilter.html │ ├── OrderBy.html │ ├── PivotObject.html │ ├── PivotOrderBy.html │ ├── Rplot001.png │ ├── RunReportRequest.html │ ├── StringFilter.html │ ├── accountPicker.html │ ├── aggregateGAData.html │ ├── allowed_metric_dim.html │ ├── anti_sample.html │ ├── authDropdown.html │ ├── authDropdownUI.html │ ├── cat0.html │ ├── checkPrefix.html │ ├── chunkify.html │ ├── cohort.html │ ├── cohortGroup.html │ ├── cohort_dimension_check.html │ ├── cohort_metric_check.html │ ├── customDimension.html │ ├── date_ga4.html │ ├── dim_fil_ga4-class.html │ ├── dim_filter.html │ ├── dim_ga4-class.html │ ├── dimension_ga4.html │ ├── dynamicSegment.html │ ├── dynamicSegment_ga4-class.html │ ├── error.message.html │ ├── expect_null_or_s3_class.html │ ├── expect_null_or_type.html │ ├── fetch_google_analytics_4.html │ ├── fetch_google_analytics_4_slow.html │ ├── figures │ │ ├── gar_logo_1000.png │ │ ├── lifecycle-archived.svg │ │ ├── lifecycle-defunct.svg │ │ ├── lifecycle-deprecated.svg │ │ ├── lifecycle-experimental.svg │ │ ├── lifecycle-maturing.svg │ │ ├── lifecycle-questioning.svg │ │ ├── lifecycle-stable.svg │ │ ├── lifecycle-superseded.svg │ │ └── logo.png │ ├── filter_clause_ga4.html │ ├── filter_clauses_ga4-class.html │ ├── ga_account_list.html │ ├── ga_accounts.html │ ├── ga_admin_account_summary.html │ ├── ga_adwords.html │ ├── ga_adwords_add_linkid.html │ ├── ga_adwords_delete_linkid.html │ ├── ga_adwords_list.html │ ├── ga_aggregate.html │ ├── ga_allowed_metric_dim.html │ ├── ga_auth.html │ ├── ga_auth_setup.html │ ├── ga_aw_filter.html │ ├── ga_aw_filter_expr.html │ ├── ga_cache_call.html │ ├── ga_clientid_activity.html │ ├── ga_clientid_activity_unnest.html │ ├── ga_clientid_deletion.html │ ├── ga_clientid_hash.html │ ├── ga_custom_datasource.html │ ├── ga_custom_upload.html │ ├── ga_custom_upload_delete.html │ ├── ga_custom_upload_file.html │ ├── ga_custom_upload_list.html │ ├── ga_custom_vars.html │ ├── ga_custom_vars_create.html │ ├── ga_custom_vars_list.html │ ├── ga_custom_vars_patch.html │ ├── ga_data.html │ ├── ga_data_aggregations.html │ ├── ga_data_filter.html │ ├── ga_data_order.html │ ├── ga_data_pivot.html │ ├── ga_experiment.html │ ├── ga_experiment_list.html │ ├── ga_filter.html │ ├── ga_filter_add.html │ ├── ga_filter_apply_to_view.html │ ├── ga_filter_delete.html │ ├── ga_filter_list.html │ ├── ga_filter_update.html │ ├── ga_filter_update_filter_link.html │ ├── ga_filter_view.html │ ├── ga_filter_view_list.html │ ├── ga_goal.html │ ├── ga_goal_add.html │ ├── ga_goal_list.html │ ├── ga_goal_update.html │ ├── ga_meta.html │ ├── ga_model.html │ ├── ga_model_edit.html │ ├── ga_model_example.html │ ├── ga_model_load.html │ ├── ga_model_make.html │ ├── ga_model_refresh.html │ ├── ga_model_save.html │ ├── ga_model_shiny.html │ ├── ga_model_shiny_load.html │ ├── ga_model_shiny_template.html │ ├── ga_model_tweet.html │ ├── ga_model_write.html │ ├── ga_mp_cid.html │ ├── ga_mp_event.html │ ├── ga_mp_event_item.html │ ├── ga_mp_send.html │ ├── ga_remarketing_build.html │ ├── ga_remarketing_create.html │ ├── ga_remarketing_estimate.html │ ├── ga_remarketing_get.html │ ├── ga_remarketing_list.html │ ├── ga_segment_list.html │ ├── ga_trackme_event.html │ ├── ga_unsampled.html │ ├── ga_unsampled_download.html │ ├── ga_unsampled_list.html │ ├── ga_user_deletion.html │ ├── ga_users_add.html │ ├── ga_users_delete.html │ ├── ga_users_delete_linkid.html │ ├── ga_users_list.html │ ├── ga_users_update.html │ ├── ga_view.html │ ├── ga_view_list.html │ ├── ga_webproperty.html │ ├── ga_webproperty_list.html │ ├── getColNameOfClass.html │ ├── googleAnalyticsR.html │ ├── google_analytics.html │ ├── google_analytics_3.html │ ├── google_analytics_4_parse.html │ ├── google_analytics_aw.html │ ├── google_analytics_bq.html │ ├── google_analytics_bq_asynch.html │ ├── google_analytics_meta.html │ ├── idempotency.html │ ├── index.html │ ├── is.NullOb.html │ ├── is.error.html │ ├── listNameToDFCol.html │ ├── makeOrFilters.html │ ├── makePivotData.html │ ├── makePivotNames.html │ ├── make_cohort_group.html │ ├── make_ga_4_req.html │ ├── met_fil_ga4-class.html │ ├── met_filter.html │ ├── met_ga4-class.html │ ├── meta.html │ ├── meta4.html │ ├── metricDimensionSelect.html │ ├── metric_ga4.html │ ├── multi_select.html │ ├── multi_selectUI.html │ ├── myMessage.html │ ├── orFiltersForSegment.html │ ├── orFiltersForSegment_ga4-class.html │ ├── order_type.html │ ├── order_type_ga4-class.html │ ├── parse_ga_account_summary.html │ ├── parse_realtime.html │ ├── pivot_ga4.html │ ├── pivot_ga4_parse.html │ ├── print.ga_model_result.html │ ├── reexports.html │ ├── rmNullObs.html │ ├── segmentBuilder.html │ ├── segmentBuilderUI.html │ ├── segmentChain.html │ ├── segmentChainUI.html │ ├── segmentDef_ga4-class.html │ ├── segmentDefinition.html │ ├── segmentDimensionFilter.html │ ├── segmentElementUI.html │ ├── segmentFilter.html │ ├── segmentFilterClause.html │ ├── segmentFilterClause_ga4-class.html │ ├── segmentFilter_ga4-class.html │ ├── segmentMetricFilter.html │ ├── segmentObj_ga4.html │ ├── segmentSequenceStep.html │ ├── segmentSequenceStep_ga4-class.html │ ├── segment_define.html │ ├── segment_element.html │ ├── segment_ga4-class.html │ ├── segment_ga4.html │ ├── segment_vector_sequence.html │ ├── segment_vector_simple.html │ ├── sequenceSegment.html │ ├── sequenceSegment_ga4-class.html │ ├── simpleSegment.html │ ├── simpleSegment_ga4-class.html │ ├── timestamp_to_r.html │ └── unitToList.html └── sitemap.xml ├── googleAnalyticsR.Rproj ├── index.md ├── inst ├── _pkgdown.yml ├── client │ └── default_gcp_client.json ├── hexlogo │ ├── hex.png │ ├── logo.R │ ├── logo.png │ └── twitter-default-play.png ├── jupyter │ ├── README.md │ ├── googeAnalyticsR_auth.html │ └── googeAnalyticsR_auth.ipynb ├── models │ ├── build_models │ │ ├── Dockerfile │ │ └── ga_model_makes.R │ ├── examples │ │ ├── decomp_ga.gamr │ │ ├── decomp_ga_advanced.gamr │ │ ├── ga-effect.gamr │ │ ├── ga4-trend.gamr │ │ ├── market-basket.gamr │ │ └── time-normalised.gamr │ ├── model_scripts │ │ ├── decomp_advanced.R │ │ ├── ga4-dygraphs.R │ │ ├── ga4-first-last-touch.R │ │ ├── market-basket.R │ │ ├── ua-causalimpact.R │ │ ├── ua-decomp.R │ │ └── ua-time-normalised.R │ └── shiny_templates │ │ ├── argonDash │ │ └── ui.R │ │ ├── basic │ │ └── ui.R │ │ ├── basic_app │ │ └── app.R │ │ ├── basic_bslib │ │ └── ui.R │ │ ├── boilerplate │ │ ├── Dockerfile_app │ │ ├── Dockerfile_ui_server │ │ ├── deploy.R │ │ ├── header_boilerplate.R │ │ ├── server_app_boilerplate.R │ │ └── server_boilerplate.R │ │ ├── gentelella │ │ └── ui.R │ │ ├── html_based │ │ ├── template.html │ │ ├── ui.R │ │ └── www │ │ │ └── dummy.js │ │ ├── shinydashboard │ │ └── ui.R │ │ └── shinythemes │ │ └── ui.R ├── rmarkdown │ ├── example.Rmd │ └── example.html ├── rstudio │ └── addins.dcf └── shiny │ ├── ga4-example │ ├── ga4_demo │ │ ├── server.R │ │ └── ui.R │ └── segment_ga4_helper │ │ └── app.R │ ├── hello-world-models │ ├── DESCRIPTION │ ├── README.md │ ├── app.R │ └── ga-web-client.json │ ├── hello-world-shinyapps │ ├── DESCRIPTION │ ├── README.md │ ├── app.R │ └── ga-web-client.json │ └── models-ga-effect │ ├── DESCRIPTION │ ├── README.md │ └── app.R ├── man ├── accountPicker.Rd ├── authDropdown.Rd ├── authDropdownUI.Rd ├── dim_fil_ga4-class.Rd ├── dim_filter.Rd ├── dim_ga4-class.Rd ├── dynamicSegment_ga4-class.Rd ├── figures │ ├── lifecycle-archived.svg │ ├── lifecycle-defunct.svg │ ├── lifecycle-deprecated.svg │ ├── lifecycle-experimental.svg │ ├── lifecycle-maturing.svg │ ├── lifecycle-questioning.svg │ ├── lifecycle-stable.svg │ ├── lifecycle-superseded.svg │ └── logo.png ├── filter_clause_ga4.Rd ├── filter_clauses_ga4-class.Rd ├── ga_account_list.Rd ├── ga_accounts.Rd ├── ga_adwords.Rd ├── ga_adwords_add_linkid.Rd ├── ga_adwords_delete_linkid.Rd ├── ga_adwords_list.Rd ├── ga_aggregate.Rd ├── ga_allowed_metric_dim.Rd ├── ga_auth.Rd ├── ga_auth_setup.Rd ├── ga_cache_call.Rd ├── ga_clientid_activity.Rd ├── ga_clientid_activity_unnest.Rd ├── ga_clientid_deletion.Rd ├── ga_clientid_hash.Rd ├── ga_custom_datasource.Rd ├── ga_custom_upload.Rd ├── ga_custom_upload_delete.Rd ├── ga_custom_upload_file.Rd ├── ga_custom_upload_list.Rd ├── ga_custom_vars.Rd ├── ga_custom_vars_create.Rd ├── ga_custom_vars_list.Rd ├── ga_custom_vars_patch.Rd ├── ga_data.Rd ├── ga_data_aggregations.Rd ├── ga_data_filter.Rd ├── ga_data_order.Rd ├── ga_experiment.Rd ├── ga_experiment_list.Rd ├── ga_filter.Rd ├── ga_filter_add.Rd ├── ga_filter_apply_to_view.Rd ├── ga_filter_delete.Rd ├── ga_filter_list.Rd ├── ga_filter_update.Rd ├── ga_filter_update_filter_link.Rd ├── ga_filter_view.Rd ├── ga_filter_view_list.Rd ├── ga_goal.Rd ├── ga_goal_add.Rd ├── ga_goal_list.Rd ├── ga_goal_update.Rd ├── ga_meta.Rd ├── ga_model.Rd ├── ga_model_edit.Rd ├── ga_model_example.Rd ├── ga_model_load.Rd ├── ga_model_make.Rd ├── ga_model_refresh.Rd ├── ga_model_save.Rd ├── ga_model_shiny.Rd ├── ga_model_shiny_load.Rd ├── ga_model_shiny_template.Rd ├── ga_model_write.Rd ├── ga_mp_cid.Rd ├── ga_mp_event.Rd ├── ga_mp_event_item.Rd ├── ga_mp_send.Rd ├── ga_remarketing_build.Rd ├── ga_remarketing_create.Rd ├── ga_remarketing_estimate.Rd ├── ga_remarketing_get.Rd ├── ga_remarketing_list.Rd ├── ga_segment_list.Rd ├── ga_trackme_event.Rd ├── ga_unsampled.Rd ├── ga_unsampled_download.Rd ├── ga_unsampled_list.Rd ├── ga_users_add.Rd ├── ga_users_delete.Rd ├── ga_users_delete_linkid.Rd ├── ga_users_list.Rd ├── ga_users_update.Rd ├── ga_view.Rd ├── ga_view_list.Rd ├── ga_webproperty.Rd ├── ga_webproperty_list.Rd ├── googleAnalyticsR.Rd ├── google_analytics.Rd ├── google_analytics_3.Rd ├── make_cohort_group.Rd ├── met_fil_ga4-class.Rd ├── met_filter.Rd ├── met_ga4-class.Rd ├── meta.Rd ├── meta4.Rd ├── metricDimensionSelect.Rd ├── multi_select.Rd ├── multi_selectUI.Rd ├── orFiltersForSegment_ga4-class.Rd ├── order_type.Rd ├── order_type_ga4-class.Rd ├── parse_ga_account_summary.Rd ├── pivot_ga4.Rd ├── segmentBuilder.Rd ├── segmentBuilderUI.Rd ├── segmentDef_ga4-class.Rd ├── segmentFilterClause_ga4-class.Rd ├── segmentFilter_ga4-class.Rd ├── segmentSequenceStep_ga4-class.Rd ├── segment_define.Rd ├── segment_element.Rd ├── segment_ga4-class.Rd ├── segment_ga4.Rd ├── segment_vector_sequence.Rd ├── segment_vector_simple.Rd ├── sequenceSegment_ga4-class.Rd └── simpleSegment_ga4-class.Rd ├── pkgdown ├── assets │ └── oob │ │ └── index.html └── favicon │ ├── apple-touch-icon-120x120.png │ ├── apple-touch-icon-152x152.png │ ├── apple-touch-icon-180x180.png │ ├── apple-touch-icon-60x60.png │ ├── apple-touch-icon-76x76.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ └── favicon.ico ├── test ├── tests ├── testthat.R └── testthat │ ├── _snaps │ ├── models.md │ ├── mp.md │ ├── shiny_unit.md │ └── webapp.md │ ├── setup.R │ ├── test.gamr │ ├── test_adwords.R │ ├── test_antisample.R │ ├── test_batch.R │ ├── test_big_ga4.R │ ├── test_data_filters.R │ ├── test_filters.R │ ├── test_filters_management.R │ ├── test_ga4.R │ ├── test_ganalytics.R │ ├── test_goal_management.R │ ├── test_google_analytics_bq.R │ ├── test_meta.R │ ├── test_model_write.R │ ├── test_models.R │ ├── test_shiny_unit.R │ ├── test_unsampled_report_downloads.R │ ├── test_user_activity.R │ ├── test_user_management.R │ └── test_webapp.R └── vignettes ├── authDropdown.png ├── auth_token_markdown.png ├── big-query.Rmd ├── dimDropdown.png ├── faq.Rmd ├── figure ├── unnamed-chunk-1-1.png ├── unnamed-chunk-16-1.png ├── unnamed-chunk-2-1.png └── unnamed-chunk-6-1.png ├── ga_model_shiny1.png ├── ga_model_shiny2.png ├── ga_model_shiny3.png ├── ga_model_shiny4.png ├── ga_model_shiny5.png ├── ga_model_shiny_basic.png ├── ga_model_shiny_gentellela.png ├── ganalytics.Rmd ├── gar_logo_1000.png ├── googleAnalyticsRsegmentCreator.gif ├── googleAnalytics_deepdep.png ├── management.R ├── management.Rmd ├── management.Rmd.raw ├── measurement-protocol-v2.Rmd ├── meta_data_screenshot.png ├── metricDropdown.png ├── model-shiny-module.png ├── model-templates.Rmd ├── models.Rmd ├── models.Rmd.raw ├── practical-tips.Rmd ├── render_rmd.R ├── reporting-ga4.Rmd ├── rmarkdown.Rmd ├── rstudio-oob.png ├── segmentBuilder.png ├── setup.Rmd ├── shiny.Rmd ├── test_ga_account_list.png ├── user-activity.Rmd ├── v3.Rmd ├── v4.Rmd └── v4demoappexample.png /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^.*\.Rproj$ 2 | ^\.Rproj\.user$ 3 | ^\.httr-oauth 4 | ^\.travis.yaml 5 | ^\.travis.yml 6 | ^cran-comments.md 7 | ^data-raw* 8 | ^codecov\.yml$ 9 | ^httr-oauth\.rds\.enc$ 10 | ^docs$ 11 | ^doc* 12 | ^_pkgdown\.yml$ 13 | ^vignettes* 14 | ^vignettes$ 15 | ^vignettes/website/* 16 | ^vignettes/cache* 17 | ^index\.md$ 18 | ^index\.Rmd$ 19 | ^CODE_OF_CONDUCT\.md$ 20 | ^data-raw$ 21 | ^\.httr-oauth$ 22 | ^ga\.oauth$ 23 | ^CONTRIBUTING$ 24 | ^gar_parse_error\.rds$ 25 | ^build\.sh$ 26 | ^.github* 27 | ^vignettes/big-query\.Rmd$ 28 | ^vignettes/management\.Rmd$ 29 | ^vignettes/rmarkdown\.Rmd$ 30 | ^vignettes/setup\.Rmd$ 31 | ^vignettes/shiny\.Rmd$ 32 | ^vignettes/v3\.Rmd$ 33 | ^vignettes/v4\.Rmd$ 34 | ^revdep* 35 | ^test\.oauth$ 36 | ^Makefile$ 37 | ^Dockerfile$ 38 | ^CRAN-RELEASE$ 39 | ^cloudbuild\.yml$ 40 | ^cloud_build* 41 | ^pkgdown* 42 | ^\.covrignore$ 43 | ^\.optin-googleanalyticsr$ 44 | ^inst/jupyter* 45 | ^tests* 46 | ^CRAN-SUBMISSION$ 47 | -------------------------------------------------------------------------------- /.covrignore: -------------------------------------------------------------------------------- 1 | R/print_method.R 2 | R/setup_service.R 3 | R/shiny-modules.R 4 | R/shiny-modules-segments.R 5 | R/gadget.R 6 | R/measurement_protocol.R -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [MarkEdmondson1234] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Update or correct documentation 4 | title: "[DOCS] " 5 | labels: documentation 6 | assignees: MarkEdmondson1234 7 | 8 | --- 9 | 10 | # Where should be the new or corrected documentation? 11 | 12 | * If website - please provide a URL 13 | * If in-R examples or function reference - please specify the function (e.g. `?google_analytics`) 14 | * If somewhere else - please specify 15 | 16 | # What changes should be made? 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: MarkEdmondson1234 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # History files 2 | .Rhistory 3 | .Rapp.history 4 | .RData 5 | # Example code in package build process 6 | *-Ex.R 7 | # RStudio files 8 | .Rproj.user/ 9 | # produced vignettes 10 | vignettes/*.html 11 | vignettes/*.pdf 12 | vignettes/cache 13 | .Rproj.user 14 | inst/doc 15 | #tests/testthat/mock/ 16 | .httr-oauth 17 | gar_parse_error.rds 18 | *.dcf 19 | test.oauth 20 | .Renviron 21 | tests/testthat/cache 22 | cloudrun_test/ -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: r 2 | cache: packages 3 | r_packages: 4 | - knitr 5 | - bigQueryR 6 | - googleCloudStorageR 7 | r_github_packages: 8 | - MarkEdmondson1234/googleAuthR 9 | notifications: 10 | slack: googleauthrverse:tGfXjSD58cQSEr1YuzQ5hKPS 11 | email: 12 | on_success: change 13 | on_failure: change 14 | env: 15 | matrix: 16 | secure: L5Zl1fZp2x26Yhx+lMw5fM8rljI17EwDBgGmy+ZCRHFTj3pkJiYVo1R4jRLAaAHi3IbkihLEXGHeGGPxzkWWJFIDMMS+6UMLKS78nKxldROI2SLXUM/cgW8SrBdzlKIPKvzLsDQ8AJBWQE97dc+3ef+oiuO78CzodyOEIcEh5DZh/C60LtJxlUb5ayRyyGZGMxyaQw3fVJnmQMHKT4ZOLnu5eJHibz5jmCs3Cr238zTYwkEcFFz59IzA27C+2bwl3JY0crh8rnZi7IL9Cw6/btEG9OS579xbwsg+Efo+rBEOcPb0NwJ3p4q65B5YmXE7zPxo7+GObzFUKPT03dk44rlzpgJQQwWqOAbk44GVfKN0Jhx11feBmOZJanPb7AdRP7ipIjHcFTrURn9GcyDwGWgCOtAnpLaiDxB+M+oMsra69Wm5xH2z+3yBcBUX+Fi+skSEH3/hs3S0W+VHyUvxGCmcXp3dis/GMIPLRhplek8nyOT2Gs63ZYGw1PWFC650+9effb87qA+kFt4jVAIInJTytfLDVVDVhJ2a1wsmvm+Y9bPVTM9XbMPFmH0ViyMahpHZ1a7sQgHDXUrBHd+ineoHZpBC96Tu/vVsTXKLAIctB3WFDMfegrYVb0eDEbHedaCY4pEyJBdmjIi6XhvuB07CsUXSTnhb5wOTSc5UWEM= 17 | -------------------------------------------------------------------------------- /CRAN-RELEASE: -------------------------------------------------------------------------------- 1 | This package was submitted to CRAN on 2021-10-05. 2 | Once it is accepted, delete this file and tag the release (commit 1e87382). 3 | -------------------------------------------------------------------------------- /CRAN-SUBMISSION: -------------------------------------------------------------------------------- 1 | Version: 1.2.0 2 | Date: 2024-08-16 13:51:18 UTC 3 | SHA: 3dd4c5b530c9f2e0a92058f1d82b8f16ff5e8890 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gcr.io/gcer-public/googleauthr:master 2 | 3 | RUN install2.r --error \ 4 | -r 'http://cran.rstudio.com' \ 5 | googleAnalyticsR \ 6 | ## install Github packages 7 | && installGithub.r MarkEdmondson1234/googleAnalyticsR \ 8 | ## clean up 9 | && rm -rf /tmp/downloaded_packages/ /tmp/*.rds -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2021 2 | COPYRIGHT HOLDER: Mark Edmondson; Sunholo Ltd -------------------------------------------------------------------------------- /R/data.R: -------------------------------------------------------------------------------- 1 | #' Google Analytics API metadata 2 | #' 3 | #' This is a local copy of the data provided by [ga_meta] 4 | #' 5 | #' Running your own call will be more up to date, but this is here in case. 6 | #' 7 | #' It does not include the multi-channel or cohort variables. 8 | #' 9 | #' @format A data frame containing metric and dimensions that 10 | #' you can query the Reporting API with. 11 | #' 12 | #' @source 13 | "meta" 14 | 15 | #' Google Analytics API metadata 16 | #' 17 | #' This is a local copy of the data provided by `ga_meta("data")` 18 | #' 19 | #' Running your own call will be more up to date, but this is here in case. 20 | #' 21 | #' @format A data frame containing metric and dimensions that 22 | #' you can query the Data API with. 23 | #' 24 | #' @source 25 | "meta4" 26 | -------------------------------------------------------------------------------- /cloud_build/shiny_cloudrun/shiny-customised.config: -------------------------------------------------------------------------------- 1 | disable_protocols websocket xdr-streaming xhr-streaming iframe-eventsource iframe-htmlfile xdr-polling iframe-xhr-polling; 2 | 3 | run_as shiny; 4 | 5 | server { 6 | listen 8080; 7 | 8 | location / { 9 | site_dir /srv/shiny-server; 10 | 11 | log_dir /var/log/shiny-server; 12 | 13 | directory_index off; 14 | } 15 | } -------------------------------------------------------------------------------- /cloudbuild.yml: -------------------------------------------------------------------------------- 1 | steps: 2 | - name: gcr.io/cloud-builders/docker 3 | args: 4 | - build 5 | - -t 6 | - gcr.io/gcer-public/googleanalyticsr:$SHORT_SHA 7 | - -t 8 | - gcr.io/gcer-public/googleanalyticsr:$BRANCH_NAME 9 | - '.' 10 | - name: gcr.io/cloud-builders/docker 11 | args: 12 | - push 13 | - gcr.io/gcer-public/googleanalyticsr -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | comment: false 2 | -------------------------------------------------------------------------------- /cran-comments.md: -------------------------------------------------------------------------------- 1 | ## Test environments 2 | * local R installation, R 4.1.0 3 | * x86_64-pc-linux-gnu (64-bit) (on Google Cloud Build), R 4.0.5 4 | * win-builder (devel) 5 | 6 | 7 | ## R CMD check results 8 | 9 | 0 errors | 0 warnings | 0 notes 10 | 11 | 12 | ## Dependencies 13 | 14 | We checked reverse dependencies, comparing R CMD check results across CRAN and dev versions of this package. Found no errors, warnings or notes. -------------------------------------------------------------------------------- /data-raw/get_meta_data.R: -------------------------------------------------------------------------------- 1 | ## script to get meta data, rerun each release 2 | library(googleAnalyticsR) 3 | #ga_auth() 4 | meta <- ga_meta() 5 | usethis::use_data(meta, overwrite = TRUE) 6 | 7 | #ga4 meta 8 | meta4 <- ga_meta("data") 9 | usethis::use_data(meta4, overwrite = TRUE) 10 | -------------------------------------------------------------------------------- /data/meta.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/data/meta.rda -------------------------------------------------------------------------------- /data/meta4.rda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/data/meta4.rda -------------------------------------------------------------------------------- /docs/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /docs/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /docs/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/articles/authDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/authDropdown.png -------------------------------------------------------------------------------- /docs/articles/auth_token_markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/auth_token_markdown.png -------------------------------------------------------------------------------- /docs/articles/big-query_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/big-query_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/big-query_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/dimDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/dimDropdown.png -------------------------------------------------------------------------------- /docs/articles/faq_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/faq_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/faq_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/figure/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/figure/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /docs/articles/figure/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/figure/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/articles/figure/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/figure/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/articles/figure/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/figure/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny1.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny2.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny3.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny4.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny5.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny_basic.png -------------------------------------------------------------------------------- /docs/articles/ga_model_shiny_gentellela.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/ga_model_shiny_gentellela.png -------------------------------------------------------------------------------- /docs/articles/ganalytics_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/ganalytics_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/ganalytics_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/googleAnalyticsRsegmentCreator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/googleAnalyticsRsegmentCreator.gif -------------------------------------------------------------------------------- /docs/articles/googleAnaytics_deepdep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/googleAnaytics_deepdep.png -------------------------------------------------------------------------------- /docs/articles/management_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/management_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/management_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/measurement-protocol-v2_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/measurement-protocol-v2_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/meta_data_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/meta_data_screenshot.png -------------------------------------------------------------------------------- /docs/articles/metricDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/metricDropdown.png -------------------------------------------------------------------------------- /docs/articles/model-ga-effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/model-ga-effect.png -------------------------------------------------------------------------------- /docs/articles/model-shiny-module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/model-shiny-module.png -------------------------------------------------------------------------------- /docs/articles/model-templates_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/model-templates_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/models_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/models_files/crosstalk-1.0.0/css/crosstalk.css: -------------------------------------------------------------------------------- 1 | /* Adjust margins outwards, so column contents line up with the edges of the 2 | parent of container-fluid. */ 3 | .container-fluid.crosstalk-bscols { 4 | margin-left: -30px; 5 | margin-right: -30px; 6 | white-space: normal; 7 | } 8 | 9 | /* But don't adjust the margins outwards if we're directly under the body, 10 | i.e. we were the top-level of something at the console. */ 11 | body > .container-fluid.crosstalk-bscols { 12 | margin-left: auto; 13 | margin-right: auto; 14 | } 15 | 16 | .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { 17 | display: inline-block; 18 | padding-right: 12px; 19 | vertical-align: top; 20 | } 21 | 22 | @media only screen and (max-width:480px) { 23 | .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { 24 | display: block; 25 | padding-right: inherit; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /docs/articles/models_files/dygraphs-1.1.1/dygraph.css: -------------------------------------------------------------------------------- 1 | 2 | div .dygraphs input[type="text"] { 3 | width: 25px; 4 | } 5 | 6 | div .qt .dygraph-axis-label { 7 | font-size: 11px; 8 | } -------------------------------------------------------------------------------- /docs/articles/models_files/dygraphs-binding-1.1.1.4/dygraphs.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: jquery 3 | version: 1.11.1 4 | src: "htmlwidgets/lib/jquery" 5 | script: jquery.min.js 6 | - name: dygraphs 7 | version: 1.1.1 8 | src: "htmlwidgets/lib/dygraphs" 9 | script: dygraph-combined.js 10 | stylesheet: dygraph.css 11 | - name: moment 12 | version: 2.8.4 13 | src: "htmlwidgets/lib/timezone" 14 | script: moment.js 15 | - name: moment-timezone 16 | version: 0.2.5 17 | src: "htmlwidgets/lib/timezone" 18 | script: 'moment-timezone-with-data.js' 19 | - name: moment-fquarter 20 | version: 1.0.0 21 | src: "htmlwidgets/lib/fquarter" 22 | script: moment-fquarter.min.js 23 | -------------------------------------------------------------------------------- /docs/articles/models_files/dygraphs-binding-1.1.1.4/lib/dygraphs/dygraph.css: -------------------------------------------------------------------------------- 1 | 2 | div .dygraphs input[type="text"] { 3 | width: 25px; 4 | } 5 | 6 | div .qt .dygraph-axis-label { 7 | font-size: 11px; 8 | } -------------------------------------------------------------------------------- /docs/articles/models_files/dygraphs-binding-1.1.1.4/lib/fquarter/moment-fquarter.min.js: -------------------------------------------------------------------------------- 1 | (function(){function n(n){return n.fn.fquarter=function(n){var u=this.lang()._quarter||"Q",t={},r,i=null;return n=n||4,n>1?(r=this.subtract("months",n-1),i=r.clone().add("years",1)):r=this,t.quarter=Math.ceil((r.month()+1)/3),t.year=r.year(),t.nextYear=i?i.year():i,t.toString=function(){var n=u+t.quarter+" "+t.year;return i?n+"/"+i.format("YY"):n},t},n}typeof define=="function"&&define.amd?define("moment-fquarter",["moment"],n):typeof module!="undefined"?module.exports=n(require("moment")):typeof window!="undefined"&&window.moment&&n(window.moment)}).apply(this); -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-1-2.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-3-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-4-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-5-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-7-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/figure-html/unnamed-chunk-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/figure-html/unnamed-chunk-8-1.png -------------------------------------------------------------------------------- /docs/articles/models_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/models_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/models_files/moment-fquarter-1.0.0/moment-fquarter.min.js: -------------------------------------------------------------------------------- 1 | (function(){function n(n){return n.fn.fquarter=function(n){var u=this.lang()._quarter||"Q",t={},r,i=null;return n=n||4,n>1?(r=this.subtract("months",n-1),i=r.clone().add("years",1)):r=this,t.quarter=Math.ceil((r.month()+1)/3),t.year=r.year(),t.nextYear=i?i.year():i,t.toString=function(){var n=u+t.quarter+" "+t.year;return i?n+"/"+i.format("YY"):n},t},n}typeof define=="function"&&define.amd?define("moment-fquarter",["moment"],n):typeof module!="undefined"?module.exports=n(require("moment")):typeof window!="undefined"&&window.moment&&n(window.moment)}).apply(this); -------------------------------------------------------------------------------- /docs/articles/models_files/plotly-binding-4.7.1/lib/plotlyjs/plotly-htmlwidgets.css: -------------------------------------------------------------------------------- 1 | /* 2 | just here so that plotly works 3 | correctly with ioslides. 4 | see https://github.com/ropensci/plotly/issues/463 5 | */ 6 | 7 | slide:not(.current) .plotly.html-widget{ 8 | display: none; 9 | } 10 | -------------------------------------------------------------------------------- /docs/articles/models_files/plotly-binding-4.7.1/plotly.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/models_files/plotly-binding-4.7.1/plotly.yaml -------------------------------------------------------------------------------- /docs/articles/models_files/plotly-htmlwidgets-css-1.46.1/plotly-htmlwidgets.css: -------------------------------------------------------------------------------- 1 | /* 2 | just here so that plotly works 3 | correctly with ioslides. 4 | see https://github.com/ropensci/plotly/issues/463 5 | */ 6 | 7 | slide:not(.current) .plotly.html-widget{ 8 | display: none; 9 | } 10 | -------------------------------------------------------------------------------- /docs/articles/models_files/plotlyjs-1.29.2/plotly-htmlwidgets.css: -------------------------------------------------------------------------------- 1 | /* 2 | just here so that plotly works 3 | correctly with ioslides. 4 | see https://github.com/ropensci/plotly/issues/463 5 | */ 6 | 7 | slide:not(.current) .plotly.html-widget{ 8 | display: none; 9 | } 10 | -------------------------------------------------------------------------------- /docs/articles/practical-tips_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/practical-tips_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/practical-tips_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/reporting-ga4_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/reporting-ga4_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/reporting-ga4_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/rmarkdown_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/rmarkdown_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/rmarkdown_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/rstudio-oob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/rstudio-oob.png -------------------------------------------------------------------------------- /docs/articles/segmentBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/segmentBuilder.png -------------------------------------------------------------------------------- /docs/articles/setup_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/setup_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/setup_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/shiny_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/shiny_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/shiny_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/test_ga_account_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/articles/test_ga_account_list.png -------------------------------------------------------------------------------- /docs/articles/user-activity_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/user-activity_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/user-activity_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/v3_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/v3_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/v3_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/v4_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/articles/v4_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/articles/v4_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /docs/dev/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/dev/articles/authDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/authDropdown.png -------------------------------------------------------------------------------- /docs/dev/articles/auth_token_markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/auth_token_markdown.png -------------------------------------------------------------------------------- /docs/dev/articles/big-query_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/big-query_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/big-query_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/big-query_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/dimDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/dimDropdown.png -------------------------------------------------------------------------------- /docs/dev/articles/faq_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/faq_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/faq_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/faq_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/figure/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/figure/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /docs/dev/articles/figure/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/figure/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /docs/dev/articles/figure/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/figure/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /docs/dev/articles/figure/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/figure/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny1.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny2.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny3.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny4.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny5.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny_basic.png -------------------------------------------------------------------------------- /docs/dev/articles/ga_model_shiny_gentellela.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/ga_model_shiny_gentellela.png -------------------------------------------------------------------------------- /docs/dev/articles/ganalytics_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/ganalytics_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/ganalytics_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/ganalytics_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/googleAnalyticsRsegmentCreator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/googleAnalyticsRsegmentCreator.gif -------------------------------------------------------------------------------- /docs/dev/articles/management_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/management_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/management_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/management_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/measurement-protocol-v2_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/measurement-protocol-v2_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/measurement-protocol-v2_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/meta_data_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/meta_data_screenshot.png -------------------------------------------------------------------------------- /docs/dev/articles/metricDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/metricDropdown.png -------------------------------------------------------------------------------- /docs/dev/articles/model-ga-effect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/model-ga-effect.png -------------------------------------------------------------------------------- /docs/dev/articles/model-templates_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/model-templates_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/model-templates_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/model-templates_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/models_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/models_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/models_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/models_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/practical-tips_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/practical-tips_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/practical-tips_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/practical-tips_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/reporting-ga4_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/reporting-ga4_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/reporting-ga4_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/reporting-ga4_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/rmarkdown_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/rmarkdown_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/rmarkdown_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/rmarkdown_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/rstudio-oob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/rstudio-oob.png -------------------------------------------------------------------------------- /docs/dev/articles/segmentBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/segmentBuilder.png -------------------------------------------------------------------------------- /docs/dev/articles/setup_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/setup_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/setup_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/setup_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/shiny_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/shiny_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/shiny_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/shiny_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/test_ga_account_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/articles/test_ga_account_list.png -------------------------------------------------------------------------------- /docs/dev/articles/user-activity_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/user-activity_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/user-activity_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/user-activity_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v3_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/v3_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v3_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v3_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v4_files/accessible-code-block-0.0.1/empty-anchor.js: -------------------------------------------------------------------------------- 1 | // Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> 2 | // v0.0.1 3 | // Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. 4 | 5 | document.addEventListener('DOMContentLoaded', function() { 6 | const codeList = document.getElementsByClassName("sourceCode"); 7 | for (var i = 0; i < codeList.length; i++) { 8 | var linkList = codeList[i].getElementsByTagName('a'); 9 | for (var j = 0; j < linkList.length; j++) { 10 | if (linkList[j].innerHTML === "") { 11 | linkList[j].setAttribute('aria-hidden', 'true'); 12 | } 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /docs/dev/articles/v4_files/header-attrs-2.10/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v4_files/header-attrs-2.11/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/articles/v4_files/header-attrs-2.7/header-attrs.js: -------------------------------------------------------------------------------- 1 | // Pandoc 2.9 adds attributes on both header and div. We remove the former (to 2 | // be compatible with the behavior of Pandoc < 2.8). 3 | document.addEventListener('DOMContentLoaded', function(e) { 4 | var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); 5 | var i, h, a; 6 | for (i = 0; i < hs.length; i++) { 7 | h = hs[i]; 8 | if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 9 | a = h.attributes; 10 | while (a.length > 0) h.removeAttribute(a[0].name); 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /docs/dev/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/favicon-16x16.png -------------------------------------------------------------------------------- /docs/dev/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/favicon-32x32.png -------------------------------------------------------------------------------- /docs/dev/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/favicon.ico -------------------------------------------------------------------------------- /docs/dev/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /docs/dev/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/logo.png -------------------------------------------------------------------------------- /docs/dev/pkgdown.yml: -------------------------------------------------------------------------------- 1 | pandoc: 2.19.2 2 | pkgdown: 2.0.6 3 | pkgdown_sha: ~ 4 | articles: 5 | big-query: big-query.html 6 | faq: faq.html 7 | ganalytics: ganalytics.html 8 | management: management.html 9 | measurement-protocol-v2: measurement-protocol-v2.html 10 | model-templates: model-templates.html 11 | models: models.html 12 | practical-tips: practical-tips.html 13 | reporting-ga4: reporting-ga4.html 14 | rmarkdown: rmarkdown.html 15 | setup: setup.html 16 | shiny: shiny.html 17 | user-activity: user-activity.html 18 | v3: v3.html 19 | v4: v4.html 20 | last_built: 2022-11-23T07:58Z 21 | urls: 22 | reference: https://code.markedmondson.me/googleAnalyticsR/reference 23 | article: https://code.markedmondson.me/googleAnalyticsR/articles 24 | 25 | -------------------------------------------------------------------------------- /docs/dev/reference/Rplot001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/reference/Rplot001.png -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-archived.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclearchivedarchived -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-defunct.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledefunctdefunct -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-deprecated.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledeprecateddeprecated -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-experimental.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycleexperimentalexperimental -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-maturing.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclematuringmaturing -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-questioning.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclequestioningquestioning -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-stable.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclestablestable -------------------------------------------------------------------------------- /docs/dev/reference/figures/lifecycle-superseded.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclesupersededsuperseded -------------------------------------------------------------------------------- /docs/dev/reference/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/dev/reference/figures/logo.png -------------------------------------------------------------------------------- /docs/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/favicon-16x16.png -------------------------------------------------------------------------------- /docs/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/favicon-32x32.png -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/favicon.ico -------------------------------------------------------------------------------- /docs/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /docs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/logo.png -------------------------------------------------------------------------------- /docs/pkgdown.yml: -------------------------------------------------------------------------------- 1 | pandoc: 2.14.0.3 2 | pkgdown: 2.0.1 3 | pkgdown_sha: ~ 4 | articles: 5 | big-query: big-query.html 6 | faq: faq.html 7 | ganalytics: ganalytics.html 8 | management: management.html 9 | measurement-protocol-v2: measurement-protocol-v2.html 10 | model-templates: model-templates.html 11 | models: models.html 12 | practical-tips: practical-tips.html 13 | reporting-ga4: reporting-ga4.html 14 | rmarkdown: rmarkdown.html 15 | setup: setup.html 16 | shiny: shiny.html 17 | user-activity: user-activity.html 18 | v3: v3.html 19 | v4: v4.html 20 | last_built: 2022-01-13T13:00Z 21 | urls: 22 | reference: https://code.markedmondson.me/googleAnalyticsR/reference 23 | article: https://code.markedmondson.me/googleAnalyticsR/articles 24 | 25 | -------------------------------------------------------------------------------- /docs/reference/Rplot001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/reference/Rplot001.png -------------------------------------------------------------------------------- /docs/reference/figures/gar_logo_1000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/reference/figures/gar_logo_1000.png -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-archived.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclearchivedarchived -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-defunct.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledefunctdefunct -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-deprecated.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledeprecateddeprecated -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-experimental.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycleexperimentalexperimental -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-maturing.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclematuringmaturing -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-questioning.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclequestioningquestioning -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-stable.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclestablestable -------------------------------------------------------------------------------- /docs/reference/figures/lifecycle-superseded.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclesupersededsuperseded -------------------------------------------------------------------------------- /docs/reference/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/docs/reference/figures/logo.png -------------------------------------------------------------------------------- /googleAnalyticsR.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | BuildType: Package 16 | PackageUseDevtools: Yes 17 | PackageInstallArgs: --no-multiarch --with-keep.source 18 | PackageRoxygenize: rd,collate,namespace,vignette 19 | -------------------------------------------------------------------------------- /inst/client/default_gcp_client.json: -------------------------------------------------------------------------------- 1 | {"web":{"client_id":"289759286325-h15qtntnnounclih9tnfdj8ft1dlh1n1.apps.googleusercontent.com","project_id":"g-analytics-r","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"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","redirect_uris":["https://code.markedmondson.me/googleAnalyticsR/dev/oob"]}} -------------------------------------------------------------------------------- /inst/hexlogo/hex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/hexlogo/hex.png -------------------------------------------------------------------------------- /inst/hexlogo/logo.R: -------------------------------------------------------------------------------- 1 | library(hexSticker) 2 | imgurl <- "inst/hexlogo/googleAnalyticsRlogo.png" 3 | sticker(imgurl, package="googleAnalyticsR", 4 | p_size=4, s_x=1, s_y=0.85, s_width=.6, 5 | filename="inst/hexlogo/hex.png", 6 | p_color = "#f27f22", p_family = "sans", p_y = 1.45, 7 | h_color = "#767676", h_fill = "#ffffff") 8 | -------------------------------------------------------------------------------- /inst/hexlogo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/hexlogo/logo.png -------------------------------------------------------------------------------- /inst/hexlogo/twitter-default-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/hexlogo/twitter-default-play.png -------------------------------------------------------------------------------- /inst/jupyter/README.md: -------------------------------------------------------------------------------- 1 | # Jupyter resources 2 | 3 | This contains resources helpful for running `googleAnalyticsR` on Jupyter notebooks, in particular those avaialable on the Google Cloud Platform's AI Hub where the package is installed by default. 4 | -------------------------------------------------------------------------------- /inst/models/build_models/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gcr.io/gcer-public/googleanalyticsr 2 | 3 | RUN ulimit -s 16384 \ 4 | && R -e 'install.packages("Boom");' 5 | 6 | RUN install2.r --error \ 7 | -r 'http://cran.rstudio.com' \ 8 | xts dygraphs 9 | 10 | RUN install2.r --error \ 11 | -r 'http://cran.rstudio.com' \ 12 | CausalImpact 13 | 14 | RUN install2.r --error \ 15 | -r 'http://cran.rstudio.com' \ 16 | shiny plotly 17 | 18 | RUN installGithub.r MarkEdmondson1234/googleAnalyticsR \ 19 | && R -e 'sessionInfo()' \ 20 | && rm -rf /tmp/downloaded_packages/ /tmp/*.rds -------------------------------------------------------------------------------- /inst/models/examples/decomp_ga.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/decomp_ga.gamr -------------------------------------------------------------------------------- /inst/models/examples/decomp_ga_advanced.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/decomp_ga_advanced.gamr -------------------------------------------------------------------------------- /inst/models/examples/ga-effect.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/ga-effect.gamr -------------------------------------------------------------------------------- /inst/models/examples/ga4-trend.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/ga4-trend.gamr -------------------------------------------------------------------------------- /inst/models/examples/market-basket.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/market-basket.gamr -------------------------------------------------------------------------------- /inst/models/examples/time-normalised.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/inst/models/examples/time-normalised.gamr -------------------------------------------------------------------------------- /inst/models/model_scripts/decomp_advanced.R: -------------------------------------------------------------------------------- 1 | # ga_model: Performs decomposition and creates a plot 2 | 3 | # no libraries needed 4 | 5 | # fetch data 6 | data_f <- function(view_id, 7 | date_range = c(Sys.Date() - 300, Sys.Date()), 8 | metric = "sessions", 9 | ...) { 10 | o <- google_analytics(view_id, 11 | date_range = date_range, 12 | metrics = metric, dimensions = "date", 13 | max = -1) 14 | o$the_metric <- o[, metric] 15 | o 16 | } 17 | 18 | # model data 19 | model_f <- function(df, frequency, ...) { 20 | decompose(ts(df$the_metric, frequency = as.numeric(frequency))) 21 | } 22 | 23 | # output data 24 | output_f <- function(df, ...){ 25 | plot(df) 26 | } 27 | 28 | 29 | # use via ga_model_make() 30 | -------------------------------------------------------------------------------- /inst/models/model_scripts/ga4-dygraphs.R: -------------------------------------------------------------------------------- 1 | # ga_model: GA4 Metric Trend 2 | 3 | library(xts) 4 | library(dygraphs) 5 | 6 | # fetch data 7 | data_f <- function(view_id, date_range = c("400daysAgo", "yesterday"), metrics = c("sessions"), 8 | ...) { 9 | ga_data(view_id, metrics = metrics, date_range = date_range, dimensions = "date", 10 | limit = -1, orderBys = ga_data_order(+date)) 11 | } 12 | 13 | # model data 14 | model_f <- function(df, ...) { 15 | xts::xts(df[, -1], order.by = df$date) 16 | } 17 | 18 | # output data 19 | output_f <- function(df, ...) { 20 | require(dygraphs) 21 | dygraph(df, main = "GA4 trend- googleAnalyticsR") %>% dyAxis("x", label = "Date") %>% 22 | dyOptions(axisLineWidth = 1.5, drawGrid = FALSE) 23 | } 24 | 25 | # use via ga_model_make() 26 | -------------------------------------------------------------------------------- /inst/models/model_scripts/ga4-first-last-touch.R: -------------------------------------------------------------------------------- 1 | data_f <- function(view_id, 2 | date_range = c("30daysAgo","yesterday"), 3 | ){ 4 | myMessage("Warning - this is an expensive API call, don't use it on too long a date range", level = 3) 5 | ga_data(view_id, 6 | date_range = date_range, 7 | metrics = "sessions", 8 | dimensions = c("firstUserMedium", "sessionMedium")) 9 | 10 | } 11 | 12 | model_f <- function(df){ 13 | 14 | nodes <- unique(c(ga_data$firstUserMedium, ga_data$sessionMedium)) 15 | 16 | list( 17 | nodes = data.frame( 18 | name = unique(c(ga_data$firstUserMedium, ga_data$sessionMedium)), 19 | stringsAsFactors = FALSE), 20 | links = data.frame( 21 | source = df$firstUserMedium, 22 | target = df$sessionMedium, 23 | value = df$sessions, 24 | stringsAsFactors = FALSE 25 | ) 26 | ) 27 | } 28 | 29 | plot_f <- function(df){ 30 | 31 | } -------------------------------------------------------------------------------- /inst/models/model_scripts/ua-decomp.R: -------------------------------------------------------------------------------- 1 | # ga_model: Performs decomposition and creates a plot 2 | 3 | # no libraries needed 4 | 5 | # fetch data 6 | data_f <- function(view_id, date_range = c(Sys.Date() - 300, Sys.Date()), ...) { 7 | google_analytics(view_id, 8 | date_range = date_range, 9 | metrics = "sessions", dimensions = "date", 10 | max = -1) 11 | } 12 | 13 | # model data 14 | model_f <- function(df, ...) { 15 | decompose(ts(df$sessions, frequency = 7)) 16 | } 17 | 18 | # output data 19 | output_f <- function(df, ...){ 20 | plot(df) 21 | } 22 | 23 | # use via ga_model_make() 24 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/basic/ui.R: -------------------------------------------------------------------------------- 1 | ## basic ui.R 2 | fluidPage(title = "{{ shiny_title }}", 3 | {{ auth_ui }}, 4 | {{{ date_range }}}, 5 | h2("Model Output"), 6 | {{{ model_ui }}} 7 | ) 8 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/basic_app/app.R: -------------------------------------------------------------------------------- 1 | ## basic_full ui.R 2 | library(shiny) 3 | library(googleAuthR) 4 | library(googleAnalyticsR) 5 | {{{ model_libraries }}} 6 | 7 | gar_set_client(web_json = "{{ web_json }}", 8 | scopes = "{{ scopes }}", 9 | activate = "web") 10 | options(googleAuthR.redirect = "{{ deployed_url }}") 11 | 12 | # loads pre-existing models 13 | {{{ model_load }}} 14 | 15 | ## ui.R 16 | ui <- fluidPage(title = "{{ shiny_title }}", 17 | {{ auth_ui }}, 18 | {{{ date_range }}}, 19 | h2("Model Output"), 20 | {{{ model_ui }}} 21 | 22 | ) 23 | 24 | server <- function(input, output, session){ 25 | 26 | token <- gar_shiny_auth(session) 27 | 28 | {{{ auth_accounts }}} 29 | 30 | # module for authentication 31 | view_id <- {{ auth_server }} 32 | 33 | # module to display model results 34 | {{{ model_server }}} 35 | 36 | } 37 | 38 | shinyApp(gar_shiny_ui(ui, login_ui = silent_auth), server) 39 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/Dockerfile_app: -------------------------------------------------------------------------------- 1 | # from rocker/shiny with googleAnalyticsR installed & configued for Cloud Run 2 | FROM gcr.io/gcer-public/googleanalyticsr-shiny-cloudrun 3 | 4 | # add any dependencies for your app here 5 | # RUN install2.r --error -r 'http://cran.rstudio.com' googleAnalyticsR 6 | # RUN installGithub.r MarkEdmondson1234/googleAnalyticsR 7 | 8 | COPY . /srv/shiny-server/ 9 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/Dockerfile_ui_server: -------------------------------------------------------------------------------- 1 | # from rocker/shiny with googleAnalyticsR installed & configued for Cloud Run 2 | FROM gcr.io/gcer-public/googleanalyticsr-shiny-cloudrun 3 | 4 | # add any dependencies for your app here 5 | # RUN install2.r --error -r 'http://cran.rstudio.com' googleAnalyticsR 6 | # RUN installGithub.r MarkEdmondson1234/googleAnalyticsR 7 | 8 | COPY app.R /srv/shiny-server/app.R 9 | COPY app/ /srv/shiny-server/app/ 10 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/deploy.R: -------------------------------------------------------------------------------- 1 | # use this file to deploy the app online e.g. shinyapps.io 2 | library(shiny) 3 | library(googleAuthR) 4 | 5 | ui <- source("app/ui.R", chdir = TRUE)$value 6 | server <- source("app/server.R", chdir = TRUE)$value 7 | 8 | shinyApp(gar_shiny_ui(ui, login_ui = silent_auth), server) 9 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/header_boilerplate.R: -------------------------------------------------------------------------------- 1 | # ---start header_boilerplate.R 2 | library(shiny) 3 | library(googleAuthR) 4 | library(googleAnalyticsR) 5 | {{{ model_libraries }}} 6 | 7 | gar_set_client(web_json = "{{ web_json }}", 8 | scopes = "{{ scopes }}", 9 | activate = "web") 10 | options(googleAuthR.redirect = "{{ deployed_url }}") 11 | 12 | # loads pre-existing models 13 | {{{ model_load }}} 14 | # ---end header_boilerplate.R 15 | 16 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/server_app_boilerplate.R: -------------------------------------------------------------------------------- 1 | 2 | # ---start server_app_boilerplate.R 3 | server <- function(input, output, session){ 4 | 5 | token <- gar_shiny_auth(session) 6 | 7 | {{{ auth_accounts }}} 8 | 9 | # module for authentication 10 | view_id <- {{ auth_server }} 11 | 12 | # module to display model results 13 | {{{ model_server }}} 14 | 15 | } 16 | 17 | shinyApp(gar_shiny_ui(ui, login_ui = silent_auth), server) 18 | # ---end server_app_boilerplate.R 19 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/boilerplate/server_boilerplate.R: -------------------------------------------------------------------------------- 1 | # ---start server_boilerplate.R 2 | # loads pre-existing models 3 | {{{ model_load }}} 4 | 5 | function(input, output, session){ 6 | 7 | token <- gar_shiny_auth(session) 8 | 9 | {{{ auth_accounts }}} 10 | 11 | # module for authentication 12 | view_id <- {{ auth_server }} 13 | 14 | # module to display model results 15 | {{{ model_server }}} 16 | 17 | } 18 | # ---end server_boilerplate.R 19 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/gentelella/ui.R: -------------------------------------------------------------------------------- 1 | # gentelella ui.R 2 | library(gentelellaShiny) # ui theme 3 | 4 | gentelellaPage( 5 | menuItems = sideBarElement(a("Start Again", href="/")), 6 | title_tag = "GA time normalised pages", 7 | site_title = a(class="site_title", icon("clock"), span("Time Normalised")), 8 | footer = "Made with googleAnalyticsR::ga_model_shiny()", 9 | 10 | # shiny UI elements 11 | h3("Choose GA account"), 12 | {{ auth_ui }}, 13 | {{{ date_range }}}, 14 | h3("Time Normalised pages"), 15 | {{{ model_ui }}}, 16 | br() 17 | 18 | ) 19 | 20 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/html_based/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ headContent() }} 6 | 7 | 8 |
9 | {{ auth_ui }} 10 | {{ date_range }} 11 | {{ model_ui }} 12 |
13 | 14 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/html_based/ui.R: -------------------------------------------------------------------------------- 1 | # contents of a file 2 | ## ui.R ## 3 | htmlTemplate( 4 | "template.html", 5 | auth_ui = {{ auth_ui }}, 6 | date_range = {{{ date_range }}}, 7 | model_ui = {{{ model_ui }}} 8 | ) 9 | -------------------------------------------------------------------------------- /inst/models/shiny_templates/html_based/www/dummy.js: -------------------------------------------------------------------------------- 1 | //nocontent -------------------------------------------------------------------------------- /inst/models/shiny_templates/shinythemes/ui.R: -------------------------------------------------------------------------------- 1 | library(shinythemes) 2 | ## basic ui.R 3 | theme <- "{{ theme }}" 4 | if(!nzchar(theme)) theme <- "cerulean" 5 | 6 | the_theme <- shinytheme(theme) 7 | 8 | # a list of the model objects 9 | models <- {{ model_list }} 10 | 11 | # uses models (a list of models) to create the model UI 12 | shinytheme_tabPanel <- function(models){ 13 | model_n <- paste0("model", seq_along(models)) 14 | tabs <- mapply( 15 | function(x,y) shiny::tabPanel(y$model$description, y$ui(x)), 16 | x=model_n, y=models, 17 | SIMPLIFY = FALSE, USE.NAMES = FALSE) 18 | 19 | do.call(shiny::tabsetPanel, args = tabs) 20 | } 21 | 22 | shiny::navbarPage( 23 | title = "{{ shiny_title }}", 24 | theme = the_theme, 25 | shiny::tabPanel("Models", 26 | {{ auth_ui }}, 27 | shiny::sidebarPanel( 28 | {{{ date_range }}} 29 | ), 30 | shiny::mainPanel( 31 | shinytheme_tabPanel(models) 32 | ) 33 | ) 34 | ) 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /inst/rstudio/addins.dcf: -------------------------------------------------------------------------------- 1 | Name: GAv4 Segment Builder 2 | Description: Helper to construct GAv4 API calls. 3 | Binding: gadget_GASegment 4 | Interactive: true -------------------------------------------------------------------------------- /inst/shiny/ga4-example/segment_ga4_helper/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(googleAnalyticsR) 3 | 4 | ui <- shinyUI(fluidPage( 5 | 6 | segmentBuilderUI("test1") 7 | 8 | )) 9 | 10 | 11 | server <- shinyServer(function(input, output, session) { 12 | 13 | callModule(segmentBuilder, "test1") 14 | 15 | }) 16 | 17 | # Run the application 18 | shinyApp(ui = ui, server = server) -------------------------------------------------------------------------------- /inst/shiny/hello-world-models/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Using ga_model Shiny modules 2 | Author: Mark Edmondson 3 | AuthorUrl: http://code.markedmondson.me/googleAnalyticsR/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Type: Shiny -------------------------------------------------------------------------------- /inst/shiny/hello-world-models/README.md: -------------------------------------------------------------------------------- 1 | This is an example of how to use `ga_model_*` functions to create Shiny apps. 2 | 3 | The app authenticates using `gar_shiny_*` from `googleAuthR`, then loads a preexisting model that takes care of the UI and server side logic for fetching, modelling and plotting your Google Analytics data. 4 | -------------------------------------------------------------------------------- /inst/shiny/hello-world-models/ga-web-client.json: -------------------------------------------------------------------------------- 1 | {"web":{"client_id":"1080525199262-qecndq7frddi66vr35brgckc1md5rgcl.apps.googleusercontent.com","project_id":"mark-edmondson-gde","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"3nVkQuvrooNO8t2OId4Vtha4","redirect_uris":["http://localhost"],"javascript_origins":["https://www.example.com","http://localhost:1221"]}} -------------------------------------------------------------------------------- /inst/shiny/hello-world-shinyapps/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Deployment to shinyapps.io example 2 | Author: Mark Edmondson 3 | AuthorUrl: http://code.markedmondson.me/googleAuthR/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Type: Shiny -------------------------------------------------------------------------------- /inst/shiny/hello-world-shinyapps/README.md: -------------------------------------------------------------------------------- 1 | This is an example of how to deploy to shinyapps.io using the newer `gar_shiny_*` functions. 2 | 3 | Note the additional option `options(googleAuthR.redirect = "https://mark.shinyapps.io/googleAnalyticsR_test_deployment/")` which should be set to the same URL as the redirect URL you need to configure in your Google Project for web application credentials. 4 | -------------------------------------------------------------------------------- /inst/shiny/hello-world-shinyapps/app.R: -------------------------------------------------------------------------------- 1 | library(shiny) 2 | library(googleAuthR) 3 | library(googleAnalyticsR) 4 | 5 | gar_set_client(web_json = "ga-web-client.json", 6 | scopes = "https://www.googleapis.com/auth/analytics.readonly") 7 | 8 | options(googleAuthR.redirect = "https://mark.shinyapps.io/googleAnalyticsR_test_deployment/") 9 | 10 | ## ui.R 11 | ui <- fluidPage(title = "googleAnalyticsR Test Deployment", 12 | 13 | authDropdownUI("auth_menu"), 14 | textOutput("viewid"), 15 | textOutput("client_id") 16 | 17 | ) 18 | 19 | ## server.R 20 | server <- function(input, output, session){ 21 | 22 | gar_shiny_auth(session) 23 | 24 | al <- reactive(ga_account_list()) 25 | view_id <- callModule(authDropdown, "auth_menu", ga.table = al) 26 | 27 | output$viewid <- renderText(view_id()) 28 | 29 | output$client_id <- renderText(getOption("googleAuthR.webapp.client_id")) 30 | 31 | } 32 | 33 | shinyApp(gar_shiny_ui(ui, login_ui = silent_auth), server) 34 | -------------------------------------------------------------------------------- /inst/shiny/hello-world-shinyapps/ga-web-client.json: -------------------------------------------------------------------------------- 1 | {"web":{"client_id":"1080525199262-qecndq7frddi66vr35brgckc1md5rgcl.apps.googleusercontent.com","project_id":"mark-edmondson-gde","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"3nVkQuvrooNO8t2OId4Vtha4","redirect_uris":["http://localhost"],"javascript_origins":["https://www.example.com","http://localhost:1221"]}} -------------------------------------------------------------------------------- /inst/shiny/models-ga-effect/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Title: Using ga_model Shiny modules 2 | Author: Mark Edmondson 3 | AuthorUrl: http://code.markedmondson.me/googleAnalyticsR/ 4 | License: MIT 5 | DisplayMode: Showcase 6 | Type: Shiny -------------------------------------------------------------------------------- /inst/shiny/models-ga-effect/README.md: -------------------------------------------------------------------------------- 1 | This is an example of how to use `ga_model_*` functions to use a more complicated model, in this case one that uses CausalImpact to judge effects on SEO traffic. 2 | 3 | Note the end code is the same as simpler models. You can add more features such as drop downs and sliders as you require them to pass to the model. 4 | 5 | -------------------------------------------------------------------------------- /man/authDropdownUI.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shiny-modules.R 3 | \name{authDropdownUI} 4 | \alias{authDropdownUI} 5 | \title{authDropdown UI Shiny Module} 6 | \usage{ 7 | authDropdownUI(id, width = NULL, inColumns = FALSE) 8 | } 9 | \arguments{ 10 | \item{id}{Shiny id.} 11 | 12 | \item{width}{The width of the input} 13 | 14 | \item{inColumns}{whether to wrap selectInputs in width=4 columns. 15 | 16 | Shiny Module for use with \link{authDropdown}.} 17 | } 18 | \value{ 19 | Shiny UI 20 | } 21 | \description{ 22 | Makes a dropdown row for use for authentication. 23 | } 24 | \seealso{ 25 | Other Shiny modules: 26 | \code{\link{accountPickerUI}()}, 27 | \code{\link{authDropdown}()}, 28 | \code{\link{metricDimensionSelectUI}()}, 29 | \code{\link{multi_select}()}, 30 | \code{\link{multi_selectUI}()} 31 | } 32 | \concept{Shiny modules} 33 | -------------------------------------------------------------------------------- /man/dim_fil_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{dim_fil_ga4-class} 5 | \alias{dim_fil_ga4-class} 6 | \title{\code{dim_fil_ga4} class.} 7 | \description{ 8 | Dimension filter. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/dim_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{dim_ga4-class} 5 | \alias{dim_ga4-class} 6 | \title{\code{dim_ga4} class.} 7 | \description{ 8 | Dimension. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/dynamicSegment_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{dynamicSegment_ga4-class} 5 | \alias{dynamicSegment_ga4-class} 6 | \title{\code{dynamicSegment_ga4} class.} 7 | \description{ 8 | Dynamic Segment. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/figures/lifecycle-archived.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclearchivedarchived -------------------------------------------------------------------------------- /man/figures/lifecycle-defunct.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledefunctdefunct -------------------------------------------------------------------------------- /man/figures/lifecycle-deprecated.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycledeprecateddeprecated -------------------------------------------------------------------------------- /man/figures/lifecycle-experimental.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecycleexperimentalexperimental -------------------------------------------------------------------------------- /man/figures/lifecycle-maturing.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclematuringmaturing -------------------------------------------------------------------------------- /man/figures/lifecycle-questioning.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclequestioningquestioning -------------------------------------------------------------------------------- /man/figures/lifecycle-stable.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclestablestable -------------------------------------------------------------------------------- /man/figures/lifecycle-superseded.svg: -------------------------------------------------------------------------------- 1 | lifecyclelifecyclesupersededsuperseded -------------------------------------------------------------------------------- /man/figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/man/figures/logo.png -------------------------------------------------------------------------------- /man/filter_clauses_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{.filter_clauses_ga4-class} 5 | \alias{.filter_clauses_ga4-class} 6 | \title{\code{.filter_clauses_ga4} class.} 7 | \description{ 8 | Filter clauses class union. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/ga_adwords.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/adwords.R 3 | \name{ga_adwords} 4 | \alias{ga_adwords} 5 | \title{Get AdWords Link meta data} 6 | \usage{ 7 | ga_adwords(accountId, webPropertyId, webPropertyAdWordsLinkId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{webPropertyAdWordsLinkId}{AdWords Link Id} 15 | } 16 | \value{ 17 | AdWords Meta data 18 | } 19 | \description{ 20 | Get AdWords Link meta data 21 | } 22 | \seealso{ 23 | Other Google Ad management functions: 24 | \code{\link{ga_adwords_add_linkid}()}, 25 | \code{\link{ga_adwords_delete_linkid}()}, 26 | \code{\link{ga_adwords_list}()} 27 | } 28 | \concept{Google Ad management functions} 29 | -------------------------------------------------------------------------------- /man/ga_adwords_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/adwords.R 3 | \name{ga_adwords_list} 4 | \alias{ga_adwords_list} 5 | \title{List AdWords} 6 | \usage{ 7 | ga_adwords_list(accountId, webPropertyId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | } 14 | \value{ 15 | AdWords Links 16 | } 17 | \description{ 18 | List AdWords 19 | } 20 | \seealso{ 21 | Other Google Ad management functions: 22 | \code{\link{ga_adwords}()}, 23 | \code{\link{ga_adwords_add_linkid}()}, 24 | \code{\link{ga_adwords_delete_linkid}()} 25 | } 26 | \concept{Google Ad management functions} 27 | -------------------------------------------------------------------------------- /man/ga_allowed_metric_dim.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/custom_dims_mets.R 3 | \name{ga_allowed_metric_dim} 4 | \alias{ga_allowed_metric_dim} 5 | \title{Create named list of allowed GA metrics/dimensions} 6 | \usage{ 7 | ga_allowed_metric_dim( 8 | type = c("METRIC", "DIMENSION"), 9 | subType = c("all", "segment", "cohort"), 10 | callAPI = FALSE 11 | ) 12 | } 13 | \arguments{ 14 | \item{type}{Type of parameter to create} 15 | 16 | \item{subType}{to restrict to only those in this type} 17 | 18 | \item{callAPI}{This will update the meta table (Requires online authorization) 19 | 20 | This is useful to expand goalXCompletions to all the possibilities, 21 | as well as restricting to those that variables that work with your API call. 22 | 23 | Use internal meta table, but you have option to update to the latest version.} 24 | } 25 | \value{ 26 | A named list of parameters for use in API calls 27 | } 28 | \description{ 29 | Create named list of allowed GA metrics/dimensions 30 | } 31 | -------------------------------------------------------------------------------- /man/ga_auth_setup.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/setup_service.R 3 | \name{ga_auth_setup} 4 | \alias{ga_auth_setup} 5 | \title{Setup wizard for authentication options} 6 | \usage{ 7 | ga_auth_setup() 8 | } 9 | \description{ 10 | Setup wizard for authentication options 11 | } 12 | -------------------------------------------------------------------------------- /man/ga_cache_call.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/cache.R 3 | \name{ga_cache_call} 4 | \alias{ga_cache_call} 5 | \title{Setup caching of API calls} 6 | \usage{ 7 | ga_cache_call(cache_location) 8 | } 9 | \arguments{ 10 | \item{cache_location}{If \code{RAM} will save to memory, or specify a file folder location} 11 | } 12 | \description{ 13 | Lets you cache API calls to disk 14 | } 15 | \details{ 16 | By default this is turned on upon package load to \code{RAM}. 17 | Should you want to cache calls to a folder then run this function to specify where. 18 | } 19 | -------------------------------------------------------------------------------- /man/ga_clientid_hash.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/client_id.R 3 | \name{ga_clientid_hash} 4 | \alias{ga_clientid_hash} 5 | \title{Get hashed version of client id (also known as hashClientId, hashedClientId, or BigQuery's fullVisitorId)} 6 | \usage{ 7 | ga_clientid_hash(webPropertyId, clientId) 8 | } 9 | \arguments{ 10 | \item{webPropertyId}{Web Property Id} 11 | 12 | \item{clientId}{Client Id} 13 | } 14 | \value{ 15 | hashedClientId object list 16 | } 17 | \description{ 18 | Get hashed version of client id (also known as hashClientId, hashedClientId, or BigQuery's fullVisitorId) 19 | } 20 | \seealso{ 21 | Other clientid functions: 22 | \code{\link{ga_clientid_activity}()}, 23 | \code{\link{ga_clientid_activity_unnest}()}, 24 | \code{\link{ga_clientid_deletion}()} 25 | } 26 | \concept{clientid functions} 27 | -------------------------------------------------------------------------------- /man/ga_custom_datasource.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/custom_data_source.R 3 | \name{ga_custom_datasource} 4 | \alias{ga_custom_datasource} 5 | \title{List Custom Data Sources} 6 | \usage{ 7 | ga_custom_datasource(accountId, webPropertyId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | } 14 | \value{ 15 | Custom Data Source 16 | } 17 | \description{ 18 | Get a list of custom data sources you have configured in Google Analytics web UI. 19 | } 20 | \details{ 21 | You primarily need this to get the \code{customDataSourceId} for the uploads via \link{ga_custom_upload_file} 22 | } 23 | \seealso{ 24 | Other custom datasource functions: 25 | \code{\link{ga_custom_upload}()}, 26 | \code{\link{ga_custom_upload_delete}()}, 27 | \code{\link{ga_custom_upload_file}()}, 28 | \code{\link{ga_custom_upload_list}()} 29 | } 30 | \concept{custom datasource functions} 31 | -------------------------------------------------------------------------------- /man/ga_custom_upload_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/custom_data_source.R 3 | \name{ga_custom_upload_list} 4 | \alias{ga_custom_upload_list} 5 | \title{List Custom Data Source Uploads} 6 | \usage{ 7 | ga_custom_upload_list(accountId, webPropertyId, customDataSourceId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{customDataSourceId}{Custom data source Id} 15 | } 16 | \value{ 17 | Custom Data Source Uploads List 18 | } 19 | \description{ 20 | List Custom Data Source Uploads 21 | } 22 | \seealso{ 23 | Other custom datasource functions: 24 | \code{\link{ga_custom_datasource}()}, 25 | \code{\link{ga_custom_upload}()}, 26 | \code{\link{ga_custom_upload_delete}()}, 27 | \code{\link{ga_custom_upload_file}()} 28 | } 29 | \concept{custom datasource functions} 30 | -------------------------------------------------------------------------------- /man/ga_custom_vars.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/custom_dims_mets.R 3 | \name{ga_custom_vars} 4 | \alias{ga_custom_vars} 5 | \title{Get Custom Dimensions or Metrics} 6 | \usage{ 7 | ga_custom_vars( 8 | accountId, 9 | webPropertyId, 10 | type = c("customMetrics", "customDimensions"), 11 | customId 12 | ) 13 | } 14 | \arguments{ 15 | \item{accountId}{Account Id} 16 | 17 | \item{webPropertyId}{Web Property Id} 18 | 19 | \item{type}{A customMetric or customDimension} 20 | 21 | \item{customId}{The customMetricId or customDimensionId} 22 | } 23 | \value{ 24 | Custom Metric or Dimension meta data 25 | } 26 | \description{ 27 | Get Custom Dimensions or Metrics 28 | } 29 | \seealso{ 30 | Other custom variable functions: 31 | \code{\link{ga_custom_vars_create}()}, 32 | \code{\link{ga_custom_vars_list}()}, 33 | \code{\link{ga_custom_vars_patch}()} 34 | } 35 | \concept{custom variable functions} 36 | -------------------------------------------------------------------------------- /man/ga_experiment.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/experiments.R 3 | \name{ga_experiment} 4 | \alias{ga_experiment} 5 | \title{Experiments Meta data} 6 | \usage{ 7 | ga_experiment(accountId, webPropertyId, profileId, experimentId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile Id} 15 | 16 | \item{experimentId}{Experiment Id} 17 | } 18 | \value{ 19 | Experiment Meta Data 20 | } 21 | \description{ 22 | Experiments Meta data 23 | } 24 | \seealso{ 25 | Other managementAPI functions: 26 | \code{\link{ga_experiment_list}()}, 27 | \code{\link{ga_filter_add}()}, 28 | \code{\link{ga_filter_apply_to_view}()}, 29 | \code{\link{ga_filter_update}()}, 30 | \code{\link{ga_filter_update_filter_link}()}, 31 | \code{\link{ga_segment_list}()} 32 | } 33 | \concept{managementAPI functions} 34 | -------------------------------------------------------------------------------- /man/ga_experiment_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/experiments.R 3 | \name{ga_experiment_list} 4 | \alias{ga_experiment_list} 5 | \title{List Experiments} 6 | \usage{ 7 | ga_experiment_list(accountId, webPropertyId, profileId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile Id} 15 | } 16 | \value{ 17 | Experiments List 18 | } 19 | \description{ 20 | List Experiments 21 | } 22 | \seealso{ 23 | Other managementAPI functions: 24 | \code{\link{ga_experiment}()}, 25 | \code{\link{ga_filter_add}()}, 26 | \code{\link{ga_filter_apply_to_view}()}, 27 | \code{\link{ga_filter_update}()}, 28 | \code{\link{ga_filter_update_filter_link}()}, 29 | \code{\link{ga_segment_list}()} 30 | } 31 | \concept{managementAPI functions} 32 | -------------------------------------------------------------------------------- /man/ga_filter.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/filter_management.R 3 | \name{ga_filter} 4 | \alias{ga_filter} 5 | \title{Get specific filter for account} 6 | \usage{ 7 | ga_filter(accountId, filterId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{filterId}{Filter Id} 13 | } 14 | \value{ 15 | filter list 16 | } 17 | \description{ 18 | Get specific filter for account 19 | } 20 | \seealso{ 21 | Other filter management functions: 22 | \code{\link{ga_filter_delete}()}, 23 | \code{\link{ga_filter_list}()}, 24 | \code{\link{ga_filter_view}()}, 25 | \code{\link{ga_filter_view_list}()} 26 | } 27 | \concept{filter management functions} 28 | -------------------------------------------------------------------------------- /man/ga_filter_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/filter_management.R 3 | \name{ga_filter_list} 4 | \alias{ga_filter_list} 5 | \title{List filters for account} 6 | \usage{ 7 | ga_filter_list(accountId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | } 12 | \value{ 13 | filter list 14 | } 15 | \description{ 16 | List filters for account 17 | } 18 | \seealso{ 19 | Other filter management functions: 20 | \code{\link{ga_filter}()}, 21 | \code{\link{ga_filter_delete}()}, 22 | \code{\link{ga_filter_view}()}, 23 | \code{\link{ga_filter_view_list}()} 24 | } 25 | \concept{filter management functions} 26 | -------------------------------------------------------------------------------- /man/ga_filter_view.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/filter_management.R 3 | \name{ga_filter_view} 4 | \alias{ga_filter_view} 5 | \title{Get specific filter for view (profile)} 6 | \usage{ 7 | ga_filter_view(accountId, webPropertyId, viewId, linkId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{viewId}{Profile Id} 15 | 16 | \item{linkId}{Link Id} 17 | } 18 | \value{ 19 | filter list 20 | } 21 | \description{ 22 | Get specific filter for view (profile) 23 | } 24 | \seealso{ 25 | Other filter management functions: 26 | \code{\link{ga_filter}()}, 27 | \code{\link{ga_filter_delete}()}, 28 | \code{\link{ga_filter_list}()}, 29 | \code{\link{ga_filter_view_list}()} 30 | } 31 | \concept{filter management functions} 32 | -------------------------------------------------------------------------------- /man/ga_filter_view_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/filter_management.R 3 | \name{ga_filter_view_list} 4 | \alias{ga_filter_view_list} 5 | \title{List filters for view (profile)} 6 | \usage{ 7 | ga_filter_view_list(accountId, webPropertyId, viewId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{viewId}{Profile Id} 15 | } 16 | \value{ 17 | filter list 18 | } 19 | \description{ 20 | List filters for view (profile) 21 | } 22 | \seealso{ 23 | Other filter management functions: 24 | \code{\link{ga_filter}()}, 25 | \code{\link{ga_filter_delete}()}, 26 | \code{\link{ga_filter_list}()}, 27 | \code{\link{ga_filter_view}()} 28 | } 29 | \concept{filter management functions} 30 | -------------------------------------------------------------------------------- /man/ga_goal.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/goal_management.R 3 | \name{ga_goal} 4 | \alias{ga_goal} 5 | \title{Get goal} 6 | \usage{ 7 | ga_goal(accountId, webPropertyId, profileId, goalId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile Id} 15 | 16 | \item{goalId}{Goal Id} 17 | } 18 | \value{ 19 | Goal meta data 20 | } 21 | \description{ 22 | Get goal 23 | } 24 | \seealso{ 25 | Other goal management functions: 26 | \code{\link{ga_goal_add}()}, 27 | \code{\link{ga_goal_list}()}, 28 | \code{\link{ga_goal_update}()} 29 | } 30 | \concept{goal management functions} 31 | -------------------------------------------------------------------------------- /man/ga_goal_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/goal_management.R 3 | \name{ga_goal_list} 4 | \alias{ga_goal_list} 5 | \title{List goals} 6 | \usage{ 7 | ga_goal_list(accountId, webPropertyId, profileId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile Id} 15 | } 16 | \value{ 17 | Goal list 18 | } 19 | \description{ 20 | List goals 21 | } 22 | \seealso{ 23 | Other goal management functions: 24 | \code{\link{ga_goal}()}, 25 | \code{\link{ga_goal_add}()}, 26 | \code{\link{ga_goal_update}()} 27 | } 28 | \concept{goal management functions} 29 | -------------------------------------------------------------------------------- /man/ga_model_example.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/models.R 3 | \name{ga_model_example} 4 | \alias{ga_model_example} 5 | \title{Load an example model} 6 | \usage{ 7 | ga_model_example(name = "list") 8 | } 9 | \arguments{ 10 | \item{name}{name of the model - set to "list" to show available files} 11 | } 12 | \description{ 13 | Load an example model 14 | } 15 | \examples{ 16 | 17 | # example .gamr files included with the package 18 | ga_model_example() 19 | 20 | # load one example 21 | ga_model_example("ga4-trend.gamr") 22 | } 23 | \seealso{ 24 | Other GA modelling functions: 25 | \code{\link{ga_model}()}, 26 | \code{\link{ga_model_edit}()}, 27 | \code{\link{ga_model_load}()}, 28 | \code{\link{ga_model_make}()}, 29 | \code{\link{ga_model_save}()}, 30 | \code{\link{ga_model_shiny}()}, 31 | \code{\link{ga_model_shiny_load}()}, 32 | \code{\link{ga_model_shiny_template}()}, 33 | \code{\link{ga_model_write}()} 34 | } 35 | \concept{GA modelling functions} 36 | -------------------------------------------------------------------------------- /man/ga_model_load.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/models.R 3 | \name{ga_model_load} 4 | \alias{ga_model_load} 5 | \title{Load a created model} 6 | \usage{ 7 | ga_model_load(filename = "my-model.gamr") 8 | } 9 | \arguments{ 10 | \item{filename}{name to load model from} 11 | } 12 | \description{ 13 | Load a created model 14 | } 15 | \examples{ 16 | 17 | # models used in ga_model_example() are here: 18 | location <- system.file("models","examples","decomp_ga.gamr", 19 | package = "googleAnalyticsR") 20 | 21 | ga_model_load(location) 22 | } 23 | \seealso{ 24 | Other GA modelling functions: 25 | \code{\link{ga_model}()}, 26 | \code{\link{ga_model_edit}()}, 27 | \code{\link{ga_model_example}()}, 28 | \code{\link{ga_model_make}()}, 29 | \code{\link{ga_model_save}()}, 30 | \code{\link{ga_model_shiny}()}, 31 | \code{\link{ga_model_shiny_load}()}, 32 | \code{\link{ga_model_shiny_template}()}, 33 | \code{\link{ga_model_write}()} 34 | } 35 | \concept{GA modelling functions} 36 | -------------------------------------------------------------------------------- /man/ga_model_refresh.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/models.R 3 | \name{ga_model_refresh} 4 | \alias{ga_model_refresh} 5 | \title{Refresh a model} 6 | \usage{ 7 | ga_model_refresh(model) 8 | } 9 | \arguments{ 10 | \item{model}{Model or file location of model .gamr file} 11 | } 12 | \description{ 13 | Sometimes necessary if functions were created under differing package versions 14 | } 15 | \examples{ 16 | 17 | \dontrun{ 18 | 19 | decomp_ga <- ga_model_example("decomp_ga.gamr") 20 | decomp_ga <- ga_model_refresh(decomp_ga) 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /man/ga_model_shiny_load.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/model_shiny_templates.R 3 | \name{ga_model_shiny_load} 4 | \alias{ga_model_shiny_load} 5 | \title{Load one model into a Shiny template} 6 | \usage{ 7 | ga_model_shiny_load(model_n, ...) 8 | } 9 | \arguments{ 10 | \item{model_n}{The templated name of a model e.g. 'model1'} 11 | 12 | \item{...}{Other arguments passed from shiny server} 13 | } 14 | \description{ 15 | Load one model into a Shiny template 16 | } 17 | \seealso{ 18 | Other GA modelling functions: 19 | \code{\link{ga_model}()}, 20 | \code{\link{ga_model_edit}()}, 21 | \code{\link{ga_model_example}()}, 22 | \code{\link{ga_model_load}()}, 23 | \code{\link{ga_model_make}()}, 24 | \code{\link{ga_model_save}()}, 25 | \code{\link{ga_model_shiny}()}, 26 | \code{\link{ga_model_shiny_template}()}, 27 | \code{\link{ga_model_write}()} 28 | } 29 | \concept{GA modelling functions} 30 | -------------------------------------------------------------------------------- /man/ga_model_shiny_template.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/model_shiny_templates.R 3 | \name{ga_model_shiny_template} 4 | \alias{ga_model_shiny_template} 5 | \title{Get a Shiny template file} 6 | \usage{ 7 | ga_model_shiny_template(name = "list", read_lines = FALSE) 8 | } 9 | \arguments{ 10 | \item{name}{the template name} 11 | 12 | \item{read_lines}{If TRUE will use \code{readLines()} to print out the template contents} 13 | } 14 | \description{ 15 | Gets a pre-created template from the googleAnalyticsR samples 16 | } 17 | \seealso{ 18 | Other GA modelling functions: 19 | \code{\link{ga_model}()}, 20 | \code{\link{ga_model_edit}()}, 21 | \code{\link{ga_model_example}()}, 22 | \code{\link{ga_model_load}()}, 23 | \code{\link{ga_model_make}()}, 24 | \code{\link{ga_model_save}()}, 25 | \code{\link{ga_model_shiny}()}, 26 | \code{\link{ga_model_shiny_load}()}, 27 | \code{\link{ga_model_write}()} 28 | } 29 | \concept{GA modelling functions} 30 | -------------------------------------------------------------------------------- /man/ga_mp_cid.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/measurement_protocol.R 3 | \name{ga_mp_cid} 4 | \alias{ga_mp_cid} 5 | \title{Generate a random client_id} 6 | \usage{ 7 | ga_mp_cid(seed = NULL) 8 | } 9 | \arguments{ 10 | \item{seed}{If you set a seed, then the random number will be the same for each value} 11 | } 12 | \description{ 13 | This has a random number plus a timestamp 14 | } 15 | \seealso{ 16 | Other Measurement Protocol functions: 17 | \code{\link{ga_mp_event}()}, 18 | \code{\link{ga_mp_event_item}()}, 19 | \code{\link{ga_mp_send}()} 20 | } 21 | \concept{Measurement Protocol functions} 22 | -------------------------------------------------------------------------------- /man/ga_remarketing_get.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/remarketingAudiences.R 3 | \name{ga_remarketing_get} 4 | \alias{ga_remarketing_get} 5 | \title{Get a remarketing audience} 6 | \usage{ 7 | ga_remarketing_get(accountId, webPropertyId, remarketingAudienceId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{remarketingAudienceId}{The ID of the remarketing audience to retrieve.} 15 | } 16 | \value{ 17 | Remarketing Audience object 18 | } 19 | \description{ 20 | Get a remarketing audience 21 | } 22 | \seealso{ 23 | \href{https://support.google.com/analytics/answer/2611268?hl=en}{About remarketing audiences} 24 | 25 | Other remarketing management functions: 26 | \code{\link{ga_remarketing_build}()}, 27 | \code{\link{ga_remarketing_create}()}, 28 | \code{\link{ga_remarketing_estimate}()}, 29 | \code{\link{ga_remarketing_list}()} 30 | } 31 | \concept{remarketing management functions} 32 | -------------------------------------------------------------------------------- /man/ga_remarketing_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/remarketingAudiences.R 3 | \name{ga_remarketing_list} 4 | \alias{ga_remarketing_list} 5 | \title{List remarketing audiences} 6 | \usage{ 7 | ga_remarketing_list(accountId, webPropertyId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | } 14 | \value{ 15 | Remarketing audience list 16 | } 17 | \description{ 18 | List remarketing audiences 19 | } 20 | \seealso{ 21 | \href{https://support.google.com/analytics/answer/2611268?hl=en}{About remarketing audiences} 22 | 23 | Other remarketing management functions: 24 | \code{\link{ga_remarketing_build}()}, 25 | \code{\link{ga_remarketing_create}()}, 26 | \code{\link{ga_remarketing_estimate}()}, 27 | \code{\link{ga_remarketing_get}()} 28 | } 29 | \concept{remarketing management functions} 30 | -------------------------------------------------------------------------------- /man/ga_segment_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/segments.R 3 | \name{ga_segment_list} 4 | \alias{ga_segment_list} 5 | \title{Get segments user has access to} 6 | \usage{ 7 | ga_segment_list() 8 | } 9 | \value{ 10 | Segment list 11 | } 12 | \description{ 13 | Get segments user has access to 14 | } 15 | \seealso{ 16 | Other managementAPI functions: 17 | \code{\link{ga_experiment}()}, 18 | \code{\link{ga_experiment_list}()}, 19 | \code{\link{ga_filter_add}()}, 20 | \code{\link{ga_filter_apply_to_view}()}, 21 | \code{\link{ga_filter_update}()}, 22 | \code{\link{ga_filter_update_filter_link}()} 23 | } 24 | \concept{managementAPI functions} 25 | -------------------------------------------------------------------------------- /man/ga_unsampled.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/unsampled.R 3 | \name{ga_unsampled} 4 | \alias{ga_unsampled} 5 | \title{Get Unsampled Report Meta Data} 6 | \usage{ 7 | ga_unsampled(accountId, webPropertyId, profileId, unsampledReportId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile Id} 15 | 16 | \item{unsampledReportId}{Unsampled Report Id} 17 | } 18 | \value{ 19 | Unsampled Report Meta Data 20 | } 21 | \description{ 22 | Get Unsampled Report Meta Data 23 | } 24 | \seealso{ 25 | Other unsampled download functions: 26 | \code{\link{ga_unsampled_download}()}, 27 | \code{\link{ga_unsampled_list}()} 28 | } 29 | \concept{unsampled download functions} 30 | -------------------------------------------------------------------------------- /man/ga_view.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/views.R 3 | \name{ga_view} 4 | \alias{ga_view} 5 | \title{Get single View (Profile)} 6 | \usage{ 7 | ga_view(accountId, webPropertyId, profileId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id} 13 | 14 | \item{profileId}{Profile (View) Id} 15 | } 16 | \value{ 17 | A list of the Views meta-data. 18 | } 19 | \description{ 20 | Gets meta-data for a particular View/Profile 21 | } 22 | \examples{ 23 | 24 | \dontrun{ 25 | 26 | library(googleAnalyticsR) 27 | ga_auth() 28 | ga_view(1058095, webPropertyId = "UA-1058095-1", profileId = 1855267) 29 | } 30 | } 31 | \seealso{ 32 | Other account structure functions: 33 | \code{\link{ga_account_list}()}, 34 | \code{\link{ga_accounts}()}, 35 | \code{\link{ga_view_list}()}, 36 | \code{\link{ga_webproperty}()}, 37 | \code{\link{ga_webproperty_list}()} 38 | } 39 | \concept{account structure functions} 40 | -------------------------------------------------------------------------------- /man/ga_webproperty.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/webprops.R 3 | \name{ga_webproperty} 4 | \alias{ga_webproperty} 5 | \title{Get a web property} 6 | \usage{ 7 | ga_webproperty(accountId, webPropertyId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | 12 | \item{webPropertyId}{Web Property Id e.g. \code{UA-12345-1}} 13 | } 14 | \value{ 15 | webproperty 16 | } 17 | \description{ 18 | Gets metadata for one particular web property 19 | } 20 | \examples{ 21 | 22 | \dontrun{ 23 | library(googleAnalyticsR) 24 | ga_auth() 25 | wp <- ga_webproperty(1058095, "UA-1058095-1") 26 | } 27 | } 28 | \seealso{ 29 | Other account structure functions: 30 | \code{\link{ga_account_list}()}, 31 | \code{\link{ga_accounts}()}, 32 | \code{\link{ga_view}()}, 33 | \code{\link{ga_view_list}()}, 34 | \code{\link{ga_webproperty_list}()} 35 | } 36 | \concept{account structure functions} 37 | -------------------------------------------------------------------------------- /man/ga_webproperty_list.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/webprops.R 3 | \name{ga_webproperty_list} 4 | \alias{ga_webproperty_list} 5 | \title{List web properties} 6 | \usage{ 7 | ga_webproperty_list(accountId) 8 | } 9 | \arguments{ 10 | \item{accountId}{Account Id} 11 | } 12 | \value{ 13 | A \code{data.frame} of webproperty meta-data 14 | } 15 | \description{ 16 | This gets the meta data for web properties associated with a particular accountId. 17 | If you want all information available to your user, use \link{ga_account_list} instead. 18 | } 19 | \examples{ 20 | 21 | \dontrun{ 22 | library(googleAnalyticsR) 23 | ga_auth() 24 | aa <- ga_accounts() 25 | wp <- ga_webproperty_list(aa$id[1]) 26 | } 27 | } 28 | \seealso{ 29 | Other account structure functions: 30 | \code{\link{ga_account_list}()}, 31 | \code{\link{ga_accounts}()}, 32 | \code{\link{ga_view}()}, 33 | \code{\link{ga_view_list}()}, 34 | \code{\link{ga_webproperty}()} 35 | } 36 | \concept{account structure functions} 37 | -------------------------------------------------------------------------------- /man/met_fil_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{met_fil_ga4-class} 5 | \alias{met_fil_ga4-class} 6 | \title{\code{met_fil_ga4} class.} 7 | \description{ 8 | Metric filter. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/met_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{met_ga4-class} 5 | \alias{met_ga4-class} 6 | \title{\code{met_ga4} class.} 7 | \description{ 8 | Metric. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/meta.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/data.R 3 | \docType{data} 4 | \name{meta} 5 | \alias{meta} 6 | \title{Google Analytics API metadata} 7 | \format{ 8 | A data frame containing metric and dimensions that 9 | you can query the Reporting API with. 10 | } 11 | \source{ 12 | \url{https://ga-dev-tools.web.app/dimensions-metrics-explorer/} 13 | } 14 | \usage{ 15 | meta 16 | } 17 | \description{ 18 | This is a local copy of the data provided by \link{ga_meta} 19 | } 20 | \details{ 21 | Running your own call will be more up to date, but this is here in case. 22 | 23 | It does not include the multi-channel or cohort variables. 24 | } 25 | \keyword{datasets} 26 | -------------------------------------------------------------------------------- /man/meta4.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/data.R 3 | \docType{data} 4 | \name{meta4} 5 | \alias{meta4} 6 | \title{Google Analytics API metadata} 7 | \format{ 8 | A data frame containing metric and dimensions that 9 | you can query the Data API with. 10 | } 11 | \source{ 12 | \url{https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema} 13 | } 14 | \usage{ 15 | meta4 16 | } 17 | \description{ 18 | This is a local copy of the data provided by \code{ga_meta("data")} 19 | } 20 | \details{ 21 | Running your own call will be more up to date, but this is here in case. 22 | } 23 | \keyword{datasets} 24 | -------------------------------------------------------------------------------- /man/multi_selectUI.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shiny-modules.R 3 | \name{multi_selectUI} 4 | \alias{multi_selectUI} 5 | \title{multi_select UI Shiny Module} 6 | \usage{ 7 | multi_selectUI(id, label = "Metric", multiple = TRUE, width = NULL) 8 | } 9 | \arguments{ 10 | \item{id}{Shiny id} 11 | 12 | \item{label}{label} 13 | 14 | \item{multiple}{multiple select} 15 | 16 | \item{width}{width of select} 17 | } 18 | \value{ 19 | Shiny UI 20 | } 21 | \description{ 22 | Shiny Module for use with \link{multi_select} 23 | } 24 | \details{ 25 | Create a Google Analytics variable selector 26 | } 27 | \seealso{ 28 | Other Shiny modules: 29 | \code{\link{accountPickerUI}()}, 30 | \code{\link{authDropdown}()}, 31 | \code{\link{authDropdownUI}()}, 32 | \code{\link{metricDimensionSelectUI}()}, 33 | \code{\link{multi_select}()} 34 | } 35 | \concept{Shiny modules} 36 | -------------------------------------------------------------------------------- /man/orFiltersForSegment_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{orFiltersForSegment_ga4-class} 5 | \alias{orFiltersForSegment_ga4-class} 6 | \title{\code{orFiltersForSegment_ga4} class.} 7 | \description{ 8 | Or-filter for segment. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/order_type.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \name{order_type} 4 | \alias{order_type} 5 | \title{Make an OrderType object} 6 | \usage{ 7 | order_type( 8 | field, 9 | sort_order = c("ASCENDING", "DESCENDING"), 10 | orderType = c("VALUE", "DELTA", "SMART", "HISTOGRAM_BUCKET", "DIMENSION_AS_INTEGER") 11 | ) 12 | } 13 | \arguments{ 14 | \item{field}{One field to sort by} 15 | 16 | \item{sort_order}{ASCENDING or DESCENDING} 17 | 18 | \item{orderType}{Type of ordering} 19 | } 20 | \value{ 21 | A order_type_ga4 object for use in GAv4 fetch 22 | } 23 | \description{ 24 | Make an OrderType object 25 | } 26 | \details{ 27 | For multiple order sorting, create separate OrderType objects to pass 28 | } 29 | -------------------------------------------------------------------------------- /man/order_type_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{order_type_ga4-class} 5 | \alias{order_type_ga4-class} 6 | \title{\code{order_type_ga4} class.} 7 | \description{ 8 | Order type. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/parse_ga_account_summary.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/parse_functions.R 3 | \name{parse_ga_account_summary} 4 | \alias{parse_ga_account_summary} 5 | \title{New parse GA account summary} 6 | \usage{ 7 | parse_ga_account_summary(x) 8 | } 9 | \arguments{ 10 | \item{x}{The account summary items} 11 | } 12 | \description{ 13 | New parse GA account summary 14 | } 15 | \keyword{internal} 16 | -------------------------------------------------------------------------------- /man/segmentBuilderUI.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/shiny-modules-segments.R 3 | \name{segmentBuilderUI} 4 | \alias{segmentBuilderUI} 5 | \title{Create a GAv4 Segment Builder} 6 | \usage{ 7 | segmentBuilderUI(id) 8 | } 9 | \arguments{ 10 | \item{id}{Shiny id} 11 | } 12 | \value{ 13 | Shiny UI for use in app 14 | } 15 | \description{ 16 | Shiny Module for use with \link{segmentBuilder} 17 | } 18 | \examples{ 19 | 20 | \dontrun{ 21 | 22 | library(shiny) 23 | library(googleAnalyticsR) 24 | 25 | ui <- shinyUI(fluidPage( 26 | segmentBuilderUI("test1") 27 | )) 28 | 29 | 30 | server <- shinyServer(function(input, output, session) { 31 | 32 | segment <- callModule(segmentBuilder, "test1") 33 | 34 | .. use segment() in further gav4 calls. 35 | 36 | }) 37 | 38 | 39 | # Run the application 40 | shinyApp(ui = ui, server = server) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /man/segmentDef_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{segmentDef_ga4-class} 5 | \alias{segmentDef_ga4-class} 6 | \title{\code{segmentDef_ga4} class.} 7 | \description{ 8 | Segment definition. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/segmentFilterClause_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{segmentFilterClause_ga4-class} 5 | \alias{segmentFilterClause_ga4-class} 6 | \title{\code{segmentFilterClause_ga4} class.} 7 | \description{ 8 | Segment filter clause. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/segmentFilter_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{segmentFilter_ga4-class} 5 | \alias{segmentFilter_ga4-class} 6 | \title{\code{segmentFilter_ga4} class.} 7 | \description{ 8 | Segment filter. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/segmentSequenceStep_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{segmentSequenceStep_ga4-class} 5 | \alias{segmentSequenceStep_ga4-class} 6 | \title{\code{segmentSequenceStep_ga4} class.} 7 | \description{ 8 | Segment sequence step. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/segment_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{segment_ga4-class} 5 | \alias{segment_ga4-class} 6 | \title{\code{segment_ga4} class.} 7 | \description{ 8 | Segments list. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/sequenceSegment_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{sequenceSegment_ga4-class} 5 | \alias{sequenceSegment_ga4-class} 6 | \title{\code{sequenceSegment_ga4} class.} 7 | \description{ 8 | Sequence segment. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /man/simpleSegment_ga4-class.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/ga_v4_objects.R 3 | \docType{class} 4 | \name{simpleSegment_ga4-class} 5 | \alias{simpleSegment_ga4-class} 6 | \title{\code{simpleSegment_ga4} class.} 7 | \description{ 8 | Simple segment. 9 | } 10 | \keyword{internal} 11 | -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /pkgdown/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /pkgdown/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/pkgdown/favicon/favicon.ico -------------------------------------------------------------------------------- /test: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tests/testthat.R: -------------------------------------------------------------------------------- 1 | library(testthat) 2 | library(googleAnalyticsR) 3 | 4 | test_check("googleAnalyticsR") 5 | -------------------------------------------------------------------------------- /tests/testthat/_snaps/models.md: -------------------------------------------------------------------------------- 1 | # Run a model online 2 | 3 | Code 4 | model2$shiny_module$ui("test") 5 | Output 6 |
7 | 8 | -------------------------------------------------------------------------------- /tests/testthat/test.gamr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/tests/testthat/test.gamr -------------------------------------------------------------------------------- /tests/testthat/test_adwords.R: -------------------------------------------------------------------------------- 1 | # source("setup.R") 2 | # 3 | # context("Adwords") 4 | # 5 | # test_that("Get AdWords Link meta data", { 6 | # skip_on_cran() 7 | # 8 | # adwords_list <- ga_adwords_list(accountId, webPropId) 9 | # 10 | # expect_s3_class(adwords_list, "data.frame") 11 | # 12 | # }) 13 | # 14 | # test_that("Get information about specific GA Adwords link", { 15 | # skip_on_cran() 16 | # adwords_list <- ga_adwords_list(accountId, webPropId) 17 | # #assumes that default account from setup.R has existing link to Adwords account 18 | # ga_adwords_link <- ga_adwords(accountId, webPropId, webPropertyAdWordsLinkId = adwords_list[1,1]) 19 | # 20 | # expect_equal(ga_adwords_link$kind, "analytics#entityAdWordsLink") 21 | # 22 | # }) -------------------------------------------------------------------------------- /tests/testthat/test_model_write.R: -------------------------------------------------------------------------------- 1 | # ga_model: A description 2 | 3 | # no libraries needed 4 | 5 | # fetch data 6 | data_f <- 7 | function (view_id, date_range = c(Sys.Date() - 300, Sys.Date()), 8 | ...) 9 | { 10 | google_analytics(view_id, date_range = date_range, metrics = "sessions", 11 | dimensions = "date", max = -1) 12 | } 13 | 14 | # model data 15 | model_f <- 16 | function (df, ...) 17 | { 18 | decompose(ts(df$sessions, frequency = 7)) 19 | } 20 | 21 | # output data 22 | output_f <- 23 | function (df, ...) 24 | plot(df) 25 | 26 | # shiny input function 27 | uiInput <- 28 | structure(list(), names = character(0), class = c("shiny.tag.list", 29 | "list")) 30 | 31 | # use via ga_model_make() 32 | -------------------------------------------------------------------------------- /vignettes/authDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/authDropdown.png -------------------------------------------------------------------------------- /vignettes/auth_token_markdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/auth_token_markdown.png -------------------------------------------------------------------------------- /vignettes/dimDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/dimDropdown.png -------------------------------------------------------------------------------- /vignettes/figure/unnamed-chunk-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/figure/unnamed-chunk-1-1.png -------------------------------------------------------------------------------- /vignettes/figure/unnamed-chunk-16-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/figure/unnamed-chunk-16-1.png -------------------------------------------------------------------------------- /vignettes/figure/unnamed-chunk-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/figure/unnamed-chunk-2-1.png -------------------------------------------------------------------------------- /vignettes/figure/unnamed-chunk-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/figure/unnamed-chunk-6-1.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny1.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny2.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny3.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny4.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny5.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny_basic.png -------------------------------------------------------------------------------- /vignettes/ga_model_shiny_gentellela.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/ga_model_shiny_gentellela.png -------------------------------------------------------------------------------- /vignettes/gar_logo_1000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/gar_logo_1000.png -------------------------------------------------------------------------------- /vignettes/googleAnalyticsRsegmentCreator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/googleAnalyticsRsegmentCreator.gif -------------------------------------------------------------------------------- /vignettes/googleAnalytics_deepdep.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/googleAnalytics_deepdep.png -------------------------------------------------------------------------------- /vignettes/meta_data_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/meta_data_screenshot.png -------------------------------------------------------------------------------- /vignettes/metricDropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/metricDropdown.png -------------------------------------------------------------------------------- /vignettes/model-shiny-module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/model-shiny-module.png -------------------------------------------------------------------------------- /vignettes/render_rmd.R: -------------------------------------------------------------------------------- 1 | library(knitr) 2 | library(webshot) 3 | webshot::install_phantomjs() 4 | # run this locally to create Rmd output with local API auth 5 | wd <- getwd() 6 | setwd("vignettes") 7 | knitr::knit("management.Rmd.raw", "management.Rmd") 8 | knitr::knit("models.Rmd.raw", "models.Rmd") 9 | setwd(wd) -------------------------------------------------------------------------------- /vignettes/rstudio-oob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/rstudio-oob.png -------------------------------------------------------------------------------- /vignettes/segmentBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/segmentBuilder.png -------------------------------------------------------------------------------- /vignettes/test_ga_account_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/test_ga_account_list.png -------------------------------------------------------------------------------- /vignettes/v4demoappexample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8-bit-sheep/googleAnalyticsR/322325570d92d01e0d22c740d0e7b5daddc8a9c0/vignettes/v4demoappexample.png --------------------------------------------------------------------------------