niedziela, 29 września 2013

DialogsControl - kontrolowanie domyślnych okien dialogowych

Prosta funkcja/klasa pozwalająca kontrolować (udawać) okna dialogowe.
Przy pomocy metody disable możemy wyłączyć wyświetlanie wszystkich okien dialogowych. oba parametry tej metody pozwalają ustawić wartości zwracane przez funkcje confirm oraz prompt. Domyślne ich wartości to odpowiednio true oraz '' (pusty string).
Metoda restore pozwala przywrócić domyślne wartości tych funkcji czyli oryginalne okna dialogowe w obiekcie window. Domyślne pod warunkiem, że nie były one modyfikowane przez inny skrypt.

var DialogsControl = function(w){
  w = w || window;
  var d = {
    alert: w.alert,
    confirm: w.confirm,
    prompt: w.prompt
  };

  return {
    disable: function(confirmRet, promptRet){
      if (typeof confirmRet === 'undefined')
        confirmRet = true;
      if (typeof promptRet === 'undefined')
        promptRet = '';
      w.alert = function(){};
      w.confirm = function(){return confirmRet;};
      w.prompt = function(){return promptRet;};
    },
    restore: function(){
      w.alert = d.alert;
      w.confirm = d.confirm;
      w.prompt = d.prompt;
    }
  };    
};

Gotowy kod z przykładami wywołania można przetestować tutaj http://jsfiddle.net/a8BvR/

onContentChange

Troszkę słabe rozwiązanie, ale pozwala wykryć zdarzenie zmiany treści na dowolnej stronie.

var onContentChange = function(htmlEl, fn) {
  var content = htmlEl.innerHTML;
  (function callee(){
    if (htmlEl.innerHTML !== content) {
      fn(htmlEl.innerHTML, content);
      return;
    }
    setTimeout(callee, 50);
  })();
};

Zdarzenie po wykryciu odpina się automatycznie.

Przykład wywołania:

onContentChange(document.querySelector('div'), function(n, o){
  alert(
    'changed'+"\n"+
    'old value: '+o+"\n"+
    'new value: '+n
  );
});

jsfiddle: http://jsfiddle.net/f82Um/1/

niedziela, 22 września 2013

php dump

Przydatna funkcja, która wyświetla obiekt, w postaci czytelnej na stronie html.
Zamiast print_r, można również użyć var_dump lub podobnej funkcji.

function dump($obj) {
  echo '<pre>';
  echo htmlspecialchars(print_r($obj, true));
  echo '</pre>';
}