UNPKG

kekule

Version:

Open source JavaScript toolkit for chemoinformatics

1 lines 934 kB
Kekule.ChemWidget={},Kekule.ChemWidget.AbstractWidget=Kekule.Widget.BaseWidget,Kekule.ChemWidget.ComponentWidgetNames={menu:"menu",newDoc:"newDoc",clearObjs:"clearObjs",loadFile:"loadFile",loadData:"loadData",saveData:"saveData",zoomIn:"zoomIn",zoomOut:"zoomOut",resetZoom:"resetZoom",rotateRight:"rotateRight",rotateLeft:"rotateLeft",rotateX:"rotateX",rotateY:"rotateY",rotateZ:"rotateZ",reset:"reset",molDisplayType:"molDisplayType",molDisplayTypeCondensed:"molDisplayTypeCondensed",molDisplayTypeSkeletal:"molDisplayTypeSkeletal",molDisplayTypeWire:"molDisplayTypeWire",molDisplayTypeSticks:"molDisplayTypeSticks",molDisplayTypeBallStick:"molDisplayTypeBallStick",molDisplayTypeSpaceFill:"molDisplayTypeSpaceFill",molHideHydrogens:"molHideHydrogens",molAutoGenerateCoords:"molAutoGenerateCoords",openEditor:"openEditor",config:"config",objInspector:"objInspector",issueInspector:"issueInspector",undo:"undo",redo:"redo",copy:"copy",cut:"cut",paste:"paste",cloneSelection:"cloneSelection",selectAll:"selectAll",toggleSelect:"toggleSelect",eraseSelection:"eraseSelection",recheckIssues:"recheckIssues",toggleShowAllIssues:"toggleShowAllIssues",dragScroll:"dragScroll",erase:"erase",manipulate:"manipulate",trackInput:"trackInput",molBond:"bond",molAtom:"atom",molFormula:"formula",molAtomAndFormula:"atomAndFormula",molCharge:"charge",textBlock:"textBlock",imageBlock:"imageBlock",molRing:"ring",glyph:"glyph",textImage:"textImage",fontName:"fontName",fontSize:"fontSize",color:"color",textDirection:"textDirection",textAlign:"textAlign",nodeDisplayMode:"nodeDisplayMode"},Kekule.ChemWidget.HtmlClassNames={PREFIX:"K-Chem-",INNER_TOOLBAR:"K-Chem-InnerToolbar"},function(){"use strict";Class.PropertyScope,Kekule.ChemWidget,Kekule.Widget.HtmlClassNames;var e=Kekule.ChemWidget.HtmlClassNames;Kekule.ChemWidget.HtmlClassNames=Object.extend(Kekule.ChemWidget.HtmlClassNames,{DIALOG_LOADDATA:"K-Chem-Dialog-LoadData",DIALOG_LOADDATA_FORMATBOX:"K-Chem-Dialog-LoadData-FormatBox",DIALOG_LOADDATA_SRCEDITOR_REGION:"K-Chem-Dialog-LoadData-SrcEditorRegion",DIALOG_LOADDATA_SRCEDITOR:"K-Chem-Dialog-LoadData-SrcEditor",DIALOG_LOADDATA_BTN_LOADFROMFILE:"K-Chem-Dialog-LoadData-Btn-LoadFromFile",DIALOG_LOADAPPENDDATA:"K-Chem-Dialog-LoadAppendData",DIALOG_LOADAPPENDDATA_APPENDCHECKBOX:"K-Chem-Dialog-LoadAppendData-AppendCheckBox"}),Kekule.ChemWidget.LoadDataDialog=Class.create(Kekule.Widget.Dialog,{CLASS_NAME:"Kekule.ChemWidget.LoadDataDialog",initialize:function(e,t,r){this._openFileAction=new Kekule.ActionLoadFileData,this._openFileAction.setBinaryDetector(this._detectBinaryFormat),this._openFileAction.update(),this._openFileAction.addEventListener("load",this.reactFileLoad,this),this._sBtnLoadFromFile=Kekule.$L("ChemWidgetTexts.CAPTION_LOADDATA_FROM_FILE"),this._formatItems=null,this.tryApplySuper("initialize",[e,t||Kekule.$L("ChemWidgetTexts.CAPTION_LOADDATA_DIALOG"),r||[Kekule.Widget.DialogButtons.OK,Kekule.Widget.DialogButtons.CANCEL]]),this.setResizable&&this.setResizable(!0)},finalize:function(){this._openFileAction.finalize(),this.tryApplySuper("finalize")},initProperties:function(){this.defineProp("chemObj",{dataType:"Kekule.ChemObject",serializable:!1,setter:null,getter:function(){var e=this.getDataDetails();return e&&e.data?Kekule.IO.loadTypedData(e.data,e.mimeType,e.fileName):null}}),this.defineProp("allowedFormatIds",{dataType:DataType.ARRAY,setter:function(e){this.setPropStoreFieldValue("allowedFormatIds",e),this.updateFormatItems()}}),this.defineProp("defaultFormatId",{dataType:DataType.STRING,setter:function(e){this.setPropStoreFieldValue("defaultFormatId",e),this.updateFormatItems()}}),this.defineProp("dataDetails",{dataType:DataType.HASH,setter:null,serializable:!1})},initPropValues:function(){this.tryApplySuper("initPropValues"),this.setAutoAdjustSizeOnPopup(!0)},doGetWidgetClassName:function(){return this.tryApplySuper("doGetWidgetClassName")+" "+e.DIALOG_LOADDATA},doCreateClientContents:function(t){this.tryApplySuper("doCreateClientContents");var r=this.getDocument();(i=r.createElement("div")).innerHTML=Kekule.$L("ChemWidgetTexts.CAPTION_DATA_FORMAT"),t.appendChild(i),i=r.createElement("div"),t.appendChild(i);var i,o=new Kekule.Widget.SelectBox(this);o.addClassName(e.DIALOG_LOADDATA_FORMATBOX),o.appendToElem(i),this._formatSelector=o,this.updateFormatItems(),(i=r.createElement("div")).innerHTML=Kekule.$L("ChemWidgetTexts.CAPTION_DATA_SRC"),t.appendChild(i),(i=r.createElement("div")).className=e.DIALOG_LOADDATA_SRCEDITOR_REGION,t.appendChild(i);var n=new Kekule.Widget.TextEditor(this);n.setWrap("off").setAutoWrapThreshold(!0).setFileDroppable(!0),n.setToolbarPos(Kekule.Widget.Position.BOTTOM),n.addClassName(e.DIALOG_LOADDATA_SRCEDITOR),n.appendToElem(i),this._dataEditor=n},getFormatSelectorItems:function(e){for(var t=[],r=this.getAllowedFormatIds()||Kekule.IO.ChemDataReaderManager.getAllReadableFormatIds(),i=this.getDefaultFormatId(),o=0,n=r.length;o<n;++o){var a=Kekule.IO.DataFormatsManager.getFormatInfo(r[o]);if(a){for(var s=Kekule.ArrayUtils.clone(Kekule.ArrayUtils.toArray(a.fileExts)),l=0,d=s.length;l<d;++l)s[l]="*."+s[l];var u=s.join(", "),c=a.title;u&&(c+=" ("+u+")");var p=i&&i===a.id;t.push({value:a.id,formatId:a.id,text:c,title:a.mimeType,data:a,selected:p})}}return t.sort(function(e,t){return e.text<t.text?-1:e.text>t.text?1:0}),t},getFileFilters:function(e){for(var t=[],r=0,i=e.length;r<i;++r){var o=e[r],n=o.data,a=o.text||o.title||o.value,s=Kekule.ArrayUtils.toArray(n.fileExts);t.push({title:a,filter:"."+s.join(",.")})}return t.push(Kekule.NativeServices.FILTER_ALL_SUPPORT),t.push(Kekule.NativeServices.FILTER_ANY),t},updateFormatItems:function(){this._formatItems=this.getFormatSelectorItems(),this._formatSelector.setItems(this._formatItems);var e=this.getFileFilters(this._formatItems);this._openFileAction.setFilters(e)},doSetButtons:function(t){var r=t||[];r.indexOf(this._sBtnLoadFromFile)<0&&r.unshift(this._sBtnLoadFromFile),this.tryApplySuper("doSetButtons",[r]);var i=this.getDialogButton(this._sBtnLoadFromFile);i.setAction(this._openFileAction),i.linkStyleResource(Kekule.Widget.StyleResourceNames.BUTTON_LOAD_FILE),i.addClassName(e.DIALOG_LOADDATA_BTN_LOADFROMFILE),i.setEnabled(this._openFileAction.getEnabled())},reactFileLoad:function(e){var t=e.data,r=e.fileName;try{if(e.success&&Kekule.ObjUtils.notUnset(t)&&r){this.setPropStoreFieldValue("dataDetails",{data:t,fileName:r});var i=Kekule.Widget.DialogButtons.OK;this.close(i)}else null}catch(e){Kekule.error(e)}},open:function(e,t,r){return this.setPropStoreFieldValue("dataDetails",{}),this.tryApplySuper("open",[e,t,r])},close:function(e){var t=this.getDataDetails();if((!t||!t.data&&!t.fileName)&&this.isPositiveResult(e)){var r=this._dataEditor.getValue(),i=this._formatSelector.getSelectedItemData(),o=i.id,n=i.mimeType;try{this.setPropStoreFieldValue("dataDetails",{data:r,mimeType:n,formatId:o})}catch(e){Kekule.raise(e,Kekule.ExceptionLevel.ERROR)}}return this.tryApplySuper("close",[e])},_detectBinaryFormat:function(e,t){if(t&&e){var r=Kekule.UrlUtils.extractFileExt(e),i=Kekule.IO.DataFormatsManager.findFormat(null,r);if(i)return Kekule.IO.ChemDataType.isBinaryType(i.dataType)}return!1}}),Kekule.ChemWidget.LoadOrAppendDataDialog=Class.create(Kekule.ChemWidget.LoadDataDialog,{CLASS_NAME:"Kekule.ChemWidget.LoadOrAppendDataDialog",initialize:function(e,t,r){this._appendCheckBox=null,this.tryApplySuper("initialize",[e,t,r])},initProperties:function(){this.defineProp("displayAppendCheckBox",{dataType:DataType.BOOL}),this.defineProp("isAppending",{dataType:DataType.BOOL,serializable:!1,getter:function(){return this._appendCheckBox&&this._appendCheckBox.getChecked()},setter:function(e){this._appendCheckBox&&this._appendCheckBox.setChecked(!!e)}})},doGetWidgetClassName:function(){return this.tryApplySuper("doGetWidgetClassName")+" "+e.DIALOG_LOADAPPENDDATA},doCreateClientContents:function(t){this.tryApplySuper("doCreateClientContents",[t]);this.getDocument();var r=new Kekule.Widget.CheckBox(this);r.addClassName(e.DIALOG_LOADAPPENDDATA_APPENDCHECKBOX),r.setText(Kekule.$L("ChemWidgetTexts.CAPTION_LOADDATA_DIALOG_APPENDMODE")),r.appendToElem(t),r.setDisplayed(this.getDisplayAppendCheckBox()),this._appendCheckBox=r},open:function(e,t,r){return this.setIsAppending(!1),this._appendCheckBox.setDisplayed(this.getDisplayAppendCheckBox()),this.tryApplySuper("open",[e,t,r])}})}(),function(){"use strict";var e=Kekule.DomUtils,t=Kekule.HtmlElementUtils,r=Kekule.Widget.HtmlClassNames,i=Kekule.ChemWidget.HtmlClassNames;Kekule.ChemWidget.HtmlClassNames=Object.extend(Kekule.ChemWidget.HtmlClassNames,{PERIODIC_TABLE:"K-Chem-Periodic-Table",PERIODIC_TABLE_MINI:"K-Chem-Periodic-Table-Mini",PERIODIC_TABLE_LEGEND:"K-Chem-Periodic-Table-Legend",PERIODIC_TABLE_LEGEND_CONTENT:"K-Chem-Periodic-Table-Legend-Content",PERIODIC_TABLE_LEGEND_COLORS:"K-Chem-Periodic-Table-Legend-Colors",PERIODIC_TABLE_LEGEND_COLOR:"K-Chem-Periodic-Table-Legend-Color",PERIODIC_TABLE_MAINTABLE:"K-Chem-Periodic-Table-MainTable",PERIODIC_TABLE_EXTRATABLE:"K-Chem-Periodic-Table-ExtraTable",PERIODIC_TABLE_ELEM_CELL:"K-Chem-Periodic-Table-Elem-Cell",PERIODIC_TABLE_ELEM_STUBSCELL:"K-Chem-Periodic-Table-Elem-StubsCell",PERIODIC_TABLE_ELEM_CELL_CONTENT:"K-Chem-Periodic-Table-Elem-Cell-Content",PERIODIC_TABLE_LEGEND_ELEM_CELL_CONTENT:"K-Chem-Periodic-Table-Elem-Cell-Content",PERIODIC_TABLE_HEAD_CELL:"K-Chem-Periodic-Table-Head-Cell",PERIODIC_TABLE_HEAD_CELL_CONTENT:"K-Chem-Periodic-Table-Head-Cell-Content",PERIODIC_TABLE_HEAD_CELL_GROUP:"K-Chem-Periodic-Table-Head-Cell-Group",PERIODIC_TABLE_HEAD_CELL_PERIOD:"K-Chem-Periodic-Table-Head-Cell-Period",ELEM_SYMBOL:"K-Chem-Elem-Symbol",ELEM_SYMBOL_STUBS:"K-Chem-Elem-Symbol-Stubs",ELEM_NAME:"K-Chem-Elem-Name",ATOMIC_NUM:"K-Chem-Atomic-Num",ATOMIC_WEIGHT:"K-Chem-Atomic-Weight"}),Kekule.globalOptions.add("chemWidget.periodicTable",{displayedComponents:["symbol","name","atomicNumber","groupHead","legend"]}),Kekule.ChemWidget.PeriodicTable=Class.create(Kekule.ChemWidget.AbstractWidget,{CLASS_NAME:"Kekule.ChemWidget.PeriodicTable",BINDABLE_TAG_NAMES:["span","div"],ELEM_DATA_FIELD:"__$elemData__",MAX_GROUP:18,MAX_PERIOD:7,LA_SERIES:["La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb","Lu"],AC_SERIES:["Ac","Th","Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr"],initialize:function(e,t){this.setPropStoreFieldValue("displayedComponents",t||this.getDefaultDisplayedComponents()),this._elemCells=[],this._selectedElemCells=[],this.tryApplySuper("initialize",[e]),this.setEnableSelect(!0),this.setEnableMultiSelect(!0)},initProperties:function(){this.defineProp("displayedComponents",{dataType:DataType.ARRAY,getter:function(){return this.getPropStoreFieldValue("displayedComponents")||this.getDefaultDisplayedComponents()}}),this.defineProp("startingAtomNum",{dataType:DataType.INT}),this.defineProp("endingAtomNum",{dataType:DataType.INT}),this.defineProp("startingElementSymbol",{dataType:DataType.INT,serializable:!1,getter:function(){var e=this.getStartingAtomNum();return e&&Kekule.ChemicalElementsDataUtil.getElementSymbol(e)},setter:function(e){this.setStartingAtomNum(e&&Kekule.ChemicalElementsDataUtil.getAtomicNumber(e)||null)}}),this.defineProp("endingElementSymbol",{dataType:DataType.INT,serializable:!1,getter:function(){var e=this.getEndingAtomNum();return e&&Kekule.ChemicalElementsDataUtil.getElementSymbol(e)},setter:function(e){this.setEndingAtomNum(e&&Kekule.ChemicalElementsDataUtil.getAtomicNumber(e)||null)}}),this.defineProp("enabledElementSymbols",{dataType:DataType.ARRAY}),this.defineProp("disabledElementSymbols",{dataType:DataType.ARRAY}),this.defineProp("useMiniMode",{dataType:DataType.BOOL,setter:function(e){this.setPropStoreFieldValue("useMiniMode",e),e?this.addClassName(i.PERIODIC_TABLE_MINI):this.removeClassName(i.PERIODIC_TABLE_MINI)}}),this.defineProp("enableSelect",{dataType:DataType.BOOL,getter:function(){return this.getPropStoreFieldValue("enableSelect")||this.getEnableMultiSelect()}}),this.defineProp("enableMultiSelect",{dataType:DataType.BOOL}),this.defineProp("selected",{dataType:DataType.HASH,serializable:!1,setter:null,getter:function(){return this.getSelection()?this.getSelection()[0]:null}}),this.defineProp("selection",{dataType:DataType.ARRAY,serializable:!1,setter:null,getter:function(){for(var e=[],t=this._selectedElemCells||[],r=0,i=t.length;r<i;++r){var o=t[r][this.ELEM_DATA_FIELD];o&&e.push(o)}return e}}),this.defineProp("selectedSymbol",{dataType:DataType.STRING,getter:function(){return this.getSelectedSymbols()[0]},setter:function(e){this.setSelectedSymbols([e])}}),this.defineProp("selectedSymbols",{dataType:DataType.ARRAY,getter:function(){var e=this.getSelection();if(e){for(var t=[],r=0,i=e.length;r<i;++r)t.push(e[r].symbol);return t}return[]},setter:function(e){this.selectSymbols(e)}})},doGetWidgetClassName:function(){return this.tryApplySuper("doGetWidgetClassName")+" "+i.PERIODIC_TABLE},doCreateRootElement:function(e){return e.createElement("div")},doCreateSubElements:function(e,t){var r=this.tryApplySuper("doCreateSubElements",[e,t]),i=this.createMainTable(e,t);return r.concat([i])},doObjectChange:function(e){var t=["displayedComponents","startingAtomNum","endingAtomNum"];Kekule.ArrayUtils.intersect(e,t).length&&this.recreateMainTable(),t=["enabledElementSymbols","disabledElementSymbols"],Kekule.ArrayUtils.intersect(e,t).length&&this.updateCellEnableStates()},getDefaultDisplayedComponents:function(){return Kekule.globalOptions.chemWidget.periodicTable.displayedComponents},getShowElemSymbol:function(){return this.getDisplayedComponents().indexOf("symbol")>=0},getShowElemName:function(){return this.getDisplayedComponents().indexOf("name")>=0},getShowAtomicNum:function(){return this.getDisplayedComponents().indexOf("atomicNumber")>=0},getShowAtomicWeight:function(){return this.getDisplayedComponents().indexOf("atomicWeight")>=0},getShowGroupHead:function(){return this.getDisplayedComponents().indexOf("groupHead")>=0},getShowPeriodHead:function(){return this.getDisplayedComponents().indexOf("periodHead")>=0},getShowLegend:function(){return this.getDisplayedComponents().indexOf("legend")>=0},recreateMainTable:function(){this.deselectAll();var t=this.getElement();e.clearChildContent(t),this.createMainTable(t.ownerDocument,t)},createMainTable:function(t,o){var n=Kekule.chemicalElementsData,a=[];this._elemCells=[];for(var s=[],l=[],d=t.createElement("table"),u=0;u<=this.MAX_PERIOD;++u){for(var c=t.createElement("tr"),p=[],h=0;h<=this.MAX_GROUP;++h){var g=t.createElement("td");c.appendChild(g),p.push(g)}d.appendChild(c),a.push(p)}var C=t.createElement("table");for(u=0;u<2;++u){for(c=t.createElement("tr"),p=[],h=0;h<this.LA_SERIES.length;++h){g=t.createElement("td");c.appendChild(g),p.push(g)}C.appendChild(c),s.push(p)}for(var _=this.getStartingAtomNum()||0,m=this.getEndingAtomNum()||3e5,f=0,S=n.length;f<S;++f){var O=n[f],y=O.atomicNumber;if(!(y<_||y>m)){var E=O.symbol,T=O.period,A=O.group,k=O.chemicalSerie.replace(/\s/g,"");Kekule.ArrayUtils.pushUnique(l,O.chemicalSerie);var b=this.LA_SERIES.indexOf(E),I=this.AC_SERIES.indexOf(E);b>=0?g=s[0][b]:I>=0?g=s[1][I]:T&&A&&(g=a[T][A]),g&&(g.className=i.PERIODIC_TABLE_ELEM_CELL,g.appendChild(this.createElemCellContent(t,O,k.upperFirst())),g[this.ELEM_DATA_FIELD]=O,this._elemCells.push(g)),0!==b&&0!==I||((g=a[T][A]).className=i.PERIODIC_TABLE_ELEM_STUBSCELL,g.appendChild(this.createElemCellStubsContent(t,O,k.upperFirst())))}}if(this.getShowGroupHead()){var D=["IA","IIA","IIIB","IVB","VB","VIB","VIIB","","VIII","","IB","IIB","IIIA","IVA","VA","VIA","VIIA","VIIIA"];for(h=1;h<=this.MAX_GROUP;++h){(g=a[u=1===h||18===h?0:2===h||h>=13?1:3][h]).className=i.PERIODIC_TABLE_HEAD_CELL+" "+i.PERIODIC_TABLE_HEAD_CELL_GROUP,g.appendChild(this.createHeadContent(t,D[h-1]))}}if(this.getShowPeriodHead())for(u=1;u<=this.MAX_PERIOD;++u){(g=a[u][0]).className=i.PERIODIC_TABLE_HEAD_CELL+" "+i.PERIODIC_TABLE_HEAD_CELL_PERIOD,g.appendChild(this.createHeadContent(t,u))}if(o.appendChild(d),this.getShowLegend()){var P=t.createElement("a");P.href="javascript:void(0)",P.className=i.PERIODIC_TABLE_LEGEND+" "+r.CORNER_ALL,e.setElementText(P,Kekule.$L("ChemWidgetTexts.LEGEND_CAPTION"));var v=t.createElement("div");v.className=i.PERIODIC_TABLE_LEGEND_CONTENT+" "+r.CORNER_ALL;var R={symbol:Kekule.$L("ChemWidgetTexts.LEGEND_ELEM_SYMBOL"),atomicNumber:Kekule.$L("ChemWidgetTexts.LEGEND_ATOMIC_NUM"),naturalMass:Kekule.$L("ChemWidgetTexts.LEGEND_ATOMIC_WEIGHT"),name:Kekule.$L("ChemWidgetTexts.LEGEND_ELEM_NAME")},K=this.createElemCellContent(t,R,i.PERIODIC_TABLE_LEGEND_ELEM_CELL_CONTENT);v.appendChild(K);var M=t.createElement("div");M.className=i.PERIODIC_TABLE_LEGEND_COLORS;for(f=0,S=l.length;f<S;++f){var N=t.createElement("div");N.className=i.PERIODIC_TABLE_LEGEND_COLOR+" "+l[f].replace(/\s/g,""),e.setElementText(N,l[f]),M.appendChild(N)}v.appendChild(M),P.appendChild(v),o.appendChild(P)}return o.appendChild(C),this.updateCellEnableStates(),d},createElemCellContent:function(e,t,r){var o=e.createElement("div"),n=i.PERIODIC_TABLE_ELEM_CELL_CONTENT;if(r&&(n+=" "+r),o.className=n,this.getShowAtomicNum()&&o.appendChild(this.createElemContentComponent(e,t.atomicNumber,i.ATOMIC_NUM)),this.getShowAtomicWeight()){var a=t.naturalMass;if(a){var s="number"==typeof a?a.toFixed(3):a;o.appendChild(this.createElemContentComponent(e,s,i.ATOMIC_WEIGHT))}else o.appendChild(this.createElemContentComponent(e," ",i.ATOMIC_WEIGHT))}return this.getShowElemSymbol()&&o.appendChild(this.createElemContentComponent(e,t.symbol,i.ELEM_SYMBOL)),this.getShowElemName()&&o.appendChild(this.createElemContentComponent(e,t.name,i.ELEM_NAME)),o},createElemCellStubsContent:function(e,t,r){var o,n,a,s=e.createElement("div");return s.className=i.PERIODIC_TABLE_ELEM_CELL_CONTENT+" "+(r||""),a=t.chemicalSerie,"La"===t.symbol?(o="57-71",n="La-Lu"):(o="89-103",n="Ac-Lr"),this.getShowAtomicNum()&&s.appendChild(this.createElemContentComponent(e,o,i.ATOMIC_NUM)),this.getShowElemSymbol()&&s.appendChild(this.createElemContentComponent(e,n,i.ELEM_SYMBOL_STUBS,!0)),this.getShowElemName()&&s.appendChild(this.createElemContentComponent(e,a,i.ELEM_NAME)),s},createElemContentComponent:function(t,r,i,o){var n=t.createElement("span");if(n.className=i,o){var a=t.createElement("span");n.appendChild(a)}return e.setElementText(a||n,r),n},createHeadContent:function(t,r,o){var n=t.createElement("div");return n.className=i.PERIODIC_TABLE_HEAD_CELL_CONTENT+" "+(o||""),e.setElementText(n,r),n},updateCellEnableStates:function(){var e=this.getEnabledElementSymbols()||[],t=!e.length&&this.getDisabledElementSymbols()||[];if(t.length||e.length)for(var r=this._elemCells,i=0,o=r.length;i<o;++i){var n=this._getCellData(r[i]).symbol;e.length?e.indexOf(n)<0&&this.setCellEnableState(r[i],!1):t.length&&t.indexOf(n)>=0&&this.setCellEnableState(r[i],!1)}},setCellEnableState:function(e,i){i?(t.removeClass(e,r.STATE_DISABLED),this._getCellData(e).disabled=null):(t.addClass(e,r.STATE_DISABLED),this._getCellData(e).disabled=!0)},_getCellData:function(e){return e[this.ELEM_DATA_FIELD]},_isCellDisabled:function(e){return!!this._getCellData(e).disabled},_getAtomCellElem:function(t){var r=e.getNearestAncestorByTagName(t,"td",!0);return r&&this._elemCells.indexOf(r)>=0?r:null},_getCellElemOfSymbol:function(e){for(var t=this._elemCells,r=0,i=t.length;r<i;++r){var o=t[r];if(o[this.ELEM_DATA_FIELD].symbol===e)return o}return null},isCellSelected:function(e){return this._selectedElemCells.indexOf(e)>=0},selectCell:function(e){e&&(t.addClass(e,r.STATE_SELECTED),Kekule.ArrayUtils.pushUnique(this._selectedElemCells,e),this.invokeEvent("select",{elemData:e[this.ELEM_DATA_FIELD]}))},deselectCell:function(e){e&&(t.removeClass(e,r.STATE_SELECTED),Kekule.ArrayUtils.remove(this._selectedElemCells,e),this.invokeEvent("deselect",{elemData:e[this.ELEM_DATA_FIELD]}))},toggleCell:function(e){this.isCellSelected(e)?this.deselectCell(e):this.selectCell(e)},deselectAll:function(){for(var e=this._selectedElemCells,t=e.length-1;t>=0;--t)this.deselectCell(e[t]);return this},selectSymbols:function(e){this.deselectAll();for(var t=Kekule.ArrayUtils.toArray(e),r=0,i=t.length;r<i;++r){var o=this._getCellElemOfSymbol(t[r]);o&&this.selectCell(o)}return this},react_click:function(e){if(this.getEnableSelect()){var t=e.getTarget(),r=this._getAtomCellElem(t);if(r&&!this._isCellDisabled(r))return this.getEnableMultiSelect()?this.toggleCell(r):(this.deselectAll(),this.selectCell(r)),!0}this.tryApplySuper("react_click",[e])}})}(),function(){"use strict";var e=Class.PropertyScope,t=Kekule.ArrayUtils,r=(Kekule.DomUtils,Kekule.ZoomUtils),i=(Kekule.ChemWidget,Kekule.Widget.HtmlClassNames),o=Kekule.ChemWidget.HtmlClassNames;Kekule.ChemWidget.HtmlClassNames=Object.extend(Kekule.ChemWidget.HtmlClassNames,{DISPLAYER_DRAWCONTEXT_PARENT:"K-Chem-Displayer-DrawContext-Parent",ACTION_MOL_DISPLAY_TYPE:"K-Chem-MolDisplayType",ACTION_MOL_DISPLAY_SKELETAL:"K-Chem-MolDisplaySkeletal",ACTION_MOL_DISPLAY_CONDENSED:"K-Chem-MolDisplayCondensed",ACTION_MOL_DISPLAY_WIRE:"K-Chem-MolDisplayWire",ACTION_MOL_DISPLAY_BALLSTICK:"K-Chem-MolDisplayBallStick",ACTION_MOL_DISPLAY_STICKS:"K-Chem-MolDisplaySticks",ACTION_MOL_DISPLAY_SPACEFILL:"K-Chem-MolDisplaySpaceFill",ACTION_MOL_HIDE_HYDROGENS:"K-Chem-MolHideHydrogens",ACTION_MOL_AUTO_COORD_GENERATION:"K-Chem-MolAutoCoordGeneration",ACTION_ZOOMIN:"K-Chem-ZoomIn",ACTION_ZOOMOUT:"K-Chem-ZoomOut",ACTION_RESET:"K-Chem-Reset",ACTION_COPY:"K-Chem-Copy",ACTION_RESET_ZOOM:"K-Chem-ResetZoom",ACTION_LOADFILE:"K-Chem-LoadFile",ACTION_LOADDATA:"K-Chem-LoadData",ACTION_SAVEFILE:"K-Chem-SaveFile",ACTION_CLEAROBJS:"K-Chem-ClearObjs",ACTION_CONFIG:"K-Chem-Config",DIALOG_CHOOSE_FILE_FORAMT:"K-Chem-Dialog-Choose-File-Format",DIALOG_CHOOSE_FILE_FORAMT_FORMATBOX:"K-Chem-Dialog-Choose-File-Format-FormatBox",DIALOG_CHOOSE_FILE_FORAMT_PREVIEWER_REGION:"K-Chem-Dialog-Choose-File-Format-PreviewerRegion",DIALOG_CHOOSE_FILE_FORAMT_PREVIEWER:"K-Chem-Dialog-Choose-File-Format-Previewer"}),Kekule.ChemWidget.ChemObjDisplayerConfigs=Class.create(Kekule.AbstractConfigs,{CLASS_NAME:"Kekule.ChemWidget.ChemObjDisplayerConfigs",initProperties:function(){this.addConfigProp("ioConfigs","Kekule.ChemWidget.ChemObjDisplayerIOConfigs"),this.addConfigProp("environment2DConfigs","Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs"),this.addConfigProp("environment3DConfigs","Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs")},initPropValues:function(){this.tryApplySuper("initPropValues"),this.setPropStoreFieldValue("ioConfigs",new Kekule.ChemWidget.ChemObjDisplayerIOConfigs),this.setPropStoreFieldValue("environment2DConfigs",new Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs),this.setPropStoreFieldValue("environment3DConfigs",new Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs)}}),Kekule.ChemWidget.ChemObjDisplayerIOConfigs=Class.create(Kekule.AbstractConfigs,{CLASS_NAME:"Kekule.ChemWidget.ChemObjDisplayerIOConfigs",initProperties:function(){this.addBoolConfigProp("canonicalizeBeforeSave",!0),this.addBoolConfigProp("autoGenerateCoordsAfterLoad",!0)}}),Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs=Class.create(Kekule.AbstractConfigs,{CLASS_NAME:"Kekule.ChemWidget.ChemObjDisplayerEnvironmentConfigs",initProperties:function(){this.addBoolConfigProp("antialias",!1),this.addFloatConfigProp("antialiasBlurRatio",0),this.addFloatConfigProp("overSamplingRatio",1)}}),Kekule.ChemWidget.ChemObjDisplayer=Class.create(Kekule.ChemWidget.AbstractWidget,{CLASS_NAME:"Kekule.ChemWidget.ChemObjDisplayer",initialize:function(e,t,r,i){this._paintFlag=0,this._bgColorMap={},this._contextTransformOpsMap=new Kekule.MapEx,this._reactChemObjDrawBind=this._reactChemObjDraw.bind(this),this.setPropStoreFieldValue("resetAfterLoad",!0),this.setPropStoreFieldValue("renderType",r||Kekule.Render.RendererType.R2D),this.setPropStoreFieldValue("displayerConfigs",i||this.createDefaultConfigs()),this.tryApplySuper("initialize",[e]),t&&this.setChemObj(t),this.setEnableLoadNewFile(!0)},doFinalize:function(){this.clearSubViews(),this.setPropStoreFieldValue("chemObj",null),this.getPainter().finalize();var e=this.getPropStoreFieldValue("drawBridge"),t=this.getPropStoreFieldValue("drawContext");t&&e&&e.releaseContext(t),e&&e.finalize&&e.finalize(),this.setPropStoreFieldValue("drawBridge",null),this.setPropStoreFieldValue("drawContext",null),this._contextTransformOpsMap&&this._contextTransformOpsMap.finalize(),this.tryApplySuper("doFinalize")},initProperties:function(){this.defineProp("displayerConfigs",{dataType:"Kekule.ChemWidget.ChemObjDisplayerConfigs",serializable:!1,scope:e.PUBLIC}),this.defineProp("enableLoadNewFile",{dataType:DataType.BOOL}),this.defineProp("allowedInputFormatIds",{dataType:DataType.ARRAY}),this.defineProp("allowedOutputFormatIds",{dataType:DataType.ARRAY}),this.defineProp("defaultInputFormatId",{dataType:DataType.STRING,serializable:!1}),this.defineProp("defaultOutputFormatId",{dataType:DataType.STRING,serializable:!1}),this.defineProp("standardizationOptions",{dataType:DataType.HASH}),this.defineProp("resetAfterLoad",{dataType:DataType.BOOL}),this.defineProp("chemObj",{dataType:"Kekule.ChemObject",serializable:!1,scope:e.PUBLISHED,setter:function(e){var t=this.getPropStoreFieldValue("chemObj");this.setPropStoreFieldValue("chemObj",e),this.chemObjChanged(e,t)}}),this.defineProp("chemObjData",{dataType:DataType.STRING,serializable:!1,getter:null,setter:function(e){var t,r;(t="object"==typeof e?e:JSON.parse(e))&&((r=t.format?Kekule.IO.loadFormatData(t.data,t.format):t.mimeType?Kekule.IO.loadMimeData(t.data,t.mimeType):null)&&this._tryAutoGenerateChemObjCoordsAndLoad(r))}}),this.defineProp("chemObjLoaded",{dataType:DataType.BOOL,serializable:!1,scope:e.PUBLIC,setter:null,getter:function(){return this.getChemObj()&&this.getPropStoreFieldValue("chemObjLoaded")}}),this.defineProp("renderType",{dataType:DataType.INT,serializable:!1,enumSource:Kekule.Render.RendererType,scope:e.PUBLISHED,setter:function(e){if(this.getAllowRenderTypeChange()){var t=this.getRenderType();e!==t&&(this.setPropStoreFieldValue("renderType",e),this.resetRenderType(t,e))}else Kekule.error(Kekule.$L("ErrorMsg.RENDER_TYPE_CHANGE_NOT_ALLOWED"))}}),this.defineProp("renderConfigs",{dataType:DataType.OBJECT,serializable:!1,scope:e.PUBLIC,getter:function(){var e=this.getPropStoreFieldValue("renderConfigs");return e||(e=this.getRenderType()===Kekule.Render.RendererType.R3D?Kekule.Render.Render3DConfigs.getInstance():Kekule.Render.Render2DConfigs.getInstance()),e},setter:function(e){this.setPropStoreFieldValue("renderConfigs",e);var t=this.getPropStoreFieldValue("painter");t&&t.setRenderConfigs(this.getRenderConfigs())}}),this.defineProp("backgroundColor",{dataType:DataType.STRING,scope:e.PUBLISHED,setter:function(e){this.setPropStoreFieldValue("backgroundColor",e),this._bgColorMap[this.getRenderType().toString()]=e,this.backgroundColorChanged()}}),this.defineProp("inheritedRenderStyles",{dataType:DataType.ARRAY,scope:e.PUBLIC,getter:function(){var e=this.getPropStoreFieldValue("inheritedRenderStyles");return e||(e=[],this.setPropStoreFieldValue("inheritedRenderStyles",e)),e},setter:function(e){this.setPropStoreFieldValue("inheritedRenderStyles",e||[]),this.requestRepaint()}}),this.defineProp("inheritedRenderColor",{dataType:DataType.BOOL,scope:e.PUBLISHED,getter:function(){var e=this.getInheritedRenderStyles();return!!(e&&e.indexOf("color")>=0)},setter:function(e){if(!!e!==this.getInheritedRenderColor()){var t=this.getInheritedRenderStyles();e?t.push("color"):Kekule.ArrayUtils.remove(t,"color"),this.setInheritedRenderStyles(t)}}}),this.defineProp("inheritedRenderBackgroundColor",{dataType:DataType.BOOL,scope:e.PUBLISHED,getter:function(){var e=this.getInheritedRenderStyles();return!!(e&&e.indexOf("backgroundColor")>=0)},setter:function(e){if(!!e!==this.getInheritedRenderBackgroundColor()){var t=this.getInheritedRenderStyles();e?t.push("backgroundColor"):Kekule.ArrayUtils.remove(t,"backgroundColor"),this.setInheritedRenderStyles(t)}}}),this.defineProp("enableCustomCssProperties",{dataType:DataType.BOOL,setter:function(e){e!=this.getEnableCustomCssProperties()&&(this.setPropStoreFieldValue("enableCustomCssProperties",!!e),this.requestRepaint())}}),this.defineProp("transformParams",{dataType:DataType.HASH,serializable:!1,scope:e.PUBLIC,getter:function(){var e=Object.extend({},this.getDrawOptions());return e.screenCoordOffset=this.getBaseCoordOffset(),e},setter:function(e){var t=e||{};this.setDrawOptions(t),this.setBaseCoordOffset(t.baseCoordOffset),this.drawOptionChanged()}}),this.defineProp("drawOptions",{dataType:DataType.HASH,serializable:!1,scope:e.PUBLIC,getter:function(){var e=this.getPropStoreFieldValue("drawOptions");return e||(e={},this.setPropStoreFieldValue("drawOptions",e)),e},setter:function(e){this.setPropStoreFieldValue("drawOptions",e),this.drawOptionChanged()}}),this.defineProp("zoom",{dataType:DataType.FLOAT,serializable:!1,getter:function(){return(this.getDrawOptions()||{}).zoom},setter:function(e){return this.zoomTo(e),this}}),this.defineProp("initialZoom",{dataType:DataType.FLOAT}),this.defineProp("autofit",{dataType:DataType.BOOL,serializable:!1,getter:function(){return(this.getDrawOptions()||{}).autofit},setter:function(e){var t=this.getDrawOptions()||{};return t.autofit=e,this.setDrawOptions(t)}}),this.defineProp("autoShrink",{dataType:DataType.BOOL,serializable:!1,getter:function(){return(this.getDrawOptions()||{}).autoShrink},setter:function(e){var t=this.getDrawOptions()||{};return t.autoShrink=e,this.setDrawOptions(t)}}),this.defineProp("moleculeDisplayType",{dataType:DataType.INT,serializable:!1,getter:function(){return(this.getDrawOptions()||{}).moleculeDisplayType},setter:function(e){return this.getDrawOptions().moleculeDisplayType=e,this.drawOptionChanged(),this}}),this.defineProp("hideHydrogens",{dataType:DataType.BOOL,serializable:!1,getter:function(){return(this.getDrawOptions()||{}).hideHydrogens},setter:function(e){return this.getDrawOptions().hideHydrogens=!!e,this.drawOptionChanged(),this}}),this.defineProp("allowCoordBorrow",{dataType:DataType.BOOL,serializable:!1,scope:e.PUBLIC,getter:function(){return Kekule.oneOf(this.getDrawOptions().allowCoordBorrow,this.getRenderConfigs().getGeneralConfigs().getAllowCoordBorrow())}}),this.defineProp("autoSize",{dataType:DataType.BOOL,serializable:!1,setter:function(e){e!=this.getAutoSize()&&(this.setPropStoreFieldValue("autoSize",e),e&&this.allowAutoSize()&&this.drawOptionChanged())}}),this.defineProp("padding",{dataType:DataType.INT,serializable:!1,setter:function(e){e!=this.getPadding()&&(this.setPropStoreFieldValue("padding",e),this.getDrawOptions().autofitContextPadding=e,this.drawOptionChanged())}}),this.defineProp("baseCoordOffset",{dataType:DataType.Hash,serializable:!1,setter:function(e){this.setPropStoreFieldValue("baseCoordOffset",e),this.getChemObjLoaded()&&this.repaint()}}),this.defineProp("drawBridge",{dataType:DataType.OBJECT,serializable:!1,scope:e.PRIVATE,setter:null,getter:function(e){var t=this.getPropStoreFieldValue("drawBridge");return t||this.__$drawBridgeInitialized$__||(this.__$drawBridgeInitialized$__=!0,t=this.createDrawBridge(),this.setPropStoreFieldValue("drawBridge",t)),t}}),this.defineProp("drawContext",{dataType:DataType.OBJECT,serializable:!1,scope:e.PRIVATE,setter:null,getter:function(){var e=this.getPropStoreFieldValue("drawContext");if(!e){var t=this.getDrawBridge();if(t){var r=this.getDrawContextParentElem();if(!r)return null;var i=Kekule.HtmlElementUtils.getElemOffsetDimension(r);e=t.createContext(r,i.width,i.height,this.getContextCreationParams(this.getRenderType(),t)),this.setPropStoreFieldValue("drawContext",e)}}return e}}),this.defineProp("painter",{dataType:"Kekule.Render.ChemObjPainter",serializable:!1,scope:e.PRIVATE,setter:null,getter:function(){var e=this.getPropStoreFieldValue("painter");return e||(e=this.createNewPainter()),e}}),this.defineProp("rootRenderer",{dataType:"Kekule.Render.AbstractRenderer",serializable:!1,scope:e.PRIVATE,setter:null,getter:function(){var e=this.getPainter();return e?e.getRenderer():null}}),this.defineProp("boundInfoRecorder",{dataType:"Kekule.Render.BoundInfoRecorder",serializable:!1,scope:Class.PropertyScope.PRIVATE,setter:null,getter:function(){var e=this.getRootRenderer();return e&&e.getBoundInfoRecorder()}}),this.defineProp("subViews",{dataType:DataType.ARRAY,serializable:!1,setter:null,getter:function(e){var t=this.getPropStoreFieldValue("subViews");return!t&&e&&(t=[],this.setPropStoreFieldValue("subViews",t)),t}})},initPropValues:function(){this.tryApplySuper("initPropValues"),this.setStandardizationOptions({unmarshalSubFragments:!1,clearHydrogens:!1})},doEndUpdate:function(e){this.tryApplySuper("doEndUpdate",[e]),this._requestRepainting&&this.repaint(this._requestRepainting.overrideOptions)},elementBound:function(e){this.setObserveElemResize(!0)},doWidgetShowStateChanged:function(e){this.tryApplySuper("doWidgetShowStateChanged",[e]),e&&this.setChemObj(this.getChemObj())},doFileDragDrop:function(e){if(e){var t=this;return function(){Kekule.IO.loadFileData(e[0],function(e,r){r&&t.setChemObj(e)})}.defer(),!0}return this.tryApplySuper("doFileDragDrop")},notifyStyleAttribChanged:function(e){this.tryApplySuper("notifyStyleAttribChanged",[e]),(this.getInheritedRenderStyles()||[]).length&&this.requestRepaint()},getAllowRenderTypeChange:function(){return!1},resetRenderType:function(e,t){var r=this.getChemObj(),i=this.getPropStoreFieldValue("drawBridge"),o=this.getPropStoreFieldValue("drawContext");i&&o&&i.releaseContext(o),this.setPropStoreFieldValue("drawContext",null),this.setPropStoreFieldValue("drawBridge",null),this.__$drawBridgeInitialized$__=!1;var n=this.getBackgroundColorOfType(t);this.getDrawOptions().moleculeDisplayType=this.getDefaultMoleculeDisplayType(t),this.setPropStoreFieldValue("backgroundColor",n),this.backgroundColorChanged(!0),this._doLoadOnObj(r,{refreshOnly:!0}),this.resetDisplay()},resetRenderEnvironment:function(){return this.resetRenderType(null,this.getRenderType()),this},getDisplayerEnvironmentConfigs:function(){return this.getCoordMode()===Kekule.CoordMode.COORD3D?this.getDisplayerConfigs().getEnvironment3DConfigs():this.getDisplayerConfigs().getEnvironment2DConfigs()},getContextCreationParams:function(e,t){var r=this.getRenderConfigs(),i=this.getDisplayerConfigs();return e===Kekule.Render.RendererType.R3D?{alpha:!0,antialias:r.getEnvironmentConfigs().getAntialias()}:{alpha:!0,antialias:i.getEnvironment2DConfigs().getAntialias(),antialiasBlurRatio:i.getEnvironment2DConfigs().getAntialiasBlurRatio(),overSamplingRatio:i.getEnvironment2DConfigs().getOverSamplingRatio()}},createDefaultConfigs:function(){return new Kekule.ChemWidget.ChemObjDisplayerConfigs},getCoordMode:function(){return this.getRenderType()===Kekule.Render.RendererType.R3D?Kekule.CoordMode.COORD3D:Kekule.CoordMode.COORD2D},setCoordMode:function(e){var t=e===Kekule.CoordMode.COORD3D?Kekule.Render.RendererType.R3D:Kekule.Render.RendererType.R2D;this.setRenderType(t)},loadPredefinedResDataToProp:function(e,t,r){if("chemObj"===e)if(r)try{var i=Kekule.IO.loadTypedData(t.data,t.resType,t.resUri);i||(i=Kekule.IO.loadFormatData(t.data,t.resType)),i?this._tryAutoGenerateChemObjCoordsAndLoad(i):Kekule.error(Kekule.$L("ErrorMsg.LOAD_CHEMDATA_FAILED"))}catch(e){this.reportException(e)}else this.reportException(Kekule.$L("ErrorMsg.CANNOT_LOAD_RES_OF_URI")+t.resUri||"")},reportException:function(e,t){Kekule.raise(e,t||Kekule.ExceptionLevel.ERROR)},createDrawBridge:function(e){var t=this.getRenderType()===Kekule.Render.RendererType.R3D?Kekule.Render.DrawBridge3DMananger:Kekule.Render.DrawBridge2DMananger,r=t.getPreferredBridgeInstance();if(!r&&!e){var i=t.getUnavailableMessage()||Kekule.error(Kekule.$L("ErrorMsg.DRAW_BRIDGE_NOT_SUPPORTED"));i&&this.reportException(i,Kekule.ExceptionLevel.NOT_FATAL_ERROR)}return r},getClientElement:function(){return this.getElement()},getDrawContextParentElem:function(e){var t=this._drawContextParentElem;if(!t&&!e){t=this.getDocument().createElement("div"),this._drawContextParentElem=t,Kekule.HtmlElementUtils.addClass(t,i.DYN_CREATED),Kekule.HtmlElementUtils.addClass(t,o.DISPLAYER_DRAWCONTEXT_PARENT),t.style.width="100%",t.style.height="100%";var r=this.getClientElement(),n=Kekule.DomUtils.getFirstChildElem(r);n?r.insertBefore(t,n):r.appendChild(t)}return t},allowAutoSize:function(){return this.getRenderType()===Kekule.Render.RendererType.R2D},canModifyPartialGraphic:function(e){var t=this.getDrawBridge();return!!t.canModifyGraphic&&t.canModifyGraphic(e||this.getDrawContext())},doInsertedToDom:function(){this.doResize()},doResize:function(){this.refitDrawContext(this.isPainting())},refitDrawContext:function(e){if(this.getDrawBridge()&&this.getDrawContext()){var t=Kekule.HtmlElementUtils.getElemClientDimension(this.getDrawContextParentElem()),r=this.changeContextDimension(t);!e&&r&&this.repaint()}},getContextDimension:function(){return this.getDrawBridge()&&this.getDrawContext()?this.getDrawBridge().getContextDimension(this.getDrawContext()):null},_getContextOverSamplingRatio:function(){var e=this.getDisplayerEnvironmentConfigs();return e.getAntialias&&e.getAntialias()&&e.getOverSamplingRatio&&e.getOverSamplingRatio()||1},changeContextDimension:function(e){return this.doChangeContextDimension(this.getDrawContext(),this.getDrawBridge(),e,!0)},doChangeContextDimension:function(e,t,r,i){if(t&&e){var o=r.width,n=r.height,a=t.getContextElem(e);if(a){var s=this._getContextOverSamplingRatio();if(1!==s&&Kekule.BrowserFeature.cssTranform&&i){var l=1/s;a.style.transform="scale("+l+","+l+")",a.style.transformOrigin="0 0",t.setContextParam(e,"overSamplingRatio",s)}else a.style.transform="",t.setContextParam(e,"overSamplingRatio",null)}return this._resizeContext(e,t,o,n),!0}return!1},_resizeContext:function(e,t,r,i){e&&t&&t.setContextDimension(e,r,i)},clearContext:function(){var e=this.getPropStoreFieldValue("drawContext");if(e){var t=this.getPropStoreFieldValue("painter");t&&t.clear(e),this.getDrawBridge().clearContext(e)}},createNewPainter:function(e){var t=this.getPropStoreFieldValue("painter");t&&(t.removeEventListener("draw",this._reactChemObjDrawBind),t.finalize());var r=this.getDrawBridge()?new Kekule.Render.ChemObjPainter(this.getRenderType(),e||this.getChemObj(),this.getDrawBridge()):null;return this.setPropStoreFieldValue("painter",r),r&&r.addEventListener("draw",this._reactChemObjDrawBind),r},isRenderable:function(){return!(!this.getDrawBridge()||!this.getDrawContext())},chemObjChanged:function(e,t){this.doLoad(e),this.getResetAfterLoad()&&t&&this.resetDisplay()},load:function(e){this.setChemObj(e)},doLoad:function(e,t){this._doLoadOnObj(e)},_doLoadOnObj:function(e,t){var r=t&&t.refreshOnly;this.clearSubViews(),this.refitDrawContext(!0),this.setPropStoreFieldValue("chemObjLoaded",!1);try{if(e){var i=this.createNewPainter(e);i&&i.setRenderConfigs(this.getRenderConfigs()),this.repaint(),this.setPropStoreFieldValue("chemObjLoaded",!0),r||this.invokeEvent("load",{obj:e})}else this.clearContext(),r||this.invokeEvent("load",{obj:e})}catch(e){this.clearContext(),this.reportException(e)}finally{this.doLoadEnd(this.getChemObj())}},doLoadEnd:function(e){},loadFromData:function(e,t,r,i,o){try{var n;return e?(i?n=Kekule.IO.loadFormatData(e,i):(t||r)&&(n=Kekule.IO.loadTypedData(e,t,r)),n?o?this._tryAutoGenerateChemObjCoordsForLoading(n,o):this._tryAutoGenerateChemObjCoordsAndLoad(n):Kekule.error(Kekule.$L("ErrorMsg.LOAD_CHEMDATA_FAILED")),n):(this.setChemObj(null),null)}catch(e){this.reportException(e)}},loadFromFile:function(e){if(e){var t=this;try{Kekule.IO.loadFileData(e,function(e,r){r&&t._tryAutoGenerateChemObjCoordsAndLoad(e)})}catch(e){this.reportException(e)}}else this.setChemObj(null)},getSavingTargetObj:function(){return this.getChemObj()},saveData:function(e,t,r){r=r||this.getSavingTargetObj();this.prepareSaveData(r);var i=Kekule.IO.ChemDataWriterManager.getWriterByFormat(e,null,r);if(i){if(this._needToCanonicalizeBeforeSaving()&&this.getDisplayerConfigs().getIoConfigs().getCanonicalizeBeforeSave()&&r.standardize)(r=this._cloneSavingTargetObj(r)).standardize(this.getStandardizationOptions());if(!t)t=Kekule.IO.DataFormatsManager.getFormatInfo(e).dataType;return i.writeData(r,t,e)}return Kekule.error(Kekule.$L("ErrorMsg.NO_SUITABLE_WRITER_FOR_FORMAT")),null},_cloneSavingTargetObj:function(e){return e.clone?e.clone(!0):e},_needToCanonicalizeBeforeSaving:function(){return!1},prepareSaveData:function(e){},_molNeedAutoCoordGeneration:function(e,t){return e instanceof Kekule.StructureFragment&&e.getNodeCount()>0&&!e.nodesHasCoordOfMode(this.getCoordMode(),this.getAllowCoordBorrow(),!0)},_isCoordGeneratorAvailable:function(e){if(Kekule.Calculator&&Kekule.Calculator.Services){var t=e===Kekule.CoordMode.COORD3D?Kekule.Calculator.Services.GEN3D:Kekule.Calculator.Services.GEN2D;return Kekule.Calculator.hasService(t)}return!1},canAutoGenerateCoordForChemObj:function(e,t){return e||(e=this.getChemObj()),Kekule.ObjUtils.isUnset(t)&&(t=this.getCoordMode()),e&&e instanceof Kekule.StructureFragment&&e.hasCtab()&&Kekule.Calculator&&Kekule.Calculator.generateStructure&&this._isCoordGeneratorAvailable(t)},_tryAutoGenerateChemObjCoords:function(e,t,r){if(Kekule.ObjUtils.isUnset(t)&&(t=this.getCoordMode()),this.canAutoGenerateCoordForChemObj(e,t)){var i=t===Kekule.CoordMode.COORD3D?Kekule.Calculator.Services.GEN3D:Kekule.Calculator.Services.GEN2D;try{Kekule.Calculator.generateStructure(e,i,{modifySource:!0},function(e){r(e)},function(t){r(e),Kekule.error(t)})}catch(t){r(e)}}else r(e)},_tryAutoGenerateChemObjCoordsForLoading:function(e,t){this.getDisplayerConfigs().getIoConfigs().getAutoGenerateCoordsAfterLoad()?this._molNeedAutoCoordGeneration(e,this.getCoordMode())?this._tryAutoGenerateChemObjCoords(e,null,t):t(e):t(e)},_tryAutoGenerateChemObjCoordsAndLoad:function(e){var t=this;this._tryAutoGenerateChemObjCoordsForLoading(e,function(e){t.setChemObj(e)})},autoGenerateChemObjCoords:function(e,t,r){var i=!t&&Kekule.ObjUtils.isUnset(r);t||(t=this.getChemObj()),Kekule.ObjUtils.isUnset(r)&&(r=this.getCoordMode());var o=this;return this._tryAutoGenerateChemObjCoords(t,r,function(t){i&&o.load(t),e&&e(t)}),this},getDrawClientDimension:function(){return Kekule.HtmlElementUtils.getElemClientDimension(this.getCoreElement())},setDrawDimension:function(e,t){this.setDimension(e,t)},calcDrawBaseCoord:function(e,t){var r,i,o=this.getDrawContext(),n=this.getPainter();if(!this._isContinuousRepainting&&t&&this.getActualAutoSize()){var a=this.getPadding()||0,s=n.estimateScreenBox(o,r,e,this.getAllowCoordBorrow());if(s){var l=s.x2-s.x1+2*a,d=s.y2-s.y1+2*a;this.changeContextDimension({width:l,height:d}),this.setDrawDimension(l,d),i={width:l,height:d},r={x:l/2,y:d/2}}}else if(!(r=e?e.baseCoord:null)){var u=this.getDrawClientDimension();r={x:u.width/2,y:u.height/2};var c=this.getBaseCoordOffset();c&&(r=Kekule.CoordUtils.add(r,c))}return{baseCoord:r=this.getDrawBridge().transformScreenCoordToContext(o,r),baseCoordPos:Kekule.Render.CoordPos.CENTER,newWidgetDimension:i}},getActualDrawOptions:function(){return this.getDrawOptions()},getActualAutoSize:function(){return this.getAutoSize()&&this.allowAutoSize()&&!this.getAutofit()},calcDrawParams:function(e,t){var r=this.getActualDrawOptions();e&&(r=Object.extend(r,e));var i=this.calcDrawBaseCoord(r,t);return{drawOptions:r,baseCoord:i.baseCoord,baseCoordPos:i.baseCoordPos,newWidgetDimension:i.newWidgetDimension}},_savePainterInitialRenderTransformOptions:function(e,t){var r=t.getActualInitialRenderTransformOptions(e);this._contextTransformOpsMap.set(e,r)},requestRepaint:function(e){this._requestRepainting={overrideOptions:e};var t=this;(function(){t._requestRepainting&&t._repaintCore(t._requestRepainting.overrideOptions),t._requestRepainting=null}).delay(0)},repaint:function(e){if(!this.isUpdating()){try{var t=this._repaintCore(e)}finally{this._requestRepainting=null}return t}this._requestRepainting={overrideOptions:e}},_repaintCore:function(e){if(this.getElement()&&!this.isPainting()&&this.isRenderable()){this.beginPaint();try{if(this.getInheritedRenderBackgroundColor()){var t=this.getComputedStyle("backgroundColor");this.backgroundColorChanged(!0,t||null)}else this.backgroundColorChanged(!0);if(e&&e.doNotClear||this.clearContext(),!this.getChemObj())return;var r,i,o=this.getPainter(),n=this.getDrawContext(),a=!0;if(e&&e.preserveTransformOptions?(i=this._contextTransformOpsMap.get(n)||null,a=!1,r=this.calcDrawParams(i,!0)):r=this.calcDrawParams(e,!0),this._lastBaseCoord=r.baseCoord,this.getInheritedRenderColor()){var s=this.getComputedStyle("color");r.drawOptions.color=s}else r.drawOptions.color=null;this.getEnableCustomCssProperties()&&this._applyCustomCssProps(r.drawOptions),this._setupRenderingEnvironment(n,this.getDrawBridge()),o.draw(n,r.baseCoord,r.drawOptions),a&&this._savePainterInitialRenderTransformOptions(n,o),this.invokeEvent("repaint",{obj:this.getChemObj()})}finally{this.endPaint()}}},_setupRenderingEnvironment:function(e,t){var r=this.getDisplayerEnvironmentConfigs();if(r.getAntialias&&r.getAntialias()&&(o=r.getAntialiasBlurRatio&&r.getAntialiasBlurRatio()||0)){var i=this.getRenderConfigs().getLengthConfigs(),o=r.getAntialiasBlurRatio()||0,n=i.getActualLength("bondLineWidth")*o||0,a=t||this.getDrawBridge();a.setFilter&&a.clearFilter&&(n?a.setFilter(e,"blur("+n+"px)"):a.clearFilter(e))}},beginPaint:function(){this._paintFlag||(this._paintFlag=0),++this._paintFlag},endPaint:function(){this._paintFlag>0&&--this._paintFlag,this._paintFlag<0&&(this._paintFlag=0)},isPainting:function(){return this._paintFlag>0},_reactChemObjDraw:function(e){var t=e.obj;t===this.getChemObj()&&this.chemObjRendered(t,e.renderOptions||{})},chemObjRendered:function(e,t){},getBackgroundColorOfType:function(e){return this._bgColorMap[e.toString()]},setBackgroundColorOfType:function(e,t){this._bgColorMap[t.toString()]=e,t===this.getRenderType()&&this.setBackgroundColor(e)},backgroundColorChanged:function(e,t){var r=t;void 0===r&&(r=this.getBackgroundColor()),"transparent"===r&&(r=null);var i=this.getDrawBridge();i&&i.setClearColor&&(i.setClearColor(this.getDrawContext(),r),e||this.requestRepaint())},_getApplicableCustomCssPropNames:function(){return{r2d:["unitLength","moleculeDisplayType","hydrogenDisplayLevel","showCharge","chargeMarkFontSize","chargeMarkMargin","chemMarkerFontSize","chemMarkerMargin","distinguishSingletAndTripletRadical","fontSize","fontFamily","supFontSizeRatio","subFontSizeRatio","superscriptOverhang","subscriptOversink","bondLineWidth","boldBondLineWidth","hashSpacing","multipleBondSpacingRatio","multipleBondSpacingAbs","multipleBondMaxAbsSpacing","bondArrowLength","bondArrowWidth","bondWedgeWidth","bondWedgeHashMinWidth","bondLengthScaleRatio","color","atomColor","bondColor","useAtomSpecifiedColor","opacity","fillColor","strokeColor","strokeWidth","atomRadius"],r3d:["displayMultipleBond","useVdWRadius","nodeRadius","connectorRadius","nodeRadiusRatio","connectorRadiusRatio","color","atomColor","bondColor","useAtomSpecifiedColor","hideHydrogens","bondSpliceMode"]}},_getRenderOptionDefinitionsHash:function(){if(!this.__$renderOptionDefinitionsHash__){this.__$renderOptionDefinitionsHash__={};var e,t,r=Kekule.Render.RenderOptionUtils.getOptionDefinitions(),i=Kekule.Render.Render3DOptionUtils.getOptionDefinitions();for(e=0,t=r.length;e<t;++e)this.__$renderOptionDefinitionsHash__[r[e].name]=r[e];for(e=0,t=i.length;e<t;++e)this.__$renderOptionDefinitionsHash__[i[e].name]=i[e]}return this.__$renderOptionDefinitionsHash__},_applyCustomCssProps:function(e){var t,r,i=this._getRenderOptionDefinitionsHash(),o=this._getApplicableCustomCssPropNames();for(t=0,r=o.r2d.length;t<r;++t){var n=o.r2d[t];this._applyCustomCssPropValue(n,i,e)}if(this.getRenderType()===Kekule.Render.RendererType.R3D)for(t=0,r=o.r3d.length;t<r;++t){n=o.r3d[t];this._applyCustomCssPropValue(n,i,e)}},_applyCustomCssPropValue:function(e,t,r){if(t[e]){var i=this.getComputedCustomStyle(e);if(i&&i.trim){i=i.trim();var o=Kekule.StrUtils.convertToType(i,t.dataType);Kekule.ObjUtils.notUnset(o)&&(r[e]=o)}}},drawOptionChanged:function(){this.repaint()},geometryOptionChanged:function(){var e=this.getPainter(),t=this.getDrawOptions();if(e&&e.supportGeometryOptionChange()){var r=this.getDrawContext();e.changeGeometryOptions(r,t.baseCoord||this._lastBaseCoord,t),this._savePainterInitialRenderTransformOptions(r,e),this.invokeEvent("repaint",{obj:this.getChemObj()})}else this.drawOptionChanged()},beginContinuousRepainting:function(){this._isContinuousRepainting=!0},endContinuousRepainting:function(){this._isContinuousRepainting&&(this._isContinuousRepainting=!1,this.repaint())},resetDisplay:function(){var e=this.getDrawOptions();return e.zoom=this.getInitialZoom()||1,e.rotateX=0,e.rotateY=0,e.rotateZ=0,e.rotateAngle=0,e.rotateAxisVector=null,e.rotateMatrix=null,this.setBaseCoordOffset(null),this.geometryOptionChanged(),this},getCurrZoom:function(){return this.getDrawOptions().zoom||1},zoomTo:function(e,t,r){return this.getDrawOptions().zoom=e,t||this.geometryOptionChanged(),this},zoomIn:function(e,t){var i=this.getCurrZoom(),o=r.getNextZoomInRatio(i,e||1);return this.zoomTo(o,null,t)},zoomOut:function(e,t){var i=this.getCurrZoom(),o=r.getNextZoomOutRatio(i,e||1);return this.zoomTo(o,null,t)},resetZoom:function(e){return this.zoomTo(this.getInitialZoom()||1,null,e)},getDefaultMoleculeDisplayType:function(e){return e===Kekule.Render.RendererType.R3D?Kekule.Render.Molecule3DDisplayType.DEFAULT:Kekule.Render.Molecule2DDisplayType.DEFAULT},getCurrMoleculeDisplayType:function(){var e=this.getDrawOptions().moleculeDisplayType;return e||(e=this.getDefaultMoleculeDisplayType(this.getRenderType())),e},exportToDataUri:function(e,t){return this.getDrawBridge().exportToDataUri(this.getDrawContext(),e,t)},createConfigurator:function(){var e=this.tryApplySuper("createConfigurator");return e.addEventListener("configChange",function(e){this.repaint()},this),e},clearBoundMap:function(){this.getBoundInfoRecorder().clear(this.getDrawContext())},findTopmostBoundInfo:function(e,t){if(e&