ami-cjs.js
Version:
<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>
163 lines (143 loc) • 5.54 kB
JavaScript
import CoreUtils from '../core/core.utils';
/**
* Event Based progressbar
* @module helpers/progressBar
*
* @example
*
* let loader = new LoadersVolume();
* const domContainer = document.getElementById('progressbar');
* const pb = new HelpersProgressBarEventBased(loader, domContainer);
*/
export default class HelpersProgressBarEventBased {
constructor(emitter, domTarget) {
if (!emitter || !this._isFunction(emitter.emit)) {
console.error('please give the this._emitter instance');
return;
}
if (CoreUtils.isString(domTarget)) {
this._dom = document.getElementById(domTarget);
} else {
this._dom = domTarget;
}
if (!CoreUtils.isElement(this._dom)) {
console.error('please give the id of container dom or directly a dom instance');
return;
}
this._emitter = emitter;
this.initContainerDom();
this.initEventListenner();
this.loaded = 0;
this.totalFile = 0;
}
_isFunction(fn) {
return Object.prototype.toString.call(fn) === '[object Function]';
}
initEventListenner() {
const self = this;
this._emitter.on('load-start', function(event) {
const totalFiles = event.totalFiles;
self.totalFile = totalFiles;
self._domTotalFile.innerHTML = totalFiles;
});
this._emitter.on('fetch-start', function(event) {
const fetchLi = document.createElement('li');
const fileTag = document.createElement('div');
fileTag.innerHTML = 'file: ' + event.file;
fileTag.style.color = '#ffffff';
fetchLi.append(fileTag);
fetchLi.className = 'fetch-file';
fetchLi.id = 'file-' + event.file;
fetchLi.style.marginBottom = '7px';
fetchLi.style.border = '1px solid #ffffff;';
fetchLi.style.width = '60%';
const fetchprogress = document.createElement('div');
fetchprogress.id = 'file-fetch-' + event.file;
fetchprogress.style.width = '0%';
fetchLi.append(fetchprogress);
self._domProcessList.append(fetchLi);
});
this._emitter.on('fetch-progress', function(event) {
const id = 'file-fetch-' + event.file;
const fileFetchDom = document.getElementById(id);
fileFetchDom.style.width = (event.loaded / event.total) * 100 + '%';
fileFetchDom.style.border = '1px solid red';
});
this._emitter.on('fetch-success', function(event) {
// show result
const liParent = document.getElementById('file-' + event.file);
const result = document.createElement('div');
result.id = 'file-result-' + event.file;
result.innerHTML = 'fetch-success';
result.style.color = '#ffffff';
liParent.append(result);
});
this._emitter.on('fetch-error', function(event) {
// console.log(event);
});
this._emitter.on('fetch-abort', function(event) {
// console.log(event);
});
this._emitter.on('fetch-end', function(event) {
// console.log(event);
});
this._emitter.on('fetch-timeout', function(event) {
// console.log(event);
});
this._emitter.on('parse-start', function(event) {
const liParent = document.getElementById('file-' + event.file)
const parseprogress = document.createElement('div');
parseprogress.id = 'file-parse-' + event.file;
parseprogress.style.width = '0%';
liParent.append(parseprogress);
});
this._emitter.on('parsing', function(event) {
const id = 'file-parse-' + event.file;
const fileParseDom = document.getElementById(id);
fileParseDom.style.width = (event.parsed / event.total) * 100 + '%';
fileParseDom.style.border = '1px solid yellow';
});
this._emitter.on('parse-success', function(event) {
self.loaded += 1;
self._domCurrentFile.innerHTML = self.loaded;
self._domCurrentProgress.style.width = (self.loaded / self.totalFile) *
100 + '%';
// show result
const liParent = document.getElementById('file-' + event.file)
const result = document.createElement('div');
result.id = 'file-result-' + event.file;
result.innerHTML = 'parse-success';
result.style.color = '#ffffff';
liParent.append(result);
});
}
initContainerDom() {
const containerDom =
"<div id='ami-progress-bar-container' style='background-color: rgb(33, 33, 33); color: #ffffff;'>" +
"<div>" +
"<label for='progress-bar' id='progress-label' style='width: 60%; border: 1px solid #ffffff; text-align: center;'>" +
"<span id='current-file-index'>0</span>" +
"/" +
"<span id='total-file'>0</span>" +
"</label>" +
"<div id='progress-bar' style='width: 60%; border: 1px solid #ffffff; text-align: center;'>" +
"<div id='current-progress' style='border: 1px solid red; width: 0%;'></div>" +
"</div>" +
"</div>" +
"<ul id='process-list' style='list-style-type: none; padding: 0; overflow-y: auto;'>" +
// "<li class='fetch-file'>" +
// "<div id='file-fetch-xxxxxid'></div>" +
// "<div id='file-parse-xxxxxid'></div>" +
// "</li>" +
"</ul>" +
"</div>";
const wrap = document.createElement('div');
wrap.innerHTML = containerDom;
this._dom.append(wrap);
// dom interface
this._domCurrentFile = document.getElementById('current-file-index');
this._domTotalFile = document.getElementById('total-file');
this._domProcessList = document.getElementById('process-list');
this._domCurrentProgress = document.getElementById('current-progress');
}
}