diff --git a/apps/documenteditor/main/app/controller/Links.js b/apps/documenteditor/main/app/controller/Links.js index 343b79723..2b51b8a5a 100644 --- a/apps/documenteditor/main/app/controller/Links.js +++ b/apps/documenteditor/main/app/controller/Links.js @@ -174,7 +174,7 @@ define([ need_disable = in_header; this.view.btnCaption.setDisabled(need_disable); - need_disable = paragraph_locked || header_locked || in_image; + need_disable = paragraph_locked || header_locked; this.view.btnCrossRef.setDisabled(need_disable); }, diff --git a/apps/documenteditor/main/app/view/CrossReferenceDialog.js b/apps/documenteditor/main/app/view/CrossReferenceDialog.js index bf4f9871b..1dea0b7a6 100644 --- a/apps/documenteditor/main/app/view/CrossReferenceDialog.js +++ b/apps/documenteditor/main/app/view/CrossReferenceDialog.js @@ -89,7 +89,7 @@ define([ '', '', '', - '
', + '
', '', '', '', @@ -150,15 +150,7 @@ define([ cls : 'input-group-nr', data : [] }); - this.cmbReference.on('selected', _.bind(function (combo, record) { - if (this._changedProps) { - if (!this._changedProps.get_TextPr()) this._changedProps.put_TextPr(new AscCommonWord.CTextPr()); - this._changedProps.get_TextPr().put_FontSize((record.value>0) ? record.value : undefined); - } - if (this.api) { - this.api.SetDrawImagePreviewBullet('bulleted-list-preview', this.props, this.level, this.type==2); - } - }, this)); + this.cmbReference.on('selected', _.bind(this.onReferenceSelected, this)); this.chInsertAs = new Common.UI.CheckBox({ el: $window.find('#id-dlg-cross-insert-as'), @@ -187,12 +179,17 @@ define([ this.refList = new Common.UI.ListView({ el: $window.find('#id-dlg-cross-list'), - store: new Common.UI.DataViewStore() + store: new Common.UI.DataViewStore(), + itemTemplate: _.template('
<%= value %>
') }); - this.refList.on('item:select', _.bind(this.onSelectReference, this)); this.lblWhich = $window.find('#id-dlg-cross-which'); + this.btnInsert = new Common.UI.Button({ + el: $window.find('.primary'), + disabled: true + }); + this.afterRender(); }, @@ -205,6 +202,7 @@ define([ this.options.handler.call(this, state, {}); } if (state=='ok') { + this.insertReference(); return; } this.close(); @@ -226,13 +224,41 @@ define([ } }, - onSelectReference: function(listView, itemView, record) { - // record.get('value'); + insertReference: function() { + var record = this.refList.getSelectedRec(), + typeRec = this.cmbType.getSelectedRecord(), + type = (typeRec.type==1 || typeRec.value>4) ? 5 : typeRec.value, + reftype = this.cmbReference.getValue(), + link = this.chInsertAs.getValue()=='checked', + below = this.chBelowAbove.getValue()=='checked', + separator = (this.chSeparator.getValue()=='checked') ? this.inputSeparator.getValue() : undefined; + + switch (type) { + case 0: // paragraph + case 1: // heading + this.api.asc_AddCrossRefToParagraph(record.get('para'), reftype, link, below, separator); + break; + case 2: // bookmark + this.api.asc_AddCrossRefToBookmark(record.get('value'), reftype, link, below, separator); + break; + case 3: // footnote + case 4: // endnote + this.api.asc_AddCrossRefToNote(record.get('para'), reftype, link, below); + break; + case 5: // caption + if (reftype==Asc.c_oAscDocumentRefenceToType.OnlyCaptionText && record.get('para').asc_canAddRefToCaptionText()===false) { + Common.UI.warning({ + msg : this.textEmpty + }); + } else + this.api.asc_AddCrossRefToCaption(record.get('value'), record.get('para'), reftype, link, below); + break; + } }, onTypeSelected: function (combo, record) { var arr = [], - str = this.textWhich; + str = this.textWhich, type = 5; if (record.type==1 || record.value > 4) { // custom labels from caption dialog and Equation, Figure, Table arr = [ @@ -243,6 +269,7 @@ define([ { value: Asc.c_oAscDocumentRefenceToType.AboveBelow, displayValue: this.textAboveBelow } ]; } else { + type = record.value; switch (record.value) { case 0: // paragraph arr = [ @@ -300,6 +327,58 @@ define([ this.cmbReference.setData(arr); this.cmbReference.setValue(arr[0].value); this.lblWhich.text(str); + this.refreshReferences(type); + }, + + refreshReferences: function(type) { + var store = this.refList.store, + arr = [], + props; + switch (type) { + case 0: // paragraph + props = this.api.asc_GetAllNumberedParagraphs(); + break; + case 1: // heading + props = this.api.asc_GetAllHeadingParagraphs(); + break; + case 2: // bookmark + props = this.api.asc_GetBookmarksManager(); + break; + case 3: // footnote + props = this.api.asc_GetAllFootNoteParagraphs(); + break; + case 4: // endnote + props = this.api.asc_GetAllEndNoteParagraphs(); + break; + case 5: // caption + props = this.api.asc_GetAllCaptionParagraphs(this.cmbType.getSelectedRecord().displayValue); + break; + } + if (type==2) { // bookmark + var count = props.asc_GetCount(); + for (var i=0; i0) { + var rec = store.at(0); + this.refList.selectRecord(rec); + this.refList.scrollToRecord(rec); + } + this.btnInsert.setDisabled(arr.length<1); + }, + + onReferenceSelected: function(combo, record) { + }, txtTitle: 'Cross-reference', @@ -340,7 +419,8 @@ define([ textWhichBookmark: 'For which bookmark', textWhichNote: 'For which footnote', textWhichEndnote: 'For which endnote', - textWhichPara: 'For which numbered item' + textWhichPara: 'For which numbered item', + textEmpty: 'The request reference is empty.' }, DE.Views.CrossReferenceDialog || {})) }); \ No newline at end of file