- Insert a cell by moving with arrow keys and typing any letter.
- Copy cell groups as a single string and paste into a new input cell.
- Improved
Short
function for better formatting in outputs. - New controls for navigating presentation slides using RevealJS API.
InputRange
sliders can be updated programmatically while maintaining state.Manipulate
supports programmatic control with persistent state.
const balloonContainer = document.getElementById("balloon-container"); function random(num) { return Math.floor(Math.random() * num); } function getRandomStyles() { var r = random(255); var g = random(255); var b = random(255); var mt = random(200); var ml = random(50); var dur = random(5) + 5; return ` background-color: rgba(${r},${g},${b},0.7); color: rgba(${r},${g},${b},0.7); box-shadow: inset -7px -3px 10px rgba(${r - 10},${g - 10},${b - 10},0.7); margin: ${mt}px 0 0 ${ml}px; animation: float ${dur}s ease-in infinite `; } function createBalloons(num) { for (var i = num; i > 0; i--) { var balloon = document.createElement("div"); balloon.className = "balloon"; balloon.style.cssText = getRandomStyles(); balloonContainer.append(balloon); } } function removeBalloons() { balloonContainer.style.opacity = 0; setTimeout(() => { balloonContainer.remove() }, 500) } createBalloons(10); setTimeout(removeBalloons, 15000); return '';
UI Improvementsโ
How to Add a Cell Between Othersโ
We have changed the method for creating a cell between other cells. Simply move with the arrows down and type any letter.
Copy Cell Groupโ
There is a new feature in the cell properties.
It compresses input and all output cells into a single string.
Paste the copied content into a new empty input cell.
You can also copy non-Wolfram Language outputs in the same way.
Boxes or Decorationsโ
Reimplementation of Short
โ
This expression is designed to shorten the output and is used in many outputs of Wolfram Language expressions, such as NonLinearModelFit
, series outputs, and others. The native version often broke our internal formatting, but now we have replaced it with our implementation. It can be used directly.
Table[RandomColor[], {100}] // Short Table[RandomColor[], {100}, {3}, {30}] // Short
{(*VB[*)(RGBColor[0.4285740492163317, 0.7913909357229074, 0.7217959017443194])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8qWiAZfPNg7m37oi2/M0SFg1/aF2nI8ez4LPHcHgBoWBk5"*)(*]VB*),(*VB[*)(RGBColor[0.3890298402552268, 0.018771935566063824, 0.5120042572841128])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8q6pF1ybr79IZ9EcP/KNfPFpPti3zC+g6EJT2wBwBoExmp"*)(*]VB*),(*VB[*)(RGBColor[0.16936020587613765, 0.9017860121159591, 0.6366193309657833])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8qerBmb8KMtUfti+49PxCWd/uNfVHG7/MN+vFP7AGa6hy7"*)(*]VB*),<<96>>}
{{{(*VB[*)(RGBColor[0.7325831065134378, 0.5979894508466139, 0.1719085829570397])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8qsqtsUggqfG5fNGX59aO7lB7bFwU8vLlNkvGYPQBpXxoN"*)(*]VB*),(*VB[*)(RGBColor[0.44795698759189584, 0.044087058186223826, 0.8720488878983641])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8qUjB+dyJ49R37ooREHaMpk5bZFxnoHBS8/Py1PQBfqRl1"*)(*]VB*),(*VB[*)(RGBColor[0.6606665033903807, 0.9586376332282864, 0.9336369327142091])(*,*)(*"1:eJxTTMoPSmNiYGAo5gUSYZmp5S6pyflFiSX5RcEsQBHn4PCQNGaQPAeQCHJ3cs7PyS8q2vfLWERP5al9kdfR3Csaa9/ZF3XxdPdHPXhrDwBlZRn0"*)(*]VB*),<<26>>},<<1>>},<<98>>}
Programmatic Controls of Presentationโ
Similar to FrontEditorSelected
, we have added a method to interact with a selected set of slides in the notebook. For example:
.slide # First --- # Second
Now try to run this
FrontSlidesSelected["navigateNext", 1] // FrontSubmit;
We directly forward your commands to RevealJS API. Please see it for more available commands.
Programmatic Controls of Slidersโ
We added an extra option to control InputRange
programmatically
sliderPos = 0.4; InputRange[0,1,0.1, "TrackedExpression"->Offload[sliderPos]]
(*VB[*)(EventObject[<|"Id" -> "f903686f-d40c-4727-a3c7-dd83755ecf57", "Initial" -> 0.5, "View" -> "776c46e6-7c4a-480c-b713-dac670eac7f0"|>])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm5ubJZuYpZrpmiebJOqaWBgk6yaZGxrrpiQmm5kbpCYmm6cZAACBvBXV"*)(*]VB*)
If you set sliderPos
symbol to a new value, it will move the slider above
sliderPos = RandomReal[];
It will still trigger an event and revert to the set value even if you refresh the page. In this sense, you give your slider a persistent state.
Programmatic Controls of Manipulate*โ
One can do the same for Manipulate
or ManipulatePlot
. Keep in mind to use lists for them
manList = {0.3, 0.8}; ManipulatePlot[Sinc[w x + b (*SpB[*)Power[x(*|*),(*|*)2](*]SpB*)], {x,-10,10}, {w,0,1}, {b,0,1}, "TrackedExpression"->Offload[manList]]
(*GB[*){{(*VB[*)(Graphics[{AbsoluteThickness[2], RGBColor[0.368417, 0.506779, 0.709798], Line[Offload[pts$273899]]}, ImageSize -> {400, 300}, PlotRange -> Automatic, Axes -> True, TransitionType -> "Linear", TransitionDuration -> 50, Epilog -> {}, Prolog -> {}, AxesLabel -> {}, "TrackedExpression" -> Offload[manList], PlotRange -> {{-11., 11.}, {-0.27646932615223113, 1.0607842536262968}}])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWncIB4HkHAvSizIyEwuTmOGyftkFpdAVAsCCcek4vyc0pLUEKCi7LzU4uJMJqAoRDVIf5C7k3N+Tn5RUcG0SU9Vply3LzKc9nJ6h/kD+6LjLTO8V217Zo+w2iczLxXCYwcS/mlpOfmJKcVcQHZBSbGKkbmxhaVlGhNMdVBpTmoxJ5DhmZuYnhqcWZWKkAM5MnMC0KhMHSCBRU9ATn5JUGJeOoTnWFqSn5tYkpmMphLEcKwA+grECCkqTUWT5wMLJ+YVZ5Zk5ueFVBakBrNB/ZFYhKZWCEWtS2lRIojONGLAcB/ICNeCzJz89DQGlFDHVBZQlE9IGSfUDz6JSak5+FQGC0JcmJydmuJaUVAEisz8PMz4ALFzE/NwWAUPWNTIQOUVMYCB2gEYwwFNvvFjV9qajRf3F534c+3Fjx8f7AHOOqZd"*)(*]VB*)(*|*),(*|*)(*VB[*)(EventObject[<|"Id" -> "b8afcf15-6d9d-4e5f-812b-1963cf0cbcbc", "Initial" -> {0.5, 0.5}, "View" -> "52c74b0c-1029-4b9c-8c74-a7b1b6ed6cf1"|>])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmxolm5skGSTrGhoYWeqaJFkm61oARXQTzZMMk8xSU8yS0wwBf0UVzQ=="*)(*]VB*)}}(*]GB*)
manList = RandomReal[{0,1}, 2];
Minor bug fixesโ
- Contexts aliases
- HID devices plists for MacOS
- Better control over
ViewBox
- CD/CI for CSockets library
Ballon animation by Jemima (codepen)