Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/myhome-importer/app/src/DemoImporter.vue |
<template>
<div>
<div v-if="state === 'demoLoaded'" class="mh-importer__loaded">
{{ getString('demo_loaded') }}
</div>
<div v-if="state === 'showDemo'">
<h2>{{ getString('available_demos') }}</h2>
<div v-for="demo in demos">
<div class="mh-importer__card">
<div class="mh-importer__image-wrapper">
<img :src="demo.image" :alt="demo.name">
</div>
<h3>{{ demo.name }}</h3>
<div class="mh-importer__card-info">
<ul>
<li v-for="feature in demo.features">{{ feature }}</li>
</ul>
</div>
<button v-if="!loadingDemo" class="button button-primary" @click="loadDemo(demo)">
{{ getString('load_demo') }}
</button>
<a :href="demo.url" class="button">{{ getString('demo_online') }}</a>
</div>
</div>
<div class="mh-importer__php">
<div class="mh-importer__speed">
<div>
<p>
This importer has 2 modes - "standard" and "slow". Switch to "slow" if "standard" fails (it's rare but
sometimes hosting do not allow to upload files very fast)
</p>
<select v-model="mode">
<option value="normal">Standard</option>
<option value="slow">Slow</option>
</select>
<div>
<h3>Some Windows servers</h3>
Try to visit this URL:
http://yourwordpresslocation/wp-content/plugins/myhome-importer/demos/default/meta.json . If it returns
error 404, it means that your server do not recognize .json files. You can contact your hosting provider
and ask how to turn this option on.
</div>
</div>
</div>
</div>
</div>
<div v-if="state === 'loadingDemo'" class="mh-importer-loading-wrapper">
<h3>Importing demo...</h3>
<ul class="mh-importer-loading">
<li>{{ getString('posts') }}: <span>{{ steps.posts.loaded }}%</span></li>
<li>{{ getString('comments') }}: <span>{{ steps.comments.loaded }}%</span></li>
<li>{{ getString('users') }}: <span>{{ steps.users.loaded }}%</span></li>
<li>{{ getString('media') }}: <span>{{ steps.media.loaded }}%</span></li>
<li>{{ getString('terms') }}: <span>{{ steps.terms.loaded }}%</span></li>
<li>{{ getString('term_taxonomy') }}: <span>{{ steps.term_taxonomy.loaded }}%</span></li>
<li>{{ getString('term_relationships') }}: <span>{{ steps.term_relationships.loaded }}%</span></li>
<li>{{ getString('term_meta') }}: <span>{{ steps.term_meta.loaded }}%</span></li>
<li>{{ getString('options') }}: <span>{{ steps.options.loaded }}%</span></li>
<li>{{ getString('locations') }}: <span>{{ steps.locations.loaded }}%</span></li>
<li>{{ getString('attributes') }}: <span>{{ steps.attributes.loaded }}%</span></li>
<li>{{ getString('sliders') }}: <span>{{ steps.sliders.loaded }}%</span></li>
<li>{{ getString('redux') }}: <span>{{ steps.redux.loaded }}%</span></li>
</ul>
</div>
</div>
</template>
<script>
export default {
data() {
return {
errorMessage: '',
timer: 0,
mode: 'normal',
state: 'showDemo',
demoKey: '',
steps: {
posts: {normal: 50, slow: 25, loaded: 0},
comments: {normal: 0, slow: 0, loaded: 0},
users: {normal: 0, slow: 5, loaded: 0},
media: {normal: 1, slow: 1, loaded: 0},
terms: {normal: 100, slow: 50, loaded: 0},
term_taxonomy: {normal: 100, slow: 50, loaded: 0},
term_relationships: {normal: 100, slow: 50, loaded: 0},
term_meta: {normal: 100, slow: 50, loaded: 0},
options: {normal: 20, slow: 10, loaded: 0},
locations: {normal: 0, slow: 10, loaded: 0},
attributes: {normal: 0, slow: 0, loaded: 0},
sliders: {normal: 0, slow: 1, loaded: 0},
redux: {normal: 0, slow: 0, loaded: 0}
}
}
},
props: {
url: {
type: String
},
translations: {
type: Object
},
demos: {
type: Array
}
},
computed: {
timeLeft() {
return this.timer;
},
postsProgress() {
if (this.postsLoaded === 0) {
return this.getString('waiting');
} else {
return this.postsLoaded + '%';
}
}
},
methods: {
loadDemo(demo) {
jQuery('.mh-server').hide();
jQuery('.mh-info-database').hide();
this.demo = demo;
this.state = 'loadingDemo';
jQuery.getJSON(this.demo.meta, function (data) {
window.scrollTo(0, 0);
this.demoMeta = data;
this.init();
}.bind(this))
},
init() {
jQuery.ajax({
method: 'POST',
url: this.url,
data: {action: 'myhome_importer_init'}
}).done(function () {
this.nextStep('first');
}.bind(this));
},
nextStep(lastStep) {
let nextStep = false;
jQuery.each(this.steps, function (stepKey, step) {
if (lastStep === 'first') {
this.step(stepKey, 0);
return false;
}
if (nextStep === true) {
this.step(stepKey, 0);
return false;
}
if (stepKey === lastStep && stepKey !== 'redux') {
nextStep = true;
}
}.bind(this));
if (nextStep === false && lastStep !== 'first') {
this.finishLoading();
}
},
step(key, start) {
let data = {
action: 'myhome_importer_add_' + key,
demoKey: this.demo.key
};
let limit = this.steps[key][this.mode];
if (limit === 0) {
data.start = 0;
data.limit = this.demoMeta[key];
} else {
data.start = start;
data.limit = start + limit;
if (data.limit > this.demoMeta[key]) {
data.limit = this.demoMeta[key];
}
}
jQuery.ajax({
method: 'POST',
url: this.url + '?key=' + key,
data: data
})
.done(function () {
this.steps[key].loaded = Math.round(data.limit / this.demoMeta[key] * 100);
if (data.limit < this.demoMeta[key]) {
this.step(key, data.limit);
} else {
this.nextStep(key);
}
}.bind(this))
.fail(function () {
this.errorMessage = this.getString('error_message');
this.timer = 30;
let timer = setInterval(function () {
if (this.timer > 0) {
this.timer--;
} else {
this.step(key, start);
clearInterval(timer)
}
}.bind(this), 1000);
}.bind(this))
},
finishLoading() {
jQuery.ajax({
method: 'POST',
url: this.url,
data: {
action: 'myhome_importer_clear_cache',
demoKey: this.demo.key,
}
}).done(function () {
this.state = 'demoLoaded';
}.bind(this));
},
getString(key) {
if (typeof this.translations[key] !== 'undefined') {
return this.translations[key];
} else {
return '';
}
}
}
}
</script>