Scumtron
@Scumtron

Объясните пожалуйста, что делает этот скрипт?

Здравствуйте,

Нашел у себя в скриптах незадокументированную часть кода:
var Turbo = {
	head : function(o) {
		var count = 0;
		var scriptTag, linkTag, id;
		var scriptFiles = o.js || {};
		var cssFiles = o.css || {};
		var head = document.getElementsByTagName('head')[0];

		for ( var k in cssFiles) {
			id = Turbo._makeId(cssFiles[k]);
			if(!document.getElementById(id)) {
				linkTag = document.createElement('link');
				linkTag.type = 'text/css';
				linkTag.rel = 'stylesheet';
				linkTag.href = cssFiles[k];
				linkTag.id = id;
				head.appendChild(linkTag);
			}
		}
		for ( var k in scriptFiles) {
			id = Turbo._makeId(scriptFiles[k]);
			scriptTag  = document.getElementById(id);
			if(!scriptTag) {
				scriptTag = document.createElement('script');
				scriptTag.type = 'text/javascript';
				scriptTag.src = scriptFiles[k];
				scriptTag.id = id;
				head.appendChild(scriptTag);
				if (typeof o.callback == "function") {
					if (scriptTag.readyState) { //IE
						scriptTag.onreadystatechange = function() {
							if (scriptTag.readyState == "loaded"
									|| scriptTag.readyState == "complete") {
								count++;
								if (count == scriptFiles.length)
									o.callback.call();
							}
						};
					} else { // other browsers
						scriptTag.onload = function() {
							count++;
							if (count == scriptFiles.length)
								o.callback.call();
						}
					}
				}
			} else {
				if (typeof o.callback == "function") {
					count++;
					if(count == scriptFiles.length) {
						o.callback.call();
					}
				}
			}
		}
	},
	_makeId : function(url) {
		var parts = url.split('?');
		if( parts.length == 2 && /^([\d]{10})$/.exec(parts[1]) ) {
			url = parts[0];
		}
		return url.replace(/[^a-z0-9-_]/gi,'-').replace(/([-]{2,})/gi,'-');
	}
}


Судя по всему, это для динамического создания и вставки в страницу js и css файлов, но как воспользоваться этими функциями, подскажите пожалуйста?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
Ivanq
@Ivanq
Знаю php, js, html, css
Code
var Turbo = {
  head : function(o) {
    // Подгрузка JS, CSS
    var count = 0;
    var scriptTag, linkTag, id;
    var scriptFiles = o.js || {};
    var cssFiles = o.css || {};
    var head = document.getElementsByTagName('head')[0];

    for ( var k in cssFiles) {
      // Парсим название CSS-файла
      // Достаем из него ID и если не нашли <link> с таким ID, создаем и присваиваем ID (избегаем повторной загрузки)
      id = Turbo._makeId(cssFiles[k]);
      if(!document.getElementById(id)) {
        // Создаем 
        linkTag = document.createElement('link');
        linkTag.type = 'text/css';
        linkTag.rel = 'stylesheet';
        linkTag.href = cssFiles[k];
        linkTag.id = id;
        head.appendChild(linkTag);
      }
    } 
    for ( var k in scriptFiles) {
      // Парсим название JS-файла
      // Достаем из него ID и если не нашли <script> с таким ID, создаем и присваиваем ID (избегаем повторной загрузки)
      id = Turbo._makeId(scriptFiles[k]);
      scriptTag  = document.getElementById(id);
      if(!scriptTag) {
        scriptTag = document.createElement('script');
        scriptTag.type = 'text/javascript';
        scriptTag.src = scriptFiles[k];
        scriptTag.id = id;
        head.appendChild(scriptTag);
        // Если есть callback, вызываем его при загрузке всех данных
        if (typeof o.callback == "function") {
          if (scriptTag.readyState) { //IE
            scriptTag.onreadystatechange = function() {
              if (scriptTag.readyState == "loaded"
                  || scriptTag.readyState == "complete") {
                count++;
                if (count == scriptFiles.length)
                  o.callback.call();
              }
            };
          } else { // other browsers
            scriptTag.onload = function() {
              count++;
              if (count == scriptFiles.length)
                o.callback.call();
            }
          }
        }
      } else {
        if (typeof o.callback == "function") {
          count++;
          if(count == scriptFiles.length) {
            o.callback.call();
          }
        }
      }
    }
  },
  _makeId : function(url) {
    // Парсим URL:
    // Убираем строку запроса (?) если она состоит из 10 цифр и заменяем все не алфавитно-цифровые символы на дефис.
    var parts = url.split('?');
    if( parts.length == 2 && /^([\d]{10})$/.exec(parts[1]) ) {
      url = parts[0];
    }
    return url.replace(/[^a-z0-9-_]/gi,'-').replace(/([-]{2,})/gi,'-');
  }
}



_makeId - служебная.
Turbo.head({
  css: ["a.css", "b.css"], // массив CSS
  js: ["a.js", "b.js"], // массив JS
  callback: function() { // вызывается после загрузки всех JS или нет, если JS нет.
  }
});

Все аргументы в объекте необязательны, включая css и js
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы