ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

Нужна помощь в редактировании скрипта

 

549
PlumLi @PlumLi
Здравствуйте, нужна помощь в редактировании скрипта редактора Tinymce.
Суть помощи добавить в модальное окошко установки ссылки чекбокс, который будет устанавливать rel="lightbox" в тело ссылки, т.е., галочка не стоит - не ставит, если стоит - то добавляет rel

за помощь обещаю вознаграждение 😀 $5 за 10 минут возни - думаю справедливо

скрипт **********

Отредактировано PlumLi - 21.11.2011
2970
удалён @Foggy
Написал в лс встречные вопросы. Попробуем разобраться.

2970
удалён @Foggy
Попробовал. Не вышло, прошу прощения. Пробовал бы дальше, но почему-то у меня файлы языка не включаются.
Задача реально непростая, ибо там функция в функции и их дофига. Кто будет дальше разбираться, упрощу задачу:

Всё нужное находится в папке jscripts\tiny_mce\plugins\advlink
Там файл link.htm и в подпапке js файл advlink.js
В первый после 62 строки ставится чекбокс
Показать текст

и в js файле прописывается функция, которая добавит rel="lightbox". но из-за сложности фреймворка у меня разобраться не вышло. Хотя сама функция технически не сложная. Главное найти переменные, которыми нужно облачать сей onckick.

PlumLi, ты настолько часто вставляешь картинки? а-то ведь можно во вкладке advanced через селектор выбрать этот параметр.

Отредактировано Foggy - 15.06.2012
549
PlumLi @PlumLi
в том то и дело, что там будут показывать образцы, и картинок на странице будет очень много...

6600
Александр @admiral
********** как вариант не пойдет? Ну по крайней мере в какую сторону смотреть и от чего отталкиваться)

549
PlumLi @PlumLi
сделал все как описано в статье, но проблема вышла на последнем этапе, когда мы через js меняем class="lightbox" на rel="lightbox", скрипт само собой размещен на странице где мы пытаемся кликнуть по картинке

вот его код:

document.observe('dom:loaded', function () {
$$('a[class^=lightbox]').each(function(s) {
s.rel = 'lightbox';
});
});

почему не работает?

Отредактировано PlumLi - 22.11.2011
2970
удалён @Foggy
разве что попробовать разместить его на страничке link.htm, о которой я писал выше. ибо вставляется она фреймом.

549
PlumLi @PlumLi
а не на странице которая выводит эту картинку? не на index.php? по логике должно быть там

2970
удалён @Foggy
когда щёлкаешь на картинку ссылки, появляется блок, в котором загружается фрейм с файлом link.htm.
эта часть скрипта заменяет class галочки на её rel. а где она заменяет? если ты ставишь галочку в файле этого фрейма, то она заменяет в нём, а если в индекс, то до содержимого фрейма оно вряд ли дотянется. я, конечно, могу ошибаться в силу непонимания чего-либо, но мне кажется так.

549
PlumLi @PlumLi
ну может быть и так, только где у нас прописывается что картинка должна открываться в файле example.html, и где в этом файле тогда переменная картинки, в статье всего лишь жестко указан файл и имя ссылки:
<div id="left">
<p>
A link with class starting with lightbox:
<a href="/image.jpg" class="lightbox">Click to see picture</a>
</p>
</div>

Отредактировано PlumLi - 23.11.2011
2970
удалён @Foggy
честно? понятия не имею.

549
PlumLi @PlumLi
Наверно проще тогда будет через пхп заменить все class="lightbox" на rel="lightbox"

6600
Александр @admiral
PlumLi пишет:

Наверно проще тогда будет через пхп заменить все class="lightbox" на rel="lightbox"

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

6703
Андрей @ZloVeЩиЙ
Нужна помощь в доработке скрипта.
Собрал скрипт, который считает сколько: лет, дней, часов, минут, секунд прошло от заданной даты в режиме реального времени \ без перезагрузки страницы + склонение виду: 1 день, 2 дня, 5 дней...



Вопрос: как каждый новый год к-во дней сбрасывать на 0? Тобишь, дней не должно быть более 365 \ 366.
Есть у кого какие соображения?

Отредактировано ZloVeЩиЙ - 02.03.2012
1007
BETEPAH @BETEPAH
ZloVeЩиЙ пишет:

Нужна помощь в доработке скрипта.
Собрал скрипт, который считает сколько: лет, дней, часов, минут, секунд прошло от заданной даты в режиме реального времени \ без перезагрузки страницы + склонение виду: 1 день, 2 дня, 5 дней...

**********

Вопрос: как каждый новый год к-во дней сбрасывать на 0? Тобишь, дней не должно быть более 365 \ 366.
Есть у кого какие соображения?

Если время считаете математикой, то так:
if(days == 366) {days = 0; year++}
А почему бы не вычислять разницу делением?
var milisecs = new Date() - new Date('2011, 8, 1');// отсчет от 1 сентября 2011
и делить затем на 1000, 60, 60, 24, 365/366
Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.

В общем, для полноты ответа хотелось бы увидеть код.

Отредактировано BETEPAH - 02.03.2012
6703
Андрей @ZloVeЩиЙ
BETEPAH, спасибо за информацию и потраченное, на написание поста, время.
Весь скрипт выкладывать не буду, выложу основу может кому пригодиться:

<script type="text/javascript">
<!--Скрываем!

// 1 Января 2012 года - дата создания
// месяцы от 0 до 11
CreateDate = new Date(2012,0,1);

// сегодняшняя дата
NowDate = new Date();

// разница в миллисекундах
ResultDate = NowDate-CreateDate;

// перевод миллисекунд в дни
ResultDate=ResultDate/1000;
ResultDate=ResultDate/3600;
ResultDate=ResultDate/24;

// отбрасывание дробной части
with (Math) { ResultDate=floor(ResultDate);}
// теперь в переменной ResultDate общее количество дней

//считаем кол-во лет
Years=ResultDate/365;
with (Math) { Years=floor(Years);}

//считаем кол-во дней меньшее года
if (Years>0) {ResultDate=ResultDate-(Years*365);}

//считаем кол-во мес.
Months=ResultDate/30;
with (Math) { Months=floor(Months);}

//считаем кол-во дней меньшее мес.
if (Months>0) {ResultDate=ResultDate-(Months*30);}

//выводим сообщение
document.write(Years + " лет " + ResultDate + " дней");
document.write('<br>' + " и " + Months + " мес. ");

// Раскрываем!-->
</script>

Один полный год == 365 дней;
Один полный месяц == 30 дней;

Выведет на странице:

0 лет 1 дней
и 2 мес.


P.S.

Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.

01. Можешь показать на примере?
02. Для полноты ощущений хотелось бы тогда и с месяцами точности. Как видно, я взял в среднем 30 дней == 1 месяцу, как заставить скрипт менять значение в зависимости от месяца (28, 29, 30 и 31 день) ?

Отредактировано ZloVeЩиЙ - 02.03.2012
1007
BETEPAH @BETEPAH
ZloVeЩиЙ пишет:

Можно встроить проверку количества високосных годов между датами, если надо. Алгоритм примерно следующий: берем целое число от деления количества годов текущей даты на 4 и вычитаем целое число от деления количества годов исходной даты на 4. Надо тестировать.

01. Можешь показать на примере?
02. Для полноты ощущений хотелось бы тогда и с месяцами точности. Как видно, я взял в среднем 30 дней == 1 месяцу, как заставить скрипт менять значение в зависимости от месяца (28, 29, 30 и 31 день) ?

В данном случае вычислять количество високосных годов между датами нет необходимости. Високосный год имеет влияние только в одном случае - если месяц конечной даты - март и при этом число начальной даты больше числа конечной даты. В остальных случаях значения не имеет.
Вот такой код у меня получился:
function DateOffset(dd1, dd2) {
var d1, d2, y, m, d, dec_m = 0, dec_y = 0;
if(dd1>=dd2) {d1 = dd2; d2 = dd1} else {d1 = dd1; d2 = dd2}; // если вторая дата старше первой, меняем их местами.
var y_s = d1.getFullYear(),
y_e = d2.getFullYear(),
m_s = d1.getMonth(),
m_e = d2.getMonth(),
d_s = d1.getDate(),
d_e = d2.getDate();
d = d_e - d_s;
if (d_s > d_e) { // если число начальной даты больше числа конечной даты, количество дней между числами вычисляется по формуле: количество дней в предыдущем месяце - число начальной даты + число конечной даты.
d+= new Date(d2.getFullYear(), d2.getMonth(), 0).getDate(); // это количество дней в месяце, который идет перед месяцем конечной даты.
dec_m = 1 // месяц был не полный, так как d_s > d_e, поэтому нужно будет при вычислении количества месяцев отнять 1
}
m = m_e - m_s - dec_m;
if (m < 0) {
m += 12;
dec_y = 1 // год был не полный, поэтому при вычислении количества лет нужно будет отнять 1
}
y = y_e - y_s - dec_y;
return {'year':y, 'months':m, 'days':d}
}

Функция DateOffset принимает параметрами две даты и возвращает количество лет, месяцев и дней между этими датами. Я постарался по-максимому закомментировать, вроде должно быть понятно всё.
Посмотреть скрипт в действии можно **********.

3173
1007
BETEPAH @BETEPAH
grom пишет:

**********

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