Program Listing for File InstructionListDetailItem.hpp

Return to documentation for file (include/dish2/web/InstructionListDetailItem.hpp)

#pragma once
#ifndef DISH2_WEB_INSTRUCTIONLISTDETAILITEM_HPP_INCLUDE
#define DISH2_WEB_INSTRUCTIONLISTDETAILITEM_HPP_INCLUDE

#include <functional>
#include <string>
#include <type_traits>

#include "../../../third-party/Empirical/include/emp/tools/hash_namify.hpp"
#include "../../../third-party/Empirical/include/emp/tools/string_utils.hpp"
#include "../../../third-party/Empirical/include/emp/web/commands.hpp"
#include "../../../third-party/Empirical/include/emp/web/Div.hpp"
#include "../../../third-party/Empirical/include/emp/web/init.hpp"
#include "../../../third-party/signalgp-lite/include/sgpl/program/Instruction.hpp"

namespace dish2 {

template< typename Spec >
class InstructionListDetailItem {

  emp::web::Div list_group_item;

  using sgpl_spec_t = typename Spec::sgpl_spec_t;
  using instruction_t = sgpl::Instruction< sgpl_spec_t >;

  static emp::web::Div MakeDetail(
    const std::string& key, const std::string& value
  ) {

    emp::web::Div res;

    res.SetAttr(
      "class", "list-group list-group-horizontal"
    ).SetCSS(
      "display", "flex",
      "flex-wrap", "wrap"
    );

    res << emp::web::Div(
    ).SetAttr(
      "class", "list-group-item border list-group-item-secondary"
    ).SetCSS(
      "flex", "1 1 200px"
    ) << key;

    res << emp::web::Div(
    ).SetAttr(
      "class", "list-group-item border"
    ).SetCSS(
      "flex", "1 1 200px"
    ) << value;

    return res;

  }

public:

  InstructionListDetailItem( const instruction_t& instruction ) {

    list_group_item.SetAttr(
      "class",
      emp::to_string(
        "collapse list-group-item instruction-detail-", &instruction
      )
    );

      for (const auto& [key, value] : instruction.GetDescriptors() ) {
        list_group_item << MakeDetail( key, value );
      }

  }

  operator emp::web::Div&() { return list_group_item; }

};

} // namespace dish2

#endif // #ifndef DISH2_WEB_INSTRUCTIONLISTDETAILITEM_HPP_INCLUDE