Advertisement
avr39ripe

jsMarkerClass

Mar 28th, 2021
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>Study</title>
  6. </head>
  7. <body>
  8.     <script>
  9.         'use strict'
  10.         class Marker {
  11.             static inkPerSymbol = 0.5;
  12.             constructor(color, ink) {
  13.                 this._color = color
  14.                 this._ink = ink > 100 ? 100 : ink;
  15.             }
  16.  
  17.             _countSpaces(message,idx = message.length) {
  18.                 let spaces = 0;
  19.                 for (let spacePos = -1; ((spacePos = message.indexOf(' ', spacePos + 1)) != -1) && (spacePos+1 <= idx); ++spaces);
  20.                 return spaces;
  21.             }
  22.             _count(message) {
  23.  
  24.                 let needInk = Math.ceil((message.length - this._countSpaces(message)) * Marker.inkPerSymbol);
  25.                 if (needInk <= this._ink) {
  26.                     return message.length;
  27.                 }
  28.                 else {
  29.                     let len = 0;
  30.                     for (let haveInk = this._ink; haveInk > 0; ++len) {
  31.                         if (message[len] != ' ') {
  32.                             haveInk -= 0.5;
  33.                         }
  34.                     }
  35.                     return len;
  36.                 }
  37.             }
  38.  
  39.             printText(message) {
  40.                 let msgPrintableLen = this._count(message);
  41.                 if (msgPrintableLen > 0) {
  42.                     document.write(`<h1 style="color: ${this._color};">${message.slice(0, msgPrintableLen)}</h1>`)
  43.                     this._ink -= ((msgPrintableLen - this._countSpaces(message, msgPrintableLen)) * Marker.inkPerSymbol);
  44.                 }
  45.  
  46.                 if (msgPrintableLen <= 0 || this._ink <= 0)
  47.                 {
  48.                     console.log(`Marker - ${this._color} is empty!`);
  49.                 }
  50.             }
  51.         }
  52.  
  53.         class MarkerFillable extends Marker {
  54.             refill(ink) {
  55.                 this._ink += ink > 100 ? 100 : ink;
  56.             }
  57.         }
  58.  
  59.         let marker1 = new Marker('blue', 13);
  60.         //let msg = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.';
  61.         marker1.printText('Lorem Ipsum is s');
  62.         marker1.printText('Lorem');
  63.         marker1.printText('Ipsum is si');
  64.  
  65.  
  66.         let marker2 = new MarkerFillable('red', 13);
  67.         marker2.printText('Lorem Ipsum is s');
  68.         marker2.printText('Lorem');
  69.         marker2.printText('Ipsum is simply');
  70.         marker2.refill(20);
  71.         marker2.printText('Lorem Ipsum is simply dummy text of the printing and typesetting industry.');
  72.     </script>
  73. </body>
  74. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement