Вопрос к понимающим в js, jquery
3978
7
Всем доброго времени суток!
Признаться вобще мало разбираю сей язык, а вот сталкиваться с ним так или иначе приходится.
Пытаюсь адаптировать CKeditor под возможность загрузки лайтбоксовых картинок. Если с пхп частью всё более-менее понятно, то добавить мельчайшую функцию в жс код беда неимоверная.

Есть пара файликов:
Здесь описываесь окошко загрузки файла на сервер, к нему требовалось добавить параметры ширина и высота, обозвал их imgwidth и imgheight;
...
{
id : 'Upload',
hidden : true,
filebrowser : 'uploadButton',
label : editor.lang.image.upload,
elements :
[
{
type : 'file',
id : 'upload',
label : editor.lang.image.btnUpload,
style: 'height:40px',
size : 38
},
{
id : 'imgwidth',
type : 'text',
label : 'Ширина',
style : 'width: 30%',
'default' : '200',
onChange : function()
{

alert(this.getValue());
}
},
{
id : 'imgheight',
type : 'text',
label : 'Высота',
style : 'width: 30%',
'default' : '100',
onChange : function()
{
alert(this.getValue());
}
},
{
type : 'fileButton',
id : 'uploadButton',
filebrowser : 'info:txtUrl',
label : editor.lang.image.btnUpload,
'for' : [ 'Upload', 'upload']
}
]
},
...

и второй, сжатый жс, что собирает параметры для отправки пхпешке:
...
function q(v,w,x){var y=x.params||{};
y.CKEditor=v.name;y.CKEditorFuncNum=v._.filebrowserFn;if(!y.langCode)y.langCode=v.langCode;
y.img_width=?????;y.img_height=?????;
w.action=m(x.url,y);w.filebrowser=x;};
...

Нужно передать this.getValue() из первого файла во второй. Дабы не разбираться во всех остальных нутрях, думал это сделать через чего-нить подобное глобальным переменным, но так и не нашёл рабочего варианта.
Вопрос - куда нужно записать this.getValue(), чтоб добраться до него из второго жс-ника ?
Koda5
Дабы не разбираться во всех остальных нутрях, думал это сделать через чего-нить подобное глобальным переменным, но так и не нашёл рабочего варианта.
Вопрос - куда нужно записать this.getValue(), чтоб добраться до него из второго жс-ника ?
В лоб - http://api.jquery.com/data/

По правильному, наверное передать функции q соответсвующие параметры, она же откуда-то вызывается.

Ну и нужно помнить, что глобальные переменные это всегда зло.
Koda5
Спасибо, возможноб это и сработало еслиб я нашёл правильное место во втором файле...

Беда оказалось в том что ГЕТ запрос собирается в момент открытия окна, а не при клике на кнопку "Загрузить изображение".

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

Прилагаю оба файла:
image.js
со строчки 1176 начинается опись окошка где происходит загрузка файла, сам добавил туда следущие поля:
use_lightbox, imgwidth, imgheight

plugin.js
функция setupFileElement - собирает гет строку, вызывается при открытии окошка добавления каринки в текст
функция uploadFile - срабатывает при клике на кнопку отправки, проверяет заполненость полей

требуется в функции uploadFile добавить в ГЕТ запрос переменные use_lightbox, imgwidth, imgheight

Если кто готов взяться, напишите в личку почём обойдётся.
Koda5
Не знаю, поможет это Вам или нет, но в в plugins.js написан следующий текст:

* The filebrowser plugin also supports more advanced configuration performed through
* a JavaScript object.
*
* The following settings are supported:
*
* <ul>
* <li><code>action</code> – <code>Browse</code> or <code>QuickUpload</code>.</li>
* <li><code>target</code> – the field to update in the <code><em>tabId:elementId</em></code> format.</li>
* <li><code>params</code> – additional arguments to be passed to the server connector (optional).</li>
* <li><code>onSelect</code> – a function to execute when the file is selected/uploaded (optional).</li>
* <li><code>url</code> – the URL to be called (optional).</li>
* </ul>

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

"ОнСелект" признаться не заметил - сейчас попробовал - он выполняется уже после аплода файла.

функция uploadFile для этой цели вродь само-то подходит, но я не не могу сообразить как из неё поменять этот action, что задаётся в setupFileElement, и как добраться до переменных use_lightbox, imgwidth, imgheight. Хотя для последнего можноб было поиспользовать злые глобальные переменные)))
Koda5
Решение найдено) помог метод тыка и немного логики. и почти без глобальных переменных:улыб:
Koda5
Покажите решение, может кому-нибудь понадобиться.
IEEE
До экшена , где хранится гет строка, добраться можно следущим образом:


var y=this;var w=y.getDialog();
w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action


До значений полей, также при наличии "диалога" ( w=y.getDialog(); ):

w.getContentElement('Upload', 'imgwidth').getInputElement().$.value
//где Upload - ид вкладки, imgwidth - ид конкретного элемента.


В итоге получилось:


function strpos( haystack, needle, offset){
var i = haystack.indexOf( needle, offset );
return i >= 0 ? i : false;
}

if (w.getContentElement('Upload', 'imgwidth') !== undefined) {
//проверка существует ли поле imgwidth. Без проверки будут вылетать ошибки в js т.к. функция используется не только для загрузки картинок

if (strpos(w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action, 'imgwidth' ,0)==false)
{window.action_orig = w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action; }
//window.action_orig - переменная в которой храню изначальное значение экшена, без добавления моих элементов. в if заходит только если в экшене нет 'imgwidth'

var action_add = '';
action_add = action_add+'&imgwidth='+w.getContentElement('Upload', 'imgwidth').getInputElement().$.value;
action_add = action_add+'&imgheight='+w.getContentElement('Upload', 'imgheight').getInputElement().$.value;
action_add = action_add+'&use_lightbox='+w.getContentElement('Upload', 'use_lightbox').getInputElement().$.checked;

w.getContentElement(y['for'][0],y['for'][1]).getInputElement().getParent().$.action = window.action_orig + action_add;

}


Все это положил в функцию fileUpload.

Переделаю ещё немного, чтоб только для лайтбоксовых рисунков были все эти параметры + уходить будет на другую пхпшку.