Вход Регистрация
Файл: framework/thirdparty/jasmine-dom/lib/jasmine-dom-fixtures.js
Строк: 186
<?php
/*jsl:declare jasmine*/
function readFixtures()
{
  return 
jasmine.getFixtures()._proxyCallTo('read', arguments);
}

function 
loadFixtures()
{
  
jasmine.getFixtures()._proxyCallTo('load', arguments);
}

function 
setFixtures(html)
{
  
jasmine.getFixtures().set(html);
}

function 
sandbox(attributes)
{
  return 
jasmine.getFixtures().sandbox(attributes);
}


jasmine.getFixtures = function()
{
  return 
jasmine._currentFixtures = jasmine._currentFixtures || new jasmine.Fixtures();
}

jasmine.Fixtures = function()
{
  
this.containerId = 'jasmine-fixtures';
  
this._fixturesCache = {};
}

jasmine.Fixtures.XHR= window.XMLHttpRequest || (function(){
  var 
progIdCandidates= ['Msxml2.XMLHTTP.4.0', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP'];
  var 
len= progIdCandidates.length;

  var 
progId;
  var 
xhr;
  
  function 
ConstructXhr()
  {
    return new 
window.ActiveXObject(ConstructXhr.progId);
  }
  
  while (
len--)
  {
    try
    {
      
progId= progIdCandidates[len];
      
xhr= new window.ActiveXObject(progId);
      
//  ActiveXObject constructor throws an exception
      //  if the component isn't available.
      
xhr= null;
      
ConstructXhr.progId= progId;
      return 
ConstructXhr;
    }
    catch (
e)
    {
      
//  Ignore the error
    
}
  }
  throw new 
Error('No XMLHttpRequest implementation found');
})();

jasmine.Fixtures.prototype= {

  
set: function(html)
  {
    
this.cleanUp();
    
this._createContainer(html);
  },

  
load: function()
  {
    
this.cleanUp();
    
this._createContainer(this.read.apply(this, arguments));
  },

  
read: function()
  {
    var 
htmlChunks = [];

    var 
fixtureUrls = arguments;
    for (var 
urlCount = fixtureUrls.length, urlIndex = 0; urlIndex < urlCount; urlIndex++)
      
htmlChunks.push(this._getFixtureHtml(fixtureUrls[urlIndex]));

    return 
htmlChunks.join('');
  },

  
clearCache: function()
  {
    
this._fixturesCache = {};
  },

  
cleanUp: function()
  {
    var 
container= document.getElementById(this.containerId);
    if (
container)
      
container.parentNode.removeChild(container);
  },

  
sandbox: function(attributes)
  {
    var 
attributesToSet = attributes || {};
    var 
sandbox= document.createElement('div');
    
sandbox.id= 'sandbox';

    if (
"string"===typeof(attributes))
    {
      
sandbox.innerHTML= attributes;
      if (
1===sandbox.childNodes.length && 1===sandbox.firstChild.nodeType)
      {
        
sandbox= sandbox.firstChild;
        if (!
sandbox.id)
          
sandbox.id= 'sandbox';
      }
      return 
sandbox;
    }
    
    for (var 
attr in attributesToSet)
      
sandbox.setAttribute(attr, attributesToSet[attr]);

    return 
sandbox;
  },

  
_createContainer: function(html)
  {
    var 
container = document.createElement('div');
    
container.id= this.containerId;
    
    if (
html && html.nodeType===1)
      
container.appendChild(html);
    else
      
container.innerHTML= html;
  
    
document.body.appendChild(container);
  },

  
_getFixtureHtml: function(url)
  { 
    if (
void(0)===this._fixturesCache[url])
      
this._loadFixtureIntoCache(url);
    return 
this._fixturesCache[url];
  },

  
_loadFixtureIntoCache: function(url)
  {
    var 
self= this;
    var 
xhr= new jasmine.Fixtures.XHR();
    
xhr.open('GET', url, false);
    
xhr.send(null);
    var 
status= xhr.status;
    var 
succeeded= 0===status || (status>=200 && status<300) || 304==status;
    
    if (!
succeeded)
      throw new 
Error('Failed to load resource: status=' + status + ' url=' + url);
    
this._fixturesCache[url]= xhr.responseText;
  },

  
_proxyCallTo: function(methodName, passedArguments)
  {
    return 
this[methodName].apply(this, passedArguments);
  }
  
};
?>
Онлайн: 1
Реклама