Commit 7e28a0df authored by asdf's avatar asdf

复制项目

parent fa703d42
...@@ -5,3 +5,4 @@ ...@@ -5,3 +5,4 @@
/publish/publish/play /publish/publish/play
/publish/publish/form /publish/publish/form
/publish/publish/*.zip /publish/publish/*.zip
node_modules
...@@ -128,5 +128,8 @@ ...@@ -128,5 +128,8 @@
} }
} }
}, },
"defaultProject": "ng-template-generator" "defaultProject": "ng-template-generator",
} "cli": {
"analytics": "3d51f778-6aa7-4f47-b516-68a1c3f16d24"
}
}
\ No newline at end of file
This diff is collapsed.
...@@ -26,11 +26,13 @@ ...@@ -26,11 +26,13 @@
"@fortawesome/free-solid-svg-icons": "^5.12.1", "@fortawesome/free-solid-svg-icons": "^5.12.1",
"@tweenjs/tween.js": "~18.5.0", "@tweenjs/tween.js": "~18.5.0",
"ali-oss": "^6.5.1", "ali-oss": "^6.5.1",
"cnpm": "^6.1.1",
"compressing": "^1.5.0", "compressing": "^1.5.0",
"ng-zorro-antd": "^8.5.2", "ng-zorro-antd": "^8.5.2",
"rxjs": "~6.5.4", "rxjs": "~6.5.4",
"spark-md5": "^3.0.0", "spark-md5": "^3.0.0",
"tslib": "^1.10.0", "tslib": "^1.10.0",
"node-sass": "^4.0.0",
"zone.js": "~0.10.2" "zone.js": "~0.10.2"
}, },
"devDependencies": { "devDependencies": {
......
...@@ -5,7 +5,7 @@ import {MyErrorHandler} from './MyError'; ...@@ -5,7 +5,7 @@ import {MyErrorHandler} from './MyError';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { NgZorroAntdModule, NZ_I18N, zh_CN } from 'ng-zorro-antd'; import { NgZorroAntdModule, NZ_I18N, zh_CN } from 'ng-zorro-antd';
import { FormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { registerLocaleData } from '@angular/common'; import { registerLocaleData } from '@angular/common';
...@@ -17,6 +17,7 @@ import {BackgroundImagePipe} from './pipes/background-image.pipe'; ...@@ -17,6 +17,7 @@ import {BackgroundImagePipe} from './pipes/background-image.pipe';
import {UploadImageWithPreviewComponent} from './common/upload-image-with-preview/upload-image-with-preview.component'; import {UploadImageWithPreviewComponent} from './common/upload-image-with-preview/upload-image-with-preview.component';
import {PlayerContentWrapperComponent} from './common/player-content-wrapper/player-content-wrapper.component'; import {PlayerContentWrapperComponent} from './common/player-content-wrapper/player-content-wrapper.component';
import {CustomHotZoneComponent} from './common/custom-hot-zone/custom-hot-zone.component'; import {CustomHotZoneComponent} from './common/custom-hot-zone/custom-hot-zone.component';
import {BackgroundUploadComponent} from './common/background-upload/background-upload.component';
import {UploadVideoComponent} from './common/upload-video/upload-video.component'; import {UploadVideoComponent} from './common/upload-video/upload-video.component';
import {TimePipe} from './pipes/time.pipe'; import {TimePipe} from './pipes/time.pipe';
import {ResourcePipe} from './pipes/resource.pipe'; import {ResourcePipe} from './pipes/resource.pipe';
...@@ -25,6 +26,7 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso ...@@ -25,6 +26,7 @@ import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontaweso
import { fas } from '@fortawesome/free-solid-svg-icons'; import { fas } from '@fortawesome/free-solid-svg-icons';
import { far } from '@fortawesome/free-regular-svg-icons'; import { far } from '@fortawesome/free-regular-svg-icons';
registerLocaleData(zh); registerLocaleData(zh);
@NgModule({ @NgModule({
...@@ -35,12 +37,12 @@ registerLocaleData(zh); ...@@ -35,12 +37,12 @@ registerLocaleData(zh);
LessonTitleConfigComponent, LessonTitleConfigComponent,
AudioRecorderComponent, AudioRecorderComponent,
UploadImageWithPreviewComponent, UploadImageWithPreviewComponent,
BackgroundUploadComponent,
BackgroundImagePipe, BackgroundImagePipe,
ResourcePipe, ResourcePipe,
TimePipe, TimePipe,
UploadVideoComponent, UploadVideoComponent,
CustomHotZoneComponent, CustomHotZoneComponent,
PlayerContentWrapperComponent PlayerContentWrapperComponent
], ],
...@@ -50,7 +52,8 @@ registerLocaleData(zh); ...@@ -50,7 +52,8 @@ registerLocaleData(zh);
FormsModule, FormsModule,
HttpClientModule, HttpClientModule,
BrowserAnimationsModule, BrowserAnimationsModule,
FontAwesomeModule FontAwesomeModule,
ReactiveFormsModule
], ],
providers: [ providers: [
{provide: ErrorHandler, useClass: MyErrorHandler}, {provide: ErrorHandler, useClass: MyErrorHandler},
......
<div class="content-border">
<nz-form-item>
<div nz-col nzSpan="22"></div>
<div nz-col nzSpan="2">
<button nz-button nzType="danger" (click)="cleanAll()">清空背景</button>
</div>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="1" >左上</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.leftTop"
(imageUploaded)="onImageUploadSuccess($event, items, 'leftTop')"></app-upload-image-with-preview>
</nz-form-control>
<nz-form-label [nzSpan]="1" >中上</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.middleTop"
(imageUploaded)="onImageUploadSuccess($event, items, 'middleTop')"></app-upload-image-with-preview>
</nz-form-control>
<nz-form-label [nzSpan]="1" >右上</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.rightTop"
(imageUploaded)="onImageUploadSuccess($event, items, 'rightTop')"></app-upload-image-with-preview>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="1" >左中</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.leftMiddle"
(imageUploaded)="onImageUploadSuccess($event, items, 'leftMiddle')"></app-upload-image-with-preview>
</nz-form-control>
<div nz-col nzSpan="8"></div>
<nz-form-label [nzSpan]="1" >右中</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.rightMiddle"
(imageUploaded)="onImageUploadSuccess($event, items, 'rightMiddle')"></app-upload-image-with-preview>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-label [nzSpan]="1" >左下</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.leftBottom"
(imageUploaded)="onImageUploadSuccess($event, items, 'leftBottom')"></app-upload-image-with-preview>
</nz-form-control>
<nz-form-label [nzSpan]="1" >中下</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.middleBottom"
(imageUploaded)="onImageUploadSuccess($event, items, 'middleBottom')"></app-upload-image-with-preview>
</nz-form-control>
<nz-form-label [nzSpan]="1">右下</nz-form-label>
<nz-form-control [nzSpan]="7">
<app-upload-image-with-preview style="width: 100%" [picUrl]="items.rightBottom"
(imageUploaded)="onImageUploadSuccess($event, items, 'rightBottom')"></app-upload-image-with-preview>
</nz-form-control>
</nz-form-item>
</div>
\ No newline at end of file
.content-border {
width: 100%;
height: 100%;
border-radius: 0.5rem;
min-width: 1200px;
border: 2px solid #ddd;
padding: 5px;
}
\ No newline at end of file
import {Component, EventEmitter, Input, Output } from '@angular/core';
@Component({
selector: 'app-background-upload',
templateUrl: './background-upload.component.html',
styleUrls: ['./background-upload.component.scss']
})
export class BackgroundUploadComponent {
@Input() items = {"leftTop": '', "middleTop": '', "rightTop": '', "leftMiddle": '', "rightMiddle": '', "leftBottom": '', "middleBottom": '', "rightBottom": ''};
@Output() change = new EventEmitter();
constructor( ) { }
onImageUploadSuccess(e, items, key) {
items[key] = e.url;
this.change.emit(items)
}
cleanAll() {
if(confirm("确定清空所有背景吗?")) {
this.items = {"leftTop": '', "middleTop": '', "rightTop": '', "leftMiddle": '', "rightMiddle": '', "leftBottom": '', "middleBottom": '', "rightBottom": ''}
this.change.emit(this.items)
}
}
deletePic(key) {
this.items[key] = ""
this.change.emit(this.items)
}
}
This diff is collapsed.
<div class="p-image-children-editor"> <div class="p-image-children-editor">
<h5 style="margin-left: 2.5%;"> preview: </h5> <div style="float: left; width: 25%;border-right: 2px solid #ddd; border-bottom: 2px solid #ddd;">
<h5 style="margin-left: 2.5%;">预览:</h5>
<div class="preview-box" #wrap> <div id="canvas-container" style="margin:5px;">
<canvas id="canvas" #canvas></canvas> <div class="preview-box" #wrap style="margin-bottom: 20px">
</div> <canvas id="canvas" #canvas></canvas>
</div>
<div nz-row nzType="flex" nzAlign="middle"> </div>
<div nz-col nzSpan="5" nzOffset="1">
<div style="text-align: center">
<h5> add background: </h5> <button nz-button nzType="primary" [nzSize]="'small'" nzShape="round" (click)="saveClick()" [disabled]="!hotZoneChanged" >
<i nz-icon type="save"></i>
Save
</button>
</div>
<h5 style="border-top: 2px solid #ddd;">背景图:</h5>
<div style="width: 200px;margin: auto;">
<div class="bg-box"> <div class="bg-box">
<app-upload-image-with-preview <app-upload-image-with-preview
[picUrl]="bgItem?.url" [picUrl]="bgItem.url"
(imageUploaded)="onBackgroundUploadSuccess($event)"> (imageUploaded)="onBackgroundUploadSuccess($event)"
>
</app-upload-image-with-preview> </app-upload-image-with-preview>
</div> </div>
</div> </div>
</div>
<div nz-col nzSpan="5" nzOffset="1" class="img-box" <div style="float: left; width: 75%">
*ngFor="let it of hotZoneArr; let i = index"> <div nzAlign="middle">
<div class="img-box clearfix" *ngFor="let it of hotZoneArr; let i = index" style="border-bottom: 1px solid #DDD; padding-bottom: 10px;" >
<div <div style="float: left; height: 115px; position: relative; width: 250px; ">
style="margin: auto; padding: 5px; margin-top: 30px; width:90%; border: 2px dashed #ddd; border-radius: 10px"> <h3> 第-{{ i + 1 }}-题 </h3>
<span style="margin-left: 40%;"> item-{{i + 1}} <div style="position: absolute; bottom: 0;">
</span> <h5> 题目音频 </h5>
<button style="float: right;" nz-button nzType="danger" nzSize="small" (click)="deleteBtnClick(i)"> <app-audio-recorder [audioUrl]="it.audio_url ? it.audio_url : null" (audioUploaded)="onAudioUploadSuccess($event, it, false)" ></app-audio-recorder>
X </div>
</button>
<nz-divider style="margin-top: 10px;"></nz-divider>
<div style="margin-top: -20px; margin-bottom: 5px">
<nz-radio-group [ngModel]="it.itemType" (ngModelChange)="radioChange($event, it)">
<label *ngIf="isHasRect" nz-radio nzValue="rect">矩形</label>
<label *ngIf="isHasPic" nz-radio nzValue="pic">图片</label>
<label *ngIf="isHasText" nz-radio nzValue="text">文本</label>
</nz-radio-group>
</div> </div>
<div style="float: left; height: 115px; position: relative; width: 250px; ">
<div *ngIf="it.itemType == 'pic'"> <div style="position: absolute; bottom: 0;">
<app-upload-image-with-preview <h5> 卡片音频 </h5>
[picUrl]="it?.pic_url" <app-audio-recorder [audioUrl]="it.card_audio_url ? it.card_audio_url : null" (audioUploaded)="onAudioUploadSuccess($event, it, true)" ></app-audio-recorder>
(imageUploaded)="onItemImgUploadSuccess($event, it)"> </div>
</app-upload-image-with-preview>
</div> </div>
<div style="float: left;">
<div *ngIf="it.itemType == 'text'"> <div style="width:200px">
<input type="text" nz-input [(ngModel)]="it.text" (blur)="saveText(it)"> <app-upload-image-with-preview [picUrl]="it.image_url" (imageUploaded)="onImgUploadSuccessByImg($event, it)" ></app-upload-image-with-preview>
</div>
</div> </div>
<div style="width: 100%; margin-top: 5px;"> <div style="float: left; display: flex; flex-direction: column; padding-left: 10px;">
<app-audio-recorder <button style="flex:1; margin-bottom: 5px;" nz-button nzType="dashed" (click)="handleMoveItemUp($event, i)" [disabled]="i==0">
[audioUrl]="it.audio_url" <i nz-icon nzType="up" nzTheme="outline"></i>
(audioUploaded)="onItemAudioUploadSuccess($event, it)" 上移
></app-audio-recorder> </button>
<button style="flex:1; margin-bottom: 5px;" nz-button nzType="dashed" (click)="handleMoveItemDown($event, i)" [disabled]="i==hotZoneArr.length-1">
<i nz-icon nzType="down" nzTheme="outline"></i>
下移
</button>
<button style="flex:1; margin-bottom: 5px;" nz-button nzType="danger" (click)="deleteItem($event, i)">
<i nz-icon nzType="delete" nzTheme="outline"></i>
删除
</button>
</div> </div>
</div> </div>
</div> <div nz-col nzSpan="5" nzOffset="1">
<div class="bg-box">
<button
<div nz-col nzSpan="5" nzOffset="1"> nz-button
nzType="dashed"
<div class="bg-box"> (click)="addBtnClick()"
<button nz-button nzType="dashed" (click)="addBtnClick()" class="add-btn"
class="add-btn"> >
<i nz-icon nzType="plus-circle" nzTheme="outline"></i> <i nz-icon nzType="plus-circle" nzTheme="outline"></i>
<!--Add Image--> <!--Add Image-->
Add hot zone Add hot zone
</button> </button>
</div>
</div> </div>
</div> </div>
</div> </div>
<nz-divider></nz-divider> <nz-divider></nz-divider>
<div class="save-box"> <div class="save-box">
<button class="save-btn" nz-button nzType="primary" [nzSize]="'large'" nzShape="round"
(click)="saveClick()" >
<i nz-icon nzType="save"></i>
Save
</button>
</div> </div>
</div> </div>
<label style="opacity: 0; position: absolute; top: 0px; font-family: 'BRLNSR_1'">1</label>
.p-image-children-editor { .p-image-children-editor {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 0.5rem; border-radius: 0.5rem;
min-width: 1200px;
border: 2px solid #ddd; border: 2px solid #ddd;
.preview-box { .preview-box {
margin: auto; margin: auto;
width: 95%; width: 100%;
height: 35vw; // height: 35vw;
border: 2px dashed #ddd; border: 2px dashed #ddd;
border-radius: 0.5rem; border-radius: 0.5rem;
background-color: #fafafa; background-color: #fafafa;
text-align: center; text-align: center;
color: #aaa; color: #aaa;
.preview-img { .preview-img {
height: 100%; height: 100%;
width: auto; width: auto;
} }
} }
.bg-box {
.bg-box{
//width: 100%;
margin-bottom: 1rem; margin-bottom: 1rem;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
} }
.img-box { .img-box {
margin-bottom: 1rem; margin: 1rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
} }
.img-box-upload{ .img-box-upload {
width: 80%; width: 120px;
height: 80px;
} }
.add-btn { .add-btn {
margin-top: 1rem; margin-top: 1rem;
width: 200px; width: 200px;
height: 90px; height: 90px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
} }
.save-box { .save-box {
width: 100%; width: 100%;
...@@ -85,28 +72,6 @@ h5 { ...@@ -85,28 +72,6 @@ h5 {
margin-top: 1rem; margin-top: 1rem;
} }
@font-face
{
font-family: 'BRLNSR_1';
src: url("/assets/font/BRLNSR_1.TTF") ;
}
//@import '../../../style/common_mixin'; //@import '../../../style/common_mixin';
// //
//.p-image-uploader { //.p-image-uploader {
......
...@@ -11,73 +11,66 @@ ...@@ -11,73 +11,66 @@
.type-row{ .type-row{
margin: 0;padding-top: 1rem; margin: 0;padding-top: 1rem;
} }
} }
@font-face
{ // BerlinSansFB
@font-face {
font-family: 'BRLNSDB'; font-family: 'BRLNSDB';
src: url("../../../assets/font/BRLNSDB.TTF") ; src: url("../../../assets/default/font/BerlinSansFB/BRLNSDB_1.TTF") ;
} }
@font-face @font-face {
{
font-family: 'BRLNSB'; font-family: 'BRLNSB';
src: url("../../../assets/font/BRLNSB.TTF") ; src: url("../../../assets/default/font/BerlinSansFB/BRLNSB_1.TTF") ;
} }
@font-face @font-face {
{
font-family: 'BRLNSR'; font-family: 'BRLNSR';
src: url("../../../assets/font/BRLNSR.TTF") ; src: url("../../../assets/default/font/BerlinSansFB/BRLNSR_1.TTF") ;
} }
@font-face // CenturyGothic
{ @font-face {
font-family: 'GOTHIC'; font-family: 'GOTHIC';
src: url("../../../assets/font/GOTHIC.TTF") ; src: url("../../../assets/default/font/CenturyGothic/GOTHIC_1.TTF") ;
} }
@font-face @font-face {
{
font-family: 'GOTHICB'; font-family: 'GOTHICB';
src: url("../../../assets/font/GOTHICB.TTF") ; src: url("../../../assets/default/font/CenturyGothic/GOTHICB_1.TTF") ;
} }
@font-face @font-face {
{
font-family: 'GOTHICBI'; font-family: 'GOTHICBI';
src: url("../../../assets/font/GOTHICBI.TTF") ; src: url("../../../assets/default/font/CenturyGothic/GOTHICBI_1.TTF") ;
} }
@font-face @font-face {
{
font-family: 'GOTHICI'; font-family: 'GOTHICI';
src: url("../../../assets/font/GOTHICI.TTF") ; src: url("../../../assets/default/font/CenturyGothic/GOTHICI_1.TTF") ;
} }
@font-face // MMTextBook
{ @font-face {
font-family: 'MMTextBook'; font-family: 'MMTextBook';
src: url("../../../assets/font/MMTextBook.otf") ; src: url("../../../assets/default/font/MMTextBook/MMTextBook.otf") ;
} }
@font-face @font-face {
{
font-family: 'MMTextBook-Bold'; font-family: 'MMTextBook-Bold';
src: url("../../../assets/font/MMTextBook-Bold.otf") ; src: url("../../../assets/default/font/MMTextBook/MMTextBook-Bold.otf") ;
} }
@font-face @font-face {
{
font-family: 'MMTextBook-BoldItalic'; font-family: 'MMTextBook-BoldItalic';
src: url("../../../assets/font/MMTextBook-BoldItalic.otf") ; src: url("../../../assets/default/font/MMTextBook/MMTextBook-BoldItalic.otf") ;
} }
@font-face @font-face {
{
font-family: 'MMTextBook-Italic'; font-family: 'MMTextBook-Italic';
src: url("../../../assets/font/MMTextBook-Italic.otf") ; src: url("../../../assets/default/font/MMTextBook/MMTextBook-Italic.otf") ;
} }
@mixin tool-btn { @mixin tool-btn {
border: 1px solid #ddd; border: 1px solid #ddd;
display: flex; display: flex;
...@@ -88,6 +81,7 @@ ...@@ -88,6 +81,7 @@
border-radius: 6px; border-radius: 6px;
color: #555; color: #555;
} }
.d-flex{ .d-flex{
display: flex; display: flex;
} }
...@@ -95,12 +89,13 @@ ...@@ -95,12 +89,13 @@
.position-relative { .position-relative {
position: relative; position: relative;
} }
.flex-fill {
-webkit-box-flex: 1; .flex-fill {
flex: 1 1 auto; -webkit-box-flex: 1;
justify-content: center; flex: 1 1 auto;
display: flex; justify-content: center;
} display: flex;
}
.i-dropdown-menu{ .i-dropdown-menu{
width: 15px; width: 15px;
......
@import '../../style/common_mixin.css'; @import '../../style/common_mixin';
.cmp-player-content-wrapper{ .cmp-player-content-wrapper{
max-height: 100%; max-height: 100%;
......
import { import {
AfterViewInit, AfterViewInit,
Component, Component,
ElementRef, ElementRef,
Input, Input,
OnChanges, OnChanges,
OnDestroy, OnDestroy,
OnInit, OnInit,
ViewChild ViewChild
} from '@angular/core'; } from '@angular/core';
@Component({ @Component({
...@@ -24,15 +24,15 @@ export class PlayerContentWrapperComponent implements OnInit, OnChanges, OnDestr ...@@ -24,15 +24,15 @@ export class PlayerContentWrapperComponent implements OnInit, OnChanges, OnDestr
@Input() ratio; @Input() ratio;
_w: string; _w: string;
_h: string; _h: string;
constructor() { constructor() {
if (window.innerHeight < window.innerWidth) { if (window.innerHeight < window.innerWidth) {
this._h = '100%'; this._h = '100%';
this._w = 'auto'; this._w = 'auto';
} else { } else {
this._w = '100%'; this._w = '100%';
this._h = 'auto'; this._h = 'auto';
} }
} }
ngOnInit() { ngOnInit() {
if (!this.ratio) { if (!this.ratio) {
......
...@@ -33,7 +33,6 @@ export class UploadImageWithPreviewComponent implements OnDestroy, OnChanges { ...@@ -33,7 +33,6 @@ export class UploadImageWithPreviewComponent implements OnDestroy, OnChanges {
uploadData; uploadData;
constructor(private nzMessageService: NzMessageService) { constructor(private nzMessageService: NzMessageService) {
this.uploadUrl = (<any> window).courseware.uploadUrl(); this.uploadUrl = (<any> window).courseware.uploadUrl();
this.uploadData = (<any> window).courseware.uploadData(); this.uploadData = (<any> window).courseware.uploadData();
......
...@@ -6,30 +6,3 @@ ...@@ -6,30 +6,3 @@
height: 100%; height: 100%;
} }
.radioPaire {
float: left;
margin: 3px;
border-style: dashed;
border-color: #000;
border-width: 1px;
}
.border {
border-radius: 20px;
border-style: dashed;
padding: 20px;
margin: 20px;
/*width: 500px; */
/*//border-radius: 20px;*/
/*//border-width: 2px;*/
/*//border-color: #000000;*/
}
.border-lite {
border: 2px dashed #ddd;
border-radius: 0.5rem;
padding: 10px;
margin: 10px;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
{
"version": "1.1",
"key": "DataKey_Cocos_Test",
"haveCover":false,
"dataArray": []
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment