1 /* 2 Copyright 2008-2024 3 Matthias Ehmann, 4 Michael Gerhaeuser, 5 Carsten Miller, 6 Bianca Valentin, 7 Alfred Wassermann, 8 Peter Wilfahrt 9 10 This file is part of JSXGraph. 11 12 JSXGraph is free software dual licensed under the GNU LGPL or MIT License. 13 14 You can redistribute it and/or modify it under the terms of the 15 16 * GNU Lesser General Public License as published by 17 the Free Software Foundation, either version 3 of the License, or 18 (at your option) any later version 19 OR 20 * MIT License: https://github.com/jsxgraph/jsxgraph/blob/master/LICENSE.MIT 21 22 JSXGraph is distributed in the hope that it will be useful, 23 but WITHOUT ANY WARRANTY; without even the implied warranty of 24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 GNU Lesser General Public License for more details. 26 27 You should have received a copy of the GNU Lesser General Public License and 28 the MIT License along with JSXGraph. If not, see <https://www.gnu.org/licenses/> 29 and <https://opensource.org/licenses/MIT/>. 30 */ 31 32 /*global JXG: true, define: true, AMprocessNode: true, MathJax: true, document: true */ 33 /*jslint nomen: true, plusplus: true, newcap:true, unparam: true*/ 34 /*eslint no-unused-vars: "off"*/ 35 36 /** 37 * @fileoverview JSXGraph can use various technologies to render the contents of a construction, e.g. 38 * SVG, VML, and HTML5 Canvas. To accomplish this, The rendering and the logic and control mechanisms 39 * are completely separated from each other. Every rendering technology has it's own class, called 40 * Renderer, e.g. SVGRenderer for SVG, the same for VML and Canvas. The common base for all available 41 * renderers is the class AbstractRenderer. 42 */ 43 44 import JXG from "../jxg.js"; 45 import AbstractRenderer from "./abstract.js"; 46 47 /** 48 * This renderer draws nothing. It is intended to be used in environments where none of our rendering engines 49 * are available, e.g. WebWorkers. All methods are empty. 50 * 51 * @class JXG.NoRenderer 52 * @augments JXG.AbstractRenderer 53 * @see JXG.AbstractRenderer 54 */ 55 JXG.NoRenderer = function () { 56 /** 57 * If this property is set to <tt>true</tt> the visual properties of the elements are updated 58 * on every update. Visual properties means: All the stuff stored in the 59 * {@link JXG.GeometryElement#visProp} property won't be set if enhancedRendering is <tt>false</tt> 60 * @type Boolean 61 * @default true 62 */ 63 this.enhancedRendering = false; 64 65 /** 66 * This is used to easily determine which renderer we are using 67 * @example if (board.renderer.type === 'vml') { 68 * // do something 69 * } 70 * @type String 71 */ 72 this.type = "no"; 73 }; 74 75 JXG.extend( 76 JXG.NoRenderer.prototype, 77 /** @lends JXG.NoRenderer.prototype */ { 78 /* ******************************** * 79 * Point drawing and updating * 80 * ******************************** */ 81 82 /** 83 * Draws a point on the {@link JXG.Board}. 84 * @param {JXG.Point} element Reference to a {@link JXG.Point} object that has to be drawn. 85 * @see Point 86 * @see JXG.Point 87 * @see JXG.AbstractRenderer#updatePoint 88 * @see JXG.AbstractRenderer#changePointStyle 89 */ 90 drawPoint: function (element) {}, 91 92 /** 93 * Updates visual appearance of the renderer element assigned to the given {@link JXG.Point}. 94 * @param {JXG.Point} element Reference to a {@link JXG.Point} object, that has to be updated. 95 * @see Point 96 * @see JXG.Point 97 * @see JXG.AbstractRenderer#drawPoint 98 * @see JXG.AbstractRenderer#changePointStyle 99 */ 100 updatePoint: function (element) {}, 101 102 /** 103 * Changes the style of a {@link JXG.Point}. This is required because the point styles differ in what 104 * elements have to be drawn, e.g. if the point is marked by a "x" or a "+" two lines are drawn, if 105 * it's marked by spot a circle is drawn. This method removes the old renderer element(s) and creates 106 * the new one(s). 107 * @param {JXG.Point} element Reference to a {@link JXG.Point} object, that's style is changed. 108 * @see Point 109 * @see JXG.Point 110 * @see JXG.AbstractRenderer#updatePoint 111 * @see JXG.AbstractRenderer#drawPoint 112 */ 113 changePointStyle: function (element) {}, 114 115 /* ******************************** * 116 * Lines * 117 * ******************************** */ 118 119 /** 120 * Draws a line on the {@link JXG.Board}. 121 * @param {JXG.Line} element Reference to a line object, that has to be drawn. 122 * @see Line 123 * @see JXG.Line 124 * @see JXG.AbstractRenderer#updateLine 125 */ 126 drawLine: function (element) {}, 127 128 /** 129 * Updates visual appearance of the renderer element assigned to the given {@link JXG.Line}. 130 * @param {JXG.Line} element Reference to the {@link JXG.Line} object that has to be updated. 131 * @see Line 132 * @see JXG.Line 133 * @see JXG.AbstractRenderer#drawLine 134 */ 135 updateLine: function (element) {}, 136 137 /** 138 * Creates a rendering node for ticks added to a line. 139 * @param {JXG.Line} element A arbitrary line. 140 * @see Line 141 * @see Ticks 142 * @see JXG.Line 143 * @see JXG.Ticks 144 * @see JXG.AbstractRenderer#updateTicks 145 */ 146 drawTicks: function (element) {}, 147 148 /** 149 * Update {@link Ticks} on a {@link JXG.Line}. This method is only a stub and has to be implemented 150 * in any descendant renderer class. 151 * @param {JXG.Line} element Reference of an line object, thats ticks have to be updated. 152 * @see Line 153 * @see Ticks 154 * @see JXG.Line 155 * @see JXG.Ticks 156 * @see JXG.AbstractRenderer#drawTicks 157 */ 158 updateTicks: function (element) { 159 /* stub */ 160 }, 161 162 /* ************************** 163 * Curves 164 * **************************/ 165 166 /** 167 * Draws a {@link JXG.Curve} on the {@link JXG.Board}. 168 * @param {JXG.Curve} element Reference to a graph object, that has to be plotted. 169 * @see Curve 170 * @see JXG.Curve 171 * @see JXG.AbstractRenderer#updateCurve 172 */ 173 drawCurve: function (element) {}, 174 175 /** 176 * Updates visual appearance of the renderer element assigned to the given {@link JXG.Curve}. 177 * @param {JXG.Curve} element Reference to a {@link JXG.Curve} object, that has to be updated. 178 * @see Curve 179 * @see JXG.Curve 180 * @see JXG.AbstractRenderer#drawCurve 181 */ 182 updateCurve: function (element) {}, 183 184 /* ************************** 185 * Circle related stuff 186 * **************************/ 187 188 /** 189 * Draws a {@link JXG.Circle} 190 * @param {JXG.Circle} element Reference to a {@link JXG.Circle} object that has to be drawn. 191 * @see Circle 192 * @see JXG.Circle 193 * @see JXG.AbstractRenderer#updateEllipse 194 */ 195 drawEllipse: function (element) {}, 196 197 /** 198 * Updates visual appearance of a given {@link JXG.Circle} on the {@link JXG.Board}. 199 * @param {JXG.Circle} element Reference to a {@link JXG.Circle} object, that has to be updated. 200 * @see Circle 201 * @see JXG.Circle 202 * @see JXG.AbstractRenderer#drawEllipse 203 */ 204 updateEllipse: function (element) {}, 205 206 /* ************************** 207 * Polygon related stuff 208 * **************************/ 209 210 /** 211 * Draws a {@link JXG.Polygon} on the {@link JXG.Board}. 212 * @param {JXG.Polygon} element Reference to a Polygon object, that is to be drawn. 213 * @see Polygon 214 * @see JXG.Polygon 215 * @see JXG.AbstractRenderer#updatePolygon 216 */ 217 drawPolygon: function (element) {}, 218 219 /** 220 * Updates properties of a {@link JXG.Polygon}'s rendering node. 221 * @param {JXG.Polygon} element Reference to a {@link JXG.Polygon} object, that has to be updated. 222 * @see Polygon 223 * @see JXG.Polygon 224 * @see JXG.AbstractRenderer#drawPolygon 225 */ 226 updatePolygon: function (element) {}, 227 228 /* ************************** 229 * Text related stuff 230 * **************************/ 231 232 /** 233 * Shows a small copyright notice in the top left corner of the board. 234 * @param {String} str The copyright notice itself 235 * @param {Number} fontsize Size of the font the copyright notice is written in 236 */ 237 displayCopyright: function (str, fontsize) { 238 /* stub */ 239 }, 240 241 /** 242 * An internal text is a {@link JXG.Text} element which is drawn using only 243 * the given renderer but no HTML. This method is only a stub, the drawing 244 * is done in the special renderers. 245 * @param {JXG.Text} element Reference to a {@link JXG.Text} object 246 * @see Text 247 * @see JXG.Text 248 * @see JXG.AbstractRenderer#updateInternalText 249 * @see JXG.AbstractRenderer#drawText 250 * @see JXG.AbstractRenderer#updateText 251 * @see JXG.AbstractRenderer#updateTextStyle 252 */ 253 drawInternalText: function (element) { 254 /* stub */ 255 }, 256 257 /** 258 * Updates visual properties of an already existing {@link JXG.Text} element. 259 * @param {JXG.Text} element Reference to an {@link JXG.Text} object, that has to be updated. 260 * @see Text 261 * @see JXG.Text 262 * @see JXG.AbstractRenderer#drawInternalText 263 * @see JXG.AbstractRenderer#drawText 264 * @see JXG.AbstractRenderer#updateText 265 * @see JXG.AbstractRenderer#updateTextStyle 266 */ 267 updateInternalText: function (element) { 268 /* stub */ 269 }, 270 271 /** 272 * Displays a {@link JXG.Text} on the {@link JXG.Board} by putting a HTML div over it. 273 * @param {JXG.Text} element Reference to an {@link JXG.Text} object, that has to be displayed 274 * @see Text 275 * @see JXG.Text 276 * @see JXG.AbstractRenderer#drawInternalText 277 * @see JXG.AbstractRenderer#updateText 278 * @see JXG.AbstractRenderer#updateInternalText 279 * @see JXG.AbstractRenderer#updateTextStyle 280 */ 281 drawText: function (element) {}, 282 283 /** 284 * Updates visual properties of an already existing {@link JXG.Text} element. 285 * @param {JXG.Text} element Reference to an {@link JXG.Text} object, that has to be updated. 286 * @see Text 287 * @see JXG.Text 288 * @see JXG.AbstractRenderer#drawText 289 * @see JXG.AbstractRenderer#drawInternalText 290 * @see JXG.AbstractRenderer#updateInternalText 291 * @see JXG.AbstractRenderer#updateTextStyle 292 */ 293 updateText: function (element) {}, 294 295 /** 296 * Updates CSS style properties of a {@link JXG.Text} node. 297 * @param {JXG.Text} element Reference to the {@link JXG.Text} object, that has to be updated. 298 * @param {Boolean} doHighlight 299 * @see Text 300 * @see JXG.Text 301 * @see JXG.AbstractRenderer#drawText 302 * @see JXG.AbstractRenderer#drawInternalText 303 * @see JXG.AbstractRenderer#updateText 304 * @see JXG.AbstractRenderer#updateInternalText 305 */ 306 updateTextStyle: function (element, doHighlight) {}, 307 308 /** 309 * Set color and opacity of internal texts. 310 * SVG needs its own version. 311 * @private 312 * @see JXG.AbstractRenderer#updateTextStyle 313 * @see JXG.AbstractRenderer#updateInternalTextStyle 314 */ 315 updateInternalTextStyle: function (element, strokeColor, strokeOpacity) { 316 /* stub */ 317 }, 318 319 /* ************************** 320 * Image related stuff 321 * **************************/ 322 323 /** 324 * Draws an {@link JXG.Image} on a board; This is just a template that has to be implemented by special renderers. 325 * @param {JXG.Image} element Reference to the image object that is to be drawn 326 * @see Image 327 * @see JXG.Image 328 * @see JXG.AbstractRenderer#updateImage 329 */ 330 drawImage: function (element) { 331 /* stub */ 332 }, 333 334 /** 335 * Updates the properties of an {@link JXG.Image} element. 336 * @param {JXG.Image} element Reference to an {@link JXG.Image} object, that has to be updated. 337 * @see Image 338 * @see JXG.Image 339 * @see JXG.AbstractRenderer#drawImage 340 */ 341 updateImage: function (element) {}, 342 343 /** 344 * Applies transformations on images and text elements. This method is just a stub and has to be implemented in all 345 * descendant classes where text and image transformations are to be supported. 346 * @param {JXG.Image|JXG.Text} element A {@link JXG.Image} or {@link JXG.Text} object. 347 * @param {Array} transformations An array of {@link JXG.Transformation} objects. This is usually the transformations property 348 * of the given element <tt>el</tt>. 349 */ 350 transformImage: function (element, transformations) { 351 /* stub */ 352 }, 353 354 /** 355 * If the URL of the image is provided by a function the URL has to be updated during updateImage() 356 * @param {JXG.Image} element Reference to an image object. 357 * @see JXG.AbstractRenderer#updateImage 358 */ 359 updateImageURL: function (element) { 360 /* stub */ 361 }, 362 363 /* ************************** 364 * Render primitive objects 365 * **************************/ 366 367 /** 368 * Appends a node to a specific layer level. This is just an abstract method and has to be implemented 369 * in all renderers that want to use the <tt>createPrim</tt> model to draw. 370 * @param {Node} node A DOM tree node. 371 * @param {Number} level The layer the node is attached to. This is the index of the layer in 372 * {@link JXG.SVGRenderer#layer} or the <tt>z-index</tt> style property of the node in VMLRenderer. 373 */ 374 appendChildPrim: function (node, level) { 375 /* stub */ 376 }, 377 378 /** 379 * Stores the rendering nodes. This is an abstract method which has to be implemented in all renderers that use 380 * the <tt>createPrim</tt> method. 381 * @param {JXG.GeometryElement} element A JSXGraph element. 382 * @param {String} type The XML node name. Only used in VMLRenderer. 383 */ 384 appendNodesToElement: function (element, type) { 385 /* stub */ 386 }, 387 388 /** 389 * Creates a node of a given type with a given id. 390 * @param {String} type The type of the node to create. 391 * @param {String} id Set the id attribute to this. 392 * @returns {Node} Reference to the created node. 393 */ 394 createPrim: function (type, id) { 395 /* stub */ 396 return null; 397 }, 398 399 /** 400 * Removes an element node. Just a stub. 401 * @param {Node} node The node to remove. 402 */ 403 remove: function (node) { 404 /* stub */ 405 }, 406 407 /** 408 * Can be used to create the nodes to display arrows. This is an abstract method which has to be implemented 409 * in any descendant renderer. 410 * @param {JXG.GeometryElement} element The element the arrows are to be attached to. 411 */ 412 makeArrows: function (element) { 413 /* stub */ 414 }, 415 416 /** 417 * Updates an ellipse node primitive. This is an abstract method which has to be implemented in all renderers 418 * that use the <tt>createPrim</tt> method. 419 * @param {Node} node Reference to the node. 420 * @param {Number} x Centre X coordinate 421 * @param {Number} y Centre Y coordinate 422 * @param {Number} rx The x-axis radius. 423 * @param {Number} ry The y-axis radius. 424 */ 425 updateEllipsePrim: function (node, x, y, rx, ry) { 426 /* stub */ 427 }, 428 429 /** 430 * Refreshes a line node. This is an abstract method which has to be implemented in all renderers that use 431 * the <tt>createPrim</tt> method. 432 * @param {Node} node The node to be refreshed. 433 * @param {Number} p1x The first point's x coordinate. 434 * @param {Number} p1y The first point's y coordinate. 435 * @param {Number} p2x The second point's x coordinate. 436 * @param {Number} p2y The second point's y coordinate. 437 * @param {JXG.Board} board 438 */ 439 updateLinePrim: function (node, p1x, p1y, p2x, p2y, board) { 440 /* stub */ 441 }, 442 443 /** 444 * Updates a path element. This is an abstract method which has to be implemented in all renderers that use 445 * the <tt>createPrim</tt> method. 446 * @param {Node} node The path node. 447 * @param {String} pathString A string formatted like e.g. <em>'M 1,2 L 3,1 L5,5'</em>. The format of the string 448 * depends on the rendering engine. 449 * @param {JXG.Board} board Reference to the element's board. 450 */ 451 updatePathPrim: function (node, pathString, board) { 452 /* stub */ 453 }, 454 455 /** 456 * Builds a path data string to draw a point with a face other than <em>rect</em> and <em>circle</em>. Since 457 * the format of such a string usually depends on the renderer this method 458 * is only an abstract method. Therefore, it has to be implemented in the descendant renderer itself unless 459 * the renderer does not use the createPrim interface but the draw* interfaces to paint. 460 * @param {JXG.Point} element The point element 461 * @param {Number} size A positive number describing the size. Usually the half of the width and height of 462 * the drawn point. 463 * @param {String} type A string describing the point's face. This method only accepts the shortcut version of 464 * each possible face: <tt>x, +, |, -, [], <>, <<>>, ^, v, >, < 465 */ 466 updatePathStringPoint: function (element, size, type) { 467 /* stub */ 468 }, 469 470 /** 471 * Builds a path data string from a {@link JXG.Curve} element. Since the path data strings heavily depend on the 472 * underlying rendering technique this method is just a stub. Although such a path string is of no use for the 473 * CanvasRenderer, this method is used there to draw a path directly. 474 * @param element 475 */ 476 updatePathStringPrim: function (element) { 477 /* stub */ 478 }, 479 480 /** 481 * Builds a path data string from a {@link JXG.Curve} element such that the curve looks like 482 * hand drawn. 483 * Since the path data strings heavily depend on the 484 * underlying rendering technique this method is just a stub. Although such a path string is of no use for the 485 * CanvasRenderer, this method is used there to draw a path directly. 486 * @param element 487 */ 488 updatePathStringBezierPrim: function (element) { 489 /* stub */ 490 }, 491 492 /** 493 * Update a polygon primitive. 494 * @param {Node} node 495 * @param {JXG.Polygon} element A JSXGraph element of type {@link JXG.Polygon} 496 */ 497 updatePolygonPrim: function (node, element) { 498 /* stub */ 499 }, 500 501 /** 502 * Update a rectangle primitive. This is used only for points with face of type 'rect'. 503 * @param {Node} node The node yearning to be updated. 504 * @param {Number} x x coordinate of the top left vertex. 505 * @param {Number} y y coordinate of the top left vertex. 506 * @param {Number} w Width of the rectangle. 507 * @param {Number} h The rectangle's height. 508 */ 509 updateRectPrim: function (node, x, y, w, h) { 510 /* stub */ 511 }, 512 513 /* ************************** 514 * Set Attributes 515 * **************************/ 516 517 /** 518 * Sets a node's attribute. 519 * @param {Node} node The node that is to be updated. 520 * @param {String} key Name of the attribute. 521 * @param {String} val New value for the attribute. 522 */ 523 setPropertyPrim: function (node, key, val) { 524 /* stub */ 525 }, 526 527 /** 528 * Shows or hides an element on the canvas; Only a stub, requires implementation in the derived renderer. 529 * @param {JXG.GeometryElement} element Reference to the object that has to appear. 530 * @param {Boolean} value true to show the element, false to hide the element. 531 */ 532 display: function (element, value) { 533 if (element) { 534 element.visPropOld.visible = value; 535 } 536 }, 537 538 /** 539 * Shows a hidden element on the canvas; Only a stub, requires implementation in the derived renderer. 540 * 541 * Please use JXG.AbstractRenderer#display instead 542 * @param {JXG.GeometryElement} element Reference to the object that has to appear. 543 * @see JXG.AbstractRenderer#hide 544 * @deprecated 545 */ 546 show: function (element) { 547 /* stub */ 548 }, 549 550 /** 551 * Hides an element on the canvas; Only a stub, requires implementation in the derived renderer. 552 * 553 * Please use JXG.AbstractRenderer#display instead 554 * @param {JXG.GeometryElement} element Reference to the geometry element that has to disappear. 555 * @see JXG.AbstractRenderer#show 556 * @deprecated 557 */ 558 hide: function (element) { 559 /* stub */ 560 }, 561 562 /** 563 * Sets the buffering as recommended by SVGWG. Until now only Opera supports this and will be ignored by 564 * other browsers. Although this feature is only supported by SVG we have this method in {@link JXG.AbstractRenderer} 565 * because it is called from outside the renderer. 566 * @param {Node} node The SVG DOM Node which buffering type to update. 567 * @param {String} type Either 'auto', 'dynamic', or 'static'. For an explanation see 568 * {@link https://www.w3.org/TR/SVGTiny12/painting.html#BufferedRenderingProperty}. 569 */ 570 setBuffering: function (node, type) { 571 /* stub */ 572 }, 573 574 /** 575 * Sets an element's dash style. 576 * @param {JXG.GeometryElement} element An JSXGraph element. 577 */ 578 setDashStyle: function (element) { 579 /* stub */ 580 }, 581 582 /** 583 * Puts an object into draft mode, i.e. it's visual appearance will be changed. For GEONE<sub>x</sub>T backwards compatibility. 584 * @param {JXG.GeometryElement} element Reference of the object that is in draft mode. 585 */ 586 setDraft: function (element) {}, 587 588 /** 589 * Puts an object from draft mode back into normal mode. 590 * @param {JXG.GeometryElement} element Reference of the object that no longer is in draft mode. 591 */ 592 removeDraft: function (element) {}, 593 594 /** 595 * Sets up nodes for rendering a gradient fill. 596 * @param element 597 */ 598 setGradient: function (element) { 599 /* stub */ 600 }, 601 602 /** 603 * Updates the gradient fill. 604 * @param {JXG.GeometryElement} element An JSXGraph element with an area that can be filled. 605 */ 606 updateGradient: function (element) { 607 /* stub */ 608 }, 609 610 /** 611 * Sets the transition duration (in milliseconds) for fill color and stroke 612 * color and opacity. 613 * @param {JXG.GeometryElement} element Reference of the object that wants a 614 * new transition duration. 615 * @param {Number} duration (Optional) duration in milliseconds. If not given, 616 * element.visProp.transitionDuration is taken. This is the default. 617 */ 618 setObjectTransition: function (element, duration) { 619 /* stub */ 620 }, 621 622 /** 623 * Sets an objects fill color. 624 * @param {JXG.GeometryElement} element Reference of the object that wants a new fill color. 625 * @param {String} color Color in a HTML/CSS compatible format. If you don't want any fill color at all, choose 'none'. 626 * @param {Number} opacity Opacity of the fill color. Must be between 0 and 1. 627 */ 628 setObjectFillColor: function (element, color, opacity) { 629 /* stub */ 630 }, 631 632 /** 633 * Changes an objects stroke color to the given color. 634 * @param {JXG.GeometryElement} element Reference of the {@link JXG.GeometryElement} that gets a new stroke color. 635 * @param {String} color Color value in a HTML compatible format, e.g. <strong>#00ff00</strong> or <strong>green</strong> for green. 636 * @param {Number} opacity Opacity of the fill color. Must be between 0 and 1. 637 */ 638 setObjectStrokeColor: function (element, color, opacity) { 639 /* stub */ 640 }, 641 642 /** 643 * Sets an element's stroke width. 644 * @param {JXG.GeometryElement} element Reference to the geometry element. 645 * @param {Number} width The new stroke width to be assigned to the element. 646 */ 647 setObjectStrokeWidth: function (element, width) { 648 /* stub */ 649 }, 650 651 /** 652 * Sets the shadow properties to a geometry element. This method is only a stub, it is implemented in the actual renderers. 653 * @param {JXG.GeometryElement} element Reference to a geometry object, that should get a shadow 654 */ 655 setShadow: function (element) { 656 /* stub */ 657 }, 658 659 /** 660 * Highlights an object, i.e. changes the current colors of the object to its highlighting colors 661 * @param {JXG.GeometryElement} element Reference of the object that will be highlighted. 662 * @returns {JXG.AbstractRenderer} Reference to the renderer 663 */ 664 highlight: function (element) {}, 665 666 /** 667 * Uses the normal colors of an object, i.e. the opposite of {@link JXG.AbstractRenderer#highlight}. 668 * @param {JXG.GeometryElement} element Reference of the object that will get its normal colors. 669 * @returns {JXG.AbstractRenderer} Reference to the renderer 670 */ 671 noHighlight: function (element) {}, 672 673 /* ************************** 674 * renderer control 675 * **************************/ 676 677 /** 678 * Stop redraw. This method is called before every update, so a non-vector-graphics based renderer 679 * can use this method to delete the contents of the drawing panel. This is an abstract method every 680 * descendant renderer should implement, if appropriate. 681 * @see JXG.AbstractRenderer#unsuspendRedraw 682 */ 683 suspendRedraw: function () { 684 /* stub */ 685 }, 686 687 /** 688 * Restart redraw. This method is called after updating all the rendering node attributes. 689 * @see JXG.AbstractRenderer#suspendRedraw 690 */ 691 unsuspendRedraw: function () { 692 /* stub */ 693 }, 694 695 /** 696 * The tiny zoom bar shown on the bottom of a board (if showNavigation on board creation is true). 697 * @param {JXG.Board} board Reference to a JSXGraph board. 698 */ 699 drawNavigationBar: function (board) {}, 700 701 /** 702 * Wrapper for getElementById for maybe other renderers which elements are not directly accessible by DOM methods like document.getElementById(). 703 * @param {String} id Unique identifier for element. 704 * @returns {Object} Reference to a JavaScript object. In case of SVG/VMLRenderer it's a reference to a SVG/VML node. 705 */ 706 getElementById: function (id) { 707 return null; 708 }, 709 710 /** 711 * Resizes the rendering element 712 * @param {Number} w New width 713 * @param {Number} h New height 714 */ 715 resize: function (w, h) { 716 /* stub */ 717 }, 718 719 removeToInsertLater: function () { 720 return function () {}; 721 } 722 } 723 ); 724 725 /** 726 * @ignore 727 */ 728 JXG.NoRenderer.prototype = new AbstractRenderer(); 729 730 export default JXG.NoRenderer; 731