Commit 62bf28f7 authored by Ilya Kirillov's avatar Ilya Kirillov

Схема билдера переделана на врап-классы, но теперь у данных классов все...

Схема билдера переделана на врап-классы, но теперь у данных классов все функции идут без префикса builder_. Добавлены новые функции в билдер.
parent b10c2d3b
...@@ -30,115 +30,256 @@ ...@@ -30,115 +30,256 @@
* Time: 14:15 * Time: 14:15
*/ */
(function(window) (function(window, builder)
{ {
var Api = window["asc_docs_api"]; var Api = window["asc_docs_api"];
var ApiDocument = CDocument;
var ApiParagraph = Paragraph; function ApiDocument(Document)
var ApiTable = CTable; {
this.Document = Document;
}
function ApiParagraph(Paragraph)
{
this.Paragraph = Paragraph;
}
function ApiTable(Table)
{
this.Table = Table;
}
function ApiRun(Run)
{
this.Run = Run;
}
function ApiStyle(Style)
{
this.Style = Style;
}
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
// Основное Апи // Основное Апи
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
/** /**
* Получаем ссылку на основной документ в виде класса CDocumentContent * Получаем ссылку на основной документ в виде класса ApiDocument
*/ */
Api.prototype["builder_GetDocument"] = function() Api.prototype["GetDocument"] = function()
{ {
return this.WordControl.m_oLogicDocument; return new ApiDocument(this.WordControl.m_oLogicDocument);
}; };
/** /**
* Создаем новый параграф * Создаем новый параграф
*/ */
Api.prototype["builder_CreateParagraph"] = function() Api.prototype["CreateParagraph"] = function()
{ {
return new ApiParagraph(private_GetDrawingDocument()); return new ApiParagraph(new Paragraph(private_GetDrawingDocument(), private_GetLogicDocument()));
}; };
/** /**
* Создаем новую таблицу размерами nCols * nRows * Создаем новую таблицу размерами nCols * nRows
*/ */
Api.prototype["builder_CreateTable"] = function(nCols, nRows) Api.prototype["CreateTable"] = function(nCols, nRows)
{ {
if (!nRows || nRows <= 0 || !nCols || nCols <= 0) if (!nRows || nRows <= 0 || !nCols || nCols <= 0)
return null; return null;
return new ApiTable(private_GetDrawingDocument(), null, true, 0, 0, 0, 0, 0, nRows, nCols, [], false); return new ApiTable(new CTable(private_GetDrawingDocument(), private_GetLogicDocument(), true, 0, 0, 0, 0, 0, nRows, nCols, [], false));
}; };
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
// Апи документа // Апи документа
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
/** /**
* Получаем количество элементов в документе * Получаем количество элементов в документе
*/ */
ApiDocument.prototype["builder_GetElementsCount"] = function() ApiDocument.prototype["GetElementsCount"] = function()
{ {
return this.Content.length; return this.Document.Content.length;
}; };
/** /**
* Получаем элемент по заданному номеру или null * Получаем элемент по заданному номеру или null
*/ */
ApiDocument.prototype["builder_GetElement"] = function(nPos) ApiDocument.prototype["GetElement"] = function(nPos)
{ {
if (!this.Content[nPos]) if (!this.Document.Content[nPos])
return null; return null;
return this.Content[nPos]; return this.Document.Content[nPos];
}; };
/** /**
* Добавляем параграф или таблицу в документ * Добавляем параграф или таблицу в документ
* @param nPos * @param nPos
* @param oElement * @param oElement
*/ */
ApiDocument.prototype["builder_AddElement"] = function(nPos, oElement) ApiDocument.prototype["AddElement"] = function(nPos, oElement)
{ {
if (oElement instanceof ApiParagraph || oElement instanceof ApiTable) if (oElement instanceof ApiParagraph || oElement instanceof ApiTable)
{ {
this.Internal_Content_Add(nPos, oElement); this.Document.Internal_Content_Add(nPos, oElement.private_GetImpl());
return true; return true;
} }
return false; return false;
}; };
/** /**
* Добавляем параграф или таблицу в конец документа * Добавляем параграф или таблицу в конец документа
* @param oElement * @param oElement
*/ */
ApiDocument.prototype["builder_Push"] = function(oElement) ApiDocument.prototype["Push"] = function(oElement)
{ {
if (oElement instanceof ApiParagraph || oElement instanceof ApiTable) if (oElement instanceof ApiParagraph || oElement instanceof ApiTable)
{ {
this.Internal_Content_Add(this.Content.length, oElement, true); this.Document.Internal_Content_Add(this.Document.Content.length, oElement.private_GetImpl(), true);
return true; return true;
} }
return false; return false;
}; };
/**
* Получаем стиль по заданному имени стиля, если стиля с таким именем нет, то возвращается null
* @param sStyleName
*/
ApiDocument.prototype["GetStyle"] = function(sStyleName)
{
var oStyles = this.Document.Get_Styles();
var oStyleId = oStyles.Get_StyleIdByName(sStyleName);
return new ApiStyle(oStyles.Get(oStyleId));
};
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
// Апи параграфа // Апи параграфа (Paragraph)
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
/** /**
* Добавляем текст к параграфу. Возвращается текстовый объект (Run), к которому можно применять различные * Добавляем текст к параграфу. Возвращается текстовый объект (Run), к которому можно применять различные
* текстовые настройки. * текстовые настройки.
* @returns {ParaRun}
*/ */
ApiParagraph.prototype["builder_AddText"] = function(sText) ApiParagraph.prototype["AddText"] = function(sText)
{ {
var oRun = new ParaRun(this, false); var oRun = new ParaRun(this.Paragraph, false);
if (!sText || !sText.length) if (!sText || !sText.length)
return oRun; return oRun;
for (var nPos = 0, nCount = sText.length; nPos < nCount; ++nPos)
{
var nChar = sText.charAt(nPos);
if (" " == nChar)
oRun.Add_ToContent(nPos, new ParaSpace(), false);
else
oRun.Add_ToContent(nPos, new ParaText(nChar), false);
}
private_PushElementToParagraph(this.Paragraph, oRun);
return oRun;
};
/**
* Добавляем разрыв страницы
* @returns {ParaRun}
*/
ApiParagraph.prototype["AddPageBreak"] = function()
{
var oRun = new ParaRun(this.Paragraph, false);
oRun.Add_ToContent(0, new ParaNewLine(break_Page));
private_PushElementToParagraph(this.Paragraph, oRun);
return new ApiRun(oRun);
}; };
/**
* Добавляем разрыв строки
* @returns {ParaRun}
*/
ApiParagraph.prototype["AddLineBreak"] = function()
{
var oRun = new ParaRun(this.Paragraph, false);
oRun.Add_ToContent(0, new ParaNewLine(break_Line));
private_PushElementToParagraph(this.Paragraph, oRun);
return new ApiRun(oRun);
};
/**
* Добавляем разрыв колонки
* @returns {ParaRun}
*/
ApiParagraph.prototype["AddColumnBreak"] = function()
{
var oRun = new ParaRun(this.Paragraph, false);
oRun.Add_ToContent(0, new ParaNewLine(break_Column));
private_PushElementToParagraph(this.Paragraph, oRun);
return oRun;
};
/**
* Выставляем стиль
* @param oStyle
*/
ApiParagraph.prototype["SetStyle"] = function(oStyle)
{
if (!oStyle || !(oStyle instanceof ApiStyle))
return false;
this.Paragraph.Style_Add(oStyle.Style.Get_Id(), true);
return true;
};
//------------------------------------------------------------------------------------------------------------------
// Апи текстового блока (Run)
//------------------------------------------------------------------------------------------------------------------
/**
* Выставляем полужирный текст
* @param isBold
*/
ApiRun.prototype["SetBold"] = function(isBold)
{
this.Run.Set_Bold(isBold);
};
/**
* Выставляем наклонный текст
* @param isItalic
*/
ApiRun.prototype["SetItalic"] = function(isItalic)
{
this.Run.Set_Italic(isItalic);
};
/**
* Выставляем подчеркнутый текст
* @param isUnderline
*/
ApiRun.prototype["SetUnderline"] = function(isUnderline)
{
this.Run.Set_Underline(isUnderline);
};
//------------------------------------------------------------------------------------------------------------------
// Апи текстового блока (Run)
//------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------
// Приватный блок
//------------------------------------------------------------------------------------------------------------------
function private_GetDrawingDocument() function private_GetDrawingDocument()
{ {
return editor.WordControl.m_oLogicDocument.DrawingDocument; return editor.WordControl.m_oLogicDocument.DrawingDocument;
} }
}(window));
function private_PushElementToParagraph(oPara, oElement)
{
// Добавляем не в конец из-за рана с символом конца параграфа TODO: ParaEnd
oPara.Add_ToContent(oPara.Content.length - 1, oElement);
}
function private_GetLogicDocument()
{
return editor.WordControl.m_oLogicDocument;
}
ApiParagraph.prototype.private_GetImpl = function()
{
return this.Paragraph;
};
ApiTable.prototype.private_GetImpl = function()
{
return this.Table;
};
}(window, null));
function TEST_BUILDER() function TEST_BUILDER()
...@@ -151,13 +292,17 @@ function TEST_BUILDER() ...@@ -151,13 +292,17 @@ function TEST_BUILDER()
var Api = editor; var Api = editor;
var oDocument = Api.builder_GetDocument(); var oDocument = Api.GetDocument();
var oParagraph = Api.builder_CreateParagraph(); var oHeadingStyle = oDocument.GetStyle("Heading 1");
var oTable = Api.builder_CreateTable(3, 4);
var oParagraph = Api.CreateParagraph();
oParagraph.SetStyle(oHeadingStyle);
oParagraph.AddText("Overview");
oDocument.Push(oParagraph);
oDocument.builder_Push(oParagraph); oParagraph = Api.CreateParagraph();
oDocument.builder_Push(oTable); oParagraph.AddText("In the previous meeting of the board of directors funds were approved to take the product “Innovate 1” to market. They have also allocated a sum of $250,000 towards market identification and launch efforts. This document describes in brief the objective set forth by the VP of marketing pursuant to the board’s decision.");
oDocument.Push(oParagraph);
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
oLD.Recalculate_FromStart(true); oLD.Recalculate_FromStart(true);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment