Html2canvas: DOMException: 'ShadowRoot' рдкрд░ 'рдЧреЛрдж рд▓реА рдЧрдИ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ' рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдХрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдирд╡ре░ 2019  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: niklasvh/html2canvas

DOMException: 'ShadowRoot' рдкрд░ 'рдЧреЛрдж рд▓реА рдЧрдИ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ' рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдХрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреЛрдгреАрдп 8 рдФрд░ рдЖрдпрдирд┐рдХ 4 . рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ; рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ ?

рдХреЛрдгреАрдп 8 рдФрд░ рдЖрдпрдирд┐рдХ 4 . рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛

рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрдпрдирд┐рдХ 4, рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?

рдореИрдВ рдЖрдпрдирд┐рдХ 5 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ... рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдЖрдпрдирд┐рдХ4 . рдореЗрдВ рдпреБрдкреЗрдВрдЧ рд╕реЗ рдЕрдВрддрд░рд┐рдо рдпреЛрдЬрдирд╛

  • index.html
<body>
  <div id="html2canvas"></div>
  <app-root></app-root>
</body>
  • xxx.ts
const element = document.getElementById('html2canvas');
const targetElement = document.getElementById('target').cloneNode(true);
element.appendChild(targetElement);
this.html2canvas.html2canvas(element.firstChild).then((img) => {
    this.img = img;
    element.firstChild.remove();
}).catch((res) => {
    console.log(res);
});
  • Html2canvasService.service.ts
import {Injectable} from '@angular/core';
import {AlertService} from './alert.service';

declare let html2canvas;

@Injectable()
export class Html2canvasService {
    constructor(private alert: AlertService) {

    }

    public html2canvas(ele) {

        if (!ele) {
            return;
        }

        const option = {allowTaint: true, useCORS: true};
        return html2canvas(ele, option).then((canvas) => {
            if (canvas) {
                return canvas.toDataURL('image/png');
            }
            return null;
        }).catch((res) => {
            console.log(res);
            return res;
        });
    }
}

@ рдЬреА-рдпрд╛рдирдкреЗрдВрдЧ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЖрдпрдирд┐рдХ 4 рдХреЛрдгреАрдп 8 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╢реБрдХреНрд░рд┐рдпрд╛!

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдзрдиреНрдпрд╡рд╛рдж!

@ рдЬреА-рдпрд╛рдирдкреЗрдВрдЧ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдореИрдВ рдЖрдпрдирд┐рдХ 4 рдХреЛрдгреАрдп 8 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд╢реБрдХреНрд░рд┐рдпрд╛!

Angular8 рдореЗрдВ рдирдП рдмрджрд▓рд╛рд╡ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг html2canvas рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ, html2canvas рдХреЛ рдХреЛрдгреАрдп рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ, рдЙрд╕ рдбреЛрдо рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдХреЛрдгреАрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (рдРрдк-рд░реВрдЯ) рдХреЗ рд╕рдорд╛рди рдкрд░рдд рдкрд░ рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

Angular8 рдореЗрдВ рдирдП рдмрджрд▓рд╛рд╡ рд╣реИрдВ рдЬреЛ html2canvas рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВред рдлрд┐рд░ html2canvas рдХреЛ рдХреЛрдгреАрдп рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЙрд╕ рдбреЛрдо рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдЬрд┐рд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ (рдРрдк-рд░реВрдЯ) рдХреА рдПрдХ рд╣реА рдкрд░рдд рдкрд░ рдЫрд╡рд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдХреЛрдгреАрдп рдХрд╛ рдкреНрд░рднрд╛рд╡ред
- рдЧреВрдЧрд▓ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛

image

рдХреНрдпрд╛ рдЖрдк xxx.ts рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? .pdf рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рднреА рд╣рдореЗрдВ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдореИрдВ .pdf рдлрд╝рд╛рдЗрд▓ рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБред
рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
(Google рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреАрдиреА рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд)
`
'@angular/core' рд╕реЗ {рдШрдЯрдХ, рдСрдирдЗрдирд┐рдЯ} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'src/app/_pipes/wc-expenditure-calc.pipe' рд╕реЗ {WcExpenditureCalcPipe} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
// рдкреАрдбреАрдПрдл рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ
{Router} рдХреЛ'@angular/router' рд╕реЗ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░реЗрдВ;
'ngx-export-as' рд╕реЗ {ExportAsService, ExportAsConfig} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
{рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо} рдХреЛ'@ionic/angular' рд╕реЗ рдЗрдВрдкреЛрд░реНрдЯ рдХрд░реЗрдВ;
'@ionic-native/file-opener/ngx' рд╕реЗ {FileOpener} рдЖрдпрд╛рдд рдХрд░реЗрдВ;
{рдлрд╝рд╛рдЗрд▓} рдХреЛ'@ionic-native/file/ngx' рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВ;
'@ionic-native/file-transfer/ngx' рд╕реЗ {FileTransfer, FileTransferObject} рдЖрдпрд╛рдд рдХрд░реЗрдВ;

  @Component({
    selector: 'app-wc-estimate',
    templateUrl: './wc-estimate.page.html',
    styleUrls: ['./wc-estimate.page.scss'],
    providers: [WcExpenditureCalcPipe]
  })
  export class WcEstimatePage implements OnInit {
    dataEntered: any;
    wcEstimate: any;

    // export config
    storageDirectory: any;

    exportAsConfig: ExportAsConfig = {
      type: 'pdf', // the type you want to download
      elementId: 'myDiv', // the id of html/table element
      options: {
        margin: 15,
        jsPDF: {
          orientation: 'portrait',
          format: 'a4',
          unit: 'mm'
        },
        pdfCallbackFn: this.pdfCallbackFn // to add header and footer
      },
    }
    constructor(
      public router: Router,
      private exportAsService: ExportAsService,
      private transfer: FileTransfer,
      private file: File,
      private platform: Platform,
      private fileOpener: FileOpener,
      private wcExpenditureCalcPipe: WcExpenditureCalcPipe
    ) {
      this.platform.ready().then(() => {
        if (!this.platform.is('cordova')) {
          return false;
        }

        if (this.platform.is('ios')) {
          this.storageDirectory = this.file.externalDataDirectory;
        }
        else if (this.platform.is('android')) {
          this.storageDirectory = this.file.externalDataDirectory;
        }
        else {
          return false;
        }
      });
    }

    ngOnInit() {
      this.dataEntered = JSON.parse(localStorage.getItem('DataEntered'));
      this.getValues(this.dataEntered);
    }
    getValues(dataEntered: any) {
      this.wcEstimate = this.wcExpenditureCalcPipe.getWCE(dataEntered)
      console.log(this.wcEstimate);
    }

    // export PDF
    export(event) {
      const fileTransfer: FileTransferObject = this.transfer.create();

      this.exportAsService.get(this.exportAsConfig).subscribe((data: any) => {
        const fileName = 'PReport ' + this.dataEntered.Project_Name + ' - WC Estimate.pdf';
        fileTransfer.download(data, this.storageDirectory + fileName).then((entry) => {
          this.fileOpener.open(entry.toURL(), 'application/pdf').then(() => {
          }).catch(e => {
            console.log('Error opening file', e);
          });
        }, (error) => {
          console.log('error ' + JSON.stringify(error));
        });
      });
      event.preventDefault();
    }
    pdfCallbackFn(pdf: any) {
      // example to add page number as footer to every page of pdf
      const noOfPages = pdf.internal.getNumberOfPages();
      for (let i = 1; i <= noOfPages; i++) {
        pdf.setPage(i);
        pdf.text('WC Estimate', 15, 10)
        pdf.text('Page ' + i + ' of ' + noOfPages, 15, pdf.internal.pageSize.getHeight() - 10);
      }
    }

    //Edit report 
    editClick(event: any) {
      localStorage.setItem('isEdit', 'true');
      this.router.navigateByUrl('/dashboard/landing');

    }
    //done click 
    doneClick(event: any) {
      this.router.navigateByUrl('/dashboard/review');

    }
    // exit click 
    exitClick(event: any) {
      this.router.navigateByUrl('/dashboard/entry-point');
    }

  }

`
platform.ready рдШрдЯрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдореИрдВ 'рдбрд╛рдЙрдирд▓реЛрдб' рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЕрдЧрд░ рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЖрдИрдУрдПрд╕ рд╣реИ рддреЛ 'рджрд╕реНрддрд╛рд╡реЗрдЬрд╝' рдлрд╝реЛрд▓реНрдбрд░ред

@рд░рд╡рд┐рдорд▓реНрдпрд╛
рдореИрдВрдиреЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ html2canvasservice.service.ts рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдЕрд╕реНрдерд╛рдпреА рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереНрд░реЛ рдЕрдкрд╡рд╛рдж рдЕрднреА рднреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╢рд╛рдпрдж рдЖрдк JSPDF рдФрд░ html2canvas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрдбреАрдПрдл рдкреАрдврд╝реА рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдпрдирд┐рдХ4 . рдореЗрдВ рдпреБрдкреЗрдВрдЧ рд╕реЗ рдЕрдВрддрд░рд┐рдо рдпреЛрдЬрдирд╛

  • index.html
<body>
  <div id="html2canvas"></div>
  <app-root></app-root>
</body>
  • xxx.ts
const element = document.getElementById('html2canvas');
const targetElement = document.getElementById('target').cloneNode(true);
element.appendChild(targetElement);
this.html2canvas.html2canvas(element.firstChild).then((img) => {
    this.img = img;
    element.firstChild.remove();
}).catch((res) => {
    console.log(res);
});
  • Html2canvasService.service.ts
import {Injectable} from '@angular/core';
import {AlertService} from './alert.service';

declare let html2canvas;

@Injectable()
export class Html2canvasService {
    constructor(private alert: AlertService) {

    }

    public html2canvas(ele) {

        if (!ele) {
            return;
        }

        const option = {allowTaint: true, useCORS: true};
        return html2canvas(ele, option).then((canvas) => {
            if (canvas) {
                return canvas.toDataURL('image/png');
            }
            return null;
        }).catch((res) => {
            console.log(res);
            return res;
        });
    }
}

рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдмрдврд╝рд┐рдпрд╛ рдЙрдкрд╛рдп!

рдЖрдпрдирд┐рдХ4 . рдореЗрдВ рдпреБрдкреЗрдВрдЧ рд╕реЗ рдЕрдВрддрд░рд┐рдо рдпреЛрдЬрдирд╛

  • index.html
<body>
  <div id="html2canvas"></div>
  <app-root></app-root>
</body>
  • xxx.ts
const element = document.getElementById('html2canvas');
const targetElement = document.getElementById('target').cloneNode(true);
element.appendChild(targetElement);
this.html2canvas.html2canvas(element.firstChild).then((img) => {
    this.img = img;
    element.firstChild.remove();
}).catch((res) => {
    console.log(res);
});
  • Html2canvasService.service.ts
import {Injectable} from '@angular/core';
import {AlertService} from './alert.service';

declare let html2canvas;

@Injectable()
export class Html2canvasService {
    constructor(private alert: AlertService) {

    }

    public html2canvas(ele) {

        if (!ele) {
            return;
        }

        const option = {allowTaint: true, useCORS: true};
        return html2canvas(ele, option).then((canvas) => {
            if (canvas) {
                return canvas.toDataURL('image/png');
            }
            return null;
        }).catch((res) => {
            console.log(res);
            return res;
        });
    }
}

рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ: "ERROR TypeError: html2canvas рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ" рд╕реЗрд╡рд╛ рд╕реЗ рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ:

return html2canvas(ele, option).then((canvas) => {
    if (canvas) {
        return canvas.toDataURL('image/png');
    }
    return null;
})

рдЖрдпрдирд┐рдХ4 . рдореЗрдВ рдпреБрдкреЗрдВрдЧ рд╕реЗ рдЕрдВрддрд░рд┐рдо рдпреЛрдЬрдирд╛

  • index.html
<body>
  <div id="html2canvas"></div>
  <app-root></app-root>
</body>
  • xxx.ts
const element = document.getElementById('html2canvas');
const targetElement = document.getElementById('target').cloneNode(true);
element.appendChild(targetElement);
this.html2canvas.html2canvas(element.firstChild).then((img) => {
    this.img = img;
    element.firstChild.remove();
}).catch((res) => {
    console.log(res);
});
  • Html2canvasService.service.ts
import {Injectable} from '@angular/core';
import {AlertService} from './alert.service';

declare let html2canvas;

@Injectable()
export class Html2canvasService {
    constructor(private alert: AlertService) {

    }

    public html2canvas(ele) {

        if (!ele) {
            return;
        }

        const option = {allowTaint: true, useCORS: true};
        return html2canvas(ele, option).then((canvas) => {
            if (canvas) {
                return canvas.toDataURL('image/png');
            }
            return null;
        }).catch((res) => {
            console.log(res);
            return res;
        });
    }
}

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдЖрдпрдирд┐рдХ рдореВрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде (рдЬреИрд╕реЗ рдЖрдпрди-рдкрд╛рда, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдЖрдпрди-рдЖрдЗрдХрди) рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдпрдирд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдЕрдм рдпрд╣ рдПрдХрджрдо рд╕рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

koreanman picture koreanman  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Josh10101010 picture Josh10101010  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Loki180 picture Loki180  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

celik75 picture celik75  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ABHIKSINGHH picture ABHIKSINGHH  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ