Как можно избежать размещения одного и того же контента дважды - PullRequest
4 голосов
/ 27 декабря 2010

Приложение My Kynetx использует float_html(), чтобы создать коробку с содержимым.

rule float_box {
  select when pageview ".*"
  pre {
    content = <<
      <div id='messagebox'>
      <h3>Floating Message Box</h3>
      <ul id='my_list'></ul>
      </div>
    >>; // trippy
  }
  float_html("absolute","top:25px","right:20px",content);
}

rule fill_box {
  select when pageview ".*"
  foreach ["alpha","bravo","charlie"] setting (list_item)
  append("#my_list", "<li>#{list_item}</li>");
}

Приложение (a421x27) используется из букмарклета. Если дважды щелкнуть букмарклет на одной странице, вы получите двойной контент.

Есть ли способ обнаружить, что ящик уже находится на экране, и повторно использовать его?

1 Ответ

4 голосов
/ 27 декабря 2010

Вы можете перемещать содержимое вручную с помощью jQuery и проверять, есть ли оно там или нет.

ruleset a60x516 {
  meta {
    name "so-answer-example"
    description <<
      so-answer-example
    >>
    author "Mike Grace"
    logging on
  }

  rule float_box {
    select when pageview ".*"
    pre {
      content = <<
        <div id='messagebox'>
        <h3>Floating Message Box</h3>
        <ul id='my_list'></ul>
        </div>
      >>; /// fixing syntax highlighting bug
    }
    {
      emit <|
        if ($K("#messagebox").length == 0) {
          $K(content).css({
            "position": "absolute",
            "top": "25px",
            "right": "20px"
          }).appendTo(document.body);
        };
      |>;
    }
  }

  rule fill_box {
    select when pageview ".*"
    foreach ["alpha","bravo","charlie"] setting (list_item)
    {
      append("#my_list", "<li>#{list_item}</li>");
    }
  }
}

Вот как это выглядит после нескольких нажатий на букмарклет из этого кода на example.com alt text


Примечания стороны:

всегда заключайте ваши действия в {}. Действия работают без включения в {}, если у вас есть только одно действие, но лучше всего привыкнуть отмечать ваш блок действий {}.

...