Action

test: filter structured markdown

Last update over 3 years ago - Unlisted

Steps

  • script

    
    // https://forums.getdrafts.com/t/filter-structured-markdown/8609
    
    var p = Prompt.create();
    
    p.title = "Filter";
    p.message = "Filter Structured Markdown!";
    
    p.addTextField("search_term", "Filter for", "");
    
    p.addButton("Filter");
    
    var didSelect = p.show();
    
    var search_term = p.fieldValues["search_term"]
    
    var active_block = false
    const student_layer = '###'
    const flip = true
    
    var xlines = '# Assignment 1\n\n## Draft 1\n\n### Billy\n\ngreat paper\n\n### Johnny \n\nbad paper\n## Draft 2\n\n### Billy\n\nbad paper\n\n### Johnny \n\ngood paper\n'
    
    
    var line = ""
    
    var filtered_lines =''
    var prefix = ''
    var array_lines = xlines.split(/\n/)
    
    if(flip)
    {
       filtered_lines = '# '+search_term+ '\n'
       prefix = '#'
    }
    
    var parser_info = ''
    var show= false
    for( var i=0 ; i < array_lines.length; i +=1 )
    {
       line = array_lines[i].trim()
       if( line.length == 0 )
       { 
          continue;
       }
       if ( line[0] == '#' )
       {
          if(line.search(student_layer)==0)
          {
             if( line.search(search_term) > 0 )
             {
               active_block = true
               show = true
               if(!flip)
               { 
                 filtered_lines += line + '\n'
               }
             }
             else
             {
               active_block = false
               show = false
             }
          }
          else 
          {
             show = true
             filtered_lines += prefix+line+ '\n'
          }
       }
       else
       {
          if(active_block)
          {
             show = true
             filtered_lines += line+ '\n'
          }
          else
          {
             show = false
          }
       }
       parser_info += 'line '+i+ ', '+line+', show='+show+', active_block='+active_block+'\n'
       
    }
    
    let d = new Draft();
    d.content = filtered_lines
    d.addTag(search_term);
    d.addTag("filtered");
    d.update();
    
    alert(parser_info)

Options

  • After Success Default
    Notification Info
    Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.