Помогите с JS

Discussion in 'PHP' started by #Smith, 3 Jun 2012.

  1. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Уважаемые знатоки, помогите начинающему веберу.
    Знал бы как - не беспокоил бы.

    Суть вот в чём:
    Уж очень приглянулась мне одна функция ВК на JS.
    Функция называется showBox()
    Ниже приведён фрагмент кода, взятого вот отсюда: http://st2.userapi.com/js/al/common.js?834
    Code:
    function showBox(url, params, options, e) {
      if (checkEvent(e)) return false;
    
      var opts = options || {},
          boxParams = opts.params || {},
          box = new MessageBox(boxParams), p = {
        onDone: function(title, html, js) {
          if (!box.isVisible()) return;
          try {
            show(boxLayerBG);
            box.setOptions({title: title, hideButtons: boxParams.hideButtons || false});
            if (opts.showProgress) {
              box.show();
            } else {
              show(box.bodyNode);
            }
            box.content(html);
            box.evalBox(js, url, params);
            if (opts.onDone) opts.onDone();
          } catch(e) {
            topError(e, {dt: 15, type: 103, url: url, query: ajx2q(params), answer: Array.prototype.slice.call(arguments).join('<!>')});
            if (box.isVisible()) box.hide();
          }
        },
        onFail: function(error) {
          box.failed = true;
          setTimeout(box.hide, 0);
          if (isFunction(opts.onFail)) return opts.onFail(error);
        },
        cache: opts.cache,
        stat: opts.stat,
        fromBox: true
      };
    
      if (opts.prgEl) {
        opts.showProgress = showGlobalPrg.pbind(opts.prgEl, {cls: opts.prgClass, w: opts.prgW, h: opts.prgH, hide: true});
        opts.hideProgress = hide.pbind('global_prg');
      }
      if (opts.showProgress) {
        extend(p, {
          showProgress: opts.showProgress,
          hideProgress: opts.hideProgress
        });
      } else {
        box.setOptions({title: false, hideButtons: true}).show();
        if (__bq.count() < 2) {
          hide(boxLayerBG);
        }
        hide(box.bodyNode);
        p.showProgress = function() {
          show(boxLoader);
          boxRefreshCoords(boxLoader);
        }
        p.hideProgress = hide.pbind(boxLoader);
      }
      box.removeButtons().addButton(getLang('global_close'));
    
      ajax.post(url, params, p);
      return box;
    }

    Может, кто-нибудь может подсказать, как её можно приляпать на свой ресурс?
    Я как не пытался, у меня отказывается работать.
    Кстати, что у них за формат такой интересный, разделённый символами <!> ?

     
  2. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    <html>
    <head>
    <script>
    var vk = {};
    	boxLayer = null;
    
    window.onload = function () {
    	boxLayer = document.getElementById('box-layer');
    	domStarted();
    	showBox('/');
    }
    
    function showBox(url, params, options, e) {
      if (checkEvent(e)) return false;
    
      var opts = options || {},
          boxParams = opts.params || {},
          box = new MessageBox(boxParams), p = {
        onDone: function(title, html, js) {
          if (!box.isVisible()) return;
          try {
            show(boxLayerBG);
            box.setOptions({title: title, hideButtons: boxParams.hideButtons || false});
            if (opts.showProgress) {
              box.show();
            } else {
              show(box.bodyNode);
            }
            box.content(html);
            box.evalBox(js, url, params);
            if (opts.onDone) opts.onDone();
          } catch(e) {
            topError(e, {dt: 15, type: 103, url: url, query: ajx2q(params), answer: Array.prototype.slice.call(arguments).join('<!>')});
            if (box.isVisible()) box.hide();
          }
        },
        onFail: function(error) {
          box.failed = true;
          setTimeout(box.hide, 0);
          if (isFunction(opts.onFail)) return opts.onFail(error);
        },
        cache: opts.cache,
        stat: opts.stat,
        fromBox: true
      };
    
      if (opts.prgEl) {
        opts.showProgress = showGlobalPrg.pbind(opts.prgEl, {cls: opts.prgClass, w: opts.prgW, h: opts.prgH, hide: true});
        opts.hideProgress = hide.pbind('global_prg');
      }
      if (opts.showProgress) {
        extend(p, {
          showProgress: opts.showProgress,
          hideProgress: opts.hideProgress
        });
      } else {
        box.setOptions({title: false, hideButtons: true}).show();
        if (__bq.count() < 2) {
          hide(boxLayerBG);
        }
        hide(box.bodyNode);
        p.showProgress = function() {
          show(boxLoader);
          boxRefreshCoords(boxLoader);
        }
        p.hideProgress = hide.pbind(boxLoader);
      }
      box.removeButtons().addButton(getLang('global_clos  e'));
    
      ajax.post(url, params, p);
      return box;
    }
    </script>
    <script src="common.js"></script>
    </head>
    <body>
    <div id="box-layer"></div>
    <div id="utils"></div>
    </body>
    </html>
    Вот что получается. Дальше уже надоело, потому что должна быть ещё соответствующая разметка (хтмл) страницы.

    Вот строка из common.js
    var l = ge('layer_bg'), lw = l.nextSibling, bl = ge('box_layer_bg'), blw = bl.nextSibling;
    ge - getElementById, собсна те нужно для начала найти эти контейнеры (layer_bg и т.д.), добавить себе в разметку и далее добавлять нужные по мере выплывания ошибок.
     
    2 people like this.
  3. #Smith

    #Smith New Member

    Joined:
    20 Jun 2010
    Messages:
    96
    Likes Received:
    2
    Reputations:
    0
    Спасибо огромное!
    Главное, что объяснили принцып.

    А формат ответа у них, разделённый символами <!> - это просто набор параметров, разделённых этим сепоратором или это какой-то формат?
     
  4. Fail_Ed

    Fail_Ed New Member

    Joined:
    9 Apr 2012
    Messages:
    23
    Likes Received:
    0
    Reputations:
    -5
    "Набор параметров".