Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Библиотечка . (https://javascript.ru/forum/project/6025-bibliotechka.html)

Kolyaj 06.11.2009 16:59

Библиотечка .
 
Задумал тут как-то прошерстить свои скрипты, задокументировать все и протестировать. Половина того, что щас получилось, а получилось 100 кБ хорошо задокументированного кода, заменяет 80% jQuery при правильном подходе. Затык разве что с анимацией, не могу придумать лаконичный интерфейс.

Сорцы на гитхабе http://github.com/Kolyaj/CrossJS

Если кто-то хочет что-то обсудить/осудить/насрать в каменты -- милости прошу :) Если кто-то баги найдет -- вообще отлично будет.

B~Vladi 06.11.2009 18:17

Что-то Event маловат... add||remove будут?

Kolyaj 06.11.2009 18:18

Там нет Event, там EventObject. on/un в Element.js

Octane 06.11.2009 19:10

Вот и я тоже с интерфейсом анимации застрял)

typeof.js
Сейчас вот такой typeOf использую в проекте:
/**
	 * Определяет тип аргумента
	 * @argument {Mixin} enything Аргумент
	 * @type String
	 * @returns Тип аргумента
	 */
	typeOf: function (enything) {
		if (!arguments.length) {
			throw "MObj.typeOf: no argument";
		}
		if (enything === null) {
			return "null";
		}
		if (enything === undefined) {
			return "undefined";
		}
		return Object.prototype.toString.call(enything).slice(8, -1).toLowerCase();
	},


Element.js
removeClass: нужно изменять className, если класс был удален.

Не заметил ничего наподобие ElementTraversal.

Kolyaj 06.11.2009 20:01

Цитата:

Сообщение от Octane
Сейчас вот такой typeOf использую в проекте:

Я собирался такой сделать, но потом таки пришел к варианту с несколькими функциями на некоторые объекты. Я еще как-то не решил для себя, стоит различать string от String и т.п. или не стоит.

Цитата:

Сообщение от Octane
removeClass: нужно изменять className, если класс был удален.

Меняется же.

Цитата:

Сообщение от Octane
Не заметил ничего наподобие ElementTraversal.

А мне, честно говоря, никогда не нужен был.

Octane 06.11.2009 20:15

Цитата:

Сообщение от Kolyaj
Меняется же.

В смысле, если только был удален, чтобы не вызывать лишний раз reflow. Тем более это не сильно усложняет реализацию:
M.removeClass = function(el, cl) {
        el = $(el);
        var className = el.className, modified = false;
        className = className.replace(new RegExp('(^|\\s)' + cl + '(\\s|$)', 'g'), function () {
                modified = true;
                return ' ';
        });
        if (modified) {
                el.className = className;
        }
    };


Цитата:

Сообщение от Kolyaj
А мне, честно говоря, никогда не нужен был.

Как же без nextElementSibling и previousElementSibling, каждый раз циклы писать?

Kolyaj 06.11.2009 20:19

Octane,
понятно, спасибо.

micscr 29.11.2009 16:22

Скачал. Буду смотреть и анализировать.

Спасибо за комменты на русском, а то сейчас у многих наших
мода - на инглише все (проблема не глобальная, но время ест).

Kolyaj 29.11.2009 16:38

Цитата:

Сообщение от Octane
Как же без nextElementSibling и previousElementSibling, каждый раз циклы писать?

Что-то не видел вопроса. Мне как-то всегда хватало getElementsByTagName, вспоминается единственный случай, когда было недостаточно, но и там был букмарклет для яндекса.

Tim 29.11.2009 19:25

В закладки!

tenshi 01.12.2009 11:15

чем этот велосипед лучше?

Kolyaj 01.12.2009 11:36

tenshi,
лучше чем что? И лучше для кого?

Для меня, очевидно, лучше тем, что я каждую строчку там знаю, и с каждой строчкой согласен. Для тебя, очевидно, ничем.

Написан он с расчетом, чтобы писать сложные вещи малым количеством кода. Причем при сборке нужного скрипта можно не просто подключать только нужные файлы, но и только нужные части файлов.

Он (велосипед этот) не лучше и не хуже jQuery, он другой. Он предназначен для тех, кто хорошо знает JS, в отличие от jQuery. Но у тех, кто хорошо знает JS, как правило, и так свои наработки есть. Так что эта наработка для ознакомления. Тебе интересно, почему я что-то делаю так, а не иначе? Спрашивай, обсудим. А доказывать что-то кому-то мне не надо, мне абсолютно все равно, будет ли им кто-то пользоваться.

tenshi 02.12.2009 03:26

ты обязуешься поддерживать текущие проекты единолично до конца их дней?

Kolyaj 02.12.2009 08:59

tenshi,
тебя это так волнует? Ты собираешься взять на поддержку мои проекты?

tenshi 02.12.2009 09:16

нет, мне хватает своих проектов, оставленных в наследство такими вот недальновидными товарищами =_="

Kolyaj 02.12.2009 09:28

Я не делаю сайты на заказ, не волнуйся.

tenshi 03.12.2009 02:08

а что ты делаешь?

Kolyaj 03.12.2009 11:52

http://kolyaj.moikrug.ru/

micscr 04.12.2009 16:54

Цитата:

Пишу на JavaScript такое, что вы и представить себе не могли :)
Сайт фирмы(http://webprofy.ru) солидный конечно, но представить все таки могу.:)
Показывайте что обещали - неимоверное. :)

Насчет библиотеки. Может там быть полезной также функция возвращающая случайное целое число из диапазона включительно ... [start, end].

B~Vladi 04.12.2009 17:05

Цитата:

Сообщение от micscr
Сайт фирмы(http://webprofy.ru) солидный

Чё там такого необычного?!

Я как-то постил такое, но сдалаю ещё раз:
http://www.kriesi.at/archives/50-web...-of-javascript
Посмотри.

Kolyaj 04.12.2009 17:11

Цитата:

Сообщение от micscr
Может там быть полезной также функция возвращающая случайное целое число из диапазона включительно

Там есть. Напротив core.js даже написано "Добавлена функция random." :)

Цитата:

Сообщение от micscr
Сайт фирмы(http://webprofy.ru) солидный конечно, но представить все таки могу.

Сайт фирмы подставляет МойКруг, я другой указывал. К этому я не имею отношения (у РБС много чего есть). К чему я имею отношение там написано: разработка всей клиентской части сервиса веб-визор (запись и воспроизведение посещений, клиентский интерфейс, немножко сам сайт).

micscr 04.12.2009 17:26

Цитата:

Сообщение от B~Vladi (Сообщение 37172)
Чё там такого необычного?!

мне просто приглянулся, что он необычный не писал. Необычное жду.:)
Цитата:

Сообщение от B~Vladi (Сообщение 37172)
Я как-то постил такое, но сдалаю ещё раз:Посмотри.

Да там есть на что посмотреть, ссылку кинул себе буду поглядывать. Завидовать молча.

micscr 04.12.2009 17:32

Цитата:

Сообщение от Kolyaj (Сообщение 37173)
Там есть. Напротив core.js даже написано "Добавлена функция random." :)

Эту видел. Она возвращает случайные вещественные числа x:
start =< x < end.
А может полезней будет такая, что возвращает целые x
start =< x <= end.
Для работы с массивами, коллекциями, ...

Kolyaj 04.12.2009 17:35

micscr,
ну да, надо в эту функцию Math.round добавить.

tenshi 05.12.2009 12:18

ой как у вас там в рбс видимо гнило %-) каждый фигачит во что горазд..

Kolyaj 05.12.2009 13:17

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

Ты какую мысль-то хочешь донести?

x-yuri 12.12.2009 07:20

Цитата:

Сообщение от Kolyaj
Я еще как-то не решил для себя, стоит различать string от String и т.п. или не стоит

а ты знаешь, в каких случаях это может пригодиться?

пока небольшие замечания
core.js
· вроде extend более распространенное название для функции apply, тем более что так же названа Function.prototype.apply
·
$$: var elements = $(options.parent || document).getElementsByTagName(selector.split('.')[0] || '*');
createSelectorFilter: tagName = selectorParts[0].toUpperCase() || '*'

дублирование кода
·
getDocumentScroll:     return [
        win.pageXOffset || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,
        win.pageYOffset || doc.documentElement.scrollTop  || doc.body.scrollTop  || 0
    ];

я бы возвращал объект с полями x, y, и в других функциях тоже

Kolyaj 12.12.2009 09:04

Цитата:

Сообщение от x-yuri
а ты знаешь, в каких случаях это может пригодиться?

Нет, поэтому и не уделяю этому внимания.

Цитата:

Сообщение от x-yuri
· вроде extend более распространенное название для функции apply, тем более что так же названа Function.prototype.apply

Я из Ext'а название взял просто.

Цитата:

Сообщение от x-yuri
дублирование кода

Оно там вынужденное. Если передавать в createSelectorFilter tagName, тогда в других местах будет дублироваться и интерфейс у createSelectorFilter станет хреновый.

Цитата:

Сообщение от x-yuri
я бы возвращал объект с полями x, y, и в других функциях тоже

Это уже на любителя :) Тогда почему не left, top?

x-yuri 12.12.2009 09:11

Цитата:

Сообщение от Kolyaj
Это уже на любителя Тогда почему не left, top?

можно и left, top, хотя я бы выбрал x, y потому что лаконичнее. В любом случае это описательнее, чем 0, 1
UPD: кстати, createSelectorFilter где-то еще используется?

tenshi 13.12.2009 20:15

Цитата:

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

Kolyaj 13.12.2009 20:50

tenshi,
давай представим (точнее ты представишь, а я вспомню).
Есть чужой сайт, на котором должен работать твой скрипт. Разработчик сайта определил глобальную функцию addEventListener, которая не добавляет обработчики событий к объекту window по той простой причине, что она сама перекрыла оригинальный метод. Ты работаешь с jQuery. Твоя задача повесить набор обработчиков событий на window.

Riim 29.01.2010 15:51

M.removeClass = function(el, cl) {
        el = $(el);
        var className = el.className.replace(new RegExp('\\b' + cl + '\\b', 'g'), ' ');
        if (className != el.className) {
            el.className = className;
        }
};


alert('prefix-name other'.replace(/\bname\b/g, ' '));





function random(start, end) {
    if (arguments.length == 1) {
        end = start;
        start = 0;
    }
    return Math.random() * (end - start) + start;
}


Шанс start стремится к нулю, но не равен ему, шанс end == 0. Несимметрично.

Kolyaj 29.01.2010 15:56

Цитата:

Сообщение от Riim
M.removeClass

Да, я знаю, в todo висит ))

Цитата:

Сообщение от Riim
random

Тут я Math.round забыл, недавно исправил, не push'ил ещё.

Спасибо за репорт ))

tenshi 29.01.2010 16:04

вот только не надо выдумывать себе проблем ;-) а коли уж замучала параноя, то исполняй свои скрипты в отдельной песочнице

Kolyaj 29.01.2010 16:07

tenshi,
это о чём? И что за паранойя?

PeaceCoder 29.01.2010 18:45

Цитата:

Сообщение от Kolyaj
Разработчик сайта определил глобальную функцию addEventListener, которая не добавляет обработчики событий к объекту window по той простой причине, что она сама перекрыла оригинальный метод.

Тут разработчик, как бы это сказать по мягче, и как выражаются, быдлокодер, сам и виноват, а не библиотека.

Kolyaj 29.01.2010 20:42

PeaceCoder,
ты вырвал фразу из контекста.
Цитата:

Сообщение от Kolyaj
Есть чужой сайт, на котором должен работать твой скрипт.

Тот пост относился не к данной библиотечке, а к вопросу, всегда ли уместно использовать сторонние фреймворки.

Kolyaj 29.01.2010 20:48

Если сильно интересно, то вот тот сайт _http://www.kingsland.ru/

/**
 * Объявляем и сразу вызываем функции,
 * чтоб не проверять поддержку методов
 * каждый раз:
 */
var addEventListener = function() {
    // Если браузер IE:
    if (window.attachEvent)
        // Возвращаем функцию для IE:
        return function(element, event, callback) {
            // Фиксуем callback, чтоб установить правильный
            // this, и передавать объект события первым параметром:
            callback.__callbackfix = function() {
                callback.call(element, window.event);
            };
            // Устанавливаем обработчик (не забываем про "on")
            return element.attachEvent("on" + event, callback.__callbackfix);
        }
    // Если браузер W3C-совместим:
    if (window.addEventListener)
        // Возвращаем функцию без фиксов:
        return function(element, event, callback) {
            // Последний параметр всегда false, для совместимости с IE:
            return element.addEventListener(event, callback, false);
        }
}();

PeaceCoder 30.01.2010 01:34

ну и ? то что ты привел это неграмотная библитека сделанная как раз тем кем я назвал.
фреймворк НЕ должен влиять на параметры тех или инных стандартных методов и/или элементов. Если это происходит - такой ФВ может быть не совместим с другими. На этом основывается мой ФВ.

e1f 30.01.2010 09:25

Пффф. PeaceCoder, причем тут должен, не должен, Вы еще маме того стороннего разработчика пойдите нажалуйтесь. Ну как ребенок, честно. Вопрос стоит так -- как на уже готовый сайт добавить новый функционал, не переделывая старый под угрозой получения в глаз. И вот тут мы можем ВНЕЗАПНО увидеть подобное тому, что написал Kolyaj.


Часовой пояс GMT +3, время: 06:40.