<commit_before>- content_for :page_title do
  = "Bulk Edit Products"

- content_for :page_actions do
  %div{ :class => "toolbar", 'data-hook' => "toolbar" }
    %ul{ :class => "actions header-action-links inline-menu" }
      %li#new_product_link
        = button_link_to t(:new_product), new_object_url, { :remote => true, :icon => 'icon-plus', :id => 'admin_new_product' }

= render :partial => 'spree/admin/shared/product_sub_menu'

%div#new_product(data-hook)



%div{ 'ng-app' => 'ofn.admin', 'ng-controller' => 'AdminProductEditCtrl', 'ng-init' => "initialise('#{@spree_api_key}');loading=true;" }
  %div{ 'ng-show' => '!spree_api_key_ok' }
    {{ api_error_msg }}
  %div.option_tab_titles{ :class => "sixteen columns alpha" }
    %h6{ :class => "three columns alpha", 'ng-repeat' => "tab in optionTabs", "ng-click" => "shiftTab(tab)", "ng-class" => "tab.visible && 'selected' || !tab.visible && 'unselected'"}
      {{ tab.title }}
  %div.option_tabs{ :class => "sixteen columns alpha" }
    %div.filters{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.filters.visible' }
      %div{ :class => "four columns alpha" }
        Column:
        %br.clear
        %select.fullwidth{ 'ng-model' => 'filterProperty', :id => "filter_property", 'ng-options' => 'fc.name for fc in filterableColumns', 'ofn-select2-min-search' => 10 }
      %div{ :class => "four columns omega" }
        Filter Type:
        %br.clear
        %select.fullwidth{ 'ng-model' => 'filterPredicate', :id => "filter_predicate", 'ng-options' => 'ft.name for ft in filterTypes', 'ofn-select2-min-search' => 10 }
      %div{ :class => "six columns omega" }
        Value:
        %br.clear
        %input{ :class => "four columns alpha", 'ng-model' => 'filterValue', :id => "filter_value", :type => "text", 'placeholder' => 'Filter Value' }
      %div{ :class => "two columns omega" }
        &nbsp;
        %input.fullwidth{ :name => "add_filter", :value => "Apply Filter", :type => "button", "ng-click" => "addFilter({property:filterProperty,predicate:filterPredicate,value:filterValue})" }
    %div.applied_filters{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.filters.visible && currentFilters.length > 0' }
      %div.applied_filter{ :class => "sixteen columns alpha", 'ng-repeat' => 'filter in currentFilters' }
        %div{ :class => "four columns alpha" }
          {{ filter.property.name }}
        %div{ :class => "four columns omega" }
          {{ filter.predicate.name }}
        %div{ :class => "six columns omega" }
          {{ filter.value }}
        %div{ :class => "two columns omega" }
          %a{ :href => "#", 'ng-click' => "removeFilter(filter)" } Remove Filter
    %div.column_toggle{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.column_toggle.visible' }
      %ul.column-list{ :class => "sixteen columns alpha" }
        %li.column-list-item{ :class => "three columns alpha", 'ofn-toggle-column' => 'column', 'ng-repeat' => 'column in columns' }
          {{ column.name }}
    %hr
  %div.loading{ 'ng-show' => 'loading' }
    %h4 Loading Products...
  %div{ 'ng-show' => '!loading && products.length == 0' }
    %h4{ :style => 'color:red;' } No matching products found.
  %div{ 'ng-show' => 'products.length == 500' }
    %h6 Search returned too many products to display (500+), please apply more search filters to reduce the number of matching products
  %div{ 'ng-hide' => 'loading || products.length == 500 || products.length == 0' }
    %div.quick_search{ :class => "five columns omega" }
      %input.search{ :class => "four columns alpha", 'ng-model' => 'query', :name => "quick_filter", :type => 'text', 'placeholder' => 'Quick Search' }
    %div.pagination{ :class => "seven columns omega" }
      %div.pagenav{ :class => "two columns alpha" }
        %span.first
          %a{ :href => "#", 'ng-click' => "currentPage = 1", 'ng-show' => "currentPage > 1" }
            &laquo;&nbsp;First
        %span.prev
          %a{ :href => "#", 'ng-click' => "currentPage = currentPage - 1", 'ng-show' => "currentPage > 1" }
            &lsaquo;&nbsp;Prev
      %div.pagenav{ :class => "columns omega" }
        %span.page{ 'ng-repeat' => "page in [] | rangeArray:minPage():maxPage()", 'ng-class' => "{current: currentPage==page}" }
          %a{ :href => "#", 'ng-click' => "setPage(page)" }
            {{page}}
        %span{ 'ng-show' => "maxPage() < totalPages()" } ...
      %div.pagenav{ :class => "two columns omega" }
        %span.next
          %a{ :href => "#", 'ng-click' => "currentPage = currentPage + 1", 'ng-show' => "currentPage < totalPages()" }
            Next&nbsp;&rsaquo;
        %span.last
          %a{ :href => "#", 'ng-click' => "currentPage = totalPages()", 'ng-show' => "currentPage < totalPages()" }
            Last&nbsp;&raquo;
    %div.pagination_info{ :class => 'four columns alpha' }
      Show&nbsp;
      %select{ 'ng-model' => 'perPage', :name => 'perPage', 'ng-options' => 'pp for pp in [25,50,100,200]'}
      &nbsp;per page
      %br
      %span Displaying {{firstVisibleProduct()}}-{{lastVisibleProduct()}} of {{totalCount()}} products
    %table.index#listing_products.bulk
      %colgroup
        %col
        %col
        %col{'style' => 'width: 20%;'}
        %col{'style' => 'width: 12%;'}
        %col{'style' => 'width: 12%;'}
        %col
        %col
        %col
        %col
        %col
        %col

      %thead
        %tr
          %th.left-actions
          %th{ 'ng-show' => 'columns.supplier.visible' } Supplier
          %th{ 'ng-show' => 'columns.name.visible' } Name
          %th{ 'ng-show' => 'columns.unit.visible' } Unit / Value
          %th{ 'ng-show' => 'columns.price.visible' } Price
          %th{ 'ng-show' => 'columns.on_hand.visible' } On Hand
          %th{ 'ng-show' => 'columns.taxons.visible' } Taxons
          %th{ 'ng-show' => 'columns.available_on.visible' } Av. On
          %th.actions
          %th.actions
          %th.actions
      %tbody{ 'ng-repeat' => 'product in filteredProducts = (products | filter:query)', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", 'ng-show' => "$index >= perPage*(currentPage-1) && $index < perPage*currentPage" }
        %tr.product{ :id => "p_{{product.id}}" }
          %td.left-actions
            %a{ 'ofn-toggle-variants' => 'true', :class => "view-variants icon-chevron-right", 'ng-show' => 'hasVariants(product)' }
            %a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
          %td.supplier{ 'ng-show' => 'columns.supplier.visible' }
            %select.select2{ 'ng-model' => 'product.supplier', :name => 'supplier', 'ofn-track-product' => 'supplier', 'ng-options' => 's.name for s in suppliers' }
          %td{ 'ng-show' => 'columns.name.visible' }
            %input{ 'ng-model' => "product.name", :name => 'product_name', 'ofn-track-product' => 'name', :type => 'text' }
          %td.unit{ 'ng-show' => 'columns.unit.visible' }
            %select.select2{ 'ng-model' => 'product.variant_unit_with_scale', :name => 'variant_unit_with_scale', 'ofn-track-product' => 'variant_unit_with_scale', 'ng-options' => 'unit[1] as unit[0] for unit in variant_unit_options' }
              %option{'value' => '', 'ng-hide' => "hasVariants(product) && hasUnit(product)"}
            %input{ 'ng-model' => 'product.master.unit_value_with_description', :name => 'master_unit_value_with_description', 'ofn-track-product' => 'master.unit_value_with_description', :type => 'text', :placeholder => 'value', 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
            %input{ 'ng-model' => 'product.variant_unit_name', :name => 'variant_unit_name', 'ofn-track-product' => 'variant_unit_name', :placeholder => 'unit', 'ng-show' => "product.variant_unit_with_scale == 'items'", :type => 'text' }
          %td{ 'ng-show' => 'columns.price.visible' }
            %input{ 'ng-model' => 'product.price', 'ofn-decimal' => :true, :name => 'price', 'ofn-track-product' => 'price', :type => 'text', 'ng-hide' => 'hasVariants(product)' }
          %td{ 'ng-show' => 'columns.on_hand.visible' }
            %span{ 'ng-bind' => 'product.on_hand', :name => 'on_hand', 'ng-show' => '!hasOnDemandVariants(product) && (hasVariants(product) || product.on_demand)' }
            %input.field{ 'ng-model' => 'product.on_hand', :name => 'on_hand', 'ofn-track-product' => 'on_hand', 'ng-hide' => 'hasVariants(product) || product.on_demand', :type => 'number' }
          %td{ 'ng-show' => 'columns.taxons.visible' }
            %input.fullwidth{ :type => 'text', 'ng-model' => 'product.taxon_ids', 'ofn-taxon-autocomplete' => '', 'ofn-track-product' => 'taxon_ids' }
          %td{ 'ng-show' => 'columns.available_on.visible' }
            %input{ 'ng-model' => 'product.available_on', :name => 'available_on', 'ofn-track-product' => 'available_on', 'datetimepicker' => 'product.available_on', type: "text" }
          %td.actions
            %a{ 'ng-click' => 'editWarn(product)', :class => "edit-product icon-edit no-text" }
          %td.actions
            %a{ 'ng-click' => 'cloneProduct(product)', :class => "clone-product icon-copy no-text" }
          %td.actions
            %a{ 'ng-click' => 'deleteProduct(product)', :class => "delete-product icon-trash no-text" }
        %tr.variant{ 'ng-repeat' => 'variant in product.variants', 'ng-show' => 'displayProperties[product.id].showVariants', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'" }
          %td.left-actions
            %a{ :class => "variant-item icon-caret-right", 'ng-hide' => "$last" }
            %a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "$last" }
          %td{ 'ng-show' => 'columns.supplier.visible' }
          %td{ 'ng-show' => 'columns.name.visible' }
            {{ variant.options_text }}
          %td{ 'ng-show' => 'columns.unit.visible' }
            %input{ 'ng-model' => 'variant.unit_value_with_description', :name => 'variant_unit_value_with_description', 'ofn-track-variant' => 'unit_value_with_description', :type => 'text' }
          %td{ 'ng-show' => 'columns.price.visible' }
            %input{ 'ng-model' => 'variant.price', 'ofn-decimal' => :true, :name => 'variant_price', 'ofn-track-variant' => 'price', :type => 'text' }
          %td{ 'ng-show' => 'columns.on_hand.visible' }
            %input.field{ 'ng-model' => 'variant.on_hand', 'ng-change' => 'updateOnHand(product)', :name => 'variant_on_hand', 'ng-hide' => 'variant.on_demand', 'ofn-track-variant' => 'on_hand', :type => 'number' }
            %span{ 'ng-bind' => 'variant.on_hand', :name => 'variant_on_hand', 'ng-show' => 'variant.on_demand' }
          %td{ 'ng-show' => 'columns.taxons.visible' }
          %td{ 'ng-show' => 'columns.available_on.visible' }
          %td.actions
            %a{ 'ng-click' => 'editWarn(product,variant)', :class => "edit-variant icon-edit no-text", 'ng-show' => "variantSaved(variant)" }
          %td.actions
          %td.actions
            %a{ 'ng-click' => 'deleteVariant(product,variant)', :class => "delete-variant icon-trash no-text" }
    %input{ :type => 'button', :value => 'Update', 'ng-click' => 'submitProducts()'}
    %span{ id: "update-status-message", 'ng-style' => 'updateStatusMessage.style' }
      {{ updateStatusMessage.text }}
<commit_msg>Only trigger taxon search AJAX when column visible - fixes deadlocks in specs<commit_after>- content_for :page_title do
  = "Bulk Edit Products"

- content_for :page_actions do
  %div{ :class => "toolbar", 'data-hook' => "toolbar" }
    %ul{ :class => "actions header-action-links inline-menu" }
      %li#new_product_link
        = button_link_to t(:new_product), new_object_url, { :remote => true, :icon => 'icon-plus', :id => 'admin_new_product' }

= render :partial => 'spree/admin/shared/product_sub_menu'

%div#new_product(data-hook)



%div{ 'ng-app' => 'ofn.admin', 'ng-controller' => 'AdminProductEditCtrl', 'ng-init' => "initialise('#{@spree_api_key}');loading=true;" }
  %div{ 'ng-show' => '!spree_api_key_ok' }
    {{ api_error_msg }}
  %div.option_tab_titles{ :class => "sixteen columns alpha" }
    %h6{ :class => "three columns alpha", 'ng-repeat' => "tab in optionTabs", "ng-click" => "shiftTab(tab)", "ng-class" => "tab.visible && 'selected' || !tab.visible && 'unselected'"}
      {{ tab.title }}
  %div.option_tabs{ :class => "sixteen columns alpha" }
    %div.filters{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.filters.visible' }
      %div{ :class => "four columns alpha" }
        Column:
        %br.clear
        %select.fullwidth{ 'ng-model' => 'filterProperty', :id => "filter_property", 'ng-options' => 'fc.name for fc in filterableColumns', 'ofn-select2-min-search' => 10 }
      %div{ :class => "four columns omega" }
        Filter Type:
        %br.clear
        %select.fullwidth{ 'ng-model' => 'filterPredicate', :id => "filter_predicate", 'ng-options' => 'ft.name for ft in filterTypes', 'ofn-select2-min-search' => 10 }
      %div{ :class => "six columns omega" }
        Value:
        %br.clear
        %input{ :class => "four columns alpha", 'ng-model' => 'filterValue', :id => "filter_value", :type => "text", 'placeholder' => 'Filter Value' }
      %div{ :class => "two columns omega" }
        &nbsp;
        %input.fullwidth{ :name => "add_filter", :value => "Apply Filter", :type => "button", "ng-click" => "addFilter({property:filterProperty,predicate:filterPredicate,value:filterValue})" }
    %div.applied_filters{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.filters.visible && currentFilters.length > 0' }
      %div.applied_filter{ :class => "sixteen columns alpha", 'ng-repeat' => 'filter in currentFilters' }
        %div{ :class => "four columns alpha" }
          {{ filter.property.name }}
        %div{ :class => "four columns omega" }
          {{ filter.predicate.name }}
        %div{ :class => "six columns omega" }
          {{ filter.value }}
        %div{ :class => "two columns omega" }
          %a{ :href => "#", 'ng-click' => "removeFilter(filter)" } Remove Filter
    %div.column_toggle{ :class => "sixteen columns alpha", "ng-show" => 'optionTabs.column_toggle.visible' }
      %ul.column-list{ :class => "sixteen columns alpha" }
        %li.column-list-item{ :class => "three columns alpha", 'ofn-toggle-column' => 'column', 'ng-repeat' => 'column in columns' }
          {{ column.name }}
    %hr
  %div.loading{ 'ng-show' => 'loading' }
    %h4 Loading Products...
  %div{ 'ng-show' => '!loading && products.length == 0' }
    %h4{ :style => 'color:red;' } No matching products found.
  %div{ 'ng-show' => 'products.length == 500' }
    %h6 Search returned too many products to display (500+), please apply more search filters to reduce the number of matching products
  %div{ 'ng-hide' => 'loading || products.length == 500 || products.length == 0' }
    %div.quick_search{ :class => "five columns omega" }
      %input.search{ :class => "four columns alpha", 'ng-model' => 'query', :name => "quick_filter", :type => 'text', 'placeholder' => 'Quick Search' }
    %div.pagination{ :class => "seven columns omega" }
      %div.pagenav{ :class => "two columns alpha" }
        %span.first
          %a{ :href => "#", 'ng-click' => "currentPage = 1", 'ng-show' => "currentPage > 1" }
            &laquo;&nbsp;First
        %span.prev
          %a{ :href => "#", 'ng-click' => "currentPage = currentPage - 1", 'ng-show' => "currentPage > 1" }
            &lsaquo;&nbsp;Prev
      %div.pagenav{ :class => "columns omega" }
        %span.page{ 'ng-repeat' => "page in [] | rangeArray:minPage():maxPage()", 'ng-class' => "{current: currentPage==page}" }
          %a{ :href => "#", 'ng-click' => "setPage(page)" }
            {{page}}
        %span{ 'ng-show' => "maxPage() < totalPages()" } ...
      %div.pagenav{ :class => "two columns omega" }
        %span.next
          %a{ :href => "#", 'ng-click' => "currentPage = currentPage + 1", 'ng-show' => "currentPage < totalPages()" }
            Next&nbsp;&rsaquo;
        %span.last
          %a{ :href => "#", 'ng-click' => "currentPage = totalPages()", 'ng-show' => "currentPage < totalPages()" }
            Last&nbsp;&raquo;
    %div.pagination_info{ :class => 'four columns alpha' }
      Show&nbsp;
      %select{ 'ng-model' => 'perPage', :name => 'perPage', 'ng-options' => 'pp for pp in [25,50,100,200]'}
      &nbsp;per page
      %br
      %span Displaying {{firstVisibleProduct()}}-{{lastVisibleProduct()}} of {{totalCount()}} products
    %table.index#listing_products.bulk
      %colgroup
        %col
        %col
        %col{'style' => 'width: 20%;'}
        %col{'style' => 'width: 12%;'}
        %col{'style' => 'width: 12%;'}
        %col
        %col
        %col
        %col
        %col
        %col

      %thead
        %tr
          %th.left-actions
          %th{ 'ng-show' => 'columns.supplier.visible' } Supplier
          %th{ 'ng-show' => 'columns.name.visible' } Name
          %th{ 'ng-show' => 'columns.unit.visible' } Unit / Value
          %th{ 'ng-show' => 'columns.price.visible' } Price
          %th{ 'ng-show' => 'columns.on_hand.visible' } On Hand
          %th{ 'ng-show' => 'columns.taxons.visible' } Taxons
          %th{ 'ng-show' => 'columns.available_on.visible' } Av. On
          %th.actions
          %th.actions
          %th.actions
      %tbody{ 'ng-repeat' => 'product in filteredProducts = (products | filter:query)', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", 'ng-show' => "$index >= perPage*(currentPage-1) && $index < perPage*currentPage" }
        %tr.product{ :id => "p_{{product.id}}" }
          %td.left-actions
            %a{ 'ofn-toggle-variants' => 'true', :class => "view-variants icon-chevron-right", 'ng-show' => 'hasVariants(product)' }
            %a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
          %td.supplier{ 'ng-show' => 'columns.supplier.visible' }
            %select.select2{ 'ng-model' => 'product.supplier', :name => 'supplier', 'ofn-track-product' => 'supplier', 'ng-options' => 's.name for s in suppliers' }
          %td{ 'ng-show' => 'columns.name.visible' }
            %input{ 'ng-model' => "product.name", :name => 'product_name', 'ofn-track-product' => 'name', :type => 'text' }
          %td.unit{ 'ng-show' => 'columns.unit.visible' }
            %select.select2{ 'ng-model' => 'product.variant_unit_with_scale', :name => 'variant_unit_with_scale', 'ofn-track-product' => 'variant_unit_with_scale', 'ng-options' => 'unit[1] as unit[0] for unit in variant_unit_options' }
              %option{'value' => '', 'ng-hide' => "hasVariants(product) && hasUnit(product)"}
            %input{ 'ng-model' => 'product.master.unit_value_with_description', :name => 'master_unit_value_with_description', 'ofn-track-product' => 'master.unit_value_with_description', :type => 'text', :placeholder => 'value', 'ng-show' => "!hasVariants(product) && hasUnit(product)" }
            %input{ 'ng-model' => 'product.variant_unit_name', :name => 'variant_unit_name', 'ofn-track-product' => 'variant_unit_name', :placeholder => 'unit', 'ng-show' => "product.variant_unit_with_scale == 'items'", :type => 'text' }
          %td{ 'ng-show' => 'columns.price.visible' }
            %input{ 'ng-model' => 'product.price', 'ofn-decimal' => :true, :name => 'price', 'ofn-track-product' => 'price', :type => 'text', 'ng-hide' => 'hasVariants(product)' }
          %td{ 'ng-show' => 'columns.on_hand.visible' }
            %span{ 'ng-bind' => 'product.on_hand', :name => 'on_hand', 'ng-show' => '!hasOnDemandVariants(product) && (hasVariants(product) || product.on_demand)' }
            %input.field{ 'ng-model' => 'product.on_hand', :name => 'on_hand', 'ofn-track-product' => 'on_hand', 'ng-hide' => 'hasVariants(product) || product.on_demand', :type => 'number' }
          %td{ 'ng-if' => 'columns.taxons.visible' }
            %input.fullwidth{ :type => 'text', 'ng-model' => 'product.taxon_ids', 'ofn-taxon-autocomplete' => '', 'ofn-track-product' => 'taxon_ids' }
          %td{ 'ng-show' => 'columns.available_on.visible' }
            %input{ 'ng-model' => 'product.available_on', :name => 'available_on', 'ofn-track-product' => 'available_on', 'datetimepicker' => 'product.available_on', type: "text" }
          %td.actions
            %a{ 'ng-click' => 'editWarn(product)', :class => "edit-product icon-edit no-text" }
          %td.actions
            %a{ 'ng-click' => 'cloneProduct(product)', :class => "clone-product icon-copy no-text" }
          %td.actions
            %a{ 'ng-click' => 'deleteProduct(product)', :class => "delete-product icon-trash no-text" }
        %tr.variant{ 'ng-repeat' => 'variant in product.variants', 'ng-show' => 'displayProperties[product.id].showVariants', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'" }
          %td.left-actions
            %a{ :class => "variant-item icon-caret-right", 'ng-hide' => "$last" }
            %a{ :class => "add-variant icon-plus-sign", 'ng-click' => "addVariant(product)", 'ng-show' => "$last" }
          %td{ 'ng-show' => 'columns.supplier.visible' }
          %td{ 'ng-show' => 'columns.name.visible' }
            {{ variant.options_text }}
          %td{ 'ng-show' => 'columns.unit.visible' }
            %input{ 'ng-model' => 'variant.unit_value_with_description', :name => 'variant_unit_value_with_description', 'ofn-track-variant' => 'unit_value_with_description', :type => 'text' }
          %td{ 'ng-show' => 'columns.price.visible' }
            %input{ 'ng-model' => 'variant.price', 'ofn-decimal' => :true, :name => 'variant_price', 'ofn-track-variant' => 'price', :type => 'text' }
          %td{ 'ng-show' => 'columns.on_hand.visible' }
            %input.field{ 'ng-model' => 'variant.on_hand', 'ng-change' => 'updateOnHand(product)', :name => 'variant_on_hand', 'ng-hide' => 'variant.on_demand', 'ofn-track-variant' => 'on_hand', :type => 'number' }
            %span{ 'ng-bind' => 'variant.on_hand', :name => 'variant_on_hand', 'ng-show' => 'variant.on_demand' }
          %td{ 'ng-show' => 'columns.taxons.visible' }
          %td{ 'ng-show' => 'columns.available_on.visible' }
          %td.actions
            %a{ 'ng-click' => 'editWarn(product,variant)', :class => "edit-variant icon-edit no-text", 'ng-show' => "variantSaved(variant)" }
          %td.actions
          %td.actions
            %a{ 'ng-click' => 'deleteVariant(product,variant)', :class => "delete-variant icon-trash no-text" }
    %input{ :type => 'button', :value => 'Update', 'ng-click' => 'submitProducts()'}
    %span{ id: "update-status-message", 'ng-style' => 'updateStatusMessage.style' }
      {{ updateStatusMessage.text }}

{'fraction_non_alphanumeric': 0.2049338357725002, 'fraction_numerical': 0.00420646744369468, 'mean_word_length': 3.0451967387451258, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 445, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '820044', 'n_tokens_mistral': 7738, 'n_tokens_neox': 7613, 'n_words': 1575}