%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/sale.location.reindex/templates/admin/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/sale.location.reindex/templates/admin/script.js |
BX.namespace('BX.Sale.component.location'); if(typeof BX.Sale.component.location.reindex == 'undefined' && typeof BX.ui != 'undefined' && typeof BX.ui.widget != 'undefined'){ BX.Sale.component.location.reindex = function(opts, nf){ this.parentConstruct(BX.Sale.component.location.reindex, opts); BX.merge(this, { opts: { // default options url: '/somewhere.php', ajaxFlag: 'AJAX_MODE', progressWidth : 500 }, vars: { // significant variables stage: false, state: 'remote', awaitInterruption: false }, ctrls: { // links to controls buttons: {} }, sys: { code: 'loc-ri' } }); this.handleInitStack(nf, BX.Sale.component.location.reindex, opts); }; BX.extend(BX.Sale.component.location.reindex, BX.ui.widget); BX.merge(BX.Sale.component.location.reindex.prototype, { init: function(){ var so = this.opts, sv = this.vars, sc = this.ctrls, ctx = this; // iterator sv.iterator = new BX.iterator({ source: so.url, interval: 100, waitAjaxOnStop: true, whenHit: function(result){ ctx.setPercent(result.data.PERCENT); var next = result.data.NEXT_STAGE; // set message if(BX.type.isNotEmptyString(next) && sv.stage != result.data.NEXT_STAGE) ctx.setStage(result.data.NEXT_STAGE); return result.data.PERCENT < 100; } }); sv.iterator.bindEvent('set-status', function(stat){ //console.dir('Status change'); //console.dir(arguments); if(stat == 'R'){ sc.buttons.startStop.value = so.messages.stop; ctx.setCSSState('running'); }else if(stat == 'I'){ sc.buttons.startStop.value = so.messages.stopping; sc.buttons.startStop.setAttribute('disabled', 'disabled'); ctx.setStage('INTERRUPTING'); sv.awaitInterruption = true; }else if(stat == 'S'){ sc.buttons.startStop.value = so.messages.start; ctx.dropCSSState('running'); sc.buttons.startStop.removeAttribute('disabled'); ctx.setStage(sv.awaitInterruption ? 'INTERRUPTED' : 'COMPLETE'); sv.awaitInterruption = false; } }); sc.buttons.startStop = this.getControl('button-start'); sc.percentIndicator = this.getControl('percents', false, false, true); sc.percentGrade = this.getControl('adm-progress-bar-inner'); sc.statusText = this.getControl('status-text'); //this.pushFuncStack('buildUpDOM', BX.Sale.component.location.reindex); this.pushFuncStack('bindEvents', BX.Sale.component.location.reindex); }, /*buildUpDOM: function(){},*/ bindEvents: function(){ var sc = this.ctrls, sv = this.vars, so = this.opts, ctx = this; // iterator BX.bind(sc.buttons.startStop, 'click', function(){ if(sv.iterator.getIsRunning()){ sv.iterator.stop(); }else{ var request = { ACT: 'REINDEX', ACT_DATA: ctx.getFormControlValues('option') }; request[so.ajaxFlag] = 1; if(ctx.askReindex()){ ctx.setPercent(0); ctx.setStage('CLEANUP'); BX.show(ctx.getControl('progressbar')); sv.iterator.start(request); } } }); var onError = function(error){ //if(error.detail.type == 'server-error') BX.debug(error); sc.buttons.startStop.value = so.messages.start; var errMsg = []; ctx.setStatusText(so.messages.error_occured, true); } sv.iterator.bindEvent('server-error', onError); sv.iterator.bindEvent('ajax-error', onError); var setState = function(state, initial){ sc.scope.className = ''; ctx.setCSSState('mode-'+state); sv.state = state; } }, askReindex: function(){ return confirm(this.opts.messages.sure_reindex); }, setPercent: function(value){ var sc = this.ctrls, so = this.opts; value = parseInt(value); if(value < 0) value = 0; if(value > 100) value = 100; if(sc.percentIndicator != null){ for(var k in sc.percentIndicator){ sc.percentIndicator[k].innerHTML = value; } } value = value * (so.progressWidth / 100) - 4; if(value < 0) value = 0; BX.style(sc.percentGrade, 'width', value+'px'); }, setStatusText: function(text, highlight){ this.ctrls.statusText.innerHTML = BX.util.htmlspecialchars(text); BX.style(this.ctrls.statusText, 'color', highlight ? 'red' : 'inherit'); }, setStage: function(stageCode){ var so = this.opts, sv = this.vars; if(typeof so.messages['stage_'+stageCode] == 'undefined'){ this.setStatusText(BX.util.htmlspecialchars(stageCode), true); sv.stage = false; return; } this.setStatusText(this.opts.messages['stage_'+stageCode], false); sv.stage = stageCode; }, getFormControlValues: function(fcCode){ var result = {}; var controls = this.getControl(fcCode, true, false, true); for(var k = 0; k < controls.length; k++) { var opt = controls[k]; if('name' in opt) { var name = opt.name; if(!('type' in opt)) continue; // skip unchecked checkboxes and radio if(opt.nodeName == 'INPUT' && (opt.type == 'checkbox' || opt.type == 'radio') && !opt.checked) continue; var value = ''; if(opt.nodeName == 'SELECT' && opt.multiple) { value = []; for(var m = 0; m < opt.length; m++) { if(opt[m].selected) value.push(opt[m].value); } } else value = opt.value; result[name] = value; } } return result; }, setTab: function(tab){ BX[(tab == 'tab_cleanup' ? 'hide' : 'show')](this.ctrls.buttons.startStop); } }); }