$engine JScript
$uname logview
$dname Просмотр истории изменений
$addin global
$addin extfiles
$addin stdcommands
$addin stdlib
// (c) Сосна Евгений shenja at sosna.zp.ua
// Скрипт - просмотр истории для версионного контроля.
global.connectGlobals(SelfScript)
var мФормаЖурнала=null
var Backend = null
var RootPath = null
var RootFile = null
function macrosЖурнал(){
var Form = CreateLogViewForm();
Form.open();
/* var pathToForm=SelfScript.fullPath.replace(/js$/, 'ssf')
мФормаЖурнала=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
мФормаЖурнала.Открыть(); */
}
function CreateLogViewForm() {
return new _LogView();
}
function _LogView() {
this.form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), this);
this.backend = null;
this.rootpath = null;
this.timeline = this.form.timeline;
this.listfiles = this.form.СписокИзминенийФайлов;
this.listtocompare = [];
this.LimitRevisions = мКвоРевизийПоУмолчанию;
}
_LogView.prototype.open = function (caller, path) {
this.backend = caller;
this.rootpath = path;
this.form.КвоРевизийПоУмолчанию = this.LimitRevisions;
this.form.Caption = "Просмотр истории "+ this.rootpath;
if ((this.backend) && (this.rootpath))
this.init()
this.form.Open();
}
_LogView.prototype.init = function () {
this.timeline.Очистить();
result = this.backend("GETLOG", this.rootpath, this.LimitRevisions);
for (var i=0; i<result.length; i++) {
НоваяСтрока = this.timeline.Добавить();
НоваяСтрока.Версия = result[i]['version']
НоваяСтрока.Коментарий = result[i]['comment']
НоваяСтрока.Автор = result[i]['author']
НоваяСтрока.Дата = result[i]['date']
}
}
_LogView.prototype.listfilesBeforeEdit = function (Элемент, Отказ) {
Отказ = true;
}
_LogView.prototype.timelineПриАктивизацииСтроки = function (Элемент) {
this.listfiles.Очистить();
this.form.ЭлементыФормы.ПолеТекстовогоДокумента1.УстановитьТекст("");
//мФормаЖурнала.СписокИзминенийФайлов.Очистить();
if ((this.backend) && (this.rootpath)) {
var ТекущаяСтрока = this.form.ЭлементыФормы.timeline.ТекущиеДанные;
if (ТекущаяСтрока) {
var result = this.backend("GETINFO", this.rootpath, ТекущаяСтрока.Версия);
this.form.ЭлементыФормы.ПолеТекстовогоДокумента1.УстановитьТекст(result['comment']);
var files = result['files'];
for (var i=0; i<files.length; i++) {
НоваяСтрока = this.listfiles.Добавить();
НоваяСтрока.Версия = files[i]['version'];
НоваяСтрока.Файл = files[i]['file'];
НоваяСтрока.Статус = files[i]['status'];
НоваяСтрока.ИмяФайла = files[i]['fullpath'] // минимальные действия на форме.
}
}
}
}
_LogView.prototype.КПСравненияКПСохранитьВерсию = function (Элемент) {
//Диалог для выбора сохранения файла...
var ТекущаяСтрока = this.form.ЭлементыФормы.СписокИзминенийФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
var мКаталог = "";
var f = v8New("File", ТекущаяСтрока.ИмяФайла);
if (f.Exist()){
if (!f.IsDirectory()) {
мКаталог = f.Path;
} else {
мКаталог = ТекущаяСтрока.ИмяФайла;
}
}
path = this.backend("GETFILEATREVISION", ТекущаяСтрока.ИмяФайла, ТекущаяСтрока.Версия);
var f = v8New("File", path);
if (!f.Exist()) {
Message("Не возможно получить файл из системы версионного контрорля! "+ ТекущаяСтрока.ИмяФайла);
return;
}
ДиалогСохраненияФайла=v8New("ДиалогВыбораФайла", РежимДиалогаВыбораФайла.Save);
ДиалогСохраненияФайла.Каталог = мКаталог;
ДиалогСохраненияФайла.ПолноеИмяФайла = мКаталог + f.Name;
ДиалогСохраненияФайла.Заголовок = "Выберете путь для сохранения файла"
if(ДиалогСохраненияФайла.Выбрать()==false) return ""
try {
ПереместитьФайл(path, ДиалогСохраненияФайла.ПолноеИмяФайла);
} catch (e) {
Message("Не удалось сохранить файла по пути " + ДиалогСохраненияФайла.ПолноеИмяФайла + " по причине "+e.description)
}
}
}
_LogView.prototype.КПСравненияКПДобавитьКСравнению = function (Элемент) {
var ТекущаяСтрока = this.form.ЭлементыФормы.СписокИзминенийФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
var i = this.listtocompare.length;
if (i > 2) {
//Не должно так быть, удалим весь массив и грязно поругаемся.
this.listtocompare= [];
Message("Исключительная ситуация при добавлении файлов в список сравнения, пока больше 2х не поддерживается 1С");
return;
}
i = i>0? 1:0; //номер индекса в массиве.
this.listtocompare[i] = {'version':ТекущаяСтрока.Версия, 'file':ТекущаяСтрока.ИмяФайла};
if (i>0) {
//вызовем сравнение файлов...
if (this.backend) {
path1 = this.backend("GETFILEATREVISION", this.listtocompare[0]['file'], this.listtocompare[0]['version']);
path2 = this.backend("GETFILEATREVISION", this.listtocompare[1]['file'], this.listtocompare[1]['version']);
extfiles.СравнитьФайлы(path1, path2);
}
this.listtocompare = [];
}
}
}
_LogView.prototype.КПСравненияКПСравнить = function (Элемент) {
var ТекущаяСтрока = this.form.ЭлементыФормы.СписокИзминенийФайлов.ТекущиеДанные;
if (ТекущаяСтрока) {
if (this.backend) {
path1 = this.backend("GETFILEATREVISION", ТекущаяСтрока.ИмяФайла, ТекущаяСтрока.Версия)
path2 = ТекущаяСтрока.ИмяФайла;
extfiles.СравнитьФайлы(path1, path2);
}
}
}
_LogView.prototype.КнОбновитьНажатие = function (Элемент) {
this.LimitRevisions = this.form.КвоРевизийПоУмолчанию; //Надо придумать настройку для сохранения.
this.init();
}
function getDefaultMacros() {
return 'Журнал'
} //getDefaultMacros
////////////////////////////////////////////////////////////////////////////////////////
////{ Инициализация скрипта
////
var pflLogViewLimitOfRevisions = "LogView/LimitRevisions"
profileRoot.createValue(pflLogViewLimitOfRevisions, 30, pflSnegopat);
var мКвоРевизийПоУмолчанию = profileRoot.getValue(pflLogViewLimitOfRevisions)
////} Инициализация скрипта