Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add update_title functionality to Dash for R by rpkyle · Pull Request #218 · plotly/dashR · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions CHANGELOG.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,11 +2,22 @@
All notable changes to `dash` will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).

## [0.7.0] - 2020-07-28
### Added
- Dash for R now supports an `update_title` parameter, as in Dash for Python. [#218](https://github.com/plotly/dashR/pull/218)

### Changed
- `dash-renderer` updated to v1.6.0
- Dash for R now depends on v4.9.0 of `dashTable` (provides several fixes from [#806](https://github.com/plotly/dash-table/pull/806), [#808](https://github.com/plotly/dash-table/pull/808) and [#809](https://github.com/plotly/dash-table/pull/809)) and v1.10.2 of `dashCoreComponents` (which updates Plotly.js to 1.54.7 via [#835](https://github.com/plotly/dash-core-components/pull/835)).

### Removed
- Dash for R no longer produces a warning when callbacks with no IDs are declared; see [#216](https://github.com/plotly/dashR/pull/216).

## [0.6.3] - 2020-06-25
**Changed**
### Changed
- `dash-renderer` updated to v1.5.1

**Fixed**
### Fixed
- Resolves a regression that prevented multiple loading states from displaying concurrently when a callback updates multiple outputs (for more details, see [#1310](https://github.com/plotly/dash/pull/1310)).

## [0.6.2] - 2020-06-19
Expand Down
10 changes: 5 additions & 5 deletions DESCRIPTION
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
Package: dash
Title: An Interface to the Dash Ecosystem for Authoring Reactive Web Applications
Version: 0.6.3
Version: 0.7.0
Authors@R: c(person("Chris", "Parmer", role = c("aut"), email = "chris@plotly.com"), person("Ryan Patrick", "Kyle", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-5829-9867"), email = "ryan@plotly.com"), person("Carson", "Sievert", role = c("aut"), comment = c(ORCID = "0000-0002-4958-2844")), person("Hammad", "Khan", role = c("aut"), email = "hammadkhan@plotly.com"), person(family = "Plotly Technologies", role = "cph"))
Description: A framework for building analytical web applications, Dash offers a pleasant and productive development experience. No JavaScript required.
Depends:
R (>= 3.0.2)
Imports:
dashHtmlComponents (== 1.0.3),
dashCoreComponents (== 1.10.1),
dashTable (== 4.8.1),
dashCoreComponents (== 1.10.2),
dashTable (== 4.9.0),
R6,
fiery (> 1.0.0),
routr (> 0.2.0),
Expand All@@ -33,8 +33,8 @@ Collate:
'print.R'
'internal.R'
Remotes: plotly/dash-html-components@e63acfa,
plotly/dash-core-components@5049379,
plotly/dash-table@9603c6c
plotly/dash-core-components@0770afb,
plotly/dash-table@75ac3d9
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Expand Down
19 changes: 13 additions & 6 deletions R/dash.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -55,11 +55,16 @@ Dash <- R6::R6Class(
#' possible layout mis-specifications when registering a callback.
#' @param show_undo_redo Logical. Set to `TRUE` to enable undo and redo buttons for
#' stepping through the history of the app state.
#' @param update_title Character. Defaults to `Updating...`; configures the document.title
#' (the text that appears in a browser tab) text when a callback is being run.
#' Set to NULL or '' if you don't want the document.title to change or if you
#' want to control the document.title through a separate component or
#' clientside callback.
initialize = function(server = fiery::Fire$new(),
assets_folder = 'assets',
assets_url_path = '/assets',
assets_folder = "assets",
assets_url_path = "/assets",
eager_loading = FALSE,
assets_ignore = '',
assets_ignore = "",
serve_locally = TRUE,
meta_tags = NULL,
url_base_pathname = "/",
Expand All@@ -69,7 +74,8 @@ Dash <- R6::R6Class(
external_stylesheets = NULL,
compress = TRUE,
suppress_callback_exceptions = FALSE,
show_undo_redo = FALSE) {
show_undo_redo = FALSE,
update_title="Updating...") {

# argument type checking
assertthat::assert_that(inherits(server, "Fire"))
Expand All@@ -96,6 +102,7 @@ Dash <- R6::R6Class(
self$config$external_scripts <- external_scripts
self$config$external_stylesheets <- external_stylesheets
self$config$show_undo_redo <- show_undo_redo
self$config$update_title <- update_title

# ------------------------------------------------------------
# Initialize a route stack and register a static resource route
Expand DownExpand Up@@ -1669,7 +1676,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand All@@ -1687,7 +1694,7 @@ Dash <- R6::R6Class(
config <- sprintf("<script id='_dash-config' type='application/json'> %s </script>", to_JSON(self$config))

if (is.null(private$name))
private$name <- 'dash'
private$name <- 'Dash'

if (!is.null(private$custom_index)) {
string_index <- glue::glue(private$custom_index, .open = "{%", .close = "%}")
Expand Down
16 changes: 8 additions & 8 deletions R/internal.R
Original file line numberDiff line numberDiff line change
Expand Up@@ -36,9 +36,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js",
stylesheet = NULL,
Expand All@@ -48,9 +48,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-dev` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.dev.js.map",
stylesheet = NULL,
Expand All@@ -60,9 +60,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js",
stylesheet = NULL,
Expand All@@ -72,9 +72,9 @@
all_files = FALSE),
class = "html_dependency"),
`dash-renderer-map-prod` = structure(list(name = "dash-renderer",
version = "1.5.1",
version = "1.6.0",
src = list(href = "https://unpkg.com/dash-renderer@1.5.1",
file = "lib/dash-renderer@1.5.1"),
file = "lib/dash-renderer@1.6.0"),
meta = NULL,
script = "dash-renderer/dash_renderer.min.js.map",
stylesheet = NULL,
Expand Down

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
Expand Up@@ -34803,7 +34803,7 @@ var getLayoutCallbacks = function getLayoutCallbacks(graphs, paths, layout, opti
Exclusion of inputs happens when:
- an input is missing
- an input in the initial callback chain depends only on excluded inputs
Further execlusion might happen after callbacks return with:
Further exclusion might happen after callbacks return with:
- PreventUpdate
- no_update
*/
Expand DownExpand Up@@ -35507,7 +35507,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
* @param {string} location e.g. "prop", "context", "child context"
* @param {string} componentName Name of the component for error messages.
* @param {?Function} getStack Returns the component stack.
* @return {string} Any error messsage resulting from checking the types
* @return {string} Any error message resulting from checking the types
*/

function checkPropTypes(typeSpecs, values, location, componentName) {
Expand DownExpand Up@@ -35600,19 +35600,38 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
_classCallCheck(this, DocumentTitle);

_this = _super.call(this, props);
var update_title = props.config.update_title;
_this.state = {
initialTitle: document.title
title: document.title,
update_title: update_title
};
return _this;
}

_createClass(DocumentTitle, [{
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(props) {
if (!this.state.update_title) {
// Let callbacks or other components have full control over title
return;
}

if (props.isLoading) {
document.title = 'Updating...';
this.setState({
title: document.title
});

if (this.state.update_title) {
document.title = this.state.update_title;
}
} else {
document.title = this.state.initialTitle;
if (document.title === this.state.update_title) {
document.title = this.state.title;
} else {
this.setState({
title: document.title
});
}
}
}
}, {
Expand All@@ -35631,11 +35650,15 @@ var DocumentTitle = /*#__PURE__*/function (_Component) {
}(react__WEBPACK_IMPORTED_MODULE_1__["Component"]);

DocumentTitle.propTypes = {
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired
isLoading: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.bool.isRequired,
config: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.shape({
update_title: prop_types__WEBPACK_IMPORTED_MODULE_2___default.a.string
})
};
/* harmony default export */ __webpack_exports__["default"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_0__["connect"])(function (state) {
return {
isLoading: state.isLoading
isLoading: state.isLoading,
config: state.config
};
})(DocumentTitle));

Expand DownExpand Up@@ -38281,7 +38304,7 @@ var observer = {
return group.slice(0, -1);
}, Object(ramda__WEBPACK_IMPORTED_MODULE_0__["values"])(Object(ramda__WEBPACK_IMPORTED_MODULE_0__["groupBy"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["getUniqueIdentifier"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["concat"])(watched, requested)))));
/*
3. Modify or remove callbacks that are outputing to non-existing layout `id`.
3. Modify or remove callbacks that are outputting to non-existing layout `id`.
*/

var _pruneCallbacks = Object(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["pruneCallbacks"])(requested, paths),
Expand DownExpand Up@@ -38389,7 +38412,7 @@ var observer = {
// If there is no `stored` callback for the group, no outputs were dropped -> `cb` is kept
if (!cb.executionGroup || !pendingGroups[cb.executionGroup] || !pendingGroups[cb.executionGroup].length) {
return false;
} // Get all intputs for `cb`
} // Get all inputs for `cb`


var inputs = Object(ramda__WEBPACK_IMPORTED_MODULE_0__["map"])(_actions_dependencies_ts__WEBPACK_IMPORTED_MODULE_3__["combineIdAndProp"], Object(ramda__WEBPACK_IMPORTED_MODULE_0__["flatten"])(cb.getInputs(paths))); // Get all the potentially updated props for the group so far
Expand DownExpand Up@@ -39189,7 +39212,7 @@ var CallbackActionType;
CallbackActionType["RemoveBlocked"] = "Callbacks.RemoveBlocked";
CallbackActionType["RemoveExecuted"] = "Callbacks.RemoveExecuted";
CallbackActionType["RemoveExecuting"] = "Callbacks.RemoveExecuting";
CallbackActionType["RemovePrioritized"] = "Callbacks.ReomvePrioritized";
CallbackActionType["RemovePrioritized"] = "Callbacks.RemovePrioritized";
CallbackActionType["RemoveRequested"] = "Callbacks.RemoveRequested";
CallbackActionType["RemoveStored"] = "Callbacks.RemoveStored";
CallbackActionType["RemoveWatched"] = "Callbacks.RemoveWatched";
Expand Down

Large diffs are not rendered by default.

Loading