| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- HTMLWidgets.widget({
- name: 'grViz',
- type: 'output',
- initialize: function(el, width, height) {
-
- return {
- // TODO: add instance fields as required
- }
- },
- renderValue: function(el, x, instance) {
- // use this to sort of make our diagram responsive
- // or at a minimum fit within the bounds set by htmlwidgets
- // for the parent container
- function makeResponsive(el){
- var svg = el.getElementsByTagName("svg")[0];
- if(svg){
- if(svg.width) {svg.removeAttribute("width")};
- if(svg.height) {svg.removeAttribute("height")};
- svg.style.width = "100%";
- svg.style.height = "100%";
- }
- };
-
- if ( x.diagram != "" ) {
-
- if ( typeof x.config === "undefined" ){
- x.config = {};
- x.config.engine = "dot";
- x.config.options = {};
- }
-
- try {
- el.innerHTML = Viz( x.diagram, format="svg", engine=x.config.engine, options=x.config.options );
-
- makeResponsive(el);
-
- // set up a container for tasks to perform after completion
- // one example would be add callbacks for event handling
- // styling
- if (!(typeof x.tasks === "undefined") ){
- if ( (typeof x.tasks.length === "undefined") ||
- (typeof x.tasks === "function" ) ) {
- // handle a function not enclosed in array
- // should be able to remove once using jsonlite
- x.tasks = [x.tasks];
- }
- x.tasks.map(function(t){
- // for each tasks add it to the mermaid.tasks with el
- t.call(el);
- })
- }
- } catch(e){
- var p = document.createElement("pre")
- p.innerText = e;
- el.appendChild(p);
- }
- }
-
- },
- resize: function(el, width, height, instance) {
-
- }
-
- });
|