instapage_cms_plugin-8.x-3.34/core/knockout/view_models/InstapageCmsPluginMasterModel.js

core/knockout/view_models/InstapageCmsPluginMasterModel.js
/* globals  ko, iLang, instapageKO, iAjax, INSTAPAGE_AJAXURL, InstapageCmsPluginSettingsModel, InstapageCmsPluginMessagesModel, InstapageCmsPluginToolbarModel, InstapageCmsPluginPagedGridModel, optionsInitialData */

var InstapageCmsPluginMasterModel = function InstapageCmsPluginMasterModel() {
  var self = this;

  self.settingsModel = null;
  self.editModel = null;
  self.messagesModel = new InstapageCmsPluginMessagesModel();
  self.toolbarModel = new InstapageCmsPluginToolbarModel();
  self.apiTokens = null;
  self.prohibitedSlugs = null;

  self.updateApiTokens = function updateApiTokens(onSuccessFunction, onFailureFunction) {
    var post = {action: 'getApiTokens'};
    iAjax.post(INSTAPAGE_AJAXURL, post, function updateApiTokensCallback(responseJson) {
      var response = masterModel.parseResponse(responseJson);

      if (response.status === 'OK') {
        self.apiTokens = response.data;

        if (typeof onSuccessFunction === 'function') {
          onSuccessFunction();
        }
      } else {
        self.apiTokens = [];

        if (typeof onSuccessFunction === 'function') {
          onFailureFunction();
        }
      }
    });
  };

  self.prepareInitialData = function prepareInitialData(obj) {
    obj.initialData.forEach(function prepareInitialSats(element) {
      element.stats_cache = instapageKO.observableArray();
      element.totalStats = instapageKO.observable({
        visits: 0,
        conversions: 0,
        conversionRate: 0
      });
      element.statsLoaded = instapageKO.observable(false);
      element.toDelete = instapageKO.observable(false);
    });

    return obj;
  };

  self.parseResponse = function parseResponse(responseJson) {
    try {
      var response = JSON.parse(responseJson);

      return response;
    } catch (e) {
      return {status: 'ERROR', message: iLang.get('COULDNT_PARSE_RESPONSE')};
    }
  };

  self.getOptions = function getOptions(onSuccessFunction) {
    if (masterModel.settingsModel) {
      onSuccessFunction(masterModel.settingsModel.getConfig());
      return;
    }

    iAjax.post(INSTAPAGE_AJAXURL, {action: 'getOptions'}, function getOptionsCallback(responseJson) {
      var response = masterModel.parseResponse(responseJson);

      if (response.status === 'OK' && response.data && response.data.config) {
        onSuccessFunction(response.data.config);
        return;
      }
    });
  };

  self.addDiagnosticsWarning = function addDiagnosticsWarning(config) {
    if (config.diagnostics) {
      self.messagesModel.addMessage(iLang.get('DIAGNOSTIC_IS_ON_WARNING'));
    }
  }

  instapageKO.applyBindings(self.messagesModel, document.getElementById('messages-container'));
  instapageKO.applyBindings(self.toolbarModel, document.getElementById('instapage-toolbar'));
};

var loadPageList = function loadPageList() {
  var post = { 
      action: 'loadListPages', 
      apiTokens: masterModel.apiTokens
  };
  
  iAjax.post(INSTAPAGE_AJAXURL, post, function loadPageListCallback(responseJson) {
    var response = masterModel.parseResponse(responseJson);
    var element = document.getElementById('instapage-container');

    if (response.status === 'OK') {
      instapageKO.cleanNode(element);
      element.innerHTML = response.html;
      
      if (Array.isArray(response.initialData)) {
        response = masterModel.prepareInitialData(response);
      }
      
      masterModel.pagedGridModel = new InstapageCmsPluginPagedGridModel(response.initialData);
      instapageKO.applyBindings(masterModel.pagedGridModel, element);
    } else {
      masterModel.messagesModel.addMessage(response.message, response.status);
      element.innerHTML = '';
    }
  });
};

var masterModel = new InstapageCmsPluginMasterModel();
masterModel.updateApiTokens(loadPageList, loadPageList);
masterModel.getOptions(masterModel.addDiagnosticsWarning);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc