Для получения полного доступа
зарегистрируйтесь.
RSS

Все сниппеты с тэгом «JavaScript»

JavaScript / JS
JavaScript — прототипно-ориентированный сценарный язык программирования. Является реализацией языка ECMAScript (стандарт ECMA-262). JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений.


OKyJIucT
  • Репутация: 15
  • Сниппеты: 8
  • Ревизии: 0
function removeURLParameter(url, parameter) {
    //prefer to use l.search if you have a location/link object
    var urlparts= url.split('?');   
    if (urlparts.length>=2) {

        var prefix= encodeURIComponent(parameter)+'=';
        var pars= urlparts[1].split(/[&;]/g);

        //reverse iteration as may be destructive
        for (var i= pars.length; i-- > 0;) {    
            //idiom for string.startsWith
            if (pars[i].lastIndexOf(prefix, 0) !== -1) {  
                pars.splice(i, 1);
            }
        }
        
        if(pars.length > 0) {
            url= urlparts[0]+'?'+pars.join('&');
        } else {
            url= urlparts[0];
        }

        return url;
    } else {
        return url;
    }
}


var url = 'https://jsfiddle.net/?test=123123&qwe=er24';

alert(removeURLParameter(url, 'qwe')); // https://jsfiddle.net/?test=123123

Gravatar image
zular
  • Репутация: 36
  • Сниппеты: 7
  • Ревизии: 0

В некоторых случаях требуется выдеруть из URL параметры или текущюю локализацию и еще что-нибудь, для этого и существует данный скрипт. Применяем очень просто

parseUrl('https://gostash.it/ru/stashes/create?type=snippet')

В ответ получаем следующее:

{
    "protocol":"https:",
    "host":"gostash.it",
    "hostname":"gostash.it",
    "pathname":"/ru/stashes/create",
    "search":"?type=snippet",
    "hash":""
}

Сам скрипт:

  function parseUrl(href) {
    const match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);

    return {
      protocol: match[1],
      host: match[2],
      hostname: match[3],
      port: match[4],
      pathname: match[5],
      search: match[6],
      hash: match[7],
    };
  }
Gravatar image
Nepster
  • Репутация: 151
  • Сниппеты: 19
  • Ревизии: 0

GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор.

function guid() {
  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1);
  }
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  	s4() + '-' + s4() + s4() + s4();
}

Результат: 9e24e277-8524-812a-9c3f-4930444d74de

Gravatar image
zoxon
  • Репутация: 5
  • Сниппеты: 3
  • Ревизии: 1

Функция на javascript для генерации масива БЭМ модификаторов. Использую такую в jade.

На вход тербует json обьект вида

{
 	'base': 'block',
 	'mods': [
 		'key': 'value',
 		'key2': 'value2'
 	]
}

Возвращяет масив вида ['block', 'block_key_value', 'block_key2_value2']

-
	var _mods = function (data) {
		var mods = [data.base];
		if (data.mods) {
			data.mods.forEach(function(mod, index) {
				if (typeof mod === "string") {
					mods.push(mods[0] + '_' + mod);
				}
				else {
					for (var key in mod) {
						var val = mod[key];
						if (key === "mod") {
							mods.push(mods[0] + '_' + val);
						}
						else {
							mods.push(mods[0] + '_' + key + '_' + val);
						}
					}
				}
			});
		}
		return mods;
	};

Примеры использования

//- Test 1 key/value
- var myMods = _mods({'base': 'module-name', 'mods': [{'key': 'value'}, {'key2': 'value2'}]});
div(class=myMods)= myMods

//- Test 2 value
- var myMods = _mods({'base': 'module-name', 'mods': ['mod1', 'mod2']});
div(class=myMods)= myMods

//- Test 3 mixed
- var myMods = _mods({'base': 'module-name', 'mods': [{'key': 'value'}, {'key2': 'value2'}, {'mod': 'mod1'}, {'mod': 'mod2'}]});
div(class=myMods)= myMods
Gravatar image
jumper423
  • Репутация: 58
  • Сниппеты: 9
  • Ревизии: 2

Smoothsort.gifGitHub / Демо

Плавная сортировка вертикальных элементов.

Главной задачей было добиться максимальной быстрой скорости сортировки и отрисовки, без лишних действий. Данный плагин предназначен для узкого списка задач, по этому на супер функциональность в нём можете не рассчитывать.

Так же есть AssetBundle для Yii2 SmoothSortAsset

Продолжение »

Gravatar image
zular
  • Репутация: 36
  • Сниппеты: 7
  • Ревизии: 0

В своей работе мне понадобилось создать REST интерфейс, и обращаться на бек через GET параметры. Привожу сниппет в нескольких примерах на JS и JQ.

//JS версия

var obj = {
    param1: 'something',
    param2: 'somethingelse',
    param3: 'another',
    bla: {
        param5: 'i\'m nested!',
        ja: {
            param6: 'i am really nested'
        }
    }
};

var serialiseObject = function(obj) {
    var pairs = [];
    for (var prop in obj) {
        if (!obj.hasOwnProperty(prop)) {
            continue;
        }

        if (Object.prototype.toString.call(obj[prop]) == '[object Object]') {
            pairs.push(serialiseObject(obj[prop]));
            continue;
        }

        pairs.push(prop + '=' + obj[prop]);
    }
    return pairs.join('&');
}

console.log(serialiseObject(obj));

// param1=something&param2=somethingelse&param3=another&param5=i'm nested!&param6=i am really nested

// jQuery версия
var params = { width:1680, height:1050 };
var str = jQuery.param( params );

console.log(str)
// width=1680&height=1050
Маклай
  • Репутация: 8
  • Сниппеты: 1
  • Ревизии: 2

Эту функцию удобно использовать для вывода чисел пользователю.

var roundCount = function (number) {
    if (number > 999 && number <= 999999){
       return number / 1000 + 'k';
    } else if (number > 999999){
        return '>1M';
    } 
    return number;
};
Gravatar image
zular
  • Репутация: 36
  • Сниппеты: 7
  • Ревизии: 0

Эту функцию удобно использовать для вывода чисел пользователю.

var roundCount = function (number) {
    var result;

    if (number > 999 && number <= 999999){
        result = number / 1000 + 'k';
    } else if (number > 999999){
        result = '>1M';
    } else {
        result = number;
    }
    
    return result;
};

console.log(roundCount(234234234)) // ">1M"
console.log(roundCount(434))       // 434
console.log(roundCount(54345))     // "54.345k"
console.log(roundCount(34567))     // "34.567k"
console.log(roundCount(234234))    // "234.234k"
console.log(roundCount(43423))     // "43.423k"
console.log(roundCount(2344234))   // ">1M"
Stephen Berezuev
  • Репутация: 5
  • Сниппеты: 3
  • Ревизии: 1

В MongoDB отвратительный полнотекстовый поиск. Для индексации и поиска можно использовать Sphinxsearch. В интернете есть несколько вариантов, как это сделать (при помощи PHP, mongoexport --type=csv, etc).

Но, как показала практика, когда колличество документов в коллекции измеряется миллионами и они собираются из разных источников, перечисленные методы либо вообще не работают (сфинкс ломается о различные спец.символы), либо просто виснут. Самым быстрым и надежным способом в итоге оказалось генерировать индекс силами самого сфинкса.

Ниже пример. Сразу предупрежу, что я специально отказался от использования XML DOM в пользу скорости.

//echo header
print("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
    + "<sphinx:docset>\n"
    + "    <sphinx:schema>\n"
    + "      <sphinx:field name=\"content\"/>\n"
    + "    </sphinx:schema>\n");
    
//echo posts
db.posts.find().forEach( function(post) {
	print('<sphinx:document id="' + post._id.valueOf() + "\">\n"
    + '    <content>' + doc.content.toString().replace(/[><]/g,'') + "</first_name>\n" //обязательно убирайте символы < и >
    + "</sphinx:document>\n");
}

print("</sphinx:docset>");

Если в _id у вас не только цифры (а по умолчанию, если вы ничего не присваиваете в _id, это так и будет), то стоит добавить счетчик i++ вместо post._id.valueOf()

Ну и, исходник в сфинксе:

source sourcename
{
    type = xmlpipe2
    xmlpipe_command = mongo databasename --quiet /path/to/jsfile.js
    xmlpipe_field_string = content
}
Gravatar image
avkvak
  • Репутация: 1
  • Сниппеты: 0
  • Ревизии: 1

Благодарю автора zular за данный скрипт. Хотел написать коммент, но нажал чтото не то :) В общем, чтобы класс таки удалялся, на 6 строке лучше сравнивать в виде ">" а не ">=" ибо в нашем случае $(window).scrollTop() всегда >= 0

Здравствуйте, столкнулся с задачей фиксации меню при скролле страницы, был найден скрипт на просторах интернета, который решил мою задачу. Я его немного изменил под свои нужды.

Зависимости:

  • Jquery

Классы:

  • .nav-afix - само меню
  • .affix - класс который добавляется в после скролла

Преимущества скрипта:

  • не надо высчитывать отступ сверху (скрипт сам его отсчитывает)
// --- affix top menu script ---
$(() => {
    let target = $('.nav-afix');
    let startPosition = target.offset().top;

    $(window).scroll(() => {
        if ($(window).scrollTop() > startPosition) {
            if (!target.hasClass()) {
                target.addClass('affix')
            };
        } else {
            target.removeClass('affix')
        };
    });
});