$engine JScript
$uname extfiles
$dname Внешние файлы
$addin global
$addin stdcommands
$addin stdlib
/* Скрипт для открытия внешних файлов для Снегопата
* Автор : Пушин Владимир <vladnet@gmail.com>
Александр Кунташов <kuntashov@gmail.com>, http://compaud.ru/blog
Сосна Евгений <shenja@sosna.zp.ua>
* Дата создания: 24.08.2011
* Описание : Добавляет окно из которого можно открывать внешние файлы
*/
var мВерсияСкрипта = 1.40
////////////////////////////////////////////////////////////////////////////////////////
////{ Макросы
////
// Макрос для вызова окна
function macrosОткрытьОкноВнешнихФайлов() {
var pathToForm = SelfScript.fullPath.replace(/js$/, 'ssf')
if(!мФормаСкрипта){
мФормаСкрипта = loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
мФормаСкрипта.КлючСохраненияПоложенияОкна = SelfScript.uniqueName;
мФормаСкрипта.Заголовок="Внешние файлы" //+мВерсияСкрипта
КэшКартинокТиповФайлов = ПолучитьКэшКартинокТиповФайлов(мФормаСкрипта);
loadDiffBackends()
loadDvcsBackends();
мФормаСкрипта.ЭлементыФормы.КпШапка.Кнопки.ПоискВыводитСписком.Пометка = мПоказыватьРезультатПоискаСписком;
}
мФормаСкрипта.Открыть()
}
function macrosСвернутьДеревоВнешнихФайлов() {
if(мАктивноДеревоВнешнихФайлов()==false) return false
if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернут(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)==false)
{
if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель != undefined)
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель
}
else
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Свернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
}
function macrosРазвернутьДеревоВнешнихФайлов() {
if(мАктивноДеревоВнешнихФайлов()==false) return false
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
}
////} Макросы
////////////////////////////////////////////////////////////////////////////////////////
////{ ФормаСкрипта - обработчики событий.
////
function КпШапкаОбновить(Элемент) {
мОбновитьФайлы()
}
function КпШапкаОбновитьТекущуюВетку(Элемент) {
мОбновитьФайлыТекущейВетки()
}
function ФильтрПриИзменении(Элемент) {
мОбновитьФайлы()
}
function ПриОткрытии() {
УстановитьВидимость()
мОбновитьФайлы()
}
function КпШапкаЗакрыть(Элемент) {
мФормаСкрипта.Закрыть()
}
function мАктивноДеревоВнешнихФайлов() {
if(мФормаСкрипта==null) return false
if(мФормаСкрипта.ВводДоступен()!=true) return false
return мФормаСкрипта.ТекущийЭлемент==мФормаСкрипта.ЭлементыФормы.ДеревоФайлов
}
function КпШапкаРазвернуть(Элемент) {
macrosРазвернутьДеревоВнешнихФайлов();
}
function КпШапкаСправка(Кнопка) {
RunApp('http://snegopat.ru/scripts/wiki?name=extfiles.js');
}
function КпШапкаСвернуть(Элемент) {
macrosСвернутьДеревоВнешнихФайлов()
}
function ДеревоФайловПередНачаломИзменения(пЭлемент, пОтказ) {
пОтказ.val = true
лТекСтрока=пЭлемент.val.ТекущаяСтрока
if(лТекСтрока.ЭтоКаталог) return
if (МожноОткрытьФайлВКонфигураторе(лТекСтрока.ИмяФайла))
stdlib.openFileIn1C(лТекСтрока.ИмяФайла)
else
ЗапуститьПриложение(лТекСтрока.ИмяФайла);
}
function ДеревоФайловПриВыводеСтроки(пЭлемент, пОформлениеСтроки, пДанныеСтроки) {
лЯчейкаИмя=пОформлениеСтроки.val.Ячейки.Имя
лЯчейкаИмя.ОтображатьКартинку=true
if(ValueIsFilled(пДанныеСтроки.val.Родитель)==false)
{
лЯчейкаИмя.Картинка = мФормаСкрипта.ЭлементыФормы.КартинкаПапка.Картинка;
}
else if(пДанныеСтроки.val.ЭтоКаталог==true)
{
лЯчейкаИмя.Картинка = мФормаСкрипта.ЭлементыФормы.КартинкаПапка.Картинка;
}
else
{
var КартинкаПоРасширению = ПолучитьКартинкуПоРасширению(пДанныеСтроки.val.Тип);
лЯчейкаИмя.Картинка = КартинкаПоРасширению ? КартинкаПоРасширению : БиблиотекаКартинок.Форма;
}
// Версионный контроль.
if (мИспользоватьВерсионирование) {
var мЦвет = СоответсвиеЦветовИСтатусов[пДанныеСтроки.val.Статус]
if (мЦвет!=undefined){
пОформлениеСтроки.val.Ячейки.Имя.ЦветФона = мЦвет;
} else {
if (пДанныеСтроки.val.Статус.length > 0) {
пОформлениеСтроки.val.Ячейки.Имя.Текст = пОформлениеСтроки.val.Ячейки.Имя.Текст + "(" + пДанныеСтроки.val.Статус+")";
}
}
}
}
function ДеревоФайловПриАктивизацииСтроки(пЭлемент) {
if (мИспользоватьВерсионирование) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока)
{
Кнопки=мФормаСкрипта.ЭлементыФормы.КонтекстноеМеню.Кнопки.DVCS.Кнопки;
Кнопки.КнDvcsОтменитьИзменения.Доступность = false;
Кнопки.КнDvcsПоказатьРазличия.Доступность = false;
Кнопки.КнDvcsДобавить.Доступность = true;
Кнопки.КнDvcsПоказатьЖурнал.Доступность = true;
Кнопки.КнDvcsУдалить.Доступность = false;
Кнопки.КнDvcsCommit.Доступность = true;
Кнопки.КнDvcsЗапустить.Доступность = true;
Кнопки.КнDvcsSwitchBranch.Доступность = true;
if (!ТекущаяСтрока.ЭтоКаталог) {
switch (ТекущаяСтрока.Статус)
{
case "EDITED":
Кнопки.КнDvcsПоказатьРазличия.Доступность = true;
Кнопки.КнDvcsОтменитьИзменения.Доступность = true;
Кнопки.КнDvcsCommit.Доступность = true;
Кнопки.КнDvcsДобавить.Доступность = false;
break;
case "ADDED":
Кнопки.КнDvcsCommit.Доступность = true;
break
case "DELETED":
Кнопки.КнDvcsCommit.Доступность = true;
Кнопки.КнDvcsОтменитьИзменения.Доступность = true;
Кнопки.КнDvcsУдалить.Доступность = true;
Кнопки.КнDvcsДобавить.Доступность = false;
break
case "NOTVERSIONED":
Кнопки.КнDvcsДобавить.Доступность = true;
break
}
}
}
}
}
function КонтекстноеМенюОткрытьПроводник (Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока)
{
var СтрокаЗапуска = 'explorer.exe "' + ПолучитьКаталогСтрокиДерева(ТекущаяСтрока) + '"';
ЗапуститьПриложение(СтрокаЗапуска);
}
}
function КонтекстноеМенюОткрытьКонсоль (Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока)
{
var Каталог = ПолучитьКаталогСтрокиДерева(ТекущаяСтрока);
var СтрокаЗапуска = ПолучитьКомандуЗапускаКонсоли(Каталог);
ЗапуститьПриложение(СтрокаЗапуска, Каталог);
}
}
function КнШапкаПоискСписком(Элемент) {
мФормаСкрипта.ЭлементыФормы.КпШапка.Кнопки.ПоискВыводитСписком.Пометка = !мФормаСкрипта.ЭлементыФормы.КпШапка.Кнопки.ПоискВыводитСписком.Пометка;
мПоказыватьРезультатПоискаСписком = мФормаСкрипта.ЭлементыФормы.КпШапка.Кнопки.ПоискВыводитСписком.Пометка;
profileRoot.setValue(pflExtViewSearchInList, мПоказыватьРезультатПоискаСписком); // И здесь прийдеться сохраняем значение, не будем же ради этой настройки открывать форму настройки и закрывать ее?
} //КнШапкаПоискСписком
function КонтекстноеМенюДобавитьКСравнению (Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if ((ТекущаяСтрока) && (!ТекущаяСтрока.ЭтоКаталог))
{
var i = МассивФайловДляСравнения.length;
if (i > 2) {
//Не должно так быть, удалим весь массив и грязно поругаемся.
МассивФайловДляСравнения = [];
Message("Исключительная ситуация при добавлении файлов в список сравнения, пока больше 2х не поддерживается 1С");
return;
}
i = i>0? 1:0; //номер индекса в массиве.
МассивФайловДляСравнения[i] = ТекущаяСтрока.ИмяФайла;
if (i>0) {
//вызовем сравнение файлов...
СравнитьФайлы(МассивФайловДляСравнения[0], МассивФайловДляСравнения[1])
МассивФайловДляСравнения = [];
}
}
} //КонтекстноеМенюДобавитьКСравнению
function КонтекстноеМенюДополнительноСоздатьКопию(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if ((ТекущаяСтрока) && (!ТекущаяСтрока.ЭтоКаталог))
{
var лФайл = v8New("File", ТекущаяСтрока.ИмяФайла);
var лИмяФайла = лФайл.ИмяБезРасширения + "-"+snegopat.parseTemplateString("<?\"\", ДатаВремя,\"ДФ=yyyyMMdd-HHmmss\">")+лФайл.Расширение;
try {
FileCopy(ТекущаяСтрока.ИмяФайла, лФайл.Путь+"\\"+лИмяФайла);
} catch (e) {
}
мОбновитьФайлыТекущейВетки();
}
} //КонтекстноеМенюДополнительноСоздатьКопию
function КонтекстноеМенюКнDvcsПоказатьРазличия(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null) {
var pathsToFiles = v8New("Structure");
if (!caller("SHOWDIFF", ТекущаяСтрока.ИмяФайла, pathsToFiles)) {return};
СравнитьФайлы(pathsToFiles["path1"], pathsToFiles["path2"])
}
}
} //КонтекстноеМенюКнDvcsПоказатьРазличия
function КонтекстноеМенюКнDvcsПоказатьЖурнал(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null){
var pathToLog = mainFolder + "\\scripts\\dvcs\\logview.js";
var f = v8New("File", pathToLog);
if (!f.Exist()) return
logViewAddin = stdlib.require(f.FullName);
if (logViewAddin) {
var logView = logViewAddin.CreateLogViewForm();
logView.open(caller, ТекущаяСтрока.ИмяФайла);
}
}
}
} //КонтекстноеМенюКнDvcsПоказатьЖурнал
function КонтекстноеМенюКнDvcsДобавить(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null) caller("ADD", ТекущаяСтрока.ИмяФайла, "");
мОбновитьФайлыТекущейВетки()
}
} //КонтекстноеМенюКнDvcsДобавить
function КонтекстноеМенюКнDvcsОтменитьИзменения(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null) caller("REVERT", ТекущаяСтрока.ИмяФайла, "");
}
мОбновитьФайлыТекущейВетки();
} //КонтекстноеМенюКнDvcsОтменитьИзменения
function КонтекстноеМенюКнDvcsУдалить(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
if (ТекущаяСтрока.Родитель!=undefined) {
caller = getDvcsBackendForPath(ТекущаяСтрока.Родитель.ИмяФайла);
if (caller!=null) caller("DELETE", ТекущаяСтрока.Имя, "");
мОбновитьФайлыТекущейВетки();
}
}
} //КонтекстноеМенюКнDvcsУдалить
function КонтекстноеМенюКнDvcsSwitchBranch() {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null){
result = caller("GETLISTBRANCH", ТекущаяСтрока.ИмяФайла, "");
if (result==false) return;
if ((result["valuelist"].Count() > 0) && (result["index"] !=-1)) {
choice = result["valuelist"].ChooseItem("Выберете ветку ", result["valuelist"].Get(result["index"]));
if (choice!=undefined) {
caller("SWITHBRANCH", ТекущаяСтрока.ИмяФайла, choice.value);
}
}
}
мОбновитьФайлыТекущейВетки();
}
}
function КонтекстноеМенюКнDvcsCommit(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
var vbs = addins.byUniqueName("vbs").object
vbs.var0 = ""; vbs.var1 = "Введите комментарий"; vbs.var2 = 0, vbs.var3 = true;
if (vbs.DoEval("InputString(var0, var1, var2, var3)")) {
var message = vbs.var0;
if (message.length!=0) {
if (caller!=null) {caller("COMMIT", ТекущаяСтрока.ИмяФайла, message);}
}
}
}
мОбновитьФайлыТекущейВетки();
} //КонтекстноеМенюКнDvcsCommit
function КонтекстноеМенюКнDVCSЗапустить(Кнопка) {
var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
caller = getDvcsBackendForPath(ТекущаяСтрока.ИмяФайла);
if (caller!=null) caller("RUN", ТекущаяСтрока.ИмяФайла, "");
}
} //КонтекстноеМенюКнDVCSЗапустить
function УстановитьВидимость() {
if (!мИспользоватьВерсионирование) {
Кнопки=мФормаСкрипта.ЭлементыФормы.КонтекстноеМеню.Кнопки.DVCS.Кнопки;
Кнопки.КнDvcsОтменитьИзменения.Доступность = false;
Кнопки.КнDvcsПоказатьРазличия.Доступность = false;
Кнопки.КнDvcsДобавить.Доступность = false;
Кнопки.КнDvcsПоказатьЖурнал.Доступность = false;
Кнопки.КнDvcsУдалить.Доступность = false;
Кнопки.КнDvcsCommit.Доступность = false;
Кнопки.КнDvcsЗапустить.Доступность = false;
Кнопки.КнDvcsSwitchBranch.Доступность = false;
} else {
Кнопки=мФормаСкрипта.ЭлементыФормы.КонтекстноеМеню.Кнопки.DVCS.Кнопки;
Кнопки.КнDvcsОтменитьИзменения.Доступность = false;
Кнопки.КнDvcsПоказатьРазличия.Доступность = false;
Кнопки.КнDvcsДобавить.Доступность = true;
Кнопки.КнDvcsПоказатьЖурнал.Доступность = true;
Кнопки.КнDvcsУдалить.Доступность = false;
Кнопки.КнDvcsCommit.Доступность = true;
Кнопки.КнDvcsЗапустить.Доступность = true;
Кнопки.КнDvcsSwitchBranch.Доступность = true;
}
} //УстановитьВидимость
////
////} ФормаСкрипта - обработчики событий.
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
////{ Вспомогательные процедуры и функции.
////
function ТзКаталоговИнициализировать(пТзКаталоги) {
try{
пТзКаталоги = ValueFromStringInternal(пТзКаталоги)
}
catch(e){
пТзКаталоги = v8New("ТаблицаЗначений")
}
try{ /*тут проверяем не старые ли настройки, раньше хранились в массиве, конвертируем, в будущем удалить*/
var лТест=пТзКаталоги.ВГраница()
лТзКаталоги = v8New("ТаблицаЗначений")
лТзКаталоги.Колонки.Добавить("ИмяКаталога");
лТзКаталоги.Колонки.Добавить("Развернуть");
for (var лИнд=0; лИнд<пТзКаталоги.Количество(); лИнд++)
{
лСтрокаТз=лТзКаталоги.Добавить()
лСтрокаТз.ИмяКаталога=пТзКаталоги.Получить(лИнд)
лСтрокаТз.Развернуть=true
}
return лТзКаталоги
}
catch(e){
}
return пТзКаталоги
}
function getAbsolutePath(path) {
// Путь относительный?
if (path.match(/^\.{1,2}[\/\\]/))
{
// Относительные пути должны задаваться относительно главного каталога Снегопата.
return mainFolder + path;
}
return path;
}
function ExpandTreeForFile(лТекСтрока, лРазворачивать) {
while(лТекСтрока.Родитель != undefined) { //Проверим до первого родителя, в теории самый первый раз должен до начала дойти.
лТекСтрока=лТекСтрока.Родитель;
if (лТекСтрока.Развернут != лРазворачивать) {
лТекСтрока.Развернуть = лРазворачивать;
} else {
break;
}
}
}
function dvcsGetCatalogStatus(лКаталог) { // Проверим находиться ли каталого под версионным контролем.
if (мИспользоватьВерсионирование) {
for (var key in DvcsBackends) {
if (DvcsBackends[key]("TEST", лКаталог, "")) {
СоответствиеКаталоговИDvcs[лКаталог] = DvcsBackends[key];
//СоответствиеКаталоговИDvcs[лКаталог] = stdlib.require(DvcsBackends[key]).GetBackend();
var result = СоответствиеКаталоговИDvcs[лКаталог]("CATALOGSTATUS", лКаталог, "")
break;
}
}
}
} //dvcsGetCatalogStatus
function dvcsGetMissingFiles (лКаталог, лСтрокаДереваФайлов) {
if (мИспользоватьВерсионирование) { // получим отсутствующие файлы. Писать будем Имя = путь, т.к. каталога уже может и не существовать.
if (СоответствиеКаталоговИDvcs[лКаталог] != undefined){
var result = СоответствиеКаталоговИDvcs[лКаталог]("GETFILESDELETED", лКаталог, "");
if (typeof(result)!='boolean') {
//простой массив.
for (var i = 0 ; i<result.length; i++) {
НоваяСтрока = лСтрокаДереваФайлов.Строки.Добавить();
НоваяСтрока.Имя = result[i];
НоваяСтрока.Статус = "DELETED";
НоваяСтрока.ИмяФайла = ""; //Оставим пустым, т.е. файл удалили теперь
}
}
}
}
} //dvcsGetMissingFiles
function dvcsGetFileStatus(pathToFile) {
var result = "";
for (var key in СоответствиеКаталоговИDvcs) {
if (pathToFile.indexOf(key) >=0) {
var result = СоответствиеКаталоговИDvcs[key]("FILESTATUS", key, pathToFile);
break
}
}
return result;
}
function мДобавитьФайлы(пПуть, пУзел) {
var лФайлы=FindFiles(пПуть, '*.*', false)
for (var лИнд=0; лИнд<лФайлы.Количество(); лИнд++)
{
лФайл=лФайлы.Получить(лИнд)
var лНадоРазвернутьДерево = false;
if((лФайл.ЭтоКаталог() == false) && (мФормаСкрипта.Фильтр != ''))
if(лФайл.ИмяБезРасширения.toLowerCase().search(мФормаСкрипта.Фильтр.toLowerCase()) == -1) {
continue
} else {
лНадоРазвернутьДерево = true
}
if ((мФормаСкрипта.Фильтр != '')){ //Тут сделаем свое добавление, а старый вариант оставим.
if (лФайл.ЭтоКаталог() == true){
мДобавитьФайлы(лФайл.ПолноеИмя, пУзел)
continue;
}
if (лФайл.ЭтоКаталог() == false) {
лСтрокаДереваФайлов=пУзел.Строки.Добавить()
лСтрокаДереваФайлов.ЭтоКаталог=лФайл.ЭтоКаталог()
лСтрокаДереваФайлов.ИмяФайла=лФайл.ПолноеИмя
лСтрокаДереваФайлов.ДатаИзменения=лФайл.ПолучитьВремяИзменения()
лСтрокаДереваФайлов.Тип=лФайл.Расширение.substr(1)
var СодержитСлеш = (лСтрокаДереваФайлов.Родитель.Имя.substr(лСтрокаДереваФайлов.Родитель.Имя.length-1)=='\\')?0:1
if(мОтображатьРасширениеФайлаВПредставлении == true){ //в теории у нас родитель только один с корневым каталогом, вот этот корневой каталог и вырежем из путей.
лСтрокаДереваФайлов.Имя=лФайл.ПолноеИмя.substr(лСтрокаДереваФайлов.Родитель.Имя.length+СодержитСлеш)
} else {
var ДлинаРасширения = лФайл.Расширение.length;
var ИмяФайлаСРасширением = лФайл.ПолноеИмя.substr(лСтрокаДереваФайлов.Родитель.Имя.length+СодержитСлеш);
лСтрокаДереваФайлов.Имя=ИмяФайлаСРасширением.substr(0, ИмяФайлаСРасширением.length - ДлинаРасширения);
}
if (лНадоРазвернутьДерево) ExpandTreeForFile(лСтрокаДереваФайлов, true)
}
} else {
лСтрокаДереваФайлов=пУзел.Строки.Добавить()
лСтрокаДереваФайлов.ЭтоКаталог=лФайл.ЭтоКаталог()
лСтрокаДереваФайлов.ИмяФайла=лФайл.ПолноеИмя
лСтрокаДереваФайлов.ДатаИзменения=лФайл.ПолучитьВремяИзменения()
if(мОтображатьРасширениеФайлаВПредставлении == true)
лСтрокаДереваФайлов.Имя=лФайл.Имя
else
лСтрокаДереваФайлов.Имя=лФайл.ИмяБезРасширения
if(лФайл.ЭтоКаталог() == true)
{
if(ValueIsFilled(лФайл.Расширение)) лСтрокаДереваФайлов.Имя+=лФайл.Расширение
мДобавитьФайлы(лФайл.ПолноеИмя, лСтрокаДереваФайлов)
}
else{
if (мИспользоватьВерсионирование) {
лСтрокаДереваФайлов.Статус = dvcsGetFileStatus(лСтрокаДереваФайлов.ИмяФайла);
}
лСтрокаДереваФайлов.Тип=лФайл.Расширение.substr(1)
if (лНадоРазвернутьДерево) ExpandTreeForFile(лСтрокаДереваФайлов, true)
}
}
}
}
function ДобавитьКаталоги(пТзКаталоги) {
for (var лИнд=0; лИнд<пТзКаталоги.Количество(); лИнд++)
{
var лКаталог=пТзКаталоги.Получить(лИнд).ИмяКаталога;
//Добавим возможность формирования пути каталога, относительно Снегопата.
// путь начинаться должен с ".." или ".", по просбе
if (лКаталог == ".git"){
continue;
}
var млКаталог = getAbsolutePath(лКаталог)
//Сделаем проверку существования каталога от 1С.
var f = v8New("File", млКаталог);
if (f.Exist()) {
лКаталог = млКаталог;
} else {
Message("Каталог отностельно Снегопата не существует, пропускаем " + млКаталог);
continue; //
}
лСтрокаДереваФайлов=мФормаСкрипта.ДеревоФайлов.Строки.Добавить()
лСтрокаДереваФайлов.Имя=лКаталог
лСтрокаДереваФайлов.ИмяФайла=лКаталог
лСтрокаДереваФайлов.Развернуть=пТзКаталоги.Получить(лИнд).Развернуть
if (мИспользоватьВерсионирование){
dvcsGetCatalogStatus(лКаталог);
dvcsGetMissingFiles(лКаталог, лСтрокаДереваФайлов);
лСтрокаДереваФайлов.Статус = dvcsGetFileStatus(лСтрокаДереваФайлов.ИмяФайла);
}
мДобавитьФайлы(лКаталог, лСтрокаДереваФайлов)
if (лСтрокаДереваФайлов.Родитель!=undefined){
if ((мФормаСкрипта.Фильтр != '') && (!мПоказыватьРезультатПоискаСписком) && (лСтрокаДереваФайлов.Родитель.Строки.Количество() > 0)){
var МассивКУдалению = v8New("Array");
лСтрокаДереваФайловСтарая = лСтрокаДереваФайлов.Родитель;
лСтрокаДереваФайлов = мФормаСкрипта.ДеревоФайлов.Строки.Добавить();
лСтрокаДереваФайлов.Имя=лКаталог
лСтрокаДереваФайлов.ИмяФайла=лКаталог
лСтрокаДереваФайлов.Развернуть=пТзКаталоги.Получить(лИнд).Развернуть
for (var i = 0; i<лСтрокаДереваФайловСтарая.Строки.Количество(); i++) {
лТекСтрока = лСтрокаДереваФайловСтарая.Строки.Получить(i);
var МассивФайлов = лТекСтрока.Имя.split('\\');
лТекСтрока = лСтрокаДереваФайлов;
var x = 0;
while( x<МассивФайлов.length) {
var СтруктураПоиска = v8New("Structure");
var ПутьДляПоиска = МассивФайлов[x];
СтруктураПоиска.insert("Имя", ПутьДляПоиска);
var НайденныеСтроки = лТекСтрока.Строки.НайтиСтроки(СтруктураПоиска);
if (НайденныеСтроки.Количество() == 0) {
try {
var лФайл = v8New("File", лТекСтрока.ИмяФайла +"\\"+МассивФайлов[x]);
if (!лФайл.Существует()){
continue;
} else {
НоваяСтрока = лТекСтрока.Строки.Добавить();
НоваяСтрока.ЭтоКаталог=лФайл.ЭтоКаталог()
НоваяСтрока.ИмяФайла=лФайл.ПолноеИмя
НоваяСтрока.ДатаИзменения=лФайл.ПолучитьВремяИзменения()
if (мОтображатьРасширениеФайлаВПредставлении == true)
НоваяСтрока.Имя=лФайл.Имя
else
НоваяСтрока.Имя=лФайл.ИмяБезРасширения
if(лФайл.ЭтоКаталог() != true)
{
НоваяСтрока.Тип=лФайл.Расширение.substr(1)
ExpandTreeForFile(НоваяСтрока, true)
}
НайденныеСтроки.add(НоваяСтрока);
}
} catch (e){
Message("Ошибка при определении пути файлов "+e.description);
}
}
лТекСтрока = НайденныеСтроки.Get(0);
x++;
}
}
мФормаСкрипта.ДеревоФайлов.Строки.Удалить(лСтрокаДереваФайловСтарая);
}
}
лСтрокаДереваФайлов.Строки.Сортировать("ЭтоКаталог Убыв, Имя", true)
}
мФормаСкрипта.ДеревоФайлов.Строки.Сортировать("ЭтоКаталог Убыв, Имя", true)
}
function мОбновитьФайлы() {
лТекСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока
// Запомним текущую строку
лИмяФайлаТекСтроки=""
if(лТекСтрока!=undefined) лИмяФайлаТекСтроки=лТекСтрока.ИмяФайла
мФормаСкрипта.ДеревоФайлов.Строки.Очистить()
ДобавитьКаталоги(мТзКаталогиОбщие)
ДобавитьКаталоги(мТзКаталогиБазы)
for (var лИнд=0; лИнд<мФормаСкрипта.ДеревоФайлов.Строки.Количество(); лИнд++)
{
if(мФормаСкрипта.ДеревоФайлов.Строки.Получить(лИнд).Развернуть == false) continue
var Str1=мФормаСкрипта.ДеревоФайлов.Строки.Получить(лИнд)
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернуть(Str1, мФормаСкрипта.Фильтр != '');
}
// Восстановим текущую строку
if(лИмяФайлаТекСтроки != ""){
лСтрокаНайденная=мФормаСкрипта.ДеревоФайлов.Строки.Найти(лИмяФайлаТекСтроки, "ИмяФайла", true)
if(лСтрокаНайденная != undefined)
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=лСтрокаНайденная
}
}
function мОбновитьФайлыТекущейВетки() {
лТекСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока
if(лТекСтрока==undefined) return
// Запомним текущую строку
лИмяФайлаТекСтроки=лТекСтрока.ИмяФайла
while(лТекСтрока.Родитель != undefined) лТекСтрока=лТекСтрока.Родитель
лТекСтрока.Строки.Очистить()
if (мИспользоватьВерсионирование){
dvcsGetCatalogStatus(лТекСтрока.Имя);
dvcsGetMissingFiles(лТекСтрока.Имя, лТекСтрока);
лТекСтрока.Статус = dvcsGetFileStatus(лТекСтрока.ИмяФайла);
}
мДобавитьФайлы(лТекСтрока.Имя, лТекСтрока)
лТекСтрока.Строки.Сортировать("ЭтоКаталог Убыв, Имя", true)
// Восстановим текущую строку
лСтрокаНайденная=мФормаСкрипта.ДеревоФайлов.Строки.Найти(лИмяФайлаТекСтроки, "ИмяФайла", true)
if(лСтрокаНайденная != undefined)
мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=лСтрокаНайденная
}
function ПолучитьКаталогСтрокиДерева(СтрокаДерева) {
var Файл = v8New('Файл', СтрокаДерева.ИмяФайла);
return Файл.ЭтоФайл() ? Файл.Путь : Файл.ПолноеИмя;
}
function ПолучитьКомандуЗапускаКонсоли(Каталог) {
return мКомандаЗапускаКонсоли.replace(/%1/, Каталог);
}
function СформироватьТзРасширенияФайловПоУмолчанию() {
var ТЗ = v8New("ТаблицаЗначений");
ТЗ.Колонки.Добавить("Расширение");
function Расш(расширение) { ТЗ.Добавить().Расширение = расширение; }
// Стандартные файлы 1С:Предприятия 8.
Расш("txt"); Расш("bmp"); Расш("dib"); Расш("png"); Расш("rle");
Расш("jpg"); Расш("jpeg"); Расш("tif"); Расш("ico"); Расш("mxl");
Расш("epf"); Расш("erf"); Расш("htm"); Расш("html"); Расш("grs");
Расш("geo"); Расш("st"); Расш("lgf"); Расш("elf"); Расш("cf"); Расш("pff");
// Файлы Снегопата.
Расш("ssf"); Расш("js"); Расш("vbs");
return ТЗ;
}
function МожноОткрытьФайлВКонфигураторе(ИмяФайла) {
if (!RE_EXTENSIONS)
{
var ext = new Array();
for (var i=0; i<мТзРасширенияФайлов.Количество(); i++)
ext.push(мТзРасширенияФайлов.Get(i).Расширение);
RE_EXTENSIONS = new RegExp('\.(?:' + ext.join('|') + ')$', 'i');
}
return RE_EXTENSIONS.test(ИмяФайла);
}
function ПолучитьКэшКартинокТиповФайлов(ФормаСкрипта) {
var ЭФ = ФормаСкрипта.ЭлементыФормы;
var cache = {};
function add(estr, pic) {
var exts = estr.split('|');
for (var i=0; i<exts.length; i++)
cache[exts[i].toLowerCase()] = pic;
}
add('doc|docx|dot|odf', ЭФ.КартинкаТипФайлаDoc.Картинка);
add('xls|xlsx|csv', ЭФ.КартинкаТипФайлаXls.Картинка);
add('pps|ppsx', ЭФ.КартинкаТипФайлаPps.Картинка);
add('pdf|ps', ЭФ.КартинкаТипФайлаPdf.Картинка);
add('png|jpg|jpeg|bmp|tif|dib|ico', ЭФ.КартинкаТипФайлаPng.Картинка);
add('xml', ЭФ.КартинкаТипФайлаXml.Картинка);
add('zip', ЭФ.КартинкаТипФайлаZip.Картинка);
add('rar', ЭФ.КартинкаТипФайлаRar.Картинка);
add('exe|cmd|bat', ЭФ.КартинкаТипФайлаExe.Картинка);
add('txt', ЭФ.КартинкаТипФайлаTxt.Картинка);
add('geo', ЭФ.КартинкаТипФайлаGeo.Картинка);
add('grs', ЭФ.КартинкаТипФайлаGrs.Картинка);
add('erf', ЭФ.КартинкаТипФайлаErf.Картинка);
add('epf', ЭФ.КартинкаТипФайлаEpf.Картинка);
add('mxl', ЭФ.КартинкаТипФайлаMxl.Картинка);
add('ssf', ЭФ.КартинкаТипФайлаSsf.Картинка);
add('js', ЭФ.КартинкаТипФайлаTxt.Картинка);
add('vbs', ЭФ.КартинкаТипФайлаTxt.Картинка);
add('unknown', ЭФ.КартинкаТипФайлаUnknown.Картинка);
return cache;
}
function ПолучитьКартинкуПоРасширению(Расширение) {
if (КэшКартинокТиповФайлов) {
var pic = КэшКартинокТиповФайлов[Расширение.toLowerCase()];
return pic ? pic : КэшКартинокТиповФайлов['unknown'];
}
return null;
}
function hookCompareFiles(dlgInfo){
if (Path1 == null) return
if (Path2 == null) return
if(dlgInfo.stage == openModalWnd && dlgInfo.caption == "Сравнить файлы")
{
events.disconnect(windows, "onDoModal", SelfScript.self, "hookCompareFiles")
dlgInfo.form.getControl("FirstFile").value = Path1
dlgInfo.form.getControl("SecondFile").value = Path2
var wsh = new ActiveXObject("WScript.Shell")
wsh.SendKeys('^~')
}
} //hookCompareFiles
function СравнитьФайлы (ПутьКФайлу1, ПутьКФайлу2) {
if (ПутьКФайлу1 == null || ПутьКФайлу2 == null) return
Path1 = ПутьКФайлу1; Path2 = ПутьКФайлу2;
var ext = v8New("File", ПутьКФайлу1).Extension;
ext = ext.substr(1).toLowerCase(); //Уберем первый символ, там точка.
var caller = DiffBackends[ext.toLowerCase()]
if (caller) {
caller(Path1, Path2)
} else {
//для обработок
try { //сделаем возможность работы в демо режиме снегопата.
events.connect(windows, "onDoModal", SelfScript.self, "hookCompareFiles")
stdcommands.Frame.CompareFiles.send()
} catch (e) {
Message("Возможно демо режим снегопата... все возможности извините не получиться использовать. ")
}
}
Path1 = null; Path2 = null;
} //СравнитьФайлы
function getDvcsBackendForPath(path) {
var лФайл = v8New("File", path);
var result = null
if (лФайл.Существует()) {
for (var key in СоответствиеКаталоговИDvcs) {
if (path.indexOf(key) >=0) {
result = СоответствиеКаталоговИDvcs[key]
break
}
}
}
return result
}
function registerDiffBackend(description, caller) {
// тут расширение файла будет использоваться для определения инструмента сравнения.
DiffBackends[description.toLowerCase()] = caller;
}
function registerDvcsBackend(description, caller) {
// кто последний, того и тапки.
DvcsBackends[description.toLowerCase()] = caller;
}
function loadDiffBackends() {
//TODO: добавить на форму, таблицу значений с настройками. Что бы можно было выбрать какие diff и для каких файлов можно использовать, а какие нет.
DiffBackends = {}
var МассивФайлов = НайтиФайлы(mainFolder + "\\scripts\\dvcs\\", "diff*.js");
for (var i =0; i<МассивФайлов.Количество(); i++) {
var лФайл = МассивФайлов.Get(i);
function add(estr, caller) {
var exts = estr.split('|');
for (var i=0; i<exts.length; i++)
registerDiffBackend(exts[i].toLowerCase(), caller);
}
var КэшРасширений = stdlib.require(лФайл.ПолноеИмя).GetExtension()
add(КэшРасширений, stdlib.require(лФайл.ПолноеИмя).GetBackend())
}
} //loadDiffBackends
function loadDvcsBackends() {
DvcsBackends = {}
if (!мИспользоватьВерсионирование) return
var МассивФайлов = НайтиФайлы(mainFolder + "\\scripts\\dvcs\\", "dvcs*.js");
for (var i =0; i<МассивФайлов.Количество(); i++) {
var лФайл = МассивФайлов.Get(i);
try {
registerDvcsBackend(лФайл.ИмяБезРасширения, stdlib.require(лФайл.ПолноеИмя).GetBackend());
} catch (e) {
//FIXME: вывести сообщение об ошибке.
try { //наверное неправильно это... может не выгружать, а вдруг ошиблись и это очень полезный плагин?
addins.unloadAddin(backend)
} catch (e){}
}
}
} //loadDvcsBackends
////
////} Вспомогательные процедуры и функции.
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
////{ ФормаНастройки - обработчики событий.
////
function КпШапкаНастройки(Элемент) {
var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf')
мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
мФормаНастройки.ЭлементыФормы.НадписьВерсия.Заголовок="Версия скрипта:"+мВерсияСкрипта
мФормаНастройки.ОткрытьМодально()
}
function мЗаписатьНастройки() {
мТзКаталогиОбщие=мФормаНастройки.КаталогиОбщие
мТзКаталогиБазы=мФормаНастройки.КаталогиБазы
мОткрыватьПриСтарте=мФормаНастройки.ОткрыватьФормуПриЗагрузке
мТзРасширенияФайлов = мФормаНастройки.РасширенияФайлов.Скопировать();
мКомандаЗапускаКонсоли = мФормаНастройки.КомандаЗапускаКонсоли;
мОтображатьРасширениеФайлаВПредставлении = мФормаНастройки.ОтображатьРасширениеФайлаВПредставлении;
мИспользоватьВерсионирование = мФормаНастройки.ИспользоватьВерсионирование;
мЦветФонаИзмененные = мФормаНастройки.ЦветФонаИзмененные
мЦветФонаУдаленный = мФормаНастройки.ЦветФонаУдаленный
мЦветФонаНеВерсионный = мФормаНастройки.ЦветФонаНеВерсионный
RE_EXTENSIONS = null; // Регулярку надо переформировать.
profileRoot.setValue(pflExtFilesOpenOnStart, мОткрыватьПриСтарте)
profileRoot.setValue(pflExtShowExtInName, мОтображатьРасширениеФайлаВПредставлении)
profileRoot.setValue(pflExtFilesPath, ValueToStringInternal(мТзКаталогиОбщие))
profileRoot.setValue(pflExtFilesPathBase, ValueToStringInternal(мТзКаталогиБазы))
profileRoot.setValue(pflExtOpen1CExtensions, мТзРасширенияФайлов)
profileRoot.setValue(pflExtRunConsoleCommand, мКомандаЗапускаКонсоли)
profileRoot.setValue(pflExtViewSearchInList, мПоказыватьРезультатПоискаСписком)
profileRoot.setValue(pflVersionControl, мИспользоватьВерсионирование)
profileRoot.setValue(pfColorModiefed, мЦветФонаИзмененные)
profileRoot.setValue(pfColorDeleted, мЦветФонаУдаленный)
profileRoot.setValue(pfColorNotVersioned, мЦветФонаНеВерсионный)
loadDvcsBackends()
мОбновитьФайлы()
УстановитьВидимость()
}
function мЗагрузитьНастройку(пТзКаталоги, пТаблицаКаталогов) {
for (var лИнд=0; лИнд<пТзКаталоги.Количество(); лИнд++)
{
лСтрокаТз=пТаблицаКаталогов.Добавить()
лСтрокаТз.ИмяКаталога=пТзКаталоги.Получить(лИнд).ИмяКаталога
лСтрокаТз.Развернуть=пТзКаталоги.Получить(лИнд).Развернуть
}
}
function НастройкиПриОткрытии() {
мФормаНастройки.ОткрыватьФормуПриЗагрузке=мОткрыватьПриСтарте
мФормаНастройки.ОтображатьРасширениеФайлаВПредставлении=мОтображатьРасширениеФайлаВПредставлении
мЗагрузитьНастройку(мТзКаталогиОбщие, мФормаНастройки.КаталогиОбщие);
мЗагрузитьНастройку(мТзКаталогиБазы, мФормаНастройки.КаталогиБазы);
мФормаНастройки.РасширенияФайлов = мТзРасширенияФайлов;
мФормаНастройки.КомандаЗапускаКонсоли = мКомандаЗапускаКонсоли;
мФормаНастройки.ИспользоватьВерсионирование = мИспользоватьВерсионирование;
мФормаНастройки.ЦветФонаИзмененные = мЦветФонаИзмененные;
мФормаНастройки.ЦветФонаНеВерсионный = мЦветФонаНеВерсионный;
мФормаНастройки.ЦветФонаУдаленный = мЦветФонаУдаленный;
мФормаНастройки.ЭлементыФормы.ПанельНастроекВерсионныйКонтроль.Видимость = мИспользоватьВерсионирование;
}
function КпШапкаЗаписатьИЗакрыть(Кнопка) {
мЗаписатьНастройки()
мФормаНастройки.Закрыть()
}
function КпШапкаЗаписать(Кнопка) {
мЗаписатьНастройки()
}
/* Возвращает название макроса по умолчанию - вызывается, когда пользователь
дважды щелкает мышью по названию скрипта в окне Снегопата. */
function getDefaultMacros() {
return 'ОткрытьОкноВнешнихФайлов';
}
function мВыбратьКаталог() {
ДиалогОткрытияФайла=v8New("ДиалогВыбораФайла", РежимДиалогаВыбораФайла.ВыборКаталога)
ДиалогОткрытияФайла.ПолноеИмяФайла = ""
ДиалогОткрытияФайла.Заголовок = "Выберите каталог"
if(ДиалогОткрытияФайла.Выбрать()==false) return ""
return ДиалогОткрытияФайла.Каталог
}
function КаталогиОбщиеИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка) {
лКаталог=мВыбратьКаталог()
if(лКаталог=="") return
Элемент.val.Значение=лКаталог
}
function КаталогиБазыИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка) {
лКаталог=мВыбратьКаталог()
if(лКаталог=="") return
Элемент.val.Значение=лКаталог
}
function НадписьCmdExeНажатие (Элемент) {
мФормаНастройки.КомандаЗапускаКонсоли = Элемент.val.Заголовок;
}
function НадписьFarExeНажатие (Элемент) {
мФормаНастройки.КомандаЗапускаКонсоли = Элемент.val.Заголовок;
}
function ИспользоватьВерсионированиеПриИзменении(Элемент) {
мФормаНастройки.ЭлементыФормы.ПанельНастроекВерсионныйКонтроль.Видимость = мФормаНастройки.ИспользоватьВерсионирование;
}
////
////} ФормаНастройки - обработчики событий.
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
////{ Инициализация скрипта
////
// Зададим путь в профайле
var pflExtFilesOpenOnStart = "ExtFiles/OpenOnStart"
var pflExtShowExtInName = "ExtFiles/ShowExtInName"
var pflExtFilesPath = "ExtFiles/Path"
var pflExtFilesPathBase = "ExtFiles/PathBase"
var pflExtOpen1CExtensions = "ExtFiles/Open1CExtensions"
var pflExtRunConsoleCommand = "ExtFiles/RunConsoleCommand"
var pflExtViewSearchInList = "ExtFiles/ViewSearchInList"
var pflVersionControl = "ExtFiles/VersionControl"
var pfColorModiefed = "ExtFiles/ColorModiefed"
var pfColorDeleted = "ExtFiles/ColorDeleted"
var pfColorNotVersioned = "ExtFiles/ColorNotVersioned"
// Восстановим настройки
profileRoot.createValue(pflExtFilesOpenOnStart, false, pflSnegopat)
profileRoot.createValue(pflExtShowExtInName, true, pflSnegopat)
profileRoot.createValue(pflExtFilesPath, false, pflSnegopat)
profileRoot.createValue(pflExtFilesPathBase, false, pflBase)
profileRoot.createValue(pflExtOpen1CExtensions, СформироватьТзРасширенияФайловПоУмолчанию(), pflSnegopat)
profileRoot.createValue(pflExtRunConsoleCommand, 'cmd.exe /K cd /D "%1"', pflSnegopat)
profileRoot.createValue(pflExtViewSearchInList, false, pflSnegopat)
profileRoot.createValue(pflVersionControl, false, pflSnegopat)
profileRoot.createValue(pfColorModiefed, false, pflSnegopat)
profileRoot.createValue(pfColorDeleted, false, pflSnegopat)
profileRoot.createValue(pfColorNotVersioned, false, pflSnegopat)
var мОткрыватьПриСтарте = profileRoot.getValue(pflExtFilesOpenOnStart)
var мОтображатьРасширениеФайлаВПредставлении = profileRoot.getValue(pflExtShowExtInName)
var мТзКаталогиОбщие = profileRoot.getValue(pflExtFilesPath)
var мТзКаталогиБазы = profileRoot.getValue(pflExtFilesPathBase)
var мТзРасширенияФайлов = profileRoot.getValue(pflExtOpen1CExtensions);
var мКомандаЗапускаКонсоли = profileRoot.getValue(pflExtRunConsoleCommand);
var мПоказыватьРезультатПоискаСписком = profileRoot.getValue(pflExtViewSearchInList)
var мИспользоватьВерсионирование = profileRoot.getValue(pflVersionControl)
var мЦветФонаИзмененные = profileRoot.getValue(pfColorModiefed)
var мЦветФонаНеВерсионный = profileRoot.getValue(pfColorNotVersioned)
var мЦветФонаУдаленный = profileRoot.getValue(pfColorDeleted)
var RE_EXTENSIONS = null;
var КэшКартинокТиповФайлов = {};
var DvcsBackends = {};
var DiffBackends = {};
var СоответствиеКаталоговИDvcs = {};
var МассивФайловДляСравнения = [];
var Path1 = null
var Path2 = null
var mainFolder = stdlib.getSnegopatMainFolder();
global.connectGlobals(SelfScript)
if (!мЦветФонаИзмененные) мЦветФонаИзмененные = v8New("Цвет", 255, 255, 0);
if (!мЦветФонаУдаленный) мЦветФонаУдаленный = v8New("Цвет", 255, 0, 0);
if (!мЦветФонаНеВерсионный) мЦветФонаНеВерсионный = v8New("Цвет", 192, 192, 192);
var СоответсвиеЦветовИСтатусов = {"DELETED":мЦветФонаУдаленный, "NOTVERSIONED":мЦветФонаНеВерсионный, "EDITED":мЦветФонаИзмененные}
мТзКаталогиОбщие = ТзКаталоговИнициализировать(мТзКаталогиОбщие)
мТзКаталогиБазы = ТзКаталоговИнициализировать(мТзКаталогиБазы)
мФормаСкрипта=null
мФормаНастройки=null
if(мОткрыватьПриСтарте==true)
macrosОткрытьОкноВнешнихФайлов()
////} Инициализация скрипта