Другие технические решения: различия между версиями
Juliet (обсуждение | вклад) |
Juliet (обсуждение | вклад) |
||
Строка 98: | Строка 98: | ||
this.execCommand(id, 'switch_to_file', tabID); | this.execCommand(id, 'switch_to_file', tabID); | ||
}, | }, | ||
</source> | |||
== Работа с единичными файлами == | |||
Для работы с файлами (сохранение, переименование, удаление) удобно создать специальный объект, моделирующий файл. Нужно хранить: | |||
* полное имя файла | |||
* каталог (он же имя пользователя или id сессии) | |||
* отображаемое имя (оно может быть слишком длинным для полного отображения) | |||
* тип (сохраненный файл пользователя, или «висячий» («фантомный») файл примера) | |||
* некоторые параметры редактора кода | |||
<source lang="JavaScript"> | |||
// Файл | |||
function File( | |||
pName, // имя файла | |||
pPath, // путь к файлу (пустая строка в случае основного каталога) | |||
pOwnerName, // владелец (имя пользователя или гость) | |||
pIsPhantom, // фантомный ли файл (фантомный - т.е. не сохраненный на сервере) | |||
pPhantomType // тип фантомного файла (новый[new], пример[sample], опубликованный файл[public]) | |||
){ | |||
// ----------------------------------------- Поля | |||
name; // имя файла | |||
viewName; // отображаемое имя файла (если не слишком длинное, то само pName) | |||
path; // путь к файлу | |||
fullName; // полное имя файла | |||
isByUser; // пользовательский ли это файл | |||
ownerName; // владелец (имя пользователя или ID сессии) | |||
isPhantom; // фантомный ли файл (фантомный - т.е. не сохраненный на сервере) | |||
phantomType; // тип фантомного файла (новый[new], пример[sample], опубликованный файл[public]) | |||
isOpened; // открыт ли файл в редакторе | |||
tabID; // ID вкладки в редакторе | |||
sourceCode; // по необходимости можно использовать для хранения содержимого | |||
// ----------------------------------------- Методы | |||
open; // открывает файл (в редакторе тоже) | |||
close; // закрывает файл (в редакторе тоже) | |||
active; // активирует файл в редакторе | |||
save; // устанавливает статус измененности в редакторе в ложь | |||
setFullName; // изменяет имя файла по полному имени | |||
setName; // изменяет имя файла | |||
updateTabTitle; // обновляет заголовок вкладки в соответствии с именем файла | |||
setSourceCode; // изменяет содержимое файла | |||
setNotPhantom; // изменяет статус файла на нефантомный | |||
setStatusClosed; // изменяет статус файла на закрытый | |||
setStatusOpened; // изменяет статус файла на открытый | |||
} | |||
</source> | </source> |
Версия от 22:52, 27 декабря 2009
Мультифайловость в редакторе
Описание
Работа с несколькими файлами одновременно вещь весьма полезная. Выбранный редактор с подсветкой синтаксиса EditArea эту возможность предоставляет. Однако, задать заголовок вкладки в нем можно только при её первом открытии, что, конечно, неудобно. В связи с этим в файл edit_area_full.js были внесены поправки и добавлен метод для изменения не только содержимого вкладки, но и её заголовка.
changeFile
В EAL.prototype добавлен метод changeFile.
changeFile : function(id, newFile) {
var curID = this.execCommand(id, 'curr_file')
this.execCommand(id, 'change_curFileTabParams', newFile);
this.setValue(id, newFile['text']);
},
change_curFileTabParams
В содержимое editAreaLoader.iframe_script, например, перед update_file:
"EA.Ä.change_curFileTabParams=Ã(new_Ês){var curID = this.curr_file; this.update_file(curID, new_Ês); var elem=document.getElementById(this.files[curID]['html_id']); var html_curID='tab_file_'+encodeURIComponent(curID); this.filesIdAssoc[html_curID]=curID; this.files[curID]['html_id']= html_curID; var close=\"<img src=\\\"\"+È.eAL.baseURL+\"images/close.gif\\\" title=\\\"\"+Á.get_translation('close_tab','word')+\"\\\" onclick=\\\"eA.execCommand('close_file',eA.filesIdAssoc['\"+html_curID+\"']);return Ì;\\\" class=\\\"hidden\\\" onmouseover=\\\"Á.className=''\\\" onmouseout=\\\"Á.className='hidden'\\\" />\";elem.innerHTML=\"<a onclick=\\\"javascript:eA.execCommand('switch_to_file',eA.filesIdAssoc['\"+html_curID+\"']);\\\" selec=\\\"none\\\"><b><span><strong class=\\\"edited\\\">*</strong>\"+Á.files[curID]['title']+close+\"</span></b></a>\";};"
Или, если работаете не с edit_area_full.js, в edit_area_functions.js:
EditArea.prototype.change_curFileTabParams = function(new_Ês){
var curID = this.curr_file;
this.update_file(curID, new_Ês);
var elem = document.getElementById(this.files[curID]['html_id']);
var html_curID = 'tab_file_' + encodeURIComponent(curID);
this.filesIdAssoc[html_curID] = curID;
this.files[curID]['html_id'] = html_curID;
var close = "<img src=\""+ parent.editAreaLoader.baseURL +"images/close.gif\" title=\""+ this.get_translation('close_tab', 'word') +"\" onclick=\"editArea.execCommand('close_file', editArea.filesIdAssoc['"+ html_id +"']);return false;\" class=\"hidden\" onmouseover=\"this.className=''\" onmouseout=\"this.className='hidden'\" />";
elem.innerHTML = "<a onclick=\"javascript:editArea.execCommand('switch_to_file', editArea.filesIdAssoc['"+ html_id +"']);\" selec=\"none\"><b><span><strong class=\"edited\">*</strong>"+ this.files[id]['title'] + close +"</span></b></a>";
}
Регулировка высоты редактора
Изначально в редакторе отсутствует возможность менять размер после загрузки страницы (кроме как воспользоваться кнопкой полного экрана).
changeHeight
В EAL.prototype добавлен метод changeHeight .
changeHeight : function(id, newHeight) {
this.execCommand(id, 'change_Height', newHeight);
},
change_curFileTabParams
В содержимое editAreaLoader.iframe_script, например, после update_size:
"EA.Ä.change_Height=Ã(newHeight){var d=document,pd=È.document; if(typeof eAs !='undefined'&&eAs[eA.id]&&eAs[eA.id][\"displayed\"]==Ë){pd.getElementById(\"frame_\"+eA.id).Ç.height=newHeight;};};"
Заголовок текущей вкладки
Описание
Отсутствует возможность узнать заголовок вкладки. Метод getCurrFileTitle и возвращает его.
getCurrFileTitle
В EAL.prototype добавлен метод getCurrFileTitle.
getCurrFileTitle : function (id) {
var curID = this.execCommand(id, 'curr_file')
return this.execCommand(id, 'get_currFileTitle', curID);
},
get_currFileTitle
В содержимое editAreaLoader.iframe_script:
"EA.Ä.get_currFileTitle=Ã(id){return Á.files[id]['title']};"
Состояние вкладки — изменено ли содержимое
Описание
Позволяет узнать, изменено ли содержимое вкладки по сравнению с сохраненной версией.
currentFileIsEdited
В edit_area_full.js добавлен метод currentFileIsEdited, например, после стандартного метода setFileEditedMode.
currentFileIsEdited : function (id) {
var curID = this.execCommand(id, 'curr_file');
var isEdited = this.execCommand(id, 'current_file_is_edited', curID);
return isEdited;
},
current_file_is_edited
В edit_area_full.js добавлен метод current_file_is_edited, например, перед стандартным методом set_file_edited_mode.
"EA.Ä.current_file_is_edited=Ã(id){return Á.files[id]['edited'];};"
Переход на вкладку
В EAL.prototype добавлен метод switchToFile.
switchToFile : function(id, tabID) {
this.execCommand(id, 'switch_to_file', tabID);
},
Работа с единичными файлами
Для работы с файлами (сохранение, переименование, удаление) удобно создать специальный объект, моделирующий файл. Нужно хранить:
- полное имя файла
- каталог (он же имя пользователя или id сессии)
- отображаемое имя (оно может быть слишком длинным для полного отображения)
- тип (сохраненный файл пользователя, или «висячий» («фантомный») файл примера)
- некоторые параметры редактора кода
// Файл
function File(
pName, // имя файла
pPath, // путь к файлу (пустая строка в случае основного каталога)
pOwnerName, // владелец (имя пользователя или гость)
pIsPhantom, // фантомный ли файл (фантомный - т.е. не сохраненный на сервере)
pPhantomType // тип фантомного файла (новый[new], пример[sample], опубликованный файл[public])
){
// ----------------------------------------- Поля
name; // имя файла
viewName; // отображаемое имя файла (если не слишком длинное, то само pName)
path; // путь к файлу
fullName; // полное имя файла
isByUser; // пользовательский ли это файл
ownerName; // владелец (имя пользователя или ID сессии)
isPhantom; // фантомный ли файл (фантомный - т.е. не сохраненный на сервере)
phantomType; // тип фантомного файла (новый[new], пример[sample], опубликованный файл[public])
isOpened; // открыт ли файл в редакторе
tabID; // ID вкладки в редакторе
sourceCode; // по необходимости можно использовать для хранения содержимого
// ----------------------------------------- Методы
open; // открывает файл (в редакторе тоже)
close; // закрывает файл (в редакторе тоже)
active; // активирует файл в редакторе
save; // устанавливает статус измененности в редакторе в ложь
setFullName; // изменяет имя файла по полному имени
setName; // изменяет имя файла
updateTabTitle; // обновляет заголовок вкладки в соответствии с именем файла
setSourceCode; // изменяет содержимое файла
setNotPhantom; // изменяет статус файла на нефантомный
setStatusClosed; // изменяет статус файла на закрытый
setStatusOpened; // изменяет статус файла на открытый
}