phug-php/bemto

View on GitHub
src/templates/settings.pug

Summary

Maintainability
Test Coverage
//- bemto
//- Copyright(c) 2012 Roman Komarov <kizu@kizu.ru>
//- MIT Licensed

include tag_metadata.pug

-
  $bemto_settings = [
    'prefix' => '',
    'element' => '__',
    'modifier' => '_',
    'default_tag' => 'div',
    'nosrc_substitute' => true,
    'flat_elements' => true,
    'class_delimiter' => '',
  ];

  $bemto_output_settings = ['element', 'modifier'];

  if (!isset($bemto_settings_prefix)) { $bemto_settings_prefix = null; }
  if (!isset($bemto_settings_element)) { $bemto_settings_element = null; }
  if (!isset($bemto_settings_modifier)) { $bemto_settings_modifier = null; }
  if (!isset($bemto_settings_default_tag)) { $bemto_settings_default_tag = null; }

  $get_bemto_settings = function () use (&$bemto_settings, &$bemto_output_settings, &$bemto_settings_prefix, &$bemto_settings_element, &$bemto_settings_modifier, &$bemto_settings_default_tag) {
    $settings = copyValue($bemto_settings);
    if (isset($bemto_settings_prefix)) {
      $settings['prefix'] = $bemto_settings_prefix;
    }
    if (isset($bemto_settings_element)) {
      $settings['element'] = $bemto_settings_element;
    }
    if (isset($bemto_settings_prefix)) {      $settings['prefix']      = $bemto_settings_prefix;      }
    if (isset($bemto_settings_element)) {     $settings['element']     = $bemto_settings_element;     }
    if (isset($bemto_settings_modifier)) {    $settings['modifier']    = $bemto_settings_modifier;    }
    if (isset($bemto_settings_default_tag)) { $settings['default_tag'] = $bemto_settings_default_tag; }

    foreach ($bemto_output_settings as $setting) {
      if (!isset($settings['output_' . $setting])) {
        $settings['output_' . $setting] = $settings[$setting];
      }
    }

    return $settings;
  };

  $set_bemto_setting = function ($name, $value) use (&$bemto_settings, &$bemto_settings_prefix, &$bemto_settings_element, &$bemto_settings_modifier, &$bemto_settings_default_tag) {
    $bemto_settings[$name] = $value;

    //- Resetting the old variable-type setting
    if ($name === 'prefix' && isset($bemto_settings_prefix)) { $bemto_settings_prefix = null; }
    if ($name === 'element' && isset($bemto_settings_element)) { $bemto_settings_element = null; }
    if ($name === 'modifier' && isset($bemto_settings_modifier)) { $bemto_settings_modifier = null; }
    if ($name === 'default_tag' && isset($bemto_settings_default_tag)) { $bemto_settings_default_tag = null; }
  };

  $set_bemto_settings = function ($settings) use (&$set_bemto_setting) {
    foreach ($settings as $name => $value) {
      $set_bemto_setting($name, $value);
    }
  };

  if (!isset($GLOBALS['__bemto'])) {
    $GLOBALS['__bemto'] = new stdClass();
  }
  $bemto = $GLOBALS['__bemto'];
  $bemto->get_bemto_settings = $get_bemto_settings;

  if (!function_exists('get_bemto_settings')) {
    function get_bemto_settings() {
      global $__bemto;

      return call_user_func($__bemto->get_bemto_settings);
    }
  }

  $bemto->set_bemto_setting = $set_bemto_setting;

  if (!function_exists('set_bemto_setting')) {
    function set_bemto_setting($name, $value) {
      global $__bemto;

      return call_user_func($__bemto->set_bemto_setting, $name, $value);
    }
  }

  $bemto->set_bemto_settings = $set_bemto_settings;

  if (!function_exists('set_bemto_settings')) {
    function set_bemto_settings($settings) {
      global $__bemto;

      return call_user_func($__bemto->set_bemto_settings, $settings);
    }
  }

mixin bemto_scope($settings)
  - $old_bemto_settings = copyValue($bemto_settings)
  - $set_bemto_settings($settings)
  block
  - $set_bemto_settings($old_bemto_settings)