Вход Регистрация
Файл: src/public/plugins/metrics-graphics/layout/button.js
Строк: 146
<?php
MG
.button_layout = function(target) {
  
'use strict';
  
this.target = target;
  
this.feature_set = {};
  
this.public_name = {};
  
this.sorters = {};
  
this.manual = [];
  
this.manual_map = {};
  
this.manual_callback = {};

  
this._strip_punctuation = function(s) {
    var 
punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');
    var 
finalString = punctuationless.replace(/ +?/g, '');
    return 
finalString;
  };

  
this.data = function(data) {
    
this._data = data;
    return 
this;
  };

  
this.manual_button = function(feature, feature_set, callback) {
    
this.feature_set[feature]=feature_set;
    
this.manual_map[this._strip_punctuation(feature)] = feature;
    
this.manual_callback[feature]=callback;// the default is going to be the first feature.
    
return this;
  };

  
this.button = function(feature) {
    if (
arguments.length > 1) {
      
this.public_name[feature] = arguments[1];
    }

    if (
arguments.length > 2) {
      
this.sorters[feature] = arguments[2];
    }

    
this.feature_set[feature] = [];
    return 
this;
  };

  
this.callback = function(callback) {
    
this._callback = callback;
    return 
this;
  };

  
this.display = function() {
    var 
callback = this._callback;
    var 
manual_callback = this.manual_callback;
    var 
manual_map = this.manual_map;

    var 
d,f, features, feat;
    
features = Object.keys(this.feature_set);

    var 
mapDtoF = function(f) { return d[f]; };

    var 
i;

    
// build out this.feature_set with this.data
    
for (i = 0; i < this._data.length; i++) {
      
d = this._data[i];
      
f = features.map(mapDtoF);
      for (var 
j = 0; j < features.length; j++) {
        
feat = features[j];
        if (
this.feature_set[feat].indexOf(f[j]) === -1) {
          
this.feature_set[feat].push(f[j]);
        }
      }
    }

    for (
feat in this.feature_set) {
      if (
this.sorters.hasOwnProperty(feat)) {
        
this.feature_set[feat].sort(this.sorters[feat]);
      }
    }

    $(
this.target).empty();

    $(
this.target).append("<div class='col-lg-12 segments text-center'></div>");

    var 
dropdownLiAClick = function() {
      var 
k = $(this).data('key');
      var 
feature = $(this).data('feature');
      var 
manual_feature;
      $(
'.' + feature + '-btns button.btn span.title').html(k);
      if (!
manual_map.hasOwnProperty(feature)) {
        
callback(feature, k);
      } else {
        
manual_feature = manual_map[feature];
        
manual_callback[manual_feature](k);
      }

      return 
false;
    };

    for (var 
feature in this.feature_set) {
      
features = this.feature_set[feature];
      $(
this.target + ' div.segments').append(
          
'<div class="btn-group '+this._strip_punctuation(feature)+'-btns text-left">' + // This never changes.
          
'<button type="button" class="btn btn-default btn-lg dropdown-toggle" data-toggle="dropdown">' +
            
"<span class='which-button'>" + (this.public_name.hasOwnProperty(feature) ? this.public_name[feature] : feature) +"</span>" +
            
"<span class='title'>" + (this.manual_callback.hasOwnProperty(feature) ? this.feature_set[feature][0] : 'all') +  "</span>" + // if a manual button, don't default to all in label.
            
'<span class="caret"></span>' +
          
'</button>' +
          
'<ul class="dropdown-menu" role="menu">' +
            (!
this.manual_callback.hasOwnProperty(feature) ? '<li><a href="#" data-feature="'+feature+'" data-key="all">All</a></li>' : "") +
            (!
this.manual_callback.hasOwnProperty(feature) ? '<li class="divider"></li>' : "") +
          
'</ul>'
        
+ '</div>');

      for (
i = 0; i < features.length; i++) {
        if (
features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.
          
$(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(
            
'<li><a href="#" data-feature="' + this._strip_punctuation(feature) + '" data-key="' + features[i] + '">'
              
+ features[i] + '</a></li>'
          
);
        }
      }

      $(
'.' + this._strip_punctuation(feature) + '-btns .dropdown-menu li a').on('click', dropdownLiAClick);
    }

    return 
this;
  };

  return 
this;
};
?>
Онлайн: 2
Реклама